ソースを参照

ENH: make sure framework search order is correct

Bill Hoffman 19 年 前
コミット
3cf3fc510f
3 ファイル変更49 行追加19 行削除
  1. 8 0
      Source/cmFileCommand.cxx
  2. 40 19
      Source/cmFindBase.cxx
  3. 1 0
      Source/cmFindBase.h

+ 8 - 0
Source/cmFileCommand.cxx

@@ -943,12 +943,20 @@ bool cmFileCommand::HandleSystemPathCommand(std::vector<std::string>
                                             const& args)
 {
   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)
     {
     this->SetError("FILE(SYSTEM_PATH ENV result) must be called with "
                    "only three arguments.");
     return false;
     }
+  
+
   i++; // Get rid of subcommand
   std::vector<std::string> path;
   cmSystemTools::GetPath(path, i->c_str());

+ 40 - 19
Source/cmFindBase.cxx

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

+ 1 - 0
Source/cmFindBase.h

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