From: Joel Rosdahl Date: Mon, 18 Mar 2024 19:54:28 +0000 (+0100) Subject: build: Add add_header_only_library function X-Git-Tag: v4.10~42^2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f65358d3993f18d3341045b57dbcb9011036a750;p=thirdparty%2Fccache.git build: Add add_header_only_library function --- diff --git a/cmake/Utils.cmake b/cmake/Utils.cmake index e89f9ede..dbb4ae09 100644 --- a/cmake/Utils.cmake +++ b/cmake/Utils.cmake @@ -80,3 +80,35 @@ function(print_dependency_summary prefix) message(STATUS "${prefix}${name}${name_pad} ${version}${version_pad} ${origin}") endforeach() endfunction() + +function(add_header_only_library lib_name) + cmake_parse_arguments(arg "" "DIR;URL;SHA256;SUBDIR" "" ${ARGN}) + + if(arg_DIR) + set(_src_dir "${arg_DIR}") + else() + if(NOT arg_URL) + message(FATAL_ERROR "Missing required argument: URL or DIR") + endif() + if(NOT arg_SHA256) + message(FATAL_ERROR "Missing required argument: SHA256") + endif() + if(NOT arg_SUBDIR) + set(arg_SUBDIR .) + endif() + + set(_src_dir "${CMAKE_BINARY_DIR}/_deps/${lib_name}-src") + get_filename_component(_header "${arg_URL}" NAME) + file( + DOWNLOAD "${arg_URL}" "${_src_dir}/${arg_SUBDIR}/${_header}" + EXPECTED_HASH "SHA256=${arg_SHA256}" + STATUS _download_status + ) + if(NOT "${_download_status}" EQUAL 0) + message(FATAL_ERROR "Failed to download ${arg_URL}: ${_download_status}") + endif() + endif() + + add_library("dep_${lib_name}" INTERFACE) + target_include_directories("dep_${lib_name}" SYSTEM INTERFACE "${_src_dir}") +endfunction()