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

PortSystem              1.0
PortGroup               active_variants 1.1
PortGroup               cmake 1.1
PortGroup               github 1.0
PortGroup               legacysupport 1.1

github.setup            giuspen cherrytree 1.6.3 v
revision                1
categories              editors
license                 GPL-3+
maintainers             {mascguy @mascguy} openmaintainer

description             Hierarchical note taking
long_description        {*}${description} application, featuring rich text \
                        and syntax highlighting.
use_xz                  yes
distname                ${name}_${version}
checksums               rmd160  243d3a0e4f9912b8bf26b5bc0a0a8aa8cd0e2549 \
                        sha256  448cbdf190396f3c59896f4fc7c7fff98e4bb0f6080ea2b7d6e65d0d570e1e4f \
                        size    3590696
github.tarball_from     releases

# Enable use of 'macports-libcxx' for macOS 10.12 and earlier, as port uses
# libcxx features normally only available on 10.13 and later.
legacysupport.use_mp_libcxx yes
# Usual malloc errors with the old C++ ABI.
legacysupport.redirect_bins ${name}

compiler.cxx_standard   2017

patchfiles-append       patch-cherrytree-all-apple-is-not-homebrew-for-goodness-sake.diff

# By default, project enables significant warnings, via Wall/Wextra. Disable that behavior.
patchfiles-append       patch-drop-wall.diff

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

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

# Do not use spdlog from ports:
# https://github.com/giuspen/cherrytree/issues/2518

depends_lib-append      port:adwaita-icon-theme \
                        port:atk \
                        port:atkmm \
                        path:lib/pkgconfig/cairo.pc:cairo \
                        port:cairomm \
                        port:curl \
                        port:enchant2 \
                        port:fribidi \
                        path:lib/pkgconfig/gdk-pixbuf-2.0.pc:gdk-pixbuf2 \
                        port:gettext-runtime \
                        path:lib/pkgconfig/glib-2.0.pc:glib2 \
                        port:gspell \
                        path:lib/pkgconfig/harfbuzz.pc:harfbuzz \
                        port:libsigcxx2 \
                        port:libxml2 \
                        port:libxmlxx2 \
                        path:lib/pkgconfig/pango.pc:pango \
                        port:sqlite3 \
                        port:uchardet

depends_run-append      port:dbus

variant gtk3 description "Build with GTK3 GUI" {
    depends_lib-append  path:lib/pkgconfig/glibmm-2.4.pc:glibmm-2.4 \
                        path:lib/pkgconfig/gtk+-3.0.pc:gtk3 \
                        port:gtkmm3 \
                        port:gtksourceview4 \
                        path:lib/pkgconfig/pangomm-1.4.pc:pangomm-1.4 \
                        port:vte

    configure.args-append \
                        -DWITH_GTK4=OFF
}

variant gtk4 description "Build with GTK4 GUI" {
    depends_lib-append  path:lib/pkgconfig/glibmm-2.68.pc:glibmm \
                        path:lib/pkgconfig/gtk4.pc:gtk4 \
                        port:gtkmm4 \
                        port:gtksourceview5 \
                        path:lib/pkgconfig/pangomm-2.48.pc:pangomm

    # TODO: add vte subport for gtk4.
    configure.args-append \
                        -DWITH_GTK4=ON \
                        -DUSE_VTE=OFF

    compiler.cxx_standard   2023
}

configure.args-append   -DBUILD_TESTING=OFF \
                        -DNO_DEPRECATED=OFF \
                        -DPYTHON_EXEC=${prefix}/bin/python${py_ver} \
                        -DUSE_NLS=ON \
                        -DUSE_SHARED_FMT_SPDLOG=OFF

if {${os.platform} eq "darwin" && ${os.major} < 13} {
    # uses '-k' option to gzip which is not supported until 10.9
    depends_build-append    port:gzip
}

# Clear optflags; controlled by project, via cmake build type
configure.optflags

if {[variant_isset debug]} {
    cmake.build_type    Debug
} else {
    cmake.build_type    Release
}

variant x11 conflicts quartz {
    if {[variant_isset gtk3]} {
        require_active_variants gtk3 x11 quartz
    } elseif {[variant_isset gtk4]} {
        require_active_variants gtk4 x11 quartz
    }

    notes-append    "This is ${name} +x11. You will need an X11 server installed, either\
                    xorg-server from MacPorts or XQuartz, to view this application. If you\
                    prefer a macOS-native quartz version, please install ${name} +quartz instead."
}

variant quartz conflicts x11 {
    PortGroup               app 1.1

    if {[variant_isset gtk3]} {
        require_active_variants gtk3 quartz x11
    } elseif {[variant_isset gtk4]} {
        require_active_variants gtk4 quartz x11
    }

    app.name                CherryTree
    app.icon                ${worksrcpath}/icons/cherrytree.ico
    app.use_launch_script   yes
    app.retina              yes
}

if {![variant_isset gtk4]} {
    default_variants-append +gtk3
}

if {![variant_isset quartz]} {
    default_variants-append +x11
}
