Browse Source

Special rules for out-of-package source files.

Berk Geveci 24 years ago
parent
commit
19bd2c0c29
1 changed files with 57 additions and 1 deletions
  1. 57 1
      Source/cmUnixMakefileGenerator.cxx

+ 57 - 1
Source/cmUnixMakefileGenerator.cxx

@@ -236,6 +236,9 @@ void cmUnixMakefileGenerator::OutputMakefile(const char* file)
     {
     fout << "include cmake.depends\n";
     }
+
+
+
 }
 
 
@@ -890,6 +893,7 @@ void cmUnixMakefileGenerator::OutputCustomRules(std::ostream& fout)
       fout << "# End of source group \"" << name.c_str() << "\"\n\n";
       }
     }  
+
 }
 
 
@@ -1102,6 +1106,22 @@ void cmUnixMakefileGenerator::OutputMakeRules(std::ostream& fout)
                        ".cxx.o", 
                        0,
                        "${CMAKE_CXX_COMPILER} ${CMAKE_CXXFLAGS} ${INCLUDE_FLAGS} -c $< -o $@");  
+  this->OutputMakeRule(fout, 
+                       "# build cplusplus file",
+                       ".cpp.o", 
+                       0,
+                       "${CMAKE_CXX_COMPILER} ${CMAKE_CXXFLAGS} ${INCLUDE_FLAGS} -c $< -o $@");  
+  this->OutputMakeRule(fout, 
+                       "# build cplusplus file",
+                       ".cc.o", 
+                       0,
+                       "${CMAKE_CXX_COMPILER} ${CMAKE_CXXFLAGS} ${INCLUDE_FLAGS} -c $< -o $@");  
+  this->OutputMakeRule(fout, 
+                       "# build cplusplus file",
+                       ".C.o", 
+                       0,
+                       "${CMAKE_CXX_COMPILER} ${CMAKE_CXXFLAGS} ${INCLUDE_FLAGS} -c $< -o $@");  
+
   // only include the cmake.depends and not the Makefile, as
   // building one will cause the other to be built
   this->OutputMakeRule(fout, 
@@ -1156,6 +1176,42 @@ void cmUnixMakefileGenerator::OutputMakeRules(std::ostream& fout)
                        "Makefile cmake.depends",
                        0);
   
+
+  // Write special rules for source files coming from other packages
+  // (not in the current build or source directories)
+
+  fout << "# Write special rules for source files coming from other packages\n";
+  fout << "# (not in the current build or source directories)\n";
+
+  // Iterate over every target.
+  std::map<std::string, cmTarget>& targets = m_Makefile->GetTargets();
+  for(std::map<std::string, cmTarget>::const_iterator target = targets.begin(); 
+      target != targets.end(); ++target)
+    {
+    // Iterate over every source for this target.
+    const std::vector<cmSourceFile>& sources = target->second.GetSourceFiles();
+    for(std::vector<cmSourceFile>::const_iterator source = sources.begin(); 
+        source != sources.end(); ++source)
+      {
+      if(!source->IsAHeaderFileOnly() && 
+	 (cmSystemTools::GetFilenamePath(source->GetFullPath()) 
+	  != m_Makefile->GetCurrentOutputDirectory()) &&
+	 (cmSystemTools::GetFilenamePath(source->GetFullPath()) 
+	    != m_Makefile->GetCurrentDirectory()))
+        {
+	fout << cmSystemTools::GetFilenameName(source->GetSourceName()) << ".o : " << source->GetFullPath() << "\n";
+	std::string ext = source->GetSourceExtension();
+	if ( ext == "cxx" || ext == "cc" || ext == "cpp" || ext == "C" )
+	  {
+	  fout << "\t${CMAKE_CXX_COMPILER} ${CMAKE_CXXFLAGS} ${INCLUDE_FLAGS} -c $< -o $@\n\n";
+	  }
+	else if ( ext == "c" )
+ 	  {
+	  fout << "\t${CMAKE_C_COMPILER} ${CMAKE_CFLAGS} ${INCLUDE_FLAGS} -c $< -o $@\n\n";
+	  }
+        }
+      }
+    }
 }
 
 void cmUnixMakefileGenerator::OutputMakeRule(std::ostream& fout, 
@@ -1194,7 +1250,7 @@ void cmUnixMakefileGenerator::OutputMakeRule(std::ostream& fout,
     m_Makefile->ExpandVariablesInString(replace);
     fout << "\t" << replace.c_str() << "\n\n";
     }
-  fout << "\n\n\n";
+  fout << "\n";
 
 }