| # prevent older policies from interfering 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) |