summaryrefslogtreecommitdiffstats
path: root/mkspecs
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2017-08-01 18:30:33 +0200
committerSimon Hausmann <simon.hausmann@qt.io>2017-08-02 16:37:48 +0000
commitf54f7d847099db448223fd630c5416b6fbd84c9e (patch)
treebb3969221b65a426b89020875ff5e16a8c5247e7 /mkspecs
parent90588d57d71e1eedf6becd3ebf505f3bd67b592b (diff)
configure: Add a feature to write tests in the .json file
We're adding a lot of unnecessary files that end up later as cargo-cult, for at most a handful of lines. So instead move the testcases directly into the .json file. The following sources were not inlined, because multiple tests share them, and the inlining infra does not support that (yet): - avx512 - openssl - gnu-libiconv/sun-libiconv (there is also a command line option to select the exact variant, which makes it hard/impossible to properly coalesce the library sources) The following sources were not inlined because of "complications": - verifyspec contains a lengthy function in the project file - stl contains lots of code in the source file - xlocalescanprint includes a private header from the source tree via a relative path, which we can't do, as the test's physical location is variable. - corewlan uses objective c++, which the inline system doesn't support reduce_relocs and reduce_exports now create libraries with main(), which is weird enough, but doesn't hurt. Done-with: Oswald Buddenhagen <oswald.buddenhagen@qt.io> Change-Id: Ic3a088f9f08a4fd7ae91fffd14ce8a262021cca0 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Diffstat (limited to 'mkspecs')
-rw-r--r--mkspecs/features/qt_configure.prf52
1 files changed, 47 insertions, 5 deletions
diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf
index 4b2ba560fb..c3ea334dd8 100644
--- a/mkspecs/features/qt_configure.prf
+++ b/mkspecs/features/qt_configure.prf
@@ -733,7 +733,7 @@ defineTest(qtConfHandleLibrary) {
}
# if the library defines a test, use it to verify the source.
- !isEmpty($${lpfx}.test) {
+ !isEmpty($${lpfx}.test)|!isEmpty($${lpfx}.test._KEYS_) {
$${lpfx}.literal_args = $$qtConfLibraryArgs($$spfx) $$use_args
$${lpfx}.host = $$eval($${spfx}.host)
!qtConfTest_compile($$lpfx) {
@@ -855,16 +855,58 @@ defineTest(qtConfTestPrepare_compile) {
return(true)
}
+defineTest(qtConfPrepareCompileTestSource) {
+ test_dir = $$2
+
+ # Create source code
+ contents = "/* Generated by configure */"
+ # Custom code before includes
+ for (ent, $$qtConfScalarOrList($${1}.head)): \
+ contents += $$ent
+ # Includes
+ for (ent, $$qtConfScalarOrList($${1}.include)): \
+ contents += "$${LITERAL_HASH}include <$$ent>"
+ # Custom code after includes
+ for (ent, $$qtConfScalarOrList($${1}.tail)): \
+ contents += $$ent
+ # And finally the custom code inside main()
+ contents += \
+ "int main(int argc, char **argv)" \
+ "{" \
+ " (void)argc; (void)argv;" \
+ " /* BEGIN TEST: */"
+ for (ent, $$qtConfScalarOrList($${1}.main)): \
+ contents += " $$ent"
+ contents += \
+ " /* END TEST */" \
+ " return 0;" \
+ "}"
+ write_file($$test_dir/main.cpp, contents)|error()
+
+ # Create stub .pro file
+ contents = "SOURCES = main.cpp"
+ # Custom project code
+ for (ent, $$qtConfScalarOrList($${1}.qmake)): \
+ contents += $$ent
+ write_file($$test_dir/$$basename(test_dir).pro, contents)|error()
+}
+
defineTest(qtConfTest_compile) {
test = $$eval($${1}.test)
host = $$eval($${1}.host)
isEmpty(host): host = false
- test_dir = $$QMAKE_CONFIG_TESTS_DIR/$$test
test_base_out_dir = $$OUT_PWD/$$basename(QMAKE_CONFIG_TESTS_DIR)
- test_out_dir = $$test_base_out_dir/$$test
- !isEmpty($${1}.pro): \
- test_dir = $$test_dir/$$eval($${1}.pro)
+ isEmpty(test) {
+ test_dir = $$test_base_out_dir/$$section(1, ".", -1)
+ test_out_dir = $$test_dir
+ qtConfPrepareCompileTestSource($${1}.test, $$test_dir)
+ } else {
+ test_dir = $$QMAKE_CONFIG_TESTS_DIR/$$test
+ test_out_dir = $$test_base_out_dir/$$test
+ !isEmpty($${1}.pro): \
+ test_dir = $$test_dir/$$eval($${1}.pro)
+ }
test_cmd_base = "$$QMAKE_CD $$system_quote($$system_path($$test_out_dir)) &&"
qmake_args = $$qtConfPkgConfigEnv()$$system_quote($$system_path($$QMAKE_QMAKE))