blob: 8f37963482ac642fc0a963a4555a491467d9c674 [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.
]]
set(_TSFILE_LIBLZMA_ARCHIVE_NAME
"xz-${TSFILE_LIBLZMA_BUNDLED_VERSION}.tar.gz")
set(_TSFILE_LIBLZMA_URL
"https://github.com/tukaani-project/xz/releases/download/v${TSFILE_LIBLZMA_BUNDLED_VERSION}/${_TSFILE_LIBLZMA_ARCHIVE_NAME}")
set(_TSFILE_LIBLZMA_SHA256
"3d3a1b973af218114f4f889bbaa2f4c037deaae0c8e815eec381c3d546b974a0")
set(TSFILE_LIBLZMA_ARCHIVE ""
CACHE FILEPATH
"Optional pre-downloaded XZ source archive for liblzma")
if (TSFILE_LIBLZMA_ARCHIVE)
get_filename_component(_TSFILE_LIBLZMA_ARCHIVE
"${TSFILE_LIBLZMA_ARCHIVE}" ABSOLUTE
BASE_DIR "${CMAKE_BINARY_DIR}")
if (NOT EXISTS "${_TSFILE_LIBLZMA_ARCHIVE}")
message(FATAL_ERROR
"TSFILE_LIBLZMA_ARCHIVE does not exist: "
"${_TSFILE_LIBLZMA_ARCHIVE}")
endif ()
else ()
file(MAKE_DIRECTORY "${TSFILE_DEPENDENCY_CACHE}")
set(_TSFILE_LIBLZMA_ARCHIVE
"${TSFILE_DEPENDENCY_CACHE}/${_TSFILE_LIBLZMA_ARCHIVE_NAME}")
endif ()
set(_TSFILE_LIBLZMA_ARCHIVE_VALID FALSE)
if (EXISTS "${_TSFILE_LIBLZMA_ARCHIVE}")
file(SHA256 "${_TSFILE_LIBLZMA_ARCHIVE}"
_TSFILE_LIBLZMA_ACTUAL_SHA256)
if (_TSFILE_LIBLZMA_ACTUAL_SHA256 STREQUAL _TSFILE_LIBLZMA_SHA256)
set(_TSFILE_LIBLZMA_ARCHIVE_VALID TRUE)
elseif (TSFILE_LIBLZMA_ARCHIVE OR TSFILE_DEPENDENCY_OFFLINE)
message(FATAL_ERROR
"XZ source archive for liblzma has an unexpected SHA-256: "
"${_TSFILE_LIBLZMA_ARCHIVE}\n"
"Expected: ${_TSFILE_LIBLZMA_SHA256}\n"
"Actual: ${_TSFILE_LIBLZMA_ACTUAL_SHA256}")
else ()
message(STATUS
"Removing invalid cached XZ archive: "
"${_TSFILE_LIBLZMA_ARCHIVE}")
file(REMOVE "${_TSFILE_LIBLZMA_ARCHIVE}")
endif ()
endif ()
if (NOT _TSFILE_LIBLZMA_ARCHIVE_VALID)
if (TSFILE_DEPENDENCY_OFFLINE)
message(FATAL_ERROR
"Offline dependency mode requires the verified XZ archive "
"for liblzma at ${_TSFILE_LIBLZMA_ARCHIVE}. Pre-download "
"${_TSFILE_LIBLZMA_URL} or set TSFILE_LIBLZMA_ARCHIVE to a "
"verified local archive.")
endif ()
set(_TSFILE_LIBLZMA_PARTIAL_ARCHIVE
"${_TSFILE_LIBLZMA_ARCHIVE}.part")
file(REMOVE "${_TSFILE_LIBLZMA_PARTIAL_ARCHIVE}")
message(STATUS
"Downloading XZ Utils v${TSFILE_LIBLZMA_BUNDLED_VERSION} "
"for liblzma")
file(DOWNLOAD
"${_TSFILE_LIBLZMA_URL}"
"${_TSFILE_LIBLZMA_PARTIAL_ARCHIVE}"
STATUS _TSFILE_LIBLZMA_DOWNLOAD_STATUS
TLS_VERIFY ON
TIMEOUT 120
INACTIVITY_TIMEOUT 30)
list(GET _TSFILE_LIBLZMA_DOWNLOAD_STATUS 0
_TSFILE_LIBLZMA_DOWNLOAD_RESULT)
list(GET _TSFILE_LIBLZMA_DOWNLOAD_STATUS 1
_TSFILE_LIBLZMA_DOWNLOAD_MESSAGE)
if (NOT _TSFILE_LIBLZMA_DOWNLOAD_RESULT EQUAL 0)
file(REMOVE "${_TSFILE_LIBLZMA_PARTIAL_ARCHIVE}")
message(FATAL_ERROR
"Failed to download XZ Utils from ${_TSFILE_LIBLZMA_URL}: "
"${_TSFILE_LIBLZMA_DOWNLOAD_MESSAGE}. To build without "
"network access, provide ${_TSFILE_LIBLZMA_ARCHIVE_NAME} "
"in TSFILE_DEPENDENCY_CACHE or set TSFILE_LIBLZMA_ARCHIVE.")
endif ()
file(SHA256 "${_TSFILE_LIBLZMA_PARTIAL_ARCHIVE}"
_TSFILE_LIBLZMA_ACTUAL_SHA256)
if (NOT _TSFILE_LIBLZMA_ACTUAL_SHA256 STREQUAL
_TSFILE_LIBLZMA_SHA256)
file(REMOVE "${_TSFILE_LIBLZMA_PARTIAL_ARCHIVE}")
message(FATAL_ERROR
"Downloaded XZ archive has an unexpected SHA-256. Expected "
"${_TSFILE_LIBLZMA_SHA256}, got "
"${_TSFILE_LIBLZMA_ACTUAL_SHA256}.")
endif ()
file(RENAME "${_TSFILE_LIBLZMA_PARTIAL_ARCHIVE}"
"${_TSFILE_LIBLZMA_ARCHIVE}")
endif ()
set(_TSFILE_LIBLZMA_EXTRACT_ROOT "${CMAKE_BINARY_DIR}/_deps")
set(TSFILE_LIBLZMA_SOURCE_DIR
"${_TSFILE_LIBLZMA_EXTRACT_ROOT}/xz-${TSFILE_LIBLZMA_BUNDLED_VERSION}")
set(_TSFILE_LIBLZMA_STAMP
"${TSFILE_LIBLZMA_SOURCE_DIR}/.tsfile-archive-sha256")
set(_TSFILE_LIBLZMA_EXTRACTED FALSE)
if (EXISTS "${_TSFILE_LIBLZMA_STAMP}" AND
EXISTS "${TSFILE_LIBLZMA_SOURCE_DIR}/CMakeLists.txt" AND
EXISTS "${TSFILE_LIBLZMA_SOURCE_DIR}/src/liblzma/api/lzma.h" AND
EXISTS "${TSFILE_LIBLZMA_SOURCE_DIR}/src/liblzma/lzma/lzma2_encoder.c" AND
EXISTS "${TSFILE_LIBLZMA_SOURCE_DIR}/COPYING.0BSD")
file(READ "${_TSFILE_LIBLZMA_STAMP}" _TSFILE_LIBLZMA_STAMP_SHA256)
string(STRIP "${_TSFILE_LIBLZMA_STAMP_SHA256}"
_TSFILE_LIBLZMA_STAMP_SHA256)
if (_TSFILE_LIBLZMA_STAMP_SHA256 STREQUAL _TSFILE_LIBLZMA_SHA256)
set(_TSFILE_LIBLZMA_EXTRACTED TRUE)
endif ()
endif ()
if (NOT _TSFILE_LIBLZMA_EXTRACTED)
file(REMOVE_RECURSE "${TSFILE_LIBLZMA_SOURCE_DIR}")
file(MAKE_DIRECTORY "${_TSFILE_LIBLZMA_EXTRACT_ROOT}")
execute_process(
COMMAND "${CMAKE_COMMAND}" -E tar xzf
"${_TSFILE_LIBLZMA_ARCHIVE}"
WORKING_DIRECTORY "${_TSFILE_LIBLZMA_EXTRACT_ROOT}"
RESULT_VARIABLE _TSFILE_LIBLZMA_EXTRACT_RESULT
ERROR_VARIABLE _TSFILE_LIBLZMA_EXTRACT_ERROR)
if (NOT _TSFILE_LIBLZMA_EXTRACT_RESULT EQUAL 0 OR
NOT EXISTS "${TSFILE_LIBLZMA_SOURCE_DIR}/CMakeLists.txt" OR
NOT EXISTS "${TSFILE_LIBLZMA_SOURCE_DIR}/src/liblzma/api/lzma.h" OR
NOT EXISTS "${TSFILE_LIBLZMA_SOURCE_DIR}/src/liblzma/lzma/lzma2_encoder.c" OR
NOT EXISTS "${TSFILE_LIBLZMA_SOURCE_DIR}/COPYING.0BSD")
file(REMOVE_RECURSE "${TSFILE_LIBLZMA_SOURCE_DIR}")
message(FATAL_ERROR
"Failed to extract the XZ source archive for liblzma: "
"${_TSFILE_LIBLZMA_EXTRACT_ERROR}")
endif ()
file(WRITE "${_TSFILE_LIBLZMA_STAMP}"
"${_TSFILE_LIBLZMA_SHA256}\n")
endif ()
set(TSFILE_LIBLZMA_LICENSE_FILE
"${TSFILE_LIBLZMA_SOURCE_DIR}/COPYING.0BSD")
message(STATUS
"Using verified XZ Utils v${TSFILE_LIBLZMA_BUNDLED_VERSION} source "
"for the 0BSD liblzma target from ${_TSFILE_LIBLZMA_ARCHIVE}")
unset(_TSFILE_LIBLZMA_ACTUAL_SHA256)
unset(_TSFILE_LIBLZMA_ARCHIVE)
unset(_TSFILE_LIBLZMA_ARCHIVE_NAME)
unset(_TSFILE_LIBLZMA_ARCHIVE_VALID)
unset(_TSFILE_LIBLZMA_DOWNLOAD_MESSAGE)
unset(_TSFILE_LIBLZMA_DOWNLOAD_RESULT)
unset(_TSFILE_LIBLZMA_DOWNLOAD_STATUS)
unset(_TSFILE_LIBLZMA_EXTRACT_ERROR)
unset(_TSFILE_LIBLZMA_EXTRACT_RESULT)
unset(_TSFILE_LIBLZMA_EXTRACT_ROOT)
unset(_TSFILE_LIBLZMA_EXTRACTED)
unset(_TSFILE_LIBLZMA_PARTIAL_ARCHIVE)
unset(_TSFILE_LIBLZMA_SHA256)
unset(_TSFILE_LIBLZMA_STAMP)
unset(_TSFILE_LIBLZMA_STAMP_SHA256)
unset(_TSFILE_LIBLZMA_URL)