# -*- 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                   qt6_info 1.0
PortGroup                   conflicts_build 1.0

name                        qt6

categories                  aqua
platforms                   {macosx >= 23} ; # upon change, please update qt6 PG
maintainers                 {mcalhoun @MarcusCalhoun-Lopez} \
                            {reneeotten @reneeotten} openmaintainer

# for OpenSSLException, see source and header files in src/network/ssl of qtbase
# see also https://doc.qt.io/qt-6.10/qtnetwork-index.html#licenses-and-attributions
license                     {LGPL-3 GPL-3 OpenSSLException}

homepage                    https://www.qt.io

version                     6.10.0

# get Qt's version numbers
set branch                  [join [lrange [split ${version} .] 0 1] .]
set qt_major                [lindex [split ${version} .] 0]

# see https://www.qt.io/blog/qt-6.10-released
compiler.c_standard         2011
compiler.cxx_standard       2017

# qcompilerdetection.h emits:
#     error: "Unsupported Apple Clang version"
# which also means Q_CC_CLANG will not be set.
# That causes the check for __has_feature(cxx_unicode_literals) to be skipped, causing
#     error: "Qt6 requires Unicode string support in both the compiler and the standard library"
# to be emitted, even when the unsupported Apple Clang version does support Unicode string literals.
compiler.blacklist-append   {clang < 1100}

master_sites                https://download.qt.io/official_releases/qt/${branch}/${version}/submodules
# file sizes are significantly smaller using xz
use_xz                      yes

supported_archs             arm64 x86_64

# conflict with all other versions of qt6
foreach {qt_base qt_info} ${qt6::available_versions} {
    if { ${qt_base} ne ${name} } {
        conflicts-append    ${qt_base}-qtbase
    }
}

if {${os.platform} eq "darwin" && [vercmp ${macosx_deployment_target} >= 15.0]} {
    macosx_deployment_target 14.0
}

# cannot get qt6-qtbase to configure without setting this
use_xcode                   yes

# MacPorts LLVM/Clang version to use when required
set llvm_version            19

# MacPorts Python branch & version to use when required
set python_branch           3.13
set python_version          [join [split ${python_branch} .] ""]

# build of certain Qt6 components fail when zstdConfig.cmake is installed
# see: https://trac.macports.org/ticket/72923
conflicts_build zstdConfig.cmake

############################################################################### Modules Not Considered
#
# No qtactiveqt      (Windows Only)
# No qtwayland       (Linux Only)
#
###############################################################################

############################################################################### Qt Dependencies
#
# https://code.qt.io/cgit/qt/qt5.git/tree/.gitmodules?h=6.10.0
#
###############################################################################

############################################################################### Module Format
#
# "Qt Module Name" {
#     {
#         checksum, rmd160
#         checksum, sha256
#         checksum, size
#     }
#     dependencies, build
#     dependencies, lib
#     dependencies, Qt module name
#     Qt components provided
#     included in "standard" installation of Qt (empty string is no, explanation string is yes)
#     variant overrides
#     revision number
#     license replacement
# }
#
# module info found at https://doc.qt.io/qt-6.10/qtmodules.html
#
###############################################################################
array set modules {
    qtbase {
        {
            e66f98bf8b1128a065011b12feffc6af972462fc \
            ead4623bcb54a32257c5b3e3a5aec6d16ec96f4cda58d2e003f5a0c16f72046d \
            50194096
        }
        ""
        "port:brotli path:bin/dbus-daemon:dbus port:double-conversion port:freetype
            path:lib/pkgconfig/glib-2.0.pc:glib2 path:lib/pkgconfig/harfbuzz.pc:harfbuzz
            path:lib/pkgconfig/icu-uc.pc:icu path:include/turbojpeg.h:libjpeg-turbo port:libb2
            port:libpng port:md4c path:lib/pkgconfig/libpcre2-posix.pc:pcre2
            port:zlib path:lib/pkgconfig/libzstd.pc:zstd"
        ""
        {"Qt Core" "Qt GUI" "Qt Network" "Qt SQL" "Qt Test" "Qt Widgets" "Qt Concurrent" "Qt D-Bus" \
         "Qt OpenGL" "Qt Platform Headers" "Qt Print Support" "Qt XML"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qtsvg {
        {
            72665887b0111f3e62dc5e2c173bdc4f8c04e4e6 \
            5ed2c0e04d5e73ff75c2a2ed92db5dc1788ba70f704fc2b71bc21644beda2533 \
            2612284
        }
        ""
        "port:zlib"
        "qtbase"
        {"Qt SVG"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qtdeclarative {
        {
            20005578ba609d4f9f34c998e7e188a2930c6deb \
            6efd35520902395d865bc12e89f8442c3c228d0374f13af9a1888b844f56f6b0 \
            37522260
        }
        ""
        ""
        "qtbase qtimageformats qtshadertools qtsvg qtlanguageserver"
        {"Qt QML" "Qt Quick" "Qt Quick Layouts" "Qt Quick Widgets"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qtmultimedia {
        {
            d8bd8b5ba4d80cac859441bceb1380168ef77dcb \
            04424021cf0d1d19799f5967310d484d1afa6fdd0b31725d0ee7608d2eef1126 \
            9873144
        }
        ""
        "port:ffmpeg7 port:pulseaudio"
        "qtbase qtshadertools qtdeclarative qtquick3d"
        {"Qt Multimedia"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qttools {
        {
            cff65000839ad88370336ae0600a9ebf6590992d \
            d86d5098cf3e3e599f37e18df477e65908fc8f036e10ea731b3469ec4fdbd02a \
            10035252
        }
        ""
        "port:clang-${llvm_version} path:lib/pkgconfig/libzstd.pc:zstd"
        "qtbase qtdeclarative"
        {"Qt Designer" "Qt Help" "Qt UI Tools"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qttranslations {
        {
            e778d85dcc3635cd16584cf7bb2b47afed4e402b \
            326e8253cfd0cb5745238117f297da80e30ce8f4c1db81990497bd388b026cde \
            1626156
        }
        ""
        ""
        "qttools"
        {"translation files"}
        ""
        "variant overrides: ~examples ~tests ~debug noarch ~docs"
        "revision 0"
        "License: "
    }
    qtdoc {
        {
            78ce2ae8bf65df59e8a1fdb2b515ef078a49e446 \
            ece525f4e4f7851c9e8e53bfd7a28046cfa8ede0a4914713147a5c3541327d3b \
            47567996
        }
        ""
        ""
        "qtdeclarative qttools qtmultimedia"
        {"documentation and examples"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qtlocation {
        {
            7463521f7c81f48ab71524ff209b78e5841939fc \
            cbd43e87fb4b2cccd8e01e0c762f951fc3c3d6b99cd2b80d6e526120a25df800 \
            3150972
        }
        ""
        ""
        "qtbase qtpositioning qtdeclarative"
        {"Qt Location"}
        "status = preview"
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qtpositioning {
        {
            f589c3f468bc847cd16ba1668b8ae2ede2a3d980 \
            ecbfbc90636be19d65c975716e26689558e030e841c4a01afb3bd425756a1ee1 \
            648912
        }
        ""
        "port:gconf port:gettext-runtime path:lib/pkgconfig/glib-2.0.pc:glib2"
        "qtbase qtdeclarative qtserialport"
        {"Qt Positioning"}
        ""
        "variant overrides: ~examples ~tests"
        "revision 0"
        "License: "
    }
    qtsensors {
        {
            ed2a2ea785ff42a6c5d8808588639ab311dc6045 \
            67525e1ad1833ce556a208c4fd8adc59fe6e20d9450e621977ade96300668739 \
            1485688
        }
        ""
        ""
        "qtbase qtdeclarative"
        {"Qt Sensors"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qtconnectivity {
        {
            e1d9f82d1d0d63814705d8fa453ae6fa724b9904 \
            560ad5cf2600a0620b811ff9fb4ad0ca2a18ca7b2b6699dadf1961e5bf41fa99 \
            1057636
        }
        ""
        ""
        "qtbase qtdeclarative"
        {"Qt Bluetooth" "Qt NFC"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qt3d {
        {
            2af45cba7b4af0ba078082ea1c2d1671e869cc10 \
            bd885ff3741f4b6e4e9b29e1dd05feeae834063c0ca84239f38e3f4eed78e9b7 \
            141814292
        }
        ""
        "port:assimp port:zlib port:minizip port:pugixml"
        "qtbase qtdeclarative qtshadertools"
        {"Qt 3D"}
        "status = deprecated"
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qtimageformats {
        {
            dbb72235e748c9deec407169b7804472d93729a6 \
            64450a52507c540de53616ed5e516df0e0905a99d3035ddfaa690f2b3f7c0cea \
            2028252
        }
        ""
        "path:lib/pkgconfig/jasper.pc:jasper port:libmng port:tiff port:webp
            path:include/turbojpeg.h:libjpeg-turbo"
        "qtbase"
        {"Qt Image Formats"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qtserialbus {
        {
            a59b480e690ebd691d8850acce497caf2c93b600 \
            c627b2bfffe267bb53bbdbac60c22a08bcdbfb6775983ae5d16c975298a4ec30 \
            535324
        }
        ""
        ""
        "qtbase qtserialport"
        {"Qt Serial Bus"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qtserialport {
        {
            08d306996bb8e4317eb3106c434ac8d55e746fad \
            4f1ea0788d1d5dc74c35f605f6edbb09fef89c75ce6028cf418d79c1a0d9f805 \
            263872
        }
        ""
        ""
        "qtbase"
        {"Qt Serial Port"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qtwebsockets {
        {
            fdfc85bb2363d06bc7220fbb8e227b125e87ac24 \
            d1092e7da5c3b8eea242e4069f05ff8e710a17c54d5010c1b557e26f7948806e \
            448336
        }
        ""
        ""
        "qtbase qtdeclarative"
        {"Qt WebSockets"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qtwebchannel {
        {
            deb921ac944e303aa3cee63fc85f3c391a905dd1 \
            74165864fabf580e622fbb52553d8ca41b53b660ba20ec1f73fb71f4d9a95009 \
            193960
        }
        ""
        ""
        "qtbase qtdeclarative qtwebsockets"
        {"Qt WebChannel"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qtwebengine {
        {
            52d75f422a431e42dcbddfc1a4f19a7cfdb5a84b \
            c44c77b11c30f9d11b423d0a38debe272cdec5883b5e54703eb1f7e96651c51c \
            881130500
        }
        "path:bin/node:nodejs22 port:python${python_version} port:py${python_version}-html5lib port:py${python_version}-ply"
        "port:libpng port:zlib"
        "qtdeclarative qtwebchannel qttools qtpositioning"
        {"Qt WebEngine Qt" "Qt PDF"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qtwebview {
        {
            1b4c722bfbd209bd59842e5b85e9cfe56f24afb1 \
            a93564e6a5d10c09954b01a3140725caa2de574ce9c3332d4bced291d9fa3a0f \
            128696
        }
        ""
        ""
        "qtdeclarative qtwebengine"
        {"Qt WebView"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qtcharts {
        {
            8268a5064e0cb37ab11abed97ecf545398462496 \
            1bff529320e7bf4da19984d70492b19149168be58aa1e77b0868779fb3437f6b \
            4649828
        }
        ""
        ""
        "qtbase qtdeclarative qtmultimedia"
        {"Qt Charts"}
        "GPLv3 license only"
        "variant overrides: "
        "revision 0"
        "License: {GPL-3 OpenSSLException}"
    }
    qtdatavis3d {
        {
            32904d747857da73ceb5975a8994e9c3dc8b5f3b \
            fdf62265fa8b4eb5194fe2b93b0f0c374b85b84a349f2e30b713271966ce36e2 \
            3939496
        }
        ""
        ""
        "qtbase qtdeclarative qtmultimedia"
        {"Qt Data Visualization"}
        "GPLv3 license only"
        "variant overrides: "
        "revision 0"
        "License: {GPL-3 OpenSSLException}"
    }
    qtvirtualkeyboard {
        {
            2d89c0a809832388f1a793cbdc289a4748a7015c \
            abb267f2682bc66d078b71fb342aca946414d3c60adb97d454308acc0ca31381 \
            3282960
        }
        ""
        "port:hunspell"
        "qtbase qtdeclarative qtsvg qtmultimedia"
        {"Qt Virtual Keyboard"}
        "GPLv3 license only"
        "variant overrides: "
        "revision 0"
        "License: {GPL-3 OpenSSLException}"
    }
    qtscxml {
        {
            4d616c53e9d110eb0a1cfa1849491ea92c8c03ee \
            b5946c405fe1e568a8b0589695f9572dfabf85ac9ac8ec3778f9f791e76131e4 \
            546460
        }

        ""
        ""
        "qtbase qtdeclarative"
        {"Qt SCXML"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qtspeech {
        {
            f57533218db672a1387736c713256dee466c3655 \
            13033066830ccc8be50951e3a2f2564c712e5f5e9b0af4e1040184f1a64aa51e \
            247840
        }
        ""
        "port:flite"
        "qtbase qtdeclarative qtmultimedia"
        {"Qt TextToSpeech"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qtnetworkauth {
        {
            285fbbc82ce70c9f72d9db750b69b0d6a188893c \
            0460855d71e22d1f08045c9577c3ab09790b78f9de263405c2b9b00f6c33b3c8 \
            432492
        }
        ""
        ""
        "qtbase"
        {"Qt Network Authorization"}
        "GPLv3 license only"
        "variant overrides: "
        "revision 0"
        "License: {GPL-3 OpenSSLException}"
    }
    qtremoteobjects {
        {
            a3a6e3af5933d219c7be0ffe7822e677bef4c947 \
            b1402d5906930011ed6163e55a0313eead19286f01471e22ccc8e87f9f6a2698 \
            528912
        }
        ""
        ""
        "qtbase qtdeclarative"
        {"Qt Remote Objects"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qtlottie {
        {
            1f3f64fe66dae8b6253630a4d6122cb275aa0f1f \
            70a413af5bc20a28d79c74a4182a1bb23f0709306721dc4878106891e5a87b25 \
            718872
        }
        ""
        ""
        "qtbase qtdeclarative"
        {"Qt Lottie Animation"}
        "GPLv3 license only"
        "variant overrides: "
        "revision 0"
        "License: {GPL-3 OpenSSLException}"
    }
    qtquicktimeline {
        {
            4ca8dc887a2f069532c62c911f0513584605c17a \
            dfbc185d58dc8fb80ec72e297abf461927ea6455b96a780cd2a8bb58c5b14ba0 \
            97164
        }
        ""
        ""
        "qtbase qtdeclarative"
        {"Qt Quick Timeline"}
        "GPLv3 license only"
        "variant overrides: "
        "revision 0"
        "License: {GPL-3 OpenSSLException}"
    }
    qtquick3d {
        {
            720665ed5c5f2d7966f2a5671a85bfc9c7a359d8 \
            98258c1ea876e1f29fd73889f1de32008d13c91c9bff3fc8edfd92f663ecd488 \
            73958456
        }
        ""
        "port:assimp"
        "qtbase qtdeclarative qtshadertools"
        {"Qt Quick 3D"}
        "GPLv3 license only"
        "variant overrides: "
        "revision 0"
        "License: {GPL-3 OpenSSLException}"
    }
    qtshadertools {
        {
            d771348b6cca98f8a38beb05da18b19437f91a81 \
            87ba478c3fd827862fc79f6d78d369dfec162c901b7f66ed988b3e1d6ffdfbf6 \
            1151592
        }
        ""
        ""
        "qtbase"
        {"Qt Shader Tools"}
        ""
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qt5compat {
        {
            2f923b4323a1e994c29b3cee12c0dead6b756339 \
            d025c59d658b5e1f5fa1650bf01f23ddec15ce8f4c6ae5f6bc343f8427b02b7e \
            14621320
        }
        ""
        "path:lib/pkgconfig/icu-uc.pc:icu port:libiconv"
        "qtbase qtdeclarative"
        {"Qt 5 Core Compatibility APIs"}
        "status = deprecated"
        "variant overrides: "
        "revision 0"
        "License: "
    }
    qtlanguageserver {
        {
            7ea33c368658e9bc0aa6c44ed73408dc1db026f1 \
            4c9e03e09f392c0855251ac2d8c69fda4c5f015c0201c30b14dc09d8712821a6 \
            136212
        }
        ""
        ""
        "qtbase"
        {"Qt Language Server"}
        "status = preview"
        "variant overrides: ~docs"
        "revision 0"
        "License: "
    }
    qthttpserver {
        {
            c036dc1af7518e1541c69f9865eb76bf4da1b46c \
            e4705701db5f425e8f7025b3f74bf87b43af83742a615a20d4aa171d03251fc5 \
            177828
        }
        ""
        ""
        "qtbase"
        {"Qt HTTP Server"}
        "GPLv3 license only"
        "variant overrides: "
        "revision 0"
        "License: {GPL-3 OpenSSLException}"
    }
    qtquick3dphysics {
        {
            eedcf0d051bb5a86618e71c02b2fab3760c7e9fd \
            c2b408bfe7ed9d9a7eda371dc657c623789d5086d445b242fda61bd8db054942 \
            4668884
        }
        ""
        ""
        "qtbase qtdeclarative qtquick3d qtshadertools"
        {"Qt Quick 3D Physics"}
        "GPLv3 license only"
        "variant overrides: "
        "revision 0"
        "License: {GPL-3 OpenSSLException}"
    }
    qtgrpc {
        {
            6d7367a165c5a3cadddf91c4ac0ec710fed98fc9 \
            fb722289066101ae08865378e7fb29a22b416a71f6b1c19ae5a957f53a91a445 \
            611608
        }
        ""
        ""
        "qtbase qtdeclarative"
        {"Qt GRPC"}
        "GPLv3 license only"
        "variant overrides: "
        "revision 0"
        "License: {GPL-3 OpenSSLException}"
    }
    qtquickeffectmaker {
        {
            d2401a56d5852a6a72cc3176fff4ef056c5a8917 \
            64c21d028bebe90fb32df2c751ed4fc8c5219bff50173a0bbf1d33b28c2eb96e \
            4343012
        }
        ""
        ""
        "qtbase qtdeclarative qtquick3d qtshadertools"
        {"Qt Quick Effects"}
        ""
        "variant overrides: "
        "revision 0"
        ""
    }
    qtgraphs {
        {
            5913affbd6169c02177b46abee9fd65b3b75973e \
            6ec8f1b3b3bea6636da8846353e170794c76d5833fc908016f911647a6a714ea \
            5243552
        }
        ""
        ""
        "qtbase qtdeclarative qtquick3d"
        {"Qt Graphs"}
        ""
        "variant overrides: "
        "revision 0"
        "License: {GPL-3 OpenSSLException}"
    }
}

############################################################################### SQL Plugin Format
#
# {
#     module name
#     {
#         SQL name
#         revision string
#         {list of feature names}
#         {
#             variant name
#             {
#                 variant name
#                 library dependencies
#                 {list of CMake options to find library}
#             }
#         }
#     }
# }
#
###############################################################################
array set sql_plugins {
    sqlite {
        SQLite
        "revision 0"
        {sql-sqlite system-sqlite}
        {
            sqlite3 {
                "port:sqlite3"
                {
                    -DSQLite3_INCLUDE_DIR=${prefix}/include
                    -DSQLite3_LIBRARY=${prefix}/lib/libsqlite3.dylib
                }
            }
        }
    }
    psql {
        PostgreSQL
        "revision 0"
        {sql-psql}
        {
            postgresql17 {
                "port:postgresql17"
                {
                    -DPostgreSQL_INCLUDE_DIR=${prefix}/include/postgresql17
                    -DPostgreSQL_TYPE_INCLUDE_DIR=${prefix}/include/postgresql17
                    -DCMAKE_LIBRARY_PATH=${prefix}/lib/postgresql17
                }
            }
            postgresql16 {
                "port:postgresql16"
                {
                    -DPostgreSQL_INCLUDE_DIR=${prefix}/include/postgresql16
                    -DPostgreSQL_TYPE_INCLUDE_DIR=${prefix}/include/postgresql16
                    -DCMAKE_LIBRARY_PATH=${prefix}/lib/postgresql16
                }
            }
            postgresql15 {
                "port:postgresql15"
                {
                    -DPostgreSQL_INCLUDE_DIR=${prefix}/include/postgresql15
                    -DPostgreSQL_TYPE_INCLUDE_DIR=${prefix}/include/postgresql15
                    -DCMAKE_LIBRARY_PATH=${prefix}/lib/postgresql15
                }
            }
            postgresql14 {
                "port:postgresql14"
                {
                    -DPostgreSQL_INCLUDE_DIR=${prefix}/include/postgresql14
                    -DPostgreSQL_TYPE_INCLUDE_DIR=${prefix}/include/postgresql14
                    -DCMAKE_LIBRARY_PATH=${prefix}/lib/postgresql14
                }
            }
            postgresql13 {
                "port:postgresql13"
                {
                    -DPostgreSQL_INCLUDE_DIR=${prefix}/include/postgresql13
                    -DPostgreSQL_TYPE_INCLUDE_DIR=${prefix}/include/postgresql13
                    -DCMAKE_LIBRARY_PATH=${prefix}/lib/postgresql13
                }
            }
            postgresql12 {
                "port:postgresql12"
                {
                    -DPostgreSQL_INCLUDE_DIR=${prefix}/include/postgresql12
                    -DPostgreSQL_TYPE_INCLUDE_DIR=${prefix}/include/postgresql12
                    -DCMAKE_LIBRARY_PATH=${prefix}/lib/postgresql12
                }
            }
            postgresql11 {
                "port:postgresql11"
                {
                    -DPostgreSQL_INCLUDE_DIR=${prefix}/include/postgresql11
                    -DPostgreSQL_TYPE_INCLUDE_DIR=${prefix}/include/postgresql11
                    -DCMAKE_LIBRARY_PATH=${prefix}/lib/postgresql11
                }
            }
        }
    }
    mysql {
        MySQL
        "revision 0"
        {sql-mysql}
        {
            mariadb10_11 {
                "port:mariadb-10.11"
                {
                    -DMySQL_INCLUDE_DIR=${prefix}/include/mariadb-10.11/mysql
                    -DMySQL_LIBRARY=${prefix}/lib/mariadb-10.11/mysql/libmariadb.dylib
                }
            }
            mariadb10_10 {
                "port:mariadb-10.10"
                {
                    -DMySQL_INCLUDE_DIR=${prefix}/include/mariadb-10.10/mysql
                    -DMySQL_LIBRARY=${prefix}/lib/mariadb-10.10/mysql/libmariadb.dylib
                }
            }
            mariadb10_9 {
                "port:mariadb-10.9"
                {
                    -DMySQL_INCLUDE_DIR=${prefix}/include/mariadb-10.9/mysql
                    -DMySQL_LIBRARY=${prefix}/lib/mariadb-10.9/mysql/libmariadb.dylib
                }
            }
            mariadb10_8 {
                "port:mariadb-10.8"
                {
                    -DMySQL_INCLUDE_DIR=${prefix}/include/mariadb-10.8/mysql
                    -DMySQL_LIBRARY=${prefix}/lib/mariadb-10.8/mysql/libmariadb.dylib
                }
            }
            mariadb10_7 {
                "port:mariadb-10.7"
                {
                    -DMySQL_INCLUDE_DIR=${prefix}/include/mariadb-10.7/mysql
                    -DMySQL_LIBRARY=${prefix}/lib/mariadb-10.7/mysql/libmariadb.dylib
                }
            }
            mariadb10_6 {
                "port:mariadb-10.6"
                {
                    -DMySQL_INCLUDE_DIR=${prefix}/include/mariadb-10.6/mysql
                    -DMySQL_LIBRARY=${prefix}/lib/mariadb-10.6/mysql/libmariadb.dylib
                }
            }
            mariadb10_5 {
                "port:mariadb-10.5"
                {
                    -DMySQL_INCLUDE_DIR=${prefix}/include/mariadb-10.5/mysql
                    -DMySQL_LIBRARY=${prefix}/lib/mariadb-10.5/mysql/libmariadb.dylib
                }
            }
            mariadb10_4 {
                "port:mariadb-10.6"
                {
                    -DMySQL_INCLUDE_DIR=${prefix}/include/mariadb-10.4/mysql
                    -DMySQL_LIBRARY=${prefix}/lib/mariadb-10.4/mysql/libmariadb.dylib
                }
            }
            mysql8 {
                "port:mysql8"
                {
                    -DMySQL_INCLUDE_DIR=${prefix}/include/mysql8/mysql
                    -DMySQL_LIBRARY=${prefix}/lib/mysql8/mysql/libmysqlclient.dylib
                }
            }
        }
    }
}

foreach {module module_info} [array get modules] {
    subport ${name}-${module} {

        distname                            ${module}-everywhere-src-${version}

        revision                            [regexp -inline {[0-9]+} [lindex ${module_info} 7]]

        checksums                           rmd160  [lindex [lindex ${module_info} 0] 0] \
                                            sha256  [lindex [lindex ${module_info} 0] 1] \
                                            size    [lindex [lindex ${module_info} 0] 2]

        set license_string                  [lindex ${module_info} 8]
        set license_string                  [string range ${license_string} 1+[string first ":" ${license_string}] end]
        set license_string                  [string trim ${license_string}]
        if { ${license_string} ne "" } {
            license                         {*}${license_string}
        }

        foreach deps [lindex ${module_info} 1] {
            depends_build-append            [subst ${deps}]
        }

        foreach deps [lindex ${module_info} 2] {
            depends_lib-append              [subst ${deps}]
        }

        foreach qtdeps [lindex ${module_info} 3] {
            depends_lib-append              port:${name}-${qtdeps}
        }

        description                         Tools and Module(s) for Qt Tool Kit ${qt_major}

        set modules_provided_list           [lindex ${module_info} 4]
        if { [llength ${modules_provided_list}] == 1 } {
            set modules_provided_join       [lindex ${modules_provided_list} 0]
        } elseif { [llength ${modules_provided_list}] == 2 } {
            set modules_provided_join       [join ${modules_provided_list} " and "]
        } else {
            set modules_provided_join       [join [list [join [lrange ${modules_provided_list} 0 end-1] ", "] [lindex ${modules_provided_list} end]] ", and "]
        }

        long_description                    Tools and Module(s) for Qt Tool Kit ${qt_major}: ${modules_provided_join}

        if { [lsearch -exact [lindex ${module_info} 6] "~universal"] != -1 } {
            universal_variant               no
        }

        if { [lsearch -exact [lindex ${module_info} 6] "noarch"] != -1 } {
            supported_archs                 noarch
            platforms                       any
        }

        if { [lsearch -exact [lindex ${module_info} 6] "~debug"] == -1 } {
            # debugging seems to be turned on if and only if it is turned on in the base
            # CMAKE_CONFIGURATION_TYPES is set with the FORCE option
            # see https://code.qt.io/cgit/qt/qtbase.git/tree/cmake/QtPostProcessHelpers.cmake
            variant debug description {Build both release and debug libraries} {
                require_active_variants     qt6-qtbase debug ""
            }
            if {![variant_isset debug]} {
                require_active_variants     qt6-qtbase "" debug
            }
        }

        if { [lsearch -exact [lindex ${module_info} 6] "~examples"] == -1 } {
            variant examples description {Build examples} {}
        }

        if { [lsearch -exact [lindex ${module_info} 6] "~tests"] == -1 } {
            variant tests description {Enable tests} {}
        }
    }
}

foreach {module module_info} [array get modules] {
    if { [lsearch -exact [lindex ${module_info} 6] "~docs"] != -1 } { continue }

    subport ${name}-${module}-docs {

        # minimum supported versions have changed over time and new qtXY ports were added
        # this attempts to provide a clean "upgrade" path for user who had  "qt6-XY" (sub)ports installed
        # on a system that is no longer supported
        # REMOVE after 2026-02-19
        if {${os.platform} eq "darwin" && ${os.major} < 23 && ${os.major} >= 21} {
            PortGroup               obsolete 1.0
            replaced_by             qt67-${module}
        } elseif {${os.platform} eq "darwin" && ${os.major} < 21 && ${os.major} >= 18} {
            PortGroup               obsolete 1.0
            replaced_by             qt64-${module}
        }

        distname                            ${module}-everywhere-src-${version}

        revision                            [regexp -inline {[0-9]+} [lindex ${module_info} 7]]

        checksums                           rmd160  [lindex [lindex ${module_info} 0] 0] \
                                            sha256  [lindex [lindex ${module_info} 0] 1] \
                                            size    [lindex [lindex ${module_info} 0] 2]

        set license_string                  [lindex ${module_info} 8]
        set license_string                  [string range ${license_string} 1+[string first ":" ${license_string}] end]
        set license_string                  [string trim ${license_string}]
        if { ${license_string} ne "" } {
            license                         {*}${license_string}
        }

        depends_build-append                port:${name}-qttools \
                                            port:${name}-sqlite-plugin

        # have the same build dependencies
        foreach deps [lindex ${module_info} 1] {
            depends_build-append [subst ${deps}]
        }

        depends_lib-append                  port:${name}-${module}

        description                         Documentation for Qt Tool Kit ${qt_major}

        set modules_provided_list           [lindex ${module_info} 4]
        if { [llength ${modules_provided_list}] == 1 } {
            set modules_provided_join       [lindex ${modules_provided_list} 0]
        } elseif { [llength ${modules_provided_list}] == 2 } {
            set modules_provided_join       [join ${modules_provided_list} " and "]
        } else {
            set modules_provided_join       [join [list [join [lrange ${modules_provided_list} 0 end-1] ", "] [lindex ${modules_provided_list} end]] ", and "]
        }

        long_description                    Documentation for Qt Tool Kit ${qt_major}: ${modules_provided_join}

        supported_archs                     noarch
        platforms                           any
    }
}

# see https://doc.qt.io/qt-6/sql-driver.html for info on building SQL Database Drivers
foreach {driver driver_info} [array get sql_plugins] {
    set dbms                                [lindex ${driver_info} 0]

    set revision_string                     [string trim [lindex ${driver_info} 1]]
    set revision_string                     [string range ${revision_string} 1+[string last " " ${revision_string}] end]

    set sql_variants                        [lindex ${driver_info} 3]

    subport ${name}-${driver}-plugin {

        # minimum supported versions have changed over time and new qtXY ports were added
        # this attempts to provide a clean "upgrade" path for user who had  "qt6-XY" (sub)ports installed
        # on a system that is no longer supported
        # REMOVE after 2026-02-19
        if {${os.platform} eq "darwin" && ${os.major} < 23 && ${os.major} >= 21} {
            PortGroup               obsolete 1.0
            replaced_by             qt67-${driver}-plugin
        } elseif {${os.platform} eq "darwin" && ${os.major} < 21 && ${os.major} >= 18} {
            PortGroup               obsolete 1.0
            replaced_by             qt64-${driver}-plugin
        }

        distname                            qtbase-everywhere-src-${version}

        revision                            ${revision_string}

        checksums                           rmd160  [lindex [lindex $modules(qtbase) 0] 0] \
                                            sha256  [lindex [lindex $modules(qtbase) 0] 1] \
                                            size    [lindex [lindex $modules(qtbase) 0] 2]

        depends_lib-append                  port:${name}-qtbase

        description                         ${dbms} Database Driver for Qt Tool Kit ${qt_major}
        long_description                    ${dbms} Database Driver for Qt Tool Kit ${qt_major}

        foreach feature {sql-db2 sql-ibase sql-mysql sql-oci sql-odbc sql-psql sql-sqlite system-sqlite} {
            if { ${feature} in [lindex ${driver_info} 2] } {
                configure.args-append       -feature-${feature}
            } else {
                configure.args-append       -no-feature-${feature}
            }
        }

        set worksrcpath                     ${worksrcpath}/src/plugins/sqldrivers

        set any_sql                         no
        foreach {variant_name variant_info} ${sql_variants} {
            set conflict_list ""

            foreach {variant_name_other variant_info_other} ${sql_variants} {
                if { ${variant_name_other} ne ${variant_name} } {
                    lappend conflict_list   ${variant_name_other}
                }
            }

            if { [llength ${conflict_list}] > 0 } {
                variant ${variant_name} conflicts {*}${conflict_list} description "use version [regexp -inline {[0-9].} ${variant_name}] of ${dbms}" {}
            }
            if { ([variant_exists ${variant_name}] && [variant_isset ${variant_name}]) || [llength ${conflict_list}]==0 } {
                set any_sql                 yes
            }
        }

        if { !${any_sql} } {
            default_variants-append         +[lindex ${sql_variants} 0]
            if { ![variant_isset [lindex ${sql_variants} 0]] } {
                known_fail                  yes
                pre-extract {
                    ui_error                "At least one SQL variant must be selected."
                    return -code error      "No SQL variant selected."
                }
            }
        }

        foreach {variant_name variant_info} ${sql_variants} {
            if { ([variant_exists ${variant_name}] && [variant_isset ${variant_name}]) || [llength ${conflict_list}]==0 } {
                depends_lib-append          {*}[lindex ${variant_info} 0]
                configure.post_args-append  {*}[subst [lindex ${variant_info} 1]]
            }
        }

        post-destroot {
            if {[file exists ${qt6.dir}/sbom/qsqlitedriverplugins-${version}.spdx]} {
                file delete ${destroot}${qt6.dir}/sbom/qsqlitedriverplugins-${version}.spdx
            }
        }
    notes "${destroot}${qt6.dir}/sbom/qsqlitedriverplugins-${version}.spdx"
    }
}

###############################################################################
# Special Cases
###############################################################################
subport ${name}-qttools {
    configure.env-append            LLVM_INSTALL_DIR=${prefix}/libexec/llvm-${llvm_version}

    post-destroot {
        # avoid having to add `-Wl,-rpath ${prefix}/libexec/llvm-${llvm_version}/lib` or something like it
        foreach bin {lupdate qdoc} {
            foreach lib {libclang.dylib libclang-cpp.dylib libLLVM.dylib} {
                system              "install_name_tool -change @rpath/${lib} ${prefix}/libexec/llvm-${llvm_version}/lib/${lib} ${destroot}${qt6.dir}/bin/${bin}"
            }
        }
    }
}

if { ${subport} in [list "${name}-qtwebengine" "${name}-qtwebengine-docs"] } {
    compiler.cxx_standard           2020
    compiler.blacklist-append       {clang < 1700}

    configure.env-append            PYTHON3_PATH=${frameworks_dir}/Python.framework/Versions/${python_branch}/bin

    # in ${worksrcpath}, `${qt6.dir}/bin/qt-configure-module . -help` and `${qt6.dir}/bin/qt-configure-module . -list-features`
    # it is not clear why, but icu and ffmpeg support must be added manually
    # native-spellchecker support is off by default
    # support for proprietary codecs could by added via `-webengine-proprietary-codecs`
    configure.args-append           -webengine-icu \
                                    -webengine-ffmpeg \
                                    -webengine-native-spellchecker

    # attempt to limit the resources for building QtWebEngine
    # see: https://trac.macports.org/ticket/73057
    build.mem_per_job               1536
    build.env-append                NINJAJOBS=${build.jobs} \
                                    NINJAFLAGS=-j${build.jobs}

    # avoid
    #     xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer
    #     directory '/Library/Developer/CommandLineTools' is a command line tools
    #     instance
    use_xcode                       yes

    # Fix build with Xcode 26, metal and metallib have moved
    # see: https://trac.macports.org/ticket/73037
    patchfiles-append               patch-qtwebengine-metal-toolchain.diff
}

subport ${name}-qtwebengine {
    # manually install icudtl.dat
    post-destroot {
        xinstall -m 0644 ${worksrcpath}/src/3rdparty/chromium/third_party/icu/common/icudtl.dat \
                         ${destroot}${qt6.dir}/lib/QtWebEngineCore.framework/Resources/
    }
}

subport ${name}-qtmultimedia {
    # GStreamer will be found if gstreamer1 and gstreamer1-gst-plugins-base are installed
    # however, an error will ensue since the GStreamer support requires "Linux DMA buffer support"
    # see
    #     https://code.qt.io/cgit/qt/qtmultimedia.git/tree/src/plugins/multimedia/gstreamer/CMakeLists.txt
    #     https://code.qt.io/cgit/qt/qtmultimedia.git/tree/src/multimedia/configure.cmake
    configure.args-append           -no-gstreamer

    configure.post_args-append      -DFFMPEG_DIR=${prefix}/libexec/ffmpeg7 \
                                    -DAVCODEC_INCLUDE_DIR=${prefix}/libexec/ffmpeg7/include \
                                    -DAVCODEC_LIBRARY=${prefix}/libexec/ffmpeg7/lib/libavcodec.dylib \
                                    -DAVFORMAT_INCLUDE_DIR=${prefix}/libexec/ffmpeg7/include \
                                    -DAVFORMAT_LIBRARY=${prefix}/libexec/ffmpeg7/lib/libavformat.dylib \
                                    -DAVUTIL_INCLUDE_DIR=${prefix}/libexec/ffmpeg7/include\
                                    -DAVUTIL_LIBRARY=${prefix}/libexec/ffmpeg7/lib/libavutil.dylib
}

subport ${name}-qt5compat {
    patchfiles-append               patch-qt5compat-find_libs.diff
}

subport ${name}-qtspeech {
    # ALSA is Linux only (https://www.alsa-project.org/wiki/Main_Page)
    # Speech Dispatcher *might* be made to work on macOS (https://freebsoft.org/speechd)
    configure.args-append           -no-flite \
                                    -no-speechd
}

if { ${subport} eq "${name}-qtbase" || ${subport} eq "${name}-qtbase-docs" } {

    configure.pre_args-replace      --prefix=${prefix} \
                                    "-prefix ${qt6.dir}"

    # configure options:
    configure.args-append           -shared \
                                    -accessibility

    # SQL Options
    foreach driver {db2 ibase mysql oci odbc psql sqlite} {
        configure.args-append       -no-sql-${driver}
    }

    # use -Oz instead of -O2
    configure.args-append           -optimize-size

    configure.args-append           -pkg-config

    # Third Party Libraries:
    configure.args-append           -system-zlib \
                                    -no-mtdev \
                                    -no-journald \
                                    -no-syslog \
                                    -system-libpng \
                                    -system-libjpeg \
                                    -system-freetype \
                                    -system-harfbuzz \
                                    -system-pcre \
                                    -no-openssl \
                                    -no-libproxy \
                                    -glib \
                                    -no-gtk

    # additional options:
    configure.args-append           {-make tools} \
                                    {-nomake examples} \
                                    {-nomake tests} \
                                    -gui \
                                    -widgets \
                                    -cups \
                                    -no-evdev \
                                    -no-tslib \
                                    -icu \
                                    -no-fontconfig \
                                    -no-pch \
                                    -no-ltcg \
                                    -dbus-linked \
                                    -no-use-gold-linker \
                                    -no-separate-debug-info \
                                    -no-xcb \
                                    -no-eglfs \
                                    -no-gbm \
                                    -no-directfb \
                                    -no-linuxfb \
                                    -no-kms \
                                    -no-libinput \
                                    -no-system-proxies \
                                    -no-libudev \
                                    -no-egl

    # macOS/iOS options:
    configure.args-append           -framework \
                                    -securetransport

    # do not opportunistically enable Vulkan support
    # (TODO: is Vulkan support desirable?)
    # see https://trac.macports.org/ticket/62104
    configure.args-append           -no-feature-vulkan

    # attempt to avoid @rpath
    configure.args-append           -no-rpath \
                                    -no-feature-relocatable
}

subport ${name}-qtbase {
    # this subport uses configure script
    PortGroup                       openssl 1.0

    build.cmd                       ninja
    build.post_args-append          -v
    destroot.target                 install

    variant tests description {Enable tests} {
        configure.args-replace      {-nomake tests} \
                                    {-make tests}
    }

    variant examples description {Build examples} {
        configure.args-replace      {-nomake examples} \
                                    {-make examples}
    }

    variant debug description {Build both release and debug libraries} {
        configure.args-replace      -release \
                                    -debug-and-release
    }

    variant openssl description {Use OpenSSL instead of Secure Transport} {
        configure.args-delete       -securetransport \
                                    -no-openssl
        configure.args-append       -openssl-linked

        # configure has issues locating openssl files
        configure.pre_args-append   -DOPENSSL_ROOT_DIR=[openssl::install_area] \
                                    -DOPENSSL_INCLUDE_DIR=[openssl::include_dir] \
                                    -DOPENSSL_LIBRARIES=[openssl::install_area]/lib \
                                    -DOPENSSL_LIBS='-L[openssl::install_area]/lib -lssl -lcrypto'
    }
    default_variants-append         +openssl

    post-destroot {
        # do not record  __qt_initial_c_compiler and __qt_initial_cxx_compiler
        reinplace                   "s|${configure.cc}|/usr/bin/clang|g" \
                                    ${destroot}${qt6.dir}/lib/cmake/Qt6/qt.toolchain.cmake
        reinplace                   "s|${configure.cxx}|/usr/bin/clang++|g" \
                                    ${destroot}${qt6.dir}/lib/cmake/Qt6/qt.toolchain.cmake

        # return to default value of CMAKE_OSX_DEPLOYMENT_TARGET
        #reinplace                   "s|CMAKE_OSX_DEPLOYMENT_TARGET \"${macosx_deployment_target}\"|CMAKE_OSX_DEPLOYMENT_TARGET \"10.14\"|g" \
        #                            ${destroot}${qt6.dir}/lib/cmake/Qt6/qt.toolchain.cmake

        # do not record QT_SOURCE_TREE
        reinplace                   "s|${worksrcpath}|${qt6.dir}/src|g" \
                                    ${destroot}${qt6.dir}/lib/cmake/Qt6BuildInternals/QtBuildInternalsExtra.cmake

        # do not record original_cmake_path
        reinplace                   "s|${prefix}/bin/cmake|/Applications/CMake.app/Contents/bin/cmake|g" \
                                    ${destroot}${qt6.dir}/bin/qt-cmake
        reinplace                   "s|${prefix}/bin/cmake|/Applications/CMake.app/Contents/bin/cmake|g" \
                                    ${destroot}${qt6.dir}/bin/qt-cmake-create

        if { "${qt6.dir}" ne "${prefix}" } {
            # Add dummy cmake find modules that forward to the real ones
            file mkdir "${destroot}${prefix}/lib/cmake/Qt6"
            foreach configfile [list "Qt6Config.cmake" "Qt6ConfigVersion.cmake"] {
                set fd [open "${destroot}${prefix}/lib/cmake/Qt6/${configfile}" "w"]
                puts $fd "set(_PREFIX_PATH_BAK \${CMAKE_PREFIX_PATH})"
                puts $fd "list(APPEND CMAKE_PREFIX_PATH \"${qt6.dir}\")"
                puts $fd "include(\"${qt6.dir}/lib/cmake/Qt6/${configfile}\")"
                puts $fd "set(CMAKE_PREFIX_PATH \${_PREFIX_PATH_BAK})"
                close $fd
            }
        }
    }

    # Qt builds part of the system using environment provided by MacPorts.
    # It builds the rest using its own internal environment.
    # For consistency, clear MacPorts environment.
    configure.cxx_stdlib
    proc portconfigure::should_add_stdlib {} { return false }
    configure.sdkroot
    configure.cc_archflags
    configure.cxx_archflags
    configure.objc_archflags
    configure.objcxx_archflags
    configure.ld_archflags
    configure.cppflags
    configure.cflags
    configure.cxxflags
    configure.objcflags
    configure.objcxxflags
    configure.ldflags
    configure.pipe                  no
    configure.march
    configure.mtune
    configure.universal_ldflags
    configure.universal_cflags
    configure.universal_cxxflags
    configure.universal_cppflags
}

subport ${name}-qtbase-docs {
    # see https://wiki.qt.io/Building_Qt_Documentation
    build.cmd                      cmake --build ${build.dir}
    destroot.target
    build.target                   --target docs
    destroot.cmd                   cmake --build ${build.dir} --target install_docs
}

###############################################################################
# Applies to allmost all modules
###############################################################################
if { ${subport} ne "${name}" && ${subport} ne "${name}-qtbase" && ${subport} ne "${name}-qtbase-docs" } {
    # attempting to match module configure instructions from here: https://www.qt.io/blog/qt-6-build-system
    configure.cmd                   ${qt6.dir}/bin/qt-configure-module
    configure.dir                   ${workpath}/build
    configure.pre_args              ${worksrcpath}
    configure.args-append           -verbose

    build.dir                       ${workpath}/build
    build.cmd                       cmake --build ${build.dir}

    destroot.target

    if { [lindex [split ${subport} -] end] ne "docs" } {
        build.target
        destroot.cmd               cmake --install ${build.dir}
    } else {
        build.target               --target docs
        destroot.cmd               cmake --build ${build.dir} --target install_docs
    }

    if { [variant_exists examples] } {
        configure.post_args-append  -DQT_BUILD_EXAMPLES=[expr {[variant_isset examples] ? ON : OFF}]
    }
    if { [variant_exists tests] } {
        configure.post_args-append  -DQT_BUILD_TESTS=[expr {[variant_isset tests] ? ON : OFF}]
    }
}

###############################################################################
# Applies to all subports except ${name}
#     this code may depend on the subport specific code (e.g., configure.cc)
###############################################################################
depends_build-append                path:bin/cmake:cmake \
                                    port:ninja \
                                    port:pkgconfig

# because CPATH is set, pkgconfig does not include ${prefix}/lib and ${prefix}/include even when requested
# this means that files in ${prefix}/lib and ${prefix}/include are the *last* to be found
# this causes problems when there are files in ${worksrpath} that are unintentionally found instead
configure.env-append                PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 \
                                    PKG_CONFIG_ALLOW_SYSTEM_LIBS=1
build.env-append                    PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 \
                                    PKG_CONFIG_ALLOW_SYSTEM_LIBS=1

configure.universal_args

test.cmd                            ctest
test.args                           -V
test.target

# ninja needs the DESTDIR argument in the environment
destroot.destdir
destroot.env-append                 DESTDIR=${destroot}

# set CMake variables (similar to what cmake PortGroup does)
# to allow using ccache and controlling compiler selection
configure.post_args-prepend         --
configure.post_args-append          -DCMAKE_C_COMPILER=[option configure.cc] \
                                    -DCMAKE_CXX_COMPILER=[option configure.cxx] \
                                    -DCMAKE_OBJC_COMPILER=[option configure.objc] \
                                    -DCMAKE_OBJCXX_COMPILER=[option configure.objcxx] \
                                    -DCMAKE_OSX_DEPLOYMENT_TARGET=${macosx_deployment_target}
if { ${configure.ccache} } {
    if { ${subport} ne "${name}-qtbase" } {
        configure.post_args-append  -DQT_USE_CCACHE=ON
    } else {
        # do not use `configure.args-append -ccache`
        # or `configure.post_args-append -DQT_USE_CCACHE=1`
        # since that affects installed files.
        configure.post_args-append  -DCMAKE_C_COMPILER_LAUNCHER=${prefix}/bin/ccache \
                                    -DCMAKE_CXX_COMPILER_LAUNCHER=${prefix}/bin/ccache \
                                    -DCMAKE_OBJC_COMPILER_LAUNCHER=${prefix}/bin/ccache \
                                    -DCMAKE_OBJCXX_COMPILER_LAUNCHER=${prefix}/bin/ccache
    }
}

test.run                            [expr {[variant_exists tests] && [variant_isset tests] ? yes : no}]

if { ${universal_possible} && [variant_isset universal] } {
    configure.post_args-append      -DCMAKE_OSX_ARCHITECTURES="[join ${configure.universal_archs} \;]"
} elseif { ${configure.build_arch} ne ""  } {
    configure.post_args-append      -DCMAKE_OSX_ARCHITECTURES="${configure.build_arch}"
}

# attempt to avoid @rpath
configure.post_args-append          -DCMAKE_INSTALL_NAME_DIR=${qt6.dir}/lib

post-destroot {
    fs-traverse f ${destroot} {
        if { [file isfile ${f}] && [file extension ${f}] eq ".prl" } {
            # do not record build directory
            reinplace -q            "/^QMAKE_PRL_BUILD_DIR = /d" \
                                    ${f}
        }
    }

    # .app and non-.app programs are both put in ${qt6.dir}/bin
    # put a link of any .app programs in the ${applications_dir}/Qt6
    xinstall -d -m 0755             ${destroot}${applications_dir}/Qt6
    foreach app [glob -nocomplain -tails -directory ${destroot}${qt6.dir}/bin *.app] {
        ln -s                       ${qt6.dir}/bin/${app} \
                                    ${destroot}${applications_dir}/Qt6
    }
}

livecheck.type                      none

###############################################################################
# Special Case: must be near the end since it undoes other code
###############################################################################
subport ${name} {
    # the main port is Meta-port to install various modules
    revision                        0

    description                     Qt Tool Kit ${qt_major}
    long_description                Qt Tool Kit: A cross-platform framework \
                                    (headers, data, and libraries) for writing \
                                    cross-platform GUI-based applications.

    master_sites
    distfiles
    use_configure                   no
    supported_archs                 noarch
    platforms                       any
    installs_libs                   no
    test.run                        no
    depends_extract
    depends_build
    depends_lib
    depends_test

    build                           {}

    # create a dummy file so the port can be successfully activated
    destroot {
        xinstall -d -m 0755         ${destroot}${prefix}/share/doc/${subport}
        set docfile                 [open ${destroot}${prefix}/share/doc/${subport}/README.txt "w"]
        puts ${docfile}             "Meta-port for ${name}"
        puts ${docfile}             "${long_description}"
        close ${docfile}
    }

    foreach {module module_info} [array get modules] {
        if { [lindex ${module_info} 5] eq "" } {
            depends_run-append      port:${name}-${module}
        }
    }
    depends_run-append              port:${name}-sqlite-plugin

    livecheck.type                  regex
    livecheck.url                   https://download.qt.io/archive/qt/${branch}/
    livecheck.regex                 (\\d+(\\.\\d+)\\.\\d+)
}
