diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 4a5e45a946..5d4d70935c 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -1152,12 +1152,21 @@ add_RunCMake_test(CommandLine -DLLVM_RC=$ -DCMAKE_SY -DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA} -DEXIT_CODE_EXE=$ -DPRINT_STDIN_EXE=$) + +if(NOT DEFINED CMake_TEST_LibLZMA_ARM64_BCJ) + if(NOT CMake_TEST_EXTERNAL_CMAKE AND NOT CMAKE_USE_SYSTEM_LIBARCHIVE AND NOT CMAKE_USE_SYSTEM_LIBLZMA) + set(CMake_TEST_LibLZMA_ARM64_BCJ 1) + endif() +endif() if(CMake_TEST_LibArchive_VERSION) list(APPEND CommandLineTar_ARGS -DCMake_TEST_LibArchive_VERSION=${CMake_TEST_LibArchive_VERSION}) endif() if(DEFINED CMake_TEST_LOCALE_CHARSET) list(APPEND CommandLineTar_ARGS -DCMake_TEST_LOCALE_CHARSET=${CMake_TEST_LOCALE_CHARSET}) endif() +if(DEFINED CMake_TEST_LibLZMA_ARM64_BCJ) + list(APPEND CommandLineTar_ARGS -DCMake_TEST_LibLZMA_ARM64_BCJ=${CMake_TEST_LibLZMA_ARM64_BCJ}) +endif() list(APPEND CommandLineTar_ARGS -DPython_EXECUTABLE=${Python_EXECUTABLE}) add_RunCMake_test(CommandLineTar) diff --git a/Tests/RunCMake/CommandLineTar/7zip-arm64-bcj.7z b/Tests/RunCMake/CommandLineTar/7zip-arm64-bcj.7z new file mode 100644 index 0000000000..71e26f4d37 Binary files /dev/null and b/Tests/RunCMake/CommandLineTar/7zip-arm64-bcj.7z differ diff --git a/Tests/RunCMake/CommandLineTar/7zip-arm64-bcj.cmake b/Tests/RunCMake/CommandLineTar/7zip-arm64-bcj.cmake new file mode 100644 index 0000000000..9b066e2057 --- /dev/null +++ b/Tests/RunCMake/CommandLineTar/7zip-arm64-bcj.cmake @@ -0,0 +1,37 @@ +set(ARCHIVE "${CMAKE_CURRENT_LIST_DIR}/7zip-arm64-bcj.7z") +set(OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/extract") +set(OUTPUT_FILE "${OUTPUT_DIR}/payload.bin") +set(EXPECTED_HEX "1f2003d500000094000000141f2003d5") + +file(REMOVE_RECURSE "${OUTPUT_DIR}") +file(MAKE_DIRECTORY "${OUTPUT_DIR}") + +execute_process( + COMMAND "${CMAKE_COMMAND}" -E tar xvf "${ARCHIVE}" + WORKING_DIRECTORY "${OUTPUT_DIR}" + RESULT_VARIABLE result + OUTPUT_VARIABLE stdout + ERROR_VARIABLE stderr +) + +if(NOT result EQUAL 0) + message(FATAL_ERROR + "Failed to extract ARM64 BCJ 7z archive:\n" + "result: ${result}\n" + "stdout: ${stdout}\n" + "stderr: ${stderr}" + ) +endif() + +if(NOT EXISTS "${OUTPUT_FILE}") + message(FATAL_ERROR "Expected file was not extracted:\n ${OUTPUT_FILE}") +endif() + +file(READ "${OUTPUT_FILE}" actual_hex HEX) +if(NOT actual_hex STREQUAL EXPECTED_HEX) + message(FATAL_ERROR + "Extracted file content mismatch:\n" + "expected: ${EXPECTED_HEX}\n" + "actual: ${actual_hex}" + ) +endif() diff --git a/Tests/RunCMake/CommandLineTar/RunCMakeTest.cmake b/Tests/RunCMake/CommandLineTar/RunCMakeTest.cmake index 01c2f7e3e6..4dd258f020 100644 --- a/Tests/RunCMake/CommandLineTar/RunCMakeTest.cmake +++ b/Tests/RunCMake/CommandLineTar/RunCMakeTest.cmake @@ -31,6 +31,9 @@ run_cmake(7zip) run_cmake(7zip-bz2) run_cmake(7zip-gz) run_cmake(7zip-lzma) +if(CMake_TEST_LibLZMA_ARM64_BCJ) + run_cmake(7zip-arm64-bcj) +endif() run_cmake(7zip-xz) if (test_3_8_0) run_cmake(7zip-zstd)