• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_curl _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 _option_name _find_name _desc_name)
66  set(${_option_name} "AUTO" CACHE STRING "Build curl with ${_desc_name} support (AUTO, ON or OFF)")
67  set_property(CACHE ${_option_name} PROPERTY STRINGS "AUTO" "ON" "OFF")
68
69  if(${_option_name} STREQUAL "AUTO")
70    find_package(${_find_name})
71  elseif(${_option_name})
72    find_package(${_find_name} REQUIRED)
73  endif()
74endmacro()
75
76# Convert the passed paths to libpath linker options and add them to CMAKE_REQUIRED_*.
77macro(curl_required_libpaths _libpaths_arg)
78  if(CMAKE_VERSION VERSION_LESS 3.31)
79    set(_libpaths "${_libpaths_arg}")
80    foreach(_libpath IN LISTS _libpaths)
81      list(APPEND CMAKE_REQUIRED_LINK_OPTIONS "${CMAKE_LIBRARY_PATH_FLAG}${_libpath}")
82    endforeach()
83  else()
84    list(APPEND CMAKE_REQUIRED_LINK_DIRECTORIES "${_libpaths_arg}")
85  endif()
86endmacro()
87