blob: 75fd0d3a69dbbe13c8274204a28b17169ad63f09 [file] [log] [blame]
# Copyright 2019 Google LLC
#
# Licensed 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
#
# http://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.
include(FetchContent)
include(CMakeParseArguments)
# Download, unpack and configure a dependency.
#
# The project is added as a subdirectory of Tink, unless DATA_ONLY is
# specified. This makes all target defined by it available as dependencies.
#
# This rule also defines two variables:
# - <NAME>_SOURCE_DIR points to the root directory of the downloaded package;
# it can be used to reference data in tests, or append extra include/link
# paths in the Workspace file.
# - <NAME>_BINARY_DIR points to the build directory.
#
# Parameters:
# NAME name of the dependency.
# URL url to fetch a source archive from.
# SHA256 hash of the file downloaded from URL.
#
# Optional parameters:
# CMAKE_SUBDIR subdirectory of the downloaded archive where the root
# CMakeLists.txt file for the project is located. Defaults to the root.
# CMAKE_ARGS any additional argument that should be passed to cmake when
# configuring the downloaded archive. Defaults to empty.
# DATA_ONLY flag, if present the package will only be downloaded, verified and
# unpacked. No configuration step is performed, and no target included. This
# is useful for downloading archives of test vectors or artifacts.
# False by default.
#
function(http_archive)
cmake_parse_arguments(PARSE_ARGV 0 http_archive
"DATA_ONLY"
"NAME;URL;SHA256;CMAKE_SUBDIR"
"CMAKE_ARGS"
)
FetchContent_Declare(
${http_archive_NAME}
URL ${http_archive_URL}
URL_HASH SHA256=${http_archive_SHA256}
)
message(STATUS "Fetching ${http_archive_NAME}")
FetchContent_GetProperties(${http_archive_NAME})
if(NOT ${http_archive_NAME}_POPULATED)
FetchContent_Populate(${http_archive_NAME})
if (NOT http_archive_DATA_ONLY)
add_subdirectory(
${${http_archive_NAME}_SOURCE_DIR}/${http_archive_CMAKE_SUBDIR}
${${http_archive_NAME}_BINARY_DIR}
EXCLUDE_FROM_ALL)
endif()
# Expose these variables to the caller.
set(
"${http_archive_NAME}_SOURCE_DIR"
"${${http_archive_NAME}_SOURCE_DIR}"
PARENT_SCOPE)
set(
"${http_archive_NAME}_BINARY_DIR"
"${${http_archive_NAME}_BINARY_DIR}"
PARENT_SCOPE)
endif()
endfunction(http_archive)