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.
This commit is contained in:
Bill Hoffman 2011-06-07 08:59:03 -04:00
parent 08b109a87f
commit 9d406cdb65
1 changed files with 11 additions and 0 deletions

View File

@ -351,6 +351,9 @@ cmVisualStudio10TargetGenerator::WriteCustomRule(cmSourceFile* source,
{ {
if(!cmSystemTools::FileExists(sourcePath.c_str())) 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()); std::ofstream fout(sourcePath.c_str());
if(fout) if(fout)
{ {
@ -358,6 +361,14 @@ cmVisualStudio10TargetGenerator::WriteCustomRule(cmSourceFile* source,
fout.flush(); fout.flush();
fout.close(); 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; cmLocalVisualStudio7Generator* lg = this->LocalGenerator;