← Commit list

91720b620e

Viktor Szakats
Viktor Szakats
2025-09-20
FAILED Duration: 174s

Subject

cmake: add `CURL_CODE_COVERAGE` option

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

CMakeLists.txt+23 -0
@@ -311,6 +311,26 @@ if(CURL_CLANG_TIDY)
endif()
endif()
+option(CURL_CODE_COVERAGE "Enable code coverage build options" OFF)
+if(CURL_CODE_COVERAGE)
+ if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
+ set(CURL_COVERAGE_MACROS "NDEBUG")
+ set(CURL_COVERAGE_CFLAGS "-O0" "-g" "-fprofile-arcs")
+ if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.1)
+ list(APPEND CURL_COVERAGE_CFLAGS "--coverage")
+ else()
+ list(APPEND CURL_COVERAGE_CFLAGS "-ftest-coverage")
+ endif()
+ set(CURL_COVERAGE_LIBS "gcov")
+ elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
+ set(CURL_COVERAGE_MACROS "NDEBUG")
+ set(CURL_COVERAGE_CFLAGS "-O0" "-g" "-fprofile-instr-generate" "-fcoverage-mapping")
+ set(CURL_COVERAGE_LDFLAGS "-fprofile-instr-generate" "-fcoverage-mapping")
+ else()
+ set(CURL_CODE_COVERAGE OFF)
+ endif()
+endif()
+
# For debug libs and exes, add "-d" postfix
if(NOT DEFINED CMAKE_DEBUG_POSTFIX)
set(CMAKE_DEBUG_POSTFIX "-d")
@@ -1984,6 +2004,9 @@ if(WIN32)
endif()
list(APPEND CURL_LIBS ${CURL_NETWORK_AND_TIME_LIBS})
+if(CURL_CODE_COVERAGE)
+ list(APPEND CURL_LIBS ${CURL_COVERAGE_LIBS})
+endif()
if(CMAKE_C_COMPILER_ID STREQUAL "MSVC") # MSVC but exclude clang-cl
set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS "-MP") # Parallel compilation
docs/INSTALL-CMAKE.md+1 -0
@@ -227,6 +227,7 @@ target_link_libraries(my_target PRIVATE CURL::libcurl)
- `BUILD_TESTING`: Build tests. Default: `ON`
- `CURL_CLANG_TIDY`: Run the build through `clang-tidy`. Default: `OFF`
- `CURL_CLANG_TIDYFLAGS`: Custom options to pass to `clang-tidy`. Default: (empty)
+- `CURL_CODE_COVERAGE`: Enable code coverage build options. Default: `OFF`
- `CURL_COMPLETION_FISH`: Install fish completions. Default: `OFF`
- `CURL_COMPLETION_FISH_DIR`: Custom fish completion install directory.
- `CURL_COMPLETION_ZSH`: Install zsh completions. Default: `OFF`
lib/CMakeLists.txt+17 -0
@@ -124,6 +124,10 @@ if(SHARE_LIB_OBJECT AND CMAKE_VERSION VERSION_GREATER_EQUAL 3.12)
set_target_properties(${LIB_OBJECT} PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE)
endif()
endif()
+ if(CURL_CODE_COVERAGE)
+ set_property(TARGET ${LIB_OBJECT} APPEND PROPERTY COMPILE_DEFINITIONS ${CURL_COVERAGE_MACROS})
+ set_property(TARGET ${LIB_OBJECT} APPEND PROPERTY COMPILE_OPTIONS ${CURL_COVERAGE_CFLAGS})
+ endif()
target_include_directories(${LIB_OBJECT} INTERFACE
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
@@ -162,6 +166,10 @@ if(BUILD_STATIC_LIBS)
set_target_properties(${LIB_STATIC} PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE)
endif()
endif()
+ if(CURL_CODE_COVERAGE)
+ set_property(TARGET ${LIB_STATIC} APPEND PROPERTY COMPILE_DEFINITIONS ${CURL_COVERAGE_MACROS})
+ set_property(TARGET ${LIB_STATIC} APPEND PROPERTY COMPILE_OPTIONS ${CURL_COVERAGE_CFLAGS})
+ endif()
target_include_directories(${LIB_STATIC} INTERFACE
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
@@ -198,6 +206,15 @@ if(BUILD_SHARED_LIBS)
set_target_properties(${LIB_SHARED} PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE)
endif()
endif()
+ if(CURL_CODE_COVERAGE)
+ set_property(TARGET ${LIB_SHARED} APPEND PROPERTY COMPILE_DEFINITIONS ${CURL_COVERAGE_MACROS})
+ set_property(TARGET ${LIB_SHARED} APPEND PROPERTY COMPILE_OPTIONS ${CURL_COVERAGE_CFLAGS})
+ if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13)
+ target_link_options(${LIB_SHARED} PRIVATE ${CURL_COVERAGE_LDFLAGS})
+ else()
+ target_link_libraries(${LIB_SHARED} PRIVATE ${CURL_COVERAGE_LDFLAGS})
+ endif()
+ endif()
target_include_directories(${LIB_SHARED} INTERFACE
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
src/CMakeLists.txt+10 -0
@@ -129,6 +129,16 @@ if(ENABLE_UNICODE AND MINGW AND NOT MINGW32CE)
endif()
endif()
+if(CURL_CODE_COVERAGE)
+ set_property(TARGET ${EXE_NAME} APPEND PROPERTY COMPILE_DEFINITIONS ${CURL_COVERAGE_MACROS})
+ set_property(TARGET ${EXE_NAME} APPEND PROPERTY COMPILE_OPTIONS ${CURL_COVERAGE_CFLAGS})
+ if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13)
+ target_link_options(${EXE_NAME} PRIVATE ${CURL_COVERAGE_LDFLAGS})
+ else()
+ target_link_libraries(${EXE_NAME} PRIVATE ${CURL_COVERAGE_LDFLAGS})
+ endif()
+endif()
+
################################################################################
install(TARGETS ${EXE_NAME} EXPORT ${TARGETS_EXPORT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR})