| xf.li | 6c8fc1e | 2023-08-12 00:11:09 -0700 | [diff] [blame] | 1 | #*************************************************************************** | 
|  | 2 | #                                  _   _ ____  _ | 
|  | 3 | #  Project                     ___| | | |  _ \| | | 
|  | 4 | #                             / __| | | | |_) | | | 
|  | 5 | #                            | (__| |_| |  _ <| |___ | 
|  | 6 | #                             \___|\___/|_| \_\_____| | 
|  | 7 | # | 
|  | 8 | # Copyright (C) 1998 - 2022, 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 | # This macro checks if the symbol exists in the library and if it | 
|  | 27 | # does, it prepends library to the list.  It is intended to be called | 
|  | 28 | # multiple times with a sequence of possibly dependent libraries in | 
|  | 29 | # order of least-to-most-dependent.  Some libraries depend on others | 
|  | 30 | # to link correctly. | 
|  | 31 | macro(check_library_exists_concat LIBRARY SYMBOL VARIABLE) | 
|  | 32 | check_library_exists("${LIBRARY};${CURL_LIBS}" ${SYMBOL} "${CMAKE_LIBRARY_PATH}" | 
|  | 33 | ${VARIABLE}) | 
|  | 34 | if(${VARIABLE}) | 
|  | 35 | set(CURL_LIBS ${LIBRARY} ${CURL_LIBS}) | 
|  | 36 | endif() | 
|  | 37 | endmacro() | 
|  | 38 |  | 
|  | 39 | # Check if header file exists and add it to the list. | 
|  | 40 | # This macro is intended to be called multiple times with a sequence of | 
|  | 41 | # possibly dependent header files.  Some headers depend on others to be | 
|  | 42 | # compiled correctly. | 
|  | 43 | macro(check_include_file_concat FILE VARIABLE) | 
|  | 44 | check_include_files("${CURL_INCLUDES};${FILE}" ${VARIABLE}) | 
|  | 45 | if(${VARIABLE}) | 
|  | 46 | set(CURL_INCLUDES ${CURL_INCLUDES} ${FILE}) | 
|  | 47 | set(CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -D${VARIABLE}") | 
|  | 48 | endif() | 
|  | 49 | endmacro() | 
|  | 50 |  | 
|  | 51 | # For other curl specific tests, use this macro. | 
|  | 52 | macro(curl_internal_test CURL_TEST) | 
|  | 53 | if(NOT DEFINED "${CURL_TEST}") | 
|  | 54 | set(MACRO_CHECK_FUNCTION_DEFINITIONS | 
|  | 55 | "-D${CURL_TEST} ${CURL_TEST_DEFINES} ${CMAKE_REQUIRED_FLAGS}") | 
|  | 56 | if(CMAKE_REQUIRED_LIBRARIES) | 
|  | 57 | set(CURL_TEST_ADD_LIBRARIES | 
|  | 58 | "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}") | 
|  | 59 | endif() | 
|  | 60 |  | 
|  | 61 | message(STATUS "Performing Curl Test ${CURL_TEST}") | 
|  | 62 | try_compile(${CURL_TEST} | 
|  | 63 | ${CMAKE_BINARY_DIR} | 
|  | 64 | ${CMAKE_CURRENT_SOURCE_DIR}/CMake/CurlTests.c | 
|  | 65 | CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS} | 
|  | 66 | "${CURL_TEST_ADD_LIBRARIES}" | 
|  | 67 | OUTPUT_VARIABLE OUTPUT) | 
|  | 68 | if(${CURL_TEST}) | 
|  | 69 | set(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}") | 
|  | 70 | message(STATUS "Performing Curl Test ${CURL_TEST} - Success") | 
|  | 71 | file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log | 
|  | 72 | "Performing Curl Test ${CURL_TEST} passed with the following output:\n" | 
|  | 73 | "${OUTPUT}\n") | 
|  | 74 | else() | 
|  | 75 | message(STATUS "Performing Curl Test ${CURL_TEST} - Failed") | 
|  | 76 | set(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}") | 
|  | 77 | file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log | 
|  | 78 | "Performing Curl Test ${CURL_TEST} failed with the following output:\n" | 
|  | 79 | "${OUTPUT}\n") | 
|  | 80 | endif() | 
|  | 81 | endif() | 
|  | 82 | endmacro() | 
|  | 83 |  | 
|  | 84 | macro(curl_nroff_check) | 
|  | 85 | find_program(NROFF NAMES gnroff nroff) | 
|  | 86 | if(NROFF) | 
|  | 87 | # Need a way to write to stdin, this will do | 
|  | 88 | file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/nroff-input.txt" "test") | 
|  | 89 | # Tests for a valid nroff option to generate a manpage | 
|  | 90 | foreach(_MANOPT "-man" "-mandoc") | 
|  | 91 | execute_process(COMMAND "${NROFF}" ${_MANOPT} | 
|  | 92 | OUTPUT_VARIABLE NROFF_MANOPT_OUTPUT | 
|  | 93 | INPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/nroff-input.txt" | 
|  | 94 | ERROR_QUIET) | 
|  | 95 | # Save the option if it was valid | 
|  | 96 | if(NROFF_MANOPT_OUTPUT) | 
|  | 97 | message("Found *nroff option: -- ${_MANOPT}") | 
|  | 98 | set(NROFF_MANOPT ${_MANOPT}) | 
|  | 99 | set(NROFF_USEFUL ON) | 
|  | 100 | break() | 
|  | 101 | endif() | 
|  | 102 | endforeach() | 
|  | 103 | # No need for the temporary file | 
|  | 104 | file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/nroff-input.txt") | 
|  | 105 | if(NOT NROFF_USEFUL) | 
|  | 106 | message(WARNING "Found no *nroff option to get plaintext from man pages") | 
|  | 107 | endif() | 
|  | 108 | else() | 
|  | 109 | message(WARNING "Found no *nroff program") | 
|  | 110 | endif() | 
|  | 111 | endmacro() | 
|  | 112 |  | 
|  | 113 | macro(optional_dependency DEPENDENCY) | 
|  | 114 | set(CURL_${DEPENDENCY} AUTO CACHE STRING "Build curl with ${DEPENDENCY} support (AUTO, ON or OFF)") | 
|  | 115 | set_property(CACHE CURL_${DEPENDENCY} PROPERTY STRINGS AUTO ON OFF) | 
|  | 116 |  | 
|  | 117 | if(CURL_${DEPENDENCY} STREQUAL AUTO) | 
|  | 118 | find_package(${DEPENDENCY}) | 
|  | 119 | elseif(CURL_${DEPENDENCY}) | 
|  | 120 | find_package(${DEPENDENCY} REQUIRED) | 
|  | 121 | endif() | 
|  | 122 | endmacro() |