Commit 552842d1 authored by Bill Hoffman's avatar Bill Hoffman

ENH: make sure -F is not duplicated

parent 82bb6fae
......@@ -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())
......
......@@ -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);
};
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment