xref: /curl/CMake/Macros.cmake (revision c9b54fad)
1#***************************************************************************
2#                                  _   _ ____  _
3#  Project                     ___| | | |  _ \| |
4#                             / __| | | | |_) | |
5#                            | (__| |_| |  _ <| |___
6#                             \___|\___/|_| \_\_____|
7#
8# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
9#
10# This software is licensed as described in the file COPYING, which
11# you should have received as part of this distribution. The terms
12# are also available at https://curl.se/docs/copyright.html.
13#
14# You may opt to use, copy, modify, merge, publish, distribute and/or sell
15# copies of the Software, and permit persons to whom the Software is
16# furnished to do so, under the terms of the COPYING file.
17#
18# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19# KIND, either express or implied.
20#
21# SPDX-License-Identifier: curl
22#
23###########################################################################
24# File defines convenience macros for available feature testing
25
26# Check if header file exists and add it to the list.
27# This macro is intended to be called multiple times with a sequence of
28# possibly dependent header files.  Some headers depend on others to be
29# compiled correctly.
30macro(check_include_file_concat _file _variable)
31  check_include_files("${CURL_INCLUDES};${_file}" ${_variable})
32  if(${_variable})
33    list(APPEND CURL_INCLUDES ${_file})
34  endif()
35endmacro()
36
37# For other curl specific tests, use this macro.
38# Return result in variable: CURL_TEST_OUTPUT
39macro(curl_internal_test _curl_test)
40  if(NOT DEFINED "${_curl_test}")
41    string(REPLACE ";" " " _cmake_required_definitions "${CMAKE_REQUIRED_DEFINITIONS}")
42    if(CMAKE_REQUIRED_LIBRARIES)
43      set(_curl_test_add_libraries
44        "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
45    endif()
46
47    message(STATUS "Performing Test ${_curl_test}")
48    try_compile(${_curl_test}
49      ${PROJECT_BINARY_DIR}
50      "${CMAKE_CURRENT_SOURCE_DIR}/CMake/CurlTests.c"
51      CMAKE_FLAGS
52        "-DCOMPILE_DEFINITIONS:STRING=-D${_curl_test} ${CURL_TEST_DEFINES} ${_cmake_required_definitions}"
53        "${_curl_test_add_libraries}"
54      OUTPUT_VARIABLE CURL_TEST_OUTPUT)
55    if(${_curl_test})
56      set(${_curl_test} 1 CACHE INTERNAL "Curl test")
57      message(STATUS "Performing Test ${_curl_test} - Success")
58    else()
59      set(${_curl_test} "" CACHE INTERNAL "Curl test")
60      message(STATUS "Performing Test ${_curl_test} - Failed")
61    endif()
62  endif()
63endmacro()
64
65macro(curl_dependency_option _dependency)
66  set(CURL_${_dependency} "AUTO" CACHE STRING "Build curl with ${_dependency} support (AUTO, ON or OFF)")
67  set_property(CACHE CURL_${_dependency} PROPERTY STRINGS "AUTO" "ON" "OFF")
68
69  if(CURL_${_dependency} STREQUAL "AUTO")
70    find_package(${_dependency})
71  elseif(CURL_${_dependency})
72    find_package(${_dependency} REQUIRED)
73  endif()
74endmacro()
75
76# Convert the passed paths to libpath linker options and add them to CMAKE_REQUIRED_LINK_OPTIONS.
77macro(curl_required_libpaths _libpaths_arg)
78  set(_libpaths "${_libpaths_arg}")
79  foreach(_libpath IN LISTS _libpaths)
80    list(APPEND CMAKE_REQUIRED_LINK_OPTIONS "${CMAKE_LIBRARY_PATH_FLAG}${_libpath}")
81  endforeach()
82endmacro()
83