CMakeLists.txt (5482B)
1 #*************************************************************************** 2 # _ _ ____ _ 3 # Project ___| | | | _ \| | 4 # / __| | | | |_) | | 5 # | (__| |_| | _ <| |___ 6 # \___|\___/|_| \_\_____| 7 # 8 # Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al. 9 # 10 # This software is licensed as described in the file COPYING, which 11 # you should have received as part of this distribution. The terms 12 # are also available at https://curl.se/docs/copyright.html. 13 # 14 # You may opt to use, copy, modify, merge, publish, distribute and/or sell 15 # copies of the Software, and permit persons to whom the Software is 16 # furnished to do so, under the terms of the COPYING file. 17 # 18 # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 19 # KIND, either express or implied. 20 # 21 # SPDX-License-Identifier: curl 22 # 23 ########################################################################### 24 set(EXE_NAME curl) 25 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS "${CURL_DEBUG_MACROS}") 26 27 set(_curl_cfiles_gen "") 28 set(_curl_hfiles_gen "") 29 set(_curl_definitions "") 30 31 if(ENABLE_CURL_MANUAL AND HAVE_MANUAL_TOOLS) 32 list(APPEND _curl_definitions "USE_MANUAL") 33 add_custom_command(OUTPUT "tool_hugehelp.c" 34 COMMAND ${CMAKE_COMMAND} -E echo "#include \"tool_setup.h\"" > "tool_hugehelp.c" 35 COMMAND ${CMAKE_COMMAND} -E echo "/* !checksrc! disable COPYRIGHT all */" >> "tool_hugehelp.c" 36 COMMAND ${CMAKE_COMMAND} -E echo "/* !checksrc! disable INCLUDEDUP all */" >> "tool_hugehelp.c" 37 COMMAND ${CMAKE_COMMAND} -E echo "/* !checksrc! disable LONGLINE all */" >> "tool_hugehelp.c" 38 COMMAND ${CMAKE_COMMAND} -E echo "#ifndef HAVE_LIBZ" >> "tool_hugehelp.c" 39 COMMAND "${PERL_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/mkhelp.pl" < "${CURL_ASCIIPAGE}" >> "tool_hugehelp.c" 40 COMMAND ${CMAKE_COMMAND} -E echo "#else" >> "tool_hugehelp.c" 41 COMMAND "${PERL_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/mkhelp.pl" -c < "${CURL_ASCIIPAGE}" >> "tool_hugehelp.c" 42 COMMAND ${CMAKE_COMMAND} -E echo "#endif /* HAVE_LIBZ */" >> "tool_hugehelp.c" 43 DEPENDS 44 generate-curl.1 45 "${CMAKE_CURRENT_SOURCE_DIR}/mkhelp.pl" 46 "${CMAKE_CURRENT_SOURCE_DIR}/tool_hugehelp.h" 47 "${CURL_ASCIIPAGE}" 48 VERBATIM) 49 list(APPEND _curl_cfiles_gen "tool_hugehelp.c") 50 list(APPEND _curl_hfiles_gen "tool_hugehelp.h") 51 endif() 52 53 if(CURL_CA_EMBED_SET) 54 if(PERL_FOUND) 55 list(APPEND _curl_definitions "CURL_CA_EMBED") 56 add_custom_command(OUTPUT "tool_ca_embed.c" 57 COMMAND "${PERL_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/mk-file-embed.pl" --var curl_ca_embed 58 < "${CURL_CA_EMBED}" > "tool_ca_embed.c" 59 DEPENDS 60 "${CMAKE_CURRENT_SOURCE_DIR}/mk-file-embed.pl" 61 "${CURL_CA_EMBED}" 62 VERBATIM) 63 list(APPEND _curl_cfiles_gen "tool_ca_embed.c") 64 else() 65 message(WARNING "Perl not found. Will not embed the CA bundle.") 66 endif() 67 endif() 68 69 # Get CURL_CFILES, CURL_HFILES, CURLX_CFILES, CURLX_HFILES, CURL_RCFILES variables 70 curl_transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") 71 include("${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") 72 73 source_group("curl source files" FILES ${CURL_CFILES} ${_curl_cfiles_gen}) 74 source_group("curl header files" FILES ${CURL_HFILES} ${_curl_hfiles_gen}) 75 source_group("curlx source files" FILES ${CURLX_CFILES}) 76 source_group("curlx header files" FILES ${CURLX_HFILES}) 77 78 if(WIN32) 79 list(APPEND CURL_CFILES ${CURL_RCFILES}) 80 endif() 81 82 set(_curlx_cfiles_lib ${CURLX_CFILES}) 83 set(_curlx_hfiles_lib ${CURLX_HFILES}) 84 if(LIB_SELECTED STREQUAL LIB_STATIC) 85 set(_curlx_cfiles_lib "") 86 set(_curlx_hfiles_lib "") 87 endif() 88 89 if(BUILD_STATIC_CURL) 90 set(CURLX_CFILES "") 91 set(CURLX_HFILES "") 92 endif() 93 94 set_property(DIRECTORY APPEND PROPERTY INCLUDE_DIRECTORIES 95 "${PROJECT_BINARY_DIR}/lib" # for "curl_config.h" 96 "${PROJECT_SOURCE_DIR}/lib" # for "curl_setup.h", curlx 97 "${CMAKE_CURRENT_SOURCE_DIR}" # for "tool_hugehelp.c" 98 ) 99 100 # Build curl executable 101 add_executable(${EXE_NAME} ${CURL_CFILES} ${CURL_HFILES} ${_curl_cfiles_gen} ${_curl_hfiles_gen} ${CURLX_CFILES} ${CURLX_HFILES}) 102 target_compile_definitions(${EXE_NAME} PRIVATE ${_curl_definitions}) 103 target_link_libraries(${EXE_NAME} ${LIB_SELECTED_FOR_EXE} ${CURL_LIBS}) 104 105 add_executable(${PROJECT_NAME}::${EXE_NAME} ALIAS ${EXE_NAME}) 106 107 add_executable(curlinfo EXCLUDE_FROM_ALL "curlinfo.c") 108 109 # special libcurltool library just for unittests 110 add_library(curltool STATIC EXCLUDE_FROM_ALL ${CURL_CFILES} ${CURL_HFILES} ${_curlx_cfiles_lib} ${_curlx_hfiles_lib}) 111 target_compile_definitions(curltool PUBLIC "CURL_STATICLIB" "UNITTESTS") 112 target_link_libraries(curltool PRIVATE ${CURL_LIBS}) 113 set_target_properties(curltool PROPERTIES C_CLANG_TIDY "") 114 115 if(CURL_HAS_LTO) 116 set_target_properties(${EXE_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE) 117 endif() 118 119 if(ENABLE_UNICODE AND MINGW AND NOT MINGW32CE) 120 if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13) 121 target_link_options(${EXE_NAME} PRIVATE "-municode") 122 else() 123 target_link_libraries(${EXE_NAME} PRIVATE "-municode") 124 endif() 125 endif() 126 127 ################################################################################ 128 129 install(TARGETS ${EXE_NAME} EXPORT ${TARGETS_EXPORT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) 130 export(TARGETS ${EXE_NAME} 131 FILE "${PROJECT_BINARY_DIR}/curl-target.cmake" 132 NAMESPACE ${PROJECT_NAME}:: 133 )