1 set(LIB_NAME libcurl) 2 3 configure_file(curl_config.h.cmake 4 ${CMAKE_CURRENT_BINARY_DIR}/curl_config.h) 5 6 transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") 7 include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake) 8 9 list(APPEND HHEADERS 10 ${CMAKE_CURRENT_BINARY_DIR}/curl_config.h 11 ) 12 13 if(MSVC) 14 list(APPEND CSOURCES libcurl.rc) 15 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127") 16 endif() 17 18 # SET(CSOURCES 19 # # memdebug.c -not used 20 # # nwlib.c - Not used 21 # # strtok.c - specify later 22 # # strtoofft.c - specify later 23 # ) 24 25 # # if we have Kerberos 4, right now this is never on 26 # #OPTION(CURL_KRB4 "Use Kerberos 4" OFF) 27 # IF(CURL_KRB4) 28 # SET(CSOURCES ${CSOURCES} 29 # krb4.c 30 # security.c 31 # ) 32 # ENDIF(CURL_KRB4) 33 34 # #OPTION(CURL_MALLOC_DEBUG "Debug mallocs in Curl" OFF) 35 # MARK_AS_ADVANCED(CURL_MALLOC_DEBUG) 36 # IF(CURL_MALLOC_DEBUG) 37 # SET(CSOURCES ${CSOURCES} 38 # memdebug.c 39 # ) 40 # ENDIF(CURL_MALLOC_DEBUG) 41 42 # # only build compat strtoofft if we need to 43 # IF(NOT HAVE_STRTOLL AND NOT HAVE__STRTOI64) 44 # SET(CSOURCES ${CSOURCES} 45 # strtoofft.c 46 # ) 47 # ENDIF(NOT HAVE_STRTOLL AND NOT HAVE__STRTOI64) 48 49 50 # The rest of the build 51 52 include_directories(${CMAKE_CURRENT_BINARY_DIR}/../include) 53 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..) 54 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../include) 55 include_directories(${CMAKE_CURRENT_BINARY_DIR}/..) 56 include_directories(${CMAKE_CURRENT_SOURCE_DIR}) 57 include_directories(${CMAKE_CURRENT_BINARY_DIR}) 58 if(USE_ARES) 59 include_directories(${CARES_INCLUDE_DIR}) 60 endif() 61 62 if(CURL_STATICLIB) 63 # Static lib 64 set(CURL_USER_DEFINED_DYNAMIC_OR_STATIC STATIC) 65 else() 66 # DLL / so dynamic lib 67 set(CURL_USER_DEFINED_DYNAMIC_OR_STATIC SHARED) 68 endif() 69 70 add_library( 71 ${LIB_NAME} 72 ${CURL_USER_DEFINED_DYNAMIC_OR_STATIC} 73 ${HHEADERS} ${CSOURCES} 74 ) 75 76 if(MSVC AND CURL_STATICLIB) 77 set_target_properties(${LIB_NAME} PROPERTIES STATIC_LIBRARY_FLAGS ${CMAKE_EXE_LINKER_FLAGS}) 78 endif() 79 80 target_link_libraries(${LIB_NAME} ${CURL_LIBS}) 81 82 if(WIN32) 83 add_definitions( -D_USRDLL ) 84 endif() 85 86 set_target_properties(${LIB_NAME} PROPERTIES COMPILE_DEFINITIONS BUILDING_LIBCURL) 87 88 if(HIDES_CURL_PRIVATE_SYMBOLS) 89 set_property(TARGET ${LIB_NAME} APPEND PROPERTY COMPILE_DEFINITIONS "CURL_HIDDEN_SYMBOLS") 90 set_property(TARGET ${LIB_NAME} APPEND PROPERTY COMPILE_FLAGS ${CURL_CFLAG_SYMBOLS_HIDE}) 91 endif() 92 93 # Remove the "lib" prefix since the library is already named "libcurl". 94 set_target_properties(${LIB_NAME} PROPERTIES PREFIX "") 95 set_target_properties(${LIB_NAME} PROPERTIES IMPORT_PREFIX "") 96 97 if(WIN32) 98 if(NOT CURL_STATICLIB) 99 # Add "_imp" as a suffix before the extension to avoid conflicting with the statically linked "libcurl.lib" 100 set_target_properties(${LIB_NAME} PROPERTIES IMPORT_SUFFIX "_imp.lib") 101 102 set_target_properties (${LIB_NAME} PROPERTIES 103 DEBUG_POSTFIX "-d" 104 # Note: no postfix for release variants, let user choose what style of release he wants 105 # MINSIZEREL_POSTFIX "-z" 106 # RELWITHDEBINFO_POSTFIX "-g" 107 ) 108 endif() 109 endif() 110 111 target_include_directories(${LIB_NAME} INTERFACE 112 $<INSTALL_INTERFACE:include>) 113 114 install(TARGETS ${LIB_NAME} 115 EXPORT libcurl-target 116 ARCHIVE DESTINATION lib 117 LIBRARY DESTINATION lib 118 RUNTIME DESTINATION bin 119 ) 120 121 export(TARGETS ${LIB_NAME} 122 APPEND FILE ${PROJECT_BINARY_DIR}/libcurl-target.cmake 123 NAMESPACE CURL:: 124 ) 125 126 install(EXPORT libcurl-target 127 FILE libcurl-target.cmake 128 NAMESPACE CURL:: 129 DESTINATION ${CURL_INSTALL_CMAKE_DIR} 130 ) 131 132