1*e7b1675dSTing-Kang Chang# Copyright 2019 Google LLC 2*e7b1675dSTing-Kang Chang# 3*e7b1675dSTing-Kang Chang# Licensed under the Apache License, Version 2.0 (the "License"); 4*e7b1675dSTing-Kang Chang# you may not use this file except in compliance with the License. 5*e7b1675dSTing-Kang Chang# You may obtain a copy of the License at 6*e7b1675dSTing-Kang Chang# 7*e7b1675dSTing-Kang Chang# http://www.apache.org/licenses/LICENSE-2.0 8*e7b1675dSTing-Kang Chang# 9*e7b1675dSTing-Kang Chang# Unless required by applicable law or agreed to in writing, software 10*e7b1675dSTing-Kang Chang# distributed under the License is distributed on an "AS IS" BASIS, 11*e7b1675dSTing-Kang Chang# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*e7b1675dSTing-Kang Chang# See the License for the specific language governing permissions and 13*e7b1675dSTing-Kang Chang# limitations under the License. 14*e7b1675dSTing-Kang Chang 15*e7b1675dSTing-Kang Changinclude(FetchContent) 16*e7b1675dSTing-Kang Changinclude(CMakeParseArguments) 17*e7b1675dSTing-Kang Chang 18*e7b1675dSTing-Kang Chang# Download, unpack and configure a dependency. 19*e7b1675dSTing-Kang Chang# 20*e7b1675dSTing-Kang Chang# The project is added as a subdirectory of Tink, unless DATA_ONLY is 21*e7b1675dSTing-Kang Chang# specified. This makes all target defined by it available as dependencies. 22*e7b1675dSTing-Kang Chang# 23*e7b1675dSTing-Kang Chang# This rule also defines two variables: 24*e7b1675dSTing-Kang Chang# - <NAME>_SOURCE_DIR points to the root directory of the downloaded package; 25*e7b1675dSTing-Kang Chang# it can be used to reference data in tests, or append extra include/link 26*e7b1675dSTing-Kang Chang# paths in the Workspace file. 27*e7b1675dSTing-Kang Chang# - <NAME>_BINARY_DIR points to the build directory. 28*e7b1675dSTing-Kang Chang# 29*e7b1675dSTing-Kang Chang# Parameters: 30*e7b1675dSTing-Kang Chang# NAME name of the dependency. 31*e7b1675dSTing-Kang Chang# URL url to fetch a source archive from. 32*e7b1675dSTing-Kang Chang# SHA256 hash of the file downloaded from URL. 33*e7b1675dSTing-Kang Chang# 34*e7b1675dSTing-Kang Chang# Optional parameters: 35*e7b1675dSTing-Kang Chang# CMAKE_SUBDIR subdirectory of the downloaded archive where the root 36*e7b1675dSTing-Kang Chang# CMakeLists.txt file for the project is located. Defaults to the root. 37*e7b1675dSTing-Kang Chang# CMAKE_ARGS any additional argument that should be passed to cmake when 38*e7b1675dSTing-Kang Chang# configuring the downloaded archive. Defaults to empty. 39*e7b1675dSTing-Kang Chang# DATA_ONLY flag, if present the package will only be downloaded, verified and 40*e7b1675dSTing-Kang Chang# unpacked. No configuration step is performed, and no target included. This 41*e7b1675dSTing-Kang Chang# is useful for downloading archives of test vectors or artifacts. 42*e7b1675dSTing-Kang Chang# False by default. 43*e7b1675dSTing-Kang Chang# 44*e7b1675dSTing-Kang Changfunction(http_archive) 45*e7b1675dSTing-Kang Chang cmake_parse_arguments(PARSE_ARGV 0 http_archive 46*e7b1675dSTing-Kang Chang "DATA_ONLY" 47*e7b1675dSTing-Kang Chang "NAME;URL;SHA256;CMAKE_SUBDIR" 48*e7b1675dSTing-Kang Chang "CMAKE_ARGS" 49*e7b1675dSTing-Kang Chang ) 50*e7b1675dSTing-Kang Chang FetchContent_Declare( 51*e7b1675dSTing-Kang Chang ${http_archive_NAME} 52*e7b1675dSTing-Kang Chang URL ${http_archive_URL} 53*e7b1675dSTing-Kang Chang URL_HASH SHA256=${http_archive_SHA256} 54*e7b1675dSTing-Kang Chang ) 55*e7b1675dSTing-Kang Chang message(STATUS "Fetching ${http_archive_NAME}") 56*e7b1675dSTing-Kang Chang FetchContent_GetProperties(${http_archive_NAME}) 57*e7b1675dSTing-Kang Chang if(NOT ${http_archive_NAME}_POPULATED) 58*e7b1675dSTing-Kang Chang FetchContent_Populate(${http_archive_NAME}) 59*e7b1675dSTing-Kang Chang if (NOT http_archive_DATA_ONLY) 60*e7b1675dSTing-Kang Chang add_subdirectory( 61*e7b1675dSTing-Kang Chang ${${http_archive_NAME}_SOURCE_DIR}/${http_archive_CMAKE_SUBDIR} 62*e7b1675dSTing-Kang Chang ${${http_archive_NAME}_BINARY_DIR} 63*e7b1675dSTing-Kang Chang EXCLUDE_FROM_ALL) 64*e7b1675dSTing-Kang Chang endif() 65*e7b1675dSTing-Kang Chang # Expose these variables to the caller. 66*e7b1675dSTing-Kang Chang set( 67*e7b1675dSTing-Kang Chang "${http_archive_NAME}_SOURCE_DIR" 68*e7b1675dSTing-Kang Chang "${${http_archive_NAME}_SOURCE_DIR}" 69*e7b1675dSTing-Kang Chang PARENT_SCOPE) 70*e7b1675dSTing-Kang Chang set( 71*e7b1675dSTing-Kang Chang "${http_archive_NAME}_BINARY_DIR" 72*e7b1675dSTing-Kang Chang "${${http_archive_NAME}_BINARY_DIR}" 73*e7b1675dSTing-Kang Chang PARENT_SCOPE) 74*e7b1675dSTing-Kang Chang endif() 75*e7b1675dSTing-Kang Changendfunction(http_archive) 76