xref: /aosp_15_r20/external/curl/lib/CMakeLists.txt (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
2*6236dae4SAndroid Build Coastguard Worker#                                  _   _ ____  _
3*6236dae4SAndroid Build Coastguard Worker#  Project                     ___| | | |  _ \| |
4*6236dae4SAndroid Build Coastguard Worker#                             / __| | | | |_) | |
5*6236dae4SAndroid Build Coastguard Worker#                            | (__| |_| |  _ <| |___
6*6236dae4SAndroid Build Coastguard Worker#                             \___|\___/|_| \_\_____|
7*6236dae4SAndroid Build Coastguard Worker#
8*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al.
9*6236dae4SAndroid Build Coastguard Worker#
10*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which
11*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms
12*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html.
13*6236dae4SAndroid Build Coastguard Worker#
14*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell
15*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is
16*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file.
17*6236dae4SAndroid Build Coastguard Worker#
18*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied.
20*6236dae4SAndroid Build Coastguard Worker#
21*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl
22*6236dae4SAndroid Build Coastguard Worker#
23*6236dae4SAndroid Build Coastguard Worker###########################################################################
24*6236dae4SAndroid Build Coastguard Workerset(LIB_NAME "libcurl")
25*6236dae4SAndroid Build Coastguard Workerset(LIBCURL_OUTPUT_NAME "libcurl" CACHE STRING "Basename of the curl library")
26*6236dae4SAndroid Build Coastguard Workeradd_definitions("-DBUILDING_LIBCURL")
27*6236dae4SAndroid Build Coastguard Worker
28*6236dae4SAndroid Build Coastguard Workerconfigure_file("curl_config.h.cmake" "${CMAKE_CURRENT_BINARY_DIR}/curl_config.h")
29*6236dae4SAndroid Build Coastguard Worker
30*6236dae4SAndroid Build Coastguard Worker# Get 'CSOURCES', 'HHEADERS' variables
31*6236dae4SAndroid Build Coastguard Workertransform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake")
32*6236dae4SAndroid Build Coastguard Workerinclude("${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake")
33*6236dae4SAndroid Build Coastguard Worker
34*6236dae4SAndroid Build Coastguard Worker# DllMain is added later for DLL builds only.
35*6236dae4SAndroid Build Coastguard Workerlist(REMOVE_ITEM CSOURCES "dllmain.c")
36*6236dae4SAndroid Build Coastguard Worker
37*6236dae4SAndroid Build Coastguard Workerlist(APPEND HHEADERS "${CMAKE_CURRENT_BINARY_DIR}/curl_config.h")
38*6236dae4SAndroid Build Coastguard Worker
39*6236dae4SAndroid Build Coastguard Worker# The rest of the build
40*6236dae4SAndroid Build Coastguard Worker
41*6236dae4SAndroid Build Coastguard Workerinclude_directories(
42*6236dae4SAndroid Build Coastguard Worker  "${PROJECT_BINARY_DIR}/lib"  # for "curl_config.h"
43*6236dae4SAndroid Build Coastguard Worker  "${PROJECT_SOURCE_DIR}/lib"  # for "curl_setup.h"
44*6236dae4SAndroid Build Coastguard Worker)
45*6236dae4SAndroid Build Coastguard Workerif(USE_ARES)
46*6236dae4SAndroid Build Coastguard Worker  include_directories(SYSTEM ${CARES_INCLUDE_DIRS})
47*6236dae4SAndroid Build Coastguard Workerendif()
48*6236dae4SAndroid Build Coastguard Worker
49*6236dae4SAndroid Build Coastguard Workerif(CURL_BUILD_TESTING)
50*6236dae4SAndroid Build Coastguard Worker  add_library(
51*6236dae4SAndroid Build Coastguard Worker    curlu  # special libcurlu library just for unittests
52*6236dae4SAndroid Build Coastguard Worker    STATIC
53*6236dae4SAndroid Build Coastguard Worker    EXCLUDE_FROM_ALL
54*6236dae4SAndroid Build Coastguard Worker    ${HHEADERS} ${CSOURCES}
55*6236dae4SAndroid Build Coastguard Worker  )
56*6236dae4SAndroid Build Coastguard Worker  target_compile_definitions(curlu PUBLIC "UNITTESTS" "CURL_STATICLIB")
57*6236dae4SAndroid Build Coastguard Worker  target_link_libraries(curlu PRIVATE ${CURL_LIBS})
58*6236dae4SAndroid Build Coastguard Workerendif()
59*6236dae4SAndroid Build Coastguard Worker
60*6236dae4SAndroid Build Coastguard Workerif(ENABLE_CURLDEBUG)
61*6236dae4SAndroid Build Coastguard Worker  # We must compile these sources separately to avoid memdebug.h redefinitions
62*6236dae4SAndroid Build Coastguard Worker  # applying to them.
63*6236dae4SAndroid Build Coastguard Worker  set_source_files_properties("memdebug.c" "curl_multibyte.c" PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
64*6236dae4SAndroid Build Coastguard Workerendif()
65*6236dae4SAndroid Build Coastguard Worker
66*6236dae4SAndroid Build Coastguard Worker## Library definition
67*6236dae4SAndroid Build Coastguard Worker
68*6236dae4SAndroid Build Coastguard Worker# Add "_imp" as a suffix before the extension to avoid conflicting with
69*6236dae4SAndroid Build Coastguard Worker# the statically linked "libcurl.lib" (typically with MSVC)
70*6236dae4SAndroid Build Coastguard Workerif(WIN32 AND
71*6236dae4SAndroid Build Coastguard Worker   NOT IMPORT_LIB_SUFFIX AND
72*6236dae4SAndroid Build Coastguard Worker   CMAKE_STATIC_LIBRARY_SUFFIX STREQUAL CMAKE_IMPORT_LIBRARY_SUFFIX)
73*6236dae4SAndroid Build Coastguard Worker  set(IMPORT_LIB_SUFFIX "_imp")
74*6236dae4SAndroid Build Coastguard Workerendif()
75*6236dae4SAndroid Build Coastguard Worker
76*6236dae4SAndroid Build Coastguard Worker# Whether to do a single compilation pass for libcurl sources and reuse these
77*6236dae4SAndroid Build Coastguard Worker# objects to generate both static and shared target.
78*6236dae4SAndroid Build Coastguard Workerif(NOT DEFINED SHARE_LIB_OBJECT)
79*6236dae4SAndroid Build Coastguard Worker  # Enable it by default on platforms where PIC is the default for both shared
80*6236dae4SAndroid Build Coastguard Worker  # and static and there is a way to tell the linker which libcurl symbols it
81*6236dae4SAndroid Build Coastguard Worker  # should export (vs. marking these symbols exportable at compile-time).
82*6236dae4SAndroid Build Coastguard Worker  if(WIN32)
83*6236dae4SAndroid Build Coastguard Worker    set(SHARE_LIB_OBJECT ON)
84*6236dae4SAndroid Build Coastguard Worker  else()
85*6236dae4SAndroid Build Coastguard Worker    # On other platforms, make it an option disabled by default
86*6236dae4SAndroid Build Coastguard Worker    set(SHARE_LIB_OBJECT OFF)
87*6236dae4SAndroid Build Coastguard Worker  endif()
88*6236dae4SAndroid Build Coastguard Workerendif()
89*6236dae4SAndroid Build Coastguard Worker
90*6236dae4SAndroid Build Coastguard Workerif(SHARE_LIB_OBJECT)
91*6236dae4SAndroid Build Coastguard Worker  set(LIB_OBJECT "libcurl_object")
92*6236dae4SAndroid Build Coastguard Worker  add_library(${LIB_OBJECT} OBJECT ${HHEADERS} ${CSOURCES})
93*6236dae4SAndroid Build Coastguard Worker  if(WIN32)
94*6236dae4SAndroid Build Coastguard Worker    # Define CURL_STATICLIB always, to disable __declspec(dllexport) for
95*6236dae4SAndroid Build Coastguard Worker    # exported libcurl symbols. We handle exports via libcurl.def instead.
96*6236dae4SAndroid Build Coastguard Worker    # Except with symbol hiding disabled or debug mode enabled, when we export
97*6236dae4SAndroid Build Coastguard Worker    # _all_ symbols from libcurl DLL, without using libcurl.def.
98*6236dae4SAndroid Build Coastguard Worker    set_property(TARGET ${LIB_OBJECT} APPEND PROPERTY COMPILE_DEFINITIONS "CURL_STATICLIB")
99*6236dae4SAndroid Build Coastguard Worker  endif()
100*6236dae4SAndroid Build Coastguard Worker  target_link_libraries(${LIB_OBJECT} PRIVATE ${CURL_LIBS})
101*6236dae4SAndroid Build Coastguard Worker  set_target_properties(${LIB_OBJECT} PROPERTIES
102*6236dae4SAndroid Build Coastguard Worker    POSITION_INDEPENDENT_CODE ON)
103*6236dae4SAndroid Build Coastguard Worker  if(CURL_HIDES_PRIVATE_SYMBOLS)
104*6236dae4SAndroid Build Coastguard Worker    set_property(TARGET ${LIB_OBJECT} APPEND PROPERTY COMPILE_FLAGS "${CURL_CFLAG_SYMBOLS_HIDE}")
105*6236dae4SAndroid Build Coastguard Worker    set_property(TARGET ${LIB_OBJECT} APPEND PROPERTY COMPILE_DEFINITIONS "CURL_HIDDEN_SYMBOLS")
106*6236dae4SAndroid Build Coastguard Worker  endif()
107*6236dae4SAndroid Build Coastguard Worker  if(CURL_HAS_LTO)
108*6236dae4SAndroid Build Coastguard Worker    set_target_properties(${LIB_OBJECT} PROPERTIES
109*6236dae4SAndroid Build Coastguard Worker      INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
110*6236dae4SAndroid Build Coastguard Worker      INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE)
111*6236dae4SAndroid Build Coastguard Worker  endif()
112*6236dae4SAndroid Build Coastguard Worker
113*6236dae4SAndroid Build Coastguard Worker  target_include_directories(${LIB_OBJECT} INTERFACE
114*6236dae4SAndroid Build Coastguard Worker    "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
115*6236dae4SAndroid Build Coastguard Worker    "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>")
116*6236dae4SAndroid Build Coastguard Worker
117*6236dae4SAndroid Build Coastguard Worker  set(LIB_SOURCE $<TARGET_OBJECTS:${LIB_OBJECT}>)
118*6236dae4SAndroid Build Coastguard Workerelse()
119*6236dae4SAndroid Build Coastguard Worker  set(LIB_SOURCE ${HHEADERS} ${CSOURCES})
120*6236dae4SAndroid Build Coastguard Workerendif()
121*6236dae4SAndroid Build Coastguard Worker
122*6236dae4SAndroid Build Coastguard Worker# We want it to be called libcurl on all platforms
123*6236dae4SAndroid Build Coastguard Workerif(BUILD_STATIC_LIBS)
124*6236dae4SAndroid Build Coastguard Worker  list(APPEND libcurl_export ${LIB_STATIC})
125*6236dae4SAndroid Build Coastguard Worker  add_library(${LIB_STATIC} STATIC ${LIB_SOURCE})
126*6236dae4SAndroid Build Coastguard Worker  add_library(${PROJECT_NAME}::${LIB_STATIC} ALIAS ${LIB_STATIC})
127*6236dae4SAndroid Build Coastguard Worker  if(WIN32)
128*6236dae4SAndroid Build Coastguard Worker    set_property(TARGET ${LIB_OBJECT} APPEND PROPERTY COMPILE_DEFINITIONS "CURL_STATICLIB")
129*6236dae4SAndroid Build Coastguard Worker  endif()
130*6236dae4SAndroid Build Coastguard Worker  target_link_libraries(${LIB_STATIC} PRIVATE ${CURL_LIBS})
131*6236dae4SAndroid Build Coastguard Worker  # Remove the "lib" prefix since the library is already named "libcurl".
132*6236dae4SAndroid Build Coastguard Worker  set_target_properties(${LIB_STATIC} PROPERTIES
133*6236dae4SAndroid Build Coastguard Worker    PREFIX "" OUTPUT_NAME "${LIBCURL_OUTPUT_NAME}"
134*6236dae4SAndroid Build Coastguard Worker    SUFFIX "${STATIC_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}"
135*6236dae4SAndroid Build Coastguard Worker    INTERFACE_COMPILE_DEFINITIONS "CURL_STATICLIB")
136*6236dae4SAndroid Build Coastguard Worker  if(CURL_HIDES_PRIVATE_SYMBOLS)
137*6236dae4SAndroid Build Coastguard Worker    set_property(TARGET ${LIB_STATIC} APPEND PROPERTY COMPILE_FLAGS "${CURL_CFLAG_SYMBOLS_HIDE}")
138*6236dae4SAndroid Build Coastguard Worker    set_property(TARGET ${LIB_STATIC} APPEND PROPERTY COMPILE_DEFINITIONS "CURL_HIDDEN_SYMBOLS")
139*6236dae4SAndroid Build Coastguard Worker  endif()
140*6236dae4SAndroid Build Coastguard Worker  if(CURL_HAS_LTO)
141*6236dae4SAndroid Build Coastguard Worker    set_target_properties(${LIB_STATIC} PROPERTIES
142*6236dae4SAndroid Build Coastguard Worker      INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
143*6236dae4SAndroid Build Coastguard Worker      INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE)
144*6236dae4SAndroid Build Coastguard Worker  endif()
145*6236dae4SAndroid Build Coastguard Worker
146*6236dae4SAndroid Build Coastguard Worker  target_include_directories(${LIB_STATIC} INTERFACE
147*6236dae4SAndroid Build Coastguard Worker    "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
148*6236dae4SAndroid Build Coastguard Worker    "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>")
149*6236dae4SAndroid Build Coastguard Workerendif()
150*6236dae4SAndroid Build Coastguard Worker
151*6236dae4SAndroid Build Coastguard Workerif(BUILD_SHARED_LIBS)
152*6236dae4SAndroid Build Coastguard Worker  list(APPEND libcurl_export ${LIB_SHARED})
153*6236dae4SAndroid Build Coastguard Worker  add_library(${LIB_SHARED} SHARED ${LIB_SOURCE})
154*6236dae4SAndroid Build Coastguard Worker  add_library(${PROJECT_NAME}::${LIB_SHARED} ALIAS ${LIB_SHARED})
155*6236dae4SAndroid Build Coastguard Worker  if(WIN32 OR CYGWIN)
156*6236dae4SAndroid Build Coastguard Worker    if(CYGWIN)
157*6236dae4SAndroid Build Coastguard Worker      # For Cygwin always compile dllmain.c as a separate unit since it
158*6236dae4SAndroid Build Coastguard Worker      # includes windows.h, which should not be included in other units.
159*6236dae4SAndroid Build Coastguard Worker      set_source_files_properties("dllmain.c" PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
160*6236dae4SAndroid Build Coastguard Worker    endif()
161*6236dae4SAndroid Build Coastguard Worker    set_property(TARGET ${LIB_SHARED} APPEND PROPERTY SOURCES "dllmain.c")
162*6236dae4SAndroid Build Coastguard Worker  endif()
163*6236dae4SAndroid Build Coastguard Worker  if(WIN32)
164*6236dae4SAndroid Build Coastguard Worker    set_property(TARGET ${LIB_SHARED} APPEND PROPERTY SOURCES "libcurl.rc")
165*6236dae4SAndroid Build Coastguard Worker    if(CURL_HIDES_PRIVATE_SYMBOLS)
166*6236dae4SAndroid Build Coastguard Worker      set_property(TARGET ${LIB_SHARED} APPEND PROPERTY SOURCES "${PROJECT_SOURCE_DIR}/lib/libcurl.def")
167*6236dae4SAndroid Build Coastguard Worker    endif()
168*6236dae4SAndroid Build Coastguard Worker  endif()
169*6236dae4SAndroid Build Coastguard Worker  target_link_libraries(${LIB_SHARED} PRIVATE ${CURL_LIBS})
170*6236dae4SAndroid Build Coastguard Worker  # Remove the "lib" prefix since the library is already named "libcurl".
171*6236dae4SAndroid Build Coastguard Worker  set_target_properties(${LIB_SHARED} PROPERTIES
172*6236dae4SAndroid Build Coastguard Worker    PREFIX "" OUTPUT_NAME "${LIBCURL_OUTPUT_NAME}"
173*6236dae4SAndroid Build Coastguard Worker    IMPORT_PREFIX "" IMPORT_SUFFIX "${IMPORT_LIB_SUFFIX}${CMAKE_IMPORT_LIBRARY_SUFFIX}"
174*6236dae4SAndroid Build Coastguard Worker    POSITION_INDEPENDENT_CODE ON)
175*6236dae4SAndroid Build Coastguard Worker  if(CURL_HIDES_PRIVATE_SYMBOLS)
176*6236dae4SAndroid Build Coastguard Worker    set_property(TARGET ${LIB_SHARED} APPEND PROPERTY COMPILE_FLAGS "${CURL_CFLAG_SYMBOLS_HIDE}")
177*6236dae4SAndroid Build Coastguard Worker    set_property(TARGET ${LIB_SHARED} APPEND PROPERTY COMPILE_DEFINITIONS "CURL_HIDDEN_SYMBOLS")
178*6236dae4SAndroid Build Coastguard Worker  endif()
179*6236dae4SAndroid Build Coastguard Worker  if(CURL_HAS_LTO)
180*6236dae4SAndroid Build Coastguard Worker    set_target_properties(${LIB_SHARED} PROPERTIES
181*6236dae4SAndroid Build Coastguard Worker      INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
182*6236dae4SAndroid Build Coastguard Worker      INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE)
183*6236dae4SAndroid Build Coastguard Worker  endif()
184*6236dae4SAndroid Build Coastguard Worker
185*6236dae4SAndroid Build Coastguard Worker  target_include_directories(${LIB_SHARED} INTERFACE
186*6236dae4SAndroid Build Coastguard Worker    "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
187*6236dae4SAndroid Build Coastguard Worker    "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>")
188*6236dae4SAndroid Build Coastguard Worker
189*6236dae4SAndroid Build Coastguard Worker  if(CMAKE_DLL_NAME_WITH_SOVERSION OR
190*6236dae4SAndroid Build Coastguard Worker    CYGWIN OR
191*6236dae4SAndroid Build Coastguard Worker    APPLE OR
192*6236dae4SAndroid Build Coastguard Worker    CMAKE_SYSTEM_NAME STREQUAL "AIX" OR
193*6236dae4SAndroid Build Coastguard Worker    CMAKE_SYSTEM_NAME STREQUAL "Linux" OR
194*6236dae4SAndroid Build Coastguard Worker    CMAKE_SYSTEM_NAME STREQUAL "SunOS" OR
195*6236dae4SAndroid Build Coastguard Worker    CMAKE_SYSTEM_NAME STREQUAL "Haiku" OR
196*6236dae4SAndroid Build Coastguard Worker    CMAKE_SYSTEM_NAME STREQUAL "GNU/kFreeBSD" OR
197*6236dae4SAndroid Build Coastguard Worker    # FreeBSD comes with the a.out and ELF flavours but a.out was supported
198*6236dae4SAndroid Build Coastguard Worker    # up to v3.x and ELF from v3.x. I cannot imagine someone running CMake
199*6236dae4SAndroid Build Coastguard Worker    # on those ancient systems.
200*6236dae4SAndroid Build Coastguard Worker    CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
201*6236dae4SAndroid Build Coastguard Worker    set(_soversion_default TRUE)
202*6236dae4SAndroid Build Coastguard Worker  else()
203*6236dae4SAndroid Build Coastguard Worker    set(_soversion_default FALSE)
204*6236dae4SAndroid Build Coastguard Worker  endif()
205*6236dae4SAndroid Build Coastguard Worker
206*6236dae4SAndroid Build Coastguard Worker  option(CURL_LIBCURL_SOVERSION "Enable libcurl SOVERSION" ${_soversion_default})
207*6236dae4SAndroid Build Coastguard Worker  option(CURL_LIBCURL_VERSIONED_SYMBOLS "Enable libcurl versioned symbols" OFF)
208*6236dae4SAndroid Build Coastguard Worker
209*6236dae4SAndroid Build Coastguard Worker  if(CURL_LIBCURL_SOVERSION OR CURL_LIBCURL_VERSIONED_SYMBOLS)
210*6236dae4SAndroid Build Coastguard Worker    # Get 'VERSIONCHANGE', 'VERSIONADD', 'VERSIONDEL', 'VERSIONINFO' variables
211*6236dae4SAndroid Build Coastguard Worker    transform_makefile_inc("Makefile.soname" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.soname.cmake")
212*6236dae4SAndroid Build Coastguard Worker    include("${CMAKE_CURRENT_BINARY_DIR}/Makefile.soname.cmake")
213*6236dae4SAndroid Build Coastguard Worker
214*6236dae4SAndroid Build Coastguard Worker    math(EXPR _cmakesoname "${VERSIONCHANGE} - ${VERSIONDEL}")
215*6236dae4SAndroid Build Coastguard Worker    set(_cmakeversion "${_cmakesoname}.${VERSIONDEL}.${VERSIONADD}")
216*6236dae4SAndroid Build Coastguard Worker  endif()
217*6236dae4SAndroid Build Coastguard Worker
218*6236dae4SAndroid Build Coastguard Worker  if(CURL_LIBCURL_SOVERSION)
219*6236dae4SAndroid Build Coastguard Worker    set_target_properties(${LIB_SHARED} PROPERTIES
220*6236dae4SAndroid Build Coastguard Worker      VERSION "${_cmakeversion}" SOVERSION "${_cmakesoname}")
221*6236dae4SAndroid Build Coastguard Worker  endif()
222*6236dae4SAndroid Build Coastguard Worker
223*6236dae4SAndroid Build Coastguard Worker  ## Versioned symbols
224*6236dae4SAndroid Build Coastguard Worker
225*6236dae4SAndroid Build Coastguard Worker  if(CURL_LIBCURL_VERSIONED_SYMBOLS)
226*6236dae4SAndroid Build Coastguard Worker    if(NOT DEFINED CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX)
227*6236dae4SAndroid Build Coastguard Worker      # Default to prefixes used by autotools
228*6236dae4SAndroid Build Coastguard Worker      if(CURL_WITH_MULTI_SSL)
229*6236dae4SAndroid Build Coastguard Worker        set(CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX "MULTISSL_")
230*6236dae4SAndroid Build Coastguard Worker      elseif(CURL_USE_OPENSSL)
231*6236dae4SAndroid Build Coastguard Worker        set(CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX "OPENSSL_")
232*6236dae4SAndroid Build Coastguard Worker      elseif(CURL_USE_MBEDTLS)
233*6236dae4SAndroid Build Coastguard Worker        set(CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX "MBEDTLS_")
234*6236dae4SAndroid Build Coastguard Worker      elseif(CURL_USE_BEARSSL)
235*6236dae4SAndroid Build Coastguard Worker        set(CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX "BEARSSL_")
236*6236dae4SAndroid Build Coastguard Worker      elseif(CURL_USE_WOLFSSL)
237*6236dae4SAndroid Build Coastguard Worker        set(CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX "WOLFSSL_")
238*6236dae4SAndroid Build Coastguard Worker      elseif(CURL_USE_GNUTLS)
239*6236dae4SAndroid Build Coastguard Worker        set(CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX "GNUTLS_")
240*6236dae4SAndroid Build Coastguard Worker      elseif(CURL_USE_RUSTLS)
241*6236dae4SAndroid Build Coastguard Worker        set(CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX "RUSTLS_")
242*6236dae4SAndroid Build Coastguard Worker      endif()
243*6236dae4SAndroid Build Coastguard Worker    endif()
244*6236dae4SAndroid Build Coastguard Worker    # Generate version script for the linker, for versioned symbols.
245*6236dae4SAndroid Build Coastguard Worker    # Consumed variables:
246*6236dae4SAndroid Build Coastguard Worker    #   CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX
247*6236dae4SAndroid Build Coastguard Worker    #   CURL_LIBCURL_VERSIONED_SYMBOLS_SONAME
248*6236dae4SAndroid Build Coastguard Worker    set(CURL_LIBCURL_VERSIONED_SYMBOLS_SONAME ${_cmakesoname})
249*6236dae4SAndroid Build Coastguard Worker    configure_file(
250*6236dae4SAndroid Build Coastguard Worker      "${CMAKE_CURRENT_SOURCE_DIR}/libcurl.vers.in"
251*6236dae4SAndroid Build Coastguard Worker      "${CMAKE_CURRENT_BINARY_DIR}/libcurl.vers" @ONLY)
252*6236dae4SAndroid Build Coastguard Worker    include(CMakePushCheckState)
253*6236dae4SAndroid Build Coastguard Worker    include(CheckCSourceCompiles)
254*6236dae4SAndroid Build Coastguard Worker    cmake_push_check_state()
255*6236dae4SAndroid Build Coastguard Worker    set(CMAKE_REQUIRED_LINK_OPTIONS "-Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/libcurl.vers")
256*6236dae4SAndroid Build Coastguard Worker    check_c_source_compiles("int main(void) { return 0; }" HAVE_VERSIONED_SYMBOLS)
257*6236dae4SAndroid Build Coastguard Worker    if(HAVE_VERSIONED_SYMBOLS)
258*6236dae4SAndroid Build Coastguard Worker      # Superseded by LINK_OPTIONS in CMake 3.13 and later.
259*6236dae4SAndroid Build Coastguard Worker      set_target_properties(${LIB_SHARED} PROPERTIES LINK_FLAGS "${CMAKE_REQUIRED_LINK_OPTIONS}")
260*6236dae4SAndroid Build Coastguard Worker    else()
261*6236dae4SAndroid Build Coastguard Worker      message(WARNING "Versioned symbols requested, but not supported by the toolchain.")
262*6236dae4SAndroid Build Coastguard Worker    endif()
263*6236dae4SAndroid Build Coastguard Worker    cmake_pop_check_state()
264*6236dae4SAndroid Build Coastguard Worker  endif()
265*6236dae4SAndroid Build Coastguard Workerendif()
266*6236dae4SAndroid Build Coastguard Worker
267*6236dae4SAndroid Build Coastguard Workeradd_library(${LIB_NAME} ALIAS ${LIB_SELECTED})
268*6236dae4SAndroid Build Coastguard Workeradd_library(${PROJECT_NAME}::${LIB_NAME} ALIAS ${LIB_SELECTED})
269*6236dae4SAndroid Build Coastguard Worker
270*6236dae4SAndroid Build Coastguard Workerif(CURL_ENABLE_EXPORT_TARGET)
271*6236dae4SAndroid Build Coastguard Worker  if(BUILD_STATIC_LIBS)
272*6236dae4SAndroid Build Coastguard Worker    install(TARGETS ${LIB_STATIC}
273*6236dae4SAndroid Build Coastguard Worker      EXPORT ${TARGETS_EXPORT_NAME}
274*6236dae4SAndroid Build Coastguard Worker      ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
275*6236dae4SAndroid Build Coastguard Worker      LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
276*6236dae4SAndroid Build Coastguard Worker      RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
277*6236dae4SAndroid Build Coastguard Worker    )
278*6236dae4SAndroid Build Coastguard Worker  endif()
279*6236dae4SAndroid Build Coastguard Worker  if(BUILD_SHARED_LIBS)
280*6236dae4SAndroid Build Coastguard Worker    install(TARGETS ${LIB_SHARED}
281*6236dae4SAndroid Build Coastguard Worker      EXPORT ${TARGETS_EXPORT_NAME}
282*6236dae4SAndroid Build Coastguard Worker      ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
283*6236dae4SAndroid Build Coastguard Worker      LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
284*6236dae4SAndroid Build Coastguard Worker      RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
285*6236dae4SAndroid Build Coastguard Worker    )
286*6236dae4SAndroid Build Coastguard Worker  endif()
287*6236dae4SAndroid Build Coastguard Worker
288*6236dae4SAndroid Build Coastguard Worker  export(TARGETS ${libcurl_export}
289*6236dae4SAndroid Build Coastguard Worker    FILE "${PROJECT_BINARY_DIR}/libcurl-target.cmake"
290*6236dae4SAndroid Build Coastguard Worker    NAMESPACE ${PROJECT_NAME}::
291*6236dae4SAndroid Build Coastguard Worker  )
292*6236dae4SAndroid Build Coastguard Workerendif()
293