diff --git a/Help/cpack_gen/rpm.rst b/Help/cpack_gen/rpm.rst index b25b822318..a30b4815dd 100644 --- a/Help/cpack_gen/rpm.rst +++ b/Help/cpack_gen/rpm.rst @@ -553,6 +553,10 @@ List of CPack RPM generator specific variables: set(CPACK_RPM_SPEC_MORE_DEFINE "%define __spec_install_post /bin/true") + .. versionadded:: 4.4 + If the variable is a list, its string elements will be concatenated using + ``\n`` before being substituted into the spec template. + .. variable:: CPACK_RPM_PACKAGE_DEBUG Toggle CPack RPM generator debug output. diff --git a/Help/release/dev/CPACK_RPM_SPEC_MORE_DEFINE.rst b/Help/release/dev/CPACK_RPM_SPEC_MORE_DEFINE.rst new file mode 100644 index 0000000000..e2c4a0fbe2 --- /dev/null +++ b/Help/release/dev/CPACK_RPM_SPEC_MORE_DEFINE.rst @@ -0,0 +1,4 @@ +CPACK_RPM_SPEC_MORE_DEFINE +-------------------------- + +* The :variable:`CPACK_RPM_SPEC_MORE_DEFINE` could be a list of definitions. diff --git a/Modules/Internal/CPack/CPackRPM.cmake b/Modules/Internal/CPack/CPackRPM.cmake index c2b9f42072..75b3b40fae 100644 --- a/Modules/Internal/CPack/CPackRPM.cmake +++ b/Modules/Internal/CPack/CPackRPM.cmake @@ -1284,6 +1284,10 @@ function(cpack_rpm_generate_package) # CPACK_RPM_SPEC_MORE_DEFINE # This is a generated spec rpm file spaceholder if(CPACK_RPM_SPEC_MORE_DEFINE) + list(LENGTH CPACK_RPM_SPEC_MORE_DEFINE _defines_size) + if(_defines_size GREATER 1) + list(JOIN CPACK_RPM_SPEC_MORE_DEFINE "\n" CPACK_RPM_SPEC_MORE_DEFINE) + endif() if(CPACK_RPM_PACKAGE_DEBUG) message("CPackRPM:Debug: User defined more define spec line specified:\n ${CPACK_RPM_SPEC_MORE_DEFINE}") endif() diff --git a/Tests/RunCMake/CPack/tests/CUSTOM_BINARY_SPEC_FILE/VerifyResult.cmake b/Tests/RunCMake/CPack/tests/CUSTOM_BINARY_SPEC_FILE/VerifyResult.cmake new file mode 100644 index 0000000000..20b20c829e --- /dev/null +++ b/Tests/RunCMake/CPack/tests/CUSTOM_BINARY_SPEC_FILE/VerifyResult.cmake @@ -0,0 +1,27 @@ +cmake_path(APPEND bin_dir _CPack_Packages/Linux/RPM/SPECS OUTPUT_VARIABLE SPECS) + +file(GLOB specs "${SPECS}/*.spec") +if(NOT specs) + return() +endif() + +set(_pfx multilene_defines_test) +set( + expected_defines + "%define ${_pfx}_satu 1" + "%define ${_pfx}_dua 2" + "%define ${_pfx}_tiga 3" + ) + +foreach(spec IN LISTS specs) + file(STRINGS "${spec}" defines REGEX "%define multilene_defines_test_*.") + if(NOT defines STREQUAL expected_defines) + message( + FATAL_ERROR + "Multiline definitions mismatch:\n" + " file: `${spec}`\n" + " expected: `${expected_defines}`\n" + " actual: `${defines}`\n" + ) + endif() +endforeach() diff --git a/Tests/RunCMake/CPack/tests/CUSTOM_BINARY_SPEC_FILE/test.cmake b/Tests/RunCMake/CPack/tests/CUSTOM_BINARY_SPEC_FILE/test.cmake index a604863971..da5f6fc072 100644 --- a/Tests/RunCMake/CPack/tests/CUSTOM_BINARY_SPEC_FILE/test.cmake +++ b/Tests/RunCMake/CPack/tests/CUSTOM_BINARY_SPEC_FILE/test.cmake @@ -1,5 +1,10 @@ install(FILES CMakeLists.txt DESTINATION foo COMPONENT test) +set(_pfx multilene_defines_test) +set(CPACK_RPM_SPEC_MORE_DEFINE "%define ${_pfx}_satu 1") +list(APPEND CPACK_RPM_SPEC_MORE_DEFINE "%define ${_pfx}_dua 2") +list(APPEND CPACK_RPM_SPEC_MORE_DEFINE "%define ${_pfx}_tiga 3") + if(PACKAGING_TYPE STREQUAL "MONOLITHIC") set(CPACK_RPM_USER_BINARY_SPECFILE "${CMAKE_CURRENT_LIST_DIR}/custom.spec.in") elseif(PACKAGING_TYPE STREQUAL "COMPONENT")