From: Viktor Szakats Date: Thu, 3 Jul 2025 00:16:11 +0000 (+0200) Subject: cmake/FindGSS: fix processing C header path options X-Git-Tag: curl-8_15_0~114 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=24c91d999ed151488dfee2110d1b36f79439f684;p=thirdparty%2Fcurl.git cmake/FindGSS: fix processing C header path options When processing `--cflags` received from `krb5-config` for `gssapi`: - fix to not break on multiple `-I` options. Before this patch only the first `-I` option was processed as a header directory, subsequent ones ended up in C flags as a raw directory, without the `-I` arg. Follow-up to 558814e16d84aa202c5ccc0c8108a9d728e77a58 - fix to not duplicate C flags. Regression from 146759716cbacfd453b9fb13d1096f0595424a6c #14430 - drop local variable `_val` by re-using `_flag`. - tidy up comments. Ref: https://github.com/curl/curl/issues/17802#issuecomment-3029455984 Closes #17805 --- diff --git a/CMake/FindGSS.cmake b/CMake/FindGSS.cmake index 11206b0f93..882e964e20 100644 --- a/CMake/FindGSS.cmake +++ b/CMake/FindGSS.cmake @@ -88,21 +88,21 @@ if(NOT _GSS_FOUND) # Not found by pkg-config. Let us take more traditional appr if(_gss_configure_script) execute_process( COMMAND ${_gss_configure_script} "--cflags" "gssapi" - OUTPUT_VARIABLE _GSS_CFLAGS + OUTPUT_VARIABLE _gss_cflags_raw RESULT_VARIABLE _gss_configure_failed OUTPUT_STRIP_TRAILING_WHITESPACE ) - message(STATUS "FindGSS krb5-config --cflags: ${_GSS_CFLAGS}") + message(STATUS "FindGSS krb5-config --cflags: ${_gss_cflags_raw}") if(NOT _gss_configure_failed) # 0 means success - # Should also work in an odd case when multiple directories are given - string(STRIP "${_GSS_CFLAGS}" _GSS_CFLAGS) - string(REGEX REPLACE " +-I" ";" _GSS_CFLAGS "${_GSS_CFLAGS}") - string(REGEX REPLACE " +-([^I][^ \\t;]*)" ";-\\1" _GSS_CFLAGS "${_GSS_CFLAGS}") + # Should also work in an odd case when multiple directories are given. + string(STRIP "${_gss_cflags_raw}" _gss_cflags_raw) + string(REGEX REPLACE " +-(I)" ";-\\1" _gss_cflags_raw "${_gss_cflags_raw}") + string(REGEX REPLACE " +-([^I][^ \\t;]*)" ";-\\1" _gss_cflags_raw "${_gss_cflags_raw}") - foreach(_flag IN LISTS _GSS_CFLAGS) + foreach(_flag IN LISTS _gss_cflags_raw) if(_flag MATCHES "^-I") - string(REGEX REPLACE "^-I" "" _val "${_flag}") - list(APPEND _GSS_INCLUDE_DIRS "${_val}") + string(REGEX REPLACE "^-I" "" _flag "${_flag}") + list(APPEND _GSS_INCLUDE_DIRS "${_flag}") else() list(APPEND _GSS_CFLAGS "${_flag}") endif() @@ -118,18 +118,18 @@ if(NOT _GSS_FOUND) # Not found by pkg-config. Let us take more traditional appr message(STATUS "FindGSS krb5-config --libs: ${_gss_lib_flags}") if(NOT _gss_configure_failed) # 0 means success - # This script gives us libraries and link directories. Blah. We have to deal with it. + # This script gives us libraries and link directories. string(STRIP "${_gss_lib_flags}" _gss_lib_flags) string(REGEX REPLACE " +-(L|l)" ";-\\1" _gss_lib_flags "${_gss_lib_flags}") string(REGEX REPLACE " +-([^Ll][^ \\t;]*)" ";-\\1" _gss_lib_flags "${_gss_lib_flags}") foreach(_flag IN LISTS _gss_lib_flags) if(_flag MATCHES "^-l") - string(REGEX REPLACE "^-l" "" _val "${_flag}") - list(APPEND _GSS_LIBRARIES "${_val}") + string(REGEX REPLACE "^-l" "" _flag "${_flag}") + list(APPEND _GSS_LIBRARIES "${_flag}") elseif(_flag MATCHES "^-L") - string(REGEX REPLACE "^-L" "" _val "${_flag}") - list(APPEND _GSS_LIBRARY_DIRS "${_val}") + string(REGEX REPLACE "^-L" "" _flag "${_flag}") + list(APPEND _GSS_LIBRARY_DIRS "${_flag}") endif() endforeach() endif()