mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-30 02:59:22 -05:00
install: Support generator expressions in FILES and PROGRAMS mode
Teach the install(FILES) and install(PROGRAMS) commands to evaluate generator expressions in the list of files. Extend the ExportImport test to cover installation cases involving generator expressions.
This commit is contained in:
@@ -11,6 +11,9 @@
|
||||
============================================================================*/
|
||||
#include "cmInstallFilesGenerator.h"
|
||||
|
||||
#include "cmGeneratorExpression.h"
|
||||
#include "cmSystemTools.h"
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
cmInstallFilesGenerator
|
||||
::cmInstallFilesGenerator(cmMakefile* mf,
|
||||
@@ -27,6 +30,15 @@ cmInstallFilesGenerator
|
||||
FilePermissions(file_permissions),
|
||||
Rename(rename), Optional(optional)
|
||||
{
|
||||
// We need per-config actions if any files have generator expressions.
|
||||
for(std::vector<std::string>::const_iterator i = files.begin();
|
||||
!this->ActionsPerConfig && i != files.end(); ++i)
|
||||
{
|
||||
if(cmGeneratorExpression::Find(*i) != std::string::npos)
|
||||
{
|
||||
this->ActionsPerConfig = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -36,8 +48,9 @@ cmInstallFilesGenerator
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmInstallFilesGenerator::GenerateScriptActions(std::ostream& os,
|
||||
Indent const& indent)
|
||||
void cmInstallFilesGenerator::AddFilesInstallRule(
|
||||
std::ostream& os, Indent const& indent,
|
||||
std::vector<std::string> const& files)
|
||||
{
|
||||
// Write code to install the files.
|
||||
const char* no_dir_permissions = 0;
|
||||
@@ -45,8 +58,40 @@ void cmInstallFilesGenerator::GenerateScriptActions(std::ostream& os,
|
||||
(this->Programs
|
||||
? cmInstallType_PROGRAMS
|
||||
: cmInstallType_FILES),
|
||||
this->Files,
|
||||
files,
|
||||
this->Optional,
|
||||
this->FilePermissions.c_str(), no_dir_permissions,
|
||||
this->Rename.c_str(), 0, indent);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmInstallFilesGenerator::GenerateScriptActions(std::ostream& os,
|
||||
Indent const& indent)
|
||||
{
|
||||
if(this->ActionsPerConfig)
|
||||
{
|
||||
this->cmInstallGenerator::GenerateScriptActions(os, indent);
|
||||
}
|
||||
else
|
||||
{
|
||||
this->AddFilesInstallRule(os, indent, this->Files);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmInstallFilesGenerator::GenerateScriptForConfig(std::ostream& os,
|
||||
const char* config,
|
||||
Indent const& indent)
|
||||
{
|
||||
std::vector<std::string> files;
|
||||
cmListFileBacktrace lfbt;
|
||||
cmGeneratorExpression ge(lfbt);
|
||||
for(std::vector<std::string>::const_iterator i = this->Files.begin();
|
||||
i != this->Files.end(); ++i)
|
||||
{
|
||||
cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(*i);
|
||||
cmSystemTools::ExpandListArgument(cge->Evaluate(this->Makefile, config),
|
||||
files);
|
||||
}
|
||||
this->AddFilesInstallRule(os, indent, files);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user