xref: /aosp_15_r20/external/tink/cmake/HttpArchive.cmake (revision e7b1675dde1b92d52ec075b0a92829627f2c52a5)
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