Improved usage of TESTDATA with relative paths beginning with ".."
authorRohan McGovern <rohan.mcgovern@nokia.com>
Thu, 24 Nov 2011 00:31:24 +0000 (10:31 +1000)
committerQt by Nokia <qt-info@nokia.com>
Thu, 24 Nov 2011 22:42:35 +0000 (23:42 +0100)
Support the common construct of a top-level test directory having
a test/test.pro with:

  TARGET = ../tst_sometest
  TESTDATA = ../data1.txt ../data2.txt

Prior to this change, the ".." in TESTDATA would cause the data to
break out of the test's installation directory.

Change-Id: I22860bf3a148f278b3f4e18b476fd151f7f0f775
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
mkspecs/features/testcase.prf

index a6b8d82..15135e1 100644 (file)
@@ -104,7 +104,20 @@ contains(INSTALLS, target) {
         # TESTDATA consists of the files to install (source)...
         $$tdif = $$file
 
-        # ... and the destination preserves the relative path
+        # ... and the destination preserves the relative path.
+        # Strip any leading ../ from the testdata, so that installation does not escape
+        # the test's directory in the case of e.g.
+        #
+        #  TARGET   = ../tst_qprocess
+        #  TESTDATA = ../thing1 ../thing2
+        #
+        # The testdata should end up at $$[QT_INSTALL_TESTS]/tst_qprocess/thing1,
+        # rather than $$[QT_INSTALL_TESTS]/tst_qprocess/../thing1.
+        #
+        # Note that this does not guarantee the same relative path between test binary
+        # and testdata in the build and install tree, but should cover most cases.
+        #
+        file = $$replace(file, ^(\\.\\./)+, )
         $$tdip = $${target.path}/$$dirname(file)
 
         INSTALLS += $$tdi