diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2005-12-27 20:33:47 (GMT) |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2005-12-27 20:33:47 (GMT) |
commit | 552842d11f845ad53e4f34be549aa4007737564b (patch) | |
tree | 6724d78898ba2ec28b587394df9e522919d0e8fa | |
parent | 82bb6fae0d127b2ffcaae5eaa8a5365093cfac5c (diff) | |
download | CMake-552842d11f845ad53e4f34be549aa4007737564b.zip CMake-552842d11f845ad53e4f34be549aa4007737564b.tar.gz CMake-552842d11f845ad53e4f34be549aa4007737564b.tar.bz2 |
ENH: make sure -F is not duplicated
-rw-r--r-- | Source/cmFindFileCommand.cxx | 13 | ||||
-rw-r--r-- | Source/cmFindFileCommand.h | 3 | ||||
-rw-r--r-- | Source/cmLocalUnixMakefileGenerator3.cxx | 28 |
3 files changed, 34 insertions, 10 deletions
diff --git a/Source/cmFindFileCommand.cxx b/Source/cmFindFileCommand.cxx index 82c0ff4..b1972f2 100644 --- a/Source/cmFindFileCommand.cxx +++ b/Source/cmFindFileCommand.cxx @@ -70,6 +70,8 @@ bool cmFindFileCommand::InitialPass(std::vector<std::string> const& argsIn) cmSystemTools::GlobDirs(args[j].c_str(), path); } + cmSystemTools::GetPath(path, "CMAKE_LIBRARY_PATH"); + // add the standard path cmSystemTools::GetPath(path); for(unsigned int k=0; k < path.size(); k++) @@ -88,7 +90,7 @@ bool cmFindFileCommand::InitialPass(std::vector<std::string> const& argsIn) } } #if defined (__APPLE__) - cmStdString fpath = this->FindHeaderInFrameworks(args[0].c_str(), args[1].c_str()); + cmStdString fpath = this->FindHeaderInFrameworks(path, args[0].c_str(), args[1].c_str()); if(fpath.size()) { m_Makefile->AddCacheDefinition(args[0].c_str(), @@ -106,8 +108,10 @@ bool cmFindFileCommand::InitialPass(std::vector<std::string> const& argsIn) return true; } -cmStdString cmFindFileCommand::FindHeaderInFrameworks(const char* defineVar, - const char* file) +cmStdString cmFindFileCommand::FindHeaderInFrameworks( + std::vector<std::string> path, + const char* defineVar, + const char* file) { #ifndef __APPLE__ return cmStdString(""); @@ -130,12 +134,11 @@ cmStdString cmFindFileCommand::FindHeaderInFrameworks(const char* defineVar, frameWorkName = ""; } } - std::vector<cmStdString> path; path.push_back("~/Library/Frameworks"); path.push_back("/Library/Frameworks"); path.push_back("/System/Library/Frameworks"); path.push_back("/Network/Library/Frameworks"); - for( std::vector<cmStdString>::iterator i = path.begin(); + for( std::vector<std::string>::iterator i = path.begin(); i != path.end(); ++i) { if(frameWorkName.size()) diff --git a/Source/cmFindFileCommand.h b/Source/cmFindFileCommand.h index 1e44be5..e5fb661 100644 --- a/Source/cmFindFileCommand.h +++ b/Source/cmFindFileCommand.h @@ -79,7 +79,8 @@ public: "different extensions on different platforms, FIND_PROGRAM " "should be used instead of FIND_FILE when looking for them."; } - cmStdString FindHeaderInFrameworks(const char* var, const char* file); + cmStdString FindHeaderInFrameworks( std::vector<std::string> path, + const char* var, const char* file); cmTypeMacro(cmFindFileCommand, cmCommand); }; diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx index 1c24934..922c94c 100644 --- a/Source/cmLocalUnixMakefileGenerator3.cxx +++ b/Source/cmLocalUnixMakefileGenerator3.cxx @@ -513,14 +513,34 @@ cmLocalUnixMakefileGenerator3 #ifndef __APPLE__ return std::string(); #else + std::set<cmStdString> emitted; + std::vector<std::string> includes; + this->GetIncludeDirectories(includes); + std::vector<std::string>::iterator i; + // check all include directories for frameworks as this + // will already have added a -F for the framework + for(i = includes.begin(); i != includes.end(); ++i) + { + if(cmSystemTools::IsPathToFramework(i->c_str())) + { + std::string frameworkDir = *i; + frameworkDir += "/../"; + frameworkDir = cmSystemTools::CollapseFullPath(frameworkDir.c_str()); + emitted.insert(frameworkDir); + } + } + std::string flags; std::vector<std::string>& frameworks = target.GetFrameworks(); - for(std::vector<std::string>::iterator i = frameworks.begin(); + for(i = frameworks.begin(); i != frameworks.end(); ++i) { - flags += "-F"; - flags += this->ConvertToOutputForExisting(i->c_str()); - flags += " "; + if(emitted.insert(*i).second) + { + flags += "-F"; + flags += this->ConvertToOutputForExisting(i->c_str()); + flags += " "; + } } return flags; #endif |