diff options
Diffstat (limited to 'mkspecs/features')
-rw-r--r-- | mkspecs/features/default_post.prf | 12 | ||||
-rw-r--r-- | mkspecs/features/testcase.prf | 45 |
2 files changed, 35 insertions, 22 deletions
diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf index c756455dd2..4501b2a568 100644 --- a/mkspecs/features/default_post.prf +++ b/mkspecs/features/default_post.prf @@ -6,6 +6,18 @@ contains(TEMPLATE, ".*(lib|app)"):CONFIG += have_target load(resolve_config) +# If the TARGET looks like a path, split it into DESTDIR and the resulting TARGET +target_dir_part = $$dirname(TARGET) +!isEmpty(target_dir_part) { + isEmpty(DESTDIR): \ + DESTDIR = $$target_dir_part + else: \ + DESTDIR = $$DESTDIR/$$target_dir_part + + TARGET = $$basename(TARGET) + DESTDIR = $$clean_path($$DESTDIR) +} + QT_BREAKPAD_ROOT_PATH = $$(QT_BREAKPAD_ROOT_PATH) !isEmpty(QT_BREAKPAD_ROOT_PATH): \ # quick test first whether requested ... !static:release:have_target: \ # is it applicable? diff --git a/mkspecs/features/testcase.prf b/mkspecs/features/testcase.prf index e31d1f4539..10f421a8e2 100644 --- a/mkspecs/features/testcase.prf +++ b/mkspecs/features/testcase.prf @@ -10,34 +10,35 @@ check.files = check.path = . # If the test ends up in a different directory, we should cd to that directory. -# Note that qmake modifies DESTDIR after this file is processed, -# therefore, testing DESTDIR for emptiness is not sufficient. -# Also note that in debug-and-release mode we don't want to cd into the debug/release -# directory (e.g. if the test goes to foo/release/tst_thing.exe, we want to do -# cd foo && release/tst_thing.exe ). -MUNGED_DESTDIR=$$DESTDIR -MUNGED_TARGET=$$TARGET -win32:debug_and_release { - contains(DESTDIR,^release$)|contains(DESTDIR,^debug$):MUNGED_DESTDIR= - - # In debug-and-release mode, the first ../ in TARGET breaks out of the debug/release - # subdirectory. However, since make's working directory is already outside of the - # debug/release subdirectory, this first ../ should be ignored when deciding if - # we have to change directory before running the test. - MUNGED_TARGET=$$replace(MUNGED_TARGET,^\\.\\./,) +TESTRUN_CWD = $$DESTDIR + +debug_and_release:debug_and_release_target { + # But in debug-and-release-target mode we don't want to cd into the debug/release + # directory (e.g. if the test goes to foo/release/tst_thing.exe, we want to do + # 'cd foo && release/tst_thing.exe', not 'cd foo/release && tst_thing.exe'). + + TESTRUN_CWD ~= s/(release|debug)$// + TEST_TARGET_DIR = $$relative_path($$absolute_path($$DESTDIR, $$OUT_PWD), $$absolute_path($$TESTRUN_CWD, $$OUT_PWD)) } -!isEmpty(MUNGED_DESTDIR):!contains(MUNGED_DESTDIR,^\\./?):check.commands = cd $(DESTDIR) && -contains(MUNGED_TARGET,.*/.*):check.commands = cd $(DESTDIR) && + +!isEmpty(TESTRUN_CWD):!contains(TESTRUN_CWD,^\\./?): \ + check.commands = cd $$system_path($$TESTRUN_CWD) && # Allow for a custom test runner script check.commands += $(TESTRUNNER) -mac { - app_bundle: check.commands += ./$(QMAKE_TARGET).app/Contents/MacOS/$(QMAKE_TARGET) - else: check.commands += ./$(QMAKE_TARGET) +unix { + isEmpty(TEST_TARGET_DIR): TEST_TARGET_DIR = . + + mac:app_bundle: \ + check.commands += $${TEST_TARGET_DIR}/$(QMAKE_TARGET).app/Contents/MacOS/$(QMAKE_TARGET) + else: \ + check.commands += $${TEST_TARGET_DIR}/$(QMAKE_TARGET) +} else { + # Windows + !isEmpty(TEST_TARGET_DIR): TEST_TARGET_DIR = $${TEST_TARGET_DIR}$${QMAKE_DIR_SEP} + check.commands += $${TEST_TARGET_DIR}$(TARGET) } -else:unix: check.commands += ./$(QMAKE_TARGET) -else: check.commands += $(DESTDIR_TARGET) # Allow for custom arguments to tests check.commands += $(TESTARGS) |