I'm creating a Linux tgz self-extracting installer using CPack and I'd like the installer to run a script or sequence of commands after all files have been installed. CPack documentation contains the following guidance:
CPACK_INSTALL_COMMANDS Extra commands to install components.
I set this variable in my CMakeLists.txt file and I see it set in the resulting CPackConfig.cmake file, but the commands I embed in this variable do not appear anywhere in the final .sh install script. What am I missing?
You're not missing anything, that's simply not how the
CPACK_INSTALL_COMMANDSvariable works.On a typical project, CPack does a
make installinto a temporary location, in order to build the final installer based on themake installtree. TheCPACK_INSTALL_COMMANDSvariable is meant to be set for projects that would rather run some other command sequence, instead of the typicalmake installin order to produce the install tree.So, CPack should be running your commands as it generates the package. It will not run your commands on the end user's machine at the end of him/her running the generated installation script...
There are per-generator ways of running installed executables and/or scripts at the end of the end user installation, but it will require some customization on your part. In this case, I'd recommend attempting to override the
CPack.STGZ_Header.sh.ininput file that is used when CPack generates the STGZ self-extracting script. Customize that file and add your calls to the bottom of it, above the line:To override the file, provide your own copy of it in your source tree, perhaps in a
${CMAKE_CURRENT_SOURCE_DIR}/CMakedirectory, and then in yourCMakeLists.txtfile, add:(Actually, as I'm writing this, I'm wondering if that's sufficient, or if the module path also needs to be set at the time that CPack runs... Try this, and let us know if your customization gets used by CPack or not. If not, I'll investigate a bit further and add some more advice here.)