blob: 40ca01661cae3fa7f9254bd78adeef279afc3762 [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_ZLIB_ARCHIVE_NAME
"zlib-v${TSFILE_ZLIB_BUNDLED_VERSION}.tar.gz")
set(_TSFILE_ZLIB_URL
"https://github.com/madler/zlib/archive/refs/tags/v${TSFILE_ZLIB_BUNDLED_VERSION}.tar.gz")
set(_TSFILE_ZLIB_SHA256
"17e88863f3600672ab49182f217281b6fc4d3c762bde361935e436a95214d05c")
set(TSFILE_ZLIB_ARCHIVE ""
CACHE FILEPATH
"Optional pre-downloaded zlib v${TSFILE_ZLIB_BUNDLED_VERSION} source archive")
if (TSFILE_ZLIB_ARCHIVE)
get_filename_component(_TSFILE_ZLIB_ARCHIVE
"${TSFILE_ZLIB_ARCHIVE}" ABSOLUTE BASE_DIR "${CMAKE_BINARY_DIR}")
if (NOT EXISTS "${_TSFILE_ZLIB_ARCHIVE}")
message(FATAL_ERROR
"TSFILE_ZLIB_ARCHIVE does not exist: ${_TSFILE_ZLIB_ARCHIVE}")
endif ()
else ()
file(MAKE_DIRECTORY "${TSFILE_DEPENDENCY_CACHE}")
set(_TSFILE_ZLIB_ARCHIVE
"${TSFILE_DEPENDENCY_CACHE}/${_TSFILE_ZLIB_ARCHIVE_NAME}")
endif ()
set(_TSFILE_ZLIB_ARCHIVE_VALID FALSE)
if (EXISTS "${_TSFILE_ZLIB_ARCHIVE}")
file(SHA256 "${_TSFILE_ZLIB_ARCHIVE}" _TSFILE_ZLIB_ACTUAL_SHA256)
if (_TSFILE_ZLIB_ACTUAL_SHA256 STREQUAL _TSFILE_ZLIB_SHA256)
set(_TSFILE_ZLIB_ARCHIVE_VALID TRUE)
elseif (TSFILE_ZLIB_ARCHIVE OR TSFILE_DEPENDENCY_OFFLINE)
message(FATAL_ERROR
"zlib source archive has an unexpected SHA-256: "
"${_TSFILE_ZLIB_ARCHIVE}\n"
"Expected: ${_TSFILE_ZLIB_SHA256}\n"
"Actual: ${_TSFILE_ZLIB_ACTUAL_SHA256}")
else ()
message(STATUS
"Removing invalid cached zlib archive: "
"${_TSFILE_ZLIB_ARCHIVE}")
file(REMOVE "${_TSFILE_ZLIB_ARCHIVE}")
endif ()
endif ()
if (NOT _TSFILE_ZLIB_ARCHIVE_VALID)
if (TSFILE_DEPENDENCY_OFFLINE)
message(FATAL_ERROR
"Offline dependency mode requires the verified zlib archive "
"at ${_TSFILE_ZLIB_ARCHIVE}. Pre-download "
"${_TSFILE_ZLIB_URL} or set TSFILE_ZLIB_ARCHIVE to a "
"verified local archive.")
endif ()
set(_TSFILE_ZLIB_PARTIAL_ARCHIVE "${_TSFILE_ZLIB_ARCHIVE}.part")
file(REMOVE "${_TSFILE_ZLIB_PARTIAL_ARCHIVE}")
message(STATUS "Downloading zlib v${TSFILE_ZLIB_BUNDLED_VERSION}")
file(DOWNLOAD
"${_TSFILE_ZLIB_URL}"
"${_TSFILE_ZLIB_PARTIAL_ARCHIVE}"
STATUS _TSFILE_ZLIB_DOWNLOAD_STATUS
TLS_VERIFY ON
TIMEOUT 120
INACTIVITY_TIMEOUT 30)
list(GET _TSFILE_ZLIB_DOWNLOAD_STATUS 0 _TSFILE_ZLIB_DOWNLOAD_RESULT)
list(GET _TSFILE_ZLIB_DOWNLOAD_STATUS 1 _TSFILE_ZLIB_DOWNLOAD_MESSAGE)
if (NOT _TSFILE_ZLIB_DOWNLOAD_RESULT EQUAL 0)
file(REMOVE "${_TSFILE_ZLIB_PARTIAL_ARCHIVE}")
message(FATAL_ERROR
"Failed to download zlib from ${_TSFILE_ZLIB_URL}: "
"${_TSFILE_ZLIB_DOWNLOAD_MESSAGE}. To build without network "
"access, provide ${_TSFILE_ZLIB_ARCHIVE_NAME} in "
"TSFILE_DEPENDENCY_CACHE or set TSFILE_ZLIB_ARCHIVE.")
endif ()
file(SHA256 "${_TSFILE_ZLIB_PARTIAL_ARCHIVE}"
_TSFILE_ZLIB_ACTUAL_SHA256)
if (NOT _TSFILE_ZLIB_ACTUAL_SHA256 STREQUAL _TSFILE_ZLIB_SHA256)
file(REMOVE "${_TSFILE_ZLIB_PARTIAL_ARCHIVE}")
message(FATAL_ERROR
"Downloaded zlib archive has an unexpected SHA-256. "
"Expected ${_TSFILE_ZLIB_SHA256}, got "
"${_TSFILE_ZLIB_ACTUAL_SHA256}.")
endif ()
file(RENAME "${_TSFILE_ZLIB_PARTIAL_ARCHIVE}"
"${_TSFILE_ZLIB_ARCHIVE}")
endif ()
set(_TSFILE_ZLIB_EXTRACT_ROOT "${CMAKE_BINARY_DIR}/_deps")
set(TSFILE_ZLIB_SOURCE_DIR
"${_TSFILE_ZLIB_EXTRACT_ROOT}/zlib-${TSFILE_ZLIB_BUNDLED_VERSION}")
set(_TSFILE_ZLIB_STAMP
"${TSFILE_ZLIB_SOURCE_DIR}/.tsfile-archive-sha256")
set(_TSFILE_ZLIB_EXTRACTED FALSE)
if (EXISTS "${_TSFILE_ZLIB_STAMP}" AND
EXISTS "${TSFILE_ZLIB_SOURCE_DIR}/CMakeLists.txt" AND
EXISTS "${TSFILE_ZLIB_SOURCE_DIR}/zlib.h" AND
EXISTS "${TSFILE_ZLIB_SOURCE_DIR}/LICENSE")
file(READ "${_TSFILE_ZLIB_STAMP}" _TSFILE_ZLIB_STAMP_SHA256)
string(STRIP "${_TSFILE_ZLIB_STAMP_SHA256}"
_TSFILE_ZLIB_STAMP_SHA256)
if (_TSFILE_ZLIB_STAMP_SHA256 STREQUAL _TSFILE_ZLIB_SHA256)
set(_TSFILE_ZLIB_EXTRACTED TRUE)
endif ()
endif ()
if (NOT _TSFILE_ZLIB_EXTRACTED)
file(REMOVE_RECURSE "${TSFILE_ZLIB_SOURCE_DIR}")
file(MAKE_DIRECTORY "${_TSFILE_ZLIB_EXTRACT_ROOT}")
execute_process(
COMMAND "${CMAKE_COMMAND}" -E tar xzf "${_TSFILE_ZLIB_ARCHIVE}"
WORKING_DIRECTORY "${_TSFILE_ZLIB_EXTRACT_ROOT}"
RESULT_VARIABLE _TSFILE_ZLIB_EXTRACT_RESULT
ERROR_VARIABLE _TSFILE_ZLIB_EXTRACT_ERROR)
if (NOT _TSFILE_ZLIB_EXTRACT_RESULT EQUAL 0 OR
NOT EXISTS "${TSFILE_ZLIB_SOURCE_DIR}/CMakeLists.txt" OR
NOT EXISTS "${TSFILE_ZLIB_SOURCE_DIR}/zlib.h" OR
NOT EXISTS "${TSFILE_ZLIB_SOURCE_DIR}/LICENSE")
file(REMOVE_RECURSE "${TSFILE_ZLIB_SOURCE_DIR}")
message(FATAL_ERROR
"Failed to extract the zlib source archive: "
"${_TSFILE_ZLIB_EXTRACT_ERROR}")
endif ()
file(WRITE "${_TSFILE_ZLIB_STAMP}" "${_TSFILE_ZLIB_SHA256}\n")
endif ()
set(TSFILE_ZLIB_LICENSE_FILE "${TSFILE_ZLIB_SOURCE_DIR}/LICENSE")
message(STATUS
"Using verified zlib v${TSFILE_ZLIB_BUNDLED_VERSION} source from "
"${_TSFILE_ZLIB_ARCHIVE}")
unset(_TSFILE_ZLIB_ACTUAL_SHA256)
unset(_TSFILE_ZLIB_ARCHIVE)
unset(_TSFILE_ZLIB_ARCHIVE_NAME)
unset(_TSFILE_ZLIB_ARCHIVE_VALID)
unset(_TSFILE_ZLIB_DOWNLOAD_MESSAGE)
unset(_TSFILE_ZLIB_DOWNLOAD_RESULT)
unset(_TSFILE_ZLIB_DOWNLOAD_STATUS)
unset(_TSFILE_ZLIB_EXTRACT_ERROR)
unset(_TSFILE_ZLIB_EXTRACT_RESULT)
unset(_TSFILE_ZLIB_EXTRACT_ROOT)
unset(_TSFILE_ZLIB_EXTRACTED)
unset(_TSFILE_ZLIB_PARTIAL_ARCHIVE)
unset(_TSFILE_ZLIB_SHA256)
unset(_TSFILE_ZLIB_STAMP)
unset(_TSFILE_ZLIB_STAMP_SHA256)
unset(_TSFILE_ZLIB_URL)