Attend to @erikj79's code review comments

This commit is contained in:
Nick Hall 2025-10-31 18:15:49 -04:00
parent bc904b0ef1
commit 3ea9793866
4 changed files with 138 additions and 76 deletions

View File

@ -29,85 +29,149 @@
AC_DEFUN_ONCE([LIB_SETUP_KRB5],
[
AC_ARG_WITH(krb5, [AS_HELP_STRING([--with-krb5],
[enable krb5 support (default=yes), or "no" to disable])])
[specify prefix directory for the krb5 package on Linux, or use "yes/no/auto" (default=auto)])])
AC_ARG_WITH(krb5-include, [AS_HELP_STRING([--with-krb5-include],
[specify directory for the krb5 include files on Linux])])
AC_ARG_WITH(krb5-lib, [AS_HELP_STRING([--with-krb5-lib],
[specify directory for the krb5 library on Linux])])
# Determine if krb5 should be disabled
KRB5_DISABLED=no
if test "x${with_krb5}" = xno; then
AC_MSG_NOTICE([krb5 explicitly disabled])
KRB5_DISABLED=yes
elif test "x$NEEDS_LIB_KRB5" = xfalse; then
if test "x${with_krb5}" != x && test "x${with_krb5}" != xno; then
AC_MSG_WARN([[krb5 not used, so --with-krb5 is ignored]])
fi
KRB5_DISABLED=yes
fi
KRB5_CFLAGS=
KRB5_LIBS=
ENABLE_LIBKRB5_LINUX=false
if test "x$KRB5_DISABLED" = xyes; then
KRB5_CFLAGS=
KRB5_LIBS=
ENABLE_LIBLINUXKRB5=false
if test "x$OPENJDK_TARGET_OS" != "xlinux" && test "x${with_krb5}" = "xyes"; then
AC_MSG_ERROR([krb5 support is only available on Linux])
else
# First try pkg-config (most modern approach)
AC_PATH_TOOL([PKG_CONFIG], [pkg-config], [no])
use_pkgconfig_for_krb5=no
KRB5_FOUND=no
if test "x$PKG_CONFIG" != "xno"; then
AC_MSG_CHECKING([if pkg-config knows about krb5])
if $PKG_CONFIG --exists krb5; then
AC_MSG_RESULT([yes])
use_pkgconfig_for_krb5=yes
else
AC_MSG_RESULT([no])
if test "x${with_krb5}" != "x" && test "x${with_krb5}" != "xyes" && test "x${with_krb5}" != "xauto"; then
# if a path was provided, use it
if test "x${with_krb5}" != "x"; then
AC_MSG_CHECKING([for krb5])
KRB5_LIBS="-L${with_krb5}/lib -lkrb5 -lcom_err"
KRB5_CFLAGS="-I${with_krb5}/include"
KRB5_FOUND=yes
AC_MSG_RESULT([${with_krb5}])
fi
fi
if test "x$use_pkgconfig_for_krb5" = "xyes"; then
# Use pkg-config to get compiler and linker flags
AC_MSG_CHECKING([for krb5 cflags via pkg-config])
KRB5_CFLAGS="`$PKG_CONFIG --cflags krb5`"
AC_MSG_RESULT([$KRB5_CFLAGS])
if test "x${with_krb5_include}" != "x"; then
AC_MSG_CHECKING([for krb5 includes])
KRB5_CFLAGS="-I${with_krb5_include}"
KRB5_FOUND=yes
AC_MSG_RESULT([${with_krb5_include}])
fi
AC_MSG_CHECKING([for krb5 libs via pkg-config])
KRB5_LIBS="`$PKG_CONFIG --libs krb5`"
AC_MSG_RESULT([$KRB5_LIBS])
if test "x${with_krb5_lib}" != "x"; then
AC_MSG_CHECKING([for krb5 libs])
KRB5_LIBS="-L${with_krb5_lib} -lkrb5 -lcom_err"
KRB5_FOUND=yes
AC_MSG_RESULT([${with_krb5_lib}])
fi
ENABLE_LIBLINUXKRB5=true
else
# Fallback: try krb5-config
AC_PATH_TOOL([KRB5CONF], [krb5-config], [no])
if test "x$KRB5_FOUND" = "xno"; then
if test "x$SYSROOT" != "x"; then
AC_MSG_CHECKING([for krb5 ($SYSROOT)])
# Cross-compilation with SYSROOT - look at known locations in SYSROOT.
KRB5_LIB_PATH=""
COM_ERR_LIB_PATH=""
if test "x$KRB5CONF" != "xno"; then
# Use krb5-config to get compiler and linker flags
AC_MSG_CHECKING([for krb5 cflags via krb5-config])
KRB5_CFLAGS="`$KRB5CONF --cflags`"
AC_MSG_RESULT([$KRB5_CFLAGS])
# Look for libkrb5/libcom_err
if test -f "$SYSROOT/usr/lib64/libkrb5.so" && test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
KRB5_LIB_PATH="$SYSROOT/usr/lib64"
elif test -f "$SYSROOT/usr/lib/libkrb5.so"; then
KRB5_LIB_PATH="$SYSROOT/usr/lib"
elif test -f "$SYSROOT/usr/lib/$OPENJDK_TARGET_CPU-$OPENJDK_TARGET_OS-$OPENJDK_TARGET_ABI/libkrb5.so"; then
KRB5_LIB_PATH="$SYSROOT/usr/lib/$OPENJDK_TARGET_CPU-$OPENJDK_TARGET_OS-$OPENJDK_TARGET_ABI"
elif test -f "$SYSROOT/usr/lib/$OPENJDK_TARGET_CPU_AUTOCONF-$OPENJDK_TARGET_OS-$OPENJDK_TARGET_ABI/libkrb5.so"; then
KRB5_LIB_PATH="$SYSROOT/usr/lib/$OPENJDK_TARGET_CPU_AUTOCONF-$OPENJDK_TARGET_OS-$OPENJDK_TARGET_ABI"
fi
AC_MSG_CHECKING([for krb5 libs via krb5-config])
KRB5_LIBS="`$KRB5CONF --libs`"
AC_MSG_RESULT([$KRB5_LIBS])
if test -f "$KRB5_LIB_PATH/libcom_err.so"; then
COM_ERR_LIB_PATH="$KRB5_LIB_PATH"
elif test -f "$SYSROOT/usr/lib64/libcom_err.so" && test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
COM_ERR_LIB_PATH="$SYSROOT/usr/lib64"
elif test -f "$SYSROOT/usr/lib/libcom_err.so"; then
COM_ERR_LIB_PATH="$SYSROOT/usr/lib"
elif test -f "$SYSROOT/usr/lib/$OPENJDK_TARGET_CPU-$OPENJDK_TARGET_OS-$OPENJDK_TARGET_ABI/libcom_err.so"; then
COM_ERR_LIB_PATH="$SYSROOT/usr/lib/$OPENJDK_TARGET_CPU-$OPENJDK_TARGET_OS-$OPENJDK_TARGET_ABI"
elif test -f "$SYSROOT/usr/lib/$OPENJDK_TARGET_CPU_AUTOCONF-$OPENJDK_TARGET_OS-$OPENJDK_TARGET_ABI/libcom_err.so"; then
COM_ERR_LIB_PATH="$SYSROOT/usr/lib/$OPENJDK_TARGET_CPU_AUTOCONF-$OPENJDK_TARGET_OS-$OPENJDK_TARGET_ABI"
fi
ENABLE_LIBLINUXKRB5=true
# Check for matching include files
KRB5_INCLUDE_PATH=""
COM_ERR_INCLUDE_PATH=""
if test -f "$SYSROOT/usr/include/krb5/krb5.h"; then
KRB5_INCLUDE_PATH="$SYSROOT/usr/include"
fi
if test -f "$SYSROOT/usr/include/com_err.h"; then
COM_ERR_INCLUDE_PATH="$SYSROOT/usr/include"
fi
# Check everything was found and merge paths
if test "x$KRB5_LIB_PATH" != "x" && test "x$COM_ERR_LIB_PATH" != "x" && \
test "x$KRB5_INCLUDE_PATH" != "x" && test "x$COM_ERR_INCLUDE_PATH" != "x"; then
KRB5_LIBS="-L$KRB5_LIB_PATH -lkrb5"
if test "x$COM_ERR_LIB_PATH" != "x" && test "x$COM_ERR_LIB_PATH" != "x$KRB5_LIB_PATH"; then
KRB5_LIBS="$KRB5_LIBS -L$COM_ERR_LIB_PATH"
fi
KRB5_LIBS="$KRB5_LIBS -lcom_err"
KRB5_CFLAGS="-I$KRB5_INCLUDE_PATH"
if test "x$COM_ERR_INCLUDE_PATH" != "x" && test "x$COM_ERR_INCLUDE_PATH" != "x$KRB5_INCLUDE_PATH"; then
KRB5_CFLAGS="$KRB5_CFLAGS -I$COM_ERR_INCLUDE_PATH"
fi
KRB5_FOUND=yes
fi
AC_MSG_RESULT([$KRB5_FOUND])
else
# Final fallback: try manual detection in system locations
AC_CHECK_HEADERS([krb5.h], [
PKG_CHECK_MODULES(KRB5, krb5, [KRB5_FOUND=yes], [KRB5_FOUND=no])
if test "x$KRB5_FOUND" = "xno"; then
UTIL_LOOKUP_PROGS(KRB5CONF, krb5-config)
if test "x$KRB5CONF" != "x"; then
AC_MSG_CHECKING([for krb5 using krb5-config])
KRB5_CFLAGS="`$KRB5CONF --cflags`"
KRB5_LIBS="`$KRB5CONF --libs`"
KRB5_FOUND=yes
AC_MSG_RESULT([$KRB5_FOUND])
fi
fi
fi
fi
# No sysconfig/pkg-config/krb5-config, so auto-detect
if test "x$KRB5_FOUND" = "xno"; then
AC_CHECK_HEADERS([krb5.h], [
AC_CHECK_HEADERS([com_err.h], [
AC_CHECK_LIB([krb5], [krb5_init_context], [
KRB5_CFLAGS=""
KRB5_LIBS="-lkrb5"
# Check for com_err header and library which are often required
AC_CHECK_HEADERS([com_err.h], [
AC_CHECK_LIB([com_err], [com_err], [
KRB5_LIBS="$KRB5_LIBS -lcom_err"
])
AC_CHECK_LIB([com_err], [com_err], [
KRB5_LIBS="$KRB5_LIBS -lcom_err"
])
ENABLE_LIBLINUXKRB5=true
], [ENABLE_LIBLINUXKRB5=false])
], [ENABLE_LIBLINUXKRB5=false])
KRB5_FOUND=yes
])
])
])
fi
if test "x$KRB5_FOUND" = "xno"; then
if test "x${with_krb5}" = "xyes"; then
AC_MSG_ERROR([krb5 was required but could not be found])
fi
KRB5_CFLAGS=
KRB5_LIBS=
ENABLE_LIBKRB5_LINUX=false
else
ENABLE_LIBKRB5_LINUX=true
fi
fi
AC_SUBST(KRB5_CFLAGS)
AC_SUBST(KRB5_LIBS)
AC_SUBST(ENABLE_LIBLINUXKRB5)
])
AC_SUBST(ENABLE_LIBKRB5_LINUX)
])

View File

@ -82,13 +82,6 @@ AC_DEFUN_ONCE([LIB_DETERMINE_DEPENDENCIES],
NEEDS_LIB_ALSA=false
fi
# Check if krb5 is needed
if test "x$OPENJDK_TARGET_OS" = xlinux -o "x$OPENJDK_TARGET_OS" = xmacosx; then
NEEDS_LIB_KRB5=true
else
NEEDS_LIB_KRB5=false
fi
# Check if ffi is needed
if HOTSPOT_CHECK_JVM_VARIANT(zero) || test "x$ENABLE_FALLBACK_LINKER" = "xtrue"; then
NEEDS_LIB_FFI=true

View File

@ -437,7 +437,7 @@ ALSA_LIBS := @ALSA_LIBS@
ALSA_CFLAGS := @ALSA_CFLAGS@
KRB5_LIBS := @KRB5_LIBS@
KRB5_CFLAGS := @KRB5_CFLAGS@
ENABLE_LIBLINUXKRB5 := @ENABLE_LIBLINUXKRB5@
ENABLE_LIBKRB5_LINUX := @ENABLE_LIBKRB5_LINUX@
LIBFFI_LIBS := @LIBFFI_LIBS@
LIBFFI_CFLAGS := @LIBFFI_CFLAGS@
ENABLE_LIBFFI_BUNDLING := @ENABLE_LIBFFI_BUNDLING@

View File

@ -110,17 +110,22 @@ ifeq ($(call isTargetOs, linux), true)
BUILD_JDK_JTREG_LIBRARIES_LDFLAGS_libCreationTimeHelper := -ldl
endif
# Kerberos native test library - only build if krb5 is available
ifeq ($(ENABLE_LIBLINUXKRB5), true)
BUILD_JDK_JTREG_LIBRARIES_LDFLAGS_libNativeCredentialCacheHelper := $(KRB5_LIBS)
BUILD_JDK_JTREG_LIBRARIES_CFLAGS_libNativeCredentialCacheHelper := $(KRB5_CFLAGS)
ifeq ($(call isTargetOs, macosx), true)
# On macOS, disable deprecation warnings for krb5 API
BUILD_JDK_JTREG_LIBRARIES_CFLAGS_libNativeCredentialCacheHelper += -Wno-deprecated-declarations
# Kerberos native test library configuration
ifeq ($(call isTargetOs, linux), true)
# Linux: only build if krb5 is enabled and working
ifeq ($(ENABLE_LIBKRB5_LINUX), true)
BUILD_JDK_JTREG_LIBRARIES_LDFLAGS_libNativeCredentialCacheHelper := $(KRB5_LIBS)
BUILD_JDK_JTREG_LIBRARIES_CFLAGS_libNativeCredentialCacheHelper := $(KRB5_CFLAGS)
else
# Exclude the Kerberos test library if krb5 is not available on Linux
BUILD_JDK_JTREG_EXCLUDE += libNativeCredentialCacheHelper.c
endif
else ifeq ($(call isTargetOs, macosx), true)
# macOS: build with system krb5 and disable deprecation warnings
BUILD_JDK_JTREG_LIBRARIES_LDFLAGS_libNativeCredentialCacheHelper := -lkrb5 -lcom_err
BUILD_JDK_JTREG_LIBRARIES_CFLAGS_libNativeCredentialCacheHelper := -Wno-deprecated-declarations
else
# Exclude the Kerberos test library if krb5 is not available
# Other platforms: exclude the library
BUILD_JDK_JTREG_EXCLUDE += libNativeCredentialCacheHelper.c
endif