# -*- 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 name qt58 categories aqua platforms macosx maintainers {mcalhoun @MarcusCalhoun-Lopez} openmaintainer # for OpenSSLException, see source and header files in src/network/ssl of qtbase license {LGPL-3 GPL-3 OpenSSLException} homepage https://www.qt.io version 5.8.0 PortGroup qt5_variables 1.0 # get Qt's version numbers set branch [join [lrange [split ${version} .] 0 1] .] set qt_major [lindex [split ${version} .] 0] # see https://wiki.qt.io/New_Features_in_Qt_5.7 compiler.cxx_standard 2011 master_sites \ https://download.qt.io/archive/qt/${branch}/${version}/submodules \ https://download.qt.io/community_releases/${branch}/${version}-final # see https://trac.macports.org/ticket/53952 dist_subdir qt5 # file sizes are significantly smaller using xz if { ${subport} ne ${name} && ${subport} ne "${name}-docs" } { use_xz yes } conflicts qt3 qt3-mac # conflict with all other version of qt5 foreach {qt_test_name qt_test_info} [array get available_qt_versions] { if {${name} ne ${qt_test_name}} { conflicts-append [lindex ${qt_test_info} 0] } } # qt58-qtbase replaces qt5-qtbase, so can not conflict if { ${os.platform} eq "darwin" && ${os.major} == 13 } { conflicts-delete qt5-qtbase } ############################################################################### Modules Not Considered # # No qtactiveqt (Windows Only) # No qtandroidextras (Android Only) # No qtwayland (Linux Only) # No qtx11extras (X11 Only) # No qtwinextras (Windows Only) # ############################################################################### ############################################################################### Finding Dependencies # # grep -r "%dependencies" * # find ./ -name sync.profile # # grep -r qtCompileTest * # # find ./ -name config.tests # # find ./ -name Find\*.cmake # # grep -r qtHaveModule * # # grep -r packagesExist * # # port provides `find ./ -name \*.dylib -exec otool -L {} \; | grep /opt/local/libexec/qt5 | cut -d ' ' -f1` | cut -d : -f2 | sort -u # port provides `find ./ -name \*.dylib -exec otool -L {} \; | grep /opt/local/lib/ | cut -d ' ' -f1` | cut -d : -f2 | sort -u # # https://code.qt.io/cgit/qt/qt5.git/tree/.gitmodules?h=5.8 # ############################################################################### ############################################################################### Notes # # qtconnectivity checks for bluetooth libraries # bluez and bluez_le (Linux Only) # # qtconnectivity depends on # qtandroidextras (Android Only) # # qtserialport depends on # ntddmodm (Windows Only) # # qttools depends on # qtactiveqt (Windows Only) # # qtwebkit has tests for libraries in: # Tools/qmake/mkspecs/features/configure.prf # Tools/qmake/config.tests/ # ############################################################################### ############################################################################### TODO # # TODO: possible to trim dependencies of qtbase? # ############################################################################### ############################################################################### 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/archives/qt-5.8/qtmodules.html # ############################################################################### array set modules { qt3d { { ffd237991652c6425b3ff1e45344119b73c6f03b 3a224576fc922195ac0063b5b351cd6b9d13afcde9cec14317be0347d10c8ae5 20129740 } "" "port:assimp" "qtdeclarative qtimageformats qtgamepad" {"Qt 3D"} "" "variant overrides: " "revision 1" "License: " } qtbase { { d395139af720a9c3bf00f962e2c3ebe01cd75702 c17111ae02a44dc7be1ec2cf979a47ee9e58edf4904041a525c21f4fa53fc005 44318700 } "" "port:zlib port:libpng path:include/turbojpeg.h:libjpeg-turbo port:freetype path:bin/dbus-daemon:dbus path:lib/pkgconfig/glib-2.0.pc:glib2 path:lib/pkgconfig/icu-uc.pc:icu port:pcre path:lib/pkgconfig/harfbuzz.pc:harfbuzz" "" {"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 13" "License: " } qtcanvas3d { { d9529b6042b750f8f58ca2e92f0cfd00a4e3cb7b 5446f790f526f582df7790e1e1442357f61aac9c23ea9b00d4a791c9d78ccaa3 10852200 } "" "" "qtdeclarative" {"Qt Canvas 3D"} "" "variant overrides: " "revision 0" "License: " } qtcharts { { e26012a821355159b4b250ad9da95ee93bdf5d98 03e8acbe6d0a1ea421b28aba3e171648ec833381e6991f6617dfdcd85d78a586 4147872 } "" "" "qtbase qtdeclarative qtmultimedia" {"Qt Charts"} "GPLv3 license only" "variant overrides: " "revision 0" "License: {GPL-3 OpenSSLException}" } qtconnectivity { { 7dacd93e8e8a9014fb33505e3a6c792fc9945542 7b2d01e9d67f6390a9e64bdae62e81a965b0f0b21137cf1a021e08a28bb227f1 2709744 } "" "" "qtbase qtdeclarative" {"Qt Bluetooth" "Qt NFC"} "" "variant overrides: " "revision 0" "License: " } qtdatavis3d { { 8ca22a991964fa625b27719dc04fa98f163c1bee 77f1e7698cc2bade94183d05cf4c879a1c9c12ca6aedc565ee29df638d6b5bd8 5155928 } "" "" "qtbase qtdeclarative qtmultimedia" {"Qt Data Visualization"} "GPLv3 license only" "variant overrides: " "revision 0" "License: {GPL-3 OpenSSLException}" } qtdeclarative { { f060a9626295e93e7f5dd58d5bb69d1a792c16ec 32941eb9ad12d8735dfc64de8b50b5ab830a6d8705a421c57369de7cb5708a46 19206360 } "port:python27" "" "qtbase qtsvg qtxmlpatterns" {"Qt QML" "Qt Quick" "Qt Quick Layouts" "Qt Quick Widgets"} "" "variant overrides: " "revision 0" "License: " } qtdoc { { 133ec7402ca876be3acb97eabbe05883c56e02e6 3112c44c49820f236316bdcadb22c2231bc1232d7d0c202472bbb30613ad578e 2497440 } "" "" "qtdeclarative qttools sqlite-plugin" {"Qt Reference Documentation"} "requires all documentation" "variant overrides: ~examples ~tests ~debug noarch ~docs" "revision 1" "License: " } qtgamepad { { 2397828e13aa338502c20396e90703e68b1db51b b2f0ae3cda03942ad7971cfeebd0dd7e64faa24320104892f90220080cce8c37 361348 } "" "port:libsdl2" "qtbase qtdeclarative" {"Qt Gamepad"} "technology preview module" "variant overrides: " "revision 0" "License: " } qtgraphicaleffects { { 7a3dbcf7bbb600eafd901f719391a8f0965680c9 5f2a9b50530ac83d7c2b2ce73fbdf03ac61f83a9521e9d4b796fa17a969dd919 14487144 } "" "" "qtdeclarative" {"Qt Graphical Effects"} "" "variant overrides: " "revision 0" "License: " } qtimageformats { { f0ac09e19c5ca637f67daffad981a7e075814fb3 75045eeac11c96194260badbdb4d3e9eb7b7f9972d18d3491230ea820be4606f 2033656 } "" "port:jasper port:libmng port:tiff port:webp" "qtbase" {"Qt Image Formats"} "" "variant overrides: " "revision 3" "License: " } qtlocation { { 7b161c72dd8a05f7b54a845a586da0e082730d52 48a1e39ed989f0133aeacaa379e9c3958ec9b08c043626bba503619891d21abb 3217248 } "" "" "qtbase qtdeclarative qtquickcontrols qtserialport" {"Qt Location" "Qt Positioning"} "" "variant overrides: " "revision 0" "License: " } qtmacextras { { 434deaf47735fe5abeb8403c0ea6ea99a08a3ec4 ee27998f5e0f109bc7604b3754ac435760d0e3722bf67f62f467776f7c5f3411 48228 } "" "" "qtbase" {"Qt Mac Extras"} "" "variant overrides: " "revision 0" "License: " } qtmultimedia { { 2ec53aff67f3cf5fd45b3d9f5d71899dc102f395 a8bc044834f95208261915feefe5e2fdb6761b76f0f99e21062963bd9f9d4a07 3560672 } "" "" "qtbase qtdeclarative" {"Qt Multimedia" "Qt Multimedia Widgets"} "" "variant overrides: " "revision 0" "License: " } qtnetworkauth { { 844e74ebcd3e69f31fa95c79ae984bc73d5068c1 615581c3a989167a207215c790825873fa24d83738c083c136252a462aa3e4c3 110192 } "" "" "qtbase qtwebview" {"Qt Network Authorization"} "technology preview module" "variant overrides: ~universal" "revision 0" "License: " } qtpurchasing { { cc71fe017debfe7f32128affc673d3c8f215b33f b3fd8793525f4e3bf354db927e8b4c9ba1157ae080f2e16afa9a85eec7e1b355 182420 } "" "" "qtbase qtdeclarative" {"Qt Purchasing"} "in-app purchases is of limited value on desktop" "variant overrides: " "revision 0" "License: {GPL-3 OpenSSLException}" } qtquickcontrols { { 2d1c99030e8345e87488609c9452d316951f0d8e 04e70d0ccfd9ba882691a5e8f81e3428ae1b72a76bb9f43ba242f1c33bd7b326 5944024 } "" "" "qtdeclarative qtgraphicaleffects" {"Qt Quick Controls" "Qt Quick Dialogs" "Qt Quick Extras"} "" "variant overrides: " "revision 0" "License: " } qtquickcontrols2 { { b3468bd4b29975cf89630685ed9e24bb971d9aeb b099866ec74f13cf0047274c61f0486d1eba27716fa07b69f682c54d3a4ade1b 3013840 } "" "" "qtgraphicaleffects" {"Qt Quick Controls 2"} "" "variant overrides: " "revision 0" "License: " } qtscript { { acd09e718eaf024a287ef1e747e657d3fb5b419a 293ab91d2d189d889dc80609aa259190fb7de636d360e904784a5ce1a45e5ad3 2604020 } "" "" "qtbase" {"Qt Script" "Qt Script Tools"} "deprecated in favor QJS* in Qt QML" "variant overrides: " "revision 1" "License: " } qtscxml { { aeef913be45b60be7ad8f8985425f12f39d4ed71 b6bb9d397396e7e2667d400c4d904d2d1dd9c1573c37ebe1aa62448289a09dc4 405864 } "" "" "qtbase qtdeclarative" {"Qt SCXML"} "" "variant overrides: " "revision 0" "License: " } qtsensors { { 295b773ac70732c99a13415f4f76ae86f406cb44 3a5d0639ecf8cd30c8ca349c353a8f3c424889b53831e70b6d8c481fc45de796 1987784 } "" "" "qtbase qtdeclarative" {"Qt Sensors"} "" "variant overrides: " "revision 0" "License: " } qtserialbus { { 649d786ab283c0ff9feb0d6b66a512dff24a1dac 58343dd9f2e339d4900a2d4b54ee25ed959cf62bacb012fe61e6b99d7958c10a 251228 } "" "" "qtserialport" {"Qt Serial Bus"} "" "variant overrides: " "revision 0" "License: " } qtserialport { { 79004f8e1f2db0d6be966dffafacce73fa875fd6 52317fded73ad0beb0a2ecf93124a8e2dfdcf14270a762c1f4fd06fb075506ad 265904 } "" "" "qtbase" {"Qt Serial Port"} "" "variant overrides: " "revision 0" "License: " } qtspeech { { f907e9af09b3d31b193e1e72490feb7495be33e5 f16a81593dfe1ad84c2e6bd42316042fe0bc9609f638baca35456a6d56e84c44 80576 } "" "" "qtbase qtdeclarative qtmultimedia" {"Qt Speech"} "technology preview module" "variant overrides: " "revision 0" "License: " } qtsvg { { 6d68b42a973e02b9b69721e49e3194ae1c389bd5 9873191c211ab4da9c0bc47b1e3549f475db4d448bba3175e0f86b24eefadc89 1749352 } "" "" "qtbase" {"Qt SVG"} "" "variant overrides: " "revision 0" "License: " } qttools { { 91000c61fc853b7985373d5c7bcdf72d1ab935c3 95ec8e76d393b6ba26ffff5041fce41946d2bf3aec1402c6533e24d9fc269d83 10007816 } "" "" "qtbase qtdeclarative" {"Qt Designer" "Qt Help" "Qt UI Tools"} "" "variant overrides: " "revision 0" "License: " } qttranslations { { 41e8c4bbe38cc0b222c585516d2e7d515d9cc307 3b7cf72ec50bc2a02bf4e4427b184febac909dba0e02e1861321ca1629c3fc2e 1209556 } "port:qt58-qttools" "" "" {"translation files"} "" "variant overrides: ~examples ~tests ~debug noarch ~docs" "revision 2" "License: " } qtvirtualkeyboard { { a102a5a0788e509357bdd5a44816851e1cd8b496 35fdf5b39d930935b6299ac59f347bea89b983e16bd7961fee3f1b8e16f4e21c 10019848 } "" "port:hunspell" "qtbase qtdeclarative qtsvg qtmultimedia qtquickcontrols" {"Qt Virtual Keyboard"} "GPLv3 license only" "variant overrides: " "revision 0" "License: {GPL-3 OpenSSLException}" } qtwebchannel { { bddd059128b9af69e81f7324621b68b8f338a3c8 5bf5b15413baa235ee2cbfd136ea3b9303b32879b54f9f25bfb4dc96d37d0b4a 143136 } "" "" "qtbase qtdeclarative qtwebsockets" {"Qt WebChannel"} "" "variant overrides: " "revision 0" "License: " } qtwebengine { { cb0789067b954fb14e950b1704450dc513fd1181 223d22f1660811e60677afe0a85f2f385823e25157689561489700c5d1da79be 195865664 } "port:python27 port:py27-ply" "" "qtquickcontrols qtwebchannel qtlocation qttools" {"Qt WebEngine"} "very large and relatively new; requires newer version of OS X" "variant overrides: ~universal" "revision 0" "License: " } qtwebkit { { db6e8a239c744c213033a9a7087b9323cac6014c 79ae8660086bf92ffb0008b17566270e6477c8fa0daf9bb3ac29404fb5911bec 35299204 } "port:python27 port:bison" "port:fontconfig path:lib/pkgconfig/icu-uc.pc:icu port:leveldb port:webp port:libxml2 port:libxslt port:zlib port:sqlite3" "qtbase qtdeclarative qtlocation qtmultimedia qtsensors qtwebchannel qtxmlpatterns" {"Qt WebKit" "Qt WebKit Widgets"} "community support only (use Qt WebEngine)" "variant overrides: " "revision 8" "License: " } qtwebkit-examples { { bd38487740e78b95bd19172b13c5dbf8603509a0 84c7ae197040b1a9171d0d7ae04384f826da2b0c1b3f0ef2a8768af16a1959a1 3426512 } "" "" "qtbase qtwebkit qtscript qtsvg qtxmlpatterns qtdeclarative qttools" {"examples for Qt WebKit"} "community support only (use Qt WebEngine)" "variant overrides: ++examples ~docs" "revision 0" "License: " } qtwebsockets { { fb8b1ac9c9d49cd988fe2af337c2e30dde4b605a aa110af297d0d3239f346c3ee0cd43621adf463eb62a04941bbfe3fcccb845f5 194524 } "" "" "qtbase qtdeclarative" {"Qt WebSockets"} "" "variant overrides: " "revision 0" "License: " } qtwebview { { 5ec41c5413b4ec16913b3716d4c4e9da1927d212 b7d8d4dc8c11f4e70668da509d827c7342b3e5864e8d83f3a0fa56b9cd527fd3 109204 } "" "" "qtdeclarative qtwebengine" {"Qt WebView"} "new in 5.6.0; requires qtwebengine" "variant overrides: ~universal" "revision 0" "License: " } qtxmlpatterns { { da29dc37f5463817420113d05b41a9d303822bfe 7bffa65ea52e54fb1314b45222888612d55eaf51a936a6119b8756266439da04 1352108 } "" "" "qtbase" {"Qt XML Patterns"} "" "variant overrides: " "revision 0" "License: " } } ############################################################################### SQL Plugin Format # # { # variant name # dependency, library # include directory # library directory # library name # obsolete? (empty string is no) # } # ############################################################################### array set sql_plugins { {sqlite SQLite "revision 0"} { { "sqlite3" "port:sqlite3" "${prefix}/include" "${prefix}/lib" "-lsqlite3" "" } } {psql PostgreSQL "revision 0"} { { "postgresql96" "port:postgresql96" "${prefix}/include/postgresql96" "${prefix}/lib/postgresql96" "-lpq" "" } { "postgresql95" "port:postgresql95" "${prefix}/include/postgresql95" "${prefix}/lib/postgresql95" "-lpq" "" } { "postgresql94" "port:postgresql94" "${prefix}/include/postgresql94" "${prefix}/lib/postgresql94" "-lpq" "" } { "postgresql84" "port:postgresql84" "${prefix}/include/postgresql84" "${prefix}/lib/postgresql84" "-lpq" "" } } {mysql MySQL "revision 0"} { { "mariadb55" "port:mariadb" "${prefix}/include/mariadb/mysql" "${prefix}/lib/mariadb/mysql" "-lmysqlclient_r" "" } { "mysql57" "port:mysql57" "${prefix}/include/mysql57/mysql" "${prefix}/lib/mysql57/mysql" "-lmysqlclient_r" "" } { "mysql56" "port:mysql56" "${prefix}/include/mysql56/mysql" "${prefix}/lib/mysql56/mysql" "-lmysqlclient_r" "" } } } # 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 # the Qt 5.8 requires NSWindowDidChangeOcclusionStateNotification, which was introduced in 10.9 # see https://developer.apple.com/library/content/releasenotes/General/APIDiffsMacOSX10_9/AppKit.html if { ${os.platform} eq "darwin" && ${os.major} < 13 } { known_fail yes pre-fetch { ui_error "${subport} requires OS X 10.9 or later" return -code error "incompatible OS version" } } foreach {module module_info} [array get modules] { set revision_string [string trim [lindex ${module_info} 7]] set revision_string [string range ${revision_string} 1+[string last " " ${revision_string}] end] subport ${name}-${module} { distname ${module}-opensource-src-${version} revision ${revision_string} # see https://bugreports.qt.io/browse/QTBUG-35514 build.target 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] { if { ${qtdeps} ne "qtbase" } { 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 { ${module} eq "qtbase" } { # this subport uses configure script (NOT qmake) PortGroup qt5 1.0 if { ${os.platform} ne "darwin" } { pre-fetch { ui_warn "${subport} is untested on \"${os.platform}\"." } } if { [variant_isset universal] } { pre-fetch { ui_warn "Multiple architectures is not a Reference Configuration for Qt." ui_warn "See https://doc.qt.io/qt-5/supported-platforms.html#reference-configurations" } } else { if { ${configure.build_arch} eq "i386" } { pre-fetch { ui_warn "32-bit mode is not a Reference Configuration for Qt." ui_warn "See https://doc.qt.io/qt-5/supported-platforms.html#reference-configurations" } } } # https://codereview.qt-project.org/#/c/141654/ patchfiles-append patch-add_sdk.diff # see https://codereview.qt-project.org/#/c/184053/1 patchfiles-append patch-qt_module.prf.diff # the build system uses pkgconfig to look for an OpenGL installation (gl.pc) # if mesa is installed, the build system will try to use it instead of -framework OpenGL -framework AGL # when building qtmultimedia, this will cause problems # Undefined symbols: "_CGLGetCurrentContext" patchfiles-append patch-opengl.diff # undo part of https://codereview.qt-project.org/#/c/140954/ # .pc files still needed by some ports # see https://github.com/Homebrew/homebrew-core/blob/master/Formula/qt5.rb patchfiles-append patch-pc_files.diff # see https://stackoverflow.com/questions/14506151/invalid-symbol-redefinition-in-inline-asm-on-llvm # only runs test code on 32-bit systems patchfiles-append patch-tst_benchlibcallgrind.diff # this test might still cause problems, but with 5.4.2->5.5.0, it is no longer run # tests/auto/corelib/plugin/qpluginloader/qpluginloader.pro: # -macx-*: SUBDIRS += machtest # +macx-*: contains(QT_CONFIG, private_tests): SUBDIRS += machtest # # When testing, ensure that a universal object file is not inadvertently created. patchfiles-append patch-machtest.diff # see https://bugreports.qt.io/browse/QTBUG-62266 patchfiles-append patch-sdk10_13.diff # avoid non-standard C++ that Xcode Clang accepts but other compilers do not # see https://lists.llvm.org/pipermail/llvm-bugs/2017-January/053481.html # see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=11764 patchfiles-append patch-qualified_reference.diff # find the Rez program patchfiles-append patch-find_rez.diff post-patch { reinplace \ "s|__MACPORTS_Rez__|[exec -ignorestderr xcrun --find Rez]|g" \ mkspecs/common/mac.conf \ mkspecs/features/mac/rez.prf } # see https://trac.macports.org/ticket/67418 if {${os.platform} eq "darwin" && ${os.major} < 14} { use_xcode yes } #----------------------------------------------------------------------------- # qtbase is used for: # 1) building qtbase # 2) building MacPorts projects via qmake # 3) building end-user projects # # 1 & 2 require consistency with the MacPorts environment # 3 requires consistency with the default Qt installation # # 2 can be achieved via environment variables # (e.g. QMAKE_MACOSX_DEPLOYMENT_TARGET=${macosx_deployment_target}) # # the only way 3 can be achieved is if no changes are made to the build system # # the following is an attempt to achieve 1 without destroying 3 #----------------------------------------------------------------------------- # save default spec files post-extract { copy ${worksrcpath}/mkspecs ${worksrcpath}/mkspecs-save } # respect MacPorts build variables patchfiles-append patch-mkspecs.diff # respect configure.compiler if { ${configure.compiler} eq "clang" } { # let xargs find correct compiler (default behaviour) post-patch { # let xargs find correct compiler reinplace \ "s|__MACPORTS_CC__|clang|g" \ ${worksrcpath}/mkspecs/common/clang.conf reinplace \ "s|__MACPORTS_CXX__|clang++|g" \ ${worksrcpath}/mkspecs/common/clang.conf } } else { post-patch { reinplace \ "s|__MACPORTS_CC__|${configure.cc}|g" \ ${worksrcpath}/mkspecs/common/clang.conf reinplace \ "s|__MACPORTS_CXX__|${configure.cxx}|g" \ ${worksrcpath}/mkspecs/common/clang.conf } } if { [string match macports-clang-* ${configure.compiler}] && [vercmp ${xcodeversion} "7.0"] >= 0 } { # non-Xcode clang does not seem to be able to understand tbd files # for an explanation of tbd files, see # https://stackoverflow.com/questions/31450690/why-xcode-7-shows-tbd-instead-of-dylib # see https://trac.macports.org/ticket/53151 pre-fetch { ui_error "This configuration is known to fail" ui_error "See https://trac.macports.org/ticket/53151" ui_error "As a workaround, do not set configure.compiler manually" return -code error "incompatible configuration" } } post-patch { # respect configure.cxx_stdlib reinplace \ "s|__MACPORTS_CXX_STDLIB__|${configure.cxx_stdlib}|g" \ ${worksrcpath}/mkspecs/common/clang-mac.conf # respect macosx_deployment_target foreach spec {macx-clang macx-clang-32 macx-g++ macx-g++-32 macx-g++40 macx-g++42 macx-icc macx-llvm} { reinplace \ "s|__MACPORTS_DEPLOYMENT_TARGET__|${macosx_deployment_target}|g" \ ${worksrcpath}/mkspecs/${spec}/qmake.conf } #respect configure.optflags reinplace \ "s|__MACPORTS_OPTFLAGS__|${configure.optflags}|g" \ ${worksrcpath}/mkspecs/common/gcc-base.conf } # respect configure.sdk_version post-patch { reinplace \ "s|__MACPORTS_MAC_SDK__|${qt5.mac_sdk}|g" \ ${worksrcpath}/mkspecs/common/macx.conf } # see https://bugreports.qt.io/browse/QTBUG-58401 # see https://code.qt.io/cgit/qt/qtbase.git/commit/?id=8f06124b70bad709b2f99789f2416529db5f153d patchfiles-append patch-NSRect.diff # autogeneration works differently on 64-bit and 32-bit builds patchfiles-append patch-qcocoahelpers.diff # return modified spec files to the default values post-build { if { [variant_exists universal] && [variant_isset universal] } { foreach arch ${universal_archs_to_use} { foreach conf {clang.conf macx.conf clang-mac.conf gcc-base.conf} { move -force ${worksrcpath}-${arch}/mkspecs-save/common/${conf} ${worksrcpath}-${arch}/mkspecs/common/${conf} } foreach spec {macx-clang macx-clang-32 macx-g++ macx-g++-32 macx-g++40 macx-g++42 macx-icc macx-llvm} { move -force ${worksrcpath}-${arch}/mkspecs-save/${spec}/qmake.conf ${worksrcpath}-${arch}/mkspecs/${spec}/qmake.conf } } } else { foreach conf {clang.conf macx.conf clang-mac.conf gcc-base.conf} { move -force ${worksrcpath}/mkspecs-save/common/${conf} ${worksrcpath}/mkspecs/common/${conf} } foreach spec {macx-clang macx-clang-32 macx-g++ macx-g++-32 macx-g++40 macx-g++42 macx-icc macx-llvm} { move -force ${worksrcpath}/mkspecs-save/${spec}/qmake.conf ${worksrcpath}/mkspecs/${spec}/qmake.conf } } } # --prefix is not recognized. configure.pre_args-delete --prefix=${prefix} # --disable-dependency-tracking is not recognized. configure.universal_args-delete --disable-dependency-tracking # Installation options: #-extprefix SYSROOT/PREFIX #-hostprefix EXTPREFIX #-libexecdir ARCHDATADIR/libexec #-hostbindir HOSTPREFIX/bin #-hostlibdir HOSTPREFIX/lib configure.args-append \ -prefix ${qt_dir} \ -bindir ${qt_bins_dir} \ -headerdir ${qt_includes_dir} \ -libdir ${qt_libs_dir} \ -archdatadir ${qt_archdata_dir} \ -plugindir ${qt_plugins_dir} \ -importdir ${qt_imports_dir} \ -qmldir ${qt_qml_dir} \ -datadir ${qt_data_dir} \ -docdir ${qt_docs_dir} \ -translationdir ${qt_translations_dir} \ -sysconfdir ${qt_sysconf_dir} \ -examplesdir ${qt_examples_dir} \ -testsdir ${qt_tests_dir} \ -hostdatadir ${qt_host_data_dir} # Configure options: configure.args-append \ -release \ -opensource \ -confirm-license \ -shared \ -accessibility foreach driver { db2 ibase mysql oci odbc psql sqlite sqlite2 tds } { configure.args-append -no-sql-${driver} } if {!${universal_possible} || ![variant_isset universal]} { configure.args-append "-platform ${qt_qmake_spec}" } else { set merger_configure_args(i386) "-platform ${qt_qmake_spec_32}" set merger_configure_args(x86_64) "-platform ${qt_qmake_spec_64}" } configure.args-append \ -no-testcocoon \ -no-gcov \ -force-pkg-config # turn off CFG_CLOEXEC if gnulib is installed # Third Party Libraries: configure.args-append \ -system-zlib \ -no-mtdev \ -no-journald \ -no-syslog \ -system-libpng \ -system-libjpeg \ -system-freetype \ -system-harfbuzz \ -no-openssl \ -no-libproxy \ -system-pcre \ --disable-xcb \ -no-xkbcommon-x11 \ -no-xkbcommon-evdev \ -no-xinput2 \ -no-xcb-xlib \ -glib \ -no-gtk # from the configure script: # NOTE: -optimized-tools is not useful in -release mode. # http://lists.qt-project.org/pipermail/development/2017-January/028392.html # Prefer ICU over iconv # Additional options: configure.args-append \ {-make libs} \ {-make tools} \ {-nomake examples} \ {-nomake tests} \ -gui \ -widgets \ -no-rpath \ -verbose \ -cups \ -no-iconv \ -no-evdev \ -no-tslib \ -icu \ -no-fontconfig \ -strip \ -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-mirclient \ -no-libinput \ -no-system-proxies # MacOS/iOS options: configure.args-append \ -framework \ -securetransport # do not use ${configure.sdk_version} # SDK is recorded in ${qt_mkspecs_dir}/qdevice.pri # SDK may then be removed if Xcode is updated # see https://trac.macports.org/ticket/54044 # see https://trac.macports.org/ticket/55195 configure.args-append \ -sdk macosx # configure options that don't show up in configure --help configure.args-append \ -no-libudev \ -no-egl # 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 no} proc portconfigure::should_add_cxx_abi {} {return no} compiler.limit_flags yes 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 if {${universal_possible} && [variant_isset universal]} { set merger_arch_flag no } configure.march configure.mtune configure.universal_ldflags configure.universal_cflags configure.universal_cxxflags configure.universal_cppflags # configure script looks for perl but doesn't seem to use it for our configuration # configure script uses gawk if it can find it, # so require it for consistency depends_build-append port:gawk # unless overridden, configure script uses gmake if it can find it configure.env-append MAKE=${build.cmd} if {${universal_possible} && [variant_isset universal]} { post-destroot { # delete preprocessor comments surrounding QT_CPU_FEATURES.i386 and QT_CPU_FEATURES.x86_64 reinplace "/^#ifndef.*$/d" ${destroot}${qt_mkspecs_dir}/qmodule.pri reinplace "/^#else.*$/d" ${destroot}${qt_mkspecs_dir}/qmodule.pri reinplace "/^#endif.*$/d" ${destroot}${qt_mkspecs_dir}/qmodule.pri } # The file ${qt_mkspecs_dir}/qconfig.pri is still not properly merged # A workaround is to set QT_ARCH and QT_TARGET_ARCH manually (see e.g. the qmake5 PortGroup) } 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 # see https://trac.macports.org/ticket/58204 depends_lib-append port:openssl10 # Please do not use -I and -L. # -I becomes -isystem in the Qt build system, which is checked *after* CPATH. compiler.cpath-prepend ${prefix}/include/openssl-1.0 compiler.library_path-prepend \ ${prefix}/lib/openssl-1.0 } default_variants-append +openssl } else { # these subports use qmake PortGroup qmake5 1.0 # determine which variants are to be turned off set request_examples true set request_tests true set def_var "" 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 } { qt5.debug_variant no } if { [lsearch -exact [lindex ${module_info} 6] "~examples"] != -1 } { set request_examples false } if { [lsearch -exact [lindex ${module_info} 6] "~tests"] != -1 } { set request_tests false } if { [lsearch -exact [lindex ${module_info} 6] "++examples"] != -1 } { set request_examples true lappend def_var "+examples" } if { ${request_examples} } { variant examples description {Build examples} {} } if { ${request_tests} } { variant tests description {Enable tests} {} } if { ${def_var} ne "" } { default_variants-append ${def_var} } # accommodating variant request varies depending on how qtbase was built pre-configure { # determine if qmake builds examples by default (set via variants) if {[active_variants ${name}-qtbase examples ""]} { set base_examples true } else { set base_examples false } # determine if qmake runs tests by default (set via variants) if {[active_variants ${name}-qtbase tests ""]} { set base_tests true } else { set base_tests false } # determine if the user wants to build examples if { [variant_exists examples] && [variant_isset examples] } { set this_examples true } else { set this_examples false } # determine if the user wants to run tests if { [variant_exists tests] && [variant_isset tests] } { set this_tests true } else { set this_tests false } # determine if qmake's default and user requests are compatible; override qmake if necessary if { ${this_examples} && !${base_examples} } { configure.args-append "QT_BUILD_PARTS+=\"examples\"" } if { !${this_examples} && ${base_examples} } { configure.args-append "QT_BUILD_PARTS-=\"examples\"" } if { ${this_tests} && !${base_tests} } { configure.args-append "QT_BUILD_PARTS+=\"tests\"" } if { !${this_tests} && ${base_tests} } { configure.args-append "QT_BUILD_PARTS-=\"tests\"" } } ############################################################################### # Special Cases ############################################################################### # special case if { ${module} eq "qtdoc" } { build.target docs destroot.target install_docs # in the process of building the html files, qtdoc looks for all installed modules # with no clear way to select only a subset # unless a way is found, ReproducibleBuilds (https://trac.macports.org/wiki/ReproducibleBuilds) # requires qtdoc depend on all the documentation modules foreach {module_doc module_doc_info} [array get modules] { if { [lsearch -exact [lindex ${module_doc_info} 6] "~docs"] == -1 } { depends_lib-append port:${name}-${module_doc}-docs } } } # special case if { ${module} eq "qtlocation" } { # qtlocation uses # Gypsy (https://gypsy.freedesktop.org/wiki/) # if they can be found # Ensure that test fails even if software is installed post-patch { foreach test { gypsy } { reinplace "s|return 0;|return 0;\\\n#error turn off test|g" ${worksrcpath}/config.tests/${test}/main.cpp } } } # special case if { ${module} eq "qtwebkit" } { # use MacPorts icu # # qmake uses pkgconfig to look for icu # this feature does not work without "CONFIG += link_pkgconfig" patchfiles-append patch-icu.diff # qtwebkit uses # glx # libXcomposite # libXrender # if they can be found # Ensure that test fails even if software is installed post-patch { foreach test { glx libXcomposite libXrender } { reinplace "s|return 0;|return 0;\\\n#error turn off test|g" ${worksrcpath}/Tools/qmake/config.tests/${test}/${test}.cpp } } # see https://bugs.webkit.org/show_bug.cgi?id=171612 patchfiles-append patch-qtwebkit_fix_icu.diff # backport upstream WebKit changes to avoid # error: "Unsupported PAGE_SHIFT amount" # see https://trac.macports.org/ticket/62027#comment:49 patchfiles-append patch-qtwebkit_fix_page_shift.diff # work around https://trac.macports.org/ticket/60975 patchfiles-append patch-webkit_XPathGrammar.y.diff patchfiles-append patch-webkit_makegrammar.pl.diff } # special case if { ${module} eq "qttools" } { # prevent qttools from opportunistically using qtwebkit if it can be found patchfiles-append patch-no_qtwebkit.diff variant qtwebkit description {build with QtWebkit support} { patchfiles-delete patch-no_qtwebkit.diff depends_lib-append port:${name}-qtwebkit } post-extract { # these folders are installed and conflict with ${name}-qttools-docs delete ${worksrcpath}/examples/assistant/simpletextviewer/documentation delete ${worksrcpath}/examples/help/contextsensitivehelp/docs } # see #44934 (and #35067 for the qt4-mac version) set framework_list [split ${qt_frameworks_dir} '/'] set qt_list [split ${qt_dir} '/'] while {[llength ${qt_list}] && [llength ${framework_list}]} { set var_qt [lindex $qt_list 0] set var_framework [lindex $framework_list 0] if { ${var_qt} ne ${var_framework} } { break } # remove first element from list set qt_list [lreplace ${qt_list} 0 0] set framework_list [lreplace ${framework_list} 0 0] } set libreplace [string repeat ../ [llength ${qt_list}]][join ${framework_list} /] if { ${libreplace} ne "lib" } { patchfiles-append patch-shared.diff post-patch { reinplace "s|__MACPORTS_FRAMWORK_DIR__|${libreplace}|g" ${worksrcpath}/src/macdeployqt/shared/shared.cpp } } } # special case if { ${module} eq "qtwebengine" } { # see https://doc.qt.io/qt-5/qtwebengine-platform-notes.html PortGroup xcodeversion 1.0 minimum_xcodeversions {13 6.1} if { ${os.platform} eq "darwin" && ${os.major} == 13 } { # see https://bugreports.qt.io/browse/QTBUG-54486 configure.sdk_version 10.10 } # see http://lists.qt-project.org/pipermail/interest/2016-February/thread.html#20946 # see https://googleappsupdates.blogspot.co.uk/2014/09/google-chrome-64-bit-for-mac-and-windows.html # see https://doc.qt.io/qt-5/qtwebengine-platform-notes.html supported_archs x86_64 # UsingTheRightCompiler (https://trac.macports.org/wiki/UsingTheRightCompiler) build.env-append CXX=${configure.cxx} build.env-append CC=${configure.cc} configure.args-append QMAKE_LINK=${configure.cxx} # see https://trac.macports.org/ticket/56829 patchfiles-append patch-qtwebengine_xcode10.diff # the following libraries, even when available, do not seem to affect the build # so turn them off patchfiles-append patch-qtwebengine_external.diff configure.post_args-append \ -- \ -no-pulseaudio \ -no-alsa patchfiles-append patch-qtwebengine_deployment_target.diff } # special case if { ${module} eq "qtvirtualkeyboard" } { # do not opportunistically use xcb patchfiles-append patch-qtvirtualkeyboard_noxcb.diff } # special case if { ${module} eq "qtgamepad" } { # /System/Library/Frameworks/GameController.framework is 64-bit only patchfiles-append patch-qtgamepad_i386.diff } # special case if { ${module} eq "qtsensors" && [variant_isset examples] } { if { [variant_isset debug] } { set debug "_debug" } else { set debug "" } # fix library path names or MacPorts will try to reinstall post-destroot { foreach dylib "grue/Grue/libdeclarative_grue${debug}.dylib grue/libgruesensor.1.dylib grue/sensors/libqtsensors_grue${debug}.dylib sensor_explorer/Explorer/libdeclarative_explorer${debug}.dylib" { system "/usr/bin/install_name_tool -id ${qt_examples_dir}/sensors/${dylib} ${destroot}${qt_examples_dir}/sensors/${dylib}" } foreach dylib "grue/Grue/libdeclarative_grue${debug}.dylib grue/sensors/libqtsensors_grue${debug}.dylib" { system "/usr/bin/install_name_tool -change libgruesensor.1.dylib ${qt_examples_dir}/sensors/grue/libgruesensor.1.dylib ${destroot}${qt_examples_dir}/sensors/${dylib}" } } } # special case if { ${module} eq "qtconnectivity" } { patchfiles-append patch-qtconnectivity_qtbug_76847.diff # see https://bugreports.qt.io/browse/QTBUG-62658 patchfiles-append patch-qtconnectivity-sdk10_13.diff } # special case if { ${module} eq "qtmultimedia" } { # avoid # warning: instance method '-setWantsLayer:' not found (return type defaults to 'id') [-Wobjc-method-access] # warning: multiple methods named 'layer' found [-Wobjc-multiple-method-names] # error: cannot initialize a variable of type 'CALayer *' with an rvalue of type 'NSInteger' (aka 'long') patchfiles-append patch-qtmultimedia-avfvideowindowcontrol.mm.diff # In the file config.tests/openal/openal.pro, defining HEADER_OPENAL_PREFIX means # include directives use macOS OpenAL Framework. # In src/multimedia/configure.json, pkgconfig is relied upon, which finds MacPorts openal # for linking. # We must choose one or the other. # see https://trac.macports.org/ticket/54592 patchfiles-append patch-qtmultimedia_no_macports_openal.diff variant pulseaudio description {Compile PulseAudio support} { depends_lib-append port:pulseaudio } variant gstreamer description {Compile GStreamer support} { depends_lib-append port:gstreamer1 port:gstreamer1-gst-plugins-base } # for commands must follow -spec set in PortGroup configure.post_args-append -- if { ![variant_isset pulseaudio] } { configure.post_args-append -no-pulseaudio } if { ![variant_isset gstreamer] } { configure.post_args-append -no-gstreamer } } # special case if { ${module} eq "qtwebkit-examples" && ![variant_isset examples] } { # create a dummy file so the port can be successfully activated post-destroot { xinstall -d -m 0755 ${destroot}${prefix}/share/doc/${subport} set docfile [open ${destroot}${prefix}/share/doc/${subport}/README.txt "w"] puts ${docfile} "Without the examples variant, no examples are installed" puts ${docfile} "${long_description}" close ${docfile} } } # special case if { ${module} eq "qtscript" } { # see https://trac.macports.org/ticket/54453 patchfiles-append patch-qtscript_ceil.diff # error: meaningless 'volatile' on asm outside function patchfiles-append patch-qtscript_no_asm_volatile.diff # See https://code.qt.io/cgit/qt/qt5.git/commit/?id=758d922716ebdedeaa6fa26369c8dbb9dff4bae4 if {[variant_isset examples]} { depends_lib-append port:${name}-qttools } # see https://trac.macports.org/ticket/59321 post-extract { move ${worksrcpath}/src/3rdparty/javascriptcore/VERSION ${worksrcpath}/src/3rdparty/javascriptcore/VERSION.txt } # std::auto_ptr was removed in C++17 configure.args-append DEFINES+=_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR } # special case if { ${module} eq "qtwebview" || ${module} eq "qtnetworkauth" } { # dependents of qtwebengine supported_archs x86_64 } # special case if { ${module} eq "qtimageformats" } { # https://trac.macports.org/ticket/65821 patchfiles-append patch-qtimageformats-qjp2handler.cpp.diff } } } if { [lsearch -exact [lindex ${module_info} 6] "~docs"] == -1 } { subport ${name}-${module}-docs { supported_archs noarch installs_libs no platforms any distname ${module}-opensource-src-${version} revision ${revision_string} description Documentation for the port ${name}-${module} long_description ${description} build.target docs destroot.target install_docs checksums \ rmd160 [lindex [lindex ${module_info} 0] 0] \ sha256 [lindex [lindex ${module_info} 0] 1] \ size [lindex [lindex ${module_info} 0] 2] depends_build-append \ port:${name}-qttools \ port:${name}-sqlite-plugin # depend on the modules for which this subport provides documentation # also have the same build dependencies depends_build-append port:${name}-${module} foreach deps [lindex ${module_info} 1] { depends_build-append [subst ${deps}] } PortGroup qmake5 1.0 qt5.debug_variant no # special cases if { ${module} eq "qttools" } { post-extract { # generated makefiles assume full Qt was built locally xinstall -d -m 0755 ${worksrcpath}/bin/ foreach bin {qdoc qhelpgenerator qtattributionsscanner} { ln -s ${qt_bins_dir}/${bin} ${worksrcpath}/bin/ } } } elseif { ${module} eq "qtwebengine" } { # UsingTheRightCompiler (https://trac.macports.org/wiki/UsingTheRightCompiler) build.env-append CXX=${configure.cxx} } elseif { ${module} eq "qtwebkit" } { post-extract { # without this file, the makefile ${worksrcpath}/qtwebkit/Source/WebCore/Makefile.WebCore.Target # keeps generating itself over and over again # this file is only created when the library is being built, however xinstall -d -m 0755 ${worksrcpath}/Source/WebCore/generated touch ${worksrcpath}/Source/WebCore/generated/InspectorBackendCommands.qrc } } } } } # see https://doc.qt.io/qt-5/sql-driver.html for info on building SQL Database Drivers foreach {sql_names sql_info} [array get sql_plugins] { set driver [lindex ${sql_names} 0] set dbms [lindex ${sql_names} 1] set revision_string [lindex ${sql_names} 2] set revision_string [string range ${revision_string} 1+[string last " " ${revision_string}] end] subport ${name}-${driver}-plugin { PortGroup qmake5 1.0 distname qtbase-opensource-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] description ${dbms} Database Driver for Qt Tool Kit ${qt_major} long_description ${dbms} Database Driver for Qt Tool Kit ${qt_major} patchfiles-append patch-sql_plugins.diff # if there is more than one version of the database system, create variants for each version if { [llength ${sql_info}] > 1 } { set any_variant_set false foreach variant_info ${sql_info} { set varName [lindex ${variant_info} 0] # find every other variant so it can be marked as conflicting set conflicts_list "" foreach variant_info2 ${sql_info} { set varName2 [lindex ${variant_info2} 0] if { ${varName} ne ${varName2} } { lappend conflicts_list ${varName2} } } # get only the numbers from the name regexp {[0-9].} ${varName} varVer variant ${varName} conflicts ${conflicts_list} description "use version ${varVer} of ${dbms}" {} # check if any variant has been set if { [variant_isset ${varName}] } { set any_variant_set true } } # ensure at least one variant is set if { !${any_variant_set} } { default_variants-append +[lindex [lindex ${sql_info} 0] 0] } } # as of Qt 5.8, QMAKE_USE is used to find external libraries set use_name [string toupper ${driver}] foreach variant_info ${sql_info} { set varName [lindex ${variant_info} 0] if { ( [variant_exists ${varName}] && [variant_isset ${varName}] ) || [llength ${sql_info}]==1 } { depends_lib-append [lindex ${variant_info} 1] configure.args-append \ [subst QMAKE_INCDIR_${use_name}+=\"[lindex ${variant_info} 2]\"] \ [subst QMAKE_LIBDIR_${use_name}+=\"[lindex ${variant_info} 3]\"] \ [subst QMAKE_LIBS_${use_name}+=\"[lindex ${variant_info} 4]\"] } } # for single architecture, easier to use # worksrcdir ${worksrcdir}/qtbase/src/plugins/sqldrivers/${driver}, # but doesn't work for universal build configure.dir ${worksrcpath}/src/plugins/sqldrivers/${driver} build.dir ${configure.dir} destroot.dir ${configure.dir} # see https://trac.macports.org/ticket/53248 qt5.top_level ${worksrcpath} } } subport ${name}-docs { # meta-port to install documentation for various modules revision 0 description Documentation for Qt Tool Kit ${qt_major} long_description Documentation for Qt Tool Kit ${qt_major} master_sites distfiles use_configure no supported_archs noarch installs_libs no platforms any 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 "" } { if { [lsearch -exact [lindex ${module_info} 6] "~docs"] == -1 } { depends_run-append port:${name}-${module}-docs } } } } if { ${subport} eq ${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 installs_libs no platforms any 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 } set python_framework "" set depends_check "" if { [info exists depends_build] } { set depends_check "${depends_check} ${depends_build}" } if { [info exists depends_lib] } { set depends_check "${depends_check} ${depends_lib}" } foreach deps ${depends_check} { if { [string first ":python27" ${deps}] >= 0 } { # If Qt components use Python, ensure that MacPorts python27 is used # # a better solution would be to force components to use a specific python program # how to accomplish such a thing is not entirely clear # # see #49838 # # version 5.5.1 (at least) of qtwebengine must find a python version in the interval [2.7, 3) # (see tools/qmake/mkspecs/features/functions.prf) # versions 5.5.1 of qtdeclarative and qtwebkit also use python with no way of specifying which one # set python_framework ${frameworks_dir}/Python.framework/Versions/2.7 } } if { ${python_framework} ne "" } { configure.env-append PATH=${python_framework}/bin:$env(PATH) build.env-append PATH=${python_framework}/bin:$env(PATH) } unset python_framework if { ![exists universal_variant] || [option universal_variant] } { PortGroup muniversal 1.0 } if {${universal_possible} && [variant_isset universal]} { merger-post-destroot { foreach arch ${universal_archs_to_use} { set dir ${destroot}-${arch} foreach prlfl [glob -nocomplain ${dir}${qt_libs_dir}/*.framework/*.prl] { reinplace -q "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${prlfl} } foreach prlfl [glob -nocomplain ${dir}${qt_libs_dir}/*.prl] { reinplace -q "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${prlfl} } foreach prlfl [glob -nocomplain ${dir}${qt_examples_dir}/widgets/tools/plugandpaint/plugins/*.prl] { reinplace -q "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${prlfl} } if { [file exists ${dir}${qt_libs_dir}/cmake/Qt5Core/Qt5CoreConfigExtrasMkspecDir.cmake] } { reinplace "s|macx-clang-32|macx-clang|g" ${dir}${qt_libs_dir}/cmake/Qt5Core/Qt5CoreConfigExtrasMkspecDir.cmake } # Libs.private contains the value of ${worksrcpath}-${arch}, which prevents merging if { [file exists ${dir}${qt_libs_dir}/pkgconfig/Qt5WebKit.pc] } { reinplace "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${dir}${qt_libs_dir}/pkgconfig/Qt5WebKit.pc } if { [file exists ${dir}${qt_libs_dir}/pkgconfig/Qt5WebEngineCore.pc] } { reinplace "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${dir}${qt_libs_dir}/pkgconfig/Qt5WebEngineCore.pc } if { [file exists ${dir}${qt_examples_dir}/declarative/tutorials/gettingStarted/parts/part5/filedialog/Makefile] } { reinplace "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${dir}${qt_examples_dir}/declarative/tutorials/gettingStarted/parts/part5/filedialog/Makefile reinplace -E "/\\w*-arch \\\\/d" ${dir}${qt_examples_dir}/declarative/tutorials/gettingStarted/parts/part5/filedialog/Makefile reinplace -E "/\\w*${arch} \\\\/d" ${dir}${qt_examples_dir}/declarative/tutorials/gettingStarted/parts/part5/filedialog/Makefile reinplace -E {s:-arch +[^ ]+::g} ${dir}${qt_examples_dir}/declarative/tutorials/gettingStarted/parts/part5/filedialog/Makefile reinplace "s|macx-clang-32|macx-clang|g" ${dir}${qt_examples_dir}/declarative/tutorials/gettingStarted/parts/part5/filedialog/Makefile } if { [file exists ${dir}${qt_examples_dir}/multimedia/spectrum/fftreal.framework/fftreal.prl] } { reinplace "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${dir}${qt_examples_dir}/multimedia/spectrum/fftreal.framework/fftreal.prl } if { [file exists ${dir}${qt_examples_dir}/multimedia/spectrum/spectrum.app/Contents/Frameworks/fftreal.framework/fftreal.prl] } { reinplace "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${dir}${qt_examples_dir}/multimedia/spectrum/spectrum.app/Contents/Frameworks/fftreal.framework/fftreal.prl } if { [file exists ${dir}${qt_examples_dir}/sensors/grue/libgruesensor.prl] } { reinplace "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${dir}${qt_examples_dir}/sensors/grue/libgruesensor.prl } } } } post-destroot { # see #44204 foreach f [glob -nocomplain -tails -directory ${destroot}${qt_libs_dir} *.framework] { set framework [file rootname ${f}] set include_list [split ${qt_includes_dir} '/'] set framework_list [split ${qt_libs_dir} '/'] while {[llength ${include_list}] && [llength ${framework_list}]} { set var_include [lindex $include_list 0] set var_framework [lindex $framework_list 0] if { ${var_include} ne ${var_framework} } { break } # remove first element from list set include_list [lreplace ${include_list} 0 0] set framework_list [lreplace ${framework_list} 0 0] } xinstall -d -m 0755 ${destroot}${qt_includes_dir} ln -s [string repeat ../ [llength ${include_list}]][join ${framework_list} /]/${f}/Headers ${destroot}${qt_includes_dir}/${framework} } # .app and non-.app programs are both put in qt_bins_dir # put a link of any .app programs in the ${qt_apps_dir} if { ${qt_bins_dir} ne ${qt_apps_dir} } { xinstall -d -m 0755 ${destroot}${qt_apps_dir} foreach app [glob -nocomplain -tails -directory ${destroot}${qt_bins_dir} *.app] { ln -s ${qt_bins_dir}/${app} ${destroot}${qt_apps_dir} } } # put configuration files in places they will be found automatically if { ${qt_libs_dir} ne "${prefix}/lib" } { # put link to pkgconfig files in place where pkgconfig will find it # most Qt 5 pkgconfig files begin with Qt5, so link should not conflict with any other Qt installations # exceptions: Enginio (new in Qt 5.3, removed in Qt 5.7) xinstall -d -m 0755 ${destroot}${prefix}/lib/pkgconfig foreach pcfile [glob -nocomplain -tails -directory ${destroot}${qt_libs_dir}/pkgconfig *.pc] { ln -s ${qt_libs_dir}/pkgconfig/${pcfile} ${destroot}${prefix}/lib/pkgconfig } # put link to cmake files in place where cmake will find it # most Qt 5 cmake directories begin with Qt5, so link should not conflict with any other Qt installations # exceptions: Enginio (new in Qt 5.3, removed in Qt 5.7) xinstall -d -m 0755 ${destroot}${prefix}/lib/cmake foreach cmakedir [glob -type d -nocomplain -tails -directory ${destroot}${qt_libs_dir}/cmake *] { xinstall -d -m 0755 ${destroot}${prefix}/lib/cmake/${cmakedir} foreach cmakefile [glob -tails -directory ${destroot}${qt_libs_dir}/cmake/${cmakedir} *.cmake] { ln -s ${qt_libs_dir}/cmake/${cmakedir}/${cmakefile} ${destroot}${prefix}/lib/cmake/${cmakedir}/ } } # if cmake finds configuration files in ${prefix}/lib/cmake, CMAKE_CURRENT_LIST_DIR expands to ${prefix}/lib/cmake/xxx # cmake configuration files actually installed in ${qt_cmake_module_dir}/xxx foreach cmakedir [glob -type d -nocomplain -tails -directory ${destroot}${qt_libs_dir}/cmake *] { foreach cmakefile [glob -nocomplain -directory ${destroot}${qt_libs_dir}/cmake/${cmakedir} *.cmake] { reinplace -q "s|\\\${CMAKE_CURRENT_LIST_DIR}|${qt_cmake_module_dir}/${cmakedir}|g" ${cmakefile} } } } } # unsupported livecheck.type none