Преглед изворни кода

BUG: fix for bug 116 platform files can now specify directories that should not be added by CMAKE

Bill Hoffman пре 22 година
родитељ
комит
a6b60841db
2 измењених фајлова са 16 додато и 1 уклоњено
  1. 2 0
      Modules/Platform/Darwin.cmake
  2. 14 1
      Source/cmLocalUnixMakefileGenerator.cxx

+ 2 - 0
Modules/Platform/Darwin.cmake

@@ -25,3 +25,5 @@ SET(CMAKE_C_CREATE_SHARED_MODULE
       "<CMAKE_C_COMPILER> <CMAKE_SHARED_MODULE_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
 
 INCLUDE(${CMAKE_ROOT}/Modules/Platform/gcc.cmake)
+
+SET(CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES /usr/local/include)

+ 14 - 1
Source/cmLocalUnixMakefileGenerator.cxx

@@ -2487,13 +2487,26 @@ void cmLocalUnixMakefileGenerator::OutputMakeVariables(std::ostream& fout)
   std::vector<std::string>::iterator i;
   fout << "-I" << 
     this->ConvertToOutputForExisting(m_Makefile->GetStartDirectory()) << " ";
+  std::map<cmStdString, cmStdString> implicitIncludes;
+  implicitIncludes["/usr/include"] = "/usr/include";
+  if(m_Makefile->GetDefinition("CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES"))
+    {
+    std::string arg = m_Makefile->GetDefinition("CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES");
+    std::vector<std::string> implicitIncludeVec;
+    cmSystemTools::ExpandListArgument(arg, implicitIncludeVec);
+    for(int k =0; k < implicitIncludeVec.size(); k++)
+      {
+      implicitIncludes[implicitIncludeVec[k]] = implicitIncludeVec[k];
+      }
+    }
+  
   for(i = includes.begin(); i != includes.end(); ++i)
     {
     std::string include = *i;
     // Don't output a -I for the standard include path "/usr/include".
     // This can cause problems with certain standard library
     // implementations because the wrong headers may be found first.
-    if(include != "/usr/include")
+    if(implicitIncludes.find(include) == implicitIncludes.end())
       {
       fout << "-I" << this->ConvertToOutputForExisting(i->c_str()) << " ";
       }