From 700cdf393af6aec04917a190122d7d46a1ba720e Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 16 Sep 2009 15:09:29 -0400 Subject: Teach configure_file to handle relative paths The configure_file() command now converts relative output paths to full paths using the current binary directory. Input relative paths were already converted using the current source directory, but this behavior was not previously documented. --- Source/cmConfigureFileCommand.cxx | 29 +++++++++++++++++++---------- Source/cmConfigureFileCommand.h | 10 ++++++++-- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/Source/cmConfigureFileCommand.cxx b/Source/cmConfigureFileCommand.cxx index 8a03778..051fe28 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 9e22897..58ce10a 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( \n" " [COPYONLY] [ESCAPE_QUOTES] [@ONLY])\n" - "The Input and Output files have to have full paths. " + "Copies a file to file and substitutes variable " + "values referenced in the file content. " + "If is a relative path it is evaluated with respect to " + "the current source directory. " + "If 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. " -- cgit v0.12