| 
					
				 | 
			
			
				@@ -814,7 +814,7 @@ bool cmMakefile::NeedBackwardsCompatibility(unsigned int major, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void cmMakefile::FinalPass() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // do all the variable expansions here 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  this->ExpandVariables(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  this->ExpandVariablesCMP0019(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // give all the commands a chance to do something 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // after the file has been parsed before generation 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2122,21 +2122,33 @@ void cmMakefile::AddExtraDirectory(const char* 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"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (includeDirs) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if(mightExpandVariablesCMP0019(includeDirs)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     std::string dirs = includeDirs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     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()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2146,10 +2158,17 @@ void cmMakefile::ExpandVariables() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     cmTarget &t = l->second; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     includeDirs = t.GetProperty("INCLUDE_DIRECTORIES"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (includeDirs) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(mightExpandVariablesCMP0019(includeDirs)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       std::string dirs = includeDirs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       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()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2157,13 +2176,45 @@ void cmMakefile::ExpandVariables() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for(std::vector<std::string>::iterator d = this->LinkDirectories.begin(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       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 = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this->LinkLibraries.begin(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       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()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |