From c836be6f7bf92f209adfa1673a8252937ed8e537 Mon Sep 17 00:00:00 2001
From: Andy Cedilnik <andy.cedilnik@kitware.com>
Date: Fri, 14 Apr 2006 08:58:13 -0400
Subject: ENH: Start adding support for packaging component and to package into
 a subdirectory

---
 Modules/CPack.cmake                      |  2 +-
 Source/CPack/cmCPackGenericGenerator.cxx | 16 ++++++++++++++++
 Templates/CPackConfig.cmake.in           |  5 ++++-
 3 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/Modules/CPack.cmake b/Modules/CPack.cmake
index 86eca58..06313c7 100644
--- a/Modules/CPack.cmake
+++ b/Modules/CPack.cmake
@@ -69,7 +69,7 @@ ENDIF(NOT CPACK_GENERATOR)
 # Set some other variables
 cpack_set_if_not_set(CPACK_BINARY_DIR "${CMAKE_BINARY_DIR}")
 cpack_set_if_not_set(CPACK_INSTALL_CMAKE_PROJECTS
-  "${CMAKE_BINARY_DIR};${CMAKE_PROJECT_NAME}")
+  "${CMAKE_BINARY_DIR};${CMAKE_PROJECT_NAME};ALL;/")
 cpack_set_if_not_set(CPACK_CMAKE_GENERATOR "${CMAKE_GENERATOR}")
 
 SET(_CPACK_UNUSED_VARIABLES_)
diff --git a/Source/CPack/cmCPackGenericGenerator.cxx b/Source/CPack/cmCPackGenericGenerator.cxx
index 7669c5f..a26f1e2 100644
--- a/Source/CPack/cmCPackGenericGenerator.cxx
+++ b/Source/CPack/cmCPackGenericGenerator.cxx
@@ -252,9 +252,25 @@ int cmCPackGenericGenerator::InstallProject()
       it != cmakeProjectsVector.end();
       ++it )
       {
+      if ( it+1 == cmakeProjectsVector.end() ||
+        it+2 == cmakeProjectsVector.end() ||
+        it+3 == cmakeProjectsVector.end() )
+        {
+        cmCPackLogger(cmCPackLog::LOG_ERROR,
+          "Not enough items on list: CPACK_INSTALL_CMAKE_PROJECTS. "
+          "CPACK_INSTALL_CMAKE_PROJECTS should hold quadruplet of install "
+          "directory, install project name, install component, and install "
+          "subdirectory."
+          << std::endl);
+        return 0;
+        }
       std::string installDirectory = it->c_str();
       ++it;
       std::string installProjectName = it->c_str();
+      ++it;
+      std::string installComponent = it->c_str();
+      ++it;
+      std::string installSubDirectory = it->c_str();
       std::string installFile = installDirectory + "/cmake_install.cmake";
 
       const char* buildConfig = this->GetOption("CPACK_BUILD_CONFIG");
diff --git a/Templates/CPackConfig.cmake.in b/Templates/CPackConfig.cmake.in
index 0f4ecd0..0406392 100644
--- a/Templates/CPackConfig.cmake.in
+++ b/Templates/CPackConfig.cmake.in
@@ -1,8 +1,11 @@
 # This file will be configured to contain variables for CPack. These variables
 # should be set in the CMake list file of the project before CPack module is
 # included. Example variables are:
-#   CPACK_BINARY_DIR                    - Path to the build tree
 #   CPACK_GENERATOR                     - Generator used to create package
+#   CPACK_INSTALL_CMAKE_PROJECTS        - For each project (path, name, component)
+#   CPACK_CMAKE_GENERATOR               - CMake Generator used for the projects
+#   CPACK_INSTALL_COMMANDS              - Extra commands to install components
+#   CPACK_INSTALL_DIRECTORIES           - Extra directories to install
 #   CPACK_PACKAGE_DESCRIPTION_FILE      - Description file for the package
 #   CPACK_PACKAGE_DESCRIPTION_SUMMARY   - Summary of the package
 #   CPACK_PACKAGE_EXECUTABLES           - List of pairs of executables and labels
-- 
cgit v0.12