ENH: try to reduce the number of CMP0003 warnings that people see. Only report them for unique sets of libraries with no full path. Also add a message explaining the course of action that should be taken
This commit is contained in:
parent
caa6de5b89
commit
ba7f0ab335
|
@ -1338,9 +1338,18 @@ bool cmComputeLinkInformation::FinishLinkerSearchDirectories()
|
||||||
cmOStringStream w;
|
cmOStringStream w;
|
||||||
w << (this->Makefile->GetPolicies()
|
w << (this->Makefile->GetPolicies()
|
||||||
->GetPolicyWarning(cmPolicies::CMP0003)) << "\n";
|
->GetPolicyWarning(cmPolicies::CMP0003)) << "\n";
|
||||||
this->PrintLinkPolicyDiagnosis(w);
|
std::string libs = "CMP0003-WARNING-FOR-";
|
||||||
this->CMakeInstance->IssueMessage(cmake::AUTHOR_WARNING, w.str(),
|
this->PrintLinkPolicyDiagnosis(w, libs);
|
||||||
this->Target->GetBacktrace());
|
const char* def = this->CMakeInstance->GetCacheDefinition(libs.c_str());
|
||||||
|
if(!def)
|
||||||
|
{
|
||||||
|
this->CMakeInstance->IssueMessage(cmake::AUTHOR_WARNING, w.str(),
|
||||||
|
this->Target->GetBacktrace());
|
||||||
|
this->CMakeInstance->AddCacheEntry(libs.c_str(),
|
||||||
|
"TRUE",
|
||||||
|
"",
|
||||||
|
cmCacheManager::INTERNAL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
case cmPolicies::OLD:
|
case cmPolicies::OLD:
|
||||||
// OLD behavior is to add the paths containing libraries with
|
// OLD behavior is to add the paths containing libraries with
|
||||||
|
@ -1355,7 +1364,8 @@ bool cmComputeLinkInformation::FinishLinkerSearchDirectories()
|
||||||
cmOStringStream e;
|
cmOStringStream e;
|
||||||
e << (this->Makefile->GetPolicies()->
|
e << (this->Makefile->GetPolicies()->
|
||||||
GetRequiredPolicyError(cmPolicies::CMP0003)) << "\n";
|
GetRequiredPolicyError(cmPolicies::CMP0003)) << "\n";
|
||||||
this->PrintLinkPolicyDiagnosis(e);
|
std::string libs;
|
||||||
|
this->PrintLinkPolicyDiagnosis(e, libs);
|
||||||
this->CMakeInstance->IssueMessage(cmake::FATAL_ERROR, e.str(),
|
this->CMakeInstance->IssueMessage(cmake::FATAL_ERROR, e.str(),
|
||||||
this->Target->GetBacktrace());
|
this->Target->GetBacktrace());
|
||||||
return false;
|
return false;
|
||||||
|
@ -1373,8 +1383,13 @@ bool cmComputeLinkInformation::FinishLinkerSearchDirectories()
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void cmComputeLinkInformation::PrintLinkPolicyDiagnosis(std::ostream& os)
|
void cmComputeLinkInformation::PrintLinkPolicyDiagnosis(std::ostream& os,
|
||||||
|
std::string& libs)
|
||||||
{
|
{
|
||||||
|
os << "The best way to remove this warning is to set policy CMP0003 "
|
||||||
|
<< "to NEW. Then, try to build the project, if you get linker errors, "
|
||||||
|
<< "either use the full paths to the libraries that can not be "
|
||||||
|
<< "found, or use link_directories to add the missing directories.\n";
|
||||||
// Name the target.
|
// Name the target.
|
||||||
os << "Target \"" << this->Target->GetName() << "\" ";
|
os << "Target \"" << this->Target->GetName() << "\" ";
|
||||||
|
|
||||||
|
@ -1416,7 +1431,7 @@ void cmComputeLinkInformation::PrintLinkPolicyDiagnosis(std::ostream& os)
|
||||||
}
|
}
|
||||||
line += sep;
|
line += sep;
|
||||||
line += *i;
|
line += *i;
|
||||||
|
libs += *i;
|
||||||
// Convert to the other separator.
|
// Convert to the other separator.
|
||||||
sep = ", ";
|
sep = ", ";
|
||||||
}
|
}
|
||||||
|
@ -1427,12 +1442,13 @@ void cmComputeLinkInformation::PrintLinkPolicyDiagnosis(std::ostream& os)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tell the user what is wrong.
|
// Tell the user what is wrong.
|
||||||
os << "The linker will search for libraries in the second list. "
|
os << "This maybe OK as well. However, the linker will search "
|
||||||
|
<< "for libraries in the second list. "
|
||||||
<< "Finding them may depend on linker search paths earlier CMake "
|
<< "Finding them may depend on linker search paths earlier CMake "
|
||||||
<< "versions added as an implementation detail for linking to the "
|
<< "versions added as an implementation detail for linking to the "
|
||||||
<< "libraries in the first list. "
|
<< "libraries in the first list. "
|
||||||
<< "For compatibility CMake is including the extra linker search "
|
<< "For compatibility CMake is including the extra linker search "
|
||||||
<< "paths, but policy CMP0003 should be set by the project.";
|
<< "paths, but policy CMP0003 should be set by the project. ";
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
|
@ -154,7 +154,7 @@ private:
|
||||||
// Linker search path computation.
|
// Linker search path computation.
|
||||||
cmOrderDirectories* OrderLinkerSearchPath;
|
cmOrderDirectories* OrderLinkerSearchPath;
|
||||||
bool FinishLinkerSearchDirectories();
|
bool FinishLinkerSearchDirectories();
|
||||||
void PrintLinkPolicyDiagnosis(std::ostream&);
|
void PrintLinkPolicyDiagnosis(std::ostream&, std::string& libs);
|
||||||
std::set<cmStdString> ImplicitLinkDirs;
|
std::set<cmStdString> ImplicitLinkDirs;
|
||||||
|
|
||||||
// Linker search path compatibility mode.
|
// Linker search path compatibility mode.
|
||||||
|
|
Loading…
Reference in New Issue