summaryrefslogtreecommitdiffstats
path: root/Source/cmFindBase.cxx
diff options
context:
space:
mode:
authorAlexander Neundorf <neundorf@kde.org>2007-10-26 13:55:40 (GMT)
committerAlexander Neundorf <neundorf@kde.org>2007-10-26 13:55:40 (GMT)
commit0398d8ad38c5a00aba7286fd511c15bad55f2987 (patch)
tree71a2886e9fd9f9ca732d10eae5b7956e621e387a /Source/cmFindBase.cxx
parent480b97a8e2f825f31e378025bce666d5bafc45ca (diff)
downloadCMake-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.cxx55
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);