Commit e52e9bd5 authored by Andres Freund's avatar Andres Freund

configure: check for dlsym instead of dlopen.

When building with sanitizers the sanitizer library provides dlopen, but not
dlsym(), making configure think that -ldl isn't needed. Just checking for
dlsym() ought to suffice, hard to see dlsym() being provided without dlopen()
also being provided.

Backpatch to all branches, for the same reasons as 46ab07ffda9.
Reviewed-By: default avatarTom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/20220323173537.ll7klrglnp4gn2um@alap3.anarazel.de
Backpatch: 10-
parent 9814c708
...@@ -11700,9 +11700,12 @@ if test "$ac_res" != no; then : ...@@ -11700,9 +11700,12 @@ if test "$ac_res" != no; then :
fi fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 # gcc/clang's sanitizer helper library provides dlopen but not dlsym, thus
$as_echo_n "checking for library containing dlopen... " >&6; } # when enabling asan the dlopen check doesn't notice that -ldl is actually
if ${ac_cv_search_dlopen+:} false; then : # required. Just checking for dlsym() ought to suffice.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlsym" >&5
$as_echo_n "checking for library containing dlsym... " >&6; }
if ${ac_cv_search_dlsym+:} false; then :
$as_echo_n "(cached) " >&6 $as_echo_n "(cached) " >&6
else else
ac_func_search_save_LIBS=$LIBS ac_func_search_save_LIBS=$LIBS
...@@ -11715,11 +11718,11 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ...@@ -11715,11 +11718,11 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
#endif #endif
char dlopen (); char dlsym ();
int int
main () main ()
{ {
return dlopen (); return dlsym ();
; ;
return 0; return 0;
} }
...@@ -11732,25 +11735,25 @@ for ac_lib in '' dl; do ...@@ -11732,25 +11735,25 @@ for ac_lib in '' dl; do
LIBS="-l$ac_lib $ac_func_search_save_LIBS" LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi fi
if ac_fn_c_try_link "$LINENO"; then : if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_dlopen=$ac_res ac_cv_search_dlsym=$ac_res
fi fi
rm -f core conftest.err conftest.$ac_objext \ rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest$ac_exeext
if ${ac_cv_search_dlopen+:} false; then : if ${ac_cv_search_dlsym+:} false; then :
break break
fi fi
done done
if ${ac_cv_search_dlopen+:} false; then : if ${ac_cv_search_dlsym+:} false; then :
else else
ac_cv_search_dlopen=no ac_cv_search_dlsym=no
fi fi
rm conftest.$ac_ext rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS LIBS=$ac_func_search_save_LIBS
fi fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlsym" >&5
$as_echo "$ac_cv_search_dlopen" >&6; } $as_echo "$ac_cv_search_dlsym" >&6; }
ac_res=$ac_cv_search_dlopen ac_res=$ac_cv_search_dlsym
if test "$ac_res" != no; then : if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
......
...@@ -1200,7 +1200,10 @@ AC_SUBST(PTHREAD_LIBS) ...@@ -1200,7 +1200,10 @@ AC_SUBST(PTHREAD_LIBS)
AC_CHECK_LIB(m, main) AC_CHECK_LIB(m, main)
AC_SEARCH_LIBS(setproctitle, util) AC_SEARCH_LIBS(setproctitle, util)
AC_SEARCH_LIBS(dlopen, dl) # gcc/clang's sanitizer helper library provides dlopen but not dlsym, thus
# when enabling asan the dlopen check doesn't notice that -ldl is actually
# required. Just checking for dlsym() ought to suffice.
AC_SEARCH_LIBS(dlsym, dl)
AC_SEARCH_LIBS(socket, [socket ws2_32]) AC_SEARCH_LIBS(socket, [socket ws2_32])
AC_SEARCH_LIBS(shl_load, dld) AC_SEARCH_LIBS(shl_load, dld)
AC_SEARCH_LIBS(getopt_long, [getopt gnugetopt]) AC_SEARCH_LIBS(getopt_long, [getopt gnugetopt])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment