From a16485a42ea5dabe6c327179a1678ad04d1c6b2f Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Wed, 12 Mar 2025 22:41:57 +0100 Subject: [PATCH] build: do not apply curl debug macros to `tests/server` by default It seems unnecessary and possibly unexpected to build test servers with debug-enabled features and memory tracking whenever the tested curl is built like that (which is a requirement for some tests, so curl is mostly built like that when running tests.) It also makes building servers a little bit faster with cmake for the most common cases. You can apply debug options to `tests/server` with these new options: - `./configure`: `--enable-server-debug`. - cmake: `-DENABLE_SERVER_DEBUG`. Also sync the way we pass these macros in autotools, with CMake builds. Before this patch, autotools passed them via `curl_config.h`. After this patch it passes them on the command-line, like cmake builds do. This patch also make these option no longer passed to examples and `http/client` in cmake builds, where they were no-ops anyway. Ref: #15000 Closes #16705 --- CMakeLists.txt | 7 ++++--- configure.ac | 20 ++++++++++++++++++++ docs/INSTALL-CMAKE.md | 1 + lib/CMakeLists.txt | 1 + lib/Makefile.am | 6 ++++++ m4/curl-confopts.m4 | 3 --- src/CMakeLists.txt | 1 + src/Makefile.am | 6 ++++++ tests/libtest/CMakeLists.txt | 1 + tests/libtest/Makefile.am | 6 ++++++ tests/server/CMakeLists.txt | 5 ++++- tests/server/Makefile.am | 8 ++++++++ tests/unit/CMakeLists.txt | 1 + tests/unit/Makefile.am | 6 ++++++ 14 files changed, 65 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 108f760637..5cef817cdd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -290,13 +290,14 @@ if(ENABLE_DEBUG) message(WARNING "This curl build is Debug-enabled and insecure, do not use in production.") endif() option(ENABLE_CURLDEBUG "Enable TrackMemory debug feature" ${ENABLE_DEBUG}) +option(ENABLE_SERVER_DEBUG "Apply curl debug options to test servers" OFF) +set(CURL_DEBUG_MACROS "") if(ENABLE_DEBUG) - set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS "DEBUGBUILD") + list(APPEND CURL_DEBUG_MACROS "DEBUGBUILD") endif() - if(ENABLE_CURLDEBUG) - set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS "CURLDEBUG") + list(APPEND CURL_DEBUG_MACROS "CURLDEBUG") endif() option(CURL_CLANG_TIDY "Run the build through clang-tidy" OFF) diff --git a/configure.ac b/configure.ac index c8558c15cb..68adbc998e 100644 --- a/configure.ac +++ b/configure.ac @@ -49,6 +49,7 @@ CURL_CHECK_OPTION_OPTIMIZE CURL_CHECK_OPTION_WARNINGS CURL_CHECK_OPTION_WERROR CURL_CHECK_OPTION_CURLDEBUG +AM_CONDITIONAL(CURLDEBUG, test x$want_curldebug = xyes) CURL_CHECK_OPTION_SYMBOL_HIDING CURL_CHECK_OPTION_ARES CURL_CHECK_OPTION_RT @@ -588,6 +589,25 @@ else fi AM_CONDITIONAL(BUILD_UNITTESTS, test x$want_unittests = xyes) +dnl Apply curl debug options to test servers +OPT_SERVER_DEBUG="default" +AC_ARG_ENABLE(server-debug, +AS_HELP_STRING([--enable-server-debug],[Enable debug options for test servers]) +AS_HELP_STRING([--disable-server-debug],[Disable debug options for test servers]), +OPT_SERVER_DEBUG=$enableval) +case "$OPT_SERVER_DEBUG" in + no) + dnl --disable-server-debug option used + want_server_debug="no" + ;; + *) + dnl --enable-server-debug option used or not specified + want_server_debug="no" + ;; +esac +AC_MSG_RESULT([$want_server_debug]) +AM_CONDITIONAL(ENABLE_SERVER_DEBUG, test x$want_server_debug = xyes) + dnl ********************************************************************** dnl Compilation based checks should not be done before this point. dnl ********************************************************************** diff --git a/docs/INSTALL-CMAKE.md b/docs/INSTALL-CMAKE.md index 629118fdf6..38d1fec1ba 100644 --- a/docs/INSTALL-CMAKE.md +++ b/docs/INSTALL-CMAKE.md @@ -245,6 +245,7 @@ target_link_libraries(my_target PRIVATE CURL::libcurl) - `ENABLE_CURLDEBUG`: Enable TrackMemory debug feature. Default: =`ENABLE_DEBUG` - `ENABLE_CURL_MANUAL`: Build the man page for curl and enable its `-M`/`--manual` option. Default: `ON` - `ENABLE_DEBUG`: Enable curl debug features (for developing curl itself). Default: `OFF` +- `ENABLE_SERVER_DEBUG`: Apply curl debug options to test servers. Default: `OFF` - `IMPORT_LIB_SUFFIX`: Import library suffix. Default: `_imp` for MSVC-like toolchains, otherwise empty. - `LIBCURL_OUTPUT_NAME`: Basename of the curl library. Default: `libcurl` - `PICKY_COMPILER`: Enable picky compiler options. Default: `ON` diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 32e4943d08..6fd362acae 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -24,6 +24,7 @@ set(LIB_NAME "libcurl") set(LIBCURL_OUTPUT_NAME "libcurl" CACHE STRING "Basename of the curl library") set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS "BUILDING_LIBCURL") +set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS "${CURL_DEBUG_MACROS}") configure_file("curl_config.h.cmake" "${CMAKE_CURRENT_BINARY_DIR}/curl_config.h") diff --git a/lib/Makefile.am b/lib/Makefile.am index 7edbb9303c..209e24511f 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -64,6 +64,12 @@ include Makefile.soname AM_CPPFLAGS += -DBUILDING_LIBCURL AM_LDFLAGS = AM_CFLAGS = +if DEBUGBUILD +AM_CPPFLAGS += -DDEBUGBUILD +endif +if CURLDEBUG +AM_CPPFLAGS += -DCURLDEBUG +endif # Makefile.inc provides the CSOURCES and HHEADERS defines include Makefile.inc diff --git a/m4/curl-confopts.m4 b/m4/curl-confopts.m4 index d667dd9dae..5149e8a34a 100644 --- a/m4/curl-confopts.m4 +++ b/m4/curl-confopts.m4 @@ -131,7 +131,6 @@ AS_HELP_STRING([--disable-curldebug],[Disable curl debug memory tracking]), dnl as a request to disable curldebug. if test "$want_debug" = "yes"; then AC_MSG_RESULT([(assumed) yes]) - AC_DEFINE(CURLDEBUG, 1, [to enable curl debug memory tracking]) else AC_MSG_RESULT([no]) fi @@ -148,7 +147,6 @@ AS_HELP_STRING([--disable-curldebug],[Disable curl debug memory tracking]), dnl --disable-curldebug had been given setting shell variable dnl want_curldebug to 'no'. want_curldebug="yes" - AC_DEFINE(CURLDEBUG, 1, [to enable curl debug memory tracking]) AC_MSG_RESULT([yes]) ;; esac @@ -183,7 +181,6 @@ AS_HELP_STRING([--disable-debug],[Disable debug build options]), *) dnl --enable-debug option used want_debug="yes" - AC_DEFINE(DEBUGBUILD, 1, [enable debug build options]) ;; esac AC_MSG_RESULT([$want_debug]) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d0d5980c35..289c99c0cf 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -22,6 +22,7 @@ # ########################################################################### set(EXE_NAME curl) +set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS "${CURL_DEBUG_MACROS}") set(_curl_cfiles_gen "") set(_curl_hfiles_gen "") diff --git a/src/Makefile.am b/src/Makefile.am index a97b0bcbee..59406def6a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -51,6 +51,12 @@ bin_PROGRAMS = curl if USE_CPPFLAG_CURL_STATICLIB AM_CPPFLAGS += -DCURL_STATICLIB endif +if DEBUGBUILD +AM_CPPFLAGS += -DDEBUGBUILD +endif +if CURLDEBUG +AM_CPPFLAGS += -DCURLDEBUG +endif AM_LDFLAGS = if USE_UNICODE diff --git a/tests/libtest/CMakeLists.txt b/tests/libtest/CMakeLists.txt index 60b1bd42f4..c0c428f0b2 100644 --- a/tests/libtest/CMakeLists.txt +++ b/tests/libtest/CMakeLists.txt @@ -80,6 +80,7 @@ foreach(_target IN LISTS LIBTESTPROGS) "${PROJECT_SOURCE_DIR}/src" # for "tool_binmode.h" "${PROJECT_SOURCE_DIR}/tests/libtest" # to be able to build generated tests ) + set_property(TARGET ${_target_name} APPEND PROPERTY COMPILE_DEFINITIONS "${CURL_DEBUG_MACROS}") if(NOT CURL_TEST_BUNDLES) set_property(TARGET ${_target_name} APPEND PROPERTY COMPILE_DEFINITIONS ${_upper_target}) endif() diff --git a/tests/libtest/Makefile.am b/tests/libtest/Makefile.am index cccea6723e..191064e38f 100644 --- a/tests/libtest/Makefile.am +++ b/tests/libtest/Makefile.am @@ -65,6 +65,12 @@ noinst_LTLIBRARIES = if USE_CPPFLAG_CURL_STATICLIB AM_CPPFLAGS += -DCURL_STATICLIB endif +if DEBUGBUILD +AM_CPPFLAGS += -DDEBUGBUILD +endif +if CURLDEBUG +AM_CPPFLAGS += -DCURLDEBUG +endif AM_LDFLAGS = AM_CFLAGS = diff --git a/tests/server/CMakeLists.txt b/tests/server/CMakeLists.txt index b7bd88151e..d0c1b9e0e4 100644 --- a/tests/server/CMakeLists.txt +++ b/tests/server/CMakeLists.txt @@ -26,7 +26,7 @@ curl_transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") include("${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") -if(ENABLE_CURLDEBUG) +if(ENABLE_SERVER_DEBUG AND ENABLE_CURLDEBUG) set_source_files_properties("../../lib/memdebug.c" "../../lib/curl_multibyte.c" PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON) endif() @@ -40,6 +40,9 @@ foreach(_target IN LISTS noinst_PROGRAMS) "${PROJECT_SOURCE_DIR}/src" # for "tool_binmod.h", "tool_xattr.h" ) target_link_libraries(${_target_name} ${CURL_LIBS}) + if(ENABLE_SERVER_DEBUG) + set_property(TARGET ${_target_name} APPEND PROPERTY COMPILE_DEFINITIONS "${CURL_DEBUG_MACROS}") + endif() # Test servers simply are standalone programs that do not use libcurl # library. For convenience and to ease portability of these servers, # some source code files from the libcurl subdirectory are also used diff --git a/tests/server/Makefile.am b/tests/server/Makefile.am index fb0d48d57f..b256ecfa42 100644 --- a/tests/server/Makefile.am +++ b/tests/server/Makefile.am @@ -45,6 +45,14 @@ CFLAGS += @CURL_CFLAG_EXTRAS@ if DOING_NATIVE_WINDOWS AM_CPPFLAGS += -DCURL_STATICLIB endif +if ENABLE_SERVER_DEBUG +if DEBUGBUILD +AM_CPPFLAGS += -DDEBUGBUILD +endif +if CURLDEBUG +AM_CPPFLAGS += -DCURLDEBUG +endif +endif # Makefile.inc provides neat definitions include Makefile.inc diff --git a/tests/unit/CMakeLists.txt b/tests/unit/CMakeLists.txt index 95f708942b..10eafec591 100644 --- a/tests/unit/CMakeLists.txt +++ b/tests/unit/CMakeLists.txt @@ -50,6 +50,7 @@ foreach(_target IN LISTS UNITPROGS) "${PROJECT_SOURCE_DIR}/src" "${PROJECT_SOURCE_DIR}/tests/libtest" ) + set_property(TARGET ${_target_name} APPEND PROPERTY COMPILE_DEFINITIONS "${CURL_DEBUG_MACROS}") if(CURL_TEST_BUNDLES) target_include_directories(${_target_name} PRIVATE "${PROJECT_SOURCE_DIR}/tests/unit") endif() diff --git a/tests/unit/Makefile.am b/tests/unit/Makefile.am index 8f3d3d171e..e9360447b4 100644 --- a/tests/unit/Makefile.am +++ b/tests/unit/Makefile.am @@ -51,6 +51,12 @@ LDADD = $(top_builddir)/src/libcurltool.la \ @LIBCURL_PC_LDFLAGS_PRIVATE@ @LIBCURL_PC_LIBS_PRIVATE@ AM_CPPFLAGS += -DCURL_STATICLIB -DUNITTESTS +if DEBUGBUILD +AM_CPPFLAGS += -DDEBUGBUILD +endif +if CURLDEBUG +AM_CPPFLAGS += -DCURLDEBUG +endif if BUILD_UNITTESTS if USE_TEST_BUNDLES -- 2.47.3