summaryrefslogtreecommitdiffstats
path: root/mkspecs
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@digia.com>2013-10-07 17:55:45 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-11 18:47:27 +0200
commit0e96e47debd1d8c48d1d23fd51c9ee05f61c80e0 (patch)
tree118082426ba46aab1f6a715fbcc4a423e9c11398 /mkspecs
parent2b8e571f8458a533d1b902fff5a812db427b7da0 (diff)
qmake: Centralize TARGET sanitization in default_post.prf
Shared between UNIX and Win generators, and allows prfs after default_post to rely on sane TARGET and DESTDIR values. This allows us to clean up the DESTDIR logic in testcase.prf, which was completely busted. Doing the two in separate commits is unfortunately not possible as the old testcase.prf logic was so broken it would barf if only looked at. Change-Id: Ibf21216195c760ee46ae679c162b207b77a9d813 Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Diffstat (limited to 'mkspecs')
-rw-r--r--mkspecs/features/default_post.prf12
-rw-r--r--mkspecs/features/testcase.prf45
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)