Teach configure_file to handle directory names
This commit teaches configure_file how to handle directories for input and output. It is an error if the input is a directory. If the output is a directory we put the configured copy of the input file in it with the same name. See issue #9537.
This commit is contained in:
parent
700cdf393a
commit
6e8aeba415
@ -36,6 +36,17 @@ bool cmConfigureFileCommand
|
|||||||
}
|
}
|
||||||
this->InputFile += inFile;
|
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();
|
const char* outFile = args[1].c_str();
|
||||||
if(!cmSystemTools::FileIsFullPath(outFile))
|
if(!cmSystemTools::FileIsFullPath(outFile))
|
||||||
{
|
{
|
||||||
@ -44,6 +55,13 @@ bool cmConfigureFileCommand
|
|||||||
}
|
}
|
||||||
this->OutputFile += outFile;
|
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()) )
|
if ( !this->Makefile->CanIWriteThisFile(this->OutputFile.c_str()) )
|
||||||
{
|
{
|
||||||
std::string e = "attempted to configure a file: " + this->OutputFile
|
std::string e = "attempted to configure a file: " + this->OutputFile
|
||||||
|
@ -66,8 +66,11 @@ public:
|
|||||||
"values referenced in the file content. "
|
"values referenced in the file content. "
|
||||||
"If <input> is a relative path it is evaluated with respect to "
|
"If <input> is a relative path it is evaluated with respect to "
|
||||||
"the current source directory. "
|
"the current source directory. "
|
||||||
|
"The <input> must be a file, not a directory. "
|
||||||
"If <output> is a relative path it is evaluated with respect to "
|
"If <output> is a relative path it is evaluated with respect to "
|
||||||
"the current binary directory. "
|
"the current binary directory. "
|
||||||
|
"If <output> names an existing directory the input file is placed "
|
||||||
|
"in that directory with its original name. "
|
||||||
"\n"
|
"\n"
|
||||||
"This command replaces any variables in the input file referenced as "
|
"This command replaces any variables in the input file referenced as "
|
||||||
"${VAR} or @VAR@ with their values as determined by CMake. If a "
|
"${VAR} or @VAR@ with their values as determined by CMake. If a "
|
||||||
|
Loading…
x
Reference in New Issue
Block a user