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 27if(ENABLE_CURL_MANUAL AND HAVE_MANUAL_TOOLS) 28 add_definitions("-DUSE_MANUAL") 29 add_custom_command( 30 OUTPUT tool_hugehelp.c 31 COMMAND ${CMAKE_COMMAND} -E echo "#include \"tool_setup.h\"" > tool_hugehelp.c 32 COMMAND ${CMAKE_COMMAND} -E echo "#ifndef HAVE_LIBZ" >> tool_hugehelp.c 33 COMMAND "${PERL_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/mkhelp.pl" < "${CURL_BINARY_DIR}/docs/cmdline-opts/curl.txt" >> tool_hugehelp.c 34 35 COMMAND ${CMAKE_COMMAND} -E echo "#else" >> tool_hugehelp.c 36 COMMAND "${PERL_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/mkhelp.pl" -c < "${CURL_BINARY_DIR}/docs/cmdline-opts/curl.txt" >> tool_hugehelp.c 37 COMMAND ${CMAKE_COMMAND} -E echo "#endif /* HAVE_LIBZ */" >> tool_hugehelp.c 38 DEPENDS 39 generate-curl.1 40 "${CURL_BINARY_DIR}/docs/cmdline-opts/curl.1" 41 "${CMAKE_CURRENT_SOURCE_DIR}/mkhelp.pl" 42 "${CMAKE_CURRENT_SOURCE_DIR}/tool_hugehelp.h" 43 VERBATIM) 44else() 45 add_custom_command( 46 OUTPUT tool_hugehelp.c 47 COMMAND ${CMAKE_COMMAND} -E echo "#include \"tool_hugehelp.h\"" > tool_hugehelp.c 48 DEPENDS 49 "${CMAKE_CURRENT_SOURCE_DIR}/tool_hugehelp.h" 50 VERBATIM) 51 52endif() 53 54transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") 55include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake) 56 57if(WIN32) 58 list(APPEND CURL_CFILES curl.rc) 59endif() 60 61# CURL_CFILES, CURLX_CFILES, CURL_HFILES, CURLTOOL_LIBCURL_CFILES 62# come from Makefile.inc 63if(BUILD_STATIC_CURL) 64 set(CURLX_CFILES ${CURLTOOL_LIBCURL_CFILES}) 65endif() 66 67if(ENABLE_CURLDEBUG) 68 # We must compile this source separately to avoid memdebug.h redefinitions 69 # applying to them. 70 set_source_files_properties(../lib/curl_multibyte.c PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON) 71endif() 72 73add_executable( 74 ${EXE_NAME} 75 ${CURL_CFILES} ${CURLX_CFILES} ${CURL_HFILES} 76 ) 77 78add_executable( 79 ${PROJECT_NAME}::${EXE_NAME} 80 ALIAS ${EXE_NAME} 81 ) 82 83add_library( 84 curltool # special libcurltool library just for unittests 85 STATIC 86 EXCLUDE_FROM_ALL 87 ${CURL_CFILES} ${CURLTOOL_LIBCURL_CFILES} ${CURL_HFILES} 88) 89target_compile_definitions(curltool PUBLIC UNITTESTS CURL_STATICLIB) 90target_link_libraries(curltool PRIVATE ${CURL_LIBS}) 91 92if(CURL_HAS_LTO) 93 set_target_properties(${EXE_NAME} PROPERTIES 94 INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE 95 INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE) 96endif() 97 98if(ENABLE_UNICODE AND MINGW) 99 target_link_libraries(${EXE_NAME} -municode) 100endif() 101 102source_group("curlX source files" FILES ${CURLX_CFILES}) 103source_group("curl source files" FILES ${CURL_CFILES}) 104source_group("curl header files" FILES ${CURL_HFILES}) 105 106include_directories( 107 ${CURL_SOURCE_DIR}/lib # To be able to reach "curl_setup_once.h" 108 ${CURL_BINARY_DIR}/lib # To be able to reach "curl_config.h" 109 ${CURL_BINARY_DIR}/include # To be able to reach "curl/curl.h" 110 # This is needed as tool_hugehelp.c is generated in the binary dir 111 ${CURL_SOURCE_DIR}/src # To be able to reach "tool_hugehelp.h" 112 ) 113 114#Build curl executable 115target_link_libraries(${EXE_NAME} ${LIB_SELECTED_FOR_EXE} ${CURL_LIBS}) 116 117################################################################################ 118 119#SET_TARGET_PROPERTIES(${EXE_NAME} ARCHIVE_OUTPUT_DIRECTORY "blah blah blah") 120#SET_TARGET_PROPERTIES(${EXE_NAME} RUNTIME_OUTPUT_DIRECTORY "blah blah blah") 121#SET_TARGET_PROPERTIES(${EXE_NAME} LIBRARY_OUTPUT_DIRECTORY "blah blah blah") 122 123#INCLUDE(ModuleInstall OPTIONAL) 124 125install(TARGETS ${EXE_NAME} EXPORT ${TARGETS_EXPORT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) 126export(TARGETS ${EXE_NAME} 127 FILE ${PROJECT_BINARY_DIR}/curl-target.cmake 128 NAMESPACE ${PROJECT_NAME}:: 129) 130