2010-12-03 00:56:26 +03:00
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" )
2012-08-13 21:50:14 +04:00
endif ( )
2010-12-03 00:56:26 +03:00
if ( NOT CPackGen )
message ( FATAL_ERROR "CPackGen not set" )
2012-08-13 21:50:14 +04:00
endif ( )
2012-11-29 02:01:25 +04:00
message ( "CMAKE_CPACK_COMMAND = ${CMAKE_CPACK_COMMAND}" )
if ( NOT CMAKE_CPACK_COMMAND )
message ( FATAL_ERROR "CMAKE_CPACK_COMMAND not set" )
2012-08-13 21:50:14 +04:00
endif ( )
2010-12-11 13:59:02 +03:00
if ( NOT CPackComponentWay )
message ( FATAL_ERROR "CPackComponentWay not set" )
2012-08-13 21:50:14 +04:00
endif ( )
2010-12-11 13:59:02 +03:00
2010-12-03 00:56:26 +03:00
set ( expected_file_mask "" )
2010-12-11 13:59:02 +03:00
# The usual default behavior is to expect a single file
2010-12-12 14:19:50 +03:00
# Then some specific generators (Archive, RPM, ...)
# May produce several numbers of files depending on
# CPACK_COMPONENT_xxx values
2010-12-11 13:59:02 +03:00
set ( expected_count 1 )
2010-12-14 21:42:21 +03:00
set ( config_type $ENV{ CMAKE_CONFIG_TYPE } )
set ( config_args )
if ( config_type )
set ( config_args -C ${ config_type } )
2012-08-13 21:50:14 +04:00
endif ( )
2011-03-10 11:48:46 +03:00
set ( config_verbose )
2010-12-12 14:19:50 +03:00
2010-12-03 00:56:26 +03:00
if ( CPackGen MATCHES "ZIP" )
set ( expected_file_mask "${CPackComponentsForAll_BINARY_DIR}/MyLib-*.zip" )
2010-12-11 13:59:02 +03:00
if ( ${ CPackComponentWay } STREQUAL "default" )
set ( expected_count 1 )
2011-03-23 20:28:05 +03:00
elseif ( ${ CPackComponentWay } STREQUAL "OnePackPerGroup" )
2011-03-03 23:19:13 +03:00
set ( expected_count 3 )
2011-03-23 20:28:05 +03:00
elseif ( ${ CPackComponentWay } STREQUAL "IgnoreGroup" )
2011-01-30 15:11:25 +03:00
set ( expected_count 4 )
2011-03-23 20:28:05 +03:00
elseif ( ${ CPackComponentWay } STREQUAL "AllInOne" )
2011-03-03 22:45:43 +03:00
set ( expected_count 1 )
2011-03-23 20:28:05 +03:00
endif ( )
2011-03-03 22:45:43 +03:00
elseif ( CPackGen MATCHES "RPM" )
2011-03-10 11:48:46 +03:00
set ( config_verbose -D "CPACK_RPM_PACKAGE_DEBUG=1" )
2011-03-03 22:45:43 +03:00
set ( expected_file_mask "${CPackComponentsForAll_BINARY_DIR}/MyLib-*.rpm" )
if ( ${ CPackComponentWay } STREQUAL "default" )
set ( expected_count 1 )
2011-03-23 20:28:05 +03:00
elseif ( ${ CPackComponentWay } STREQUAL "OnePackPerGroup" )
set ( expected_count 3 )
elseif ( ${ CPackComponentWay } STREQUAL "IgnoreGroup" )
2011-03-03 22:45:43 +03:00
set ( expected_count 4 )
2011-03-23 20:28:05 +03:00
elseif ( ${ CPackComponentWay } STREQUAL "AllInOne" )
set ( expected_count 1 )
endif ( )
elseif ( CPackGen MATCHES "DEB" )
set ( expected_file_mask "${CPackComponentsForAll_BINARY_DIR}/MyLib-*.deb" )
if ( ${ CPackComponentWay } STREQUAL "default" )
2011-01-30 15:11:25 +03:00
set ( expected_count 1 )
2011-03-23 20:28:05 +03:00
elseif ( ${ CPackComponentWay } STREQUAL "OnePackPerGroup" )
set ( expected_count 3 )
elseif ( ${ CPackComponentWay } STREQUAL "IgnoreGroup" )
set ( expected_count 4 )
elseif ( ${ CPackComponentWay } STREQUAL "AllInOne" )
2011-01-30 15:11:25 +03:00
set ( expected_count 1 )
2011-03-23 20:28:05 +03:00
endif ( )
endif ( )
2010-12-03 00:56:26 +03:00
2011-03-28 19:11:27 +04:00
if ( CPackGen MATCHES "DragNDrop" )
set ( expected_file_mask "${CPackComponentsForAll_BINARY_DIR}/MyLib-*.dmg" )
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 ( )
2012-08-13 21:50:14 +04:00
endif ( )
2011-03-28 19:11:27 +04:00
2011-02-24 02:43:29 +03:00
# clean-up previously CPack generated files
if ( expected_file_mask )
file ( GLOB expected_file "${expected_file_mask}" )
if ( expected_file )
file ( REMOVE ${ expected_file } )
2012-08-13 21:50:14 +04:00
endif ( )
endif ( )
2011-02-24 02:43:29 +03:00
2011-03-10 11:48:46 +03:00
message ( "config_args = ${config_args}" )
message ( "config_verbose = ${config_verbose}" )
2012-11-29 02:01:25 +04:00
execute_process ( COMMAND ${ CMAKE_CPACK_COMMAND } ${ config_verbose } -G ${ CPackGen } ${ config_args }
2011-02-24 02:43:29 +03:00
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 } )
if ( CPack_result )
message ( FATAL_ERROR "error: CPack execution went wrong!, CPack_output=${CPack_output}, CPack_error=${CPack_error}" )
2012-08-13 21:50:14 +04:00
else ( )
2011-02-24 02:43:29 +03:00
message ( STATUS "CPack_output=${CPack_output}" )
2012-08-13 21:50:14 +04:00
endif ( )
2011-02-24 02:43:29 +03:00
2010-12-11 13:59:02 +03:00
# Now verify if the number of expected file is OK
# - using expected_file_mask and
# - expected_count
2010-12-03 00:56:26 +03:00
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 )
2010-12-13 00:35:18 +03:00
message ( FATAL_ERROR "error: expected_file=${expected_file} does not exist: CPackComponentsForAll test fails. (CPack_output=${CPack_output}, CPack_error=${CPack_error}" )
2012-08-13 21:50:14 +04:00
endif ( )
2010-12-03 00:56:26 +03:00
list ( LENGTH expected_file actual_count )
message ( STATUS "actual_count='${actual_count}'" )
if ( NOT actual_count EQUAL expected_count )
2010-12-13 00:35:18 +03:00
message ( FATAL_ERROR "error: expected_count=${expected_count} does not match actual_count=${actual_count}: CPackComponents test fails. (CPack_output=${CPack_output}, CPack_error=${CPack_error})" )
2012-08-13 21:50:14 +04:00
endif ( )
endif ( )
2014-10-14 09:57:11 +04:00
# 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_libraries_PACKAGE_SUMMARY "libraries summary" )
set ( CPACK_RPM_libraries_PACKAGE_DESCRIPTION "libraries 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_HEADERS_DESCRIPTION
" C / C \ \ + \ \ + h e a d e r f i l e s f o r u s e w i t h M y L i b " )
2015-01-07 22:33:27 +03:00
# test package info
2014-10-14 09:57:11 +04:00
if ( ${ CPackComponentWay } STREQUAL "IgnoreGroup" )
2015-01-21 02:29:46 +03:00
# 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 )
2015-02-27 02:33:48 +03:00
set ( CPACK_PACKAGING_INSTALL_PREFIX "/usr/foo/bar" )
2015-01-21 02:29:46 +03:00
2014-10-14 09:57:11 +04:00
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 )
2015-02-27 02:33:48 +03:00
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 )
2015-03-15 22:37:16 +03:00
set ( whitespaces "[\\t\\n\\r ]*" )
2014-10-14 09:57:11 +04:00
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}.*" )
2015-03-15 22:37:16 +03:00
set ( check_file_match_expected_relocation_path "Relocations${whitespaces}:${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" )
2015-02-19 11:01:16 +03:00
set ( check_file_match_expected_architecture "Architecture: ${CPACK_RPM_applications_PACKAGE_ARCHITECTURE}" )
2015-01-21 02:29:46 +03:00
set ( spec_regex "*libraries*" )
2015-02-27 02:33:48 +03:00
set ( check_content_list "^/usr/foo/bar\n/usr/foo/bar/lib.*\n/usr/foo/bar/lib.*/libmylib.a$" )
2014-10-14 09:57:11 +04:00
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}.*" )
2015-03-15 22:37:16 +03:00
set ( check_file_match_expected_relocation_path "Relocations${whitespaces}:${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}" )
2015-02-19 11:01:16 +03:00
set ( check_file_match_expected_architecture "Architecture: ${CPACK_RPM_libraries_PACKAGE_ARCHITECTURE}" )
2015-01-21 02:29:46 +03:00
set ( spec_regex "*headers*" )
2015-02-27 02:33:48 +03:00
set ( check_content_list "^/usr/foo/bar\n/usr/foo/bar/include\n/usr/foo/bar/include/mylib.h$" )
2014-10-14 09:57:11 +04:00
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}.*" )
2015-03-15 22:37:16 +03:00
set ( check_file_match_expected_relocation_path "Relocations${whitespaces}:${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}.*" )
2015-02-19 11:01:16 +03:00
set ( check_file_match_expected_architecture "Architecture: ${CPACK_RPM_headers_PACKAGE_ARCHITECTURE}" )
2015-01-21 02:29:46 +03:00
set ( spec_regex "*applications*" )
2015-02-27 02:33:48 +03:00
set ( check_content_list "^/usr/foo/bar\n/usr/foo/bar/bin\n/usr/foo/bar/bin/mylibapp$" )
2014-10-14 09:57:11 +04:00
elseif ( check_file_Unspecified_match )
set ( check_file_match_expected_summary ".*${CPACK_RPM_PACKAGE_SUMMARY}.*" )
set ( check_file_match_expected_description ".*DESCRIPTION.*" )
2015-03-15 22:37:16 +03:00
set ( check_file_match_expected_relocation_path "Relocations${whitespaces}:${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}" )
2015-02-19 11:01:16 +03:00
set ( check_file_match_expected_architecture "Architecture: ${CPACK_RPM_Unspecified_PACKAGE_ARCHITECTURE}" )
2015-01-21 02:29:46 +03:00
set ( spec_regex "*Unspecified*" )
2015-02-27 02:33:48 +03:00
set ( check_content_list " ^/usr/foo/bar
/ u s r / f o o / b a r / b i n
2015-02-27 02:36:25 +03:00
/ 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 $ " )
2014-10-14 09:57:11 +04:00
else ( )
message ( FATAL_ERROR "error: unexpected rpm package '${check_file}'" )
endif ( )
2015-02-27 02:33:48 +03:00
#######################
# test package info
#######################
2014-10-14 09:57:11 +04:00
string ( REGEX MATCH ${ check_file_match_expected_summary } check_file_match_summary ${ check_file_content } )
if ( NOT check_file_match_summary )
2015-01-21 02:29:46 +03:00
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}'" )
2014-10-14 09:57:11 +04:00
endif ( )
string ( REGEX MATCH ${ check_file_match_expected_description } check_file_match_description ${ check_file_content } )
if ( NOT check_file_match_description )
2015-01-21 02:29:46 +03:00
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}'" )
2014-10-14 09:57:11 +04:00
endif ( )
2015-02-27 02:33:48 +03:00
2015-02-19 11:01:16 +03:00
string ( REGEX MATCH ${ 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}'" )
2015-02-27 16:42:29 +03:00
endif ( )
2015-02-27 02:33:48 +03:00
#######################
# 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}'" )
2015-02-19 11:01:16 +03:00
endif ( )
2014-10-14 09:57:11 +04:00
endforeach ( )
endif ( )
endif ( )