| # 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) |