1
0
Эх сурвалжийг харах

Fix try compile with second signature, remove cmake lists from cache so that multiple tests work

Andy Cedilnik 23 жил өмнө
parent
commit
b17cfc7584

+ 31 - 27
Source/cmTryCompileCommand.cxx

@@ -16,13 +16,14 @@
 =========================================================================*/
 #include "cmTryCompileCommand.h"
 #include "cmCacheManager.h"
+#include "cmListFileCache.h"
 
 int cmTryCompileCommand::CoreTryCompileCode(
   cmMakefile *mf, std::vector<std::string> const& argv, bool clean)
 {
   // which signature were we called with ?
-  bool srcFileSignature = true;
-  int i;
+  bool srcFileSignature = false;
+  unsigned int i;
   
   // where will the binaries be stored
   const char* binaryDirectory = argv[1].c_str();
@@ -30,25 +31,13 @@ int cmTryCompileCommand::CoreTryCompileCode(
   const char* projectName = 0;
   const char* targetName = 0;
   std::string tmpString;
-  
-  // compute the binary dir when TRY_COMPILE is called with a src file
-  // signature
-  if (srcFileSignature)
-    {
-    tmpString = argv[1] + "/CMakeTmp";
-    binaryDirectory = tmpString.c_str();
-    }
-  // make sure the binary directory exists
-  cmSystemTools::MakeDirectory(binaryDirectory);
-  
-  // do not allow recursive try Compiles
-  if (!strcmp(binaryDirectory,mf->GetHomeOutputDirectory()))
+
+  // do we have a srcfile signature
+  if (argv.size() == 3 || argv[3] == "CMAKE_FLAGS" || argv[3] == "COMPILE_DEFINITIONS")
     {
-    cmSystemTools::Error("Attempt at a recursive or nested TRY_COMPILE", 
-                         binaryDirectory);
-    return -1;
+    srcFileSignature = true;
     }
-  
+
   // look for CMAKE_FLAGS and store them
   std::vector<std::string> cmakeFlags;
   for (i = 3; i < argv.size(); ++i)
@@ -62,15 +51,11 @@ int cmTryCompileCommand::CoreTryCompileCode(
         }
       break;
       }
-    else
-      {
-      srcFileSignature = false;
-      }
     }
 
   // look for COMPILE_DEFINITIONS and store them
   std::vector<std::string> compileFlags;
-  for (i = 0; i < argv.size(); ++i)
+  for (i = 3; i < argv.size(); ++i)
     {
     if (argv[i] == "COMPILE_DEFINITIONS")
       {
@@ -90,6 +75,25 @@ int cmTryCompileCommand::CoreTryCompileCode(
       }
     }
   
+  // compute the binary dir when TRY_COMPILE is called with a src file
+  // signature
+  if (srcFileSignature)
+    {
+    tmpString = argv[1] + "/CMakeTmp";
+    binaryDirectory = tmpString.c_str();
+    }
+  // make sure the binary directory exists
+  cmSystemTools::MakeDirectory(binaryDirectory);
+  
+  // do not allow recursive try Compiles
+  if (!strcmp(binaryDirectory,mf->GetHomeOutputDirectory()))
+    {
+    cmSystemTools::Error("Attempt at a recursive or nested TRY_COMPILE", 
+                         binaryDirectory);
+    return -1;
+    }
+  
+  std::string outFileName = tmpString + "/CMakeLists.txt";
   // which signature are we using? If we are using var srcfile bindir
   if (srcFileSignature)
     {
@@ -102,7 +106,6 @@ int cmTryCompileCommand::CoreTryCompileCode(
     sourceDirectory = binaryDirectory;
 
     // now create a CMakeList.txt file in that directory
-    std::string outFileName = tmpString + "/CMakeLists.txt";
     FILE *fout = fopen(outFileName.c_str(),"w");
     if (!fout)
       {
@@ -150,7 +153,7 @@ int cmTryCompileCommand::CoreTryCompileCode(
   
   // if They specified clean then we clean up what we can
   if (srcFileSignature && clean)
-    {
+    {    
     cmDirectory dir;
     dir.Load(binaryDirectory);
     size_t fileNum;
@@ -164,7 +167,8 @@ int cmTryCompileCommand::CoreTryCompileCode(
         fullPath += dir.GetFile(fileNum);
         cmSystemTools::RemoveFile(fullPath.c_str());
         }
-      }
+      }    
+    cmListFileCache::GetInstance()->FlushCache(outFileName.c_str());
     }
   
   return res;