[Cmake-commits] CMake branch, next, updated. v3.6.2-2469-gccf06ce
Brad King
brad.king at kitware.com
Mon Sep 26 09:02:27 EDT 2016
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".
The branch, next has been updated
via ccf06ce07151b3e67e8673976d74f03a081eb9de (commit)
via 06dea230ae7bb082a4b8fd38226791d0025792a8 (commit)
from db5b6bf630ddcee02f97bdf368440692250c8d34 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ccf06ce07151b3e67e8673976d74f03a081eb9de
commit ccf06ce07151b3e67e8673976d74f03a081eb9de
Merge: db5b6bf 06dea23
Author: Brad King <brad.king at kitware.com>
AuthorDate: Mon Sep 26 09:02:26 2016 -0400
Commit: CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon Sep 26 09:02:26 2016 -0400
Merge topic 'CPackNSIS-per-component-install' into next
06dea230 CPack/NSIS: Add custom component install directory
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=06dea230ae7bb082a4b8fd38226791d0025792a8
commit 06dea230ae7bb082a4b8fd38226791d0025792a8
Author: Roman Wüger <roman.wueger at gmx.at>
AuthorDate: Fri Sep 23 09:28:35 2016 +0200
Commit: Brad King <brad.king at kitware.com>
CommitDate: Mon Sep 26 09:01:59 2016 -0400
CPack/NSIS: Add custom component install directory
diff --git a/Modules/CPackNSIS.cmake b/Modules/CPackNSIS.cmake
index db5984a..4693ce5 100644
--- a/Modules/CPackNSIS.cmake
+++ b/Modules/CPackNSIS.cmake
@@ -96,6 +96,11 @@
# Contact information for questions and comments about the installation
# process.
#
+# .. variable:: CPACK_NSIS_<compName>_INSTALL_DIRECTORY
+#
+# Custom install directory for the specified component <compName> instead
+# of $INSTDIR.
+#
# .. variable:: CPACK_NSIS_CREATE_ICONS_EXTRA
#
# Additional NSIS commands for creating start menu shortcuts.
diff --git a/Source/CPack/cmCPackNSISGenerator.cxx b/Source/CPack/cmCPackNSISGenerator.cxx
index 2db94f1..b49da7f 100644
--- a/Source/CPack/cmCPackNSISGenerator.cxx
+++ b/Source/CPack/cmCPackNSISGenerator.cxx
@@ -71,14 +71,26 @@ int cmCPackNSISGenerator::PackageFiles()
std::ostringstream str;
std::vector<std::string>::const_iterator it;
for (it = files.begin(); it != files.end(); ++it) {
+ std::string outputDir = "$INSTDIR";
std::string fileN =
cmSystemTools::RelativePath(toplevel.c_str(), it->c_str());
if (!this->Components.empty()) {
+ const std::string::size_type pos = fileN.find('/');
+
+ // Use the custom component install directory if we have one
+ if (pos != std::string::npos) {
+ const std::string componentName = fileN.substr(0, pos);
+ outputDir = CustomComponentInstallDirectory(componentName);
+ } else {
+ outputDir = CustomComponentInstallDirectory(fileN);
+ }
+
// Strip off the component part of the path.
- fileN = fileN.substr(fileN.find('/') + 1, std::string::npos);
+ fileN = fileN.substr(pos + 1, std::string::npos);
}
std::replace(fileN.begin(), fileN.end(), '/', '\\');
- str << " Delete \"$INSTDIR\\" << fileN << "\"" << std::endl;
+
+ str << " Delete \"" << outputDir << "\\" << fileN << "\"" << std::endl;
}
cmCPackLogger(cmCPackLog::LOG_DEBUG, "Uninstall Files: " << str.str()
<< std::endl);
@@ -108,7 +120,12 @@ int cmCPackNSISGenerator::PackageFiles()
}
}
std::replace(fileN.begin(), fileN.end(), '/', '\\');
- dstr << " RMDir \"$INSTDIR\\" << fileN << "\"" << std::endl;
+
+ const std::string componentOutputDir =
+ CustomComponentInstallDirectory(componentName);
+
+ dstr << " RMDir \"" << componentOutputDir << "\\" << fileN << "\""
+ << std::endl;
if (!componentName.empty()) {
this->Components[componentName].Directories.push_back(fileN);
}
@@ -650,7 +667,10 @@ std::string cmCPackNSISGenerator::CreateComponentDescription(
}
componentCode += " SectionIn" + out.str() + "\n";
}
- componentCode += " SetOutPath \"$INSTDIR\"\n";
+
+ const std::string componentOutputDir =
+ CustomComponentInstallDirectory(component->Name);
+ componentCode += " SetOutPath \"" + componentOutputDir + "\"\n";
// Create the actual installation commands
if (component->IsDownloaded) {
@@ -796,13 +816,13 @@ std::string cmCPackNSISGenerator::CreateComponentDescription(
++pathIt) {
path = *pathIt;
std::replace(path.begin(), path.end(), '/', '\\');
- macrosOut << " Delete \"$INSTDIR\\" << path << "\"\n";
+ macrosOut << " Delete \"" << componentOutputDir << "\\" << path << "\"\n";
}
for (pathIt = component->Directories.begin();
pathIt != component->Directories.end(); ++pathIt) {
path = *pathIt;
std::replace(path.begin(), path.end(), '/', '\\');
- macrosOut << " RMDir \"$INSTDIR\\" << path << "\"\n";
+ macrosOut << " RMDir \"" << componentOutputDir << "\\" << path << "\"\n";
}
macrosOut << " noremove_" << component->Name << ":\n";
macrosOut << "!macroend\n";
@@ -914,6 +934,15 @@ std::string cmCPackNSISGenerator::CreateComponentGroupDescription(
return code;
}
+std::string cmCPackNSISGenerator::CustomComponentInstallDirectory(
+ const std::string& componentName)
+{
+ const char* outputDir =
+ this->GetOption("CPACK_NSIS_" + componentName + "_INSTALL_DIRECTORY");
+ const std::string componentOutputDir = (outputDir ? outputDir : "$INSTDIR");
+ return componentOutputDir;
+}
+
std::string cmCPackNSISGenerator::TranslateNewlines(std::string str)
{
cmSystemTools::ReplaceString(str, "\n", "$\\r$\\n");
diff --git a/Source/CPack/cmCPackNSISGenerator.h b/Source/CPack/cmCPackNSISGenerator.h
index ae03e6b..bd7d752 100644
--- a/Source/CPack/cmCPackNSISGenerator.h
+++ b/Source/CPack/cmCPackNSISGenerator.h
@@ -84,6 +84,11 @@ protected:
std::string CreateComponentGroupDescription(cmCPackComponentGroup* group,
std::ostream& macrosOut);
+ /// Returns the custom install directory if available for the specified
+ /// component, otherwise $INSTDIR is returned.
+ std::string CustomComponentInstallDirectory(
+ const std::string& componentName);
+
/// Translations any newlines found in the string into \\r\\n, so that the
/// resulting string can be used within NSIS.
static std::string TranslateNewlines(std::string str);
-----------------------------------------------------------------------
Summary of changes:
hooks/post-receive
--
CMake
More information about the Cmake-commits
mailing list