diff options
author | Alexander Neundorf <neundorf@kde.org> | 2007-10-26 13:55:40 (GMT) |
---|---|---|
committer | Alexander Neundorf <neundorf@kde.org> | 2007-10-26 13:55:40 (GMT) |
commit | 0398d8ad38c5a00aba7286fd511c15bad55f2987 (patch) | |
tree | 71a2886e9fd9f9ca732d10eae5b7956e621e387a /Source/cmFindBase.cxx | |
parent | 480b97a8e2f825f31e378025bce666d5bafc45ca (diff) | |
download | CMake-0398d8ad38c5a00aba7286fd511c15bad55f2987.zip CMake-0398d8ad38c5a00aba7286fd511c15bad55f2987.tar.gz CMake-0398d8ad38c5a00aba7286fd511c15bad55f2987.tar.bz2 |
ENH: add support for CMAKE_FIND_PREFIX_PATH as discussed with Brad.
CMAKE_FIND_PREFIX_PATH is both an environment variable and a cmake variable,
which is a list of base directories where FIND_PATH, FIND_FILE, FIND_PROGRAM
and FIND_LIBRARY will search in the respective subdirectories
Alex
Diffstat (limited to 'Source/cmFindBase.cxx')
-rw-r--r-- | Source/cmFindBase.cxx | 55 |
1 files changed, 53 insertions, 2 deletions
diff --git a/Source/cmFindBase.cxx b/Source/cmFindBase.cxx index b95cb89..00927f4 100644 --- a/Source/cmFindBase.cxx +++ b/Source/cmFindBase.cxx @@ -83,6 +83,7 @@ cmFindBase::cmFindBase() "1. Search cmake specific environment variables. This " "can be skipped if NO_CMAKE_ENVIRONMENT_PATH is passed.\n" "" + " CMAKE_FIND_PREFIX_PATH/XXX_SUBDIR\n" " CMAKE_FRAMEWORK_PATH\n" " CMAKE_APPBUNDLE_PATH\n" " CMAKE_XXX_PATH\n" @@ -92,6 +93,7 @@ cmFindBase::cmFindBase() "-DVAR=value. This can be skipped if NO_CMAKE_PATH " "is passed.\n" "" + " CMAKE_FIND_PREFIX_PATH/XXX_SUBDIR\n" " CMAKE_FRAMEWORK_PATH\n" " CMAKE_APPBUNDLE_PATH\n" " CMAKE_XXX_PATH\n" @@ -546,10 +548,15 @@ void cmFindBase::HandleCMakeFindRootPath() void cmFindBase::AddEnvironmentVariables() { + std::vector<std::string> paths; + + std::vector<std::string> prefixPaths; + cmSystemTools::GetPath(prefixPaths, "CMAKE_FIND_PREFIX_PATH"); + this->AddFindPrefix(paths, prefixPaths); + std::string var = "CMAKE_"; var += this->CMakePathName; var += "_PATH"; - std::vector<std::string> paths; cmSystemTools::GetPath(paths, var.c_str()); if(this->SearchAppBundleLast) { @@ -559,7 +566,42 @@ void cmFindBase::AddEnvironmentVariables() { cmSystemTools::GetPath(paths, "CMAKE_FRAMEWORK_PATH"); } - this->AddPaths(paths); + this->AddPaths(paths); +} + +void cmFindBase::AddFindPrefix(std::vector<std::string>& dest, + const std::vector<std::string>& src) +{ + // default for programs + std::string subdir = "/bin"; + + if (this->CMakePathName == "INCLUDE") + { + subdir = "/include"; + } + else if (this->CMakePathName == "LIBRARY") + { + subdir = "/lib"; + } + else if (this->CMakePathName == "FRAMEWORK") + { + subdir = ""; // ? what to do for frameworks ? + } + + for (std::vector<std::string>::const_iterator it = src.begin(); + it != src.end(); + ++it) + { + std::string dirWithSubdir = it->c_str(); + dirWithSubdir += subdir; + dest.push_back(dirWithSubdir); + if (subdir == "/bin") + { + dirWithSubdir = it->c_str(); + dirWithSubdir += "/sbin"; + dest.push_back(dirWithSubdir); + } + } } void cmFindBase::AddFrameWorkPaths() @@ -644,6 +686,15 @@ void cmFindBase::AddCMakeVariables() var += this->CMakePathName; var += "_PATH"; std::vector<std::string> paths; + + if(const char* prefixPath = + this->Makefile->GetDefinition("CMAKE_FIND_PREFIX_PATH")) + { + std::vector<std::string> prefixPaths; + cmSystemTools::ExpandListArgument(prefixPath, prefixPaths); + this->AddFindPrefix(paths, prefixPaths); + } + if(const char* path = this->Makefile->GetDefinition(var.c_str())) { cmSystemTools::ExpandListArgument(path, paths); |