Ninja: suppress cmcldeps only for source file signature try_compiles

This commit is contained in:
Peter Kümmel 2012-09-05 01:44:11 +02:00
parent 508ed6940b
commit 7b2bf28e18
3 changed files with 15 additions and 2 deletions

View File

@ -46,6 +46,7 @@ public:
std::stack<cmDefinitions, std::list<cmDefinitions> > VarStack; std::stack<cmDefinitions, std::list<cmDefinitions> > VarStack;
std::stack<std::set<cmStdString> > VarInitStack; std::stack<std::set<cmStdString> > VarInitStack;
std::stack<std::set<cmStdString> > VarUsageStack; std::stack<std::set<cmStdString> > VarUsageStack;
bool IsSourceFileTryCompile;
}; };
// default is not to be building executables // default is not to be building executables
@ -56,6 +57,7 @@ cmMakefile::cmMakefile(): Internal(new Internals)
this->Internal->VarStack.push(defs); this->Internal->VarStack.push(defs);
this->Internal->VarInitStack.push(globalKeys); this->Internal->VarInitStack.push(globalKeys);
this->Internal->VarUsageStack.push(globalKeys); this->Internal->VarUsageStack.push(globalKeys);
this->Internal->IsSourceFileTryCompile = false;
// Initialize these first since AddDefaultDefinitions calls AddDefinition // Initialize these first since AddDefaultDefinitions calls AddDefinition
this->WarnUnused = false; this->WarnUnused = false;
@ -2912,6 +2914,7 @@ int cmMakefile::TryCompile(const char *srcdir, const char *bindir,
const std::vector<std::string> *cmakeArgs, const std::vector<std::string> *cmakeArgs,
std::string *output) std::string *output)
{ {
this->Internal->IsSourceFileTryCompile = fast;
// does the binary directory exist ? If not create it... // does the binary directory exist ? If not create it...
if (!cmSystemTools::FileIsDirectory(bindir)) if (!cmSystemTools::FileIsDirectory(bindir))
{ {
@ -2937,6 +2940,7 @@ int cmMakefile::TryCompile(const char *srcdir, const char *bindir,
"Internal CMake error, TryCompile bad GlobalGenerator"); "Internal CMake error, TryCompile bad GlobalGenerator");
// return to the original directory // return to the original directory
cmSystemTools::ChangeDirectory(cwd.c_str()); cmSystemTools::ChangeDirectory(cwd.c_str());
this->Internal->IsSourceFileTryCompile = false;
return 1; return 1;
} }
cm.SetGlobalGenerator(gg); cm.SetGlobalGenerator(gg);
@ -3009,6 +3013,7 @@ int cmMakefile::TryCompile(const char *srcdir, const char *bindir,
"Internal CMake error, TryCompile configure of cmake failed"); "Internal CMake error, TryCompile configure of cmake failed");
// return to the original directory // return to the original directory
cmSystemTools::ChangeDirectory(cwd.c_str()); cmSystemTools::ChangeDirectory(cwd.c_str());
this->Internal->IsSourceFileTryCompile = false;
return 1; return 1;
} }
@ -3018,6 +3023,7 @@ int cmMakefile::TryCompile(const char *srcdir, const char *bindir,
"Internal CMake error, TryCompile generation of cmake failed"); "Internal CMake error, TryCompile generation of cmake failed");
// return to the original directory // return to the original directory
cmSystemTools::ChangeDirectory(cwd.c_str()); cmSystemTools::ChangeDirectory(cwd.c_str());
this->Internal->IsSourceFileTryCompile = false;
return 1; return 1;
} }
@ -3031,9 +3037,15 @@ int cmMakefile::TryCompile(const char *srcdir, const char *bindir,
this); this);
cmSystemTools::ChangeDirectory(cwd.c_str()); cmSystemTools::ChangeDirectory(cwd.c_str());
this->Internal->IsSourceFileTryCompile = false;
return ret; return ret;
} }
bool cmMakefile::GetIsSourceFileTryCompile() const
{
return this->Internal->IsSourceFileTryCompile;
}
cmake *cmMakefile::GetCMakeInstance() const cmake *cmMakefile::GetCMakeInstance() const
{ {
if ( this->LocalGenerator && this->LocalGenerator->GetGlobalGenerator() ) if ( this->LocalGenerator && this->LocalGenerator->GetGlobalGenerator() )

View File

@ -128,6 +128,8 @@ public:
const std::vector<std::string> *cmakeArgs, const std::vector<std::string> *cmakeArgs,
std::string *output); std::string *output);
bool GetIsSourceFileTryCompile() const;
/** /**
* Specify the makefile generator. This is platform/compiler * Specify the makefile generator. This is platform/compiler
* dependent, although the interface is through a generic * dependent, although the interface is through a generic

View File

@ -355,8 +355,7 @@ cmNinjaTargetGenerator
if (lang == "C" || lang == "CXX" || lang == "RC") if (lang == "C" || lang == "CXX" || lang == "RC")
{ {
clDepsBinary = mf->GetSafeDefinition("CMAKE_CMCLDEPS_EXECUTABLE"); clDepsBinary = mf->GetSafeDefinition("CMAKE_CMCLDEPS_EXECUTABLE");
if (!clDepsBinary.empty() && if (!clDepsBinary.empty() && !mf->GetIsSourceFileTryCompile())
!this->GetGlobalGenerator()->GetCMakeInstance()->GetIsInTryCompile())
{ {
clShowPrefix = mf->GetSafeDefinition("CMAKE_CL_SHOWINCLUDE_PREFIX"); clShowPrefix = mf->GetSafeDefinition("CMAKE_CL_SHOWINCLUDE_PREFIX");
clBinary = mf->GetDefinition("CMAKE_C_COMPILER") ? clBinary = mf->GetDefinition("CMAKE_C_COMPILER") ?