Bladeren bron

better configure file command

Ken Martin 25 jaren geleden
bovenliggende
commit
901d2626ce
1 gewijzigde bestanden met toevoegingen van 38 en 31 verwijderingen
  1. 38 31
      Source/cmConfigureFileCommand.cxx

+ 38 - 31
Source/cmConfigureFileCommand.cxx

@@ -81,13 +81,6 @@ void cmConfigureFileCommand::FinalPass()
 {
   m_Makefile->ExpandVariablesInString(m_InputFile);
   m_Makefile->ExpandVariablesInString(m_OuputFile);
-  std::ifstream fin(m_InputFile.c_str());
-  if(!fin)
-    {
-    cmSystemTools::Error("Could not open file for read in copy operatation",
-                         m_InputFile.c_str());
-    return;
-    }
   cmSystemTools::ConvertToUnixSlashes(m_OuputFile);
   std::string::size_type pos = m_OuputFile.rfind('/');
   if(pos != std::string::npos)
@@ -95,29 +88,43 @@ void cmConfigureFileCommand::FinalPass()
     std::string path = m_OuputFile.substr(0, pos);
     cmSystemTools::MakeDirectory(path.c_str());
     }
-  std::string tempOutputFile = m_OuputFile;
-  tempOutputFile += ".tmp";
-  std::ofstream fout(tempOutputFile.c_str());
-  if(!fout)
+  
+  if(m_CopyOnly)
     {
-    cmSystemTools::Error("Could not open file for write in copy operatation", 
-                         tempOutputFile.c_str());
-    return;
+    cmSystemTools::CopyFileIfDifferent(m_InputFile.c_str(),
+                                       m_OuputFile.c_str());
     }
-  // now copy input to output and expand varibles in the
-  // input file at the same time
-  const int bufSize = 4096;
-  char buffer[bufSize];
-  std::string inLine;
-  cmRegularExpression cmdefine("#cmakedefine[ \t]*([A-Za-z_0-9]*)");
-  while(fin)
+  else
     {
-    fin.getline(buffer, bufSize);
-    if(fin)
+    std::string tempOutputFile = m_OuputFile;
+    tempOutputFile += ".tmp";
+    std::ofstream fout(tempOutputFile.c_str());
+    if(!fout)
+      {
+      cmSystemTools::Error("Could not open file for write in copy operatation", 
+                           tempOutputFile.c_str());
+      return;
+      }
+    std::ifstream fin(m_InputFile.c_str());
+    if(!fin)
+      {
+      cmSystemTools::Error("Could not open file for read in copy operatation",
+                           m_InputFile.c_str());
+      return;
+      }
+
+    // now copy input to output and expand varibles in the
+    // input file at the same time
+    const int bufSize = 4096;
+    char buffer[bufSize];
+    std::string inLine;
+    cmRegularExpression cmdefine("#cmakedefine[ \t]*([A-Za-z_0-9]*)");
+    while(fin)
       {
-      inLine = buffer;
-      if(!m_CopyOnly)
+      fin.getline(buffer, bufSize);
+      if(fin)
         {
+        inLine = buffer;
         m_Makefile->ExpandVariablesInString(inLine, m_EscapeQuotes);
         m_Makefile->RemoveVariablesInString(inLine);
         // look for special cmakedefine symbol and handle it
@@ -139,13 +146,13 @@ void cmConfigureFileCommand::FinalPass()
         }
       fout << inLine << "\n";
       }
+    // close the files before attempting to copy
+    fin.close();
+    fout.close();
+    cmSystemTools::CopyFileIfDifferent(tempOutputFile.c_str(),
+                                       m_OuputFile.c_str());
+    cmSystemTools::RemoveFile(tempOutputFile.c_str());
     }
-  // close the files before attempting to copy
-  fin.close();
-  fout.close();
-  cmSystemTools::CopyFileIfDifferent(tempOutputFile.c_str(),
-                                     m_OuputFile.c_str());
-  cmSystemTools::RemoveFile(tempOutputFile.c_str());
 }