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

PortSystem          1.0
PortGroup           active_variants 1.1
PortGroup           legacysupport 1.1
PortGroup           meson 1.0

# O_CLOEXEC
legacysupport.newest_darwin_requires_legacy 10

name                gtk4-devel
conflicts           gtk4
set my_name         gtk4

# GNOME project name
set gname           gtk

version             4.22.4
revision            0

categories          gnome
license             LGPL-2.1+
maintainers         {mascguy @mascguy} openmaintainer

description         ${my_name} is a companion library to GObject and Gtk+.
long_description    ${description}  It includes a collection of dazzling Gtk widgets, \
                    data structures, search engines, a shortcut engine, panels, \
                    desktop integration, and those missing pieces from common libraries \
                    that help you write cleaner and safer code
homepage            https://gitlab.gnome.org/GNOME/${gname}

set branch          [join [lrange [split ${version} .] 0 1] .]
master_sites        gnome:sources/${gname}/${branch}/
distname            ${gname}-${version}
dist_subdir         ${my_name}
use_xz              yes

checksums           rmd160  d3df67b8c92fb10233269d0d699b165d4c435920 \
                    sha256  51bd9f60c7d23a665a556c7364c21fb2e4e282566b3e7e092455e8f910330893 \
                    size    17006720

# Disable unexpected download of subprojects
meson.wrap_mode     nodownload

set python_branch   3.14
set python_version  [string map {. {}} ${python_branch}]
set port_ver_major  [lindex [split ${version} .] 0]

# Specify name of executable for 'rst2man'. MacPorts-specific.
patchfiles-append   patch-docs-rst2man.diff

# Don't allow build to promote warnings to errors. Full details in patchfile.
# See: https://trac.macports.org/ticket/67985
patchfiles-append   patch-meson-build-debug.diff

# allow for building below macOS 10.15
patchfiles-append   patch-fix-meson.build

post-patch {
    reinplace "s|@@PYTHON_VERSION@@|${python_branch}|g" \
        docs/reference/gtk/meson.build

    # build assumes python3 exists
    reinplace "s|^#!/usr/bin/env python3|#!${prefix}/bin/python${python_branch}|" \
        build-aux/meson/dist-data.py \
        build-aux/meson/gen-profile-conf.py \
        build-aux/meson/gen-visibility-macros.py \
        demos/gtk-demo/geninclude.py \
        gdk/gen-gdk-gresources-xml.py \
        gdk/broadway/gen-c-array.py \
        gsk/gen-gsk-gresources-xml.py \
        gsk/gpu/shaders/generate-glsl-interface.py \
        gsk/gpu/shaders/process-glsl-includes.py \
        gtk/gen-gtk-gresources-xml.py \
        gtk/gentypefuncs.py \
        testsuite/introspection/api.py \
        testsuite/tools/run-command \
        tools/generate-uac-manifest.py

    # these are slightly different
    reinplace "s|python3|${prefix}/bin/python${python_branch}|" \
        examples/squares.py
}

depends_build-append \
                    port:docbook-xml \
                    port:docbook-xsl-nons \
                    port:gettext \
                    path:lib/pkgconfig/gobject-introspection-1.0.pc:gobject-introspection \
                    path:bin/pkg-config:pkgconfig \
                    port:py${python_version}-docutils \
                    port:sassc

depends_lib-append  path:lib/pkgconfig/cairo.pc:cairo \
                    port:fribidi \
                    path:lib/pkgconfig/gdk-pixbuf-2.0.pc:gdk-pixbuf2 \
                    port:gettext-runtime \
                    path:lib/pkgconfig/glib-2.0.pc:glib2 \
                    port:graphene \
                    path:lib/pkgconfig/harfbuzz.pc:harfbuzz \
                    port:hicolor-icon-theme \
                    port:iso-codes \
                    port:libepoxy \
                    path:include/turbojpeg.h:libjpeg-turbo \
                    port:libpng \
                    path:lib/pkgconfig/librsvg-2.0.pc:librsvg \
                    path:lib/pkgconfig/pango.pc:pango \
                    port:tiff

license_noconflict  gobject-introspection

compiler.c_standard 2011
compiler.cxx_standard 2017

configure.args-append \
    -Dbuild-examples=false \
    -Dbuild-tests=false \
    -Dbuild-testsuite=false \
    -Ddocumentation=false \
    -Dintrospection=enabled \
    -Dman-pages=true \
    -Dmedia-gstreamer=disabled \
    -Dprint-cups=disabled \
    -Dvulkan=disabled

# gobject-introspection uses g-ir-scanner, which uses $CC from env
if {${universal_possible} && [variant_isset universal]} {
    foreach arch ${configure.universal_archs} {
        lappend merger_build_env(${arch}) \
                        "CC=${configure.cc} -arch ${arch}"
        lappend merger_destroot_env(${arch}) \
                        "CC=${configure.cc} -arch ${arch}"
    }
} else {
    build.env-append    "CC=${configure.cc} ${configure.cc_archflags}"
    destroot.env-append "CC=${configure.cc} ${configure.cc_archflags}"
}

variant broadway description {Enable the broadway (HTML5) gdk backend} {
    configure.args-append   -Dbroadway-backend=true
}

variant quartz conflicts x11 {
    require_active_variants path:lib/pkgconfig/cairo.pc:cairo quartz
    require_active_variants path:lib/pkgconfig/pango.pc:pango quartz

    configure.args-append   -Dx11-backend=false -Dmacos-backend=true

    if {${os.platform} eq "darwin" && ${os.major} < 16} {
        # Add AppKit wrapper header to compiler library paths
        configure.cflags-prepend        -isystem ${filespath}/old_appkit_compat
        configure.cxxflags-prepend      -isystem ${filespath}/old_appkit_compat
        configure.objcflags-prepend     -isystem ${filespath}/old_appkit_compat
        configure.objcxxflags-prepend   -isystem ${filespath}/old_appkit_compat
    }

    if {${os.platform} eq "darwin" && ${os.major} < 15} {
        depends_build
        depends_lib
        depends_run
        archive_sites
        known_fail yes
        pre-fetch {
            ui_error "${name} +quartz is not supported on this os version at present."
            return -code error {unsupported platform}
        }
    }

}

variant x11 conflicts quartz {
    require_active_variants path:lib/pkgconfig/cairo.pc:cairo x11
    require_active_variants path:lib/pkgconfig/pango.pc:pango x11

    patchfiles-append       patch-gtk4-x11.diff

    depends_lib-append      port:libxkbcommon-x11 \
                            port:mesa \
                            port:xorg-libXrandr \
                            port:xorg-libXcursor \
                            port:xorg-libXdamage \
                            port:xorg-libXinerama \
                            port:xorg-libXi

    configure.args-append   -Dx11-backend=true -Dmacos-backend=false
}

if {![variant_isset quartz]} {
    # it is somewhat illogical to default to a variant that cannot build, however
    # this matches the rest of macports and will tweak users to build as +quartz manually
    default_variants +x11
}

post-activate {
    system "${prefix}/bin/glib-compile-schemas ${prefix}/share/glib-2.0/schemas"
    system "${prefix}/bin/gtk4-update-icon-cache -f -t ${prefix}/share/icons/hicolor"
}

variant tests description "build tests" {
    depends_test-append     port:py${python_version}-gobject3

    # NB. Most of the tests fail if gtk4 has already been installed before running them
    configure.args-replace  -Dbuild-tests=false \
                            -Dbuild-tests=true
    configure.args-replace  -Dbuild-testsuite=false \
                            -Dbuild-testsuite=true

    test.run                yes
    test.cmd                meson
    test.target             test
}

livecheck.type      gnome
livecheck.name      ${gname}
livecheck.regex     "LATEST-IS-(${port_ver_major}\\.\\d*\[02468\](?:\\.\\d+)*)"
