| # 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} |
| RESULT_VARIABLE CPack_result |
| OUTPUT_VARIABLE CPack_output |
| ERROR_VARIABLE CPack_error |
| WORKING_DIRECTORY ${CPackComponentsForAll_BINARY_DIR}) |
| |
| 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 |
| "CPack output:${cpack_out}\n" |
| "CPack error:${cpack_err}\n" |
| "CPack result:${cpack_res}\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 |
| "\tAAIAEQADAAEAAAAAAAIAAAAIAAMAAAABAAQAAAAEAAUAAAAOAAYA\n" |
| "\tAA0AAABbAAQAAAAzAA8AAQAMABAAAAALAA4AAA==\n" |
| # STR# first and last base64 lines |
| "\tAAkHRW5nbGlzaAVBZ3JlZQhEaXNhZ3JlZQVQcmludAdTYXZlLi4u\n" |
| "\tdGVkIGEgcHJpbnRlci4=\n" |
| # TEXT first and last base64 lines |
| "\tTElDRU5TRQ0tLS0tLS0tDVRoaXMgaXMgYW4gaW5zdGFsbGVyIGNy\n" |
| "\tTm8gbGljZW5zZSBwcm92aWRlZC4NDQ==\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 |
| "An extremely useful application that makes use of MyLib") |
| set(CPACK_COMPONENT_LIBRARIES_DESCRIPTION |
| "Static libraries used to build programs with MyLib") |
| 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} |
| OUTPUT_VARIABLE check_file_content |
| ERROR_QUIET |
| OUTPUT_STRIP_TRAILING_WHITESPACE) |
| |
| execute_process(COMMAND ${RPM_EXECUTABLE} -pqa ${check_file} |
| RESULT_VARIABLE check_package_architecture_result |
| OUTPUT_VARIABLE check_package_architecture |
| ERROR_QUIET |
| OUTPUT_STRIP_TRAILING_WHITESPACE) |
| |
| execute_process(COMMAND ${RPM_EXECUTABLE} -pql ${check_file} |
| OUTPUT_VARIABLE check_package_content |
| ERROR_QUIET |
| OUTPUT_STRIP_TRAILING_WHITESPACE) |
| |
| 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} |
| /usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_one |
| /usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_one/depth_two |
| /usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_one/depth_two/depth_three |
| /usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_one/depth_two/depth_three/symlink_parentdir_path |
| /usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_one/depth_two/symlink_outside_package |
| /usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_one/depth_two/symlink_outside_wdr |
| /usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_one/depth_two/symlink_relocatable_subpath |
| /usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_one/depth_two/symlink_samedir_path |
| /usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_one/depth_two/symlink_samedir_path_current_dir |
| /usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_one/depth_two/symlink_samedir_path_longer |
| /usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_one/symlink_subdir_path |
| /usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_two |
| /usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_two/depth_two |
| /usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_two/depth_two/different_relocatable |
| /usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_two/depth_two/different_relocatable/bar |
| /usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_two/depth_two/symlink_other_relocatable_path |
| /usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_two/depth_two/symlink_to_non_relocatable_path |
| /usr/foo/bar/lib${LIB_SUFFIX}/libmylib.a |
| /usr/foo/bar/non_relocatable |
| /usr/foo/bar/non_relocatable/depth_two |
| /usr/foo/bar/non_relocatable/depth_two/symlink_from_non_relocatable_path |
| /usr/foo/bar/other_relocatable |
| /usr/foo/bar/other_relocatable/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 |
| /usr/foo/bar/bin |
| /usr/foo/bar/bin/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 |
| /usr/foo/bar/bin |
| /usr/foo/bar/bin/@in@_@path@@with |
| /usr/foo/bar/bin/@in@_@path@@with/@and |
| /usr/foo/bar/bin/@in@_@path@@with/@and/@ |
| /usr/foo/bar/bin/@in@_@path@@with/@and/@/@in_path@ |
| /usr/foo/bar/bin/@in@_@path@@with/@and/@/@in_path@/mylibapp2 |
| /usr/foo/bar/share |
| /usr/foo/bar/share/man |
| /usr/foo/bar/share/man/mylib |
| /usr/foo/bar/share/man/mylib/man3 |
| /usr/foo/bar/share/man/mylib/man3/mylib.1 |
| /usr/foo/bar/share/man/mylib/man3/mylib.1/mylib |
| /usr/foo/bar/share/man/mylib/man3/mylib.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} |
| OUTPUT_VARIABLE check_file_content |
| ERROR_QUIET |
| OUTPUT_STRIP_TRAILING_WHITESPACE) |
| |
| 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}" |
| WORKING_DIRECTORY "${CPackComponentsForAll_BINARY_DIR}" |
| OUTPUT_VARIABLE SYMLINK_POINT_ |
| OUTPUT_STRIP_TRAILING_WHITESPACE) |
| |
| if("${symlink_name}" STREQUAL "symlink_samedir_path" |
| OR "${symlink_name}" STREQUAL "symlink_samedir_path_current_dir" |
| OR "${symlink_name}" STREQUAL "symlink_samedir_path_longer") |
| 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" |
| OR "${symlink_name}" STREQUAL "symlink_from_non_relocatable_path" |
| OR "${symlink_name}" STREQUAL "symlink_relocatable_subpath") |
| # 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) |