# -*- 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/qtnetwork-index.html#licenses-and-attributions license {LGPL-3 GPL-3 OpenSSLException} homepage https://www.qt.io version 6.10.2 # 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.1-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.14 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.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/qtmodules.html # ############################################################################### array set modules { qtbase { { 12a06ffe411f5e1ecb523346116ee2f4024ddc0f \ aeb78d29291a2b5fd53cb55950f8f5065b4978c25fb1d77f627d695ab9adf21e \ 50374380 } "" "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 { { 499cd2b5f628f6fb0cf2b28d3f6e939110ff2ac9 \ f07ff80f38caf235187200345392ca7479445ddf49a36c3694cd52a735dad6e1 \ 2614740 } "" "port:zlib" "qtbase" {"Qt SVG"} "" "variant overrides: " "revision 0" "License: " } qtdeclarative { { 4626667d49dc7d385e207993466c09ff8e3af524 \ a249914ff66cdcdbf0df8b5ffad997a2ee6dce01cc17d43c6cc56fdc1d0f4b0f \ 38060952 } "" "" "qtbase qtimageformats qtshadertools qtsvg qtlanguageserver" {"Qt QML" "Qt Quick" "Qt Quick Layouts" "Qt Quick Widgets"} "" "variant overrides: " "revision 0" "License: " } qtmultimedia { { 1e6821a40b31d4eabe230a012a99fbcf80d91bb9 \ 93f7ef0106fbd731165a2723f3e436c911fc5e6880f5bc987b55516c20833e2b \ 9907852 } "" "port:ffmpeg8 port:pulseaudio" "qtbase qtshadertools qtdeclarative qtquick3d" {"Qt Multimedia"} "" "variant overrides: " "revision 0" "License: " } qttools { { a32e876d84ac37b7dcb4d0d934dce1871f55c585 \ 1e3d2c07c1fd76d2425c6eaeeaa62ffaff5f79210c4e1a5bc2a6a9db668d5b24 \ 10074484 } "" "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 { { 1eabfdb3505773d1ee4670ea16a2f9122024402f \ b3b3813bc9d76b545716dc8b6e659fa71b6e2bc14569e9fab6dab8b30650a644 \ 1680564 } "" "" "qttools" {"translation files"} "" "variant overrides: ~examples ~tests ~debug noarch ~docs" "revision 0" "License: " } qtdoc { { 0ef1faeccfda34adf54183df18f078bc181db76a \ 8c14a9ed1067facb52eb88a37ce5bf7a1b1ffb8829c30dd2792d05e02cb83704 \ 47429420 } "" "" "qtdeclarative qttools qtmultimedia" {"documentation and examples"} "" "variant overrides: " "revision 0" "License: " } qtlocation { { 65f3f9b10f16d0916725f2745ffaf2946655d2e0 \ d313f05dedc593517c47d0fa3eb131a2597c01db23de263fe89fea561be50f3c \ 3151364 } "" "" "qtbase qtpositioning qtdeclarative" {"Qt Location"} "status = preview" "variant overrides: " "revision 0" "License: " } qtpositioning { { 03949f0b842bd073b1563d39ef83ec8fbe9f8a2e \ 7051fa64477c66769840cad396fc3772a01ba5516363c8842a7a513fa0c4cdce \ 648904 } "" "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 { { 6aeee069860e6e942c4f8b9aed2f5c11dc034255 \ 91e6515b7cebbfae3696861933f5359cc303dfe82f7849cf5a10df378c8ef581 \ 1485624 } "" "" "qtbase qtdeclarative" {"Qt Sensors"} "" "variant overrides: " "revision 0" "License: " } qtconnectivity { { e815dd78126072a1e7c890ba4a8a5136c577c58f \ cf58f021f32857b5b6799cd4404ef613399ecc1c515492f0f620ce338a311a32 \ 1058012 } "" "" "qtbase qtdeclarative" {"Qt Bluetooth" "Qt NFC"} "" "variant overrides: " "revision 0" "License: " } qt3d { { 979059e37f04864d3e60a85b7f1c9bf6f4cac5af \ febbca9d491feca0fa2d770e912590b4ef18e461f739ca6e855ea62a488bbb6d \ 141816364 } "" "port:assimp port:zlib port:minizip port:pugixml" "qtbase qtdeclarative qtshadertools" {"Qt 3D"} "status = deprecated" "variant overrides: " "revision 0" "License: " } qtimageformats { { eefbf03e682c29ce0c6e028daab05d379ea0009a \ 8b8f9c718638081e7b3c000e7f31910140b1202a98e98df5d1b496fe6f639d67 \ 2032388 } "" "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 { { a5a19f1be22d35928c9db981a95cb336e61792ab \ 4736bffecfb6940ebd7aeae260a7ac2c68da979bdf9153c2b59dcafa40793a7b \ 535424 } "" "" "qtbase qtserialport" {"Qt Serial Bus"} "" "variant overrides: " "revision 0" "License: " } qtserialport { { 0848be961b73e1bb1ab875f9b65ee80209dbfa3e \ b40cbf29da111ffa8fee7e7cb44b9097042782cd17a10448a83ff3156cdebd6b \ 263996 } "" "" "qtbase" {"Qt Serial Port"} "" "variant overrides: " "revision 0" "License: " } qtwebsockets { { 2e4d6e7349a1eff80f7b5a963a3beb6ea0197dfd \ eccc751bea509ef656d20029693987a0fc03c58e21c38f1351480f3c8eb42ebd \ 447440 } "" "" "qtbase qtdeclarative" {"Qt WebSockets"} "" "variant overrides: " "revision 0" "License: " } qtwebchannel { { 3fb69794924d1716b0eef5d8ffe45734e9361926 \ e31ea59f8e19e0374d54fdc7a8479c840acffc4ba5297ee43564b5158a4f2c27 \ 194076 } "" "" "qtbase qtdeclarative qtwebsockets" {"Qt WebChannel"} "" "variant overrides: " "revision 0" "License: " } qtwebengine { { 85f05be67ba7f3e0588cd98b8570dcbb89db26d0 \ 856eddf292a69a88618567deea67711b4ec720e69bcb575ed7bb539c9023961e \ 881342592 } "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 { { 6d0a8542752d3032cf8a781ada2ba4bb2b144706 \ 7ec406ff0998900ccef0ff8e4e5b1fbf15e4e18f3b43eb72e8b2aeda0dd0eab4 \ 128704 } "" "" "qtdeclarative qtwebengine" {"Qt WebView"} "" "variant overrides: " "revision 0" "License: " } qtcharts { { bc112099357549afba902af202190451acee07ef \ 405116b4c5eded981484c4c154eb392d44b69b587342f1193181175e309f2c00 \ 4651740 } "" "" "qtbase qtdeclarative qtmultimedia" {"Qt Charts"} "GPLv3 license only" "variant overrides: " "revision 0" "License: {GPL-3 OpenSSLException}" } qtdatavis3d { { 9a1d3ace8bef22415fab45fe0451cde8f60dd735 \ b769408bf4a3d03220331d5de59636fdf97a21831d01d3fd141c36c698355bc1 \ 3939368 } "" "" "qtbase qtdeclarative qtmultimedia" {"Qt Data Visualization"} "GPLv3 license only" "variant overrides: " "revision 0" "License: {GPL-3 OpenSSLException}" } qtvirtualkeyboard { { d1b0e1d0b2c9b348097d5ebbe5b9bbe7c7102161 \ 6273256091a83f3f283d1a91498964fd6a91256b667d7b9e98005d731fdb986b \ 3266796 } "" "port:hunspell" "qtbase qtdeclarative qtsvg qtmultimedia" {"Qt Virtual Keyboard"} "GPLv3 license only" "variant overrides: " "revision 0" "License: {GPL-3 OpenSSLException}" } qtscxml { { 555d52cfbc15e7ec623755841eb370f56ffac537 \ 0f9c178db3f1b1b06d20172aaaa4d7f5513bcb99de01f880c29e23b5ffdd236a \ 546512 } "" "" "qtbase qtdeclarative" {"Qt SCXML"} "" "variant overrides: " "revision 0" "License: " } qtspeech { { 1e7dd5a1f69ab9f6d73010d5990197ce9bfacd65 \ d937f6c715792b0d8f036e94513ebfc8def6b988a65f3ff30a7f4a8cc1263014 \ 248028 } "" "port:flite" "qtbase qtdeclarative qtmultimedia" {"Qt TextToSpeech"} "" "variant overrides: " "revision 0" "License: " } qtnetworkauth { { 9b5500a0f562e4d31368c3cb9cb13e93e1251fb5 \ 4f29fd9e4b505f5714fc42296b04c701f66ced185c49de4d520cb8de4b1981b3 \ 434660 } "" "" "qtbase" {"Qt Network Authorization"} "GPLv3 license only" "variant overrides: " "revision 0" "License: {GPL-3 OpenSSLException}" } qtremoteobjects { { 834922643f3219093d390cbf6ced6fd4aa331e80 \ bc683f044fe74dcf06c2b47f31fff2d967b5ac81896620108697dcc942eb65cd \ 528904 } "" "" "qtbase qtdeclarative" {"Qt Remote Objects"} "" "variant overrides: " "revision 0" "License: " } qtlottie { { 4cf3f0aa49cf665efbf5d1cc0b4e791087ffd96b \ a5d86b7a07833a0f2bd203042bbc156ec6588fd957f00a3c166788410ea4028c \ 720244 } "" "" "qtbase qtdeclarative" {"Qt Lottie Animation"} "GPLv3 license only" "variant overrides: " "revision 0" "License: {GPL-3 OpenSSLException}" } qtquicktimeline { { cbd83a1f7d06d3a49ba0260dfd969811fcd81559 \ 7032d8b758d21fdf790dde0d070e1c82819abcf5ee7194dbf21589dbdfd36324 \ 97172 } "" "" "qtbase qtdeclarative" {"Qt Quick Timeline"} "GPLv3 license only" "variant overrides: " "revision 0" "License: {GPL-3 OpenSSLException}" } qtquick3d { { 3da2c09b228fc7399ea387337c5c51d512ab822c \ b95439f31d1e580c379e9828b48b03b932b0bdade4ff09f4dd639eff9da2cd75 \ 73966236 } "" "port:assimp" "qtbase qtdeclarative qtshadertools" {"Qt Quick 3D"} "GPLv3 license only" "variant overrides: " "revision 0" "License: {GPL-3 OpenSSLException}" } qtshadertools { { 051b06fa70d09c68dda5a3f0b3dd3c80691bb02f \ 18d9dbbc4f7e6e96e6ed89a9965dc032e2b58158b65156c035537826216716c9 \ 1152340 } "" "" "qtbase" {"Qt Shader Tools"} "" "variant overrides: " "revision 0" "License: " } qt5compat { { 19adaaf2b86e5fe3dd56d17266818d90aa4e3dc3 \ 3fa418f0fac02eb9efc5f762fbe25f20647b0ebb7fa92faf07e6de85044161c2 \ 14619684 } "" "path:lib/pkgconfig/icu-uc.pc:icu port:libiconv" "qtbase qtdeclarative" {"Qt 5 Core Compatibility APIs"} "status = deprecated" "variant overrides: " "revision 0" "License: " } qtlanguageserver { { 2fe6bed2d4d0722c25777568434c91ea12131528 \ 9a043f2c84b0b470065fc7a954dc4ff0388db3e1b2c457c3d69670baecc40d53 \ 136264 } "" "" "qtbase" {"Qt Language Server"} "status = preview" "variant overrides: ~docs" "revision 0" "License: " } qthttpserver { { 8c598fc46356e735679079092487f634b70a6d64 \ 26568d59bee258fd35297823d2f7839ef1337042a009b752769e688703fe4643 \ 178708 } "" "" "qtbase" {"Qt HTTP Server"} "GPLv3 license only" "variant overrides: " "revision 0" "License: {GPL-3 OpenSSLException}" } qtquick3dphysics { { a23aab74b0f2b1ccd7137060c00cf12f1cc07897 \ b7aff67bd05794351d7c19b178c54b674afc3ea2b4632df892aaee98f12c1cdb \ 4669204 } "" "" "qtbase qtdeclarative qtquick3d qtshadertools" {"Qt Quick 3D Physics"} "GPLv3 license only" "variant overrides: " "revision 0" "License: {GPL-3 OpenSSLException}" } qtgrpc { { ca00938848eebd17898961b85b711bd773450181 \ 7386bfc9c10c7920e5ff22dcf067e95f379bb379e4d916269f4465ab295ed136 \ 622164 } "" "port:abseil port:protobuf3-cpp" "qtbase qtdeclarative" {"Qt GRPC"} "GPLv3 license only" "variant overrides: " "revision 1" "License: {GPL-3 OpenSSLException}" } qtquickeffectmaker { { 9fc97b616aed587397b0ac73afb8a0478a42dab3 \ e3caf13b4e0c0d9e6d696192137615e8e748d7999272c74472945067f469c2c4 \ 4343172 } "" "" "qtbase qtdeclarative qtquick3d qtshadertools" {"Qt Quick Effects"} "" "variant overrides: " "revision 0" "" } qtgraphs { { e8cca5174d8ae8d6fc8dc8d55c55303db2525579 \ f690fc6aa567d89a6e76ce370d684beb243dc0c2ed1187dd305433e278dd7aaf \ 5283404 } "" "" "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/ffmpeg8 \ -DAVCODEC_INCLUDE_DIR=${prefix}/libexec/ffmpeg8/include \ -DAVCODEC_LIBRARY=${prefix}/libexec/ffmpeg8/lib/libavcodec.dylib \ -DAVFORMAT_INCLUDE_DIR=${prefix}/libexec/ffmpeg8/include \ -DAVFORMAT_LIBRARY=${prefix}/libexec/ffmpeg8/lib/libavformat.dylib \ -DAVUTIL_INCLUDE_DIR=${prefix}/libexec/ffmpeg8/include\ -DAVUTIL_LIBRARY=${prefix}/libexec/ffmpeg8/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+) }