|
@@ -814,7 +814,7 @@ bool cmMakefile::NeedBackwardsCompatibility(unsigned int major,
|
|
|
void cmMakefile::FinalPass()
|
|
void cmMakefile::FinalPass()
|
|
|
{
|
|
{
|
|
|
// do all the variable expansions here
|
|
// do all the variable expansions here
|
|
|
- this->ExpandVariables();
|
|
|
|
|
|
|
+ this->ExpandVariablesCMP0019();
|
|
|
|
|
|
|
|
// give all the commands a chance to do something
|
|
// give all the commands a chance to do something
|
|
|
// after the file has been parsed before generation
|
|
// after the file has been parsed before generation
|
|
@@ -2122,21 +2122,33 @@ void cmMakefile::AddExtraDirectory(const char* dir)
|
|
|
this->AuxSourceDirectories.push_back(dir);
|
|
this->AuxSourceDirectories.push_back(dir);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+static bool mightExpandVariablesCMP0019(const char* s)
|
|
|
|
|
+{
|
|
|
|
|
+ return s && *s && strstr(s,"${") && strchr(s,'}');
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
-// expand CMAKE_BINARY_DIR and CMAKE_SOURCE_DIR in the
|
|
|
|
|
-// include and library directories.
|
|
|
|
|
-
|
|
|
|
|
-void cmMakefile::ExpandVariables()
|
|
|
|
|
|
|
+void cmMakefile::ExpandVariablesCMP0019()
|
|
|
{
|
|
{
|
|
|
- // Now expand variables in the include and link strings
|
|
|
|
|
|
|
+ // Drop this ancient compatibility behavior with a policy.
|
|
|
|
|
+ cmPolicies::PolicyStatus pol = this->GetPolicyStatus(cmPolicies::CMP0019);
|
|
|
|
|
+ if(pol != cmPolicies::OLD && pol != cmPolicies::WARN)
|
|
|
|
|
+ {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ cmOStringStream w;
|
|
|
|
|
|
|
|
- // May not be necessary anymore... But may need a policy for strict
|
|
|
|
|
- // backwards compatibility
|
|
|
|
|
const char *includeDirs = this->GetProperty("INCLUDE_DIRECTORIES");
|
|
const char *includeDirs = this->GetProperty("INCLUDE_DIRECTORIES");
|
|
|
- if (includeDirs)
|
|
|
|
|
|
|
+ if(mightExpandVariablesCMP0019(includeDirs))
|
|
|
{
|
|
{
|
|
|
std::string dirs = includeDirs;
|
|
std::string dirs = includeDirs;
|
|
|
this->ExpandVariablesInString(dirs, true, true);
|
|
this->ExpandVariablesInString(dirs, true, true);
|
|
|
|
|
+ if(pol == cmPolicies::WARN && dirs != includeDirs)
|
|
|
|
|
+ {
|
|
|
|
|
+ w << "Evaluated directory INCLUDE_DIRECTORIES\n"
|
|
|
|
|
+ << " " << includeDirs << "\n"
|
|
|
|
|
+ << "as\n"
|
|
|
|
|
+ << " " << dirs << "\n";
|
|
|
|
|
+ }
|
|
|
this->SetProperty("INCLUDE_DIRECTORIES", dirs.c_str());
|
|
this->SetProperty("INCLUDE_DIRECTORIES", dirs.c_str());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -2146,10 +2158,17 @@ void cmMakefile::ExpandVariables()
|
|
|
{
|
|
{
|
|
|
cmTarget &t = l->second;
|
|
cmTarget &t = l->second;
|
|
|
includeDirs = t.GetProperty("INCLUDE_DIRECTORIES");
|
|
includeDirs = t.GetProperty("INCLUDE_DIRECTORIES");
|
|
|
- if (includeDirs)
|
|
|
|
|
|
|
+ if(mightExpandVariablesCMP0019(includeDirs))
|
|
|
{
|
|
{
|
|
|
std::string dirs = includeDirs;
|
|
std::string dirs = includeDirs;
|
|
|
this->ExpandVariablesInString(dirs, true, true);
|
|
this->ExpandVariablesInString(dirs, true, true);
|
|
|
|
|
+ if(pol == cmPolicies::WARN && dirs != includeDirs)
|
|
|
|
|
+ {
|
|
|
|
|
+ w << "Evaluated target " << t.GetName() << " INCLUDE_DIRECTORIES\n"
|
|
|
|
|
+ << " " << includeDirs << "\n"
|
|
|
|
|
+ << "as\n"
|
|
|
|
|
+ << " " << dirs << "\n";
|
|
|
|
|
+ }
|
|
|
t.SetProperty("INCLUDE_DIRECTORIES", dirs.c_str());
|
|
t.SetProperty("INCLUDE_DIRECTORIES", dirs.c_str());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -2157,13 +2176,45 @@ void cmMakefile::ExpandVariables()
|
|
|
for(std::vector<std::string>::iterator d = this->LinkDirectories.begin();
|
|
for(std::vector<std::string>::iterator d = this->LinkDirectories.begin();
|
|
|
d != this->LinkDirectories.end(); ++d)
|
|
d != this->LinkDirectories.end(); ++d)
|
|
|
{
|
|
{
|
|
|
- this->ExpandVariablesInString(*d, true, true);
|
|
|
|
|
|
|
+ if(mightExpandVariablesCMP0019(d->c_str()))
|
|
|
|
|
+ {
|
|
|
|
|
+ std::string orig = *d;
|
|
|
|
|
+ this->ExpandVariablesInString(*d, true, true);
|
|
|
|
|
+ if(pol == cmPolicies::WARN && *d != orig)
|
|
|
|
|
+ {
|
|
|
|
|
+ w << "Evaluated link directory\n"
|
|
|
|
|
+ << " " << orig << "\n"
|
|
|
|
|
+ << "as\n"
|
|
|
|
|
+ << " " << *d << "\n";
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
for(cmTarget::LinkLibraryVectorType::iterator l =
|
|
for(cmTarget::LinkLibraryVectorType::iterator l =
|
|
|
this->LinkLibraries.begin();
|
|
this->LinkLibraries.begin();
|
|
|
l != this->LinkLibraries.end(); ++l)
|
|
l != this->LinkLibraries.end(); ++l)
|
|
|
{
|
|
{
|
|
|
- this->ExpandVariablesInString(l->first, true, true);
|
|
|
|
|
|
|
+ if(mightExpandVariablesCMP0019(l->first.c_str()))
|
|
|
|
|
+ {
|
|
|
|
|
+ std::string orig = l->first;
|
|
|
|
|
+ this->ExpandVariablesInString(l->first, true, true);
|
|
|
|
|
+ if(pol == cmPolicies::WARN && l->first != orig)
|
|
|
|
|
+ {
|
|
|
|
|
+ w << "Evaluated link library\n"
|
|
|
|
|
+ << " " << orig << "\n"
|
|
|
|
|
+ << "as\n"
|
|
|
|
|
+ << " " << l->first << "\n";
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(!w.str().empty())
|
|
|
|
|
+ {
|
|
|
|
|
+ cmOStringStream m;
|
|
|
|
|
+ m << this->GetPolicies()->GetPolicyWarning(cmPolicies::CMP0019)
|
|
|
|
|
+ << "\n"
|
|
|
|
|
+ << "The following variable evaluations were encountered:\n"
|
|
|
|
|
+ << w.str();
|
|
|
|
|
+ this->IssueMessage(cmake::AUTHOR_WARNING, m.str());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|