commit: 254013c1a16b6c9e994752bc7aaae53ba8dbe876 Author: Matt Jolly <kangie <AT> gentoo <DOT> org> AuthorDate: Thu Mar 12 09:43:48 2026 +0000 Commit: Matt Jolly <kangie <AT> gentoo <DOT> org> CommitDate: Thu Mar 12 09:50:17 2026 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=254013c1
net-misc/curl: fix build with USE=kerberos Upstream dropped support for app-crypt/heimdal in the build system only. We can keep it for now and see if upstream are willing to restore since there's definitely ongoing work happening. Bug: https://bugs.gentoo.org/966046 Signed-off-by: Matt Jolly <kangie <AT> gentoo.org> net-misc/curl/curl-8.18.0.ebuild | 1 + net-misc/curl/curl-8.19.0.ebuild | 1 + .../curl/files/curl-8.18.0-restore-heimdal.patch | 191 +++++++++++++++++++++ 3 files changed, 193 insertions(+) diff --git a/net-misc/curl/curl-8.18.0.ebuild b/net-misc/curl/curl-8.18.0.ebuild index ebfe40a02bfe..1080a5384d4b 100644 --- a/net-misc/curl/curl-8.18.0.ebuild +++ b/net-misc/curl/curl-8.18.0.ebuild @@ -178,6 +178,7 @@ QA_CONFIG_IMPL_DECL_SKIP=( PATCHES=( "${FILESDIR}/${PN}-prefix-6.patch" "${FILESDIR}/${PN}-respect-cflags-3.patch" + "${FILESDIR}/${P}-restore-heimdal.patch" ) src_prepare() { diff --git a/net-misc/curl/curl-8.19.0.ebuild b/net-misc/curl/curl-8.19.0.ebuild index 20096ddf96cc..253079ac6bf5 100644 --- a/net-misc/curl/curl-8.19.0.ebuild +++ b/net-misc/curl/curl-8.19.0.ebuild @@ -166,6 +166,7 @@ QA_CONFIG_IMPL_DECL_SKIP=( PATCHES=( "${FILESDIR}/${PN}-prefix-6.patch" "${FILESDIR}/${PN}-respect-cflags-3.patch" + "${FILESDIR}/${PN}-8.18.0-restore-heimdal.patch" ) src_prepare() { diff --git a/net-misc/curl/files/curl-8.18.0-restore-heimdal.patch b/net-misc/curl/files/curl-8.18.0-restore-heimdal.patch new file mode 100644 index 000000000000..509049644cde --- /dev/null +++ b/net-misc/curl/files/curl-8.18.0-restore-heimdal.patch @@ -0,0 +1,191 @@ +diff -Naurp curl-8.16.0/CMake/FindGSS.cmake curl-8.16.0_orig/CMake/FindGSS.cmake +--- curl-8.16.0/CMake/FindGSS.cmake 2025-11-11 10:04:08.786293188 +0000 ++++ curl-8.16.0/CMake/FindGSS.cmake 2025-11-11 09:54:12.223957480 +0000 +@@ -37,6 +37,7 @@ + + set(_gnu_modname "gss") + set(_mit_modname "mit-krb5-gssapi") ++set(_heimdal_modname "heimdal-gssapi") + + include(CheckIncludeFile) + include(CheckIncludeFiles) +@@ -51,7 +52,7 @@ set(_gss_LIBRARY_DIRS "") + if(NOT GSS_ROOT_DIR AND NOT "$ENV{GSS_ROOT_DIR}") + if(CURL_USE_PKGCONFIG) + find_package(PkgConfig QUIET) +- pkg_search_module(_gss ${_gnu_modname} ${_mit_modname}) ++ pkg_search_module(_gss ${_gnu_modname} ${_mit_modname} ${_heimdal_modname}) + list(APPEND _gss_root_hints "${_gss_PREFIX}") + set(_gss_version "${_gss_VERSION}") + endif() +@@ -139,8 +140,14 @@ if(NOT _gss_FOUND) # Not found by pkg-c + OUTPUT_STRIP_TRAILING_WHITESPACE) + + # Older versions may not have the "--vendor" parameter. In this case we just do not care. +- if(NOT _gss_configure_failed AND NOT _gss_vendor MATCHES "Heimdal|heimdal") +- set(_gss_flavour "MIT") # assume a default, should not really matter ++ if(_gss_configure_failed) ++ set(_gss_flavour "Heimdal") # most probably, should not really matter ++ else() ++ if(_gss_vendor MATCHES "Heimdal|heimdal") ++ set(_gss_flavour "Heimdal") ++ else() ++ set(_gss_flavour "MIT") ++ endif() + endif() + + else() # Either there is no config script or we are on a platform that does not provide one (Windows?) +@@ -149,30 +156,46 @@ if(NOT _gss_FOUND) # Not found by pkg-c + cmake_push_check_state() + list(APPEND CMAKE_REQUIRED_INCLUDES "${_gss_INCLUDE_DIRS}") + check_include_files("gssapi/gssapi_generic.h;gssapi/gssapi_krb5.h" _gss_have_mit_headers) +- cmake_pop_check_state() + + if(_gss_have_mit_headers) + set(_gss_flavour "MIT") + if(WIN32) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + list(APPEND _gss_libdir_suffixes "lib/AMD64") + set(_gss_libname "gssapi64") + else() + list(APPEND _gss_libdir_suffixes "lib/i386") + set(_gss_libname "gssapi32") + endif() + else() + list(APPEND _gss_libdir_suffixes "lib" "lib64") # those suffixes are not checked for HINTS + set(_gss_libname "gssapi_krb5") + endif() ++ else() ++ # Prevent compiling the header - just check if we can include it ++ list(APPEND CMAKE_REQUIRED_DEFINITIONS "-D__ROKEN_H__") ++ check_include_file("roken.h" _gss_have_roken_h) ++ ++ check_include_file("heimdal/roken.h" _gss_have_heimdal_roken_h) ++ if(_gss_have_roken_h OR _gss_have_heimdal_roken_h) ++ set(_gss_flavour "Heimdal") ++ endif() + endif() ++ cmake_pop_check_state() + else() +- find_path(_gss_INCLUDE_DIRS NAMES "gss.h" HINTS ${_gss_root_hints} PATH_SUFFIXES "include") + + if(_gss_INCLUDE_DIRS) +- set(_gss_flavour "GNU") +- set(_gss_pc_requires ${_gnu_modname}) +- set(_gss_libname "gss") ++ set(_gss_flavour "Heimdal") ++ set(_gss_pc_requires ${_heimdal_modname}) ++ set(_gss_libname "libgssapi") ++ else() ++ find_path(_gss_INCLUDE_DIRS NAMES "gss.h" HINTS ${_gss_root_hints} PATH_SUFFIXES "include") ++ ++ if(_gss_INCLUDE_DIRS) ++ set(_gss_flavour "GNU") ++ set(_gss_pc_requires ${_gnu_modname}) ++ set(_gss_libname "gss") ++ endif() + endif() + endif() + +@@ -189,9 +210,6 @@ if(NOT _gss_FOUND) # Not found by pkg-c + find_library(_gss_LIBRARIES NAMES ${_gss_libname} HINTS ${_gss_libdir_hints} PATH_SUFFIXES ${_gss_libdir_suffixes}) + endif() + endif() +- if(NOT _gss_flavour) +- message(FATAL_ERROR "GNU or MIT GSS is required") +- endif() + else() + # _gss_MODULE_NAME set since CMake 3.16. + # _pkg_check_modules_pkg_name is undocumented and used as a fallback for CMake <3.16 versions. +@@ -202,15 +226,33 @@ else() + set(_gss_flavour "MIT") + set(_gss_pc_requires ${_mit_modname}) + else() +- message(FATAL_ERROR "GNU or MIT GSS is required") ++ set(_gss_flavour "Heimdal") ++ set(_gss_pc_requires ${_heimdal_modname}) + endif() + message(STATUS "Found GSS/${_gss_flavour} (via pkg-config): ${_gss_INCLUDE_DIRS} (found version \"${_gss_version}\")") + endif() + + set(GSS_VERSION ${_gss_version}) + +-if(NOT GSS_VERSION) +- if(_gss_flavour STREQUAL "MIT") ++if(_gss_flavour) ++ if(NOT GSS_VERSION AND _gss_flavour STREQUAL "Heimdal") ++ if(CMAKE_SIZEOF_VOID_P EQUAL 8) ++ set(_heimdal_manifest_file "Heimdal.Application.amd64.manifest") ++ else() ++ set(_heimdal_manifest_file "Heimdal.Application.x86.manifest") ++ endif() ++ ++ if(EXISTS "${_gss_INCLUDE_DIRS}/${_heimdal_manifest_file}") ++ file(STRINGS "${_gss_INCLUDE_DIRS}/${_heimdal_manifest_file}" _heimdal_version_str ++ REGEX "^.*version=\"[0-9]\\.[^\"]+\".*$") ++ ++ string(REGEX MATCH "[0-9]\\.[^\"]+" GSS_VERSION "${_heimdal_version_str}") ++ endif() ++ ++ if(NOT GSS_VERSION) ++ set(GSS_VERSION "Heimdal Unknown") ++ endif() ++ elseif(NOT GSS_VERSION AND _gss_flavour STREQUAL "MIT") + if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.24) + cmake_host_system_information(RESULT _mit_version QUERY WINDOWS_REGISTRY + "HKLM/SOFTWARE/MIT/Kerberos/SDK/CurrentVersion" VALUE "VersionString") +@@ -223,7 +339,7 @@ if(NOT GSS_VERSION) + else() + set(GSS_VERSION "MIT Unknown") + endif() +- else() # GNU ++ elseif(NOT GSS_VERSION AND _gss_flavour STREQUAL "GNU") + if(_gss_INCLUDE_DIRS AND EXISTS "${_gss_INCLUDE_DIRS}/gss.h") + set(_version_regex "#[\t ]*define[\t ]+GSS_VERSION[\t ]+\"([^\"]*)\"") + file(STRINGS "${_gss_INCLUDE_DIRS}/gss.h" _version_str REGEX "${_version_regex}") +diff -Naurp curl-8.16.0/configure.ac curl-8.16.0_orig/configure.ac +--- curl-8.16.0/configure.ac 2025-11-11 08:59:46.795915379 +0000 ++++ curl-8.16.0/configure.ac 2025-11-11 08:57:58.852575571 +0000 +@@ -1860,14 +1860,21 @@ if test x"$want_gss" = xyes; then + gnu_gss=yes + ], + [ +- dnl not found, check for MIT ++ dnl not found, check Heimdal or MIT + AC_CHECK_HEADERS( + [gssapi/gssapi.h gssapi/gssapi_generic.h gssapi/gssapi_krb5.h], + [], + [not_mit=1]) + if test "$not_mit" = "1"; then +- dnl MIT not found +- AC_MSG_ERROR([MIT or GNU GSS library required, but not found]) ++ dnl MIT not found, check for Heimdal ++ AC_CHECK_HEADER(gssapi.h, ++ [], ++ [ ++ dnl no header found, disabling GSS ++ want_gss=no ++ AC_MSG_WARN(disabling GSS-API support since no header files were found) ++ ] ++ ) + fi + ] + ) +@@ -1877,7 +1884,7 @@ fi + if test "$want_gss" = "yes"; then + AC_DEFINE(HAVE_GSSAPI, 1, [if you have GSS-API libraries]) + HAVE_GSSAPI=1 +- curl_gss_msg="enabled (MIT Kerberos)" ++ curl_gss_msg="enabled (MIT Kerberos/Heimdal)" + link_pkgconfig='' + + if test -n "$gnu_gss"; then +@@ -1956,6 +1963,8 @@ if test x"$want_gss" = xyes; then + if test -n "$link_pkgconfig"; then + if test -n "$gnu_gss"; then + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE gss" ++ elif test "x$not_mit" = "x1"; then ++ LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE heimdal-gssapi" + else + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE mit-krb5-gssapi" + fi
