# -*- 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.7.1 v
revision                0
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  978ec979a2f616d507537f803a6b2a2a93095d8b \
                        sha256  ae2e5f14787c673c18ee4c2276e5a1b2973ed62a373b1ef8829d57d78951f0bb \
                        size    3619192
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.14
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
}
