e07372ff50
the system path separator and shell are bound to the host system (system() will use cmd even on mingw with sh.exe in path). the makefiles otoh may depend on what the qmakespec defines. consequently, add $$system_path() and $$system_quote() (for use with system() & $$system()). $$native_path() is renamed to $$shell_path() and should be used with $$shell_quote() to produce command lines in makefiles. $$QMAKE_DIR_SEP needs to be applied to Option::dir_sep right after parsing the spec, so it is available to $$shell_{path,quote}(). Change-Id: If3db4849e7f96068cf03a32348a24f3a72d6292c Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
91 lines
2.8 KiB
Plaintext
91 lines
2.8 KiB
Plaintext
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 $$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\""
|
|
|
|
# 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 $$system_quote($$system_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)
|
|
}
|