install: Allow generator expressions in DIRECTORY
Teach install(DIRECTORY) to support generator expressions in the list of directories, much like install(FILES) already supports.
This commit is contained in:
parent
b5009720d3
commit
630c8aa843
|
@ -271,9 +271,10 @@ will install the ``icons`` directory to ``share/myproj/icons`` and the
|
|||
file permissions, the scripts will be given specific permissions, and any
|
||||
``CVS`` directories will be excluded.
|
||||
|
||||
The install destination given to the directory install ``DESTINATION`` may
|
||||
use "generator expressions" with the syntax ``$<...>``. See the
|
||||
:manual:`cmake-generator-expressions(7)` manual for available expressions.
|
||||
The list of ``dirs...`` given to ``DIRECTORY`` and the install destination
|
||||
given to the directory install ``DESTINATION`` may use "generator expressions"
|
||||
with the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)`
|
||||
manual for available expressions.
|
||||
|
||||
Custom Installation Logic
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
install-DIRECTORY-genex
|
||||
-----------------------
|
||||
|
||||
* The :command:`install(DIRECTORY)` command learned to support
|
||||
:manual:`generator expressions <cmake-generator-expressions(7)>`
|
||||
in the list of directories.
|
|
@ -36,6 +36,16 @@ cmInstallDirectoryGenerator
|
|||
{
|
||||
this->ActionsPerConfig = true;
|
||||
}
|
||||
|
||||
// We need per-config actions if any directories have generator expressions.
|
||||
for(std::vector<std::string>::const_iterator i = dirs.begin();
|
||||
!this->ActionsPerConfig && i != dirs.end(); ++i)
|
||||
{
|
||||
if(cmGeneratorExpression::Find(*i) != std::string::npos)
|
||||
{
|
||||
this->ActionsPerConfig = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
@ -60,7 +70,7 @@ cmInstallDirectoryGenerator::GenerateScriptActions(std::ostream& os,
|
|||
}
|
||||
else
|
||||
{
|
||||
this->AddDirectoryInstallRule(os, "", indent);
|
||||
this->AddDirectoryInstallRule(os, "", indent, this->Directories);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -69,20 +79,30 @@ void cmInstallDirectoryGenerator::GenerateScriptForConfig(
|
|||
const std::string& config,
|
||||
Indent const& indent)
|
||||
{
|
||||
this->AddDirectoryInstallRule(os, config, indent);
|
||||
std::vector<std::string> dirs;
|
||||
cmGeneratorExpression ge;
|
||||
for(std::vector<std::string>::const_iterator i = this->Directories.begin();
|
||||
i != this->Directories.end(); ++i)
|
||||
{
|
||||
cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(*i);
|
||||
cmSystemTools::ExpandListArgument(cge->Evaluate(
|
||||
this->LocalGenerator, config), dirs);
|
||||
}
|
||||
this->AddDirectoryInstallRule(os, config, indent, dirs);
|
||||
}
|
||||
|
||||
void cmInstallDirectoryGenerator::AddDirectoryInstallRule(
|
||||
std::ostream& os,
|
||||
const std::string& config,
|
||||
Indent const& indent)
|
||||
Indent const& indent,
|
||||
std::vector<std::string> const& dirs)
|
||||
{
|
||||
// Write code to install the directories.
|
||||
const char* no_rename = 0;
|
||||
this->AddInstallRule(os,
|
||||
this->GetDestination(config),
|
||||
cmInstallType_DIRECTORY,
|
||||
this->Directories,
|
||||
dirs,
|
||||
this->Optional,
|
||||
this->FilePermissions.c_str(),
|
||||
this->DirPermissions.c_str(),
|
||||
|
|
|
@ -42,7 +42,8 @@ protected:
|
|||
Indent const& indent);
|
||||
void AddDirectoryInstallRule(std::ostream& os,
|
||||
const std::string& config,
|
||||
Indent const& indent);
|
||||
Indent const& indent,
|
||||
std::vector<std::string> const& dirs);
|
||||
cmLocalGenerator* LocalGenerator;
|
||||
std::vector<std::string> Directories;
|
||||
std::string FilePermissions;
|
||||
|
|
|
@ -551,5 +551,5 @@ install(
|
|||
ARCHIVE DESTINATION lib
|
||||
INCLUDES DESTINATION include/abs
|
||||
)
|
||||
install(DIRECTORY include/abs DESTINATION $<1:include>$<0:/wrong>)
|
||||
install(DIRECTORY $<1:include/abs>$<0:/wrong> DESTINATION $<1:include>$<0:/wrong>)
|
||||
install(EXPORT expAbs NAMESPACE expAbs_ DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/expAbs)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1,6 @@
|
|||
CMake Error:
|
||||
Error evaluating generator expression:
|
||||
|
||||
\$<NOTAGENEX>
|
||||
|
||||
Expression did not evaluate to a known generator expression
|
|
@ -0,0 +1 @@
|
|||
install(DIRECTORY $<NOTAGENEX> DESTINATION .)
|
|
@ -6,6 +6,7 @@ run_cmake(DIRECTORY-message-lazy)
|
|||
run_cmake(SkipInstallRulesWarning)
|
||||
run_cmake(SkipInstallRulesNoWarning1)
|
||||
run_cmake(SkipInstallRulesNoWarning2)
|
||||
run_cmake(DIRECTORY-DIRECTORY-bad)
|
||||
run_cmake(DIRECTORY-DESTINATION-bad)
|
||||
run_cmake(FILES-DESTINATION-bad)
|
||||
run_cmake(TARGETS-DESTINATION-bad)
|
||||
|
|
|
@ -252,7 +252,7 @@ else()
|
|||
file(REMOVE_RECURSE "${CMAKE_INSTALL_PREFIX}/MyTest/share/CVS")
|
||||
file(REMOVE_RECURSE "${CMAKE_INSTALL_PREFIX}/MyTest/share/TestSubDir/CVS")
|
||||
install(
|
||||
DIRECTORY TestSubDir scripts/ DESTINATION $<1:MyTest/share>$<0:/wrong>
|
||||
DIRECTORY TestSubDir $<1:scripts/>$<0:/wrong> DESTINATION $<1:MyTest/share>$<0:/wrong>
|
||||
FILE_PERMISSIONS OWNER_READ OWNER_WRITE
|
||||
DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
||||
GROUP_READ GROUP_EXECUTE
|
||||
|
@ -263,7 +263,7 @@ else()
|
|||
|
||||
# Alternate directory installation for coverage.
|
||||
install(
|
||||
DIRECTORY scripts/ DESTINATION $<1:MyTest/share/alt>$<0:/wrong>
|
||||
DIRECTORY $<1:scripts/>$<0:/wrong> DESTINATION $<1:MyTest/share/alt>$<0:/wrong>
|
||||
COMPONENT Development
|
||||
USE_SOURCE_PERMISSIONS
|
||||
PATTERN "CVS" EXCLUDE
|
||||
|
|
|
@ -252,7 +252,7 @@ else()
|
|||
file(REMOVE_RECURSE "${CMAKE_INSTALL_PREFIX}/MyTest/share/CVS")
|
||||
file(REMOVE_RECURSE "${CMAKE_INSTALL_PREFIX}/MyTest/share/TestSubDir/CVS")
|
||||
install(
|
||||
DIRECTORY TestSubDir scripts/ DESTINATION $<1:MyTest/share>$<0:/wrong>
|
||||
DIRECTORY TestSubDir $<1:scripts/>$<0:/wrong> DESTINATION $<1:MyTest/share>$<0:/wrong>
|
||||
FILE_PERMISSIONS OWNER_READ OWNER_WRITE
|
||||
DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
||||
GROUP_READ GROUP_EXECUTE
|
||||
|
@ -263,7 +263,7 @@ else()
|
|||
|
||||
# Alternate directory installation for coverage.
|
||||
install(
|
||||
DIRECTORY scripts/ DESTINATION $<1:MyTest/share/alt>$<0:/wrong>
|
||||
DIRECTORY $<1:scripts/>$<0:/wrong> DESTINATION $<1:MyTest/share/alt>$<0:/wrong>
|
||||
COMPONENT Development
|
||||
USE_SOURCE_PERMISSIONS
|
||||
PATTERN "CVS" EXCLUDE
|
||||
|
|
Loading…
Reference in New Issue