|
|
@ -64,24 +64,77 @@ bool cmIncludeDirectoryCommand |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
std::string unixPath = *i; |
|
|
|
if (!cmSystemTools::IsOff(unixPath.c_str())) |
|
|
|
|
|
|
|
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) |
|
|
|
{ |
|
|
|
cmSystemTools::ConvertToUnixSlashes(unixPath); |
|
|
|
if(!cmSystemTools::FileIsFullPath(unixPath.c_str())) |
|
|
|
{ |
|
|
|
std::string tmp = this->Makefile->GetStartDirectory(); |
|
|
|
tmp += "/"; |
|
|
|
tmp += unixPath; |
|
|
|
unixPath = tmp; |
|
|
|
} |
|
|
|
this->AddDirectory(ret.substr(0,pos).c_str(), before, system); |
|
|
|
} |
|
|
|
this->Makefile->AddIncludeDirectory(unixPath.c_str(), before); |
|
|
|
if(system) |
|
|
|
if (ret.size()-pos-1) |
|
|
|
{ |
|
|
|
this->Makefile->AddSystemIncludeDirectory(unixPath.c_str()); |
|
|
|
this->AddDirectory(ret.substr(pos+1,ret.size()-pos-1).c_str(), before, system); |
|
|
|
} |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// remove any leading or trailing spaces and \r
|
|
|
|
pos = ret.size()-1; |
|
|
|
while(ret[pos] == ' ' || ret[pos] == '\r') |
|
|
|
{ |
|
|
|
ret.erase(pos); |
|
|
|
pos--; |
|
|
|
} |
|
|
|
pos = 0; |
|
|
|
while(ret.size() && ret[pos] == ' ' || ret[pos] == '\r') |
|
|
|
{ |
|
|
|
ret.erase(pos,1); |
|
|
|
} |
|
|
|
if (!ret.size()) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
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()); |
|
|
|
} |
|
|
|
return true; |
|
|
|
} |
|
|
|
|