blob: f2aeb45b94c372c94b2b93207713b4cc48bfbd6e [file]
#[[
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
]]
if (NOT TEST_BINARY_ROOT)
message(FATAL_ERROR "TEST_BINARY_ROOT must be provided.")
endif ()
include("${CMAKE_CURRENT_LIST_DIR}/TestGeneratorArguments.cmake")
set(_TSFILE_FIXTURE_SOURCE
"${CMAKE_CURRENT_LIST_DIR}/projects/LibLZMADependency")
set(_TSFILE_TEST_ROOT "${TEST_BINARY_ROOT}/liblzma-dependency")
set(_TSFILE_COMPATIBLE_ROOT "${_TSFILE_TEST_ROOT}/compatible")
set(_TSFILE_TOO_OLD_ROOT "${_TSFILE_TEST_ROOT}/too-old")
set(_TSFILE_INCOMPATIBLE_ROOT "${_TSFILE_TEST_ROOT}/incompatible")
file(REMOVE_RECURSE "${_TSFILE_TEST_ROOT}")
function(_tsfile_write_fake_liblzma ROOT VERSION)
set(_TSFILE_CONFIG_DIR "${ROOT}/lib/cmake/liblzma")
file(MAKE_DIRECTORY "${_TSFILE_CONFIG_DIR}")
file(WRITE "${_TSFILE_CONFIG_DIR}/liblzma-config.cmake"
"set(liblzma_VERSION \"${VERSION}\")\n"
"if (NOT TARGET liblzma::liblzma)\n"
" add_library(liblzma::liblzma INTERFACE IMPORTED)\n"
"endif ()\n")
string(REGEX MATCH "^[0-9]+" _TSFILE_PACKAGE_MAJOR "${VERSION}")
file(WRITE "${_TSFILE_CONFIG_DIR}/liblzma-config-version.cmake"
"set(PACKAGE_VERSION \"${VERSION}\")\n"
"if (PACKAGE_FIND_VERSION VERSION_GREATER PACKAGE_VERSION)\n"
" set(PACKAGE_VERSION_COMPATIBLE FALSE)\n"
"elseif (NOT PACKAGE_FIND_VERSION_MAJOR EQUAL "
"${_TSFILE_PACKAGE_MAJOR})\n"
" set(PACKAGE_VERSION_COMPATIBLE FALSE)\n"
"else ()\n"
" set(PACKAGE_VERSION_COMPATIBLE TRUE)\n"
" if (PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)\n"
" set(PACKAGE_VERSION_EXACT TRUE)\n"
" endif ()\n"
"endif ()\n")
endfunction()
function(_tsfile_run_liblzma_case NAME POLICY EXPECTED_SOURCE EXPECT_SUCCESS)
set(_TSFILE_CASE_BINARY "${_TSFILE_TEST_ROOT}/build-${NAME}")
set(_TSFILE_CMAKE_ARGUMENTS
"-DTSFILE_DEPENDENCY_SOURCE=${POLICY}"
"-DEXPECTED_LIBLZMA_SOURCE=${EXPECTED_SOURCE}"
"-DCMAKE_DISABLE_FIND_PACKAGE_LibLZMA=TRUE")
if (ARGC GREATER 4 AND NOT "${ARGV4}" STREQUAL "")
list(APPEND _TSFILE_CMAKE_ARGUMENTS
"-Dliblzma_DIR=${ARGV4}/lib/cmake/liblzma"
"-DCMAKE_FIND_ROOT_PATH=${ARGV4}"
"-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY")
endif ()
if (ARGC GREATER 5 AND ARGV5)
list(APPEND _TSFILE_CMAKE_ARGUMENTS
"-DCMAKE_DISABLE_FIND_PACKAGE_liblzma=TRUE")
endif ()
execute_process(
COMMAND "${CMAKE_COMMAND}"
${_TSFILE_TEST_GENERATOR_ARGUMENTS}
${_TSFILE_CMAKE_ARGUMENTS}
-S "${_TSFILE_FIXTURE_SOURCE}"
-B "${_TSFILE_CASE_BINARY}"
RESULT_VARIABLE _TSFILE_RESULT
OUTPUT_VARIABLE _TSFILE_OUTPUT
ERROR_VARIABLE _TSFILE_ERROR)
set(_TSFILE_LOG "${_TSFILE_OUTPUT}${_TSFILE_ERROR}")
if (EXPECT_SUCCESS)
if (NOT _TSFILE_RESULT EQUAL 0)
message(FATAL_ERROR
"liblzma dependency case ${NAME} failed: "
"${_TSFILE_LOG}")
endif ()
elseif (_TSFILE_RESULT EQUAL 0)
message(FATAL_ERROR
"liblzma dependency case ${NAME} unexpectedly succeeded.")
elseif (NOT _TSFILE_LOG MATCHES
"requires a compatible system liblzma")
message(FATAL_ERROR
"liblzma dependency case ${NAME} had an unclear error: "
"${_TSFILE_LOG}")
endif ()
endfunction()
_tsfile_write_fake_liblzma("${_TSFILE_COMPATIBLE_ROOT}" "5.8.3")
_tsfile_write_fake_liblzma("${_TSFILE_TOO_OLD_ROOT}" "5.8.2")
_tsfile_write_fake_liblzma("${_TSFILE_INCOMPATIBLE_ROOT}" "6.0.0")
_tsfile_run_liblzma_case(system-compatible SYSTEM SYSTEM TRUE
"${_TSFILE_COMPATIBLE_ROOT}" FALSE)
_tsfile_run_liblzma_case(auto-compatible AUTO SYSTEM TRUE
"${_TSFILE_COMPATIBLE_ROOT}" FALSE)
_tsfile_run_liblzma_case(auto-missing AUTO BUNDLED TRUE "" TRUE)
_tsfile_run_liblzma_case(auto-too-old AUTO BUNDLED TRUE
"${_TSFILE_TOO_OLD_ROOT}" FALSE)
_tsfile_run_liblzma_case(auto-incompatible AUTO BUNDLED TRUE
"${_TSFILE_INCOMPATIBLE_ROOT}" FALSE)
_tsfile_run_liblzma_case(bundled BUNDLED BUNDLED TRUE
"${_TSFILE_INCOMPATIBLE_ROOT}" FALSE)
_tsfile_run_liblzma_case(system-missing SYSTEM "" FALSE "" TRUE)
_tsfile_run_liblzma_case(system-too-old SYSTEM "" FALSE
"${_TSFILE_TOO_OLD_ROOT}" FALSE)
_tsfile_run_liblzma_case(system-incompatible SYSTEM "" FALSE
"${_TSFILE_INCOMPATIBLE_ROOT}" FALSE)
set(_TSFILE_SOURCE_FAILURE_SCRIPT
"${CMAKE_CURRENT_LIST_DIR}/LibLZMASourceFailureCase.cmake")
function(_tsfile_assert_liblzma_source_failure TEST_CASE EXPECTED_ERROR)
execute_process(
COMMAND "${CMAKE_COMMAND}"
-DTEST_CASE=${TEST_CASE}
-DTEST_BINARY_ROOT=${_TSFILE_TEST_ROOT}
-P "${_TSFILE_SOURCE_FAILURE_SCRIPT}"
RESULT_VARIABLE _TSFILE_RESULT
OUTPUT_VARIABLE _TSFILE_OUTPUT
ERROR_VARIABLE _TSFILE_ERROR)
if (_TSFILE_RESULT EQUAL 0)
message(FATAL_ERROR
"liblzma source failure case ${TEST_CASE} unexpectedly "
"succeeded.")
endif ()
set(_TSFILE_LOG "${_TSFILE_OUTPUT}${_TSFILE_ERROR}")
if (NOT _TSFILE_LOG MATCHES "${EXPECTED_ERROR}")
message(FATAL_ERROR
"liblzma source failure case ${TEST_CASE} had an unclear "
"error: ${_TSFILE_LOG}")
endif ()
endfunction()
_tsfile_assert_liblzma_source_failure(
OFFLINE_MISSING "Offline dependency mode requires")
_tsfile_assert_liblzma_source_failure(
INVALID_ARCHIVE "unexpected SHA-256")