Files
macports-ports/aqua/qt6/Portfile
T

1461 lines
52 KiB
Tcl

# -*- 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
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.9/qtnetwork-index.html#licenses-and-attributions
license {LGPL-3 GPL-3 OpenSSLException}
homepage https://www.qt.io
version 6.9.1
# 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.9-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} .] ""]
############################################################################### 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.9.1
#
###############################################################################
############################################################################### 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.9/qtmodules.html
#
###############################################################################
array set modules {
qtbase {
{
d3eab4040f599b4527657f799d2c5db978bf620c \
40caedbf83cc9a1959610830563565889878bc95f115868bbf545d1914acf28e \
49755912
}
""
"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 {
{
40c0dd282c55053eee60b0a9fdef2d54e18c3a19 \
2dfc5de5fd891ff2afd9861e519bf1a26e6deb729b3133f68a28ba763c9abbd5 \
2017876
}
""
"port:zlib"
"qtbase"
{"Qt SVG"}
""
"variant overrides: "
"revision 0"
"License: "
}
qtdeclarative {
{
44d9e394cbb8e1577496871735997c77dee91cf6 \
ccb94665df0199d7ee387b965b29677c8b89cfb1782bb6f01239b1d1524cec97 \
37006920
}
""
""
"qtbase qtimageformats qtshadertools qtsvg qtlanguageserver"
{"Qt QML" "Qt Quick" "Qt Quick Layouts" "Qt Quick Widgets"}
""
"variant overrides: "
"revision 0"
"License: "
}
qtmultimedia {
{
46f0abaf3f338ea09a304f75f2103558d16b21b0 \
955e36459518ee55f8e2bb79defc6e44aa94dc1edf5ac58a22d7734b2e07391d \
9776408
}
""
"port:ffmpeg7 port:pulseaudio"
"qtbase qtshadertools qtdeclarative qtquick3d"
{"Qt Multimedia"}
""
"variant overrides: "
"revision 0"
"License: "
}
qttools {
{
f26aef5c90e8b52bac7a2bd122d28ea12456b5e8 \
90c4a562f4ccfd043fd99f34c600853e0b5ba9babc6ec616c0f306f2ce3f4b4c \
10339096
}
""
"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 {
{
6644d16c08b925c4f859a5692136ff8a475b6556 \
9761a1a555f447cdeba79fdec6a705dee8a7882ac10c12e85f49467ddd01a741 \
1574708
}
""
""
"qttools"
{"translation files"}
""
"variant overrides: ~examples ~tests ~debug noarch ~docs"
"revision 0"
"License: "
}
qtdoc {
{
a3cb4bc470837398bfc9b99f3856c061f2e25a77 \
6e0cbebae5ce92dd3dc73fa7e11bd5afc44ca9fc7dc2c84e74c8ef1ab96d1ab5 \
46287552
}
""
""
"qtdeclarative qttools qtmultimedia"
{"documentation and examples"}
""
"variant overrides: "
"revision 0"
"License: "
}
qtlocation {
{
1efb738662068e5c957945fdddc12eb5d0ac1bcb \
c0e8e8907e047ede59f5800f4f9bfd54286239aab1abe7df6723a8fcc127ef57 \
3166576
}
""
""
"qtbase qtpositioning qtdeclarative"
{"Qt Location"}
"status = preview"
"variant overrides: "
"revision 0"
"License: "
}
qtpositioning {
{
bef4ede7c03b933d2f4891ec006dd1322f82d9e9 \
7062734b4989248ca3f0e3e4aebb9aa2e7ed2d6bf19e779e520c6ef69706ff26 \
664156
}
""
"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 {
{
edd9f4500ff992a083fc475c6ccb57857144664f \
f04b131acacfd42dfe056bd5861ff1e12e2ab57b3e20332becefa3644a409c6c \
1500332
}
""
""
"qtbase qtdeclarative"
{"Qt Sensors"}
""
"variant overrides: "
"revision 0"
"License: "
}
qtconnectivity {
{
0b5fd50ce1f41bd6af9bd9658cc49462103aedc6 \
4988e50112104d5ad85e5b3cef66036ca445f18c22cf375d3dac9dcca95e0a17 \
1072040
}
""
""
"qtbase qtdeclarative"
{"Qt Bluetooth" "Qt NFC"}
""
"variant overrides: "
"revision 0"
"License: "
}
qt3d {
{
f7c332804c8bc6dccc0d16b6cb78c3203b2f5593 \
9c46497a60147bb326a58b67b1f543bdf81b8aceed908b44d3dde896d79c4784 \
141817908
}
""
"port:assimp port:zlib port:minizip port:pugixml"
"qtbase qtdeclarative qtshadertools"
{"Qt 3D"}
"status = deprecated"
"variant overrides: "
"revision 0"
"License: "
}
qtimageformats {
{
06d9ac805815ad57edc341a5d6bf8d9edad93b05 \
ebe9f238daaf9bb752c7233edadf4af33fc4fa30d914936812b6410d3af1577c \
2039560
}
""
"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 {
{
8a8e35d5659190bddd320e4ec2e9d3735f2e20f4 \
491ece4583565f5d809ea9dd8caa2779a97c23a7d4d8352ba8a7a660e1ab04d7 \
550652
}
""
""
"qtbase qtserialport"
{"Qt Serial Bus"}
""
"variant overrides: "
"revision 0"
"License: "
}
qtserialport {
{
e1f32710ea58ca04dae065f1a72a7410c87a3b96 \
808fed52380c74ae89268306ce4d04b00f8f6b81f8c442489c390006d93eff10 \
278276
}
""
""
"qtbase"
{"Qt Serial Port"}
""
"variant overrides: "
"revision 0"
"License: "
}
qtwebsockets {
{
29ea47435ceae299ca56296757c2dcf8670017e9 \
98be8c863b7f02cc98eedc0b6eac07544c10a9d2fa11c685fd61f6b243f748f5 \
462284
}
""
""
"qtbase qtdeclarative"
{"Qt WebSockets"}
""
"variant overrides: "
"revision 0"
"License: "
}
qtwebchannel {
{
2e10785f71beff91c77e4fcfa6825b3bf4053249 \
19b401d9210afc416c4080b189b0c9940e90d1f7444f5d046f3d8b1ab5fcf9c0 \
209516
}
""
""
"qtbase qtdeclarative qtwebsockets"
{"Qt WebChannel"}
""
"variant overrides: "
"revision 0"
"License: "
}
qtwebengine {
{
734d9b8ef7fe4b7d5807e42255c6451a6b27164b \
787dfde22b348f6d620f2207ed7e32ad0a5389373182614272de28ff3f91c26c \
672204388
}
"path:bin/node:nodejs20 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 {
{
57f3a6a9c6ce006622306add0aba279092168e00 \
c29ad4fbb8f7a2042c4941bef88bb13bd04757eed94d6937ae69e0e4ea0d59a5 \
141260
}
""
""
"qtdeclarative qtwebengine"
{"Qt WebView"}
""
"variant overrides: "
"revision 0"
"License: "
}
qtcharts {
{
e51a704b387d62e9cb39d88daeed31f0bd076c38 \
b8871beb7ac816e9241db9cbdc4803a53313f84a1e4b951f108bd00709aec3d3 \
4664732
}
""
""
"qtbase qtdeclarative qtmultimedia"
{"Qt Charts"}
"GPLv3 license only"
"variant overrides: "
"revision 0"
"License: {GPL-3 OpenSSLException}"
}
qtdatavis3d {
{
277c861f4893fbdb0f0c9dbdd3d4924f8ba9991d \
4c798b75f2a7c7e61ebb01f405a54fd80513ae46986714fa0fa05e8f6a5b32c7 \
3954892
}
""
""
"qtbase qtdeclarative qtmultimedia"
{"Qt Data Visualization"}
"GPLv3 license only"
"variant overrides: "
"revision 0"
"License: {GPL-3 OpenSSLException}"
}
qtvirtualkeyboard {
{
18b32c6cac6970ec023e0e02d1f70dbcb7870f95 \
80059a38bdb836f0785292396970edc108f477a68d9a35bed8393750de3d281f \
3285440
}
""
"port:hunspell"
"qtbase qtdeclarative qtsvg qtmultimedia"
{"Qt Virtual Keyboard"}
"GPLv3 license only"
"variant overrides: "
"revision 0"
"License: {GPL-3 OpenSSLException}"
}
qtscxml {
{
cf1e343a4aad7b077f016a0bd7fffc8a1af23156 \
0c33de2023b33a54fa6debd46f422440dca92da532faa7742af051fd88254780 \
560588
}
""
""
"qtbase qtdeclarative"
{"Qt SCXML"}
""
"variant overrides: "
"revision 0"
"License: "
}
qtspeech {
{
348f12b1a263d71f3944def114a2684aac047087 \
6807f59fcae2ef8f1f64210cfbfc8bcee1a40ed2d21eaee6673aba36bb7c1428 \
262724
}
""
"port:flite"
"qtbase qtdeclarative qtmultimedia"
{"Qt TextToSpeech"}
""
"variant overrides: "
"revision 0"
"License: "
}
qtnetworkauth {
{
9bb8299447bc5ae45a665b07c06c34448785bb02 \
7fadb15b372235546f1585145fd5dbb5d1177d041ef692b0ea232935387339cb \
447664
}
""
""
"qtbase"
{"Qt Network Authorization"}
"GPLv3 license only"
"variant overrides: "
"revision 0"
"License: {GPL-3 OpenSSLException}"
}
qtremoteobjects {
{
6fc02d846562f1d9f423b2b559a65519666f4356 \
273f079e7b8f72c2e4ba2fea8893cd24773f4c6471d726fbddc097ae8d2e0a10 \
543600
}
""
""
"qtbase qtdeclarative"
{"Qt Remote Objects"}
""
"variant overrides: "
"revision 0"
"License: "
}
qtlottie {
{
5c6249634fa1370e66a9ac9a07d1775ec501012f \
8ee88c2e0773c96109c179d7e75a46ba7bc548b5bc8be409a23cbaddafa18ba2 \
99436
}
""
""
"qtbase qtdeclarative"
{"Qt Lottie Animation"}
"GPLv3 license only"
"variant overrides: "
"revision 0"
"License: {GPL-3 OpenSSLException}"
}
qtquicktimeline {
{
8bdf73f133593bf80247217710d4eef79dad169c \
78bfdbe7ca8178e4e0931372e07a3076dec503b6a55ff07e41b594d781897294 \
113032
}
""
""
"qtbase qtdeclarative"
{"Qt Quick Timeline"}
"GPLv3 license only"
"variant overrides: "
"revision 0"
"License: {GPL-3 OpenSSLException}"
}
qtquick3d {
{
0d40def0b4303772e52deaf467bdc8e1db1cc997 \
f61600da8fbfd51b7d6b5c431cef453d7c24015c374ae25756c0faf0db2c9977 \
74173492
}
""
"port:assimp"
"qtbase qtdeclarative qtshadertools"
{"Qt Quick 3D"}
"GPLv3 license only"
"variant overrides: "
"revision 0"
"License: {GPL-3 OpenSSLException}"
}
qtshadertools {
{
247d32877c2c3220ab27191c9dade77934e7f847 \
4e1ed24cce0887fb4b6c7be4f150239853a29c330c9717f6bacfb6376f3b4b74 \
1166596
}
""
""
"qtbase"
{"Qt Shader Tools"}
""
"variant overrides: "
"revision 0"
"License: "
}
qt5compat {
{
8f3dd17e4521ef056420b35bd4503388e9317ff5 \
96c726ac3f0d5c40570e75196e4ab5c95d3de7c85d15604fe97ac2a6573d917a \
14633560
}
""
"path:lib/pkgconfig/icu-uc.pc:icu port:libiconv"
"qtbase qtdeclarative"
{"Qt 5 Core Compatibility APIs"}
"status = deprecated"
"variant overrides: "
"revision 0"
"License: "
}
qtlanguageserver {
{
77112d641150af0c4bbc01e1d1af1c794572e2c4 \
ca17353612760b9bb6e3115bfacc9ba5e06d0d18b522f4f62ae6d510d63488ec \
152488
}
""
""
"qtbase"
{"Qt Language Server"}
"status = preview"
"variant overrides: ~docs"
"revision 0"
"License: "
}
qthttpserver {
{
373d3d822012f5d68c4d9c86ce46855908e7c131 \
bfc7b511e2bbc365f11027ae8d7d2e33f3ff63591b866df9a880c51363f02b53 \
189852
}
""
""
"qtbase"
{"Qt HTTP Server"}
"GPLv3 license only"
"variant overrides: "
"revision 0"
"License: {GPL-3 OpenSSLException}"
}
qtquick3dphysics {
{
d0c9f96eb995c0c223172661cf52dc435dd98120 \
66e8365eb8c409a8426dec13a83203879f31845d555bf7632ce0728e8ddca24f \
4683360
}
""
""
"qtbase qtdeclarative qtquick3d qtshadertools"
{"Qt Quick 3D Physics"}
"GPLv3 license only"
"variant overrides: "
"revision 0"
"License: {GPL-3 OpenSSLException}"
}
qtquickeffectmaker {
{
0ea064e231b5e70285313ab4b2ea61adf43b563b \
39b617c40642bb44f54e781ecea9338f2cf2b794c552df0b7a8795cabad15d31 \
4358748
}
""
""
"qtbase qtdeclarative qtquick3d qtshadertools"
{"Qt Quick Effects"}
""
"variant overrides: "
"revision 0"
""
}
qtgraphs {
{
dbb28e4085777154bd8c0230de5bf4164639d0bc \
f52ddc5052cdbb5a3a321b211e42371014cccf3bc6c0f442d9bec3ddfe593444 \
5230620
}
""
""
"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} {
# 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}
}
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
configure.env-append PYTHON3_PATH=${prefix}/Library/Frameworks/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
# avoid
# xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer
# directory '/Library/Developer/CommandLineTools' is a command line tools
# instance
use_xcode yes
}
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-alsa \
-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+)
}