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