ENH: make sure framework search order is correct

This commit is contained in:
Bill Hoffman 2006-03-30 11:55:19 -05:00
parent 7b3be313ee
commit 3cf3fc510f
3 changed files with 49 additions and 19 deletions

View File

@ -943,12 +943,20 @@ bool cmFileCommand::HandleSystemPathCommand(std::vector<std::string>
const& args) const& args)
{ {
std::vector<std::string>::const_iterator i = args.begin(); std::vector<std::string>::const_iterator i = args.begin();
for(std::vector<std::string>::const_iterator j = args.begin();
j != args.end(); ++j)
{
std::cerr << "[" << *j << "]\n";
}
return true;
if(args.size() != 3) if(args.size() != 3)
{ {
this->SetError("FILE(SYSTEM_PATH ENV result) must be called with " this->SetError("FILE(SYSTEM_PATH ENV result) must be called with "
"only three arguments."); "only three arguments.");
return false; return false;
} }
i++; // Get rid of subcommand i++; // Get rid of subcommand
std::vector<std::string> path; std::vector<std::string> path;
cmSystemTools::GetPath(path, i->c_str()); cmSystemTools::GetPath(path, i->c_str());

View File

@ -351,44 +351,49 @@ void cmFindBase::ExpandPaths(std::vector<std::string> userPaths)
// standard search paths. // standard search paths.
if(!this->NoDefaultPath) if(!this->NoDefaultPath)
{ {
if(!this->NoCMakeEnvironmentPath) if(this->SearchFrameworkFirst)
{
this->AddFrameWorkPaths();
}
if(!this->NoCMakeEnvironmentPath && !this->SearchFrameworkOnly)
{ {
// Add CMAKE_*_PATH environment variables // Add CMAKE_*_PATH environment variables
this->AddEnvironmentVairables(); this->AddEnvironmentVairables();
} }
if(!this->NoCMakePath) if(!this->NoCMakePath && !this->SearchFrameworkOnly)
{ {
// Add CMake varibles of the same name as the previous environment // Add CMake varibles of the same name as the previous environment
// varibles CMAKE_*_PATH to be used most of the time with -D // varibles CMAKE_*_PATH to be used most of the time with -D
// command line options // command line options
this->AddCMakeVairables(); this->AddCMakeVairables();
} }
if(!this->NoSystemEnvironmentPath) if(!this->NoSystemEnvironmentPath && !this->SearchFrameworkOnly)
{ {
// add System environment PATH and (LIB or INCLUDE) // add System environment PATH and (LIB or INCLUDE)
this->AddSystemEnvironmentVairables(); this->AddSystemEnvironmentVairables();
} }
if(!this->NoCMakeSystemPath) if(!this->NoCMakeSystemPath && !this->SearchFrameworkOnly)
{ {
// Add CMAKE_SYSTEM_*_PATH variables which are defined in platform files // Add CMAKE_SYSTEM_*_PATH variables which are defined in platform files
this->AddCMakeSystemVariables(); this->AddCMakeSystemVariables();
} }
if(this->SearchFrameworkLast)
{
this->AddFrameWorkPaths();
}
} }
// add the paths specified in the FIND_* call // add the paths specified in the FIND_* call
for(unsigned int i =0; i < userPaths.size(); ++i) for(unsigned int i =0; i < userPaths.size(); ++i)
{ {
this->SearchPaths.push_back(userPaths[i]); this->SearchPaths.push_back(userPaths[i]);
} }
// clean things up // clean things up
this->ExpandRegistryAndCleanPath(); this->ExpandRegistryAndCleanPath();
} }
void cmFindBase::AddEnvironmentVairables() void cmFindBase::AddEnvironmentVairables()
{ {
if(this->SearchFrameworkFirst || this->SearchFrameworkOnly)
{
cmSystemTools::GetPath(this->SearchPaths, "CMAKE_FRAMEWORK_PATH");
}
std::string var = "CMAKE_"; std::string var = "CMAKE_";
var += this->CMakePathName; var += this->CMakePathName;
var += "_PATH"; var += "_PATH";
@ -400,9 +405,19 @@ void cmFindBase::AddEnvironmentVairables()
} }
void cmFindBase::AddCMakeVairables() void cmFindBase::AddFrameWorkPaths()
{ {
if(this->SearchFrameworkFirst || this->SearchFrameworkOnly) if(this->NoDefaultPath)
{
return;
}
// first environment variables
if(!this->NoCMakeEnvironmentPath)
{
cmSystemTools::GetPath(this->SearchPaths, "CMAKE_FRAMEWORK_PATH");
}
// add cmake variables
if(!this->NoCMakePath)
{ {
if(const char* path = if(const char* path =
this->Makefile->GetDefinition("CMAKE_FRAMEWORK_PATH")) this->Makefile->GetDefinition("CMAKE_FRAMEWORK_PATH"))
@ -410,6 +425,19 @@ void cmFindBase::AddCMakeVairables()
cmSystemTools::ExpandListArgument(path, this->SearchPaths); cmSystemTools::ExpandListArgument(path, this->SearchPaths);
} }
} }
// AddCMakeSystemVariables
if(!this->NoCMakeSystemPath)
{
if(const char* path =
this->Makefile->GetDefinition("CMAKE_SYSTEM_FRAMEWORK_PATH"))
{
cmSystemTools::ExpandListArgument(path, this->SearchPaths);
}
}
}
void cmFindBase::AddCMakeVairables()
{
std::string var = "CMAKE_"; std::string var = "CMAKE_";
var += this->CMakePathName; var += this->CMakePathName;
var += "_PATH"; var += "_PATH";
@ -440,13 +468,6 @@ void cmFindBase::AddSystemEnvironmentVairables()
void cmFindBase::AddCMakeSystemVariables() void cmFindBase::AddCMakeSystemVariables()
{ {
if(this->SearchFrameworkFirst || this->SearchFrameworkOnly)
{
if(const char* path = this->Makefile->GetDefinition("CMAKE_SYSTEM_FRAMEWORK_PATH"))
{
cmSystemTools::ExpandListArgument(path, this->SearchPaths);
}
}
std::string var = "CMAKE_SYSTEM_"; std::string var = "CMAKE_SYSTEM_";
var += this->CMakePathName; var += this->CMakePathName;
var += "_PATH"; var += "_PATH";

View File

@ -42,6 +42,7 @@ public:
protected: protected:
void PrintFindStuff(); void PrintFindStuff();
void ExpandPaths(std::vector<std::string> userPaths); void ExpandPaths(std::vector<std::string> userPaths);
void AddFrameWorkPaths();
void AddEnvironmentVairables(); void AddEnvironmentVairables();
void AddCMakeVairables(); void AddCMakeVairables();
void AddSystemEnvironmentVairables(); void AddSystemEnvironmentVairables();