build: tidy up and improve versioned-symbols options

- autotools: add support for custom prefix.
  Usage: `--enable-versioned-symbols=MYPREFIX_`
  Catching up with cmake.

- add default versioned prefix for Rustls builds.

- delete `HIDDEN` entry from version script `lib/libcurl.vers.in`.
  It referred to symbol names that never existed in libcurl.

- cmake: use `lib/libcurl.vers.in` as a template instead of generating
  it from scratch. Adapt `./configure` accordingly, and add comments
  to keep hard-wired soname in sync with `lib/Makefile.soname`.

- autotools: delete Schannel and Secure Transport version prefixes.
  Windows and macOS don't support the versioned symbols option.

Follow-up to 7b14449790 #14378
Closes #14818
This commit is contained in:
Viktor Szakats 2024-09-07 00:32:01 +02:00
parent 30ab1133c4
commit 7100c5bc9b
No known key found for this signature in database
GPG Key ID: B5ABD165E2AEF201
4 changed files with 26 additions and 29 deletions

View File

@ -2546,7 +2546,11 @@ AC_ARG_ENABLE(versioned-symbols,
AS_HELP_STRING([--enable-versioned-symbols], [Enable versioned symbols in shared library]) AS_HELP_STRING([--enable-versioned-symbols], [Enable versioned symbols in shared library])
AS_HELP_STRING([--disable-versioned-symbols], [Disable versioned symbols in shared library]), AS_HELP_STRING([--disable-versioned-symbols], [Disable versioned symbols in shared library]),
[ case "$enableval" in [ case "$enableval" in
yes) AC_MSG_RESULT(yes) no)
AC_MSG_RESULT(no)
;;
*)
AC_MSG_RESULT(yes)
AC_MSG_CHECKING([if libraries can be versioned]) AC_MSG_CHECKING([if libraries can be versioned])
GLD=`$LD --help < /dev/null 2>/dev/null | grep version-script` GLD=`$LD --help < /dev/null 2>/dev/null | grep version-script`
if test -z "$GLD"; then if test -z "$GLD"; then
@ -2554,7 +2558,9 @@ AS_HELP_STRING([--disable-versioned-symbols], [Disable versioned symbols in shar
AC_MSG_WARN([You need an ld version supporting the --version-script option]) AC_MSG_WARN([You need an ld version supporting the --version-script option])
else else
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
if test "x$CURL_WITH_MULTI_SSL" = "x1"; then if test "x$enableval" != "xyes"; then
versioned_symbols_flavour="$enableval"
elif test "x$CURL_WITH_MULTI_SSL" = "x1"; then
versioned_symbols_flavour="MULTISSL_" versioned_symbols_flavour="MULTISSL_"
elif test "x$OPENSSL_ENABLED" = "x1"; then elif test "x$OPENSSL_ENABLED" = "x1"; then
versioned_symbols_flavour="OPENSSL_" versioned_symbols_flavour="OPENSSL_"
@ -2562,14 +2568,12 @@ AS_HELP_STRING([--disable-versioned-symbols], [Disable versioned symbols in shar
versioned_symbols_flavour="MBEDTLS_" versioned_symbols_flavour="MBEDTLS_"
elif test "x$BEARSSL_ENABLED" = "x1"; then elif test "x$BEARSSL_ENABLED" = "x1"; then
versioned_symbols_flavour="BEARSSL_" versioned_symbols_flavour="BEARSSL_"
elif test "x$GNUTLS_ENABLED" = "x1"; then
versioned_symbols_flavour="GNUTLS_"
elif test "x$WOLFSSL_ENABLED" = "x1"; then elif test "x$WOLFSSL_ENABLED" = "x1"; then
versioned_symbols_flavour="WOLFSSL_" versioned_symbols_flavour="WOLFSSL_"
elif test "x$SCHANNEL_ENABLED" = "x1"; then elif test "x$GNUTLS_ENABLED" = "x1"; then
versioned_symbols_flavour="SCHANNEL_" versioned_symbols_flavour="GNUTLS_"
elif test "x$SECURETRANSPORT_ENABLED" = "x1"; then elif test "x$RUSTLS_ENABLED" = "x1"; then
versioned_symbols_flavour="SECURE_TRANSPORT_" versioned_symbols_flavour="RUSTLS_"
else else
versioned_symbols_flavour="" versioned_symbols_flavour=""
fi fi
@ -2577,17 +2581,14 @@ AS_HELP_STRING([--disable-versioned-symbols], [Disable versioned symbols in shar
fi fi
;; ;;
*)
AC_MSG_RESULT(no)
;;
esac esac
], [ ], [
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
] ]
) )
AC_SUBST([CURL_LT_SHLIB_VERSIONED_FLAVOUR], AC_SUBST([CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX], ["$versioned_symbols_flavour"])
["$versioned_symbols_flavour"]) AC_SUBST([CURL_LIBCURL_VERSIONED_SYMBOLS_SONAME], ["4"]) dnl Keep in sync with VERSIONCHANGE - VERSIONDEL in lib/Makefile.soname
AM_CONDITIONAL([CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS], AM_CONDITIONAL([CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS],
[test "x$versioned_symbols" = 'xyes']) [test "x$versioned_symbols" = 'xyes'])

View File

@ -238,15 +238,18 @@ if(BUILD_SHARED_LIBS)
set(CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX "WOLFSSL_") set(CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX "WOLFSSL_")
elseif(CURL_USE_GNUTLS) elseif(CURL_USE_GNUTLS)
set(CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX "GNUTLS_") set(CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX "GNUTLS_")
elseif(CURL_USE_RUSTLS)
set(CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX "RUSTLS_")
endif() endif()
endif() endif()
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/libcurl.vers" " # Generate version script for the linker, for versioned symbols.
HIDDEN {}; # Consumed variables:
CURL_${CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX}${_cmakesoname} # CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX
{ # CURL_LIBCURL_VERSIONED_SYMBOLS_SONAME
global: curl_*; set(CURL_LIBCURL_VERSIONED_SYMBOLS_SONAME ${_cmakesoname})
local: *; configure_file(
};") "${CMAKE_CURRENT_SOURCE_DIR}/libcurl.vers.in"
"${CMAKE_CURRENT_BINARY_DIR}/libcurl.vers" @ONLY)
include(CheckCSourceCompiles) include(CheckCSourceCompiles)
set(CMAKE_REQUIRED_LINK_OPTIONS "-Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/libcurl.vers") set(CMAKE_REQUIRED_LINK_OPTIONS "-Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/libcurl.vers")
check_c_source_compiles("int main(void) { return 0; }" HAVE_VERSIONED_SYMBOLS) check_c_source_compiles("int main(void) { return 0; }" HAVE_VERSIONED_SYMBOLS)

View File

@ -22,6 +22,7 @@
# #
########################################################################### ###########################################################################
# Keep in sync with CURL_LIBCURL_VERSIONED_SYMBOLS_SONAME in configure.ac
VERSIONCHANGE=12 VERSIONCHANGE=12
VERSIONADD=0 VERSIONADD=0
VERSIONDEL=8 VERSIONDEL=8

View File

@ -1,12 +1,4 @@
HIDDEN CURL_@CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX@@CURL_LIBCURL_VERSIONED_SYMBOLS_SONAME@
{
local:
__*;
_rest*;
_save*;
};
CURL_@CURL_LT_SHLIB_VERSIONED_FLAVOUR@4
{ {
global: curl_*; global: curl_*;
local: *; local: *;