Add optional BEFORE param to INCLUDE_DIRECTORIES so that include dirs can be specified before the actual include dirs

This commit is contained in:
Sebastien Barre 2001-11-02 22:32:39 -05:00
parent 2fcf59b96b
commit ef74458b34
4 changed files with 25 additions and 8 deletions

View File

@ -43,15 +43,24 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// cmIncludeDirectoryCommand
bool cmIncludeDirectoryCommand::InitialPass(std::vector<std::string> const& args)
{
if(args.size() < 1 )
if(args.size() < 1 )
{
this->SetError("called with incorrect number of arguments");
return false;
}
for(std::vector<std::string>::const_iterator i = args.begin();
i != args.end(); ++i)
std::vector<std::string>::const_iterator i = args.begin();
bool before = false;
if ((*i) == "BEFORE")
{
m_Makefile->AddIncludeDirectory((*i).c_str());
before = true;
++i;
}
for(; i != args.end(); ++i)
{
m_Makefile->AddIncludeDirectory((*i).c_str(), before);
}
return true;
}

View File

@ -92,7 +92,7 @@ public:
virtual const char* GetFullDocumentation()
{
return
"INCLUDE_DIRECTORIES(dir1 dir2 ...)";
"INCLUDE_DIRECTORIES([BEFORE] dir1 dir2 ...)";
}
cmTypeMacro(cmIncludeDirectoryCommand, cmCommand);

View File

@ -564,7 +564,7 @@ void cmMakefile::AddSubdirDependency(const char* subdir,
m_SubdirDepends[subdir].insert(dependency);
}
void cmMakefile::AddIncludeDirectory(const char* inc)
void cmMakefile::AddIncludeDirectory(const char* inc, bool before)
{
// Don't add an include directory that is already present. Yes,
// this linear search results in n^2 behavior, but n won't be
@ -573,7 +573,15 @@ void cmMakefile::AddIncludeDirectory(const char* inc)
if(std::find(m_IncludeDirectories.begin(),
m_IncludeDirectories.end(), inc) == m_IncludeDirectories.end())
{
m_IncludeDirectories.push_back(inc);
if (before)
{
// WARNING: this *is* expensive (linear time) since it's a vector
m_IncludeDirectories.insert(m_IncludeDirectories.begin(), inc);
}
else
{
m_IncludeDirectories.push_back(inc);
}
}
}

View File

@ -218,7 +218,7 @@ public:
/**
* Add an include directory to the build.
*/
void AddIncludeDirectory(const char*);
void AddIncludeDirectory(const char*, bool before = false);
/**
* Add a variable definition to the build. This variable