# Maintainer:

_realname=openai-codex
pkgbase=mingw-w64-${_realname}
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=0.120.0
pkgrel=1
pkgdesc="Lightweight coding agent that runs in your terminal (mingw-w64)"
arch=('any')
mingw_arch=('ucrt64' 'clang64' 'clangarm64')
url='https://github.com/openai/codex'
msys2_repository_url='https://github.com/openai/codex'
license=('spdx:Apache-2.0')
depends=("${MINGW_PACKAGE_PREFIX}-icu"
         "${MINGW_PACKAGE_PREFIX}-v8"
         "${MINGW_PACKAGE_PREFIX}-cc-libs"
         "${MINGW_PACKAGE_PREFIX}-xz"
         "${MINGW_PACKAGE_PREFIX}-zstd")
makedepends=("${MINGW_PACKAGE_PREFIX}-rust"
             "${MINGW_PACKAGE_PREFIX}-clang"
             "${MINGW_PACKAGE_PREFIX}-abseil-cpp"
             "${MINGW_PACKAGE_PREFIX}-pkgconf"
             "${MINGW_PACKAGE_PREFIX}-openssl"
             "${MINGW_PACKAGE_PREFIX}-git")
optdepends=(
  "${MINGW_PACKAGE_PREFIX}-ripgrep: accelerated large-repo search"
  "${MINGW_PACKAGE_PREFIX}-git: allow for repository actions"
)
checkdepends=("${MINGW_PACKAGE_PREFIX}-clang"
              "${MINGW_PACKAGE_PREFIX}-git"
              "${MINGW_PACKAGE_PREFIX}-dotslash")
options=('!strip')
source=("${url}/archive/rust-v${pkgver}/${_realname}-${pkgver}.tar.gz"
        "zstd-sys.tar.gz::https://crates.io/api/v1/crates/zstd-sys/2.0.16+zstd.1.5.7/download"
        "v8.tar.gz::https://crates.io/api/v1/crates/v8/146.4.0/download"
        "001-zstd-sys-remove-statik.patch"
        "002-rusty-v8-dyn.patch")
sha256sums=('b25b5acb4cd610f0fa4142812d7cdaf1afaa644f5bc5d758ddfe627706cc5fa1'
            '91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748'
            'd97bcac5cdc5a195a4813f1855a6bc658f240452aac36caa12fd6c6f16026ab1'
            '48f4900ceb02d3aaf9a1020f33d56629156e96759f456c0e7ca18bfcf910767b'
            '2e6f359c6597320f977d0db3b8a2ef310f9dc1a9bcba8f26d256b60321b8157d')

_env() {
  export OPENSSL_NO_VENDOR=1
  export ZSTD_SYS_USE_PKG_CONFIG=1
  # Reducing build time for around 10 minutes
  export CARGO_PROFILE_RELEASE_LTO=thin
  if [[ ${MSYSTEM} == CLANG* ]]; then
    export CXXSTDLIB=c++
  else
    export CXXSTDLIB=stdc++
  fi
}

prepare() {
  cd codex-rust-v${pkgver}/codex-rs

  patch -d "${srcdir}"/zstd-sys-2.0.16+zstd.1.5.7 -p1 -i "${srcdir}"/001-zstd-sys-remove-statik.patch
  patch -d "${srcdir}"/v8-146.4.0 -p1 -i "${srcdir}"/002-rusty-v8-dyn.patch
  sed -i \
    -e '/\[patch\.crates-io\]/a zstd-sys.path = "../../zstd-sys-2.0.16+zstd.1.5.7"' \
    -e '/\[patch\.crates-io\]/a v8.path = "../../v8-146.4.0"' \
    Cargo.toml

  rm rust-toolchain.toml
  cargo update -p zstd-sys -p v8 --config='net.git-fetch-with-cli=true'
  cargo fetch --locked --target "${RUST_CHOST}"
}

build() {
  cd codex-rust-v${pkgver}/codex-rs

  _env
  cargo build --release --frozen -p codex-cli -p codex-responses-api-proxy
}

package() {
  cd codex-rust-v${pkgver}/codex-rs

  install -Dm755 -t "${pkgdir}${MINGW_PREFIX}"/bin \
    target/release/codex \
    target/release/codex-responses-api-proxy

  local _complete="${pkgdir}${MINGW_PREFIX}/bin/codex completion"
  install -Dm644 <($_complete bash) "${pkgdir}${MINGW_PREFIX}/share/bash-completion/completions/codex"
  install -Dm644 <($_complete zsh) "${pkgdir}${MINGW_PREFIX}/share/zsh/site-functions/_codex"
  install -Dm644 <($_complete fish) "${pkgdir}${MINGW_PREFIX}/share/fish/vendor_completions.d/codex.fish"
  install -Dm644 ../LICENSE "${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}/LICENSE"
}
