diff --git a/Source/cmLinkDirectoriesCommand.cxx b/Source/cmLinkDirectoriesCommand.cxx index f486bf7d1..b6c0072db 100644 --- a/Source/cmLinkDirectoriesCommand.cxx +++ b/Source/cmLinkDirectoriesCommand.cxx @@ -65,5 +65,5 @@ void cmLinkDirectoriesCommand::AddLinkDir(std::string const& dir) unixPath = tmp; } } - this->Makefile->AddLinkDirectory(unixPath); + this->Makefile->AppendProperty("LINK_DIRECTORIES", unixPath.c_str()); } diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 1dc0bb723..3c8a41d29 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -1520,31 +1520,6 @@ void cmMakefile::AddLinkLibrary(const std::string& lib) this->AddLinkLibrary(lib,cmTarget::GENERAL); } -void cmMakefile::AddLinkDirectory(const std::string& dir) -{ - // Don't add a link directory that is already present. Yes, this - // linear search results in n^2 behavior, but n won't be getting - // much bigger than 20. We cannot use a set because of order - // dependency of the link search path. - - if(dir.empty()) - { - return; - } - std::string newdir = dir; - // remove trailing slashes - if(*dir.rbegin() == '/') - { - newdir = dir.substr(0, dir.size()-1); - } - if(std::find(this->LinkDirectories.begin(), - this->LinkDirectories.end(), newdir) - == this->LinkDirectories.end()) - { - this->LinkDirectories.push_back(dir); - } -} - void cmMakefile::InitializeFromParent(cmMakefile* parent) { // Initialize definitions with the closure of the parent scope. @@ -1607,7 +1582,8 @@ void cmMakefile::InitializeFromParent(cmMakefile* parent) this->LinkLibraries = parent->LinkLibraries; // link directories - this->LinkDirectories = parent->LinkDirectories; + this->SetProperty("LINK_DIRECTORIES", + parent->GetProperty("LINK_DIRECTORIES")); // the initial project name this->ProjectName = parent->ProjectName; @@ -2145,11 +2121,26 @@ void cmMakefile::AddGlobalLinkInformation(const std::string& name, return; default:; } - std::vector::iterator j; - for(j = this->LinkDirectories.begin(); - j != this->LinkDirectories.end(); ++j) + if (const char* linkDirsProp = this->GetProperty("LINK_DIRECTORIES")) { - target.AddLinkDirectory(*j); + std::vector linkDirs; + cmSystemTools::ExpandListArgument(linkDirsProp, linkDirs); + + for(std::vector::iterator j = linkDirs.begin(); + j != linkDirs.end(); ++j) + { + std::string newdir = *j; + // remove trailing slashes + if(*j->rbegin() == '/') + { + newdir = j->substr(0, j->size()-1); + } + if(std::find(this->LinkDirectories.begin(), + this->LinkDirectories.end(), newdir) + == this->LinkDirectories.end()) + {target.AddLinkDirectory(*j); + } + } } target.MergeLinkLibraries( *this, name, this->LinkLibraries ); } @@ -2424,19 +2415,19 @@ void cmMakefile::ExpandVariablesCMP0019() } } - for(std::vector::iterator d = this->LinkDirectories.begin(); - d != this->LinkDirectories.end(); ++d) + if (const char* linkDirsProp = this->GetProperty("LINK_DIRECTORIES")) { - if(mightExpandVariablesCMP0019(d->c_str())) + if(mightExpandVariablesCMP0019(linkDirsProp)) { - std::string orig = *d; - this->ExpandVariablesInString(*d, true, true); - if(pol == cmPolicies::WARN && *d != orig) + std::string d = linkDirsProp; + std::string orig = linkDirsProp; + this->ExpandVariablesInString(d, true, true); + if(pol == cmPolicies::WARN && d != orig) { - w << "Evaluated link directory\n" + w << "Evaluated link directories\n" << " " << orig << "\n" << "as\n" - << " " << *d << "\n"; + << " " << d << "\n"; } } } @@ -4147,16 +4138,6 @@ int cmMakefile::ConfigureFile(const char* infile, const char* outfile, void cmMakefile::SetProperty(const std::string& prop, const char* value) { - if ( prop == "LINK_DIRECTORIES" ) - { - std::vector varArgsExpanded; - if(value) - { - cmSystemTools::ExpandListArgument(value, varArgsExpanded); - } - this->SetLinkDirectories(varArgsExpanded); - return; - } if (prop == "INCLUDE_DIRECTORIES") { this->IncludeDirectoriesEntries.clear(); @@ -4237,17 +4218,6 @@ void cmMakefile::AppendProperty(const std::string& prop, cmValueWithOrigin(value, lfbt)); return; } - if ( prop == "LINK_DIRECTORIES" ) - { - std::vector varArgsExpanded; - cmSystemTools::ExpandListArgument(value, varArgsExpanded); - for(std::vector::const_iterator vi = varArgsExpanded.begin(); - vi != varArgsExpanded.end(); ++vi) - { - this->AddLinkDirectory(*vi); - } - return; - } this->Properties.AppendProperty(prop, value, asString); } @@ -4300,11 +4270,6 @@ const char *cmMakefile::GetProperty(const std::string& prop, this->GetListOfMacros(output); return output.c_str(); } - else if (prop == "LINK_DIRECTORIES") - { - output = cmJoin(this->LinkDirectories, ";"); - return output.c_str(); - } else if (prop == "INCLUDE_DIRECTORIES") { std::string sep; diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index 154e09938..98d199a2e 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -228,16 +228,6 @@ public: cmTarget::LinkLibraryType type); void AddLinkDirectoryForTarget(const std::string& tgt, const std::string& d); - /** - * Add a link directory to the build. - */ - void AddLinkDirectory(const std::string&); - - void SetLinkDirectories(const std::vector& vec) - { - this->LinkDirectories = vec; - } - /** * Add a subdirectory to the build. */ diff --git a/Tests/RunCMake/CMP0019/CMP0019-WARN-stderr.txt b/Tests/RunCMake/CMP0019/CMP0019-WARN-stderr.txt index 03faef90e..1e4b47d0c 100644 --- a/Tests/RunCMake/CMP0019/CMP0019-WARN-stderr.txt +++ b/Tests/RunCMake/CMP0019/CMP0019-WARN-stderr.txt @@ -21,13 +21,13 @@ CMake Warning \(dev\) in CMakeLists.txt: /usr/include/VAL_INCLUDE;/usr/include/normal - Evaluated link directory + Evaluated link directories - /usr/lib/\${VAR_LINK_DIRS} + /usr/lib/\${VAR_LINK_DIRS};/usr/lib/normal as - /usr/lib/VAL_LINK_DIRS + /usr/lib/VAL_LINK_DIRS;/usr/lib/normal Evaluated link library