ENH: Split part of GetIncludeFlags method into separate GetIncludeDirectories method.
This commit is contained in:
parent
2bad658304
commit
16e86a3ea9
|
@ -801,11 +801,56 @@ const char* cmLocalGenerator::GetIncludeFlags(const char* lang)
|
||||||
{
|
{
|
||||||
return m_LanguageToIncludeFlags[lang].c_str();
|
return m_LanguageToIncludeFlags[lang].c_str();
|
||||||
}
|
}
|
||||||
// Output Include paths
|
|
||||||
cmOStringStream includeFlags;
|
cmOStringStream includeFlags;
|
||||||
std::vector<std::string>& includes = m_Makefile->GetIncludeDirectories();
|
std::vector<std::string> includes;
|
||||||
|
this->GetIncludeDirectories(includes);
|
||||||
std::vector<std::string>::iterator i;
|
std::vector<std::string>::iterator i;
|
||||||
std::map<cmStdString, cmStdString> implicitIncludes;
|
|
||||||
|
std::string flagVar = "CMAKE_INCLUDE_FLAG_";
|
||||||
|
flagVar += lang;
|
||||||
|
const char* includeFlag = m_Makefile->GetDefinition(flagVar.c_str());
|
||||||
|
flagVar = "CMAKE_INCLUDE_FLAG_SEP_";
|
||||||
|
flagVar += lang;
|
||||||
|
const char* sep = m_Makefile->GetDefinition(flagVar.c_str());
|
||||||
|
|
||||||
|
bool repeatFlag = true; // should the include flag be repeated like ie. -IA -IB
|
||||||
|
if(!sep)
|
||||||
|
{
|
||||||
|
sep = " ";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// if there is a separator then the flag is not repeated but is only given once
|
||||||
|
// i.e. -classpath a:b:c
|
||||||
|
repeatFlag = false;
|
||||||
|
}
|
||||||
|
bool flagUsed = false;
|
||||||
|
for(i = includes.begin(); i != includes.end(); ++i)
|
||||||
|
{
|
||||||
|
std::string include = *i;
|
||||||
|
if(!flagUsed || repeatFlag)
|
||||||
|
{
|
||||||
|
includeFlags << includeFlag;
|
||||||
|
flagUsed = true;
|
||||||
|
}
|
||||||
|
includeFlags << this->ConvertToOutputForExisting(i->c_str()) << sep;
|
||||||
|
}
|
||||||
|
std::string flags = includeFlags.str();
|
||||||
|
// remove trailing separators
|
||||||
|
if((sep[0] != ' ') && flags[flags.size()-1] == sep[0])
|
||||||
|
{
|
||||||
|
flags[flags.size()-1] = ' ';
|
||||||
|
}
|
||||||
|
flags += m_Makefile->GetDefineFlags();
|
||||||
|
m_LanguageToIncludeFlags[lang] = flags;
|
||||||
|
return m_LanguageToIncludeFlags[lang].c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void cmLocalGenerator::GetIncludeDirectories(std::vector<std::string>& dirs)
|
||||||
|
{
|
||||||
|
// Output Include paths
|
||||||
|
std::set<cmStdString> implicitIncludes;
|
||||||
|
|
||||||
// CMake versions below 2.0 would add the source tree to the -I path
|
// CMake versions below 2.0 would add the source tree to the -I path
|
||||||
// automatically. Preserve compatibility.
|
// automatically. Preserve compatibility.
|
||||||
|
@ -838,34 +883,16 @@ const char* cmLocalGenerator::GetIncludeFlags(const char* lang)
|
||||||
includeSourceDir = true;
|
includeSourceDir = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::string flagVar = "CMAKE_INCLUDE_FLAG_";
|
|
||||||
flagVar += lang;
|
|
||||||
const char* includeFlag = m_Makefile->GetDefinition(flagVar.c_str());
|
|
||||||
flagVar = "CMAKE_INCLUDE_FLAG_SEP_";
|
|
||||||
flagVar += lang;
|
|
||||||
const char* sep = m_Makefile->GetDefinition(flagVar.c_str());
|
|
||||||
|
|
||||||
bool repeatFlag = true; // should the include flag be repeated like ie. -IA -IB
|
|
||||||
if(!sep)
|
|
||||||
{
|
|
||||||
sep = " ";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// if there is a separator then the flag is not repeated but is only given once
|
|
||||||
// i.e. -classpath a:b:c
|
|
||||||
repeatFlag = false;
|
|
||||||
}
|
|
||||||
bool flagUsed = false;
|
|
||||||
if(includeSourceDir)
|
if(includeSourceDir)
|
||||||
{
|
{
|
||||||
includeFlags << includeFlag
|
dirs.push_back(m_Makefile->GetStartDirectory());
|
||||||
<< this->ConvertToOutputForExisting(m_Makefile->GetStartDirectory())
|
|
||||||
<< sep;
|
|
||||||
flagUsed = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
implicitIncludes["/usr/include"] = "/usr/include";
|
// Do not explicitly add the standard include path "/usr/include".
|
||||||
|
// This can cause problems with certain standard library
|
||||||
|
// implementations because the wrong headers may be found first.
|
||||||
|
implicitIncludes.insert("/usr/include");
|
||||||
if(m_Makefile->GetDefinition("CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES"))
|
if(m_Makefile->GetDefinition("CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES"))
|
||||||
{
|
{
|
||||||
std::string arg = m_Makefile->GetDefinition("CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES");
|
std::string arg = m_Makefile->GetDefinition("CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES");
|
||||||
|
@ -873,39 +900,22 @@ const char* cmLocalGenerator::GetIncludeFlags(const char* lang)
|
||||||
cmSystemTools::ExpandListArgument(arg, implicitIncludeVec);
|
cmSystemTools::ExpandListArgument(arg, implicitIncludeVec);
|
||||||
for(unsigned int k =0; k < implicitIncludeVec.size(); k++)
|
for(unsigned int k =0; k < implicitIncludeVec.size(); k++)
|
||||||
{
|
{
|
||||||
implicitIncludes[implicitIncludeVec[k]] = implicitIncludeVec[k];
|
implicitIncludes.insert(implicitIncludeVec[k]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(i = includes.begin(); i != includes.end(); ++i)
|
// Construct the ordered list.
|
||||||
|
std::vector<std::string>& includes = m_Makefile->GetIncludeDirectories();
|
||||||
|
for(std::vector<std::string>::iterator i = includes.begin();
|
||||||
|
i != includes.end(); ++i)
|
||||||
{
|
{
|
||||||
std::string include = *i;
|
if(implicitIncludes.find(*i) == implicitIncludes.end())
|
||||||
// Don't output a -I for the standard include path "/usr/include".
|
|
||||||
// This can cause problems with certain standard library
|
|
||||||
// implementations because the wrong headers may be found first.
|
|
||||||
if(implicitIncludes.find(include) == implicitIncludes.end())
|
|
||||||
{
|
{
|
||||||
if(!flagUsed || repeatFlag)
|
dirs.push_back(*i);
|
||||||
{
|
|
||||||
includeFlags << includeFlag;
|
|
||||||
flagUsed = true;
|
|
||||||
}
|
|
||||||
includeFlags << this->ConvertToOutputForExisting(i->c_str()) << sep;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::string flags = includeFlags.str();
|
|
||||||
// remove trailing separators
|
|
||||||
if((sep[0] != ' ') && flags[flags.size()-1] == sep[0])
|
|
||||||
{
|
|
||||||
flags[flags.size()-1] = ' ';
|
|
||||||
}
|
|
||||||
flags += m_Makefile->GetDefineFlags();
|
|
||||||
m_LanguageToIncludeFlags[lang] = flags;
|
|
||||||
return m_LanguageToIncludeFlags[lang].c_str();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
|
void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
|
||||||
std::string& flags,
|
std::string& flags,
|
||||||
std::string& linkFlags,
|
std::string& linkFlags,
|
||||||
|
|
|
@ -105,6 +105,10 @@ protected:
|
||||||
|
|
||||||
///! Get the include flags for the current makefile and language
|
///! Get the include flags for the current makefile and language
|
||||||
const char* GetIncludeFlags(const char* lang);
|
const char* GetIncludeFlags(const char* lang);
|
||||||
|
|
||||||
|
/** Get the include flags for the current makefile and language. */
|
||||||
|
void GetIncludeDirectories(std::vector<std::string>& dirs);
|
||||||
|
|
||||||
///! for existing files convert to output path and short path if spaces
|
///! for existing files convert to output path and short path if spaces
|
||||||
std::string ConvertToOutputForExisting(const char* p);
|
std::string ConvertToOutputForExisting(const char* p);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue