Merge topic 'cpack_rpm_component_fall_through'

be089724 CPack/RPM prevent component attributes leakage
ffc1b945 CPack/RPM improved component override test
This commit is contained in:
Brad King 2015-03-20 09:47:39 -04:00 committed by CMake Topic Stage
commit 4faa4c60ce
3 changed files with 674 additions and 705 deletions

View File

@ -494,6 +494,7 @@ if(NOT UNIX)
message(FATAL_ERROR "CPackRPM.cmake may only be used under UNIX.")
endif()
function(cpack_rpm_generate_package)
# rpmbuild is the basic command for building RPM package
# it may be a simple (symbolic) link to rpm command.
find_program(RPMBUILD_EXECUTABLE rpmbuild)
@ -576,14 +577,6 @@ set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACK
# CPACK_RPM_PACKAGE_SUMMARY (mandatory)
# CPACK_RPM_PACKAGE_SUMMARY_ is used only locally so that it can be unset each time before use otherwise
# component packaging could leak variable content between components
unset(CPACK_RPM_PACKAGE_SUMMARY_)
if(CPACK_RPM_PACKAGE_SUMMARY)
set(CPACK_RPM_PACKAGE_SUMMARY_ ${CPACK_RPM_PACKAGE_SUMMARY})
unset(CPACK_RPM_PACKAGE_SUMMARY)
endif()
#Check for component summary first.
#If not set, it will use regular package summary logic.
if(CPACK_RPM_PACKAGE_COMPONENT)
@ -593,9 +586,7 @@ if(CPACK_RPM_PACKAGE_COMPONENT)
endif()
if(NOT CPACK_RPM_PACKAGE_SUMMARY)
if(CPACK_RPM_PACKAGE_SUMMARY_)
set(CPACK_RPM_PACKAGE_SUMMARY ${CPACK_RPM_PACKAGE_SUMMARY_})
elseif(CPACK_PACKAGE_DESCRIPTION_SUMMARY)
if(CPACK_PACKAGE_DESCRIPTION_SUMMARY)
set(CPACK_RPM_PACKAGE_SUMMARY ${CPACK_PACKAGE_DESCRIPTION_SUMMARY})
else()
# if neither var is defined lets use the name as summary
@ -691,14 +682,6 @@ endif()
# - set to a default value
#
# CPACK_RPM_PACKAGE_DESCRIPTION_ is used only locally so that it can be unset each time before use otherwise
# component packaging could leak variable content between components
unset(CPACK_RPM_PACKAGE_DESCRIPTION_)
if(CPACK_RPM_PACKAGE_DESCRIPTION)
set(CPACK_RPM_PACKAGE_DESCRIPTION_ ${CPACK_RPM_PACKAGE_DESCRIPTION})
unset(CPACK_RPM_PACKAGE_DESCRIPTION)
endif()
#Check for a component description first.
#If not set, it will use regular package description logic.
if(CPACK_RPM_PACKAGE_COMPONENT)
@ -710,9 +693,7 @@ if(CPACK_RPM_PACKAGE_COMPONENT)
endif()
if(NOT CPACK_RPM_PACKAGE_DESCRIPTION)
if(CPACK_RPM_PACKAGE_DESCRIPTION_)
set(CPACK_RPM_PACKAGE_DESCRIPTION ${CPACK_RPM_PACKAGE_DESCRIPTION_})
elseif(CPACK_PACKAGE_DESCRIPTION_FILE)
if(CPACK_PACKAGE_DESCRIPTION_FILE)
file(READ ${CPACK_PACKAGE_DESCRIPTION_FILE} CPACK_RPM_PACKAGE_DESCRIPTION)
else ()
set(CPACK_RPM_PACKAGE_DESCRIPTION "no package description available")
@ -745,8 +726,6 @@ if(CPACK_PACKAGE_RELOCATABLE)
set(CPACK_RPM_PACKAGE_RELOCATABLE TRUE)
endif()
if(CPACK_RPM_PACKAGE_RELOCATABLE)
unset(TMP_RPM_PREFIXES)
if(CPACK_RPM_PACKAGE_DEBUG)
message("CPackRPM:Debug: Trying to build a relocatable package")
endif()
@ -790,8 +769,6 @@ foreach(_RPM_SPEC_HEADER URL REQUIRES SUGGESTS PROVIDES OBSOLETES PREFIX CONFLIC
endif()
endif()
# Do not forget to unset previously set header (from previous component)
unset(TMP_RPM_${_RPM_SPEC_HEADER})
# Treat the RPM Spec keyword iff it has been properly defined
if(DEFINED CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP)
# Transform NAME --> Name e.g. PROVIDES --> Provides
@ -1148,6 +1125,7 @@ else()
set(CPACK_RPM_ABSOLUTE_INSTALL_FILES "")
endif()
# Prepend directories in ${CPACK_RPM_INSTALL_FILES} with %dir
# This is necessary to avoid duplicate files since rpmbuild do
# recursion on its own when encountering a pathname which is a directory
@ -1319,15 +1297,6 @@ else()
message(FATAL_ERROR "RPM packaging through alien not done (yet)")
endif()
endif()
endfunction()
# reset variables from temporary variables
if(CPACK_RPM_PACKAGE_SUMMARY_)
set(CPACK_RPM_PACKAGE_SUMMARY ${CPACK_RPM_PACKAGE_SUMMARY_})
else()
unset(CPACK_RPM_PACKAGE_SUMMARY)
endif()
if(CPACK_RPM_PACKAGE_DESCRIPTION_)
set(CPACK_RPM_PACKAGE_DESCRIPTION ${CPACK_RPM_PACKAGE_DESCRIPTION_})
else()
unset(CPACK_RPM_PACKAGE_DESCRIPTION)
endif()
cpack_rpm_generate_package()

View File

@ -22,12 +22,12 @@ if(CPACK_GENERATOR MATCHES "RPM")
# test cross-built rpm
set(CPACK_RPM_applications_PACKAGE_ARCHITECTURE "armv7hf")
# test package summary override
# test package summary override - headers rpm is generated in the middle
set(CPACK_RPM_PACKAGE_SUMMARY "default summary")
set(CPACK_RPM_libraries_PACKAGE_SUMMARY "libraries summary")
set(CPACK_RPM_headers_PACKAGE_SUMMARY "headers summary")
# test package description override
set(CPACK_RPM_libraries_PACKAGE_DESCRIPTION "libraries description")
# test package description override - headers rpm is generated in the middle
set(CPACK_RPM_headers_PACKAGE_DESCRIPTION "headers description")
endif()
if(CPACK_GENERATOR MATCHES "DEB")

View File

@ -132,12 +132,12 @@ if(CPackGen MATCHES "RPM")
endif()
set(CPACK_RPM_PACKAGE_SUMMARY "default summary")
set(CPACK_RPM_libraries_PACKAGE_SUMMARY "libraries summary")
set(CPACK_RPM_libraries_PACKAGE_DESCRIPTION "libraries description")
set(CPACK_RPM_headers_PACKAGE_SUMMARY "headers summary")
set(CPACK_RPM_headers_PACKAGE_DESCRIPTION "headers description")
set(CPACK_COMPONENT_APPLICATIONS_DESCRIPTION
"An extremely useful application that makes use of MyLib")
set(CPACK_COMPONENT_HEADERS_DESCRIPTION
"C/C\\+\\+ header files for use with MyLib")
set(CPACK_COMPONENT_LIBRARIES_DESCRIPTION
"Static libraries used to build programs with MyLib")
# test package info
if(${CPackComponentWay} STREQUAL "IgnoreGroup")
@ -172,15 +172,15 @@ if(CPackGen MATCHES "RPM")
set(whitespaces "[\\t\\n\\r ]*")
if(check_file_libraries_match)
set(check_file_match_expected_summary ".*${CPACK_RPM_libraries_PACKAGE_SUMMARY}.*")
set(check_file_match_expected_description ".*${CPACK_RPM_libraries_PACKAGE_DESCRIPTION}.*")
set(check_file_match_expected_summary ".*${CPACK_RPM_PACKAGE_SUMMARY}.*")
set(check_file_match_expected_description ".*${CPACK_COMPONENT_LIBRARIES_DESCRIPTION}.*")
set(check_file_match_expected_relocation_path "Relocations${whitespaces}:${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
set(check_file_match_expected_architecture "") # we don't explicitly set this value so it is different on each platform - ignore it
set(spec_regex "*libraries*")
set(check_content_list "^/usr/foo/bar\n/usr/foo/bar/lib.*\n/usr/foo/bar/lib.*/libmylib.a$")
elseif(check_file_headers_match)
set(check_file_match_expected_summary ".*${CPACK_RPM_PACKAGE_SUMMARY}.*")
set(check_file_match_expected_description ".*${CPACK_COMPONENT_HEADERS_DESCRIPTION}.*")
set(check_file_match_expected_summary ".*${CPACK_RPM_headers_PACKAGE_SUMMARY}.*")
set(check_file_match_expected_description ".*${CPACK_RPM_headers_PACKAGE_DESCRIPTION}.*")
set(check_file_match_expected_relocation_path "Relocations${whitespaces}:${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}")
set(check_file_match_expected_architecture "noarch")
set(spec_regex "*headers*")