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