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