diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmFindBase.cxx | 55 | ||||
-rw-r--r-- | Source/cmFindBase.h | 2 | ||||
-rw-r--r-- | Source/cmFindLibraryCommand.cxx | 2 | ||||
-rw-r--r-- | Source/cmFindPathCommand.cxx | 2 | ||||
-rw-r--r-- | Source/cmFindProgramCommand.cxx | 2 |
5 files changed, 61 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); diff --git a/Source/cmFindBase.h b/Source/cmFindBase.h index 547576d..5efbe2a 100644 --- a/Source/cmFindBase.h +++ b/Source/cmFindBase.h @@ -53,6 +53,8 @@ protected: void AddFrameWorkPaths(); void AddAppBundlePaths(); void AddEnvironmentVariables(); + void AddFindPrefix(std::vector<std::string>& dest, + const std::vector<std::string>& src); void AddCMakeVariables(); void AddSystemEnvironmentVariables(); void AddCMakeSystemVariables(); diff --git a/Source/cmFindLibraryCommand.cxx b/Source/cmFindLibraryCommand.cxx index 7971221..208ed02 100644 --- a/Source/cmFindLibraryCommand.cxx +++ b/Source/cmFindLibraryCommand.cxx @@ -33,6 +33,8 @@ cmFindLibraryCommand::cmFindLibraryCommand() cmSystemTools::ReplaceString(this->GenericDocumentation, "SEARCH_XXX", "library"); cmSystemTools::ReplaceString(this->GenericDocumentation, + "XXX_SUBDIR", "lib"); + cmSystemTools::ReplaceString(this->GenericDocumentation, "CMAKE_FIND_ROOT_PATH_MODE_XXX", "CMAKE_FIND_ROOT_PATH_MODE_LIBRARY"); diff --git a/Source/cmFindPathCommand.cxx b/Source/cmFindPathCommand.cxx index 1210b3b..80d0b10 100644 --- a/Source/cmFindPathCommand.cxx +++ b/Source/cmFindPathCommand.cxx @@ -37,6 +37,8 @@ cmFindPathCommand::cmFindPathCommand() cmSystemTools::ReplaceString(this->GenericDocumentation, "SEARCH_XXX", "file in a directory"); cmSystemTools::ReplaceString(this->GenericDocumentation, + "XXX_SUBDIR", "include"); + cmSystemTools::ReplaceString(this->GenericDocumentation, "CMAKE_FIND_ROOT_PATH_MODE_XXX", "CMAKE_FIND_ROOT_PATH_MODE_INCLUDE"); diff --git a/Source/cmFindProgramCommand.cxx b/Source/cmFindProgramCommand.cxx index f1b8135..fb563e2 100644 --- a/Source/cmFindProgramCommand.cxx +++ b/Source/cmFindProgramCommand.cxx @@ -38,6 +38,8 @@ cmFindProgramCommand::cmFindProgramCommand() cmSystemTools::ReplaceString(this->GenericDocumentation, "SEARCH_XXX", "program"); cmSystemTools::ReplaceString(this->GenericDocumentation, + "XXX_SUBDIR", "[s]bin"); + cmSystemTools::ReplaceString(this->GenericDocumentation, "CMAKE_FIND_ROOT_PATH_MODE_XXX", "CMAKE_FIND_ROOT_PATH_MODE_PROGRAM"); } |