|
|
@@ -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());
|
|
|
}
|
|
|
|
|
|
|