Macros.cmake 4.72 KB
Newer Older
Curl Upstream's avatar
Curl Upstream committed
1
2
3
4
5
6
7
8
9
10
11
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
Curl Upstream's avatar
Curl Upstream committed
12
# are also available at https://curl.se/docs/copyright.html.
Curl Upstream's avatar
Curl Upstream committed
13
14
15
16
17
18
19
20
21
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
# furnished to do so, under the terms of the COPYING file.
#
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
#
###########################################################################
Curl Upstream's avatar
Curl Upstream committed
22
23
24
#File defines convenience macros for available feature testing

# This macro checks if the symbol exists in the library and if it
Curl Upstream's avatar
Curl Upstream committed
25
26
27
28
# does, it prepends library to the list.  It is intended to be called
# multiple times with a sequence of possibly dependent libraries in
# order of least-to-most-dependent.  Some libraries depend on others
# to link correctly.
Curl Upstream's avatar
Curl Upstream committed
29
macro(check_library_exists_concat LIBRARY SYMBOL VARIABLE)
Curl Upstream's avatar
Curl Upstream committed
30
31
32
33
  check_library_exists("${LIBRARY};${CURL_LIBS}" ${SYMBOL} "${CMAKE_LIBRARY_PATH}"
    ${VARIABLE})
  if(${VARIABLE})
    set(CURL_LIBS ${LIBRARY} ${CURL_LIBS})
Curl Upstream's avatar
Curl Upstream committed
34
35
  endif()
endmacro()
Curl Upstream's avatar
Curl Upstream committed
36
37

# Check if header file exists and add it to the list.
Curl Upstream's avatar
Curl Upstream committed
38
39
40
# This macro is intended to be called multiple times with a sequence of
# possibly dependent header files.  Some headers depend on others to be
# compiled correctly.
Curl Upstream's avatar
Curl Upstream committed
41
macro(check_include_file_concat FILE VARIABLE)
Curl Upstream's avatar
Curl Upstream committed
42
  check_include_files("${CURL_INCLUDES};${FILE}" ${VARIABLE})
Curl Upstream's avatar
Curl Upstream committed
43
44
45
  if(${VARIABLE})
    set(CURL_INCLUDES ${CURL_INCLUDES} ${FILE})
    set(CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -D${VARIABLE}")
Curl Upstream's avatar
Curl Upstream committed
46
47
  endif()
endmacro()
Curl Upstream's avatar
Curl Upstream committed
48
49

# For other curl specific tests, use this macro.
Curl Upstream's avatar
Curl Upstream committed
50
macro(curl_internal_test CURL_TEST)
Curl Upstream's avatar
Curl Upstream committed
51
  if(NOT DEFINED "${CURL_TEST}")
Curl Upstream's avatar
Curl Upstream committed
52
53
54
55
56
    set(MACRO_CHECK_FUNCTION_DEFINITIONS
      "-D${CURL_TEST} ${CURL_TEST_DEFINES} ${CMAKE_REQUIRED_FLAGS}")
    if(CMAKE_REQUIRED_LIBRARIES)
      set(CURL_TEST_ADD_LIBRARIES
        "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
Curl Upstream's avatar
Curl Upstream committed
57
    endif()
Curl Upstream's avatar
Curl Upstream committed
58
59
60
61
62
63
64
65
66
67
68
69
70
71

    message(STATUS "Performing Curl Test ${CURL_TEST}")
    try_compile(${CURL_TEST}
      ${CMAKE_BINARY_DIR}
      ${CMAKE_CURRENT_SOURCE_DIR}/CMake/CurlTests.c
      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
      "${CURL_TEST_ADD_LIBRARIES}"
      OUTPUT_VARIABLE OUTPUT)
    if(${CURL_TEST})
      set(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
      message(STATUS "Performing Curl Test ${CURL_TEST} - Success")
      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
        "Performing Curl Test ${CURL_TEST} passed with the following output:\n"
        "${OUTPUT}\n")
Curl Upstream's avatar
Curl Upstream committed
72
    else()
Curl Upstream's avatar
Curl Upstream committed
73
74
75
76
77
      message(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
      set(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
        "Performing Curl Test ${CURL_TEST} failed with the following output:\n"
        "${OUTPUT}\n")
Curl Upstream's avatar
Curl Upstream committed
78
    endif()
Curl Upstream's avatar
Curl Upstream committed
79
  endif()
Curl Upstream's avatar
Curl Upstream committed
80
endmacro()
Curl Upstream's avatar
Curl Upstream committed
81

Curl Upstream's avatar
Curl Upstream committed
82
macro(curl_nroff_check)
Curl Upstream's avatar
Curl Upstream committed
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
  find_program(NROFF NAMES gnroff nroff)
  if(NROFF)
    # Need a way to write to stdin, this will do
    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/nroff-input.txt" "test")
    # Tests for a valid nroff option to generate a manpage
    foreach(_MANOPT "-man" "-mandoc")
      execute_process(COMMAND "${NROFF}" ${_MANOPT}
        OUTPUT_VARIABLE NROFF_MANOPT_OUTPUT
        INPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/nroff-input.txt"
        ERROR_QUIET)
      # Save the option if it was valid
      if(NROFF_MANOPT_OUTPUT)
        message("Found *nroff option: -- ${_MANOPT}")
        set(NROFF_MANOPT ${_MANOPT})
        set(NROFF_USEFUL ON)
        break()
      endif()
    endforeach()
    # No need for the temporary file
    file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/nroff-input.txt")
    if(NOT NROFF_USEFUL)
      message(WARNING "Found no *nroff option to get plaintext from man pages")
    endif()
  else()
    message(WARNING "Found no *nroff program")
  endif()
Curl Upstream's avatar
Curl Upstream committed
109
endmacro()
Curl Upstream's avatar
Curl Upstream committed
110
111
112
113
114
115
116
117
118
119
120

macro(optional_dependency DEPENDENCY)
  set(CURL_${DEPENDENCY} AUTO CACHE STRING "Build curl with ${DEPENDENCY} support (AUTO, ON or OFF)")
  set_property(CACHE CURL_${DEPENDENCY} PROPERTY STRINGS AUTO ON OFF)

  if(CURL_${DEPENDENCY} STREQUAL AUTO)
    find_package(${DEPENDENCY})
  elseif(CURL_${DEPENDENCY})
    find_package(${DEPENDENCY} REQUIRED)
  endif()
endmacro()