cpack.cxx

cmCPackGenerators  -- creates cmCPackGenericGenerator's via NewGenerator
  - a cmCPackGenericGenerator factory


cmCPackGenericGenerator::Initialize
   this->InitializeInternal
     CPACK_INCLUDE_TOPLEVEL_DIRECTORY = 0 turns off


// binary package run
cmCPackGenericGenerator::ProcessGenerator   // DoPackage
  cmCPackGenericGenerator::PrepareNames  -- sets a bunch of CPACK_vars
  cmCPackGenericGenerator::InstallProject
     run preinstall  (make preinstall/fast)
     call ReadListFile(cmake_install.cmake)
  glob recurse in install directory to get list of files
     this->CompressFiles with the list of files


// source package run
cmCPackGenericGenerator::ProcessGenerator   // DoPackage
  cmCPackGenericGenerator::PrepareNames  -- sets a bunch of CPACK_vars
  cmCPackGenericGenerator::InstallProject  -->
     if set CPACK_INSTALLED_DIRECTORIES
        glob the files in that directory
        copy those files to the tmp install directory _CPack something
  glob recurse in install directory to get list of files
     this->CompressFiles with the list of files


cmCPackGenericGenerator::InstallProject is used for both source and binary
packages.  It is controlled based on values set in CPACK_ variables.


InstallProject
   1. CPACK_INSTALL_COMMANDS       - a list of commands used to install the package

   2. CPACK_INSTALLED_DIRECTORIES  - copy this directory to CPACK_TEMPORARY_DIRECTORY

   3. CPACK_INSTALL_CMAKE_PROJECTS - a cmake install script
         - run make preinstall
         - run cmake_install.cmake
             - set CMAKE_INSTALL_PREFIX to the temp directory
             - CPACK_BUILD_CONFIG check this and set the BUILD_TYPE to it
              - ReadListFile on the install script  cmake_install.cmake
         - run strip on the executables and libraries if CPACK_STRIP_FILES is TRUE

Recommendations:

rename cmCPackGenerators  to cmCPackGeneratorFactory

rename cmCPackGenericGenerator  -->  cmCPackGenerator

rename cmCPackGenericGenerator::ProcessGenerator  -> cmCPackGenerator::DoPackage


break up cmCPackGenerator::InstallProject so it calls the following:

// run user provided install commands
  cmCPackGenerator::RunInstallCommands();
// copy entire directories that need no processing like source trees
  cmCPackGenerator::CopyPreInstalledDirectories();
// run the cmake install scripts if provided
  cmCPackGenerator::RunCMakeInstallScripts()

-
