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 controled 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()  

-