# Maintainer: loathingkernel <loathingkernel _a_ gmail _d_ com>
# Maintainer: Peter Jung <ptr1337@archlinux.org>
# Contributor: Sven-Hendrik Haase <svenstaro@archlinux.org>
# Contributor: Jan "heftig" Steffens <jan.steffens@gmail.com>
# Contributor: Eduardo Romero <eduardo@archlinux.org>
# Contributor: Giovanni Scafora <giovanni@archlinux.org>

pkgname=wine-cachyos
_srctag=10.0-20260425
pkgver=${_srctag//-/.}
_geckover=2.47.4
_monover=10.4.1
_xaliaver=0.4.8
pkgrel=1
epoch=2

_pkgbasever=${pkgver/rc/-rc}
_winever=$_pkgbasever
#_winever=${_pkgbasever%.*}

source=(wine-cachyos::git+https://github.com/CachyOS/wine-cachyos.git#tag=cachyos-${_srctag}-wine
        https://dl.winehq.org/wine/wine-gecko/${_geckover}/wine-gecko-${_geckover}-x86{,_64}.tar.xz
        https://github.com/madewokherd/wine-mono/releases/download/wine-mono-${_monover}/wine-mono-${_monover}-x86.tar.xz
        https://github.com/madewokherd/xalia/releases/download/xalia-${_xaliaver}/xalia-${_xaliaver}-net48-mono.zip
        30-win32-aliases.conf
        wine-binfmt.conf
        ntsync.conf)
source+=(
)
noextract=(
    xalia-${_xaliaver}-net48-mono.zip
)
validpgpkeys=(5AC1A08B03BD7A313E0A955AF5E6E9EEB9461DD7
              DA23579A74D4AD9AF9D3F945CEFAC8EAAF17519D)

pkgdesc="A compatibility layer for running Windows programs, with extra CachyOS flavour"
url="https://github.com/CachyOS/wine-cachyos"
arch=(x86_64)
options=(!staticlibs !lto !debug pestrip)
license=(LGPL-2.1-or-later)
depends=(
  attr
  desktop-file-utils
  fontconfig
  freetype2
  libgcc
  gettext
  glib2
  glibc
  libpcap
  libunwind
  libx11
  libxcursor
  libxext
  libxkbcommon
  libxi
  libxrandr
  systemd-libs
  wayland
)
makedepends=(
  alsa-lib
  ffmpeg
  git
  gnutls
  gst-plugins-base-libs
  libcups
  libgphoto2
  libpulse
  libva
  libxcomposite
  libxinerama
  libxxf86vm
  mesa
  mingw-w64-gcc
  opencl-headers
  opencl-icd-loader
  pcsclite
  perl
  python
  samba
  sane
  sdl2
  unixodbc
  unzip
  v4l-utils
  vulkan-headers
  vulkan-icd-loader
)
optdepends=(
  alsa-lib
  alsa-plugins
  cups
  dosbox
  ffmpeg
  gnutls
  gst-plugins-bad
  gst-plugins-base
  gst-plugins-base-libs
  gst-plugins-good
  gst-plugins-ugly
  gstreamer
  libgphoto2
  libpulse
  libusb
  libva
  libxcomposite
  libxinerama
  opencl-icd-loader
  pcsclite
  perl
  samba
  sane
  sdl2
  unixodbc
  v4l-utils
  vulkan-icd-loader
)
optdepends+=(
  NTSYNC-MODULE
)
provides=("wine=10.0" 'wine-mono' 'wine-gecko')
conflicts=('wine' 'wine-mono' 'wine-gecko')
install=wine.install

prepare() {
  # Get rid of old build dirs
  rm -rf $pkgname-64-build
  mkdir $pkgname-64-build

  cd $pkgname
  git config user.email "wine@cachyos.org"
  git config user.name "wine cachyos"
  git tag wine-${_srctag} --annotate -m "$pkgver" --force
  ./tools/make_requests
  ./tools/make_specfiles
  ./dlls/winevulkan/make_vulkan -x vk.xml -X video.xml
  autoreconf -fiv
  rm -rf autom4te.cache
}

build() {

  local -a split=($CFLAGS)
  local -A flags
  for opt in "${split[@]}"; do flags["${opt%%=*}"]="${opt##*=}"; done
  local march="nocona"
  local mtune="core-avx2"

  # From Proton
  OPTIMIZE_FLAGS="-O2 -march=$march -mtune=$mtune -mfpmath=sse -pipe"
  OPTIMIZE_FLAGS+=" -mno-avx -mno-avx2 -mno-avx512f -fvect-cost-model=cheap -fipa-pta"
  SANITY_FLAGS="-fwrapv -fno-strict-aliasing -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64"
  DEBUG_FLAGS="-ffunction-sections -fdata-sections -fno-omit-frame-pointer"
  WARNING_FLAGS="-Wno-incompatible-pointer-types"
  STRIP_FLAGS="-s"
  COMMON_FLAGS="$OPTIMIZE_FLAGS $SANITY_FLAGS $DEBUG_FLAGS $WARNING_FLAGS $STRIP_FLAGS"
  #LTO_CFLAGS="-fuse-linker-plugin -fdevirtualize-at-ltrans -flto-partition=one -flto -Wl,-flto"

  COMMON_LDFLAGS="-Wl,-O1,--sort-common,--as-needed"
  #LTO_LDFLAGS="$LTO_CFLAGS"

  # Disable assertions
  #export CPPFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -DNDEBUG -D_NDEBUG"

  export LDFLAGS="$COMMON_LDFLAGS $LTO_LDFLAGS"
  export CROSSLDFLAGS="$COMMON_LDFLAGS -Wl,--file-alignment,4096"

  export CFLAGS="$COMMON_FLAGS -mcmodel=small $LTO_CFLAGS"
  export CXXFLAGS="$COMMON_FLAGS -mcmodel=small -std=c++17 $LTO_CFLAGS"
  export CROSSCFLAGS="$COMMON_FLAGS"
  export CROSSCXXFLAGS="$COMMON_FLAGS -std=c++17"
  export PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/share/pkgconfig"
  cd "$srcdir/$pkgname-64-build"
  ../$pkgname/configure \
    --prefix=/usr \
    --libdir=/usr/lib \
    --with-x \
    --with-wayland \
    --with-gstreamer \
    --with-freetype \
    --with-mingw \
    --with-alsa \
    --with-ffmpeg \
    --without-oss \
    --disable-lsteamclient \
    --disable-tests \
    --enable-archs=x86_64,i386 \
    --enable-build-id

  make
}

package() {
  cd "$srcdir/$pkgname-64-build"
  make prefix="$pkgdir/usr" \
    libdir="$pkgdir/usr/lib" \
    dlldir="$pkgdir/usr/lib/wine" install

  # Font aliasing settings for Win32 applications
  install -d "$pkgdir"/usr/share/fontconfig/conf.{avail,default}
  install -m644 "$srcdir/30-win32-aliases.conf" "$pkgdir/usr/share/fontconfig/conf.avail"
  ln -s ../conf.avail/30-win32-aliases.conf "$pkgdir/usr/share/fontconfig/conf.default/30-win32-aliases.conf"
  install -Dm 644 "$srcdir/wine-binfmt.conf" "$pkgdir/usr/lib/binfmt.d/wine.conf"

  i686-w64-mingw32-strip --strip-unneeded "$pkgdir"/usr/lib/wine/i386-windows/*.{dll,exe,cpl}
  x86_64-w64-mingw32-strip --strip-unneeded "$pkgdir"/usr/lib/wine/x86_64-windows/*.{dll,exe,cpl}

  # Load ntsync module
  install -Dm644 "$srcdir/ntsync.conf" "$pkgdir/usr/lib/modules-load.d/10-$pkgname.conf"

  # Install wine-gecko
  cd "$srcdir"
  install -d -m755 "$pkgdir"/usr/share/wine/gecko/
  cp -dr --no-preserve='ownership' wine-gecko-${_geckover}-x86{,_64} "$pkgdir"/usr/share/wine/gecko/

  # Install wine-mono
  cd "$srcdir"
  install -d -m755 "$pkgdir"/usr/share/wine/mono
  cp -r -a --no-preserve='ownership' wine-mono-${_monover} "$pkgdir"/usr/share/wine/mono

  # Install xalia
  cd "$srcdir"
  install -d -m755 "$pkgdir"/usr/share/xalia
  unzip xalia-${_xaliaver}-net48-mono.zip -d "$pkgdir"/usr/share/xalia
  # Fix permissions
  chmod -R go-w "$pkgdir"/usr/share/xalia
}

# vim:set ts=8 sts=2 sw=2 et:
b2sums=('0b3f2fcc68b5f1922f4bd3381f9affdd985b06759ed9402a3685659ccc693b615842a5b70317aa98341871fa942263442ba539f33bfe6cbfd7f0db53c7b05778'
        '2a73c12585b502ae11188482cbc9fb1f45f95bfe4383a7615011104b132f4845f9813d01fb40277e1934fab5f1b35ab40b4f4a66a9967463dd1d666a666904e9'
        '62856a88266b4757602c0646e024f832974a93f03b9df253fd4895d4f11a41b435840ad8f7003ec85a0d8087dec15f2e096dbfb4b01ebe4d365521e48fd0c5c0'
        '9ca53dee272470806432c61587080e6dc04fd9eaafde4f55f5d57d5557ec6859d77a74b74c9e3f472da04b8ace9609f0927573faab368a25249c76b3e37e65c1'
        '0780740dd2f07de5c00e0c8d1823bc24e31954d6ccb7875678957aea5e095d5eb8dc13ea9cc56a00abfccdcad59e21150e49fe515815f50e0bd38b50f6ec940c'
        '45db34fb35a679dc191b4119603eba37b8008326bd4f7d6bd422fbbb2a74b675bdbc9f0cc6995ed0c564cf088b7ecd9fbe2d06d42ff8a4464828f3c4f188075b'
        'e9de76a32493c601ab32bde28a2c8f8aded12978057159dd9bf35eefbf82f2389a4d5e30170218956101331cf3e7452ae82ad0db6aad623651b0cc2174a61588'
        '964a3ba277821e570aec2127f0d1ae9898da6976c360deb6b196345a50bd3c2c55cb399527507006d8fddef868069032a30b083f23987d5050f185c74dd9de35')
