Bill Hoffman 24 лет назад
Родитель
Сommit
047c7b5af4
4 измененных файлов с 43 добавлено и 15 удалено
  1. 6 2
      Source/CMakeLists.txt
  2. 3 1
      Source/cmStandardIncludes.h
  3. 32 10
      Source/cmaketest.cxx
  4. 2 2
      Source/ctest.cxx

+ 6 - 2
Source/CMakeLists.txt

@@ -68,8 +68,12 @@ IF(BUILD_TESTING)
       ${CMake_BINARY_DIR}/Source/cmaketest.h ESCAPE_QUOTES)
     ADD_TEST(simple ${CMake_BINARY_DIR}/Source/cmaketest 
       ${CMake_SOURCE_DIR}/Tests/Simple 
-      ${CMake_BINARY_DIR}/Tests/Simple simple
-    )
+      ${CMake_BINARY_DIR}/Tests/Simple simple )
+    ADD_TEST(complex ${CMake_BINARY_DIR}/Source/cmaketest 
+      ${CMake_SOURCE_DIR}/Tests/Complex 
+      ${CMake_BINARY_DIR}/Tests/Complex 
+      complex 
+      ${CMake_BINARY_DIR}/Tests/Complex/bin )
 
   ENDIF (DART_ROOT)
 ENDIF(BUILD_TESTING)

+ 3 - 1
Source/cmStandardIncludes.h

@@ -131,7 +131,9 @@ inline bool operator==(std::string const& a, const char* b)
 { return (a==std::string(b)); }
 # endif  // end CM_SGI_CC_720
 
-
+// use this class to shring the size of symbols in .o files
+// std::string is really basic_string<....lots of stuff....>
+// when combined with a map or set, the symbols can be > 2000 chars!
 struct cmStdString : public std::string
 {
   typedef std::string Parent;

+ 32 - 10
Source/cmaketest.cxx

@@ -15,7 +15,15 @@ int main (int argc, char *argv[])
     {
     cmSystemTools::MakeDirectory(argv[2]);
     }
-
+  const char* sourceDirectory = argv[1];
+  const char* binaryDirectory = argv[2];
+  const char* executableName = argv[3];
+  const char* executableDirectory = "";
+  if(argc > 4)
+    {
+    executableDirectory = argv[4];
+    }
+  
   /**
    * Run an executable command and put the stdout in output.
    */
@@ -23,10 +31,10 @@ int main (int argc, char *argv[])
   
   // change to the tests directory and run cmake
   std::string cwd = cmSystemTools::GetCurrentWorkingDirectory();
-  cmSystemTools::ChangeDirectory(argv[2]);
+  cmSystemTools::ChangeDirectory(binaryDirectory);
   std::string ccmd = CMAKE_COMMAND;
   ccmd += " ";
-  ccmd += argv[1];
+  ccmd += sourceDirectory;
   if (!cmSystemTools::RunCommand(ccmd.c_str(), output))
     {
     std::cerr << "Error: cmake execution failed\n";
@@ -39,7 +47,7 @@ int main (int argc, char *argv[])
   // now build the test
   std::string makeCommand = MAKEPROGRAM;
   makeCommand += " ";
-  makeCommand += argv[3];
+  makeCommand += executableName;
 #ifdef _WIN32
   makeCommand += ".dsw /MAKE \"ALL_BUILD - Release\" /REBUILD";
 #endif  
@@ -55,20 +63,19 @@ int main (int argc, char *argv[])
   // now run the compiled test if we can find it
   // See if the executable exists as written.
   std::string fullPath;
-  if(cmSystemTools::FileExists(argv[3]))
+  if(cmSystemTools::FileExists(executableName))
     {
-    fullPath = cmSystemTools::CollapseFullPath(argv[3]);
+    fullPath = cmSystemTools::CollapseFullPath(executableName);
     }
-  std::string tryPath = argv[3];
+  std::string tryPath = executableName;
   tryPath += cmSystemTools::GetExecutableExtension();
   if(cmSystemTools::FileExists(tryPath.c_str()))
     {
     fullPath = cmSystemTools::CollapseFullPath(tryPath.c_str());
     }
-  
   // try the release extension
   tryPath = "Release/";
-  tryPath += cmSystemTools::GetFilenameName(argv[3]);
+  tryPath += cmSystemTools::GetFilenameName(executableName);
   if(cmSystemTools::FileExists(tryPath.c_str()))
     {
     fullPath = cmSystemTools::CollapseFullPath(tryPath.c_str());
@@ -78,7 +85,22 @@ int main (int argc, char *argv[])
     {
     fullPath = cmSystemTools::CollapseFullPath(tryPath.c_str());
     }
-
+  tryPath = executableDirectory;
+  tryPath += "/";
+  tryPath += executableName;
+  tryPath += cmSystemTools::GetExecutableExtension();
+  if(cmSystemTools::FileExists(tryPath.c_str()))
+    {
+    fullPath = cmSystemTools::CollapseFullPath(tryPath.c_str());
+    }
+  tryPath = executableDirectory;
+  tryPath += "/Release/";
+  tryPath += executableName;
+  tryPath += cmSystemTools::GetExecutableExtension();
+  if(cmSystemTools::FileExists(tryPath.c_str()))
+    {
+    fullPath = cmSystemTools::CollapseFullPath(tryPath.c_str());
+    }
   if (!cmSystemTools::RunCommand(fullPath.c_str(), output))
     {
     std::cerr << "Error: " << fullPath.c_str() << "  execution failed\n";

+ 2 - 2
Source/ctest.cxx

@@ -117,7 +117,7 @@ void ctest::ProcessDirectory(int &passed, int &failed)
           nwd += *j;
           if (cmSystemTools::FileIsDirectory(nwd.c_str()))
             {
-            cerr << "Changing directory into " << nwd.c_str() << "\n";
+            std::cerr << "Changing directory into " << nwd.c_str() << "\n";
             cmSystemTools::ChangeDirectory(nwd.c_str());
             this->ProcessDirectory(passed,failed);
             }
@@ -128,7 +128,7 @@ void ctest::ProcessDirectory(int &passed, int &failed)
 
       if (name == "ADD_TEST")
         {
-        cerr << "Testing " << args[0] << " ... ";
+        std::cerr << "Testing " << args[0] << " ... ";
         // find the test executable
         std::string testCommand = this->FindExecutable(args[1].c_str());
         // add the arguments