mirror of
https://github.com/reactos/CMake.git
synced 2024-12-13 14:27:23 +00:00
96afb12087
This converts the CMake license to a pure 3-clause OSI-approved BSD License. We drop the previous license clause requiring modified versions to be plainly marked. We also update the CMake copyright to cover the full development time range.
121 lines
3.2 KiB
C++
121 lines
3.2 KiB
C++
/*============================================================================
|
|
CMake - Cross Platform Makefile Generator
|
|
Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
|
|
|
|
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 "cmIncludeDirectoryCommand.h"
|
|
|
|
// cmIncludeDirectoryCommand
|
|
bool cmIncludeDirectoryCommand
|
|
::InitialPass(std::vector<std::string> const& args, cmExecutionStatus &)
|
|
{
|
|
if(args.size() < 1 )
|
|
{
|
|
return true;
|
|
}
|
|
|
|
std::vector<std::string>::const_iterator i = args.begin();
|
|
|
|
bool before = this->Makefile->IsOn("CMAKE_INCLUDE_DIRECTORIES_BEFORE");
|
|
bool system = false;
|
|
|
|
if ((*i) == "BEFORE")
|
|
{
|
|
before = true;
|
|
++i;
|
|
}
|
|
else if ((*i) == "AFTER")
|
|
{
|
|
before = false;
|
|
++i;
|
|
}
|
|
|
|
for(; i != args.end(); ++i)
|
|
{
|
|
if(*i == "SYSTEM")
|
|
{
|
|
system = true;
|
|
continue;
|
|
}
|
|
if(i->size() == 0)
|
|
{
|
|
this->SetError("given empty-string as include directory.");
|
|
return false;
|
|
}
|
|
|
|
this->AddDirectory(i->c_str(),before,system);
|
|
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// do a lot of cleanup on the arguments because this is one place where folks
|
|
// sometimes take the output of a program and pass it directly into this
|
|
// command not thinking that a single argument could be filled with spaces
|
|
// and newlines etc liek below:
|
|
//
|
|
// " /foo/bar
|
|
// /boo/hoo /dingle/berry "
|
|
//
|
|
// ideally that should be three seperate arguments but when sucking the
|
|
// output from a program and passing it into a command the cleanup doesn't
|
|
// always happen
|
|
//
|
|
void cmIncludeDirectoryCommand::AddDirectory(const char *i,
|
|
bool before,
|
|
bool system)
|
|
{
|
|
// break apart any line feed arguments
|
|
std::string ret = i;
|
|
std::string::size_type pos = 0;
|
|
if((pos = ret.find('\n', pos)) != std::string::npos)
|
|
{
|
|
if (pos)
|
|
{
|
|
this->AddDirectory(ret.substr(0,pos).c_str(), before, system);
|
|
}
|
|
if (ret.size()-pos-1)
|
|
{
|
|
this->AddDirectory(ret.substr(pos+1,ret.size()-pos-1).c_str(),
|
|
before, system);
|
|
}
|
|
return;
|
|
}
|
|
|
|
// remove any leading or trailing spaces and \r
|
|
std::string::size_type b = ret.find_first_not_of(" \r");
|
|
std::string::size_type e = ret.find_last_not_of(" \r");
|
|
if ((b!=ret.npos) && (e!=ret.npos))
|
|
{
|
|
ret.assign(ret, b, 1+e-b); // copy the remaining substring
|
|
}
|
|
else
|
|
{
|
|
return; // if we get here, we had only whitespace in the string
|
|
}
|
|
|
|
if (!cmSystemTools::IsOff(ret.c_str()))
|
|
{
|
|
cmSystemTools::ConvertToUnixSlashes(ret);
|
|
if(!cmSystemTools::FileIsFullPath(ret.c_str()))
|
|
{
|
|
std::string tmp = this->Makefile->GetStartDirectory();
|
|
tmp += "/";
|
|
tmp += ret;
|
|
ret = tmp;
|
|
}
|
|
}
|
|
this->Makefile->AddIncludeDirectory(ret.c_str(), before);
|
|
if(system)
|
|
{
|
|
this->Makefile->AddSystemIncludeDirectory(ret.c_str());
|
|
}
|
|
}
|
|
|