v3-0001-Remove-configure-probe-for-dlopen.patch
text/x-patch
Filename: v3-0001-Remove-configure-probe-for-dlopen.patch
Type: text/x-patch
Part: 0
Patch
Format: format-patch
Series: patch v3-0001
Subject: Remove configure probe for dlopen.
| File | + | − |
|---|---|---|
| configure | 6 | 37 |
| configure.ac | 1 | 3 |
| src/backend/utils/fmgr/dfmgr.c | 2 | 2 |
| src/include/pg_config.h.in | 0 | 11 |
| src/include/port.h | 0 | 23 |
| src/include/port/win32_port.h | 9 | 0 |
| src/port/win32dlopen.c | 3 | 7 |
| src/tools/msvc/Mkvcbuild.pm | 2 | 1 |
| src/tools/msvc/Solution.pm | 0 | 3 |
From 925247600c56fafc9d4a60f25e006ee04ebc1d30 Mon Sep 17 00:00:00 2001
From: Thomas Munro <thomas.munro@gmail.com>
Date: Tue, 19 Jul 2022 18:07:51 +1200
Subject: [PATCH v3 01/13] Remove configure probe for dlopen.
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 defined
on Windows, since all targeted Unix systems have 'em.
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/CA+hUKGJ3LHeP9w5Fgzdr4G8AnEtJ=z=p6hGDEm4qYGEUX5B6fQ@mail.gmail.com
---
configure | 43 ++++------------------------
configure.ac | 4 +--
src/backend/utils/fmgr/dfmgr.c | 4 +--
src/include/pg_config.h.in | 11 -------
src/include/port.h | 23 ---------------
src/include/port/win32_port.h | 9 ++++++
src/port/{dlopen.c => win32dlopen.c} | 10 ++-----
src/tools/msvc/Mkvcbuild.pm | 3 +-
src/tools/msvc/Solution.pm | 3 --
9 files changed, 23 insertions(+), 87 deletions(-)
rename src/port/{dlopen.c => win32dlopen.c} (93%)
diff --git a/configure b/configure
index c5bc382395..2583a04a87 100755
--- a/configure
+++ b/configure
@@ -16618,30 +16618,6 @@ cat >>confdefs.h <<_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
#include <netinet/in.h>
"
@@ -16687,19 +16663,6 @@ $as_echo "#define HAVE_PS_STRINGS 1" >>confdefs.h
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"
if test "x$ac_cv_func_explicit_bzero" = xyes; then :
$as_echo "#define HAVE_EXPLICIT_BZERO 1" >>confdefs.h
@@ -17078,6 +17041,12 @@ esac
;;
esac
+ case " $LIBOBJS " in
+ *" win32dlopen.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS win32dlopen.$ac_objext"
+ ;;
+esac
+
case " $LIBOBJS " in
*" win32env.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS win32env.$ac_objext"
diff --git a/configure.ac b/configure.ac
index 61d0dd5d58..84bdaeb46c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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
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_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
AC_REPLACE_FUNCS(m4_normalize([
- dlopen
explicit_bzero
getopt
getpeereid
@@ -1962,6 +1959,7 @@ if test "$PORTNAME" = "win32"; then
AC_LIBOBJ(kill)
AC_LIBOBJ(open)
AC_LIBOBJ(system)
+ AC_LIBOBJ(win32dlopen)
AC_LIBOBJ(win32env)
AC_LIBOBJ(win32error)
AC_LIBOBJ(win32ntdll)
diff --git a/src/backend/utils/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c
index 7f9ea97280..08fd7e1264 100644
--- a/src/backend/utils/fmgr/dfmgr.c
+++ b/src/backend/utils/fmgr/dfmgr.c
@@ -16,7 +16,7 @@
#include <sys/stat.h>
-#ifdef HAVE_DLOPEN
+#ifndef WIN32
#include <dlfcn.h>
/*
@@ -28,7 +28,7 @@
#undef bool
#endif
#endif
-#endif /* HAVE_DLOPEN */
+#endif /* !WIN32 */
#include "fmgr.h"
#include "lib/stringinfo.h"
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index f9618e1986..ab812bca89 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -141,14 +141,6 @@
don't. */
#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
don't. */
#undef HAVE_DECL_STRLCAT
@@ -169,9 +161,6 @@
don't. */
#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. */
#undef HAVE_EDITLINE_HISTORY_H
diff --git a/src/include/port.h b/src/include/port.h
index d39b04141f..323df8f9ed 100644
--- a/src/include/port.h
+++ b/src/include/port.h
@@ -455,29 +455,6 @@ extern int setenv(const char *name, const char *value, int overwrite);
extern int unsetenv(const char *name);
#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 */
#ifndef WIN32
extern bool pg_get_user_name(uid_t user_id, char *buffer, size_t buflen);
diff --git a/src/include/port/win32_port.h b/src/include/port/win32_port.h
index 4de5bf3bf6..5cc35600a0 100644
--- a/src/include/port/win32_port.h
+++ b/src/include/port/win32_port.h
@@ -503,6 +503,15 @@ extern int pgwin32_ReserveSharedMemoryRegion(HANDLE);
/* in backend/port/win32/crashdump.c */
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 */
extern void _dosmaperr(unsigned long);
diff --git a/src/port/dlopen.c b/src/port/win32dlopen.c
similarity index 93%
rename from src/port/dlopen.c
rename to src/port/win32dlopen.c
index 6ff9f4bf64..2657537c29 100644
--- a/src/port/dlopen.c
+++ b/src/port/win32dlopen.c
@@ -1,22 +1,20 @@
/*-------------------------------------------------------------------------
*
- * dlopen.c
- * dynamic loader for platforms without dlopen()
+ * win32dlopen.c
+ * dynamic loader for Windows
*
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
*
* IDENTIFICATION
- * src/port/dlopen.c
+ * src/port/win32dlopen.c
*
*-------------------------------------------------------------------------
*/
#include "c.h"
-#if defined(WIN32)
-
static char last_dyn_error[512];
static void
@@ -93,5 +91,3 @@ dlopen(const char *file, int mode)
last_dyn_error[0] = 0;
return (void *) h;
}
-
-#endif
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index c935f776e5..266f98e2ed 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -103,11 +103,12 @@ sub mkvcbuild
getpeereid.c getrusage.c inet_aton.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
- 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
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
strerror.c tar.c
+ win32dlopen.c
win32env.c win32error.c win32ntdll.c
win32security.c win32setlocale.c win32stat.c);
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index b09872e018..a7a5c31a5b 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -244,14 +244,11 @@ sub GenerateFiles
HAVE_DECL_POSIX_FADVISE => 0,
HAVE_DECL_PREADV => 0,
HAVE_DECL_PWRITEV => 0,
- HAVE_DECL_RTLD_GLOBAL => 0,
- HAVE_DECL_RTLD_NOW => 0,
HAVE_DECL_STRLCAT => 0,
HAVE_DECL_STRLCPY => 0,
HAVE_DECL_STRNLEN => 1,
HAVE_DECL_STRTOLL => 1,
HAVE_DECL_STRTOULL => 1,
- HAVE_DLOPEN => undef,
HAVE_EDITLINE_HISTORY_H => undef,
HAVE_EDITLINE_READLINE_H => undef,
HAVE_EXECINFO_H => undef,
--
2.37.1