|
|
@@ -95,6 +95,17 @@
|
|
|
# and it is up to the packager to set the variables in a manner that will
|
|
|
# prevent such errors.
|
|
|
#
|
|
|
+# .. variable:: CPACK_RPM_MAIN_COMPONENT
|
|
|
+#
|
|
|
+# Main component that is packaged without component suffix.
|
|
|
+#
|
|
|
+# * Mandatory : NO
|
|
|
+# * Default : -
|
|
|
+#
|
|
|
+# This variable can be set to any component or group name so that component or
|
|
|
+# group rpm package is generated without component suffix in filename and
|
|
|
+# package name.
|
|
|
+#
|
|
|
# .. variable:: CPACK_RPM_PACKAGE_VERSION
|
|
|
#
|
|
|
# The RPM package version.
|
|
|
@@ -792,6 +803,26 @@
|
|
|
# * Mandatory : NO
|
|
|
# * Default : -
|
|
|
#
|
|
|
+# .. variable:: CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE
|
|
|
+#
|
|
|
+# Create a single debuginfo package even if components packaging is set.
|
|
|
+#
|
|
|
+# * Mandatory : NO
|
|
|
+# * Default : OFF
|
|
|
+#
|
|
|
+# When this variable is enabled it produces a single debuginfo package even if
|
|
|
+# component packaging is enabled.
|
|
|
+#
|
|
|
+# When using this feature in combination with components packaging and there is
|
|
|
+# more than one component this variable requires :variable:`CPACK_RPM_MAIN_COMPONENT`
|
|
|
+# to be set.
|
|
|
+#
|
|
|
+# .. note::
|
|
|
+#
|
|
|
+# If none of the :variable:`CPACK_RPM_<component>_DEBUGINFO_PACKAGE` variables
|
|
|
+# is set then :variable:`CPACK_RPM_DEBUGINFO_PACKAGE` is automatically set to
|
|
|
+# ``ON`` when :variable:`CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE` is set.
|
|
|
+#
|
|
|
# Packaging of sources (SRPM)
|
|
|
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
#
|
|
|
@@ -1649,10 +1680,16 @@ function(cpack_rpm_generate_package)
|
|
|
endif()
|
|
|
|
|
|
if(CPACK_RPM_PACKAGE_COMPONENT)
|
|
|
- string(APPEND CPACK_RPM_PACKAGE_NAME "-${CPACK_RPM_PACKAGE_COMPONENT}")
|
|
|
- cpack_rpm_variable_fallback("CPACK_RPM_PACKAGE_NAME"
|
|
|
- "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_NAME"
|
|
|
- "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_PACKAGE_NAME")
|
|
|
+ string(TOUPPER "${CPACK_RPM_MAIN_COMPONENT}"
|
|
|
+ CPACK_RPM_MAIN_COMPONENT_UPPER)
|
|
|
+
|
|
|
+ if(NOT CPACK_RPM_MAIN_COMPONENT_UPPER STREQUAL CPACK_RPM_PACKAGE_COMPONENT_UPPER)
|
|
|
+ string(APPEND CPACK_RPM_PACKAGE_NAME "-${CPACK_RPM_PACKAGE_COMPONENT}")
|
|
|
+
|
|
|
+ cpack_rpm_variable_fallback("CPACK_RPM_PACKAGE_NAME"
|
|
|
+ "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_NAME"
|
|
|
+ "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_PACKAGE_NAME")
|
|
|
+ endif()
|
|
|
endif()
|
|
|
|
|
|
# CPACK_RPM_PACKAGE_VERSION (mandatory)
|
|
|
@@ -2059,7 +2096,7 @@ function(cpack_rpm_generate_package)
|
|
|
"CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_DEBUGINFO_PACKAGE"
|
|
|
"CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_DEBUGINFO_PACKAGE"
|
|
|
"CPACK_RPM_DEBUGINFO_PACKAGE")
|
|
|
- if(CPACK_RPM_DEBUGINFO_PACKAGE)
|
|
|
+ if(CPACK_RPM_DEBUGINFO_PACKAGE OR (CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE AND NOT GENERATE_SPEC_PARTS))
|
|
|
cpack_rpm_variable_fallback("CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX"
|
|
|
"CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_BUILD_SOURCE_DIRS_PREFIX"
|
|
|
"CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_BUILD_SOURCE_DIRS_PREFIX"
|
|
|
@@ -2067,9 +2104,81 @@ function(cpack_rpm_generate_package)
|
|
|
if(NOT CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX)
|
|
|
set(CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX "/usr/src/debug/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}")
|
|
|
endif()
|
|
|
- cpack_rpm_debugsymbol_check("${CPACK_RPM_INSTALL_FILES}" "${WDIR}")
|
|
|
|
|
|
- set(TMP_RPM_DEBUGINFO "
|
|
|
+ if(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE AND GENERATE_SPEC_PARTS)
|
|
|
+ file(WRITE "${CPACK_RPM_ROOTDIR}/SPECS/${CPACK_RPM_PACKAGE_COMPONENT}.files"
|
|
|
+ "${CPACK_RPM_INSTALL_FILES}")
|
|
|
+ else()
|
|
|
+ if(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE AND CPACK_RPM_PACKAGE_COMPONENT)
|
|
|
+ # this part is only required by components packaging - with monolithic
|
|
|
+ # packages we can be certain that there are no other components present
|
|
|
+ # so CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE is a noop
|
|
|
+ if(CPACK_RPM_DEBUGINFO_PACKAGE)
|
|
|
+ # only add current package files to debuginfo list if debuginfo
|
|
|
+ # generation is enabled for current package
|
|
|
+ set(install_files_ "${CPACK_RPM_INSTALL_FILES}")
|
|
|
+ else()
|
|
|
+ unset(install_files_)
|
|
|
+ endif()
|
|
|
+
|
|
|
+ file(GLOB files_ "${CPACK_RPM_DIRECTORY}/SPECS/*.files")
|
|
|
+
|
|
|
+ foreach(f_ IN LISTS files_)
|
|
|
+ file(READ "${f_}" tmp_)
|
|
|
+ string(APPEND install_files_ ";${tmp_}")
|
|
|
+ endforeach()
|
|
|
+
|
|
|
+ # if there were other components/groups so we need to move files from them
|
|
|
+ # to current component otherwise those files won't be found
|
|
|
+ file(GLOB components_ LIST_DIRECTORIES true RELATIVE
|
|
|
+ "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}"
|
|
|
+ "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}/*")
|
|
|
+ foreach(component_ IN LISTS components_)
|
|
|
+ string(TOUPPER "${component_}" component_dir_upper_)
|
|
|
+ if(component_dir_upper_ STREQUAL CPACK_RPM_PACKAGE_COMPONENT_UPPER)
|
|
|
+ # skip current component
|
|
|
+ continue()
|
|
|
+ endif()
|
|
|
+
|
|
|
+ cmake_policy(PUSH)
|
|
|
+ cmake_policy(SET CMP0009 NEW)
|
|
|
+ file(GLOB_RECURSE files_for_move_ LIST_DIRECTORIES false RELATIVE
|
|
|
+ "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}/${component_}"
|
|
|
+ "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}/${component_}/*")
|
|
|
+ cmake_policy(POP)
|
|
|
+
|
|
|
+ foreach(f_ IN LISTS files_for_move_)
|
|
|
+ get_filename_component(dir_path_ "${f_}" DIRECTORY)
|
|
|
+ set(src_file_
|
|
|
+ "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}/${component_}/${f_}")
|
|
|
+
|
|
|
+ # check that we are not overriding an existing file that doesn't
|
|
|
+ # match the file that we want to copy
|
|
|
+ if(EXISTS "${src_file_}" AND EXISTS "${WDIR}/${f_}")
|
|
|
+ execute_process(
|
|
|
+ COMMAND ${CMAKE_COMMAND} -E compare_files "${src_file_}" "${WDIR}/${f_}"
|
|
|
+ RESULT_VARIABLE res_
|
|
|
+ )
|
|
|
+ if(res_)
|
|
|
+ message(FATAL_ERROR "CPackRPM:Error: File on path '${WDIR}/${f_}'"
|
|
|
+ " already exists but is a different than the one in component"
|
|
|
+ " '${component_}'! Packages will not be generated.")
|
|
|
+ endif()
|
|
|
+ endif()
|
|
|
+
|
|
|
+ file(MAKE_DIRECTORY "${WDIR}/${dir_path_}")
|
|
|
+ file(RENAME "${src_file_}"
|
|
|
+ "${WDIR}/${f_}")
|
|
|
+ endforeach()
|
|
|
+ endforeach()
|
|
|
+
|
|
|
+ cpack_rpm_debugsymbol_check("${install_files_}" "${WDIR}")
|
|
|
+ else()
|
|
|
+ cpack_rpm_debugsymbol_check("${CPACK_RPM_INSTALL_FILES}" "${WDIR}")
|
|
|
+ endif()
|
|
|
+
|
|
|
+ if(TMP_DEBUGINFO_ADDITIONAL_SOURCES)
|
|
|
+ set(TMP_RPM_DEBUGINFO "
|
|
|
# Modified version of %%debug_package macro
|
|
|
# defined in /usr/lib/rpm/macros as that one
|
|
|
# can't handle injection of extra source files.
|
|
|
@@ -2088,6 +2197,15 @@ package or when debugging this package.
|
|
|
${TMP_DEBUGINFO_ADDITIONAL_SOURCES}
|
|
|
%endif
|
|
|
")
|
|
|
+ elseif(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE)
|
|
|
+ message(AUTHOR_WARNING "CPackRPM:Warning: debuginfo package was requested"
|
|
|
+ " but will not be generated as no source files were found!")
|
|
|
+ else()
|
|
|
+ message(AUTHOR_WARNING "CPackRPM:Warning: debuginfo package was requested"
|
|
|
+ " but will not be generated as no source files were found! Component: '"
|
|
|
+ "${CPACK_RPM_PACKAGE_COMPONENT}'.")
|
|
|
+ endif()
|
|
|
+ endif()
|
|
|
endif()
|
|
|
|
|
|
# Prepare install files
|
|
|
@@ -2164,12 +2282,25 @@ ${TMP_DEBUGINFO_ADDITIONAL_SOURCES}
|
|
|
cmake_policy(POP)
|
|
|
else()
|
|
|
# old file name format for back compatibility
|
|
|
- set(CPACK_RPM_FILE_NAME "${CPACK_OUTPUT_FILE_NAME}")
|
|
|
+ string(TOUPPER "${CPACK_RPM_MAIN_COMPONENT}"
|
|
|
+ CPACK_RPM_MAIN_COMPONENT_UPPER)
|
|
|
+
|
|
|
+ if(CPACK_RPM_MAIN_COMPONENT_UPPER STREQUAL CPACK_RPM_PACKAGE_COMPONENT_UPPER)
|
|
|
+ # this is the main component so ignore the component filename part
|
|
|
+ set(CPACK_RPM_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}.rpm")
|
|
|
+ else()
|
|
|
+ set(CPACK_RPM_FILE_NAME "${CPACK_OUTPUT_FILE_NAME}")
|
|
|
+ endif()
|
|
|
endif()
|
|
|
# else example:
|
|
|
#set(CPACK_RPM_FILE_NAME "${CPACK_RPM_PACKAGE_NAME}-${CPACK_RPM_PACKAGE_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}-${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm")
|
|
|
|
|
|
- if(NOT CPACK_RPM_DEBUGINFO_PACKAGE)
|
|
|
+ if(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE AND GENERATE_SPEC_PARTS)
|
|
|
+ string(TOLOWER "${CPACK_RPM_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.*\\.rpm" expected_filename_)
|
|
|
+
|
|
|
+ file(WRITE "${CPACK_RPM_ROOTDIR}/SPECS/${CPACK_RPM_PACKAGE_COMPONENT}.rpm_name"
|
|
|
+ "${expected_filename_};${CPACK_RPM_FILE_NAME}")
|
|
|
+ elseif(NOT CPACK_RPM_DEBUGINFO_PACKAGE)
|
|
|
set(FILE_NAME_DEFINE "%define _rpmfilename ${CPACK_RPM_FILE_NAME}")
|
|
|
endif()
|
|
|
endif()
|
|
|
@@ -2264,7 +2395,54 @@ Vendor: \@CPACK_RPM_PACKAGE_VENDOR\@
|
|
|
\@CPACK_RPM_SPEC_CHANGELOG\@
|
|
|
"
|
|
|
)
|
|
|
+
|
|
|
+ elseif(GENERATE_SPEC_PARTS) # binary rpm with single debuginfo package
|
|
|
+ file(WRITE ${CPACK_RPM_BINARY_SPECFILE}.in
|
|
|
+ "# -*- rpm-spec -*-
|
|
|
+%package -n \@CPACK_RPM_PACKAGE_NAME\@
|
|
|
+Summary: \@CPACK_RPM_PACKAGE_SUMMARY\@
|
|
|
+Version: \@CPACK_RPM_PACKAGE_VERSION\@
|
|
|
+Release: \@CPACK_RPM_PACKAGE_RELEASE\@
|
|
|
+License: \@CPACK_RPM_PACKAGE_LICENSE\@
|
|
|
+Group: \@CPACK_RPM_PACKAGE_GROUP\@
|
|
|
+Vendor: \@CPACK_RPM_PACKAGE_VENDOR\@
|
|
|
+
|
|
|
+\@TMP_RPM_URL\@
|
|
|
+\@TMP_RPM_REQUIRES\@
|
|
|
+\@TMP_RPM_REQUIRES_PRE\@
|
|
|
+\@TMP_RPM_REQUIRES_POST\@
|
|
|
+\@TMP_RPM_REQUIRES_PREUN\@
|
|
|
+\@TMP_RPM_REQUIRES_POSTUN\@
|
|
|
+\@TMP_RPM_PROVIDES\@
|
|
|
+\@TMP_RPM_OBSOLETES\@
|
|
|
+\@TMP_RPM_CONFLICTS\@
|
|
|
+\@TMP_RPM_AUTOPROV\@
|
|
|
+\@TMP_RPM_AUTOREQ\@
|
|
|
+\@TMP_RPM_AUTOREQPROV\@
|
|
|
+\@TMP_RPM_BUILDARCH\@
|
|
|
+\@TMP_RPM_PREFIXES\@
|
|
|
+
|
|
|
+%description -n \@CPACK_RPM_PACKAGE_NAME\@
|
|
|
+\@CPACK_RPM_PACKAGE_DESCRIPTION\@
|
|
|
+
|
|
|
+%files -n \@CPACK_RPM_PACKAGE_NAME\@
|
|
|
+%defattr(\@TMP_DEFAULT_FILE_PERMISSIONS\@,\@TMP_DEFAULT_USER\@,\@TMP_DEFAULT_GROUP\@,\@TMP_DEFAULT_DIR_PERMISSIONS\@)
|
|
|
+\@CPACK_RPM_INSTALL_FILES\@
|
|
|
+\@CPACK_RPM_ABSOLUTE_INSTALL_FILES\@
|
|
|
+\@CPACK_RPM_USER_INSTALL_FILES\@
|
|
|
+"
|
|
|
+ )
|
|
|
+
|
|
|
else() # binary rpm
|
|
|
+ if(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE)
|
|
|
+ # find generated spec file and take its name
|
|
|
+ file(GLOB spec_files_ "${CPACK_RPM_DIRECTORY}/SPECS/*.spec")
|
|
|
+
|
|
|
+ foreach(f_ IN LISTS spec_files_)
|
|
|
+ file(READ "${f_}" tmp_)
|
|
|
+ string(APPEND TMP_OTHER_COMPONENTS "\n${tmp_}\n")
|
|
|
+ endforeach()
|
|
|
+ endif()
|
|
|
|
|
|
# We should generate a USER spec file template:
|
|
|
# - either because the user asked for it : CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE
|
|
|
@@ -2350,6 +2528,8 @@ mv %_topdir/tmpBBroot $RPM_BUILD_ROOT
|
|
|
|
|
|
%changelog
|
|
|
\@CPACK_RPM_SPEC_CHANGELOG\@
|
|
|
+
|
|
|
+\@TMP_OTHER_COMPONENTS\@
|
|
|
"
|
|
|
)
|
|
|
endif()
|
|
|
@@ -2376,60 +2556,90 @@ mv %_topdir/tmpBBroot $RPM_BUILD_ROOT
|
|
|
configure_file(${CPACK_RPM_BINARY_SPECFILE}.in ${CPACK_RPM_BINARY_SPECFILE} @ONLY)
|
|
|
endif()
|
|
|
|
|
|
- if(RPMBUILD_EXECUTABLE)
|
|
|
- # Now call rpmbuild using the SPECFILE
|
|
|
- execute_process(
|
|
|
- COMMAND "${RPMBUILD_EXECUTABLE}" ${RPMBUILD_FLAGS}
|
|
|
- --define "_topdir ${CPACK_RPM_DIRECTORY}"
|
|
|
- --buildroot "%_topdir/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}"
|
|
|
- --target "${CPACK_RPM_PACKAGE_ARCHITECTURE}"
|
|
|
- "${CPACK_RPM_BINARY_SPECFILE}"
|
|
|
- WORKING_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}"
|
|
|
- RESULT_VARIABLE CPACK_RPMBUILD_EXEC_RESULT
|
|
|
- ERROR_FILE "${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.err"
|
|
|
- OUTPUT_FILE "${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.out")
|
|
|
- if(CPACK_RPM_PACKAGE_DEBUG OR CPACK_RPMBUILD_EXEC_RESULT)
|
|
|
- file(READ ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.err RPMBUILDERR)
|
|
|
- file(READ ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.out RPMBUILDOUT)
|
|
|
- message("CPackRPM:Debug: You may consult rpmbuild logs in: ")
|
|
|
- message("CPackRPM:Debug: - ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.err")
|
|
|
- message("CPackRPM:Debug: *** ${RPMBUILDERR} ***")
|
|
|
- message("CPackRPM:Debug: - ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.out")
|
|
|
- message("CPackRPM:Debug: *** ${RPMBUILDOUT} ***")
|
|
|
+ if(NOT GENERATE_SPEC_PARTS) # generate package
|
|
|
+ if(RPMBUILD_EXECUTABLE)
|
|
|
+ # Now call rpmbuild using the SPECFILE
|
|
|
+ execute_process(
|
|
|
+ COMMAND "${RPMBUILD_EXECUTABLE}" ${RPMBUILD_FLAGS}
|
|
|
+ --define "_topdir ${CPACK_RPM_DIRECTORY}"
|
|
|
+ --buildroot "%_topdir/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}"
|
|
|
+ --target "${CPACK_RPM_PACKAGE_ARCHITECTURE}"
|
|
|
+ "${CPACK_RPM_BINARY_SPECFILE}"
|
|
|
+ WORKING_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}"
|
|
|
+ RESULT_VARIABLE CPACK_RPMBUILD_EXEC_RESULT
|
|
|
+ ERROR_FILE "${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.err"
|
|
|
+ OUTPUT_FILE "${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.out")
|
|
|
+ if(CPACK_RPM_PACKAGE_DEBUG OR CPACK_RPMBUILD_EXEC_RESULT)
|
|
|
+ file(READ ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.err RPMBUILDERR)
|
|
|
+ file(READ ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.out RPMBUILDOUT)
|
|
|
+ message("CPackRPM:Debug: You may consult rpmbuild logs in: ")
|
|
|
+ message("CPackRPM:Debug: - ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.err")
|
|
|
+ message("CPackRPM:Debug: *** ${RPMBUILDERR} ***")
|
|
|
+ message("CPackRPM:Debug: - ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.out")
|
|
|
+ message("CPackRPM:Debug: *** ${RPMBUILDOUT} ***")
|
|
|
+ endif()
|
|
|
+ else()
|
|
|
+ if(ALIEN_EXECUTABLE)
|
|
|
+ message(FATAL_ERROR "RPM packaging through alien not done (yet)")
|
|
|
+ endif()
|
|
|
endif()
|
|
|
- else()
|
|
|
- if(ALIEN_EXECUTABLE)
|
|
|
- message(FATAL_ERROR "RPM packaging through alien not done (yet)")
|
|
|
+
|
|
|
+ # find generated rpm files and take their names
|
|
|
+ cmake_policy(PUSH)
|
|
|
+ # Tell file(GLOB_RECURSE) not to follow directory symlinks
|
|
|
+ # even if the project does not set this policy to NEW.
|
|
|
+ cmake_policy(SET CMP0009 NEW)
|
|
|
+ file(GLOB_RECURSE GENERATED_FILES "${CPACK_RPM_DIRECTORY}/RPMS/*.rpm"
|
|
|
+ "${CPACK_RPM_DIRECTORY}/SRPMS/*.rpm")
|
|
|
+ cmake_policy(POP)
|
|
|
+
|
|
|
+ if(NOT GENERATED_FILES)
|
|
|
+ message(FATAL_ERROR "RPM package was not generated! ${CPACK_RPM_DIRECTORY}")
|
|
|
endif()
|
|
|
- endif()
|
|
|
|
|
|
- # find generated rpm files and take their names
|
|
|
- cmake_policy(PUSH)
|
|
|
- # Tell file(GLOB_RECURSE) not to follow directory symlinks
|
|
|
- # even if the project does not set this policy to NEW.
|
|
|
- cmake_policy(SET CMP0009 NEW)
|
|
|
- file(GLOB_RECURSE GENERATED_FILES "${CPACK_RPM_DIRECTORY}/RPMS/*.rpm"
|
|
|
- "${CPACK_RPM_DIRECTORY}/SRPMS/*.rpm")
|
|
|
- cmake_policy(POP)
|
|
|
+ unset(expected_filenames_)
|
|
|
+ unset(filenames_)
|
|
|
+ if(CPACK_RPM_DEBUGINFO_PACKAGE AND NOT CPACK_RPM_FILE_NAME STREQUAL "RPM-DEFAULT")
|
|
|
+ string(TOLOWER "${CPACK_RPM_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.*\\.rpm" efn_)
|
|
|
+ list(APPEND expected_filenames_ "${efn_}")
|
|
|
+ list(APPEND filenames_ "${CPACK_RPM_FILE_NAME}")
|
|
|
+ endif()
|
|
|
|
|
|
- if(NOT GENERATED_FILES)
|
|
|
- message(FATAL_ERROR "RPM package was not generated! ${CPACK_RPM_DIRECTORY}")
|
|
|
- endif()
|
|
|
+ # check if other files have to be renamed
|
|
|
+ file(GLOB rename_files_ "${CPACK_RPM_DIRECTORY}/SPECS/*.rpm_name")
|
|
|
+ if(rename_files_)
|
|
|
+ foreach(f_ IN LISTS rename_files_)
|
|
|
+ file(READ "${f_}" tmp_)
|
|
|
+ list(GET tmp_ 0 efn_)
|
|
|
+ list(APPEND expected_filenames_ "${efn_}")
|
|
|
+ list(GET tmp_ 1 fn_)
|
|
|
+ list(APPEND filenames_ "${fn_}")
|
|
|
+ endforeach()
|
|
|
+ endif()
|
|
|
|
|
|
- if(CPACK_RPM_DEBUGINFO_PACKAGE AND NOT CPACK_RPM_FILE_NAME STREQUAL "RPM-DEFAULT")
|
|
|
- string(TOLOWER "${CPACK_RPM_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.*\\.rpm" EXPECTED_FILENAME)
|
|
|
+ if(expected_filenames_)
|
|
|
+ foreach(F IN LISTS GENERATED_FILES)
|
|
|
+ unset(matched_)
|
|
|
+ foreach(expected_ IN LISTS expected_filenames_)
|
|
|
+ if(F MATCHES ".*/${expected_}")
|
|
|
+ list(FIND expected_filenames_ "${expected_}" idx_)
|
|
|
+ list(GET filenames_ ${idx_} filename_)
|
|
|
+ get_filename_component(FILE_PATH "${F}" DIRECTORY)
|
|
|
+ file(RENAME "${F}" "${FILE_PATH}/${filename_}")
|
|
|
+ list(APPEND new_files_list_ "${FILE_PATH}/${filename_}")
|
|
|
+ set(matched_ "YES")
|
|
|
+
|
|
|
+ break()
|
|
|
+ endif()
|
|
|
+ endforeach()
|
|
|
|
|
|
- foreach(F IN LISTS GENERATED_FILES)
|
|
|
- if(F MATCHES ".*/${EXPECTED_FILENAME}")
|
|
|
- get_filename_component(FILE_PATH "${F}" DIRECTORY)
|
|
|
- file(RENAME "${F}" "${FILE_PATH}/${CPACK_RPM_FILE_NAME}")
|
|
|
- list(APPEND new_files_list_ "${FILE_PATH}/${CPACK_RPM_FILE_NAME}")
|
|
|
- else()
|
|
|
- list(APPEND new_files_list_ "${F}")
|
|
|
- endif()
|
|
|
- endforeach()
|
|
|
+ if(NOT matched_)
|
|
|
+ list(APPEND new_files_list_ "${F}")
|
|
|
+ endif()
|
|
|
+ endforeach()
|
|
|
|
|
|
- set(GENERATED_FILES "${new_files_list_}")
|
|
|
+ set(GENERATED_FILES "${new_files_list_}")
|
|
|
+ endif()
|
|
|
endif()
|
|
|
|
|
|
set(GEN_CPACK_OUTPUT_FILES "${GENERATED_FILES}" PARENT_SCOPE)
|