blob: 1fabdba908e5e950f9291c1585c59a12af90d247 [file] [log] [blame]
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001set(LIB_NAME libcurl)
2
Lucas Eckels9bd90e62012-08-06 15:07:02 -07003configure_file(curl_config.h.cmake
4 ${CMAKE_CURRENT_BINARY_DIR}/curl_config.h)
5
6transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake")
7include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake)
8
9list(APPEND HHEADERS
10 ${CMAKE_CURRENT_BINARY_DIR}/curl_config.h
Lucas Eckels9bd90e62012-08-06 15:07:02 -070011 )
12
13if(MSVC)
14 list(APPEND CSOURCES libcurl.rc)
Elliott Hughes82be86d2017-09-20 17:00:17 -070015 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127")
Lucas Eckels9bd90e62012-08-06 15:07:02 -070016endif()
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
Lucas Eckels9bd90e62012-08-06 15:07:02 -070049
50# The rest of the build
51
52include_directories(${CMAKE_CURRENT_BINARY_DIR}/../include)
53include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..)
54include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../include)
55include_directories(${CMAKE_CURRENT_BINARY_DIR}/..)
56include_directories(${CMAKE_CURRENT_SOURCE_DIR})
57include_directories(${CMAKE_CURRENT_BINARY_DIR})
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -070058if(USE_ARES)
Lucas Eckels9bd90e62012-08-06 15:07:02 -070059 include_directories(${CARES_INCLUDE_DIR})
60endif()
61
62if(CURL_STATICLIB)
63 # Static lib
64 set(CURL_USER_DEFINED_DYNAMIC_OR_STATIC STATIC)
65else()
66 # DLL / so dynamic lib
67 set(CURL_USER_DEFINED_DYNAMIC_OR_STATIC SHARED)
68endif()
69
70add_library(
71 ${LIB_NAME}
72 ${CURL_USER_DEFINED_DYNAMIC_OR_STATIC}
73 ${HHEADERS} ${CSOURCES}
74 )
75
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -070076if(MSVC AND CURL_STATICLIB)
77 set_target_properties(${LIB_NAME} PROPERTIES STATIC_LIBRARY_FLAGS ${CMAKE_EXE_LINKER_FLAGS})
78endif()
79
Lucas Eckels9bd90e62012-08-06 15:07:02 -070080target_link_libraries(${LIB_NAME} ${CURL_LIBS})
81
82if(WIN32)
83 add_definitions( -D_USRDLL )
84endif()
85
86set_target_properties(${LIB_NAME} PROPERTIES COMPILE_DEFINITIONS BUILDING_LIBCURL)
87
Elliott Hughescee03382017-06-23 12:17:18 -070088if(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})
91endif()
92
Lucas Eckels9bd90e62012-08-06 15:07:02 -070093# Remove the "lib" prefix since the library is already named "libcurl".
94set_target_properties(${LIB_NAME} PROPERTIES PREFIX "")
95set_target_properties(${LIB_NAME} PROPERTIES IMPORT_PREFIX "")
96
Lucas Eckels9bd90e62012-08-06 15:07:02 -070097if(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")
Elliott Hughes82be86d2017-09-20 17:00:17 -0700101
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 )
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700108 endif()
109endif()
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -0700110
Alex Deymo486467e2017-12-19 19:04:07 +0100111target_include_directories(${LIB_NAME} INTERFACE
112 $<INSTALL_INTERFACE:include>)
113
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -0700114install(TARGETS ${LIB_NAME}
Alex Deymo486467e2017-12-19 19:04:07 +0100115 EXPORT libcurl-target
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -0700116 ARCHIVE DESTINATION lib
117 LIBRARY DESTINATION lib
Alex Deymo486467e2017-12-19 19:04:07 +0100118 RUNTIME DESTINATION bin
119)
120
121export(TARGETS ${LIB_NAME}
122 APPEND FILE ${PROJECT_BINARY_DIR}/libcurl-target.cmake
123 NAMESPACE CURL::
124)
125
126install(EXPORT libcurl-target
127 FILE libcurl-target.cmake
128 NAMESPACE CURL::
129 DESTINATION ${CURL_INSTALL_CMAKE_DIR}
130)
131