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########################################################################### 24set(EXE_NAME curl) 25add_definitions("-DBUILDING_CURL") 26 27set(_curl_cfiles_gen "") 28set(_curl_hfiles_gen "") 29set(_curl_definitions "") 30 31if(ENABLE_CURL_MANUAL AND HAVE_MANUAL_TOOLS) 32 list(APPEND _curl_definitions "USE_MANUAL") 33 add_custom_command( 34 OUTPUT "tool_hugehelp.c" 35 COMMAND ${CMAKE_COMMAND} -E echo "#include \"tool_setup.h\"" > "tool_hugehelp.c" 36 COMMAND ${CMAKE_COMMAND} -E echo "#ifndef HAVE_LIBZ" >> "tool_hugehelp.c" 37 COMMAND "${PERL_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/mkhelp.pl" < "${CURL_ASCIIPAGE}" >> "tool_hugehelp.c" 38 COMMAND ${CMAKE_COMMAND} -E echo "#else" >> "tool_hugehelp.c" 39 COMMAND "${PERL_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/mkhelp.pl" -c < "${CURL_ASCIIPAGE}" >> "tool_hugehelp.c" 40 COMMAND ${CMAKE_COMMAND} -E echo "#endif /* HAVE_LIBZ */" >> "tool_hugehelp.c" 41 DEPENDS 42 generate-curl.1 43 "${CMAKE_CURRENT_SOURCE_DIR}/mkhelp.pl" 44 "${CMAKE_CURRENT_SOURCE_DIR}/tool_hugehelp.h" 45 "${CURL_ASCIIPAGE}" 46 VERBATIM) 47 list(APPEND _curl_cfiles_gen "tool_hugehelp.c") 48 list(APPEND _curl_hfiles_gen "tool_hugehelp.h") 49endif() 50 51if(CURL_CA_EMBED_SET) 52 if(PERL_FOUND) 53 list(APPEND _curl_definitions "CURL_CA_EMBED") 54 add_custom_command( 55 OUTPUT "tool_ca_embed.c" 56 COMMAND "${PERL_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/mk-file-embed.pl" --var curl_ca_embed 57 < "${CURL_CA_EMBED}" > "tool_ca_embed.c" 58 DEPENDS 59 "${CMAKE_CURRENT_SOURCE_DIR}/mk-file-embed.pl" 60 "${CURL_CA_EMBED}" 61 VERBATIM) 62 list(APPEND _curl_cfiles_gen "tool_ca_embed.c") 63 else() 64 message(WARNING "Perl not found. Will not embed the CA bundle.") 65 endif() 66endif() 67 68# Get 'CURL_CFILES', 'CURLX_CFILES', 'CURL_HFILES', 'CURLTOOL_LIBCURL_CFILES' variables 69curl_transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") 70include("${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") 71 72if(WIN32) 73 list(APPEND CURL_CFILES "curl.rc") 74endif() 75 76if(BUILD_STATIC_CURL) 77 set(CURLX_CFILES ${CURLTOOL_LIBCURL_CFILES}) 78endif() 79 80if(ENABLE_CURLDEBUG) 81 # We must compile this source separately to avoid memdebug.h redefinitions 82 # applying to them. 83 set_source_files_properties("../lib/curl_multibyte.c" PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON) 84endif() 85 86add_executable( 87 ${EXE_NAME} 88 ${CURL_CFILES} ${_curl_cfiles_gen} ${CURLX_CFILES} ${CURL_HFILES} ${_curl_hfiles_gen} 89) 90target_compile_definitions(${EXE_NAME} PRIVATE ${_curl_definitions}) 91 92add_executable( 93 ${PROJECT_NAME}::${EXE_NAME} 94 ALIAS ${EXE_NAME} 95) 96 97add_library( 98 curltool # special libcurltool library just for unittests 99 STATIC 100 EXCLUDE_FROM_ALL 101 ${CURL_CFILES} ${CURLTOOL_LIBCURL_CFILES} ${CURL_HFILES} 102) 103target_compile_definitions(curltool PUBLIC "UNITTESTS" "CURL_STATICLIB") 104target_link_libraries(curltool PRIVATE ${CURL_LIBS}) 105 106if(CURL_HAS_LTO) 107 set_target_properties(${EXE_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE) 108endif() 109 110if(ENABLE_UNICODE AND MINGW) 111 target_link_libraries(${EXE_NAME} "-municode") 112endif() 113 114source_group("curlX source files" FILES ${CURLX_CFILES}) 115source_group("curl source files" FILES ${CURL_CFILES} ${_curl_cfiles_gen}) 116source_group("curl header files" FILES ${CURL_HFILES} ${_curl_hfiles_gen}) 117 118include_directories( 119 "${PROJECT_BINARY_DIR}/lib" # for "curl_config.h" 120 "${PROJECT_SOURCE_DIR}/lib" # for "curl_setup.h" 121 # This is needed as tool_hugehelp.c is generated in the binary dir 122 "${PROJECT_SOURCE_DIR}/src" # for "tool_hugehelp.h" 123) 124 125# Build curl executable 126target_link_libraries(${EXE_NAME} ${LIB_SELECTED_FOR_EXE} ${CURL_LIBS}) 127 128################################################################################ 129 130install(TARGETS ${EXE_NAME} EXPORT ${TARGETS_EXPORT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) 131export(TARGETS ${EXE_NAME} 132 FILE "${PROJECT_BINARY_DIR}/curl-target.cmake" 133 NAMESPACE ${PROJECT_NAME}:: 134) 135