summaryrefslogtreecommitdiffstats
path: root/mkspecs
diff options
context:
space:
mode:
Diffstat (limited to 'mkspecs')
-rw-r--r--mkspecs/features/configure.prf90
1 files changed, 90 insertions, 0 deletions
diff --git a/mkspecs/features/configure.prf b/mkspecs/features/configure.prf
new file mode 100644
index 0000000000..651f0ad256
--- /dev/null
+++ b/mkspecs/features/configure.prf
@@ -0,0 +1,90 @@
+equals(MAKEFILE_GENERATOR, UNIX): \
+ QMAKE_MAKE = make
+else:equals(MAKEFILE_GENERATOR, MINGW): \
+ QMAKE_MAKE = mingw32-make
+else:if(equals(MAKEFILE_GENERATOR, MSVC.NET)|equals(MAKEFILE_GENERATOR, MSBUILD)): \
+ QMAKE_MAKE = nmake
+else: \
+ error("Configure tests are not supported with the $$MAKEFILE_GENERATOR Makefile generator.")
+
+# Ensure that a cache is present. If none was found on startup, this will create
+# one in the build directory of the project which loads this feature.
+cache()
+
+QMAKE_CONFIG_LOG = $$dirname(_QMAKE_CACHE_)/config.log
+QMAKE_CONFIG_TESTS_DIR = $$_PRO_FILE_PWD_/config.tests
+
+defineTest(qtRunLoggedCommand) {
+ msg = "+ $$1"
+ write_file($$QMAKE_CONFIG_LOG, msg, append)
+ system("$$1 >> \"$$QMAKE_CONFIG_LOG\" 2>&1")|return(false)
+ return(true)
+}
+
+# Try to build the test project in $$QMAKE_CONFIG_TESTS_DIR/$$1
+# ($$_PRO_FILE_PWD_/config.tests/$$1 by default).
+#
+# If the test passes, config_$$1 will be added to CONFIG.
+# The result is automatically cached. Use of cached results
+# can be suppressed by passing CONFIG+=recheck to qmake.
+#
+# Returns: true iff the test passes
+defineTest(qtCompileTest) {
+ positive = config_$$1
+ done = done_config_$$1
+
+ $$done:!recheck {
+ $$positive:return(true)
+ return(false)
+ }
+
+ log("Checking for $${1}... ")
+ msg = "executing config test $$1"
+ write_file($$QMAKE_CONFIG_LOG, msg, append)
+
+ test_dir = $$QMAKE_CONFIG_TESTS_DIR/$$1
+ test_out_dir = $$shadowed($$test_dir)
+ test_cmd_base = "cd $$shell_quote($$native_path($$test_out_dir)) &&"
+
+ # Disable qmake features which are typically counterproductive for tests
+ qmake_configs = "\"CONFIG -= qt debug_and_release app_bundle lib_bundle\""
+
+ # Clean up after previous run
+ exists($$test_out_dir/Makefile):qtRunLoggedCommand("$$test_cmd_base $$QMAKE_MAKE distclean")
+
+ mkpath($$test_out_dir)|error("Aborting.")
+
+ qtRunLoggedCommand("$$test_cmd_base $$shell_quote($$native_path($$QMAKE_QMAKE)) $$qmake_configs $$shell_quote($$test_dir)") {
+ qtRunLoggedCommand("$$test_cmd_base $$QMAKE_MAKE") {
+ log("yes$$escape_expand(\\n)")
+ msg = "test $$1 succeeded"
+ write_file($$QMAKE_CONFIG_LOG, msg, append)
+
+ !$$positive {
+ CONFIG += $$positive
+ cache(CONFIG, add, positive)
+ }
+ !$$done {
+ CONFIG += $$done
+ cache(CONFIG, add, done)
+ }
+ export(CONFIG)
+ return(true)
+ }
+ }
+
+ log("no$$escape_expand(\\n)")
+ msg = "test $$1 FAILED"
+ write_file($$QMAKE_CONFIG_LOG, msg, append)
+
+ $$positive {
+ CONFIG -= $$positive
+ cache(CONFIG, sub, positive)
+ }
+ !$$done {
+ CONFIG += $$done
+ cache(CONFIG, add, done)
+ }
+ export(CONFIG)
+ return(false)
+}