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

name                glibmm-2.4
set my_name         glibmm
version             2.66.9
revision            0

categories          devel x11
license             LGPL-2.1+
maintainers         {devans @dbevans} {mascguy @mascguy} openmaintainer

description         C++ interface to glib2
long_description    {*}${description}
homepage            http://www.gtkmm.org

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

checksums           rmd160  0b701b81fe08bc52fa0028301fd885b1df60e6be \
                    sha256  5a026e5602085307c7dcb72b71b07261c40f80914277bef5f8d7f2ecab739bec \
                    size    9750684

# Disable unexpected download of subprojects
meson.wrap_mode     nodownload

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

depends_build-append \
                    port:mm-common \
                    path:bin/pkg-config:pkgconfig \
                    port:python${py_ver_nodot}

depends_lib-append  path:lib/pkgconfig/glib-2.0.pc:glib2 \
                    port:libsigcxx2

# glibmm > 2.44.0 requires C++11 or better
compiler.cxx_standard   2011

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

configure.args-append \
                    -Dbuild-documentation=false \
                    -Dbuild-examples=true \
                    -Dmaintainer-mode=false

patchfiles-append   patch-meson-build-python-path.diff

post-patch {
    reinplace -W ${worksrcpath} \
        "s|@@PYTHON@@|${configure.python}|" \
        meson.build

    # some tests assume /etc/fstab exists, replace it with /etc/hosts
    reinplace -W ${worksrcpath}/tests \
        "s|\"/etc/fstab\"|\"/etc/hosts\"|" \
        giomm_simple/main.cc giomm_ioerror/main.cc
}

# This port provides legacy bindings, previously provided by 'glibmm'.
# So the latter must be deactivated first, if an older version is installed.
# This logic added 2023-04-30; keep in place for at least 12 months.
pre-activate {
    set port_conflict_name    glibmm
    set port_conflict_ver_max "2.62.0"

    if { ![catch {set port_conflict_ver_info [lindex [registry_active ${port_conflict_name}] 0]}] } {
        set port_conflict_ver [lindex ${port_conflict_ver_info} 1]
        ui_info "${port_conflict_name} active version: ${port_conflict_ver}"

        if { [vercmp ${port_conflict_ver} ${port_conflict_ver_max}] <= 0 } {
            ui_info "Deactivating conflicting port: ${port_conflict_name}"
            registry_deactivate_composite ${port_conflict_name} "" [list ports_nodepcheck 1]
        }
    }
}

variant quartz conflicts x11 {
    require_active_variants \
                    path:lib/pkgconfig/glib-2.0.pc:glib2 quartz
}

variant x11 conflicts quartz {
    require_active_variants \
                    path:lib/pkgconfig/glib-2.0.pc:glib2 x11

    post-patch {
        reinplace "s|is_os_cocoa = host_machine\.system\(\) == 'darwin'|is_os_cocoa = false|" ${worksrcpath}/meson.build
    }
}

variant docs description {Install documentation} {
    depends_build-append \
                    bin:doxygen:doxygen \
                    bin:dot:graphviz \
                    bin:xsltproc:libxslt

    configure.args-replace \
                    -Dbuild-documentation=false \
                    -Dbuild-documentation=true
}

if {![variant_isset quartz]} {
    default_variants +x11
}
if {![variant_isset quartz] && ![variant_isset x11]} {
    error "Either +x11 or +quartz is required"
}

test.run            yes
test.cmd            ${configure.cmd}

livecheck.type      gnome
livecheck.name      ${my_name}
livecheck.url       http://ftp.gnome.org/pub/gnome/sources/${my_name}/${branch}/
