# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4

PortSystem                  1.0
PortGroup                   github 1.0
PortGroup                   muniversal 1.1

# Keep the wine-stable, wine-devel and wine-crossover portfiles as similar as possible.

github.setup                wine-mirror wine 11.15 wine-
github.tarball_from         archive
name                        wine-devel
conflicts                   wine-stable wine-staging wine-crossover
revision                    0
platforms                   {darwin >= 19}
set branch                  [lindex [split ${version} .] 0].x
license                     LGPL-2.1+
categories                  emulators
supported_archs             x86_64
maintainers                 {@Gcenx gmail.com:gcenx83}
homepage                    https://www.winehq.org
dist_subdir                 wine

description \
    A Windows API implementation

long_description \
    Wine is a compatibility layer capable of running \
    Windows applications. \
    Instead of simulating internal Windows logic like \
    a virtual machine or emulator, Wine translates \
    Windows API calls into POSIX calls on-the-fly, \
    eliminating the performance and memory penalties \
    of other methods and allowing you to cleanly \
    integrate Windows applications into your desktop.

checksums \
    ${distname}${extract.suffix} \
    rmd160  10fec8173d188ddd308496e42f0b28c0b070fda6 \
    sha256  c7b4da7f90ad9c66741465c96de064e633eec5cecd371789c35a315f2a369ebd \
    size    75445408

depends_build \
    bin:flex:flex \
    port:bison \
    port:gettext \
    port:mingw-w64 \
    path:bin/pkg-config:pkgconfig

depends_lib \
    path:lib/pkgconfig/gnutls.pc:gnutls \
    port:freetype \
    port:gettext-runtime \
    port:libpcap \
    port:libsdl2 \
    port:vulkan-loader

depends_run \
    path:lib/libMoltenVK.dylib:MoltenVK \
    port:mingw-w64-wine-gecko-2.47.4 \
    port:mingw-w64-wine-mono-11.2.0

patch.pre_args-replace -p0 -p1

# Upstream bug fixes here
patchfiles-append \
    upstream/0001-win32u-Enable-host-Vulkan-portability-enumeration.diff

# wine requires the program specified in INSTALL to create intermediate
# directories; /usr/bin/install doesn't.
# http://bugs.winehq.org/show_bug.cgi?id=35310
configure.install \
    ${worksrcpath}/tools/install-sh

configure.args.x86_64 \
    --enable-archs=i386,x86_64 \
    --enable-win64

configure.args \
    --without-alsa \
    --without-capi \
    --with-coreaudio \
    --with-cups \
    --without-dbus \
    --without-ffmpeg \
    --without-fontconfig \
    --with-freetype \
    --with-gettext \
    --without-gettextpo \
    --without-gphoto \
    --with-gnutls \
    --without-gssapi \
    --without-gstreamer \
    --without-inotify \
    --without-krb5 \
    --with-mingw \
    --without-netapi \
    --with-opencl \
    --without-opengl \
    --without-oss \
    --with-pcap \
    --with-pcsclite \
    --with-pthread \
    --without-pulse \
    --without-sane \
    --with-sdl \
    --without-udev \
    --without-usb \
    --without-v4l2 \
    --with-vulkan \
    --without-wayland \
    --without-x

configure.args-append \
    --disable-tests \
    --disable-winebth_sys

# We need to tell the linker to add MacPorts to the rpath stack.
configure.ldflags-append    -Wl,-rpath,${compiler.library_path}

# wine requires clang >= 3.8
# FSF GCC cannot compile code using Apple's "blocks" language extensions
compiler.blacklist-append   {*gcc*} {clang < 800} {macports-clang-3.*}

subport wine-staging {
    conflicts               wine-stable wine-devel wine-crossover
    set staging_version     ${version}
    set wine_staging_distfile v${staging_version}${extract.suffix}
    distfiles-append        ${wine_staging_distfile}:stagingsource
    master_sites-append     https://github.com/wine-staging/wine-staging/archive/:stagingsource
    worksrcdir              wine-${distname}
    extract.rename          no

    checksums-append \
        ${wine_staging_distfile} \
        rmd160  31a788dff50f7c81c0529fd64fea0596cf0954a7 \
        sha256  22d6d6b1940907457943ecf3fe5f06eeb70872bd91b99253661923758ab35864 \
        size    9333776

    depends_patch-append    port:autoconf

    # https://trac.macports.org/wiki/Python
    set py_ver              3.14
    set py_ver_nodot        [string map {. {}} ${py_ver}]
    depends_patch-append    port:python${py_ver_nodot}

    # Applying staging before other patchfiles
    pre-patch {
        system -W ${worksrcpath} \
            "${frameworks_dir}/Python.framework/Versions/${py_ver}/bin/python3 ${workpath}/wine-staging-${staging_version}/staging/patchinstall.py --all"
    }
}

variant gphoto description "Build ${subport} with support for digital cameras" {
    depends_lib-append      port:libgphoto2
    configure.args-replace  --without-gphoto --with-gphoto
}

variant ffmpeg description "Build ${subport} with FFmpeg-based implementation for the MF byte stream handlers" {
    # Use the same version of ffmpeg as gstreamer1-gst-libav
    set ffmpeg_ver          6
    depends_lib-append      port:ffmpeg${ffmpeg_ver}
    configure.args-replace  --without-ffmpeg --with-ffmpeg
    configure.pkg_config_path   ${prefix}/libexec/ffmpeg${ffmpeg_ver}/lib/pkgconfig

    notes-append "
        \n
        The new implementation can be enabled by setting the DWORD value:
        \n
        DisableGstByteStreamHandler = 1
        \n
        in the HKCU\Software\Wine\MediaFoundation registry key.
    "
}

variant gstreamer description "Build ${subport} with GStreamer, for multimedia support" {
    depends_lib-append      port:gstreamer1 port:gstreamer1-gst-plugins-base port:gstreamer1-gst-plugins-good \
        port:gstreamer1-gst-plugins-bad port:gstreamer1-gst-plugins-ugly port:gstreamer1-gst-libav
    configure.args-replace  --without-gstreamer --with-gstreamer
}

variant kerberos description "Build ${subport} with Kerberos, for network authentication protocol support" {
    depends_lib-append      port:kerberos5
    configure.args-replace  --without-krb5 --with-krb5
}

if {${os.major} >= 24} {
    # https://gitlab.winehq.org/wine/wine/-/merge_requests/5935#note_74758
    macosx_deployment_target    14.0
}

if {${os.arch} ne "arm"} {
    default_variants        +ffmpeg +gstreamer
}

triplet.add_build           cross
triplet.add_host            none

# macports-base injects a number of flags that now propagate to mingw-gcc this causes the build to fail since, wine-7.21
# https://gitlab.winehq.org/wine/wine/-/commit/b1f59bc679a8c2dea18a6789a5b9b1a1ae825129
compiler.limit_flags        yes
muniversal.arch_flag        no
muniversal.arch_compiler    yes
configure.ldflags-delete    -L${compiler.library_path}
configure.optflags          -O2
configure.env-append        "CROSSCFLAGS=${configure.optflags}"

# Were only installing wine not the development files
destroot.target             install-lib

post-destroot {
    set docdir ${prefix}/share/doc/${subport}
    xinstall -d ${destroot}${docdir}
    xinstall -m 0644 -W ${worksrcpath} \
        ANNOUNCE.md \
        AUTHORS \
        COPYING.LIB \
        LICENSE \
        README.md \
        ${destroot}${docdir}
}
