From: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
To: pgsql-hackers <pgsql-hackers@postgresql.org>
Subject: Unify DLSUFFIX on Darwin
Date: Wed, 22 Jun 2022 13:12:21 +0200
Message-ID: <bcc45f78-e3c3-8fb3-7c42-5371b48b5266@enterprisedb.com> (raw)
macOS has traditionally used extension .dylib for shared libraries (used
at build time) and .so for dynamically loaded modules (used by
dlopen()). This complicates the build system a bit. Also, Meson uses
.dylib for both, so it would be worth unifying this in order to be able
to get equal build output.
There doesn't appear to be any reason to use any particular extension
for dlopened modules, since dlopen() will accept anything and PostgreSQL
is well-factored to be able to deal with any extension. Other software
packages that I have handy appear to be about 50/50 split on which
extension they use for their plugins. So it seems possible to change
this safely.
Attachments:0001-Unify-DLSUFFIX-on-Darwin.patch (text/plain, 4.0K) download
From 291defe5f2aed76c608de3894d131eafa3eaf761 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Wed, 22 Jun 2022 13:04:23 +0200
Subject: [PATCH] Unify DLSUFFIX on Darwin
macOS has traditionally used extension .dylib for shared libraries
(used at build time) and .so for dynamically loaded modules (used by
dlopen()). This complicates the build system a bit. Also, Meson uses
.dylib for both, so it would be worth unifying this in order to be
able to get equal build output.
There doesn't appear to be any reason to use any particular extension
for dlopened modules, since dlopen() will accept anything and
PostgreSQL is well-factored to be able to deal with any extension.
Other software packages that I have handy appear to be about 50/50
split on which extension they use for their plugins. So it seems
possible to change this safely.
---
config/python.m4 | 15 +++++----------
configure | 15 +++++----------
src/Makefile.shlib | 2 --
src/makefiles/Makefile.darwin | 2 +-
src/template/darwin | 2 ++
5 files changed, 13 insertions(+), 23 deletions(-)
diff --git a/config/python.m4 b/config/python.m4index e500873ff3..b295ad3d3a 100644--- a/config/python.m4+++ b/config/python.m4@@ -120,16 +120,11 @@ else
found_shlib=0
for d in "${python_libdir}" "${python_configdir}" /usr/lib64 /usr/lib
do
- # Note: DLSUFFIX is for loadable modules, not shared- # libraries, so cannot be used here portably. Just- # check all known possibilities.- for e in .so .dll .dylib .sl; do- if test -e "$d/lib${ldlibrary}$e"; then- python_libdir="$d"- found_shlib=1- break 2- fi- done+ if test -e "$d/lib${ldlibrary}${DLSUFFIX}"; then+ python_libdir="$d"+ found_shlib=1+ break 2+ fi
done
# Some platforms (OpenBSD) require us to accept a bare versioned shlib
# (".so.n.n") as well. However, check this only after failing to find
diff --git a/configure b/configureindex 7dec6b7bf9..f8306a2999 100755--- a/configure+++ b/configure@@ -10570,16 +10570,11 @@ else
found_shlib=0
for d in "${python_libdir}" "${python_configdir}" /usr/lib64 /usr/lib
do
- # Note: DLSUFFIX is for loadable modules, not shared- # libraries, so cannot be used here portably. Just- # check all known possibilities.- for e in .so .dll .dylib .sl; do- if test -e "$d/lib${ldlibrary}$e"; then- python_libdir="$d"- found_shlib=1- break 2- fi- done+ if test -e "$d/lib${ldlibrary}${DLSUFFIX}"; then+ python_libdir="$d"+ found_shlib=1+ break 2+ fi
done
# Some platforms (OpenBSD) require us to accept a bare versioned shlib
# (".so.n.n") as well. However, check this only after failing to find
diff --git a/src/Makefile.shlib b/src/Makefile.shlibindex 551023c6fb..d0ec325bf1 100644--- a/src/Makefile.shlib+++ b/src/Makefile.shlib@@ -118,7 +118,6 @@ endif
ifeq ($(PORTNAME), darwin)
ifdef soname
# linkable library
- DLSUFFIX = .dylib
ifneq ($(SO_MAJOR_VERSION), 0)
version_link = -compatibility_version $(SO_MAJOR_VERSION) -current_version $(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
endif
@@ -127,7 +126,6 @@ ifeq ($(PORTNAME), darwin)
shlib_major = lib$(NAME).$(SO_MAJOR_VERSION)$(DLSUFFIX)
else
# loadable module
- DLSUFFIX = .so
LINK.shared = $(COMPILER) -bundle -multiply_defined suppress
endif
BUILD.exports = $(AWK) '/^[^\#]/ {printf "_%s\n",$$1}' $< >$@
diff --git a/src/makefiles/Makefile.darwin b/src/makefiles/Makefile.darwinindex 4fc81c1584..45f253a5b4 100644--- a/src/makefiles/Makefile.darwin+++ b/src/makefiles/Makefile.darwin@@ -10,5 +10,5 @@ else
endif
# Rule for building a shared library from a single .o file
-%.so: %.o+%$(DLSUFFIX): %.o
$(CC) $(CFLAGS) $< $(LDFLAGS) $(LDFLAGS_SL) -bundle $(BE_DLLLIBS) -o $@
diff --git a/src/template/darwin b/src/template/darwinindex e14d53b601..fd30e19b6a 100644--- a/src/template/darwin+++ b/src/template/darwin@@ -55,3 +55,5 @@ case $host_os in
USE_SYSV_SEMAPHORES=1
;;
esac
++DLSUFFIX=".dylib"--
2.36.1
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-hackers@postgresql.org
Cc: peter.eisentraut@enterprisedb.com
Subject: Re: Unify DLSUFFIX on Darwin
In-Reply-To: <bcc45f78-e3c3-8fb3-7c42-5371b48b5266@enterprisedb.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox