From 852f5d34da772de65d057897278aa1e75dd060d1 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Wed, 12 Aug 2026 10:52:42 +0200 Subject: [PATCH] build: strip empty properties from `libcurl.pc` To keep it tidy and to support properties in the template that only appear in the generated `libcurl.pc` when filled. E.g. `Required.private` may remain empty after #22548. Also: - GHA/windows: dump `libcurl.pc` to log in every job - tidy up a pre-existing regex in the updated command. 2c22d3069aef507d6a6876a6d20616fe5e50c6a3 #22544 Ref: b9254da6175360102176303ecf9dbb5519b0ffcf #22548 Cherry-picked from #22543 Closes #22553 --- .github/workflows/windows.yml | 30 ++++++++++++++++++++++++++++++ CMakeLists.txt | 3 ++- configure.ac | 4 ++-- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index b7fc7c4c9f..660479cdef 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -156,6 +156,12 @@ jobs: echo '::group::raw'; cat bld/lib/curl_config.h || true; echo '::endgroup::' grep -F '#define' bld/lib/curl_config.h | sort || true + - name: 'libcurl.pc, curl-config' + run: | + for f in libcurl.pc curl-config; do + echo "::group::${f}"; grep -v '^#' bld/"${f}" || true; echo '::endgroup::' + done + - name: 'build' timeout-minutes: 10 run: | @@ -419,6 +425,12 @@ jobs: grep -F '#define' bld/lib/curl_config.h | sort || true cat bld/cmake_install.cmake || true + - name: 'libcurl.pc, curl-config, cmake_install.cmake' + run: | + for f in libcurl.pc curl-config cmake_install.cmake; do + echo "::group::${f}"; grep -v '^#' bld/"${f}" || true; echo '::endgroup::' + done + - name: 'build' timeout-minutes: 10 run: | @@ -703,6 +715,12 @@ jobs: echo '::group::raw'; cat bld/lib/curl_config.h || true; echo '::endgroup::' grep -F '#define' bld/lib/curl_config.h | sort || true + - name: 'libcurl.pc, curl-config' + run: | + for f in libcurl.pc curl-config; do + echo "::group::${f}"; grep -v '^#' bld/"${f}" || true; echo '::endgroup::' + done + - name: 'build' timeout-minutes: 5 run: | @@ -844,6 +862,12 @@ jobs: echo '::group::raw'; cat bld/lib/curl_config.h || true; echo '::endgroup::' grep -F '#define' bld/lib/curl_config.h | sort || true + - name: 'libcurl.pc, curl-config' + run: | + for f in libcurl.pc curl-config; do + echo "::group::${f}"; grep -v '^#' bld/"${f}" || true; echo '::endgroup::' + done + - name: 'build' run: | if [ "${MATRIX_BUILD}" = 'cmake' ]; then @@ -1108,6 +1132,12 @@ jobs: timeout-minutes: 5 run: cmake --build bld --config "${MATRIX_TYPE}" --parallel 5 + - name: 'libcurl.pc, curl-config' + run: | + for f in libcurl.pc curl-config; do + echo "::group::${f}"; grep -v '^#' bld/"${f}" || true; echo '::endgroup::' + done + - name: 'curl -V' timeout-minutes: 1 run: | diff --git a/CMakeLists.txt b/CMakeLists.txt index f85f44fe83..5805391bc3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2363,10 +2363,11 @@ if(NOT CURL_DISABLE_INSTALL) configure_file( "${PROJECT_SOURCE_DIR}/libcurl.pc.in" "${PROJECT_BINARY_DIR}/libcurl.pc" @ONLY) - # Strip trailing spaces, and duplicate spaces after colon + # Strip trailing spaces, duplicate spaces after colon, empty properties file(READ "${PROJECT_BINARY_DIR}/libcurl.pc" _libcurl_pc) string(REGEX REPLACE " +\n" "\n" _libcurl_pc "${_libcurl_pc}") string(REGEX REPLACE "\nLibs\.private: +" "\nLibs.private: " _libcurl_pc "${_libcurl_pc}") + string(REGEX REPLACE "\n([A-Za-z.]+:\n)+" "\n" _libcurl_pc "${_libcurl_pc}") file(WRITE "${PROJECT_BINARY_DIR}/libcurl.pc" "${_libcurl_pc}") install(FILES "${PROJECT_BINARY_DIR}/libcurl.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") diff --git a/configure.ac b/configure.ac index c06f0c52a5..b0394ddecb 100644 --- a/configure.ac +++ b/configure.ac @@ -5560,8 +5560,8 @@ AC_CONFIG_FILES([\ ]) AC_CONFIG_FILES([curl-config], [chmod +x curl-config]) AC_CONFIG_FILES([libcurl.pc], [ - dnl strip trailing spaces, and duplicate spaces after colon - "$SED" -e 's/ *$//g' -e 's/^Libs\.private: */Libs.private: /g' libcurl.pc > libcurl.pc.tmp && mv libcurl.pc.tmp libcurl.pc + dnl strip trailing spaces, duplicate spaces after colon, empty properties + "$SED" -e 's/ *$//g' -e 's/^Libs\.private: */Libs.private: /' -e '/^@<:@A-Za-z.@:>@*:$/d' libcurl.pc > libcurl.pc.tmp && mv libcurl.pc.tmp libcurl.pc ], [SED="$SED"]) AC_OUTPUT