summaryrefslogtreecommitdiff
path: root/Modules/Internal/CPack
diff options
context:
space:
mode:
authorDomen Vrankar <domen.vrankar@gmail.com>2021-04-01 22:28:24 +0200
committerDomen Vrankar <domen.vrankar@gmail.com>2021-04-01 22:28:24 +0200
commit34c8a23044eaf8d56f405c4c9f13b53d0b47c963 (patch)
treed9ffaaf200100622508b55ee897cd93ddb6ddb85 /Modules/Internal/CPack
parent0fee2adf8c967a9b47c65f4ca463b3fe1971205e (diff)
downloadcmake-34c8a23044eaf8d56f405c4c9f13b53d0b47c963.tar.gz
CPackRPM: add scriplets tags only if scripts exist
Scriplet tags should not be added to generated spec files if scripts weren't provided as those tags are otherwise present in generated rpm file even if the script wasn't provided thereby generating unneeded dependency on shell. Fixes: #21345
Diffstat (limited to 'Modules/Internal/CPack')
-rw-r--r--Modules/Internal/CPack/CPackRPM.cmake103
1 files changed, 67 insertions, 36 deletions
diff --git a/Modules/Internal/CPack/CPackRPM.cmake b/Modules/Internal/CPack/CPackRPM.cmake
index faaff7bd1a..bece2dd1de 100644
--- a/Modules/Internal/CPack/CPackRPM.cmake
+++ b/Modules/Internal/CPack/CPackRPM.cmake
@@ -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\@)