Process generator expressions for 'system' include directories.
Since commit 08cb4fa4
(Process generator expressions in the
INCLUDE_DIRECTORIES property., 2012-09-18), it is possible to use
generator expressions with the include_directories command.
As that command can also have a SYSTEM argument, ensure that the
result of using that argument with generator expressions gives a
sane result.
This commit is contained in:
parent
2ce7231f56
commit
1714c27a74
|
@ -1212,7 +1212,8 @@ cmLocalGenerator::ConvertToIncludeReference(std::string const& path)
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
std::string cmLocalGenerator::GetIncludeFlags(
|
std::string cmLocalGenerator::GetIncludeFlags(
|
||||||
const std::vector<std::string> &includes,
|
const std::vector<std::string> &includes,
|
||||||
const char* lang, bool forResponseFile)
|
const char* lang, bool forResponseFile,
|
||||||
|
const char *config)
|
||||||
{
|
{
|
||||||
if(!lang)
|
if(!lang)
|
||||||
{
|
{
|
||||||
|
@ -1285,7 +1286,7 @@ std::string cmLocalGenerator::GetIncludeFlags(
|
||||||
if(!flagUsed || repeatFlag)
|
if(!flagUsed || repeatFlag)
|
||||||
{
|
{
|
||||||
if(sysIncludeFlag &&
|
if(sysIncludeFlag &&
|
||||||
this->Makefile->IsSystemIncludeDirectory(i->c_str()))
|
this->Makefile->IsSystemIncludeDirectory(i->c_str(), config))
|
||||||
{
|
{
|
||||||
includeFlags << sysIncludeFlag;
|
includeFlags << sysIncludeFlag;
|
||||||
}
|
}
|
||||||
|
|
|
@ -149,7 +149,8 @@ public:
|
||||||
virtual void AppendFlags(std::string& flags, const char* newFlags);
|
virtual void AppendFlags(std::string& flags, const char* newFlags);
|
||||||
///! Get the include flags for the current makefile and language
|
///! Get the include flags for the current makefile and language
|
||||||
std::string GetIncludeFlags(const std::vector<std::string> &includes,
|
std::string GetIncludeFlags(const std::vector<std::string> &includes,
|
||||||
const char* lang, bool forResponseFile = false);
|
const char* lang, bool forResponseFile = false,
|
||||||
|
const char *config = 0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Encode a list of preprocessor definitions for the compiler
|
* Encode a list of preprocessor definitions for the compiler
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include "cmListFileCache.h"
|
#include "cmListFileCache.h"
|
||||||
#include "cmCommandArgumentParserHelper.h"
|
#include "cmCommandArgumentParserHelper.h"
|
||||||
#include "cmDocumentCompileDefinitions.h"
|
#include "cmDocumentCompileDefinitions.h"
|
||||||
|
#include "cmGeneratorExpression.h"
|
||||||
#include "cmTest.h"
|
#include "cmTest.h"
|
||||||
#ifdef CMAKE_BUILD_WITH_CMAKE
|
#ifdef CMAKE_BUILD_WITH_CMAKE
|
||||||
# include "cmVariableWatch.h"
|
# include "cmVariableWatch.h"
|
||||||
|
@ -1665,10 +1666,24 @@ cmMakefile::AddSystemIncludeDirectories(const std::set<cmStdString> &incs)
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
bool cmMakefile::IsSystemIncludeDirectory(const char* dir)
|
bool cmMakefile::IsSystemIncludeDirectory(const char* dir, const char *config)
|
||||||
{
|
{
|
||||||
return (this->SystemIncludeDirectories.find(dir) !=
|
for (std::set<cmStdString>::const_iterator
|
||||||
this->SystemIncludeDirectories.end());
|
it = this->SystemIncludeDirectories.begin();
|
||||||
|
it != this->SystemIncludeDirectories.end(); ++it)
|
||||||
|
{
|
||||||
|
cmListFileBacktrace lfbt;
|
||||||
|
cmGeneratorExpression ge(lfbt);
|
||||||
|
|
||||||
|
std::vector<std::string> incs;
|
||||||
|
cmSystemTools::ExpandListArgument(ge.Parse(*it)
|
||||||
|
->Evaluate(this, config, false), incs);
|
||||||
|
if (std::find(incs.begin(), incs.end(), dir) != incs.end())
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmMakefile::AddDefinition(const char* name, const char* value)
|
void cmMakefile::AddDefinition(const char* name, const char* value)
|
||||||
|
|
|
@ -547,7 +547,7 @@ public:
|
||||||
* Mark include directories as system directories.
|
* Mark include directories as system directories.
|
||||||
*/
|
*/
|
||||||
void AddSystemIncludeDirectories(const std::set<cmStdString> &incs);
|
void AddSystemIncludeDirectories(const std::set<cmStdString> &incs);
|
||||||
bool IsSystemIncludeDirectory(const char* dir);
|
bool IsSystemIncludeDirectory(const char* dir, const char *config);
|
||||||
|
|
||||||
/** Expand out any arguements in the vector that have ; separated
|
/** Expand out any arguements in the vector that have ; separated
|
||||||
* strings into multiple arguements. A new vector is created
|
* strings into multiple arguements. A new vector is created
|
||||||
|
|
Loading…
Reference in New Issue