summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Goulet <robert.goulet@autodesk.com>2015-09-23 17:40:27 (GMT)
committerBrad King <brad.king@kitware.com>2015-09-23 18:37:17 (GMT)
commit17aa6fd36284ad937bfce370cf8d5e5de87a334b (patch)
tree2305380ddecce1f8de5c617c65c4ea729d347901
parentc3b3284c931d6368e4f100fc19ed8f2efdebd9fa (diff)
downloadCMake-17aa6fd36284ad937bfce370cf8d5e5de87a334b.zip
CMake-17aa6fd36284ad937bfce370cf8d5e5de87a334b.tar.gz
CMake-17aa6fd36284ad937bfce370cf8d5e5de87a334b.tar.bz2
install: Allow generator expressions in FILES DESTINATION
-rw-r--r--Help/command/install.rst4
-rw-r--r--Help/release/dev/install-files-dest-genex.rst5
-rw-r--r--Source/cmInstallFilesGenerator.cxx25
-rw-r--r--Source/cmInstallFilesGenerator.h6
4 files changed, 35 insertions, 5 deletions
diff --git a/Help/command/install.rst b/Help/command/install.rst
index c99ed73..9c17bba 100644
--- a/Help/command/install.rst
+++ b/Help/command/install.rst
@@ -192,6 +192,10 @@ The list of ``files...`` given to ``FILES`` or ``PROGRAMS`` may use
However, if any item begins in a generator expression it must evaluate
to a full path.
+The install destination given to the files install ``DESTINATION`` may
+use "generator expressions" with the syntax ``$<...>``. See the
+:manual:`cmake-generator-expressions(7)` manual for available expressions.
+
Installing Directories
^^^^^^^^^^^^^^^^^^^^^^
diff --git a/Help/release/dev/install-files-dest-genex.rst b/Help/release/dev/install-files-dest-genex.rst
new file mode 100644
index 0000000..b7aa8b3
--- /dev/null
+++ b/Help/release/dev/install-files-dest-genex.rst
@@ -0,0 +1,5 @@
+install-files-dest-genex
+------------------------
+
+* The :command:`install(FILES)` command ``DESTINATION`` option learned to
+ support :manual:`generator expressions <cmake-generator-expressions(7)>`.
diff --git a/Source/cmInstallFilesGenerator.cxx b/Source/cmInstallFilesGenerator.cxx
index c18b174..e2c16c8 100644
--- a/Source/cmInstallFilesGenerator.cxx
+++ b/Source/cmInstallFilesGenerator.cxx
@@ -34,6 +34,12 @@ cmInstallFilesGenerator
Programs(programs),
Optional(optional)
{
+ // We need per-config actions if the destination has generator expressions.
+ if(cmGeneratorExpression::Find(Destination) != std::string::npos)
+ {
+ this->ActionsPerConfig = true;
+ }
+
// 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)
@@ -57,14 +63,25 @@ void cmInstallFilesGenerator::Compute(cmLocalGenerator* lg)
}
//----------------------------------------------------------------------------
+std::string
+cmInstallFilesGenerator::GetDestination(std::string const& config) const
+{
+ cmGeneratorExpression ge;
+ return ge.Parse(this->Destination)
+ ->Evaluate(this->LocalGenerator->GetMakefile(), config);
+}
+
+//----------------------------------------------------------------------------
void cmInstallFilesGenerator::AddFilesInstallRule(
- std::ostream& os, Indent const& indent,
+ std::ostream& os,
+ const std::string config,
+ Indent const& indent,
std::vector<std::string> const& files)
{
// Write code to install the files.
const char* no_dir_permissions = 0;
this->AddInstallRule(os,
- this->Destination,
+ this->GetDestination(config),
(this->Programs
? cmInstallType_PROGRAMS
: cmInstallType_FILES),
@@ -84,7 +101,7 @@ void cmInstallFilesGenerator::GenerateScriptActions(std::ostream& os,
}
else
{
- this->AddFilesInstallRule(os, indent, this->Files);
+ this->AddFilesInstallRule(os, "", indent, this->Files);
}
}
@@ -102,5 +119,5 @@ void cmInstallFilesGenerator::GenerateScriptForConfig(std::ostream& os,
cmSystemTools::ExpandListArgument(cge->Evaluate(
this->LocalGenerator->GetMakefile(), config), files);
}
- this->AddFilesInstallRule(os, indent, files);
+ this->AddFilesInstallRule(os, config, indent, files);
}
diff --git a/Source/cmInstallFilesGenerator.h b/Source/cmInstallFilesGenerator.h
index 00b3a79..bfe4039 100644
--- a/Source/cmInstallFilesGenerator.h
+++ b/Source/cmInstallFilesGenerator.h
@@ -32,12 +32,16 @@ public:
void Compute(cmLocalGenerator* lg);
+ std::string GetDestination(std::string const& config) const;
+
protected:
virtual void GenerateScriptActions(std::ostream& os, Indent const& indent);
virtual void GenerateScriptForConfig(std::ostream& os,
const std::string& config,
Indent const& indent);
- void AddFilesInstallRule(std::ostream& os, Indent const& indent,
+ void AddFilesInstallRule(std::ostream& os,
+ const std::string config,
+ Indent const& indent,
std::vector<std::string> const& files);
cmLocalGenerator* LocalGenerator;