[cmake-commits] alex committed cmFindBase.h 1.9 1.9.2.1 cmFindBase.cxx 1.19 1.19.2.1

cmake-commits at cmake.org cmake-commits at cmake.org
Tue May 1 16:25:05 EDT 2007


Update of /cvsroot/CMake/CMake/Source
In directory public:/mounts/ram/cvs-serv20953

Modified Files:
      Tag: CMake-CrossCompileBasic
	cmFindBase.h cmFindBase.cxx 
Log Message:

ENH: add support for CMAKE_FIND_PREFIX, for prepending a prefix before all
directories searched by FIND_XXX(), useful for defining a different root
directory for the base directory of the target platform

Alex


Index: cmFindBase.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmFindBase.h,v
retrieving revision 1.9
retrieving revision 1.9.2.1
diff -u -d -r1.9 -r1.9.2.1
--- cmFindBase.h	28 Dec 2006 20:31:47 -0000	1.9
+++ cmFindBase.h	1 May 2007 20:25:03 -0000	1.9.2.1
@@ -39,16 +39,20 @@
   virtual const char* GetFullDocumentation()
     {return this->GenericDocumentation.c_str();}
 
+  enum PrefixMode { PrefixModeBoth, PrefixModeOnlyPrefix, PrefixModeNoPrefix };
+  
 protected:
   void PrintFindStuff();
   void ExpandPaths(std::vector<std::string> userPaths);
+  void HandleCMakeFindPrefix();
+  
   // add to the SearchPaths
   void AddPaths(std::vector<std::string>& paths);
   void AddFrameWorkPaths();
   void AddAppBundlePaths();
-  void AddEnvironmentVairables();
-  void AddCMakeVairables();
-  void AddSystemEnvironmentVairables();
+  void AddEnvironmentVariables();
+  void AddCMakeVariables();
+  void AddSystemEnvironmentVariables();
   void AddCMakeSystemVariables();
   void ExpandRegistryAndCleanPath(std::vector<std::string>& paths);
   // see if the VariableName is already set in the cache,
@@ -75,6 +79,7 @@
   bool NoCMakeEnvironmentPath;
   bool NoSystemEnvironmentPath;
   bool NoCMakeSystemPath;
+  PrefixMode FindPrefixMode;
   
   bool SearchFrameworkFirst;
   bool SearchFrameworkOnly;

Index: cmFindBase.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmFindBase.cxx,v
retrieving revision 1.19
retrieving revision 1.19.2.1
diff -u -d -r1.19 -r1.19.2.1
--- cmFindBase.cxx	28 Dec 2006 20:31:47 -0000	1.19
+++ cmFindBase.cxx	1 May 2007 20:25:03 -0000	1.19.2.1
@@ -25,6 +25,7 @@
   this->NoCMakeEnvironmentPath = false;
   this->NoSystemEnvironmentPath = false;
   this->NoCMakeSystemPath = false;
+  this->FindPrefixMode = PrefixModeBoth;
   // default is to search frameworks first on apple
 #if defined(__APPLE__)
   this->SearchFrameworkFirst = true;
@@ -328,6 +329,16 @@
       doingNames = false;
       this->NoCMakeSystemPath = true;
       }
+    else if (args[j] == "NO_CMAKE_FIND_PREFIX")
+      {
+      compatibility = false;  // not sure, Alex
+      this->FindPrefixMode = PrefixModeNoPrefix;
+      }
+    else if (args[j] == "ONLY_CMAKE_FIND_PREFIX")
+      {
+      compatibility = false;  // not sure, Alex
+      this->FindPrefixMode = PrefixModeOnlyPrefix;
+      }
     else
       {
       if(doingNames)
@@ -358,7 +369,7 @@
 
   if(this->VariableDocumentation.size() == 0)
     {
-    this->VariableDocumentation = "Whare can ";
+    this->VariableDocumentation = "Where can ";
     if(this->Names.size() == 0)
       {
       this->VariableDocumentation += "the (unknown) library be found";
@@ -392,6 +403,8 @@
       }
     }
   this->ExpandPaths(userPaths);
+  
+  this->HandleCMakeFindPrefix();
   return true;
 }
 
@@ -413,7 +426,7 @@
        !(this->SearchFrameworkOnly || this->SearchAppBundleOnly))
       {
       // Add CMAKE_*_PATH environment variables
-      this->AddEnvironmentVairables();
+      this->AddEnvironmentVariables();
       }
     if(!this->NoCMakePath && 
        !(this->SearchFrameworkOnly || this->SearchAppBundleOnly))
@@ -421,13 +434,13 @@
       // 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();
+      this->AddCMakeVariables();
       }
     if(!this->NoSystemEnvironmentPath && 
        !(this->SearchFrameworkOnly || this->SearchAppBundleOnly))
       {
       // add System environment PATH and (LIB or INCLUDE)
-      this->AddSystemEnvironmentVairables();
+      this->AddSystemEnvironmentVariables();
       }
     if(!this->NoCMakeSystemPath && 
        !(this->SearchFrameworkOnly || this->SearchAppBundleOnly))
@@ -453,7 +466,39 @@
   this->AddPaths(paths);
 }
 
-void cmFindBase::AddEnvironmentVairables()
+void cmFindBase::HandleCMakeFindPrefix()
+{
+  if (this->FindPrefixMode == PrefixModeNoPrefix)
+    {
+    return;
+    }
+
+  const char* prefix =  this->Makefile->GetDefinition("CMAKE_FIND_PREFIX");
+  if ((prefix == 0) || (strlen(prefix) == 0))
+    {
+    return;
+    }
+
+  std::vector<std::string> unprefixedPaths=this->SearchPaths;
+  this->SearchPaths.clear();
+
+  std::vector<std::string>::iterator it;
+  for ( it = unprefixedPaths.begin();
+        it != unprefixedPaths.end();
+        ++it )
+    {
+    std::string prefixedDir=prefix;
+    prefixedDir+=*it;
+    this->SearchPaths.push_back(prefixedDir);
+    }
+
+  if (this->FindPrefixMode == PrefixModeBoth)
+    {
+    this->AddPaths(unprefixedPaths);
+    }
+}
+
+void cmFindBase::AddEnvironmentVariables()
 { 
   std::string var = "CMAKE_";
   var += this->CMakePathName;
@@ -547,7 +592,7 @@
    this->AddPaths(paths);
 }
 
-void cmFindBase::AddCMakeVairables()
+void cmFindBase::AddCMakeVariables()
 { 
   std::string var = "CMAKE_";
   var += this->CMakePathName;
@@ -576,7 +621,7 @@
   this->AddPaths(paths);
 }
 
-void cmFindBase::AddSystemEnvironmentVairables()
+void cmFindBase::AddSystemEnvironmentVariables()
 {
   // Add LIB or INCLUDE
   std::vector<std::string> paths;



More information about the Cmake-commits mailing list