| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | /*============================================================================  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>// cmConfigureFileCommandbool 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))    {    cmOStringStream e;    e << "input location\n"      << "  " << this->InputFile << "\n"      << "is a directory but a file was expected.";    this->SetError(e.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))    {    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);    cmSystemTools::SetFatalErrorOccured();    return false;    }  std::string errorMessage;  if (!this->NewLineStyle.ReadFromArguments(args, errorMessage))    {    this->SetError(errorMessage);    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);}
 |