907c09cd31
The cmGeneratorExpression is used here, but the header for it is not in the include heirarchy. This would be a compile error if the file were compiled as a standalone translation unit, but it is instead used in a mini-unity-build by inclusion in cmCommands.cxx. The header for cmGeneratorExpression happens to be included first, so the compilation works fine. IDEs do not know this however, and flag the use as an error.
107 lines
3.5 KiB
C++
107 lines
3.5 KiB
C++
/*============================================================================
|
|
CMake - Cross Platform Makefile Generator
|
|
Copyright 2013 Stephen Kelly <steveire@gmail.com>
|
|
|
|
Distributed under the OSI-approved BSD License (the "License");
|
|
see accompanying file Copyright.txt for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
See the License for more information.
|
|
============================================================================*/
|
|
#include "cmTargetIncludeDirectoriesCommand.h"
|
|
|
|
#include "cmGeneratorExpression.h"
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool cmTargetIncludeDirectoriesCommand
|
|
::InitialPass(std::vector<std::string> const& args, cmExecutionStatus &)
|
|
{
|
|
return this->HandleArguments(args, "INCLUDE_DIRECTORIES",
|
|
ArgumentFlags(PROCESS_BEFORE | PROCESS_SYSTEM));
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void cmTargetIncludeDirectoriesCommand
|
|
::HandleImportedTarget(const std::string &tgt)
|
|
{
|
|
cmOStringStream e;
|
|
e << "Cannot specify include directories for imported target \""
|
|
<< tgt << "\".";
|
|
this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str());
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void cmTargetIncludeDirectoriesCommand
|
|
::HandleMissingTarget(const std::string &name)
|
|
{
|
|
cmOStringStream e;
|
|
e << "Cannot specify include directories for target \"" << name << "\" "
|
|
"which is not built by this project.";
|
|
this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str());
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
std::string cmTargetIncludeDirectoriesCommand
|
|
::Join(const std::vector<std::string> &content)
|
|
{
|
|
std::string dirs;
|
|
std::string sep;
|
|
std::string prefix = this->Makefile->GetStartDirectory() + std::string("/");
|
|
for(std::vector<std::string>::const_iterator it = content.begin();
|
|
it != content.end(); ++it)
|
|
{
|
|
if (cmSystemTools::FileIsFullPath(it->c_str())
|
|
|| cmGeneratorExpression::Find(*it) == 0)
|
|
{
|
|
dirs += sep + *it;
|
|
}
|
|
else
|
|
{
|
|
dirs += sep + prefix + *it;
|
|
}
|
|
sep = ";";
|
|
}
|
|
return dirs;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void cmTargetIncludeDirectoriesCommand
|
|
::HandleDirectContent(cmTarget *tgt, const std::vector<std::string> &content,
|
|
bool prepend, bool system)
|
|
{
|
|
cmListFileBacktrace lfbt;
|
|
this->Makefile->GetBacktrace(lfbt);
|
|
cmValueWithOrigin entry(this->Join(content), lfbt);
|
|
tgt->InsertInclude(entry, prepend);
|
|
if (system)
|
|
{
|
|
tgt->AddSystemIncludeDirectories(content);
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void cmTargetIncludeDirectoriesCommand
|
|
::HandleInterfaceContent(cmTarget *tgt,
|
|
const std::vector<std::string> &content,
|
|
bool prepend, bool system)
|
|
{
|
|
cmTargetPropCommandBase::HandleInterfaceContent(tgt, content,
|
|
prepend, system);
|
|
|
|
if (system)
|
|
{
|
|
std::string joined;
|
|
std::string sep;
|
|
for(std::vector<std::string>::const_iterator it = content.begin();
|
|
it != content.end(); ++it)
|
|
{
|
|
joined += sep;
|
|
sep = ";";
|
|
joined += *it;
|
|
}
|
|
tgt->AppendProperty("INTERFACE_SYSTEM_INCLUDE_DIRECTORIES",
|
|
joined.c_str());
|
|
}
|
|
}
|