summaryrefslogtreecommitdiffstats
path: root/mkspecs/features/qt_configure.prf
diff options
context:
space:
mode:
Diffstat (limited to 'mkspecs/features/qt_configure.prf')
-rw-r--r--mkspecs/features/qt_configure.prf81
1 files changed, 61 insertions, 20 deletions
diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf
index 4846079fb1..0cb5c53fbe 100644
--- a/mkspecs/features/qt_configure.prf
+++ b/mkspecs/features/qt_configure.prf
@@ -468,6 +468,8 @@ defineTest(qtConfHandleLibrary) {
lpfx = config.libraries.$$1
defined($${lpfx}.result, var): return()
+ qtConfEnsureTestTypeDeps("library")
+
qtLogTestIntro($${lpfx})
msg = "looking for library $${1}"
write_file($$QMAKE_CONFIG_LOG, msg, append)
@@ -517,6 +519,11 @@ defineTest(qtConfHandleLibrary) {
export($${lpfx}.result)
}
+# This is a fake test type for the test dependency system.
+defineTest(qtConfTest_library) {
+ error("The test type 'library' may not be instantiated.")
+}
+
defineTest(qtConfTestPrepare_compile) {
for (u, $$list($$eval($${1}.use))) {
!contains(config.libraries._KEYS_, $$u): \
@@ -639,6 +646,54 @@ defineTest(qtConfIsBoolean) {
return(false)
}
+defineTest(qtConfSetupTestTypeDeps) {
+ for (tt, config.testTypeDependencies._KEYS_) {
+ !defined(qtConfTest_$${tt}, test): \
+ error("Declaring dependency for undefined test type '$$tt'.")
+ for (f, config.testTypeDependencies.$${tt}._KEYS_) {
+ feature = $$eval(config.testTypeDependencies.$${tt}.$${f})
+ isEmpty(config.features.$${feature}._KEYS_): \
+ error("Test type '$$tt' depends on undefined feature '$$feature'.")
+ }
+ }
+ # Test type aliasing means that one test type's callback is called by
+ # another test type's callback. Put differently, one callback forwards
+ # the call to another one. The former representation is more natural
+ # (and concise) to write, while the latter is more efficient to process.
+ # Hence, this function inverts the mapping.
+ for (tt, config.testTypeAliases._KEYS_) {
+ !defined(qtConfTest_$${tt}, test): \
+ error("Aliasing undefined test type '$$tt'.")
+ for (tta, config.testTypeAliases.$${tt}._KEYS_) {
+ type = $$eval(config.testTypeAliases.$${tt}.$${tta})
+ !defined(qtConfTest_$${type}, test): \
+ error("Aliasing '$$tt' to undefined test type '$$type'.")
+ config.testTypeForwards.$${type} += $$tt
+ export(config.testTypeForwards.$${type})
+ }
+ }
+}
+
+defineTest(qtConfEnsureTestTypeDeps) {
+ depsn = config.testTypeDependencies.$${1}._KEYS_
+ !isEmpty($$depsn) {
+ for (dep, $$depsn) {
+ feature = $$eval(config.testTypeDependencies.$${1}.$${dep})
+ !qtConfCheckFeature($$feature): \
+ error("Test type '$$1' depends on non-emitted feature $${feature}.")
+ }
+ $$depsn =
+ export($$depsn)
+ }
+ fwdsn = config.testTypeForwards.$${1}
+ !isEmpty($$fwdsn) {
+ for (fwd, $$fwdsn): \
+ qtConfEnsureTestTypeDeps($$fwd)
+ $$fwdsn =
+ export($$fwdsn)
+ }
+}
+
defineTest(qtRunSingleTest) {
tpfx = config.tests.$${1}
defined($${tpfx}.result, var): \
@@ -650,6 +705,8 @@ defineTest(qtRunSingleTest) {
!defined($$call, test): \
error("Configure test $${1} refers to nonexistent type $$type")
+ qtConfEnsureTestTypeDeps($$type)
+
preCall = "qtConfTestPrepare_$$type"
defined($$preCall, test): \
!$${preCall}($${tpfx}): result = false
@@ -738,6 +795,8 @@ defineReplace(qtConfEvaluateSingleExpression) {
} else: contains(e, "^arch\..*") {
var = $$replace(e, "^arch\.", "")
result = false
+ isEmpty(QT_ARCH): \
+ qtConfCheckFeature(architecture)
contains(QT_ARCH, $$var): result = true
} else: contains(e, "^input\..*") {
result = $$eval(config.$$e)
@@ -903,27 +962,8 @@ defineTest(qtConfCheckFeature) {
defineTest(qtConfProcessFeatures) {
- priorities = 0
for (feature, config.features._KEYS_): \
- priorities += $$eval(config.features.$${feature}.priority)
- priorities = $$unique(priorities)
-
- for (p, priorities): \
- opriorities += $$format_number($$num_add($$p, 10000), width=5 zeropad)
- opriorities = $$sorted(opriorities)
-
- priorities =
- for (op, opriorities): \
- priorities += $$num_add($$op, -10000)
-
- for (priority, priorities) {
- for (feature, config.features._KEYS_) {
- p = $$eval(config.features.$${feature}.priority)
- isEmpty(p): p = 0
- equals(p, $$priority): \
- qtConfCheckFeature($$feature)
- }
- }
+ qtConfCheckFeature($$feature)
}
#
@@ -1315,6 +1355,7 @@ defineTest(qtConfigure) {
error("Invalid or non-existent file $${1}.")
qtConfSetupLibraries()
+ qtConfSetupTestTypeDeps()
qtConfParseCommandLine()