|
@@ -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);
|
|
|
+}
|