| # 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() |
| |
| load(configure_base) |
| |
| isEmpty(QMAKE_CONFIG_VERBOSE): QMAKE_CONFIG_VERBOSE = false |
| |
| QMAKE_CONFIG_LOG = $$dirname(_QMAKE_CACHE_)/config.log |
| recheck: write_file($$QMAKE_CONFIG_LOG, "") |
| |
| 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 = "$$QMAKE_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) |
| } |