| # 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(ExternalProject) |
| include(CMakeParseArguments) |
| |
| if (NOT DEFINED TINK_THIRD_PARTY_DIR) |
| set(TINK_THIRD_PARTY_DIR "${CMAKE_CURRENT_BINARY_DIR}/__third_party") |
| endif() |
| |
| # 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 a <NAME>_SOURCE_DIR variable, which points to the |
| # root directory of the downloaded package and can be used to reference data in |
| # tests, or append extra include/link paths in the Workspace file. |
| # |
| # 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" |
| ) |
| |
| message(STATUS "Fetching ${http_archive_NAME}") |
| |
| set(http_archive_PREFIX "${TINK_THIRD_PARTY_DIR}/${http_archive_NAME}") |
| set(http_archive_SOURCE_DIR "${http_archive_PREFIX}/src") |
| set(http_archive_BINARY_DIR "${http_archive_PREFIX}/build") |
| |
| configure_file( |
| cmake/HttpArchiveDownloader.cmake.in |
| "${http_archive_PREFIX}/CMakeLists.txt") |
| |
| execute_process( |
| COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . |
| RESULT_VARIABLE errors |
| WORKING_DIRECTORY "${http_archive_PREFIX}") |
| |
| if (errors) |
| message(FATAL_ERROR "While configuring ${http_archive_NAME}: ${errors}") |
| endif() |
| |
| set(${http_archive_NAME}_SOURCE_DIR "${http_archive_SOURCE_DIR}" PARENT_SCOPE) |
| |
| execute_process( |
| COMMAND ${CMAKE_COMMAND} --build . |
| RESULT_VARIABLE errors |
| WORKING_DIRECTORY "${http_archive_PREFIX}") |
| |
| if (errors) |
| message(FATAL_ERROR "While fetching ${http_archive_NAME}: ${errors}") |
| endif() |
| |
| if (NOT http_archive_DATA_ONLY) |
| add_subdirectory( |
| "${http_archive_SOURCE_DIR}/${http_archive_CMAKE_SUBDIR}" |
| "${http_archive_BINARY_DIR}" EXCLUDE_FROM_ALL) |
| endif() |
| endfunction(http_archive) |