# -*- 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           meson 1.0
PortGroup           active_variants 1.1

name                gobject-introspection-devel
conflicts           gobject-introspection
set my_name         gobject-introspection

version             1.78.1
revision            1
epoch               1

categories          gnome
# library under LGPL-2+, tools under GPL-2+
license             {LGPL GPL-2+}
maintainers         {mascguy @mascguy} openmaintainer

description         GObject Introspection
long_description    Gobject Introspection acts as a bridge between low-level C+GObject code and \
                    a managed runtime (JavaScript, Python, Java, Lua, .NET, Scheme, etc.).
homepage            https://wiki.gnome.org/Projects/GObjectIntrospection

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

checksums           rmd160  3fda7e7ac0eb288335a4db69551fdf356fcc03b1 \
                    sha256  bd7babd99af7258e76819e45ba4a6bc399608fe762d83fde3cac033c50841bb4 \
                    size    1060296

# Disable unexpected download of subprojects
meson.wrap_mode     nodownload

set py_ver          3.12
set py_ver_nodot    [string map {. {}} ${py_ver}]

depends_build-append \
                    port:bison \
                    port:pkgconfig \
                    port:python${py_ver_nodot} \
                    port:py${py_ver_nodot}-cython

depends_lib-append \
                    path:lib/pkgconfig/cairo.pc:cairo \
                    path:lib/pkgconfig/glib-2.0.pc:glib2 \
                    port:libffi \
                    port:py${py_ver_nodot}-mako \
                    port:py${py_ver_nodot}-markdown \
                    port:py${py_ver_nodot}-setuptools

patchfiles-append   patch-fix-rpath-gir-typelib.diff
patchfiles-append   patch-fix-scanner-in-build-execution.diff
patchfiles-append   patch-fix-tools-python.diff

post-patch {
    reinplace "s|libcairo-gobject\\.2\\.dylib|${prefix}/lib/libcairo-gobject.2.dylib|g" ${worksrcpath}/gir/meson.build
    reinplace "s|@MP_LIB@|${prefix}/lib/|g" ${worksrcpath}/giscanner/shlibs.py
    reinplace "s|@MP_PYTHON_CMD@|${configure.python}|g" ${worksrcpath}/tools/meson.build
    reinplace "s|#!/usr/bin/env python3|#!${configure.python}|g" \
        ${worksrcpath}/misc/update-glib-annotations.py \
        misc/update-gtkdoc-tests.py \
        misc/update-vulkan-gir.py \
        tests/gi-tester
}

configure.python    ${prefix}/bin/python${py_ver}

configure.args-append \
                    -Ddoctool=enabled \
                    -Dpython=${configure.python}

# By default, gir will attempt to link programs using
# the same compiler used to build Python itself. However,
# the system clang on 10.6 does not appear to respect
# LIBRARY_PATH, resulting in g-ir-scanner errors such as:
#
# ld: library not found for -lgio-2.0
#
# The following workaround selects a more up-to-date linker
# when building this project. Identical logic already exists
# in the gobject_introspection PortGroup, so dependent projects
# should not require modification.
#
# 10.6.8 Rosetta requires a specific solution: https://github.com/mesonbuild/meson/issues/10351

platform darwin {
    if {${os.major} == 10 && ${build_arch} eq "ppc"} {
        build.env-append    CC=${developer_dir}/usr/bin/powerpc-apple-darwin10-gcc-4.2.1
    } else {
        build.env-append    CC=${configure.cc}
    }
}

platform darwin 8 {
    # Tiger does not support RPATHs at this time
    patchfiles-append patch-girscanner-tiger-no-rpath.diff

    build.env-append DYLD_LIBRARY_PATH=${workpath}/build/girepository
}

#--------------------------------------------------------------------------------------------------
# Note that several tests fail, due to @rpath issues with temporary test-only libs.
# Needs to be reported to upstream.
#
#  7/65 test_shlibs.py                          FAIL            2.67s   exit status 1
#    sanitize_shlib_path('@rpath/libbarapp-1.0.dylib'),
#    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#    TypeError: sanitize_shlib_path() missing 1 required positional argument: 'libdir'
#
#
# 53/65 gitypelibtest                           FAIL            0.33s   killed by signal 5 SIGTRAP
#   Failed to load shared library '/opt/local/lib/libregress-1.0.dylib' referenced by the
#   typelib: dlopen(/opt/local/lib/libregress-1.0.dylib, 9): image not found
#--------------------------------------------------------------------------------------------------
test.run            yes

livecheck.type      gnome
livecheck.name      ${my_name}
