CPack/RPM: Setting CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE ON breaks 'CPACK_RPM_<component>_PRE_INSTALL_SCRIPT_FILE'
I have the following files:
CMakeLists.txt:
cmake_minimum_required(VERSION 3.17.5)
project(main VERSION 1.0.0)
set(CMAKE_CXX_STANDARD 11)
add_executable(main main.cpp)
include(GNUInstallDirs)
# Install file README.txt to doc directory
install(FILES
${PROJECT_SOURCE_DIR}/README.txt
DESTINATION ${CMAKE_INSTALL_DOCDIR}
COMPONENT common)
set(CPACK_COMPONENTS_ALL common main)
set(CPACK_GENERATOR RPM)
set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
set(CPACK_PACKAGE_VERSION ${PACKAGE_VERSION})
set(CPACK_RPM_COMPONENT_INSTALL ON)
# Path to file containing common pre install script
set(CPACK_RPM_COMMON_PRE_INSTALL_SCRIPT_FILE ${PROJECT_SOURCE_DIR}/preCommon.bash)
# Path to file containing main pre install script
set(CPACK_RPM_MAIN_PRE_INSTALL_SCRIPT_FILE ${PROJECT_SOURCE_DIR}/preMain.bash)
set(CPACK_RPM_CONFIG_DEFAULT_GROUP ${PROJECT_NAME})
set(CPACK_RPM_CONFIG_DEFAULT_USER ${PROJECT_NAME})
# Enable generation of debuginfo RPM package(s)
set(CPACK_RPM_DEBUGINFO_PACKAGE ON)
# Create a single debuginfo package even if components packaging is set
# TODO - FIXME! Enabling this breaks 'CPACK_RPM_COMMON_PRE_INSTALL_SCRIPT_FILE', why?
#set(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE ON)
set(CPACK_RPM_FILE_NAME RPM-DEFAULT)
set(CPACK_RPM_MAIN_COMPONENT ${PROJECT_NAME})
set(CPACK_RPM_PACKAGE_RELEASE 1)
set(CPACK_RPM_PACKAGE_RELEASE_DIST ON)
include(CPack)
main.cpp:
#include <iostream>
int main()
{
std::cout << "Hello world!" << std::endl;
}
README.txt:
CMAKE(1) CMake CMAKE(1)
NAME
cmake - CMake Command-Line Reference
preCommon.bash
echo "Hello from common.rpm pre install script"
preMain.bash:
echo "Hello from main.rpm pre install script"
$ cmake3 --version
cmake3 version 3.17.5
CMake suite maintained and supported by Kitware (kitware.com/cmake).
$ g++ --version
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
$ uname -r
3.10.0-1160.15.2.el7.x86_64
With #set(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE ON)
disabled, RPMs generate as expected:
build]$ rm -rf * && cmake3 .. && make package && rpm -qp --scripts *.rpm
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
...
CPack3: - package: /.../CMakeCPackBug/build/main-1.0.0-1.el7.x86_64.rpm generated.
CPack3: - package: /.../CMakeCPackBug/build/main-common-1.0.0-1.el7.x86_64.rpm generated.
preinstall scriptlet (using /bin/sh):
echo "Hello from main.rpm pre install script"
postinstall program: /bin/sh
preuninstall program: /bin/sh
postuninstall program: /bin/sh
preinstall scriptlet (using /bin/sh):
echo "Hello from common.rpm pre install script"
postinstall program: /bin/sh
preuninstall program: /bin/sh
postuninstall program: /bin/sh
build]$
With set(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE ON)
enabled, RPMs generate omitted scriptlets for all non-CPACK_RPM_MAIN_COMPONENT components:
build]$ rm -rf * && cmake3 .. && make package && rpm -qp --scripts *.rpm
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
...
CPack3: - package: /.../CMakeCPackBug/build/main-1.0.0-1.el7.x86_64.rpm generated.
CPack3: - package: /.../CMakeCPackBug/build/main-common-1.0.0-1.el7.x86_64.rpm generated.
preinstall scriptlet (using /bin/sh):
echo "Hello from main.rpm pre install script"
postinstall program: /bin/sh
preuninstall program: /bin/sh
postuninstall program: /bin/sh
build]$
Suspect related to issue #21951.