diff options
Diffstat (limited to 'configure.pri')
-rw-r--r-- | configure.pri | 1402 |
1 files changed, 0 insertions, 1402 deletions
diff --git a/configure.pri b/configure.pri deleted file mode 100644 index f55b7cb448..0000000000 --- a/configure.pri +++ /dev/null @@ -1,1402 +0,0 @@ -# this must be done outside any function -QT_SOURCE_TREE = $$PWD -QT_BUILD_TREE = $$shadowed($$PWD) - -# custom command line handling - -defineTest(qtConfCommandline_qmakeArgs) { - contains(1, QMAKE_[A-Z0-9_]+ *[-+]?=.*) { - config.input.qmakeArgs += $$1 - export(config.input.qmakeArgs) - return(true) - } - return(false) -} - -defineTest(qtConfCommandline_cxxstd) { - arg = $${1} - val = $${2} - isEmpty(val): val = $$qtConfGetNextCommandlineArg() - !contains(val, "^-.*"):!isEmpty(val) { - contains(val, "(c\+\+)?11") { - qtConfCommandlineSetInput("c++14", "no") - qtConfCommandlineSetInput("c++1z", "no") - qtConfCommandlineSetInput("c++2a", "no") - } else: contains(val, "(c\+\+)?(14|1y)") { - qtConfCommandlineSetInput("c++14", "yes") - qtConfCommandlineSetInput("c++1z", "no") - qtConfCommandlineSetInput("c++2a", "no") - } else: contains(val, "(c\+\+)?(17|1z)") { - qtConfCommandlineSetInput("c++14", "yes") - qtConfCommandlineSetInput("c++1z", "yes") - qtConfCommandlineSetInput("c++2a", "no") - } else: contains(val, "(c\+\+)?(2a)") { - qtConfCommandlineSetInput("c++14", "yes") - qtConfCommandlineSetInput("c++1z", "yes") - qtConfCommandlineSetInput("c++2a", "yes") - } else { - qtConfAddError("Invalid argument $$val to command line parameter $$arg") - } - } else { - qtConfAddError("Missing argument to command line parameter $$arg") - } -} - -defineTest(qtConfCommandline_sanitize) { - arg = $${1} - val = $${2} - isEmpty(val): val = $$qtConfGetNextCommandlineArg() - !contains(val, "^-.*"):!isEmpty(val) { - equals(val, "address") { - qtConfCommandlineSetInput("sanitize_address", "yes") - } else: equals(val, "thread") { - qtConfCommandlineSetInput("sanitize_thread", "yes") - } else: equals(val, "memory") { - qtConfCommandlineSetInput("sanitize_memory", "yes") - } else: equals(val, "fuzzer-no-link") { - qtConfCommandlineSetInput("sanitize_fuzzer_no_link", "yes") - } else: equals(val, "undefined") { - qtConfCommandlineSetInput("sanitize_undefined", "yes") - } else { - qtConfAddError("Invalid argument $$val to command line parameter $$arg") - } - } else { - qtConfAddError("Missing argument to command line parameter $$arg") - } -} - -defineTest(qtConfCommandline_coverage) { - arg = $${1} - val = $${2} - isEmpty(val): val = $$qtConfGetNextCommandlineArg() - !contains(val, "^-.*"):!isEmpty(val) { - equals(val, "trace-pc-guard") { - qtConfCommandlineSetInput("coverage_trace_pc_guard", "yes") - } else: equals(val, "source-based") { - qtConfCommandlineSetInput("coverage_source_based", "yes") - } else: { - qtConfAddError("Invalid argument $$val to command line parameter $$arg") - } - } else { - qtConfAddError("Missing argument to command line parameter $$arg") - } -} - -# callbacks - -defineReplace(qtConfFunc_crossCompile) { - !isEmpty(config.input.xplatform): return(true) - !isEmpty(config.input.device-option): return(true) - !isEmpty(config.input.sysroot): return(true) - spec = $$[QMAKE_SPEC] - !equals(spec, $$[QMAKE_XSPEC]): return(true) - return(false) -} - -defineReplace(qtConfFunc_licenseCheck) { - exists($$QT_SOURCE_TREE/LICENSE.LGPL3)|exists($$QT_SOURCE_TREE/LICENSE.GPL2)|exists($$QT_SOURCE_TREE/LICENSE.GPL3): \ - hasOpenSource = true - else: \ - hasOpenSource = false - exists($$QT_SOURCE_TREE/LICENSE.QT-LICENSE-AGREEMENT): \ - hasCommercial = true - else: \ - hasCommercial = false - - commercial = $$config.input.commercial - isEmpty(commercial) { - $$hasOpenSource { - $$hasCommercial { - logn() - logn("Selecting Qt Edition.") - logn() - logn("Type 'c' if you want to use the Commercial Edition.") - logn("Type 'o' if you want to use the Open Source Edition.") - logn() - for(ever) { - val = $$lower($$prompt("Which edition of Qt do you want to use? ", false)) - equals(val, c) { - commercial = yes - QMAKE_SAVED_ARGS += -commercial - } else: equals(val, o) { - commercial = no - QMAKE_SAVED_ARGS += -opensource - } else { - next() - } - export(QMAKE_SAVED_ARGS) - break() - } - } else { - commercial = no - } - } else { - !$$hasCommercial: \ - qtConfFatalError("No license files. Cannot proceed. Try re-installing Qt.") - commercial = yes - } - } - - equals(commercial, no) { - !$$hasOpenSource: \ - qtConfFatalError("This is the Qt Commercial Edition." \ - "Cannot proceed with -opensource.") - - logn() - logn("This is the Qt Open Source Edition.") - - EditionString = "Open Source" - config.input.qt_edition = OpenSource - export(config.input.qt_edition) - } else { - !$$hasCommercial: \ - qtConfFatalError("This is the Qt Open Source Edition." \ - "Cannot proceed with -commercial.") - - !exists($$QT_SOURCE_TREE/.release-timestamp) { - # Build from git - - logn() - logn("This is the Qt Commercial Edition.") - - EditionString = "Commercial" - config.input.qt_edition = Commercial - export(config.input.qt_edition) - } else { - # Build from a released source package - - equals(QMAKE_HOST.os, Linux) { - !equals(QMAKE_HOST.arch, x86_64): \ - Licheck = licheck32 - else: \ - Licheck = licheck64 - } else: equals(QMAKE_HOST.os, Darwin) { - Licheck = licheck_mac - } else: equals(QMAKE_HOST.os, Windows) { - Licheck = licheck.exe - } else { - qtConfFatalError("Host operating system not supported by this edition of Qt.") - } - - !qtRunLoggedCommand("$$system_quote($$QT_SOURCE_TREE/bin/$$Licheck) \ - $$system_quote($$eval(config.input.confirm-license)) \ - $$system_quote($$QT_SOURCE_TREE) $$system_quote($$QT_BUILD_TREE) \ - $$[QMAKE_SPEC] $$[QMAKE_XSPEC]", \ - LicheckOutput, false): \ - return(false) - logn() - for (o, LicheckOutput) { - contains(o, "\\w+=.*"): \ - eval($$o) - else: \ - logn($$o) - } - config.input.qt_edition = $$Edition - config.input.qt_licheck = $$Licheck - config.input.qt_release_date = $$ReleaseDate - export(config.input.qt_edition) - export(config.input.qt_licheck) - export(config.input.qt_release_date) - return(true) - } - } - - !isEmpty(config.input.confirm-license) { - logn() - logn("You have already accepted the terms of the $$EditionString license.") - return(true) - } - - affix = the - equals(commercial, no) { - theLicense = "GNU Lesser General Public License (LGPL) version 3" - showWhat = "Type 'L' to view the GNU Lesser General Public License version 3 (LGPLv3)." - gpl2Ok = false - gpl3Ok = false - wasm { - gpl3Ok = true - theLicense = "GNU General Public License (GPL) version 3" - showWhat = "Type 'G' to view the GNU General Public License version 3 (GPLv3)." - } else: $$qtConfEvaluate("features.android-style-assets") { - notTheLicense = "Note: GPL version 2 is not available due to using Android style assets." - } else { - theLicense += "or the GNU General Public License (GPL) version 2" - showWhat += "Type 'G' to view the GNU General Public License version 2 (GPLv2)." - gpl2Ok = true - affix = either - } - } else { - theLicense = $$cat($$QT_SOURCE_TREE/LICENSE.QT-LICENSE-AGREEMENT, lines) - theLicense = $$first(theLicense) - showWhat = "Type '?' to view the $${theLicense}." - } - msg = \ - " " \ - "You are licensed to use this software under the terms of" \ - "the "$$theLicense"." \ - $$notTheLicense \ - " " \ - $$showWhat \ - "Type 'y' to accept this license offer." \ - "Type 'n' to decline this license offer." \ - " " - - for(ever) { - logn($$join(msg, $$escape_expand(\\n))) - for(ever) { - val = $$lower($$prompt("Do you accept the terms of $$affix license? ", false)) - equals(val, y)|equals(val, yes) { - logn() - QMAKE_SAVED_ARGS += -confirm-license - export(QMAKE_SAVED_ARGS) - return(true) - } else: equals(val, n)|equals(val, no) { - return(false) - } else: equals(commercial, yes):equals(val, ?) { - licenseFile = $$QT_SOURCE_TREE/LICENSE.QT-LICENSE-AGREEMENT - } else: equals(commercial, no):equals(val, l) { - licenseFile = $$QT_SOURCE_TREE/LICENSE.LGPL3 - } else: equals(commercial, no):equals(val, g):$$gpl2Ok { - licenseFile = $$QT_SOURCE_TREE/LICENSE.GPL2 - } else: equals(commercial, no):equals(val, g):$$gpl3Ok { - licenseFile = $$QT_SOURCE_TREE/LICENSE.GPL3 - } else { - next() - } - break() - } - system("more $$system_quote($$system_path($$licenseFile))") - logn() - logn() - } -} - -# custom tests - -# this is meant for linux device specs only -defineTest(qtConfTest_machineTuple) { - qtRunLoggedCommand("$$QMAKE_CXX -dumpmachine", $${1}.tuple)|return(false) - $${1}.cache += tuple - export($${1}.cache) - return(true) -} - -defineTest(qtConfTest_verifySpec) { - qtConfTest_compile($$1): return(true) - qtConfFatalError("Cannot compile a minimal program. The toolchain or QMakeSpec is broken.", log) -} - -defineTest(qtConfTest_architecture) { - !qtConfTest_compile($${1}): \ - error("Could not determine $$eval($${1}.label). See config.log for details.") - - test = $$eval($${1}.test) - output = $$eval($${1}.output) - test_out_dir = $$OUT_PWD/$$basename(QMAKE_CONFIG_TESTS_DIR)/$$test - test_out_file = $$test_out_dir/$$cat($$test_out_dir/$${output}.target.txt) - exists($$test_out_file): \ - content = $$cat($$test_out_file, blob) - else: \ - error("$$eval($${1}.label) detection binary not found.") - content = $$cat($$test_out_file, blob) - - arch_magic = ".*==Qt=magic=Qt== Architecture:([^\\0]*).*" - subarch_magic = ".*==Qt=magic=Qt== Sub-architecture:([^\\0]*).*" - buildabi_magic = ".*==Qt=magic=Qt== Build-ABI:([^\\0]*).*" - - !contains(content, $$arch_magic)|!contains(content, $$subarch_magic)|!contains(content, $$buildabi_magic): \ - error("$$eval($${1}.label) detection binary does not contain expected data.") - - $${1}.arch = $$replace(content, $$arch_magic, "\\1") - $${1}.subarch = $$replace(content, $$subarch_magic, "\\1") - $${1}.subarch = $$split($${1}.subarch, " ") - $${1}.buildabi = $$replace(content, $$buildabi_magic, "\\1") - export($${1}.arch) - export($${1}.subarch) - export($${1}.buildabi) - qtLog("Detected architecture: $$eval($${1}.arch) ($$eval($${1}.subarch))") - - $${1}.cache += arch subarch buildabi - export($${1}.cache) - return(true) -} - -defineTest(qtConfTest_gnumake) { - make = $$qtConfFindInPath("gmake") - isEmpty(make): make = $$qtConfFindInPath("make") - !isEmpty(make) { - qtRunLoggedCommand("$$make -v", version)|return(false) - contains(version, "^GNU Make.*"): return(true) - } - return(false) -} - -defineTest(qtConfTest_detectPkgConfig) { - pkgConfig = $$getenv("PKG_CONFIG") - !isEmpty(pkgConfig): { - qtLog("Found pkg-config from environment variable: $$pkgConfig") - } else { - pkgConfig = $$QMAKE_PKG_CONFIG - - !isEmpty(pkgConfig) { - qtLog("Found pkg-config from mkspec: $$pkgConfig") - } else { - pkgConfig = $$qtConfFindInPath("pkg-config") - - isEmpty(pkgConfig): \ - return(false) - - qtLog("Found pkg-config from path: $$pkgConfig") - } - } - - $$qtConfEvaluate("features.cross_compile") { - # cross compiling, check that pkg-config is set up sanely - sysroot = $$config.input.sysroot - - pkgConfigLibdir = $$getenv("PKG_CONFIG_LIBDIR") - isEmpty(pkgConfigLibdir) { - isEmpty(sysroot) { - qtConfAddWarning("Cross compiling without sysroot. Disabling pkg-config") - return(false) - } - !exists("$$sysroot/usr/lib/pkgconfig") { - qtConfAddWarning( \ - "Disabling pkg-config since PKG_CONFIG_LIBDIR is not set and" \ - "the host's .pc files would be used (even if you set PKG_CONFIG_PATH)." \ - "Set this variable to the directory that contains target .pc files" \ - "for pkg-config to function correctly when cross-compiling or" \ - "use -pkg-config to override this test.") - return(false) - } - - pkgConfigLibdir = $$sysroot/usr/lib/pkgconfig:$$sysroot/usr/share/pkgconfig - machineTuple = $$eval($${currentConfig}.tests.machineTuple.tuple) - !isEmpty(machineTuple): \ - pkgConfigLibdir = "$$pkgConfigLibdir:$$sysroot/usr/lib/$$machineTuple/pkgconfig" - - qtConfAddNote("PKG_CONFIG_LIBDIR automatically set to $$pkgConfigLibdir") - } - pkgConfigSysrootDir = $$getenv("PKG_CONFIG_SYSROOT_DIR") - isEmpty(pkgConfigSysrootDir) { - isEmpty(sysroot) { - qtConfAddWarning( \ - "Disabling pkg-config since PKG_CONFIG_SYSROOT_DIR is not set." \ - "Set this variable to your sysroot for pkg-config to function correctly when" \ - "cross-compiling or use -pkg-config to override this test.") - return(false) - } - - pkgConfigSysrootDir = $$sysroot - qtConfAddNote("PKG_CONFIG_SYSROOT_DIR automatically set to $$pkgConfigSysrootDir") - } - $${1}.pkgConfigLibdir = $$pkgConfigLibdir - export($${1}.pkgConfigLibdir) - $${1}.pkgConfigSysrootDir = $$pkgConfigSysrootDir - export($${1}.pkgConfigSysrootDir) - $${1}.cache += pkgConfigLibdir pkgConfigSysrootDir - } - $${1}.pkgConfig = $$pkgConfig - export($${1}.pkgConfig) - $${1}.cache += pkgConfig - export($${1}.cache) - - return(true) -} - -defineTest(qtConfTest_buildParts) { - parts = $$config.input.make - isEmpty(parts) { - parts = libs examples - - $$qtConfEvaluate("features.developer-build"): \ - parts += tests - !$$qtConfEvaluate("features.cross_compile"): \ - parts += tools - } - - parts -= $$config.input.nomake - - # always add libs, as it's required to build Qt - parts *= libs - - $${1}.value = $$parts - export($${1}.value) - $${1}.cache = - - export($${1}.cache) - return(true) -} - -defineTest(qtConfTest_x86Simd) { - simd = $$section(1, ".", -1) # last component - $${1}.args = CONFIG+=add_cflags DEFINES+=NO_ATTRIBUTE SIMD=$$simd - $${1}.test = x86_simd - qtConfTest_compile($${1}) -} - -defineTest(qtConfTest_x86SimdAlways) { - configs = - fpfx = $${currentConfig}.features - tpfx = $${currentConfig}.tests - - # Make a list of all passing features whose tests have type=x86Simd - for (f, $${tpfx}._KEYS_) { - !equals($${tpfx}.$${f}.type, "x86Simd"): \ - next() - qtConfCheckFeature($$f) - equals($${fpfx}.$${f}.available, true): configs += $$f - } - $${1}.literal_args = SIMD=$$join(configs, " ") - qtConfTest_compile($${1}) -} - -# custom outputs - -# this reloads the qmakespec as completely as reasonably possible. -defineTest(reloadSpec) { - bypassNesting() { - for (f, QMAKE_INTERNAL_INCLUDED_FILES) { - contains(f, .*/mkspecs/.*):\ - !contains(f, .*/(qt_build_config|qt_parts|qt_configure|configure_base)\\.prf): \ - discard_from($$f) - } - # nobody's going to try to re-load the features above, - # so don't bother with being selective. - QMAKE_INTERNAL_INCLUDED_FEATURES = \ - # loading it gets simulated below. - $$[QT_HOST_DATA/src]/mkspecs/features/device_config.prf \ - # must be delayed until qdevice.pri is ready. - $$[QT_HOST_DATA/src]/mkspecs/features/mac/toolchain.prf \ - $$[QT_HOST_DATA/src]/mkspecs/features/toolchain.prf - - saved_variables = CONFIG QMAKE_CXXFLAGS - for (name, saved_variables): \ - _SAVED_$$name = $$eval($$name) - load(spec_pre) - # qdevice.pri gets written too late (and we can't write it early - # enough, as it's populated in stages, with later ones depending - # on earlier ones). so inject its variables manually. - for (l, $${currentConfig}.output.devicePro): \ - eval($$l) - include($$QMAKESPEC/qmake.conf) - load(spec_post) - for (name, saved_variables): \ - $$name += $$eval(_SAVED_$$name) - load(default_pre) - - # ensure pristine environment for configuration. again. - discard_from($$[QT_HOST_DATA/get]/mkspecs/qconfig.pri) - discard_from($$[QT_HOST_DATA/get]/mkspecs/qmodule.pri) - } -} - -defineTest(qtConfOutput_prepareSpec) { - device = $$eval(config.input.device) - !isEmpty(device) { - devices = $$files($$[QT_HOST_DATA/src]/mkspecs/devices/*$$device*) - isEmpty(devices): \ - qtConfFatalError("No device matching '$$device'.") - !count(devices, 1) { - err = "Multiple matches for device '$$device'. Candidates are:" - for (d, devices): \ - err += " $$basename(d)" - qtConfFatalError($$err) - } - XSPEC = $$relative_path($$devices, $$[QT_HOST_DATA/src]/mkspecs) - } - xspec = $$eval(config.input.xplatform) - !isEmpty(xspec) { - !exists($$[QT_HOST_DATA/src]/mkspecs/$$xspec/qmake.conf): \ - qtConfFatalError("Invalid target platform '$$xspec'.") - XSPEC = $$xspec - } - isEmpty(XSPEC): \ - XSPEC = $$[QMAKE_SPEC] - export(XSPEC) - QMAKESPEC = $$[QT_HOST_DATA/src]/mkspecs/$$XSPEC - export(QMAKESPEC) - - notes = $$cat($$OUT_PWD/.config.notes, lines) - !isEmpty(notes): \ - qtConfAddNote("Also available for $$notes") - - # deviceOptions() below contains conditionals coming form the spec, - # so this cannot be delayed for a batch reload. - reloadSpec() -} - -defineTest(qtConfOutput_prepareOptions) { - $${currentConfig}.output.devicePro += \ - $$replace(config.input.device-option, "^([^=]+) *= *(.*)$", "\\1 = \\2") - darwin:!isEmpty(config.input.sdk) { - $${currentConfig}.output.devicePro += \ - "QMAKE_MAC_SDK = $$val_escape(config.input.sdk)" - } - android { - sdk_root = $$eval(config.input.android-sdk) - isEmpty(sdk_root): \ - sdk_root = $$getenv(ANDROID_SDK_ROOT) - isEmpty(sdk_root) { - for(ever) { - equals(QMAKE_HOST.os, Linux): \ - sdk_root = $$(HOME)/Android/Sdk - else: equals(QMAKE_HOST.os, Darwin): \ - sdk_root = $$(HOME)/Library/Android/sdk - else: \ - break() - !exists($$sdk_root): \ - sdk_root = - break() - } - } - isEmpty(sdk_root): \ - qtConfFatalError("Cannot find Android SDK." \ - "Please use -android-sdk option to specify one.") - - ndk_root = $$eval(config.input.android-ndk) - isEmpty(ndk_root): \ - ndk_root = $$getenv(ANDROID_NDK_ROOT) - isEmpty(ndk_root) { - for(ever) { - exists($$sdk_root/ndk-bundle) { - ndk_root = $$sdk_root/ndk-bundle - break() - } - equals(QMAKE_HOST.os, Linux): \ - ndk_root = $$(HOME)/Android/Sdk/ndk-bundle - else: equals(QMAKE_HOST.os, Darwin): \ - ndk_root = $$(HOME)/Library/Android/sdk/ndk-bundle - else: \ - break() - !exists($$ndk_root): \ - ndk_root = - break() - } - } - isEmpty(ndk_root): \ - qtConfFatalError("Cannot find Android NDK." \ - "Please use -android-ndk option to specify one.") - - ndk_tc_pfx = $$ndk_root/toolchains/llvm/prebuilt - ndk_host = $$eval(config.input.android-ndk-host) - isEmpty(ndk_host): \ - ndk_host = $$getenv(ANDROID_NDK_HOST) - isEmpty(ndk_host) { - equals(QMAKE_HOST.os, Linux) { - ndk_host_64 = linux-x86_64 - ndk_host_32 = linux-x86 - } else: equals(QMAKE_HOST.os, Darwin) { - ndk_host_64 = darwin-x86_64 - ndk_host_32 = darwin-x86 - } else: equals(QMAKE_HOST.os, Windows) { - ndk_host_64 = windows-x86_64 - ndk_host_32 = windows - } else { - qtConfFatalError("Host operating system not supported by Android.") - } - !exists($$ndk_tc_pfx/$$ndk_host_64/*): ndk_host_64 = - !exists($$ndk_tc_pfx/$$ndk_host_32/*): ndk_host_32 = - equals(QMAKE_HOST.arch, x86_64):!isEmpty(ndk_host_64) { - ndk_host = $$ndk_host_64 - } else: equals(QMAKE_HOST.arch, x86):!isEmpty(ndk_host_32) { - ndk_host = $$ndk_host_32 - } else { - !isEmpty(ndk_host_64): \ - ndk_host = $$ndk_host_64 - else: !isEmpty(ndk_host_32): \ - ndk_host = $$ndk_host_32 - else: \ - qtConfFatalError("Cannot detect the Android host." \ - "Please use -android-ndk-host option to specify one.") - qtConfAddNote("Available Android host does not match host architecture.") - } - } else { - !exists($$ndk_tc_pfx/$$ndk_host/*) { - err = "Specified Android NDK host '$$ndk_host' is invalid. Expected files in the following directory to exist:" - err += '$${ndk_tc_pfx}/$${ndk_host}/' - qtConfFatalError($$err) - } - } - - android_abis = $$eval(config.input.android-abis) - isEmpty(android_abis): \ - android_abis = $$eval(config.input.android-arch) - isEmpty(android_abis): \ - android_abis = armeabi-v7a,arm64-v8a,x86,x86_64 - platform = $$eval(config.input.android-ndk-platform) - isEmpty(platform): \ - platform = android-23 - - android_javac_target = $$eval(config.input.android-javac-target) - android_javac_source = $$eval(config.input.android-javac-source) - - $${currentConfig}.output.devicePro += \ - "DEFAULT_ANDROID_SDK_ROOT = $$val_escape(sdk_root)" \ - "DEFAULT_ANDROID_NDK_ROOT = $$val_escape(ndk_root)" \ - "DEFAULT_ANDROID_PLATFORM = $$platform" \ - "DEFAULT_ANDROID_NDK_HOST = $$ndk_host" \ - "DEFAULT_ANDROID_ABIS = $$split(android_abis, ',')" \ - "ANDROID_JAVAC_TARGET_VERSION = $$android_javac_target" \ - "ANDROID_JAVAC_SOURCE_VERSION = $$android_javac_source" - } - - export($${currentConfig}.output.devicePro) - - # if any settings were made, the spec will be reloaded later - # to make them take effect. -} - -defineTest(qtConfOutput_machineTuple) { - $${currentConfig}.output.devicePro += \ - "GCC_MACHINE_DUMP = $$eval($${currentConfig}.tests.machineTuple.tuple)" - export($${currentConfig}.output.devicePro) - - # for completeness, one could reload the spec here, - # but no downstream users actually need that. -} - -defineTest(qtConfOutput_commitOptions) { - # qdevice.pri needs to be written early, because the compile tests require it. - write_file($$QT_BUILD_TREE/mkspecs/qdevice.pri, $${currentConfig}.output.devicePro)|error() -} - -# Output is written after configuring each Qt module, -# but some tests within a module might depend on the -# configuration output of previous tests. -defineTest(qtConfOutput_commitConfig) { - qtConfProcessOutput() -} - -# type (empty or 'host'), option name, default value -defineTest(processQtPath) { - out_var = config.rel_input.$${2} - path = $$eval(config.input.$${2}) - isEmpty(path) { - $$out_var = $$3 - } else { - path = $$absolute_path($$path, $$OUT_PWD) - rel = $$relative_path($$path, $$eval(config.input.$${1}prefix)) - isEmpty(rel) { - $$out_var = . - } else: contains(rel, \.\..*) { - !equals(2, sysconfdir) { - PREFIX_COMPLAINTS += "-$$2 is not a subdirectory of -$${1}prefix." - export(PREFIX_COMPLAINTS) - !$$eval(have_$${1}prefix) { - PREFIX_REMINDER = true - export(PREFIX_REMINDER) - } - } - $$out_var = $$path - } else { - $$out_var = $$rel - } - } - export($$out_var) -} - -defineTest(addConfStr) { - QT_CONFIGURE_STR_OFFSETS += " $$QT_CONFIGURE_STR_OFF," - QT_CONFIGURE_STRS += " \"$$1\\0\"" - QT_CONFIGURE_STR_OFF = $$num_add($$QT_CONFIGURE_STR_OFF, $$str_size($$1), 1) - export(QT_CONFIGURE_STR_OFFSETS) - export(QT_CONFIGURE_STRS) - export(QT_CONFIGURE_STR_OFF) -} - -defineReplace(printInstallPath) { - val = $$eval(config.rel_input.$$2) - equals(val, $$3): return() - return("$$1=$$val") -} - -defineReplace(printInstallPaths) { - ret = \ - $$printInstallPath(Documentation, docdir, doc) \ - $$printInstallPath(Headers, headerdir, include) \ - $$printInstallPath(Libraries, libdir, lib) \ - $$printInstallPath(LibraryExecutables, libexecdir, $$DEFAULT_LIBEXEC) \ - $$printInstallPath(Binaries, bindir, bin) \ - $$printInstallPath(Plugins, plugindir, plugins) \ - $$printInstallPath(Qml2Imports, qmldir, qml) \ - $$printInstallPath(ArchData, archdatadir, .) \ - $$printInstallPath(Data, datadir, .) \ - $$printInstallPath(Translations, translationdir, translations) \ - $$printInstallPath(Examples, examplesdir, examples) \ - $$printInstallPath(Tests, testsdir, tests) - return($$ret) -} - -defineReplace(printHostPaths) { - ret = \ - "HostPrefix=$$config.input.hostprefix" \ - $$printInstallPath(HostBinaries, hostbindir, bin) \ - $$printInstallPath(HostLibraries, hostlibdir, lib) \ - $$printInstallPath(HostData, hostdatadir, .) \ - "Sysroot=$$config.input.sysroot" \ - "SysrootifyPrefix=$$qmake_sysrootify" \ - "TargetSpec=$$XSPEC" \ - "HostSpec=$$[QMAKE_SPEC]" - return($$ret) -} - -defineTest(qtConfOutput_preparePaths) { - isEmpty(config.input.prefix) { - $$qtConfEvaluate("features.developer-build") { - config.input.prefix = $$QT_BUILD_TREE # In Development, we use sandboxed builds by default - } else { - win32: \ - config.input.prefix = C:/Qt/Qt-$$[QT_VERSION] - else: \ - config.input.prefix = /usr/local/Qt-$$[QT_VERSION] - } - have_prefix = false - } else { - equals(XSPEC, $$[QMAKE_SPEC]) { - # Only make the user-specified prefix absolute if we're not cross-compiling. - config.input.prefix = $$absolute_path($$config.input.prefix, $$OUT_PWD) - } else { - # But we still must normalize path separators. - config.input.prefix = $$replace(config.input.prefix, \\\\, /) - } - have_prefix = true - } - - isEmpty(config.input.extprefix) { - config.input.extprefix = $$config.input.prefix - !isEmpty(config.input.sysroot): \ - qmake_sysrootify = true - else: \ - qmake_sysrootify = false - } else { - config.input.extprefix = $$absolute_path($$config.input.extprefix, $$OUT_PWD) - qmake_sysrootify = false - } - - isEmpty(config.input.hostprefix) { - $$qmake_sysrootify: \ - config.input.hostprefix = $$config.input.sysroot$$config.input.extprefix - else: \ - config.input.hostprefix = $$config.input.extprefix - have_hostprefix = false - } else { - isEqual(config.input.hostprefix, yes): \ - config.input.hostprefix = $$QT_BUILD_TREE - else: \ - config.input.hostprefix = $$absolute_path($$config.input.hostprefix, $$OUT_PWD) - have_hostprefix = true - } - - equals(config.input.prefix, $$config.input.extprefix): \ - qmake_crossbuild = false - else: \ - qmake_crossbuild = true - - PREFIX_COMPLAINTS = - PREFIX_REMINDER = false - win32: \ - DEFAULT_LIBEXEC = bin - else: \ - DEFAULT_LIBEXEC = libexec - darwin: \ - DEFAULT_SYSCONFDIR = /Library/Preferences/Qt - else: \ - DEFAULT_SYSCONFDIR = etc/xdg - - processQtPath("", headerdir, include) - processQtPath("", libdir, lib) - processQtPath("", bindir, bin) - processQtPath("", datadir, .) - !equals(config.rel_input.datadir, .): \ - data_pfx = $$config.rel_input.datadir/ - processQtPath("", docdir, $${data_pfx}doc) - processQtPath("", translationdir, $${data_pfx}translations) - processQtPath("", examplesdir, $${data_pfx}examples) - processQtPath("", testsdir, tests) - processQtPath("", archdatadir, .) - !equals(config.rel_input.archdatadir, .): \ - archdata_pfx = $$config.rel_input.archdatadir/ - processQtPath("", libexecdir, $${archdata_pfx}$$DEFAULT_LIBEXEC) - processQtPath("", plugindir, $${archdata_pfx}plugins) - processQtPath("", qmldir, $${archdata_pfx}qml) - processQtPath("", sysconfdir, $$DEFAULT_SYSCONFDIR) - $$have_hostprefix { - processQtPath(host, hostbindir, bin) - processQtPath(host, hostlibdir, lib) - processQtPath(host, hostdatadir, .) - } else { - processQtPath(host, hostbindir, $$config.rel_input.bindir) - processQtPath(host, hostlibdir, $$config.rel_input.libdir) - processQtPath(host, hostdatadir, $$config.rel_input.archdatadir) - } - - win32:$$qtConfEvaluate("features.shared") { - # Windows DLLs are in the bin dir. - libloc_absolute_path = $$absolute_path($$config.rel_input.bindir, $$config.input.prefix) - } else { - libloc_absolute_path = $$absolute_path($$config.rel_input.libdir, $$config.input.prefix) - } - config.input.liblocation_to_prefix = $$relative_path($$config.input.prefix, $$libloc_absolute_path) - config.qtbase.features.shared.available = - export(config.qtbase.features.shared.available) - - hostbindir_absolute_path = $$absolute_path($$config.rel_input.hostbindir, $$config.input.hostprefix) - config.input.hostbindir_to_hostprefix = $$relative_path($$config.input.hostprefix, $$hostbindir_absolute_path) - config.input.hostbindir_to_extprefix = $$relative_path($$config.input.extprefix, $$hostbindir_absolute_path) - - !isEmpty(PREFIX_COMPLAINTS) { - PREFIX_COMPLAINTS = "$$join(PREFIX_COMPLAINTS, "$$escape_expand(\\n)Note: ")" - $$PREFIX_REMINDER: \ - PREFIX_COMPLAINTS += "Maybe you forgot to specify -prefix/-hostprefix?" - qtConfAddNote($$PREFIX_COMPLAINTS) - } - - # populate qconfig.cpp (for qtcore) - - QT_CONFIGURE_STR_OFF = 0 - QT_CONFIGURE_STR_OFFSETS = - QT_CONFIGURE_STRS = - - addConfStr($$config.rel_input.docdir) - addConfStr($$config.rel_input.headerdir) - addConfStr($$config.rel_input.libdir) - addConfStr($$config.rel_input.libexecdir) - addConfStr($$config.rel_input.bindir) - addConfStr($$config.rel_input.plugindir) - addConfStr($$config.rel_input.qmldir) - addConfStr($$config.rel_input.archdatadir) - addConfStr($$config.rel_input.datadir) - addConfStr($$config.rel_input.translationdir) - addConfStr($$config.rel_input.examplesdir) - addConfStr($$config.rel_input.testsdir) - - QT_CONFIGURE_STR_OFFSETS_ALL = $$QT_CONFIGURE_STR_OFFSETS - QT_CONFIGURE_STRS_ALL = $$QT_CONFIGURE_STRS - QT_CONFIGURE_STR_OFFSETS = - QT_CONFIGURE_STRS = - - addConfStr($$config.input.sysroot) - addConfStr($$qmake_sysrootify) - addConfStr($$config.rel_input.hostbindir) - addConfStr($$config.rel_input.hostlibdir) - addConfStr($$config.rel_input.hostdatadir) - addConfStr($$XSPEC) - addConfStr($$[QMAKE_SPEC]) - - $${currentConfig}.output.qconfigSource = \ - "/* Installation Info */" \ - "static const char qt_configure_prefix_path_str [12+256] = \"qt_prfxpath=$$config.input.prefix\";" \ - "$${LITERAL_HASH}ifdef QT_BUILD_QMAKE" \ - "static const char qt_configure_ext_prefix_path_str [12+256] = \"qt_epfxpath=$$config.input.extprefix\";" \ - "static const char qt_configure_host_prefix_path_str [12+256] = \"qt_hpfxpath=$$config.input.hostprefix\";" \ - "$${LITERAL_HASH}endif" \ - "" \ - "static const short qt_configure_str_offsets[] = {" \ - $$QT_CONFIGURE_STR_OFFSETS_ALL \ - "$${LITERAL_HASH}ifdef QT_BUILD_QMAKE" \ - $$QT_CONFIGURE_STR_OFFSETS \ - "$${LITERAL_HASH}endif" \ - "};" \ - "static const char qt_configure_strs[] =" \ - $$QT_CONFIGURE_STRS_ALL \ - "$${LITERAL_HASH}ifdef QT_BUILD_QMAKE" \ - $$QT_CONFIGURE_STRS \ - "$${LITERAL_HASH}endif" \ - ";" \ - "" \ - "$${LITERAL_HASH}define QT_CONFIGURE_SETTINGS_PATH \"$$config.rel_input.sysconfdir\"" \ - "$${LITERAL_HASH}define QT_CONFIGURE_LIBLOCATION_TO_PREFIX_PATH \"$$config.input.liblocation_to_prefix\"" \ - "$${LITERAL_HASH}define QT_CONFIGURE_HOSTBINDIR_TO_EXTPREFIX_PATH \"$$config.input.hostbindir_to_extprefix\"" \ - "$${LITERAL_HASH}define QT_CONFIGURE_HOSTBINDIR_TO_HOSTPREFIX_PATH \"$$config.input.hostbindir_to_hostprefix\"" \ - "" \ - "$${LITERAL_HASH}ifdef QT_BUILD_QMAKE" \ - "$${LITERAL_HASH} define QT_CONFIGURE_SYSROOTIFY_PREFIX $$qmake_sysrootify" \ - "$${LITERAL_HASH} define QT_CONFIGURE_CROSSBUILD $$qmake_crossbuild" \ - "$${LITERAL_HASH}endif" \ - "" \ - "$${LITERAL_HASH}define QT_CONFIGURE_PREFIX_PATH qt_configure_prefix_path_str + 12" \ - "$${LITERAL_HASH}ifdef QT_BUILD_QMAKE" \ - "$${LITERAL_HASH} define QT_CONFIGURE_EXT_PREFIX_PATH qt_configure_ext_prefix_path_str + 12" \ - "$${LITERAL_HASH} define QT_CONFIGURE_HOST_PREFIX_PATH qt_configure_host_prefix_path_str + 12" \ - "$${LITERAL_HASH}endif" - export($${currentConfig}.output.qconfigSource) - - # create bin/qt.conf. this doesn't use the regular file output - # mechanism, as the file is relied upon by configure tests. - - cont = \ - "[EffectivePaths]" \ - "Prefix=.." \ - "[DevicePaths]" \ - "Prefix=$$config.input.prefix" \ - $$printInstallPaths() \ - "[Paths]" \ - "Prefix=$$config.input.extprefix" \ - $$printInstallPaths() \ - $$printHostPaths() - !equals(QT_SOURCE_TREE, $$QT_BUILD_TREE): \ - cont += \ - "[EffectiveSourcePaths]" \ - "Prefix=$$[QT_INSTALL_PREFIX/src]" - write_file($$QT_BUILD_TREE/bin/qt.conf, cont)|error() - reload_properties() - - # if a sysroot was configured, the spec will be reloaded later, - # as some specs contain $$[SYSROOT] references. -} - -defineTest(qtConfOutput_reloadSpec) { - !isEmpty($${currentConfig}.output.devicePro)| \ - !isEmpty(config.input.sysroot): \ - reloadSpec() - - # toolchain.prf uses this. - dummy = $$qtConfEvaluate("features.cross_compile") - - bypassNesting() { - QMAKE_INTERNAL_INCLUDED_FEATURES -= \ - $$[QT_HOST_DATA/src]/mkspecs/features/mac/toolchain.prf \ - $$[QT_HOST_DATA/src]/mkspecs/features/toolchain.prf - load(toolchain) - } -} - -defineTest(qtConfOutput_shared) { - !$${2}: return() - - # export this here, so later tests can use it - CONFIG += shared - export(CONFIG) -} - -defineTest(qtConfOutput_sanitizer) { - !$${2}: return() - - # Export this here, so that WebEngine can access it at configure time. - CONFIG += sanitizer - $$qtConfEvaluate("features.sanitize_address"): CONFIG += sanitize_address - $$qtConfEvaluate("features.sanitize_thread"): CONFIG += sanitize_thread - $$qtConfEvaluate("features.sanitize_memory"): CONFIG += sanitize_memory - $$qtConfEvaluate("features.sanitize_undefined"): CONFIG += sanitize_undefined - - export(CONFIG) -} - -defineTest(qtConfOutput_architecture) { - arch = $$qtConfEvaluate("tests.architecture.arch") - subarch = $$qtConfEvaluate('tests.architecture.subarch') - buildabi = $$qtConfEvaluate("tests.architecture.buildabi") - - $$qtConfEvaluate("features.cross_compile") { - host_arch = $$qtConfEvaluate("tests.host_architecture.arch") - host_buildabi = $$qtConfEvaluate("tests.host_architecture.buildabi") - - privatePro = \ - "host_build {" \ - " QT_CPU_FEATURES.$$host_arch = $$qtConfEvaluate('tests.host_architecture.subarch')" \ - "} else {" \ - " QT_CPU_FEATURES.$$arch = $$subarch" \ - "}" - publicPro = \ - "host_build {" \ - " QT_ARCH = $$host_arch" \ - " QT_BUILDABI = $$host_buildabi" \ - " QT_TARGET_ARCH = $$arch" \ - " QT_TARGET_BUILDABI = $$buildabi" \ - "} else {" \ - " QT_ARCH = $$arch" \ - " QT_BUILDABI = $$buildabi" \ - "}" - - } else { - privatePro = \ - "QT_CPU_FEATURES.$$arch = $$subarch" - publicPro = \ - "QT_ARCH = $$arch" \ - "QT_BUILDABI = $$buildabi" - } - - $${currentConfig}.output.publicPro += $$publicPro - export($${currentConfig}.output.publicPro) - $${currentConfig}.output.privatePro += $$privatePro - export($${currentConfig}.output.privatePro) - - # setup QT_ARCH and QT_CPU_FEATURES variables used by qtConfEvaluate - QT_ARCH = $$arch - export(QT_ARCH) - QT_CPU_FEATURES.$$arch = $$subarch - export(QT_CPU_FEATURES.$$arch) -} - -defineTest(qtConfOutput_qreal) { - qreal = $$config.input.qreal - isEmpty(qreal): qreal = "double" - qreal_string = $$replace(qreal, [^a-zA-Z0-9], "_") - qtConfOutputVar(assign, "privatePro", "QT_COORD_TYPE", $$qreal) - !equals(qreal, "double") { - qtConfOutputSetDefine("publicHeader", "QT_COORD_TYPE", $$qreal) - qtConfOutputSetDefine("publicHeader", "QT_COORD_TYPE_STRING", "\"$$qreal_string\"") - } -} - -defineTest(qtConfOutput_pkgConfig) { - !$${2}: return() - - PKG_CONFIG_EXECUTABLE = $$eval($${currentConfig}.tests.pkg-config.pkgConfig) - qtConfOutputVar(assign, "privatePro", "PKG_CONFIG_EXECUTABLE", $$PKG_CONFIG_EXECUTABLE) - export(PKG_CONFIG_EXECUTABLE) - # this method also exports PKG_CONFIG_(LIB|SYSROOT)DIR, so that tests using pkgConfig will work correctly - PKG_CONFIG_SYSROOT_DIR = $$eval($${currentConfig}.tests.pkg-config.pkgConfigSysrootDir) - !isEmpty(PKG_CONFIG_SYSROOT_DIR) { - qtConfOutputVar(assign, "publicPro", "PKG_CONFIG_SYSROOT_DIR", $$PKG_CONFIG_SYSROOT_DIR) - export(PKG_CONFIG_SYSROOT_DIR) - } - PKG_CONFIG_LIBDIR = $$eval($${currentConfig}.tests.pkg-config.pkgConfigLibdir) - !isEmpty(PKG_CONFIG_LIBDIR) { - qtConfOutputVar(assign, "publicPro", "PKG_CONFIG_LIBDIR", $$PKG_CONFIG_LIBDIR) - export(PKG_CONFIG_LIBDIR) - } -} - -defineTest(qtConfOutput_crossCompile) { - !$${2}: return() - - # We need to preempt the output here, as subsequent tests rely on it - CONFIG += cross_compile - export(CONFIG) -} - -defineTest(qtConfOutput_useBFDLinker) { - !$${2}: return() - - # We need to preempt the output here, so that qtConfTest_linkerSupportsFlag can work properly in qtbase - CONFIG += use_bfd_linker - export(CONFIG) -} - -defineTest(qtConfOutput_useGoldLinker) { - !$${2}: return() - - # We need to preempt the output here, so that qtConfTest_linkerSupportsFlag can work properly in qtbase - CONFIG += use_gold_linker - export(CONFIG) -} - -defineTest(qtConfOutput_useLLDLinker) { - !$${2}: return() - - # We need to preempt the output here, so that qtConfTest_linkerSupportsFlag can work properly in qtbase - CONFIG += use_lld_linker - export(CONFIG) -} - -defineTest(qtConfOutput_debugAndRelease) { - $$qtConfEvaluate("features.debug") { - qtConfOutputVar(append, "publicPro", "CONFIG", "debug") - $${2}: qtConfOutputVar(append, "publicPro", "QT_CONFIG", "release") - qtConfOutputVar(append, "publicPro", "QT_CONFIG", "debug") - } else { - qtConfOutputVar(append, "publicPro", "CONFIG", "release") - $${2}: qtConfOutputVar(append, "publicPro", "QT_CONFIG", "debug") - qtConfOutputVar(append, "publicPro", "QT_CONFIG", "release") - } -} - -defineTest(qtConfOutput_compilerFlags) { - # this output also exports the variables locally, so that subsequent compiler tests can use them - - output = - !isEmpty(config.input.wflags) { - wflags = $$join(config.input.wflags, " -W", "-W") - QMAKE_CFLAGS_WARN_ON += $$wflags - QMAKE_CXXFLAGS_WARN_ON += $$wflags - export(QMAKE_CFLAGS_WARN_ON) - export(QMAKE_CXXFLAGS_WARN_ON) - output += \ - "QMAKE_CFLAGS_WARN_ON += $$wflags" \ - "QMAKE_CXXFLAGS_WARN_ON += $$wflags" - } - !isEmpty(config.input.defines) { - EXTRA_DEFINES += $$config.input.defines - export(EXTRA_DEFINES) - output += "EXTRA_DEFINES += $$val_escape(config.input.defines)" - } - !isEmpty(config.input.includes) { - EXTRA_INCLUDEPATH += $$config.input.includes - export(EXTRA_INCLUDEPATH) - output += "EXTRA_INCLUDEPATH += $$val_escape(config.input.includes)" - } - - !isEmpty(config.input.lpaths) { - EXTRA_LIBDIR += $$config.input.lpaths - export(EXTRA_LIBDIR) - output += "EXTRA_LIBDIR += $$val_escape(config.input.lpaths)" - } - darwin:!isEmpty(config.input.fpaths) { - EXTRA_FRAMEWORKPATH += $$config.input.fpaths - export(EXTRA_FRAMEWORKPATH) - output += "EXTRA_FRAMEWORKPATH += $$val_escape(config.input.fpaths)" - } - - $${currentConfig}.output.privatePro += $$output - export($${currentConfig}.output.privatePro) -} - -defineTest(qtConfOutput_gccSysroot) { - !$${2}: return() - - # This variable also needs to be exported immediately, so the compilation tests - # can pick it up. - EXTRA_QMAKE_ARGS += \ - "\"QMAKE_CFLAGS += --sysroot=$$config.input.sysroot\"" \ - "\"QMAKE_CXXFLAGS += --sysroot=$$config.input.sysroot\"" \ - "\"QMAKE_LFLAGS += --sysroot=$$config.input.sysroot\"" - export(EXTRA_QMAKE_ARGS) - - # This one is for qtConfToolchainSupportsFlag(). - QMAKE_CXXFLAGS += --sysroot=$$config.input.sysroot - export(QMAKE_CXXFLAGS) - - output = \ - "!host_build {" \ - " QMAKE_CFLAGS += --sysroot=\$\$[QT_SYSROOT]" \ - " QMAKE_CXXFLAGS += --sysroot=\$\$[QT_SYSROOT]" \ - " QMAKE_LFLAGS += --sysroot=\$\$[QT_SYSROOT]" \ - "}" - $${currentConfig}.output.publicPro += $$output - export($${currentConfig}.output.publicPro) -} - -defineTest(qtConfOutput_qmakeArgs) { - !$${2}: return() - - $${currentConfig}.output.privatePro += "!host_build|!cross_compile {" - for (a, config.input.qmakeArgs) { - $${currentConfig}.output.privatePro += " $$a" - EXTRA_QMAKE_ARGS += $$system_quote($$a) - } - $${currentConfig}.output.privatePro += "}" - export(EXTRA_QMAKE_ARGS) - export($${currentConfig}.output.privatePro) -} - -defineReplace(qtConfOutputPostProcess_publicPro) { - qt_version = $$[QT_VERSION] - output = \ - $$1 \ - "QT_VERSION = $$qt_version" \ - "QT_MAJOR_VERSION = $$section(qt_version, '.', 0, 0)" \ - "QT_MINOR_VERSION = $$section(qt_version, '.', 1, 1)" \ - "QT_PATCH_VERSION = $$section(qt_version, '.', 2, 2)" - - #libinfix and namespace - !isEmpty(config.input.qt_libinfix): output += "QT_LIBINFIX = $$config.input.qt_libinfix" - !isEmpty(config.input.qt_namespace): output += "QT_NAMESPACE = $$config.input.qt_namespace" - - !isEmpty(QMAKE_GCC_MAJOR_VERSION) { - output += \ - "QT_GCC_MAJOR_VERSION = $$QMAKE_GCC_MAJOR_VERSION" \ - "QT_GCC_MINOR_VERSION = $$QMAKE_GCC_MINOR_VERSION" \ - "QT_GCC_PATCH_VERSION = $$QMAKE_GCC_PATCH_VERSION" - } - !isEmpty(QMAKE_MAC_SDK_VERSION): \ - output += "QT_MAC_SDK_VERSION = $$QMAKE_MAC_SDK_VERSION" - !isEmpty(QMAKE_CLANG_MAJOR_VERSION) { - output += \ - "QT_CLANG_MAJOR_VERSION = $$QMAKE_CLANG_MAJOR_VERSION" \ - "QT_CLANG_MINOR_VERSION = $$QMAKE_CLANG_MINOR_VERSION" \ - "QT_CLANG_PATCH_VERSION = $$QMAKE_CLANG_PATCH_VERSION" - } - !isEmpty(QMAKE_APPLE_CLANG_MAJOR_VERSION) { - output += \ - "QT_APPLE_CLANG_MAJOR_VERSION = $$QMAKE_APPLE_CLANG_MAJOR_VERSION" \ - "QT_APPLE_CLANG_MINOR_VERSION = $$QMAKE_APPLE_CLANG_MINOR_VERSION" \ - "QT_APPLE_CLANG_PATCH_VERSION = $$QMAKE_APPLE_CLANG_PATCH_VERSION" - } - !isEmpty(QMAKE_MSC_VER) { - output += \ - "QT_MSVC_MAJOR_VERSION = $$replace(QMAKE_MSC_FULL_VER, "(..)(..)(.*)", "\\1")" \ - "QT_MSVC_MINOR_VERSION = $$format_number($$replace(QMAKE_MSC_FULL_VER, "(..)(..)(.*)", "\\2"))" \ - "QT_MSVC_PATCH_VERSION = $$replace(QMAKE_MSC_FULL_VER, "(..)(..)(.*)", "\\3")" - } - !isEmpty(QMAKE_ICC_VER) { - output += \ - "QT_ICC_MAJOR_VERSION = $$replace(QMAKE_ICC_VER, "(..)(..)", "\\1")" \ - "QT_ICC_MINOR_VERSION = $$format_number($$replace(QMAKE_ICC_VER, "(..)(..)", "\\2"))" \ - "QT_ICC_PATCH_VERSION = $$QMAKE_ICC_UPDATE_VER" - } - !isEmpty(QMAKE_GHS_VERSION) { - output += \ - "QT_GHS_MAJOR_VERSION = $$replace(QMAKE_GHS_VERSION, "(.*)(.)(.)", "\\1")" \ - "QT_GHS_MINOR_VERSION = $$replace(QMAKE_GHS_VERSION, "(.*)(.)(.)", "\\2")" \ - "QT_GHS_PATCH_VERSION = $$replace(QMAKE_GHS_VERSION, "(.*)(.)(.)", "\\3")" - } - - output += "QT_EDITION = $$config.input.qt_edition" - !contains(config.input.qt_edition, "(OpenSource|Preview)") { - output += \ - "QT_LICHECK = $$config.input.qt_licheck" \ - "QT_RELEASE_DATE = $$config.input.qt_release_date" - } - - wasm: { - qt_emcc_version = $$qtSystemEmccVersion() - output += \ - "QT_EMCC_VERSION = $$qt_emcc_version" - } - - return($$output) -} - -defineReplace(qtConfOutputPostProcess_privatePro) { - output = $$1 - - !isEmpty(config.input.external-hostbindir): \ - output += "HOST_QT_TOOLS = $$val_escape(config.input.external-hostbindir)" - - return($$output) -} - -defineReplace(qtConfOutputPostProcess_publicHeader) { - qt_version = $$[QT_VERSION] - output = \ - $$1 \ - "$${LITERAL_HASH}define QT_VERSION_STR \"$$qt_version\"" \ - "$${LITERAL_HASH}define QT_VERSION_MAJOR $$section(qt_version, '.', 0, 0)" \ - "$${LITERAL_HASH}define QT_VERSION_MINOR $$section(qt_version, '.', 1, 1)" \ - "$${LITERAL_HASH}define QT_VERSION_PATCH $$section(qt_version, '.', 2, 2)" - - !$$qtConfEvaluate("features.shared") { - output += \ - "/* Qt was configured for a static build */" \ - "$${LITERAL_HASH}if !defined(QT_SHARED) && !defined(QT_STATIC)" \ - "$${LITERAL_HASH} define QT_STATIC" \ - "$${LITERAL_HASH}endif" - } - - !isEmpty(config.input.qt_libinfix): \ - output += "$${LITERAL_HASH}define QT_LIBINFIX \"$$eval(config.input.qt_libinfix)\"" - - wasm: { - qt_emcc_version = $$qtSystemEmccVersion() -output += \ - "$${LITERAL_HASH}define QT_EMCC_VERSION \"$$qt_emcc_version\"" - } - - return($$output) -} - - -# custom reporting - -defineTest(qtConfReport_buildParts) { - qtConfReportPadded($${1}, $$qtConfEvaluate("tests.build_parts.value")) -} - -defineReplace(qtConfReportArch) { - arch = $$qtConfEvaluate('tests.$${1}.arch') - subarch = $$qtConfEvaluate('tests.$${1}.subarch') - isEmpty(subarch): subarch = <none> - return("$$arch, CPU features: $$subarch") -} - -defineReplace(qtConfReportCompiler) { - clang_cl: { - return("clang-cl $${QMAKE_CLANG_MAJOR_VERSION}.$${QMAKE_CLANG_MINOR_VERSION}.$${QMAKE_CLANG_PATCH_VERSION}") - } else: clang { - !isEmpty(QMAKE_APPLE_CLANG_MAJOR_VERSION) { - return("clang (Apple) $${QMAKE_APPLE_CLANG_MAJOR_VERSION}.$${QMAKE_APPLE_CLANG_MINOR_VERSION}.$${QMAKE_APPLE_CLANG_PATCH_VERSION}") - } else { - return("clang $${QMAKE_CLANG_MAJOR_VERSION}.$${QMAKE_CLANG_MINOR_VERSION}.$${QMAKE_CLANG_PATCH_VERSION}") - } - } else: intel_icc { - return("intel_icc $$QMAKE_ICC_VER") - } else: intel_icl { - return("intel_icl $$QMAKE_ICC_VER") - } else: rim_qcc { - return("rim_qcc $${QMAKE_GCC_MAJOR_VERSION}.$${QMAKE_GCC_MINOR_VERSION}.$${QMAKE_GCC_PATCH_VERSION}") - } else: gcc { - return("gcc $${QMAKE_GCC_MAJOR_VERSION}.$${QMAKE_GCC_MINOR_VERSION}.$${QMAKE_GCC_PATCH_VERSION}") - } else: msvc { - return("msvc $$QMAKE_MSC_FULL_VER") - } else: ghs { - return("ghs $$QMAKE_GHS_VERSION") - } else { - return("unknown ($$QMAKE_COMPILER)") - } -} - - -defineTest(qtConfReport_buildTypeAndConfig) { - !$$qtConfEvaluate("features.cross_compile") { - qtConfAddReport("Build type: $$[QMAKE_SPEC] ($$qtConfReportArch(architecture))") - qtConfAddReport("Compiler: $$qtConfReportCompiler()") - } else { - qtConfAddReport("Building on: $$[QMAKE_SPEC] ($$qtConfReportArch(host_architecture))") - qtConfAddReport("Building for: $$[QMAKE_XSPEC] ($$qtConfReportArch(architecture))") - qtConfAddReport("Target compiler: $$qtConfReportCompiler()") - } - - qtConfAddReport() - qtConfAddReport("Configuration: $$eval($${currentConfig}.output.privatePro.append.CONFIG) $$eval($${currentConfig}.output.publicPro.append.QT_CONFIG)") - qtConfAddReport() -} - -defineTest(qtConfReport_buildMode) { - $$qtConfEvaluate("features.force_debug_info"): \ - release = "release (with debug info)" - else: \ - release = "release" - - $$qtConfEvaluate("features.debug") { - build_mode = "debug" - raw_build_mode = "debug" - } else { - build_mode = $$release - raw_build_mode = "release" - } - - $$qtConfEvaluate("features.debug_and_release"): \ - build_mode = "debug and $$release; default link: $$raw_build_mode" - - $$qtConfEvaluate("features.release_tools"): \ - build_mode = "$$build_mode; optimized tools" - - qtConfReportPadded($$1, $$build_mode) -} - -defineTest(qtConfReport_emccVersion) { - EMCC_VERSION = $$qtSystemEmccVersion() - REQ_VERSION = $$qtEmccRecommendedVersion() - !equals(EMCC_VERSION, $$REQ_VERSION) { - qtConfAddReport("You should use the recommended Emscripten version $$REQ_VERSION with this Qt. You have $$EMCC_VERSION $$QT_EMCC_VERSION") - } -} - -# ensure pristine environment for configuration -discard_from($$[QT_HOST_DATA/get]/mkspecs/qconfig.pri) -discard_from($$[QT_HOST_DATA/get]/mkspecs/qmodule.pri) -# ... and cause them to be reloaded afterwards -QMAKE_POST_CONFIGURE += \ - "include(\$\$[QT_HOST_DATA/get]/mkspecs/qconfig.pri)" \ - "include(\$\$[QT_HOST_DATA/get]/mkspecs/qmodule.pri)" - -defineTest(createConfigStatus) { - $$QMAKE_REDO_CONFIG: return() - cfg = $$relative_path($$_PRO_FILE_PWD_/configure, $$OUT_PWD) - ext = - equals(QMAKE_HOST.os, Windows) { - ext = .bat - cont = \ - "$$system_quote($$system_path($$cfg)$$ext) -redo %*" - } else { - !contains(cfg, .*/.*): cfg = ./$$cfg - cont = \ - "$${LITERAL_HASH}!/bin/sh" \ - "exec $$system_quote($$cfg) -redo \"$@\"" - } - write_file($$OUT_PWD/config.status$$ext, cont, exe)|error() -} - -QMAKE_POST_CONFIGURE += \ - "createConfigStatus()" |