Bladeren bron

Fix for bug #11927, external project git clone step always runs vs10.

In cmMakefile.cxx GetCMakeCFGInitDirectory is replaced with
GetCMakeFilesDirectory for .rule files.  In some cases with
external projects, that directory will not exist.  With vs10
the .rule files must exist or the rule will run with every build.
This fix creates the path that the .rule file is in.  In addition,
it is now a CMake error if the .rule file can not be created.
Bill Hoffman 14 jaren geleden
bovenliggende
commit
9d406cdb65
1 gewijzigde bestanden met toevoegingen van 11 en 0 verwijderingen
  1. 11 0
      Source/cmVisualStudio10TargetGenerator.cxx

+ 11 - 0
Source/cmVisualStudio10TargetGenerator.cxx

@@ -351,6 +351,9 @@ cmVisualStudio10TargetGenerator::WriteCustomRule(cmSourceFile* source,
     {
     if(!cmSystemTools::FileExists(sourcePath.c_str()))
       {
+      // Make sure the path exists for the file
+      std::string path = cmSystemTools::GetFilenamePath(sourcePath);
+      cmSystemTools::MakeDirectory(path.c_str());
       std::ofstream fout(sourcePath.c_str());
       if(fout)
         {
@@ -358,6 +361,14 @@ cmVisualStudio10TargetGenerator::WriteCustomRule(cmSourceFile* source,
         fout.flush();
         fout.close();
         }
+      else
+        {
+        std::string error = "Could not create file: [";
+        error +=  sourcePath;
+        error += "]  ";
+        cmSystemTools::Error
+          (error.c_str(), cmSystemTools::GetLastSystemError().c_str());
+        }
       }
     }
   cmLocalVisualStudio7Generator* lg = this->LocalGenerator;