Merge topic 'cpack-rpm-add-scriplets-tags-only-if-needed'

34c8a23044 CPackRPM: add scriplets tags only if scripts exist

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !5970
This commit is contained in:
Brad King
2021-04-05 15:35:03 +00:00
committed by Kitware Robot
7 changed files with 153 additions and 106 deletions
+67 -36
View File
@@ -6,6 +6,56 @@
cmake_policy(PUSH)
cmake_policy(SET CMP0057 NEW) # if IN_LIST
function(set_spec_script_if_enabled TYPE PACKAGE_NAME VAR)
if(NOT "${VAR}" STREQUAL "" AND NOT "${VAR}" STREQUAL "\n")
if(PACKAGE_NAME)
set(PACKAGE_NAME " -n ${PACKAGE_NAME}")
endif()
set(${TYPE}_
"%${TYPE}${PACKAGE_NAME}\n"
"${VAR}\n" PARENT_SCOPE)
else()
set(${TYPE} "" PARENT_SCOPE)
endif()
endfunction()
macro(set_spec_scripts PACKAGE_NAME)
# we should only set scripts that were provided
# as script announcement without content inside
# spec file will generate unneeded dependency
# on shell
set_spec_script_if_enabled(
"post"
"${PACKAGE_NAME}"
"${RPM_SYMLINK_POSTINSTALL}\n${CPACK_RPM_SPEC_POSTINSTALL}")
set_spec_script_if_enabled(
"posttrans"
"${PACKAGE_NAME}"
"${CPACK_RPM_SPEC_POSTTRANS}")
set_spec_script_if_enabled(
"postun"
"${PACKAGE_NAME}"
"${CPACK_RPM_SPEC_POSTUNINSTALL}")
set_spec_script_if_enabled(
"pre"
"${PACKAGE_NAME}"
"${CPACK_RPM_SPEC_PREINSTALL}")
set_spec_script_if_enabled(
"pretrans"
"${PACKAGE_NAME}"
"${CPACK_RPM_SPEC_PRETRANS}")
set_spec_script_if_enabled(
"preun"
"${PACKAGE_NAME}"
"${CPACK_RPM_SPEC_PREUNINSTALL}")
endmacro()
function(get_file_permissions FILE RETURN_VAR)
execute_process(COMMAND ls -l ${FILE}
OUTPUT_VARIABLE permissions_
@@ -1613,6 +1663,9 @@ Vendor: \@CPACK_RPM_PACKAGE_VENDOR\@
)
elseif(GENERATE_SPEC_PARTS) # binary rpm with single debuginfo package
set_spec_scripts("${CPACK_RPM_PACKAGE_NAME}")
file(WRITE ${CPACK_RPM_BINARY_SPECFILE}.in
"# -*- rpm-spec -*-
%package -n \@CPACK_RPM_PACKAGE_NAME\@
@@ -1643,24 +1696,12 @@ Vendor: \@CPACK_RPM_PACKAGE_VENDOR\@
%description -n \@CPACK_RPM_PACKAGE_NAME\@
\@CPACK_RPM_PACKAGE_DESCRIPTION\@
%post -n \@CPACK_RPM_PACKAGE_NAME\@
\@RPM_SYMLINK_POSTINSTALL\@
\@CPACK_RPM_SPEC_POSTINSTALL\@
%posttrans -n \@CPACK_RPM_PACKAGE_NAME\@
\@CPACK_RPM_SPEC_POSTTRANS\@
%postun -n \@CPACK_RPM_PACKAGE_NAME\@
\@CPACK_RPM_SPEC_POSTUNINSTALL\@
%pre -n \@CPACK_RPM_PACKAGE_NAME\@
\@CPACK_RPM_SPEC_PREINSTALL\@
%pretrans -n \@CPACK_RPM_PACKAGE_NAME\@
\@CPACK_RPM_SPEC_PRETRANS\@
%preun -n \@CPACK_RPM_PACKAGE_NAME\@
\@CPACK_RPM_SPEC_PREUNINSTALL\@
\@post_\@
\@posttrans_\@
\@postun_\@
\@pre_\@
\@pretrans_\@
\@preun_\@
%files -n \@CPACK_RPM_PACKAGE_NAME\@
%defattr(\@TMP_DEFAULT_FILE_PERMISSIONS\@,\@TMP_DEFAULT_USER\@,\@TMP_DEFAULT_GROUP\@,\@TMP_DEFAULT_DIR_PERMISSIONS\@)
@@ -1687,6 +1728,8 @@ Vendor: \@CPACK_RPM_PACKAGE_VENDOR\@
set(RPMBUILD_FLAGS "-bb")
if(CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE OR NOT CPACK_RPM_USER_BINARY_SPECFILE)
set_spec_scripts("")
file(WRITE ${CPACK_RPM_BINARY_SPECFILE}.in
"# Restore old style debuginfo creation for rpm >= 4.14.
%undefine _debugsource_packages
@@ -1750,24 +1793,12 @@ mv %_topdir/tmpBBroot $RPM_BUILD_ROOT
%clean
%post
\@RPM_SYMLINK_POSTINSTALL\@
\@CPACK_RPM_SPEC_POSTINSTALL\@
%posttrans
\@CPACK_RPM_SPEC_POSTTRANS\@
%postun
\@CPACK_RPM_SPEC_POSTUNINSTALL\@
%pre
\@CPACK_RPM_SPEC_PREINSTALL\@
%pretrans
\@CPACK_RPM_SPEC_PRETRANS\@
%preun
\@CPACK_RPM_SPEC_PREUNINSTALL\@
\@post_\@
\@posttrans_\@
\@postun_\@
\@pre_\@
\@pretrans_\@
\@preun_\@
%files
%defattr(\@TMP_DEFAULT_FILE_PERMISSIONS\@,\@TMP_DEFAULT_USER\@,\@TMP_DEFAULT_GROUP\@,\@TMP_DEFAULT_DIR_PERMISSIONS\@)
+1 -1
View File
@@ -16,7 +16,7 @@ run_cpack_test(VERSION "RPM.VERSION;DEB.VERSION" false "MONOLITHIC;COMPONENT")
run_cpack_test(EXTRA "DEB.EXTRA" false "COMPONENT")
run_cpack_test_subtests(GENERATE_SHLIBS "soversion_not_zero;soversion_zero" "DEB.GENERATE_SHLIBS" true "COMPONENT")
run_cpack_test(GENERATE_SHLIBS_LDCONFIG "DEB.GENERATE_SHLIBS_LDCONFIG" true "COMPONENT")
run_cpack_test_subtests(INSTALL_SCRIPTS "default;single_debug_info" "RPM.INSTALL_SCRIPTS" false "COMPONENT")
run_cpack_test_subtests(INSTALL_SCRIPTS "default;single_debug_info;no_scripts;no_scripts_single_debug_info" "RPM.INSTALL_SCRIPTS" false "COMPONENT")
run_cpack_test(LONG_FILENAMES "DEB.LONG_FILENAMES" false "MONOLITHIC")
run_cpack_test_subtests(MAIN_COMPONENT "invalid;found" "RPM.MAIN_COMPONENT" false "COMPONENT")
run_cpack_test(MINIMAL "RPM.MINIMAL;DEB.MINIMAL;7Z;TBZ2;TGZ;TXZ;TZ;ZIP;STGZ;External" false "MONOLITHIC;COMPONENT")
@@ -1,4 +1,4 @@
if(RunCMake_SUBTEST_SUFFIX STREQUAL "single_debug_info")
if(RunCMake_SUBTEST_SUFFIX MATCHES ".*single_debug_info")
set(EXPECTED_FILE_1 "install_scripts-0.1.1-1.*.rpm")
else()
set(EXPECTED_FILE_1_COMPONENT "foo")
@@ -1,5 +1,5 @@
function(get_test_prerequirements found_var config_file)
if(SUBTEST_SUFFIX STREQUAL "single_debug_info")
if(SUBTEST_SUFFIX MATCHES ".*single_debug_info")
include(${config_file})
if(OBJDUMP_EXECUTABLE)
@@ -7,23 +7,34 @@ function(checkScripts_ FILE COMPARE_LIST)
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
string(REPLACE "\n" ";" FILE_SCRIPTS_LIST_ "${FILE_SCRIPTS_}")
if(COMPARE_LIST STREQUAL "")
if(NOT FILE_SCRIPTS_ STREQUAL "")
message(FATAL_ERROR "No scripts were expected in '${FILE}'; file info: '${FILE_SCRIPTS_}'")
endif()
else()
string(REPLACE "\n" ";" FILE_SCRIPTS_LIST_ "${FILE_SCRIPTS_}")
foreach(COMPARE_REGEX_ IN LISTS COMPARE_LIST)
unset(FOUND_)
foreach(COMPARE_REGEX_ IN LISTS COMPARE_LIST)
unset(FOUND_)
foreach(COMPARE_ IN LISTS FILE_SCRIPTS_LIST_)
if(COMPARE_ MATCHES "${COMPARE_REGEX_}")
set(FOUND_ true)
break()
foreach(COMPARE_ IN LISTS FILE_SCRIPTS_LIST_)
if(COMPARE_ MATCHES "${COMPARE_REGEX_}")
set(FOUND_ true)
break()
endif()
endforeach()
if(NOT FOUND_)
message(FATAL_ERROR "Missing scripts in '${FILE}'; file info: '${FILE_SCRIPTS_}'; missing: '${COMPARE_REGEX_}'")
endif()
endforeach()
if(NOT FOUND_)
message(FATAL_ERROR "Missing scripts in '${FILE}'; file info: '${FILE_SCRIPTS_}'; missing: '${COMPARE_REGEX_}'")
endif()
endforeach()
endif()
endfunction()
checkScripts_("${FOUND_FILE_1}" "echo \"pre install foo\";echo \"post install foo\";echo \"pre uninstall foo\";echo \"post uninstall foo\";echo \"pre trans foo\";echo \"post trans foo\"")
checkScripts_("${FOUND_FILE_2}" "echo \"pre install\";echo \"post install\";echo \"pre uninstall\";echo \"post uninstall\";echo \"pre trans\";echo \"post trans\"")
if(RunCMake_SUBTEST_SUFFIX MATCHES "no_scripts.*")
checkScripts_("${FOUND_FILE_1}" "")
checkScripts_("${FOUND_FILE_2}" "")
else()
checkScripts_("${FOUND_FILE_1}" "echo \"pre install foo\";echo \"post install foo\";echo \"pre uninstall foo\";echo \"post uninstall foo\";echo \"pre trans foo\";echo \"post trans foo\"")
checkScripts_("${FOUND_FILE_2}" "echo \"pre install\";echo \"post install\";echo \"pre uninstall\";echo \"post uninstall\";echo \"pre trans\";echo \"post trans\"")
endif()
@@ -1,31 +1,5 @@
if(GENERATOR_TYPE STREQUAL "RPM")
set(CPACK_RPM_PRE_INSTALL_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/pre_install.sh")
set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/post_install.sh")
set(CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/pre_uninstall.sh")
set(CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/post_uninstall.sh")
set(CPACK_RPM_PRE_TRANS_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/pre_trans.sh")
set(CPACK_RPM_POST_TRANS_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/post_trans.sh")
set(CPACK_RPM_foo_PRE_INSTALL_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/pre_install_foo.sh")
set(CPACK_RPM_foo_POST_INSTALL_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/post_install_foo.sh")
set(CPACK_RPM_foo_PRE_UNINSTALL_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/pre_uninstall_foo.sh")
set(CPACK_RPM_foo_POST_UNINSTALL_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/post_uninstall_foo.sh")
set(CPACK_RPM_foo_PRE_TRANS_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/pre_trans_foo.sh")
set(CPACK_RPM_foo_POST_TRANS_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/post_trans_foo.sh")
if(RunCMake_SUBTEST_SUFFIX STREQUAL "single_debug_info")
if(RunCMake_SUBTEST_SUFFIX MATCHES ".*single_debug_info")
set(CPACK_RPM_MAIN_COMPONENT "foo")
set(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE ON)
set(CPACK_RPM_FOO_FILE_NAME "RPM-DEFAULT")
@@ -34,33 +8,63 @@ endif()
set(CMAKE_BUILD_WITH_INSTALL_RPATH 1)
# default
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/pre_install.sh"
"echo \"pre install\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/post_install.sh"
"echo \"post install\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/pre_uninstall.sh"
"echo \"pre uninstall\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/post_uninstall.sh"
"echo \"post uninstall\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/pre_trans.sh"
"echo \"pre trans\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/post_trans.sh"
"echo \"post trans\"\n")
if(NOT RunCMake_SUBTEST_SUFFIX MATCHES "no_scripts.*")
if(GENERATOR_TYPE STREQUAL "RPM")
set(CPACK_RPM_PRE_INSTALL_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/pre_install.sh")
set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/post_install.sh")
set(CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/pre_uninstall.sh")
set(CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/post_uninstall.sh")
set(CPACK_RPM_PRE_TRANS_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/pre_trans.sh")
set(CPACK_RPM_POST_TRANS_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/post_trans.sh")
# specific
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/pre_install_foo.sh"
"echo \"pre install foo\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/post_install_foo.sh"
"echo \"post install foo\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/pre_uninstall_foo.sh"
"echo \"pre uninstall foo\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/post_uninstall_foo.sh"
"echo \"post uninstall foo\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/pre_trans_foo.sh"
"echo \"pre trans foo\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/post_trans_foo.sh"
"echo \"post trans foo\"\n")
set(CPACK_RPM_foo_PRE_INSTALL_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/pre_install_foo.sh")
set(CPACK_RPM_foo_POST_INSTALL_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/post_install_foo.sh")
set(CPACK_RPM_foo_PRE_UNINSTALL_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/pre_uninstall_foo.sh")
set(CPACK_RPM_foo_POST_UNINSTALL_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/post_uninstall_foo.sh")
set(CPACK_RPM_foo_PRE_TRANS_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/pre_trans_foo.sh")
set(CPACK_RPM_foo_POST_TRANS_SCRIPT_FILE
"${CMAKE_CURRENT_BINARY_DIR}/post_trans_foo.sh")
endif()
# default
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/pre_install.sh"
"echo \"pre install\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/post_install.sh"
"echo \"post install\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/pre_uninstall.sh"
"echo \"pre uninstall\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/post_uninstall.sh"
"echo \"post uninstall\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/pre_trans.sh"
"echo \"pre trans\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/post_trans.sh"
"echo \"post trans\"\n")
# specific
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/pre_install_foo.sh"
"echo \"pre install foo\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/post_install_foo.sh"
"echo \"post install foo\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/pre_uninstall_foo.sh"
"echo \"pre uninstall foo\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/post_uninstall_foo.sh"
"echo \"post uninstall foo\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/pre_trans_foo.sh"
"echo \"pre trans foo\"\n")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/post_trans_foo.sh"
"echo \"post trans foo\"\n")
endif()
install(FILES CMakeLists.txt DESTINATION foo COMPONENT foo)
install(FILES CMakeLists.txt DESTINATION bar COMPONENT bar)