# Maintainer: Maksim Bondarenkov <maksapple2306@gmail.com>

_realname=zed
pkgbase=mingw-w64-${_realname}
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=0.174.6
pkgrel=1
pkgdesc="A high-performance, multiplayer code editor (mingw-w64)"
arch=('any')
mingw_arch=('mingw64' 'ucrt64' 'clang64')
url='https://zed.dev'
msys2_repository_url='https://github.com/zed-industries/zed'
msys2_documentation_url='https://zed.dev/docs'
license=('spdx:AGPL-3.0-or-later AND Apache-2.0 AND GPL-3.0-or-later')
msys2_references=(
  'anitya: 373275'
  'archlinux: zed'
  'aur'
  'gentoo: app-editors/zed'
)
depends=("${MINGW_PACKAGE_PREFIX}-libgit2"
         "${MINGW_PACKAGE_PREFIX}-nodejs"
         "${MINGW_PACKAGE_PREFIX}-zstd")
makedepends=("${MINGW_PACKAGE_PREFIX}-rust"
             "${MINGW_PACKAGE_PREFIX}-cmake"
             "${MINGW_PACKAGE_PREFIX}-pkgconf"
             "${MINGW_PACKAGE_PREFIX}-protobuf"
             #"${MINGW_PACKAGE_PREFIX}-sqlite3"
             "${MINGW_PACKAGE_PREFIX}-cargo-about"
             "${MINGW_PACKAGE_PREFIX}-lld"
             "${MINGW_PACKAGE_PREFIX}-rust-bindgen"
             "${MINGW_PACKAGE_PREFIX}-nasm"
             'git')
optdepends=("${MINGW_PACKAGE_PREFIX}-ollama: provides LLMs for assistance panel"
            "${MINGW_PACKAGE_PREFIX}-clang-tools-extra: for a better C/C++ language support"
            "${MINGW_PACKAGE_PREFIX}-rust-analyzer: for a better Rust language support"
            "${MINGW_PACKAGE_PREFIX}-ruff: for 'Ruff' extension")
# mesonlsp isn't available in CLANG environments
if [[ ${MSYSTEM} != CLANG* ]]; then
  optdepends+=("${MINGW_PACKAGE_PREFIX}-mesonlsp: for 'Meson' extension")
fi
source=("git+${msys2_repository_url}.git#tag=v${pkgver}"
        "git+https://github.com/aws/aws-lc-rs.git#tag=aws-lc-sys/v0.25.0"
        "zstd-sys.tar.gz::https://crates.io/api/v1/crates/zstd-sys/2.0.13+zstd.1.5.6/download"
        "aws-lc-clang-build.patch"
        "zed-dont-vendor-cargo-about.patch"
        "zstd-sys-remove-statik.patch")
sha256sums=('d19157e4910c373bb62cb953d63d725449876110b6b9afb7d9139dd96f946996'
            'f7ef2e96d54e33481b5e4838ee3336a9382b8b7a24767ca47fd39069aa466723'
            '38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa'
            '2e3d7ef6fdb3ef8a2ec11207e8120ea34553888116ea8a032cb425a8a6261c39'
            'b126b7a9e3cc8d3d68c49dbfc184d54691b10172dbfd3272d4c2f43424cfca5b'
            '48f4900ceb02d3aaf9a1020f33d56629156e96759f456c0e7ca18bfcf910767b')

prepare() {
  cd "${_realname}"

  # fetch submodules for aws-lc-rs locally
  git -C ../aws-lc-rs submodule update --init --recursive

  rm rust-toolchain.toml

  # use system cargo about to generate license file
  patch -Np1 -i "../zed-dont-vendor-cargo-about.patch"
  # link system deps dynamically
  patch -d "../zstd-sys-2.0.13+zstd.1.5.6" -i "../zstd-sys-remove-statik.patch"
  # do not use pthread for clang
  if [[ ${CC} == clang ]]; then
    patch -d "../aws-lc-rs/aws-lc-sys/aws-lc" -p1 -i "${srcdir}/aws-lc-clang-build.patch"
  fi
  # use patched *-sys crates
  sed -i '/\[patch\.crates-io\]/a zstd-sys = { path = "../zstd-sys-2.0.13+zstd.1.5.6" }\naws-lc-sys = { path = "../aws-lc-rs/aws-lc-sys" }' Cargo.toml

  # change git config so `pet*` crates would be fetched without error. requires Windows registry
  # changes, see
  # https://github.com/zed-industries/zed/blob/main/docs/src/development/windows.md#build-fails-path-too-long
  # for details
  if test true != "$(git config core.longpaths)"; then
    git config --global core.longpaths true
  fi

  cargo update -p aws-lc-sys -p zstd-sys
  cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')"
  # generate license for whole Zed contents
  sh script/generate-licenses
}

build() {
  cd "${_realname}"

  export PROTOC="${MINGW_PREFIX}/bin/protoc.exe"
  export PROTOC_INCLUDE="${MINGW_PREFIX}/include"
  export OPENSSL_NO_VENDOR=1
  export LIBGIT2_NO_VENDOR=1
  export PKG_CONFIG_ALL_DYNAMIC=1
  export ZSTD_SYS_USE_PKG_CONFIG=1
  export WINAPI_NO_BUNDLED_LIBRARIES=1
  # see https://github.com/zed-industries/zed/issues/17695
  #export LIBSQLITE3_SYS_USE_PKG_CONFIG=1
  export ZED_UPDATE_EXPLANATION='Updates are handled by pacman'
  export CARGO_PROFILE_RELEASE_DEBUG=0
  export RELEASE_VERSION="${pkgver} (Rev${pkgrel}, Built by MSYS2 project)"
  # should be synced with .cargo/config.toml. use lld linker to fix keyboard shortcuts
  # https://github.com/msys2/MINGW-packages/issues/22071
  export RUSTFLAGS="$RUSTFLAGS -C link-arg=-fuse-ld=lld -C symbol-mangling-version=v0
    -C target-feature=-crt-static --cfg tokio_unstable --cfg windows_slim_errors"

  # set path to aws-lc include explicitly: https://github.com/aws/aws-lc-rs/issues/696
  export CFLAGS="$CFLAGS -I$(cygpath -am ${srcdir}/aws-lc-rs/aws-lc-sys/aws-lc/include)"

  cargo build --release --frozen -p zed
}

check() {
  cd "${_realname}"

  cargo test --release --frozen -p zed
}

package() {
  install -Dm755 "${_realname}/target/release/zed" "${pkgdir}${MINGW_PREFIX}/bin/zed"
  install -Dm644 "${_realname}/assets/licenses.md" "${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}/LICENSE.md"
}
