summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Source/cmConfigureFileCommand.cxx29
-rw-r--r--Source/cmConfigureFileCommand.h10
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. "