load(configure_base) isEmpty(QMAKE_CONFIG_TESTS_DIR): QMAKE_CONFIG_TESTS_DIR = $$_PRO_FILE_PWD_/config.tests # 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 $$system_quote($$system_path($$test_out_dir)) &&" # Disable qmake features which are typically counterproductive for tests qmake_configs = "\"CONFIG -= qt debug_and_release app_bundle lib_bundle\"" # On WinRT we need to change the entry point as we cannot create windows # applications winrt { qmake_configs += " \"QMAKE_LFLAGS+=/ENTRY:main\"" } # Clean up after previous run exists($$test_out_dir/Makefile):qtRunLoggedCommand("$$test_cmd_base $$QMAKE_MAKE distclean") mkpath($$test_out_dir)|error() !isEmpty (QMAKE_QTCONF): qtconfarg = -qtconf $$QMAKE_QTCONF qtRunLoggedCommand("$$test_cmd_base $$system_quote($$system_path($$QMAKE_QMAKE)) $$qtconfarg -spec $$QMAKESPEC $$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) }