diff options
Diffstat (limited to 'Source/cmCoreTryCompile.cxx')
-rw-r--r-- | Source/cmCoreTryCompile.cxx | 76 |
1 files changed, 56 insertions, 20 deletions
diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx index bc5708d..5b5d6b6 100644 --- a/Source/cmCoreTryCompile.cxx +++ b/Source/cmCoreTryCompile.cxx @@ -109,7 +109,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv) } default: this->Makefile->IssueMessage(cmake::FATAL_ERROR, - "Only libraries may be used as try_compile IMPORTED " + "Only libraries may be used as try_compile or try_run IMPORTED " "LINK_LIBRARIES. Got " + std::string(tgt->GetName()) + " of " "type " + tgt->GetTargetTypeName(tgt->GetType()) + "."); return -1; @@ -150,7 +150,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv) } else { - cmOStringStream m; + std::ostringstream m; m << "try_compile given unknown argument \"" << argv[i] << "\"."; this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, m.str()); } @@ -201,13 +201,13 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv) else { // only valid for srcfile signatures - if (compileDefs.size()) + if (!compileDefs.empty()) { this->Makefile->IssueMessage(cmake::FATAL_ERROR, "COMPILE_DEFINITIONS specified on a srcdir type TRY_COMPILE"); return -1; } - if (copyFile.size()) + if (!copyFile.empty()) { this->Makefile->IssueMessage(cmake::FATAL_ERROR, "COPY_FILE specified on a srcdir type TRY_COMPILE"); @@ -220,7 +220,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv) // do not allow recursive try Compiles if (this->BinaryDirectory == this->Makefile->GetHomeOutputDirectory()) { - cmOStringStream e; + std::ostringstream e; e << "Attempt at a recursive or nested TRY_COMPILE in directory\n" << " " << this->BinaryDirectory << "\n"; this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str()); @@ -233,7 +233,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv) { // remove any CMakeCache.txt files so we will have a clean test std::string ccFile = this->BinaryDirectory + "/CMakeCache.txt"; - cmSystemTools::RemoveFile(ccFile.c_str()); + cmSystemTools::RemoveFile(ccFile); // Choose sources. if(!useSources) @@ -256,7 +256,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv) } else { - cmOStringStream err; + std::ostringstream err; err << "Unknown extension \"" << ext << "\" for file\n" << " " << *si << "\n" << "try_compile() works only for enabled languages. " @@ -279,10 +279,10 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv) sourceDirectory = this->BinaryDirectory.c_str(); // now create a CMakeLists.txt file in that directory - FILE *fout = cmsys::SystemTools::Fopen(outFileName.c_str(),"w"); + FILE *fout = cmsys::SystemTools::Fopen(outFileName,"w"); if (!fout) { - cmOStringStream e; + std::ostringstream e; e << "Failed to open\n" << " " << outFileName << "\n" << cmSystemTools::GetLastSystemError(); @@ -331,11 +331,47 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv) fprintf(fout, "set(CMAKE_%s_FLAGS \"${CMAKE_%s_FLAGS}" " ${COMPILE_DEFINITIONS}\")\n", li->c_str(), li->c_str()); } + switch(this->Makefile->GetPolicyStatus(cmPolicies::CMP0056)) + { + case cmPolicies::WARN: + if(this->Makefile->PolicyOptionalWarningEnabled( + "CMAKE_POLICY_WARNING_CMP0056")) + { + std::ostringstream w; + w << (this->Makefile->GetCMakeInstance()->GetPolicies() + ->GetPolicyWarning(cmPolicies::CMP0056)) << "\n" + "For compatibility with older versions of CMake, try_compile " + "is not honoring caller link flags (e.g. CMAKE_EXE_LINKER_FLAGS) " + "in the test project." + ; + this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, w.str()); + } + case cmPolicies::OLD: + // OLD behavior is to do nothing. + break; + case cmPolicies::REQUIRED_IF_USED: + case cmPolicies::REQUIRED_ALWAYS: + this->Makefile->IssueMessage( + cmake::FATAL_ERROR, + this->Makefile->GetCMakeInstance()->GetPolicies() + ->GetRequiredPolicyError(cmPolicies::CMP0056) + ); + case cmPolicies::NEW: + // NEW behavior is to pass linker flags. + { + const char* exeLinkFlags = + this->Makefile->GetDefinition("CMAKE_EXE_LINKER_FLAGS"); + fprintf(fout, "set(CMAKE_EXE_LINKER_FLAGS %s)\n", + lg->EscapeForCMake(exeLinkFlags?exeLinkFlags:"").c_str()); + } break; + } + fprintf(fout, "set(CMAKE_EXE_LINKER_FLAGS \"${CMAKE_EXE_LINKER_FLAGS}" + " ${EXE_LINKER_FLAGS}\")\n"); fprintf(fout, "include_directories(${INCLUDE_DIRECTORIES})\n"); fprintf(fout, "set(CMAKE_SUPPRESS_REGENERATION 1)\n"); fprintf(fout, "link_directories(${LINK_DIRECTORIES})\n"); // handle any compile flags we need to pass on - if (compileDefs.size()) + if (!compileDefs.empty()) { fprintf(fout, "add_definitions( "); for (size_t i = 0; i < compileDefs.size(); ++i) @@ -501,7 +537,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv) "Result of TRY_COMPILE", cmCacheManager::INTERNAL); - if ( outputVariable.size() > 0 ) + if (!outputVariable.empty()) { this->Makefile->AddDefinition(outputVariable, output.c_str()); } @@ -511,13 +547,13 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv) std::string copyFileErrorMessage; this->FindOutputFile(targetName); - if ((res==0) && (copyFile.size())) + if ((res==0) && !copyFile.empty()) { if(this->OutputFile.empty() || - !cmSystemTools::CopyFileAlways(this->OutputFile.c_str(), - copyFile.c_str())) + !cmSystemTools::CopyFileAlways(this->OutputFile, + copyFile)) { - cmOStringStream emsg; + std::ostringstream emsg; emsg << "Cannot copy output executable\n" << " '" << this->OutputFile << "'\n" << "to destination specified by COPY_FILE:\n" @@ -580,10 +616,10 @@ void cmCoreTryCompile::CleanupFiles(const char* binDir) std::string fullPath = binDir; fullPath += "/"; fullPath += dir.GetFile(static_cast<unsigned long>(fileNum)); - if(cmSystemTools::FileIsDirectory(fullPath.c_str())) + if(cmSystemTools::FileIsDirectory(fullPath)) { this->CleanupFiles(fullPath.c_str()); - cmSystemTools::RemoveADirectory(fullPath.c_str()); + cmSystemTools::RemoveADirectory(fullPath); } else { @@ -599,7 +635,7 @@ void cmCoreTryCompile::CleanupFiles(const char* binDir) } if(retry.Count == 0) #else - if(!cmSystemTools::RemoveFile(fullPath.c_str())) + if(!cmSystemTools::RemoveFile(fullPath)) #endif { std::string m = "Remove failed on file: " + fullPath; @@ -649,13 +685,13 @@ void cmCoreTryCompile::FindOutputFile(const std::string& targetName) command += tmpOutputFile; if(cmSystemTools::FileExists(command.c_str())) { - tmpOutputFile = cmSystemTools::CollapseFullPath(command.c_str()); + tmpOutputFile = cmSystemTools::CollapseFullPath(command); this->OutputFile = tmpOutputFile; return; } } - cmOStringStream emsg; + std::ostringstream emsg; emsg << "Unable to find the executable at any of:\n"; for (unsigned int i = 0; i < searchDirs.size(); ++i) { |