set(whitespaces_ "[\t\n\r ]*") file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test_rpm") file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test_rpm/BUILD") file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test_rpm/BUILDROOT") file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test_rpm/RPMS") file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test_rpm/SOURCES") file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test_rpm/SPECS") file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test_rpm/SRPMS") # make sure that we are using the version of cmake and cpack that we are testing get_filename_component(cpack_path_ "${CMAKE_CPACK_COMMAND}" DIRECTORY) set(ENV{PATH} "${cpack_path_}:$ENV{PATH}") execute_process(COMMAND ${RPMBUILD_EXECUTABLE} --define "_topdir ${CMAKE_CURRENT_BINARY_DIR}/test_rpm" --rebuild ${FOUND_FILE_1} RESULT_VARIABLE result_ ERROR_VARIABLE error_ OUTPUT_QUIET ) string(REPLACE "\n" "\n rpmbuild-err> " rpmbuild_err "\n${error_}") string(REPLACE "\n" "\n rpmbuild-res> " rpmbuild_res "\n${result_}") string(CONCAT output_error_message_ "${RPMBUILD_EXECUTABLE} error:${rpmbuild_err}\n" "${RPMBUILD_EXECUTABLE} result:${rpmbuild_res}\n" "${output_error_message}" ) # expected file content are test_prog and optional build-id links that are # generated by rpmbuild (introduced in rpm 4.13.0.1) set(EXPECTED_FILE_CONTENT_ "^/foo${whitespaces_}/foo/test_prog(${whitespaces_}.*\.build-id.*)*$") set(EXPECTED_FILE_ "${CMAKE_CURRENT_BINARY_DIR}/test_rpm/RPMS/*.rpm") file(GLOB_RECURSE FOUND_FILE_ RELATIVE "${CMAKE_CURRENT_BINARY_DIR}/test_rpm/RPMS" "${EXPECTED_FILE_}") list(APPEND foundFiles_ "${FOUND_FILE_}") list(LENGTH FOUND_FILE_ foundFilesCount_) if(foundFilesCount_ EQUAL 1) unset(PACKAGE_CONTENT) getPackageContent("${CMAKE_CURRENT_BINARY_DIR}/test_rpm/RPMS/${FOUND_FILE_}" "PACKAGE_CONTENT") string(REGEX MATCH "${EXPECTED_FILE_CONTENT_}" expected_content_list "${PACKAGE_CONTENT}") if(NOT expected_content_list) string(REPLACE "\n" "\n actual> " msg_actual "\n${PACKAGE_CONTENT}") string(REPLACE "\n" "\n expect> " msg_expected "\n${EXPECTED_FILE_CONTENT_}") string(REPLACE "\r" "\\r" msg_expected "${msg_expected}") string(REPLACE "\t" "\\t" msg_expected "${msg_expected}") message(FATAL_ERROR "Unexpected file content!\n" "The content was:${msg_actual}\n" "which does not match:${msg_expected}\n" "${output_error_message_}") endif() elseif(foundFilesCount_ EQUAL 0) message(FATAL_ERROR "Found no files!\n" "Globbing expression:\n '${EXPECTED_FILE_}'\n" "${output_error_message_}") else() message(FATAL_ERROR "Found more than one file!\n" "Found files count '${foundFilesCount_}'.\n" "Files:\n '${FOUND_FILE_}'\n" "Globbing expression:\n '${EXPECTED_FILE_}'\n" "${output_error_message_}") endif() # check that there were no extra files generated foreach(all_files_glob_ IN LISTS ALL_FILES_GLOB) file(GLOB foundAll_ RELATIVE "${CMAKE_CURRENT_BINARY_DIR}/test_rpm/RPMS" "${all_files_glob_}") list(APPEND allFoundFiles_ "${foundAll_}") endforeach() list(LENGTH foundFiles_ foundFilesCount_) list(LENGTH allFoundFiles_ allFoundFilesCount_) if(NOT foundFilesCount_ EQUAL allFoundFilesCount_) message(FATAL_ERROR "Found more files than expected!\n" "Found files:\n '${allFoundFiles_}'\n" "${output_error_message_}") endif()