Explorar o código

Change logic of ctest subdirs command to allow for absolute paths. Also added test coverage for passing absolute paths to subdirs.

Zach Mullen %!s(int64=16) %!d(string=hai) anos
pai
achega
c9c0ee4056

+ 9 - 6
Source/CTest/cmCTestTestHandler.cxx

@@ -82,17 +82,20 @@ bool cmCTestSubdirCommand
   for ( it = args.begin(); it != args.end(); ++ it )
     {
     cmSystemTools::ChangeDirectory(cwd.c_str());
-    std::string fname = cwd;
-    fname += "/";
-    fname += *it;
+    std::string fname;
 
-    //sanity check on relative path; if not, try absolute path
-    if ( !cmSystemTools::FileIsDirectory(fname.c_str()))
+    if(cmSystemTools::FileIsFullPath(it->c_str()))
       {
       fname = *it;
       }
+    else
+      {
+      fname = cwd;
+      fname += "/";
+      fname += *it;
+      }
 
-    if ( !cmSystemTools::FileExists(fname.c_str()) )
+    if ( !cmSystemTools::FileIsDirectory(fname.c_str()) )
       {
       // No subdirectory? So what...
       continue;

+ 3 - 0
Tests/CMakeLists.txt

@@ -1210,6 +1210,9 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=CVS -P ${CMake_SOURCE_DIR}/Utilities/Rel
     -S "${CMake_BINARY_DIR}/Tests/CTestTestSubdir/test.cmake" -V
     --output-log "${CMake_BINARY_DIR}/Tests/CTestTestSubdir/testOutput.log"
     )
+  #make sure all 3 subdirs were added
+  SET_TESTS_PROPERTIES(CTestTestSubdir PROPERTIES
+    PASS_REGULAR_EXPRESSION "0 tests failed out of 3")
     
   CONFIGURE_FILE(
     "${CMake_SOURCE_DIR}/Tests/CTestTestTimeout/test.cmake.in"

+ 2 - 0
Tests/CTestTestSubdir/CMakeLists.txt

@@ -9,3 +9,5 @@ GET_FILENAME_COMPONENT(CTEST_COMMAND "${CMAKE_COMMAND}" PATH)
 SET(CTEST_COMMAND "${CTEST_COMMAND}/ctest")
 
 ADD_SUBDIRECTORY(subdir)
+SUBDIRS(subdir2)
+SUBDIRS("${CTestTestSubdir_SOURCE_DIR}/subdir3")

+ 1 - 1
Tests/CTestTestSubdir/subdir/CMakeLists.txt

@@ -1,2 +1,2 @@
 ADD_EXECUTABLE (main main.c)
-ADD_TEST (TestMain main)
+ADD_TEST (TestMain1 main)

+ 2 - 0
Tests/CTestTestSubdir/subdir2/CMakeLists.txt

@@ -0,0 +1,2 @@
+ADD_EXECUTABLE (main2 main.c)
+ADD_TEST (TestMain2 main2)

+ 4 - 0
Tests/CTestTestSubdir/subdir2/main.c

@@ -0,0 +1,4 @@
+int main(void)
+{
+  return 0;
+}

+ 2 - 0
Tests/CTestTestSubdir/subdir3/CMakeLists.txt

@@ -0,0 +1,2 @@
+ADD_EXECUTABLE (main3 main.c)
+ADD_TEST (TestMain3 main3)

+ 4 - 0
Tests/CTestTestSubdir/subdir3/main.c

@@ -0,0 +1,4 @@
+int main(void)
+{
+  return 0;
+}