mirror of
https://github.com/reactos/CMake.git
synced 2024-11-24 03:59:58 +00:00
38afc82e76
Treat paths which are relative and which contain a generator expression which is not at the beginning as relative to the source directory. This matches the behavior of paths which are relative but contain no generator expression at all. Previously this would generate a relative path with the IMPORTED target on export(), which would be a reported as a non-existent path on import. If used directly in the buildsystem, it would be reported as a relative path, which is also an error. There is no need for a policy in this case.
105 lines
3.5 KiB
C++
105 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"
|
|
|
|
//----------------------------------------------------------------------------
|
|
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());
|
|
}
|
|
}
|