Kaynağa Gözat

find_package: Add missing PACKAGE_ROOT_PATH search path implementation.

Chuck Atkins 8 yıl önce
ebeveyn
işleme
c5d2b99c02
2 değiştirilmiş dosya ile 21 ekleme ve 0 silme
  1. 20 0
      Source/cmFindPackageCommand.cxx
  2. 1 0
      Source/cmFindPackageCommand.h

+ 20 - 0
Source/cmFindPackageCommand.cxx

@@ -1090,6 +1090,9 @@ void cmFindPackageCommand::AppendSuccessInformation()
 void cmFindPackageCommand::ComputePrefixes()
 {
   if (!this->NoDefaultPath) {
+    if (!this->NoPackageRootPath) {
+      this->FillPrefixesPackageRoot();
+    }
     if (!this->NoCMakePath) {
       this->FillPrefixesCMakeVariable();
     }
@@ -1117,6 +1120,23 @@ void cmFindPackageCommand::ComputePrefixes()
   this->ComputeFinalPaths();
 }
 
+void cmFindPackageCommand::FillPrefixesPackageRoot()
+{
+  cmSearchPath& paths = this->LabeledPaths[PathLabel::PackageRoot];
+
+  // Add package specific search prefixes
+  // NOTE: This should be using const_reverse_iterator but HP aCC and
+  //       Oracle sunCC both currently have standard library issues
+  //       with the reverse iterator APIs.
+  for (std::deque<std::string>::reverse_iterator pkg =
+         this->Makefile->FindPackageModuleStack.rbegin();
+       pkg != this->Makefile->FindPackageModuleStack.rend(); ++pkg) {
+    std::string varName = *pkg + "_ROOT";
+    paths.AddCMakePath(varName);
+    paths.AddEnvPath(varName);
+  }
+}
+
 void cmFindPackageCommand::FillPrefixesCMakeEnvironment()
 {
   cmSearchPath& paths = this->LabeledPaths[PathLabel::CMakeEnvironment];

+ 1 - 0
Source/cmFindPackageCommand.h

@@ -100,6 +100,7 @@ private:
   void StoreVersionFound();
 
   void ComputePrefixes();
+  void FillPrefixesPackageRoot();
   void FillPrefixesCMakeEnvironment();
   void FillPrefixesCMakeVariable();
   void FillPrefixesSystemEnvironment();