# prevent older policies from interfearing with this script
cmake_policy ( PUSH )
cmake_policy ( VERSION ${ CMAKE_VERSION } )
message ( STATUS "=============================================================================" )
message ( STATUS "CTEST_FULL_OUTPUT (Avoid ctest truncation of output)" )
message ( STATUS "" )
if ( NOT CPackComponentsForAll_BINARY_DIR )
message ( FATAL_ERROR "CPackComponentsForAll_BINARY_DIR not set" )
endif ( )
if ( NOT CPackGen )
message ( FATAL_ERROR "CPackGen not set" )
endif ( )
message ( "CMAKE_CPACK_COMMAND = ${CMAKE_CPACK_COMMAND}" )
if ( NOT CMAKE_CPACK_COMMAND )
message ( FATAL_ERROR "CMAKE_CPACK_COMMAND not set" )
endif ( )
if ( NOT CPackComponentWay )
message ( FATAL_ERROR "CPackComponentWay not set" )
endif ( )
set ( expected_file_mask "" )
# The usual default behavior is to expect a single file
# Then some specific generators (Archive, RPM, ...)
# May produce several numbers of files depending on
# CPACK_COMPONENT_xxx values
set ( expected_count 1 )
set ( config_type $ENV{ CMAKE_CONFIG_TYPE } )
set ( config_args )
if ( config_type )
set ( config_args -C ${ config_type } )
endif ( )
set ( config_verbose )
if ( CPackGen MATCHES "ZIP" )
set ( expected_file_mask "${CPackComponentsForAll_BINARY_DIR}/MyLib-*.zip" )
if ( ${ CPackComponentWay } STREQUAL "default" )
set ( expected_count 1 )
elseif ( ${ CPackComponentWay } STREQUAL "OnePackPerGroup" )
set ( expected_count 3 )
elseif ( ${ CPackComponentWay } STREQUAL "IgnoreGroup" )
set ( expected_count 4 )
elseif ( ${ CPackComponentWay } STREQUAL "AllInOne" )
set ( expected_count 1 )
endif ( )
elseif ( CPackGen MATCHES "RPM" )
set ( config_verbose -D "CPACK_RPM_PACKAGE_DEBUG=1" )
set ( expected_file_mask "${CPackComponentsForAll_BINARY_DIR}/MyLib-*.rpm" )
if ( ${ CPackComponentWay } STREQUAL "default" )
set ( expected_count 1 )
elseif ( ${ CPackComponentWay } STREQUAL "OnePackPerGroup" )
set ( expected_count 3 )
elseif ( ${ CPackComponentWay } STREQUAL "IgnoreGroup" )
set ( expected_count 4 )
elseif ( ${ CPackComponentWay } STREQUAL "AllInOne" )
set ( expected_count 1 )
endif ( )
elseif ( CPackGen MATCHES "DEB" )
set ( expected_file_mask "${CPackComponentsForAll_BINARY_DIR}/mylib*_1.0.2_*.deb" )
if ( ${ CPackComponentWay } STREQUAL "default" )
set ( expected_count 1 )
elseif ( ${ CPackComponentWay } STREQUAL "OnePackPerGroup" )
set ( expected_count 3 )
elseif ( ${ CPackComponentWay } STREQUAL "IgnoreGroup" )
set ( expected_count 4 )
elseif ( ${ CPackComponentWay } STREQUAL "AllInOne" )
set ( expected_count 1 )
endif ( )
elseif ( CPackGen MATCHES "NuGet" )
set ( config_verbose -D "CPACK_NUGET_PACKAGE_DEBUG=1" )
set ( expected_file_mask "${CPackComponentsForAll_BINARY_DIR}/MyLib*1.0.2.nupkg" )
if ( ${ CPackComponentWay } STREQUAL "default" )
set ( expected_count 1 )
elseif ( ${ CPackComponentWay } STREQUAL "OnePackPerGroup" )
set ( expected_count 3 )
elseif ( ${ CPackComponentWay } STREQUAL "IgnoreGroup" )
set ( expected_count 4 )
elseif ( ${ CPackComponentWay } STREQUAL "AllInOne" )
set ( expected_count 1 )
endif ( )
endif ( )
if ( CPackGen MATCHES "DragNDrop" )
set ( expected_file_mask "${CPackComponentsForAll_BINARY_DIR}/MyLib-*.dmg" )
if ( ${ CPackComponentWay } STREQUAL "default" )
set ( expected_count 1 )
set ( expect_dmg_sla 1 )
elseif ( ${ CPackComponentWay } STREQUAL "OnePackPerGroup" )
set ( expected_count 3 )
elseif ( ${ CPackComponentWay } STREQUAL "IgnoreGroup" )
set ( expected_count 4 )
elseif ( ${ CPackComponentWay } STREQUAL "AllInOne" )
set ( expected_count 1 )
set ( expect_dmg_sla 1 )
endif ( )
endif ( )
# clean-up previously CPack generated files
if ( expected_file_mask )
file ( GLOB expected_file "${expected_file_mask}" )
if ( expected_file )
file ( REMOVE ${ expected_file } )
endif ( )
endif ( )
message ( "config_args = ${config_args}" )
message ( "config_verbose = ${config_verbose}" )
execute_process ( COMMAND ${ CMAKE_CPACK_COMMAND } ${ config_verbose } -G ${ CPackGen } ${ config_args }
R E S U L T _ V A R I A B L E C P a c k _ r e s u l t
O U T P U T _ V A R I A B L E C P a c k _ o u t p u t
E R R O R _ V A R I A B L E C P a c k _ e r r o r
W O R K I N G _ D I R E C T O R Y $ { C P a c k C o m p o n e n t s F o r A l l _ B I N A R Y _ D I R } )
string ( REPLACE "\n" "\n cpack-out> " cpack_out "\n${CPack_output}" )
string ( REPLACE "\n" "\n cpack-err> " cpack_err "\n${CPack_error}" )
string ( REPLACE "\n" "\n cpack-res> " cpack_res "\n${CPack_result}" )
string ( CONCAT output_error_message
" C P a c k o u t p u t : $ { c p a c k _ o u t } \ n "
" C P a c k e r r o r : $ { c p a c k _ e r r } \ n "
" C P a c k r e s u l t : $ { c p a c k _ r e s } \ n "
)
if ( CPack_result )
message ( FATAL_ERROR "error: CPack execution went wrong!,\n${output_error_message}" )
else ( )
message ( STATUS "CPack_output=${CPack_output}" )
endif ( )
# Now verify if the number of expected file is OK
# - using expected_file_mask and
# - expected_count
if ( expected_file_mask )
file ( GLOB expected_file "${expected_file_mask}" )
message ( STATUS "expected_count='${expected_count}'" )
message ( STATUS "expected_file='${expected_file}'" )
message ( STATUS "expected_file_mask='${expected_file_mask}'" )
if ( NOT expected_file )
message ( FATAL_ERROR "error: expected_file does not exist: CPackComponentsForAll test fails.\n${output_error_message}" )
endif ( )
list ( LENGTH expected_file actual_count )
message ( STATUS "actual_count='${actual_count}'" )
if ( NOT actual_count EQUAL expected_count )
message ( FATAL_ERROR "error: expected_count=${expected_count} does not match actual_count=${actual_count}: CPackComponents test fails.\n${output_error_message}" )
endif ( )
if ( expect_dmg_sla )
execute_process ( COMMAND hdiutil udifderez -xml "${expected_file}" OUTPUT_VARIABLE out ERROR_VARIABLE err RESULT_VARIABLE res )
if ( NOT res EQUAL 0 )
string ( REPLACE "\n" "\n " err " ${err}" )
message ( FATAL_ERROR "error: running 'hdiutil udifderez -xml' on\n ${expected_file}\nfailed with:\n${err}" )
endif ( )
foreach ( key "LPic" "STR#" "TEXT" )
if ( NOT out MATCHES "<key>${key}</key>" )
string ( REPLACE "\n" "\n " out " ${out}" )
message ( FATAL_ERROR "error: running 'hdiutil udifderez -xml' on\n ${expected_file}\ndid not show '${key}' key:\n${out}" )
endif ( )
endforeach ( )
foreach ( line
# LPic first and last base64 lines
" \ t A A I A E Q A D A A E A A A A A A A I A A A A I A A M A A A A B A A Q A A A A E A A U A A A A O A A Y A \ n "
" \ t A A 0 A A A B b A A Q A A A A z A A 8 A A Q A M A B A A A A A L A A 4 A A A = = \ n "
# STR# first and last base64 lines
" \ t A A k H R W 5 n b G l z a A V B Z 3 J l Z Q h E a X N h Z 3 J l Z Q V Q c m l u d A d T Y X Z l L i 4 u \ n "
" \ t d G V k I G E g c H J p b n R l c i 4 = \ n "
# TEXT first and last base64 lines
" \ t T E l D R U 5 T R Q 0 t L S 0 t L S 0 t D V R o a X M g a X M g Y W 4 g a W 5 z d G F s b G V y I G N y \ n "
" \ t T m 8 g b G l j Z W 5 z Z S B w c m 9 2 a W R l Z C 4 N D Q = = \ n "
)
if ( NOT out MATCHES "${line}" )
string ( REPLACE "\n" "\n " out " ${out}" )
message ( FATAL_ERROR "error: running 'hdiutil udifderez -xml' on\n ${expected_file}\ndid not show '${line}':\n${out}" )
endif ( )
endforeach ( )
endif ( )
endif ( )
# Validate content
if ( CPackGen MATCHES "RPM" )
find_program ( RPM_EXECUTABLE rpm )
if ( NOT RPM_EXECUTABLE )
message ( FATAL_ERROR "error: missing rpm executable required by the test" )
endif ( )
set ( CPACK_RPM_PACKAGE_SUMMARY "default summary" )
set ( CPACK_RPM_HEADERS_PACKAGE_SUMMARY "headers summary" )
set ( CPACK_RPM_HEADERS_PACKAGE_DESCRIPTION "headers description" )
set ( CPACK_COMPONENT_APPLICATIONS_DESCRIPTION
" A n e x t r e m e l y u s e f u l a p p l i c a t i o n t h a t m a k e s u s e o f M y L i b " )
set ( CPACK_COMPONENT_LIBRARIES_DESCRIPTION
" S t a t i c l i b r a r i e s u s e d t o b u i l d p r o g r a m s w i t h M y L i b " )
set ( LIB_SUFFIX "6?4?" )
# test package info
if ( ${ CPackComponentWay } STREQUAL "IgnoreGroup" )
# set gnu install prefixes to what they are set during rpm creation
# CMAKE_SIZEOF_VOID_P is not set here but lib is prefix of lib64 so
# relocation path test won't fail on OSes with lib64 library location
include ( GNUInstallDirs )
set ( CPACK_PACKAGING_INSTALL_PREFIX "/usr/foo/bar" )
foreach ( check_file ${ expected_file } )
string ( REGEX MATCH ".*libraries.*" check_file_libraries_match ${ check_file } )
string ( REGEX MATCH ".*headers.*" check_file_headers_match ${ check_file } )
string ( REGEX MATCH ".*applications.*" check_file_applications_match ${ check_file } )
string ( REGEX MATCH ".*Unspecified.*" check_file_Unspecified_match ${ check_file } )
execute_process ( COMMAND ${ RPM_EXECUTABLE } -pqi ${ check_file }
O U T P U T _ V A R I A B L E c h e c k _ f i l e _ c o n t e n t
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
execute_process ( COMMAND ${ RPM_EXECUTABLE } -pqa ${ check_file }
R E S U L T _ V A R I A B L E c h e c k _ p a c k a g e _ a r c h i t e c t u r e _ r e s u l t
O U T P U T _ V A R I A B L E c h e c k _ p a c k a g e _ a r c h i t e c t u r e
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
execute_process ( COMMAND ${ RPM_EXECUTABLE } -pql ${ check_file }
O U T P U T _ V A R I A B L E c h e c k _ p a c k a g e _ c o n t e n t
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
set ( whitespaces "[\\t\\n\\r ]*" )
if ( check_file_libraries_match )
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}/${CMAKE_INSTALL_LIBDIR}${LIB_SUFFIX}${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}/other_relocatable${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}${LIB_SUFFIX}/inside_relocatable_two/depth_two/different_relocatable" )
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/lib ${ LIB_SUFFIX }
/ u s r / f o o / b a r / l i b $ { L I B _ S U F F I X } / i n s i d e _ r e l o c a t a b l e _ o n e
/ u s r / f o o / b a r / l i b $ { L I B _ S U F F I X } / i n s i d e _ r e l o c a t a b l e _ o n e / d e p t h _ t w o
/ u s r / f o o / b a r / l i b $ { L I B _ S U F F I X } / i n s i d e _ r e l o c a t a b l e _ o n e / d e p t h _ t w o / d e p t h _ t h r e e
/ u s r / f o o / b a r / l i b $ { L I B _ S U F F I X } / i n s i d e _ r e l o c a t a b l e _ o n e / d e p t h _ t w o / d e p t h _ t h r e e / s y m l i n k _ p a r e n t d i r _ p a t h
/ u s r / f o o / b a r / l i b $ { L I B _ S U F F I X } / i n s i d e _ r e l o c a t a b l e _ o n e / d e p t h _ t w o / s y m l i n k _ o u t s i d e _ p a c k a g e
/ u s r / f o o / b a r / l i b $ { L I B _ S U F F I X } / i n s i d e _ r e l o c a t a b l e _ o n e / d e p t h _ t w o / s y m l i n k _ o u t s i d e _ w d r
/ u s r / f o o / b a r / l i b $ { L I B _ S U F F I X } / i n s i d e _ r e l o c a t a b l e _ o n e / d e p t h _ t w o / s y m l i n k _ r e l o c a t a b l e _ s u b p a t h
/ u s r / f o o / b a r / l i b $ { L I B _ S U F F I X } / i n s i d e _ r e l o c a t a b l e _ o n e / d e p t h _ t w o / s y m l i n k _ s a m e d i r _ p a t h
/ u s r / f o o / b a r / l i b $ { L I B _ S U F F I X } / i n s i d e _ r e l o c a t a b l e _ o n e / d e p t h _ t w o / s y m l i n k _ s a m e d i r _ p a t h _ c u r r e n t _ d i r
/ u s r / f o o / b a r / l i b $ { L I B _ S U F F I X } / i n s i d e _ r e l o c a t a b l e _ o n e / d e p t h _ t w o / s y m l i n k _ s a m e d i r _ p a t h _ l o n g e r
/ u s r / f o o / b a r / l i b $ { L I B _ S U F F I X } / i n s i d e _ r e l o c a t a b l e _ o n e / s y m l i n k _ s u b d i r _ p a t h
/ u s r / f o o / b a r / l i b $ { L I B _ S U F F I X } / i n s i d e _ r e l o c a t a b l e _ t w o
/ u s r / f o o / b a r / l i b $ { L I B _ S U F F I X } / i n s i d e _ r e l o c a t a b l e _ t w o / d e p t h _ t w o
/ u s r / f o o / b a r / l i b $ { L I B _ S U F F I X } / i n s i d e _ r e l o c a t a b l e _ t w o / d e p t h _ t w o / d i f f e r e n t _ r e l o c a t a b l e
/ u s r / f o o / b a r / l i b $ { L I B _ S U F F I X } / i n s i d e _ r e l o c a t a b l e _ t w o / d e p t h _ t w o / d i f f e r e n t _ r e l o c a t a b l e / b a r
/ u s r / f o o / b a r / l i b $ { L I B _ S U F F I X } / i n s i d e _ r e l o c a t a b l e _ t w o / d e p t h _ t w o / s y m l i n k _ o t h e r _ r e l o c a t a b l e _ p a t h
/ u s r / f o o / b a r / l i b $ { L I B _ S U F F I X } / i n s i d e _ r e l o c a t a b l e _ t w o / d e p t h _ t w o / s y m l i n k _ t o _ n o n _ r e l o c a t a b l e _ p a t h
/ u s r / f o o / b a r / l i b $ { L I B _ S U F F I X } / l i b m y l i b . a
/ u s r / f o o / b a r / n o n _ r e l o c a t a b l e
/ u s r / f o o / b a r / n o n _ r e l o c a t a b l e / d e p t h _ t w o
/ u s r / f o o / b a r / n o n _ r e l o c a t a b l e / d e p t h _ t w o / s y m l i n k _ f r o m _ n o n _ r e l o c a t a b l e _ p a t h
/ u s r / f o o / b a r / o t h e r _ r e l o c a t a b l e
/ u s r / f o o / b a r / o t h e r _ r e l o c a t a b l e / depth_two ( \n.*\.build-id.*)*$")
elseif ( check_file_headers_match )
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*" )
set ( check_content_list "^/usr/foo/bar\n/usr/foo/bar/include\n/usr/foo/bar/include/mylib.h(\n.*\.build-id.*)*$" )
elseif ( check_file_applications_match )
set ( check_file_match_expected_summary ".*${CPACK_RPM_PACKAGE_SUMMARY}.*" )
set ( check_file_match_expected_description ".*${CPACK_COMPONENT_APPLICATIONS_DESCRIPTION}.*" )
set ( check_file_match_expected_relocation_path "Relocations${whitespaces}:${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}" )
set ( check_file_match_expected_architecture "armv7hl" )
set ( spec_regex "*applications*" )
set ( check_content_list " ^/usr/foo/bar
/ u s r / f o o / b a r / b i n
/ u s r / f o o / b a r / b i n / mylibapp ( \n.*\.build-id.*)*$")
elseif ( check_file_Unspecified_match )
set ( check_file_match_expected_summary ".*${CPACK_RPM_PACKAGE_SUMMARY}.*" )
set ( check_file_match_expected_description ".*DESCRIPTION.*" )
set ( check_file_match_expected_relocation_path "Relocations${whitespaces}:${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}" )
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 "*Unspecified*" )
set ( check_content_list " ^/usr/foo/bar
/ u s r / f o o / b a r / b i n
/ u s r / f o o / b a r / b i n / @ i n @ _ @ p a t h @ @ w i t h
/ u s r / f o o / b a r / b i n / @ i n @ _ @ p a t h @ @ w i t h / @ a n d
/ u s r / f o o / b a r / b i n / @ i n @ _ @ p a t h @ @ w i t h / @ a n d / @
/ u s r / f o o / b a r / b i n / @ i n @ _ @ p a t h @ @ w i t h / @ a n d / @ / @ i n _ p a t h @
/ u s r / f o o / b a r / b i n / @ i n @ _ @ p a t h @ @ w i t h / @ a n d / @ / @ i n _ p a t h @ / m y l i b a p p 2
/ u s r / f o o / b a r / s h a r e
/ u s r / f o o / b a r / s h a r e / m a n
/ u s r / f o o / b a r / s h a r e / m a n / m y l i b
/ u s r / f o o / b a r / s h a r e / m a n / m y l i b / m a n 3
/ u s r / f o o / b a r / s h a r e / m a n / m y l i b / m a n 3 / m y l i b . 1
/ u s r / f o o / b a r / s h a r e / m a n / m y l i b / m a n 3 / m y l i b . 1 / m y l i b
/ u s r / f o o / b a r / s h a r e / m a n / m y l i b / m a n 3 / m y l i b . 1 / mylib2 ( \n.*\.build-id.*)*$")
else ( )
message ( FATAL_ERROR "error: unexpected rpm package '${check_file}'" )
endif ( )
#######################
# test package info
#######################
string ( REGEX MATCH ${ check_file_match_expected_summary } check_file_match_summary ${ check_file_content } )
if ( NOT check_file_match_summary )
message ( FATAL_ERROR "error: '${check_file}' rpm package summary does not match expected value - regex '${check_file_match_expected_summary}'; RPM output: '${check_file_content}'" )
endif ( )
string ( REGEX MATCH ${ check_file_match_expected_description } check_file_match_description ${ check_file_content } )
if ( NOT check_file_match_description )
message ( FATAL_ERROR "error: '${check_file}' rpm package description does not match expected value - regex '${check_file_match_expected_description}'; RPM output: '${check_file_content}'" )
endif ( )
string ( REGEX MATCH ${ check_file_match_expected_relocation_path } check_file_match_relocation_path ${ check_file_content } )
if ( NOT check_file_match_relocation_path )
file ( GLOB_RECURSE spec_file "${CPackComponentsForAll_BINARY_DIR}/${spec_regex}.spec" )
if ( spec_file )
file ( READ ${ spec_file } spec_file_content )
endif ( )
message ( FATAL_ERROR "error: '${check_file}' rpm package relocation path does not match expected value - regex '${check_file_match_expected_relocation_path}'; RPM output: '${check_file_content}'; generated spec file: '${spec_file_content}'" )
endif ( )
#######################
# test package architecture
#######################
string ( REGEX MATCH "Architecture${whitespaces}:" check_info_contains_arch ${ check_file_content } )
if ( check_info_contains_arch ) # test for rpm versions that contain architecture in package info (e.g. 4.11.x)
string ( REGEX MATCH "Architecture${whitespaces}:${whitespaces}${check_file_match_expected_architecture}" check_file_match_architecture ${ check_file_content } )
if ( NOT check_file_match_architecture )
message ( FATAL_ERROR "error: '${check_file}' Architecture does not match expected value - '${check_file_match_expected_architecture}'; RPM output: '${check_file_content}'; generated spec file: '${spec_file_content}'" )
endif ( )
elseif ( NOT check_package_architecture_result ) # test result only on platforms that support -pqa rpm query
# test for rpm versions that do not contain architecture in package info (e.g. 4.8.x)
string ( REGEX MATCH ".*${check_file_match_expected_architecture}" check_file_match_architecture "${check_package_architecture}" )
if ( NOT check_file_match_architecture )
message ( FATAL_ERROR "error: '${check_file}' Architecture does not match expected value - '${check_file_match_expected_architecture}'; RPM output: '${check_package_architecture}'; generated spec file: '${spec_file_content}'" )
endif ( )
# else rpm version too old (e.g. 4.4.x) - skip test
endif ( )
#######################
# test package content
#######################
string ( REGEX MATCH "${check_content_list}" expected_content_list "${check_package_content}" )
if ( NOT expected_content_list )
file ( GLOB_RECURSE spec_file "${CPackComponentsForAll_BINARY_DIR}/${spec_regex}.spec" )
if ( spec_file )
file ( READ ${ spec_file } spec_file_content )
endif ( )
message ( FATAL_ERROR "error: '${check_file}' rpm package content does not match expected value - regex '${check_content_list}'; RPM output: '${check_package_content}'; generated spec file: '${spec_file_content}'" )
endif ( )
# validate permissions user and group
execute_process ( COMMAND ${ RPM_EXECUTABLE } -pqlv ${ check_file }
O U T P U T _ V A R I A B L E c h e c k _ f i l e _ c o n t e n t
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
if ( check_file_libraries_match )
set ( check_file_match_expected_permissions ".*-rwx------.*user.*defgrp.*" )
elseif ( check_file_headers_match )
set ( check_file_match_expected_permissions ".*-rwxr--r--.*defusr.*defgrp.*" )
elseif ( check_file_applications_match )
set ( check_file_match_expected_permissions ".*-rwxr--r--.*defusr.*group.*" )
elseif ( check_file_Unspecified_match )
set ( check_file_match_expected_permissions ".*-rwxr--r--.*defusr.*defgrp.*" )
else ( )
message ( FATAL_ERROR "error: unexpected rpm package '${check_file}'" )
endif ( )
string ( REGEX MATCH "${check_file_match_expected_permissions}" check_file_match_permissions "${check_file_content}" )
if ( NOT check_file_match_permissions )
message ( FATAL_ERROR "error: '${check_file}' rpm package permissions do not match expected value - regex '${check_file_match_expected_permissions}'" )
endif ( )
endforeach ( )
#######################
# verify generated symbolic links
#######################
file ( GLOB_RECURSE symlink_files RELATIVE "${CPackComponentsForAll_BINARY_DIR}" "${CPackComponentsForAll_BINARY_DIR}/*/symlink_*" )
foreach ( check_symlink IN LISTS symlink_files )
get_filename_component ( symlink_name "${check_symlink}" NAME )
execute_process ( COMMAND ls -la "${check_symlink}"
W O R K I N G _ D I R E C T O R Y " $ { C P a c k C o m p o n e n t s F o r A l l _ B I N A R Y _ D I R } "
O U T P U T _ V A R I A B L E S Y M L I N K _ P O I N T _
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
if ( "${symlink_name}" STREQUAL "symlink_samedir_path"
O R " $ { s y m l i n k _ n a m e } " S T R E Q U A L " s y m l i n k _ s a m e d i r _ p a t h _ c u r r e n t _ d i r "
O R " $ { s y m l i n k _ n a m e } " S T R E Q U A L " s y m l i n k _ s a m e d i r _ p a t h _ l o n g e r " )
string ( REGEX MATCH "^.*${whitespaces}->${whitespaces}depth_three$" check_symlink "${SYMLINK_POINT_}" )
elseif ( "${symlink_name}" STREQUAL "symlink_subdir_path" )
string ( REGEX MATCH "^.*${whitespaces}->${whitespaces}depth_two/depth_three$" check_symlink "${SYMLINK_POINT_}" )
elseif ( "${symlink_name}" STREQUAL "symlink_parentdir_path" )
string ( REGEX MATCH "^.*${whitespaces}->${whitespaces}../$" check_symlink "${SYMLINK_POINT_}" )
elseif ( "${symlink_name}" STREQUAL "symlink_to_non_relocatable_path" )
string ( REGEX MATCH "^.*${whitespaces}->${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}/non_relocatable/depth_two$" check_symlink "${SYMLINK_POINT_}" )
elseif ( "${symlink_name}" STREQUAL "symlink_outside_package" )
string ( REGEX MATCH "^.*${whitespaces}->${whitespaces}outside_package$" check_symlink "${SYMLINK_POINT_}" )
elseif ( "${symlink_name}" STREQUAL "symlink_outside_wdr" )
string ( REGEX MATCH "^.*${whitespaces}->${whitespaces}/outside_package_wdr$" check_symlink "${SYMLINK_POINT_}" )
elseif ( "${symlink_name}" STREQUAL "symlink_other_relocatable_path"
O R " $ { s y m l i n k _ n a m e } " S T R E Q U A L " s y m l i n k _ f r o m _ n o n _ r e l o c a t a b l e _ p a t h "
O R " $ { s y m l i n k _ n a m e } " S T R E Q U A L " s y m l i n k _ r e l o c a t a b l e _ s u b p a t h " )
# these links were not changed - post install script only - ignore them
else ( )
message ( FATAL_ERROR "error: unexpected rpm symbolic link '${check_symlink}'" )
endif ( )
if ( NOT check_symlink )
message ( FATAL_ERROR "symlink points to unexpected location '${SYMLINK_POINT_}'" )
endif ( )
endforeach ( )
# verify post install symlink relocation script
file ( GLOB_RECURSE spec_file "${CPackComponentsForAll_BINARY_DIR}/*libraries*.spec" )
file ( READ ${ spec_file } spec_file_content )
file ( READ "${CMAKE_CURRENT_LIST_DIR}/symlink_postinstall_expected.txt" symlink_postinstall_expected )
# prepare regex
string ( STRIP "${symlink_postinstall_expected}" symlink_postinstall_expected )
string ( REPLACE "[" "\\[" symlink_postinstall_expected "${symlink_postinstall_expected}" )
string ( REPLACE "$" "\\$" symlink_postinstall_expected "${symlink_postinstall_expected}" )
string ( REPLACE "lib" "lib${LIB_SUFFIX}" symlink_postinstall_expected "${symlink_postinstall_expected}" )
# compare
string ( REGEX MATCH ".*${symlink_postinstall_expected}.*" symlink_postinstall_expected_matches "${spec_file_content}" )
if ( NOT symlink_postinstall_expected_matches )
message ( FATAL_ERROR "error: unexpected rpm symbolic link postinstall script! generated spec file: '${spec_file_content}'" )
endif ( )
endif ( )
endif ( )
cmake_policy ( POP )