diff options
-rw-r--r-- | Source/cmConfigureFileCommand.cxx | 29 | ||||
-rw-r--r-- | Source/cmConfigureFileCommand.h | 10 |
2 files changed, 27 insertions, 12 deletions
diff --git a/Source/cmConfigureFileCommand.cxx b/Source/cmConfigureFileCommand.cxx index 8a0377884f..051fe2885d 100644 --- a/Source/cmConfigureFileCommand.cxx +++ b/Source/cmConfigureFileCommand.cxx @@ -27,8 +27,23 @@ bool cmConfigureFileCommand this->SetError("called with incorrect number of arguments, expected 2"); return false; } - this->InputFile = args[0]; - this->OutputFile = args[1]; + + const char* inFile = args[0].c_str(); + if(!cmSystemTools::FileIsFullPath(inFile)) + { + this->InputFile = this->Makefile->GetCurrentDirectory(); + this->InputFile += "/"; + } + this->InputFile += inFile; + + const char* outFile = args[1].c_str(); + if(!cmSystemTools::FileIsFullPath(outFile)) + { + this->OutputFile = this->Makefile->GetCurrentOutputDirectory(); + this->OutputFile += "/"; + } + this->OutputFile += outFile; + if ( !this->Makefile->CanIWriteThisFile(this->OutputFile.c_str()) ) { std::string e = "attempted to configure a file: " + this->OutputFile @@ -89,14 +104,8 @@ void cmConfigureFileCommand::FinalPass() int cmConfigureFileCommand::ConfigureFile() { - std::string inFile = this->InputFile; - if (!cmSystemTools::FileIsFullPath(inFile.c_str())) - { - inFile = this->Makefile->GetStartDirectory(); - inFile += "/"; - inFile += this->InputFile; - } - return this->Makefile->ConfigureFile(inFile.c_str(), + return this->Makefile->ConfigureFile( + this->InputFile.c_str(), this->OutputFile.c_str(), this->CopyOnly, this->AtOnly, diff --git a/Source/cmConfigureFileCommand.h b/Source/cmConfigureFileCommand.h index 9e22897d24..58ce10a12a 100644 --- a/Source/cmConfigureFileCommand.h +++ b/Source/cmConfigureFileCommand.h @@ -60,9 +60,15 @@ public: virtual const char* GetFullDocumentation() { return - " configure_file(InputFile OutputFile\n" + " configure_file(<input> <output>\n" " [COPYONLY] [ESCAPE_QUOTES] [@ONLY])\n" - "The Input and Output files have to have full paths. " + "Copies a file <input> to file <output> and substitutes variable " + "values referenced in the file content. " + "If <input> is a relative path it is evaluated with respect to " + "the current source directory. " + "If <output> is a relative path it is evaluated with respect to " + "the current binary directory. " + "\n" "This command replaces any variables in the input file referenced as " "${VAR} or @VAR@ with their values as determined by CMake. If a " "variable is not defined, it will be replaced with nothing. " |