| /*============================================================================ |
| CMake - Cross Platform Makefile Generator |
| Copyright 2000-2009 Kitware, Inc., Insight Software Consortium |
| |
| Distributed under the OSI-approved BSD License (the "License"); |
| see accompanying file Copyright.txt for details. |
| |
| This software is distributed WITHOUT ANY WARRANTY; without even the |
| implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| See the License for more information. |
| ============================================================================*/ |
| #include "cmConfigureFileCommand.h" |
| |
| #include <cmsys/RegularExpression.hxx> |
| |
| // cmConfigureFileCommand |
| bool cmConfigureFileCommand |
| ::InitialPass(std::vector<std::string> const& args, cmExecutionStatus &) |
| { |
| if(args.size() < 2 ) |
| { |
| this->SetError("called with incorrect number of arguments, expected 2"); |
| return false; |
| } |
| |
| const char* inFile = args[0].c_str(); |
| if(!cmSystemTools::FileIsFullPath(inFile)) |
| { |
| this->InputFile = this->Makefile->GetCurrentDirectory(); |
| this->InputFile += "/"; |
| } |
| this->InputFile += inFile; |
| |
| // If the input location is a directory, error out. |
| if(cmSystemTools::FileIsDirectory(this->InputFile.c_str())) |
| { |
| cmOStringStream e; |
| e << "input location\n" |
| << " " << this->InputFile << "\n" |
| << "is a directory but a file was expected."; |
| this->SetError(e.str().c_str()); |
| return false; |
| } |
| |
| const char* outFile = args[1].c_str(); |
| if(!cmSystemTools::FileIsFullPath(outFile)) |
| { |
| this->OutputFile = this->Makefile->GetCurrentOutputDirectory(); |
| this->OutputFile += "/"; |
| } |
| this->OutputFile += outFile; |
| |
| // If the output location is already a directory put the file in it. |
| if(cmSystemTools::FileIsDirectory(this->OutputFile.c_str())) |
| { |
| this->OutputFile += "/"; |
| this->OutputFile += cmSystemTools::GetFilenameName(inFile); |
| } |
| |
| if ( !this->Makefile->CanIWriteThisFile(this->OutputFile.c_str()) ) |
| { |
| std::string e = "attempted to configure a file: " + this->OutputFile |
| + " into a source directory."; |
| this->SetError(e.c_str()); |
| cmSystemTools::SetFatalErrorOccured(); |
| return false; |
| } |
| std::string errorMessage; |
| if (!this->NewLineStyle.ReadFromArguments(args, errorMessage)) |
| { |
| this->SetError(errorMessage.c_str()); |
| return false; |
| } |
| this->CopyOnly = false; |
| this->EscapeQuotes = false; |
| |
| this->AtOnly = false; |
| for(unsigned int i=2;i < args.size();++i) |
| { |
| if(args[i] == "COPYONLY") |
| { |
| this->CopyOnly = true; |
| if (this->NewLineStyle.IsValid()) |
| { |
| this->SetError("COPYONLY could not be used in combination " |
| "with NEWLINE_STYLE"); |
| return false; |
| } |
| } |
| else if(args[i] == "ESCAPE_QUOTES") |
| { |
| this->EscapeQuotes = true; |
| } |
| else if(args[i] == "@ONLY") |
| { |
| this->AtOnly = true; |
| } |
| else if(args[i] == "IMMEDIATE") |
| { |
| /* Ignore legacy option. */ |
| } |
| } |
| |
| if ( !this->ConfigureFile() ) |
| { |
| this->SetError("Problem configuring file"); |
| return false; |
| } |
| |
| return true; |
| } |
| |
| int cmConfigureFileCommand::ConfigureFile() |
| { |
| return this->Makefile->ConfigureFile( |
| this->InputFile.c_str(), |
| this->OutputFile.c_str(), |
| this->CopyOnly, |
| this->AtOnly, |
| this->EscapeQuotes, |
| this->NewLineStyle); |
| } |
| |
| |