mirror of
https://github.com/postgres/postgres.git
synced 2025-04-27 22:56:53 +03:00
Remove configure probe for dlopen, and refactor.
dlopen() is in SUSv2 and all targeted Unix systems have it. We still need replacement functions for Windows, but we don't need a configure probe for that. Since it's no longer needed by other operating systems, rename dlopen.c to win32dlopen.c and move the declarations into win32_port.h. Likewise, the macros RTLD_NOW and RTLD_GLOBAL now only need to be defined on Windows, since all targeted Unix systems have 'em. Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Reviewed-by: Andres Freund <andres@anarazel.de> Discussion: https://postgr.es/m/CA+hUKGJ3LHeP9w5Fgzdr4G8AnEtJ=z=p6hGDEm4qYGEUX5B6fQ@mail.gmail.com
This commit is contained in:
parent
87e22f675f
commit
ca1e85513e
43
configure
vendored
43
configure
vendored
@ -16618,30 +16618,6 @@ cat >>confdefs.h <<_ACEOF
|
|||||||
_ACEOF
|
_ACEOF
|
||||||
|
|
||||||
|
|
||||||
ac_fn_c_check_decl "$LINENO" "RTLD_GLOBAL" "ac_cv_have_decl_RTLD_GLOBAL" "#include <dlfcn.h>
|
|
||||||
"
|
|
||||||
if test "x$ac_cv_have_decl_RTLD_GLOBAL" = xyes; then :
|
|
||||||
ac_have_decl=1
|
|
||||||
else
|
|
||||||
ac_have_decl=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
|
||||||
#define HAVE_DECL_RTLD_GLOBAL $ac_have_decl
|
|
||||||
_ACEOF
|
|
||||||
ac_fn_c_check_decl "$LINENO" "RTLD_NOW" "ac_cv_have_decl_RTLD_NOW" "#include <dlfcn.h>
|
|
||||||
"
|
|
||||||
if test "x$ac_cv_have_decl_RTLD_NOW" = xyes; then :
|
|
||||||
ac_have_decl=1
|
|
||||||
else
|
|
||||||
ac_have_decl=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
|
||||||
#define HAVE_DECL_RTLD_NOW $ac_have_decl
|
|
||||||
_ACEOF
|
|
||||||
|
|
||||||
|
|
||||||
ac_fn_c_check_type "$LINENO" "struct sockaddr_in6" "ac_cv_type_struct_sockaddr_in6" "$ac_includes_default
|
ac_fn_c_check_type "$LINENO" "struct sockaddr_in6" "ac_cv_type_struct_sockaddr_in6" "$ac_includes_default
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
"
|
"
|
||||||
@ -16687,19 +16663,6 @@ $as_echo "#define HAVE_PS_STRINGS 1" >>confdefs.h
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
|
|
||||||
if test "x$ac_cv_func_dlopen" = xyes; then :
|
|
||||||
$as_echo "#define HAVE_DLOPEN 1" >>confdefs.h
|
|
||||||
|
|
||||||
else
|
|
||||||
case " $LIBOBJS " in
|
|
||||||
*" dlopen.$ac_objext "* ) ;;
|
|
||||||
*) LIBOBJS="$LIBOBJS dlopen.$ac_objext"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
ac_fn_c_check_func "$LINENO" "explicit_bzero" "ac_cv_func_explicit_bzero"
|
ac_fn_c_check_func "$LINENO" "explicit_bzero" "ac_cv_func_explicit_bzero"
|
||||||
if test "x$ac_cv_func_explicit_bzero" = xyes; then :
|
if test "x$ac_cv_func_explicit_bzero" = xyes; then :
|
||||||
$as_echo "#define HAVE_EXPLICIT_BZERO 1" >>confdefs.h
|
$as_echo "#define HAVE_EXPLICIT_BZERO 1" >>confdefs.h
|
||||||
@ -17078,6 +17041,12 @@ esac
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
case " $LIBOBJS " in
|
||||||
|
*" win32dlopen.$ac_objext "* ) ;;
|
||||||
|
*) LIBOBJS="$LIBOBJS win32dlopen.$ac_objext"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
case " $LIBOBJS " in
|
case " $LIBOBJS " in
|
||||||
*" win32env.$ac_objext "* ) ;;
|
*" win32env.$ac_objext "* ) ;;
|
||||||
*) LIBOBJS="$LIBOBJS win32env.$ac_objext"
|
*) LIBOBJS="$LIBOBJS win32env.$ac_objext"
|
||||||
|
@ -1858,8 +1858,6 @@ AC_CHECK_DECLS([pwritev], [], [AC_LIBOBJ(pwritev)], [#include <sys/uio.h>])
|
|||||||
# This is probably only present on macOS, but may as well check always
|
# This is probably only present on macOS, but may as well check always
|
||||||
AC_CHECK_DECLS(F_FULLFSYNC, [], [], [#include <fcntl.h>])
|
AC_CHECK_DECLS(F_FULLFSYNC, [], [], [#include <fcntl.h>])
|
||||||
|
|
||||||
AC_CHECK_DECLS([RTLD_GLOBAL, RTLD_NOW], [], [], [#include <dlfcn.h>])
|
|
||||||
|
|
||||||
AC_CHECK_TYPE([struct sockaddr_in6],
|
AC_CHECK_TYPE([struct sockaddr_in6],
|
||||||
[AC_DEFINE(HAVE_IPV6, 1, [Define to 1 if you have support for IPv6.])],
|
[AC_DEFINE(HAVE_IPV6, 1, [Define to 1 if you have support for IPv6.])],
|
||||||
[],
|
[],
|
||||||
@ -1880,7 +1878,6 @@ if test "$pgac_cv_var_PS_STRINGS" = yes ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
AC_REPLACE_FUNCS(m4_normalize([
|
AC_REPLACE_FUNCS(m4_normalize([
|
||||||
dlopen
|
|
||||||
explicit_bzero
|
explicit_bzero
|
||||||
getopt
|
getopt
|
||||||
getpeereid
|
getpeereid
|
||||||
@ -1962,6 +1959,7 @@ if test "$PORTNAME" = "win32"; then
|
|||||||
AC_LIBOBJ(kill)
|
AC_LIBOBJ(kill)
|
||||||
AC_LIBOBJ(open)
|
AC_LIBOBJ(open)
|
||||||
AC_LIBOBJ(system)
|
AC_LIBOBJ(system)
|
||||||
|
AC_LIBOBJ(win32dlopen)
|
||||||
AC_LIBOBJ(win32env)
|
AC_LIBOBJ(win32env)
|
||||||
AC_LIBOBJ(win32error)
|
AC_LIBOBJ(win32error)
|
||||||
AC_LIBOBJ(win32ntdll)
|
AC_LIBOBJ(win32ntdll)
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#ifdef HAVE_DLOPEN
|
#ifndef WIN32
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -28,7 +28,7 @@
|
|||||||
#undef bool
|
#undef bool
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif /* HAVE_DLOPEN */
|
#endif /* !WIN32 */
|
||||||
|
|
||||||
#include "fmgr.h"
|
#include "fmgr.h"
|
||||||
#include "lib/stringinfo.h"
|
#include "lib/stringinfo.h"
|
||||||
|
@ -141,14 +141,6 @@
|
|||||||
don't. */
|
don't. */
|
||||||
#undef HAVE_DECL_PWRITEV
|
#undef HAVE_DECL_PWRITEV
|
||||||
|
|
||||||
/* Define to 1 if you have the declaration of `RTLD_GLOBAL', and to 0 if you
|
|
||||||
don't. */
|
|
||||||
#undef HAVE_DECL_RTLD_GLOBAL
|
|
||||||
|
|
||||||
/* Define to 1 if you have the declaration of `RTLD_NOW', and to 0 if you
|
|
||||||
don't. */
|
|
||||||
#undef HAVE_DECL_RTLD_NOW
|
|
||||||
|
|
||||||
/* Define to 1 if you have the declaration of `strlcat', and to 0 if you
|
/* Define to 1 if you have the declaration of `strlcat', and to 0 if you
|
||||||
don't. */
|
don't. */
|
||||||
#undef HAVE_DECL_STRLCAT
|
#undef HAVE_DECL_STRLCAT
|
||||||
@ -169,9 +161,6 @@
|
|||||||
don't. */
|
don't. */
|
||||||
#undef HAVE_DECL_STRTOULL
|
#undef HAVE_DECL_STRTOULL
|
||||||
|
|
||||||
/* Define to 1 if you have the `dlopen' function. */
|
|
||||||
#undef HAVE_DLOPEN
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <editline/history.h> header file. */
|
/* Define to 1 if you have the <editline/history.h> header file. */
|
||||||
#undef HAVE_EDITLINE_HISTORY_H
|
#undef HAVE_EDITLINE_HISTORY_H
|
||||||
|
|
||||||
|
@ -455,29 +455,6 @@ extern int setenv(const char *name, const char *value, int overwrite);
|
|||||||
extern int unsetenv(const char *name);
|
extern int unsetenv(const char *name);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef HAVE_DLOPEN
|
|
||||||
extern void *dlopen(const char *file, int mode);
|
|
||||||
extern void *dlsym(void *handle, const char *symbol);
|
|
||||||
extern int dlclose(void *handle);
|
|
||||||
extern char *dlerror(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* In some older systems, the RTLD_NOW flag isn't defined and the mode
|
|
||||||
* argument to dlopen must always be 1.
|
|
||||||
*/
|
|
||||||
#if !HAVE_DECL_RTLD_NOW
|
|
||||||
#define RTLD_NOW 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The RTLD_GLOBAL flag is wanted if available, but it doesn't exist
|
|
||||||
* everywhere. If it doesn't exist, set it to 0 so it has no effect.
|
|
||||||
*/
|
|
||||||
#if !HAVE_DECL_RTLD_GLOBAL
|
|
||||||
#define RTLD_GLOBAL 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* thread.c */
|
/* thread.c */
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
extern bool pg_get_user_name(uid_t user_id, char *buffer, size_t buflen);
|
extern bool pg_get_user_name(uid_t user_id, char *buffer, size_t buflen);
|
||||||
|
@ -503,6 +503,15 @@ extern int pgwin32_ReserveSharedMemoryRegion(HANDLE);
|
|||||||
/* in backend/port/win32/crashdump.c */
|
/* in backend/port/win32/crashdump.c */
|
||||||
extern void pgwin32_install_crashdump_handler(void);
|
extern void pgwin32_install_crashdump_handler(void);
|
||||||
|
|
||||||
|
/* in port/win32dlopen.c */
|
||||||
|
extern void *dlopen(const char *file, int mode);
|
||||||
|
extern void *dlsym(void *handle, const char *symbol);
|
||||||
|
extern int dlclose(void *handle);
|
||||||
|
extern char *dlerror(void);
|
||||||
|
|
||||||
|
#define RTLD_NOW 1
|
||||||
|
#define RTLD_GLOBAL 0
|
||||||
|
|
||||||
/* in port/win32error.c */
|
/* in port/win32error.c */
|
||||||
extern void _dosmaperr(unsigned long);
|
extern void _dosmaperr(unsigned long);
|
||||||
|
|
||||||
|
@ -1,22 +1,20 @@
|
|||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
*
|
*
|
||||||
* dlopen.c
|
* win32dlopen.c
|
||||||
* dynamic loader for platforms without dlopen()
|
* dynamic loader for Windows
|
||||||
*
|
*
|
||||||
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* src/port/dlopen.c
|
* src/port/win32dlopen.c
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "c.h"
|
#include "c.h"
|
||||||
|
|
||||||
#if defined(WIN32)
|
|
||||||
|
|
||||||
static char last_dyn_error[512];
|
static char last_dyn_error[512];
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -93,5 +91,3 @@ dlopen(const char *file, int mode)
|
|||||||
last_dyn_error[0] = 0;
|
last_dyn_error[0] = 0;
|
||||||
return (void *) h;
|
return (void *) h;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
@ -103,11 +103,12 @@ sub mkvcbuild
|
|||||||
getpeereid.c getrusage.c inet_aton.c
|
getpeereid.c getrusage.c inet_aton.c
|
||||||
getaddrinfo.c gettimeofday.c inet_net_ntop.c kill.c open.c
|
getaddrinfo.c gettimeofday.c inet_net_ntop.c kill.c open.c
|
||||||
snprintf.c strlcat.c strlcpy.c dirmod.c noblock.c path.c
|
snprintf.c strlcat.c strlcpy.c dirmod.c noblock.c path.c
|
||||||
dirent.c dlopen.c getopt.c getopt_long.c link.c
|
dirent.c getopt.c getopt_long.c link.c
|
||||||
pread.c preadv.c pwrite.c pwritev.c pg_bitutils.c
|
pread.c preadv.c pwrite.c pwritev.c pg_bitutils.c
|
||||||
pg_strong_random.c pgcheckdir.c pgmkdirp.c pgsleep.c pgstrcasecmp.c
|
pg_strong_random.c pgcheckdir.c pgmkdirp.c pgsleep.c pgstrcasecmp.c
|
||||||
pqsignal.c mkdtemp.c qsort.c qsort_arg.c bsearch_arg.c quotes.c system.c
|
pqsignal.c mkdtemp.c qsort.c qsort_arg.c bsearch_arg.c quotes.c system.c
|
||||||
strerror.c tar.c
|
strerror.c tar.c
|
||||||
|
win32dlopen.c
|
||||||
win32env.c win32error.c win32ntdll.c
|
win32env.c win32error.c win32ntdll.c
|
||||||
win32security.c win32setlocale.c win32stat.c);
|
win32security.c win32setlocale.c win32stat.c);
|
||||||
|
|
||||||
|
@ -244,14 +244,11 @@ sub GenerateFiles
|
|||||||
HAVE_DECL_POSIX_FADVISE => 0,
|
HAVE_DECL_POSIX_FADVISE => 0,
|
||||||
HAVE_DECL_PREADV => 0,
|
HAVE_DECL_PREADV => 0,
|
||||||
HAVE_DECL_PWRITEV => 0,
|
HAVE_DECL_PWRITEV => 0,
|
||||||
HAVE_DECL_RTLD_GLOBAL => 0,
|
|
||||||
HAVE_DECL_RTLD_NOW => 0,
|
|
||||||
HAVE_DECL_STRLCAT => 0,
|
HAVE_DECL_STRLCAT => 0,
|
||||||
HAVE_DECL_STRLCPY => 0,
|
HAVE_DECL_STRLCPY => 0,
|
||||||
HAVE_DECL_STRNLEN => 1,
|
HAVE_DECL_STRNLEN => 1,
|
||||||
HAVE_DECL_STRTOLL => 1,
|
HAVE_DECL_STRTOLL => 1,
|
||||||
HAVE_DECL_STRTOULL => 1,
|
HAVE_DECL_STRTOULL => 1,
|
||||||
HAVE_DLOPEN => undef,
|
|
||||||
HAVE_EDITLINE_HISTORY_H => undef,
|
HAVE_EDITLINE_HISTORY_H => undef,
|
||||||
HAVE_EDITLINE_READLINE_H => undef,
|
HAVE_EDITLINE_READLINE_H => undef,
|
||||||
HAVE_EXECINFO_H => undef,
|
HAVE_EXECINFO_H => undef,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user