[PATCH v3 3/5] libdl: provide FOO_SONAME variable
[email protected] Thu, 30 Jul 2026 22:22:56 +0100
| Newsgroups | gmane.comp.lib.gnulib.bugs |
|---|---|
| Message-ID | <[email protected]> |
From: Luca Boccassi <[email protected]> Detect the SONAME at build time, and provide it as a variable for programs to use, to avoid harcoding. --- m4/libdl.m4 | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/m4/libdl.m4 b/m4/libdl.m4 index b24fad832b..98664982ba 100644 --- a/m4/libdl.m4 +++ b/m4/libdl.m4 @@ -1,5 +1,5 @@ # libdl.m4 -# serial 4 +# serial 5 dnl Copyright (C) 2024-2026 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -8,6 +8,18 @@ dnl This file is offered as-is, without any warranty. dnl From Bruno Haible. +dnl Set VARIABLE to the shared library name matching REGEXP in the executable +dnl that AC_LINK_IFELSE has just linked. readelf works when cross-compiling, +dnl ldd works on more native platforms. +AC_DEFUN([gl_DLOPEN_SONAME], +[ + $1=$( + (LC_ALL=C readelf -d conftest$EXEEXT || + LC_ALL=C ldd conftest$EXEEXT) 2>/dev/null | + sed -n 's/.*\($2\).*/\1/p' + ) +]) + dnl Set LIBDL to '-ldl' if it is needed to use the functions declared dnl in <dlfcn.h> (dlopen, dlsym, etc.), or to empty otherwise. dnl Set HAVE_DLOPEN to 1 if dlopen and dlsym are available, or to 0 otherwise. @@ -21,7 +33,8 @@ AC_DEFUN([gl_LIBDL], [gl_cv_lib_dl], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( - [[#include <dlfcn.h> + [[#include <stddef.h> + #include <dlfcn.h> ]], [[void *handle = dlopen (NULL, RTLD_LAZY); return ! (handle && dlsym (handle, "main"));]])], @@ -32,7 +45,8 @@ AC_DEFUN([gl_LIBDL], LIBS="$LIBS -ldl" AC_LINK_IFELSE( [AC_LANG_PROGRAM( - [[#include <dlfcn.h> + [[#include <stddef.h> + #include <dlfcn.h> ]], [[void *handle = dlopen (NULL, RTLD_LAZY); return ! (handle && dlsym (handle, "main"));]])], -- 2.47.3