Blob Blame History Raw
diff --git a/config/Makefile b/config/Makefile
index 67e7998f55..86612a42c3 100644
--- a/config/Makefile
+++ b/config/Makefile
@@ -8,6 +8,7 @@ include $(top_builddir)/src/Makefile.global
 install: all installdirs
 	$(INSTALL_SCRIPT) $(srcdir)/install-sh '$(DESTDIR)$(pgxsdir)/config/install-sh'
 	$(INSTALL_SCRIPT) $(srcdir)/missing '$(DESTDIR)$(pgxsdir)/config/missing'
+	$(INSTALL_SCRIPT) $(srcdir)/build-exports-gnu-ld '$(DESTDIR)$(pgxsdir)/config/build-exports-gnu-ld'
 
 installdirs:
 	$(MKDIR_P) '$(DESTDIR)$(pgxsdir)/config'
diff --git a/config/build-exports-gnu-ld b/config/build-exports-gnu-ld
new file mode 100755
index 0000000000..84c48e3ade
--- /dev/null
+++ b/config/build-exports-gnu-ld
@@ -0,0 +1,41 @@
+#! /bin/sh
+
+# by default use PG_ prefix
+: "${SYMBOL_VERSION_PREFIX=PG_}"
+
+# we started symbol versioning since v10
+: "${SYMBOL_VERSION_START=9.6}"
+
+version=$SYMBOL_VERSION_START
+version_prev=
+first=:
+
+open_block ()
+{
+	$first || echo
+	first=false
+	echo "${SYMBOL_VERSION_PREFIX}$version {"
+	echo "global:"
+}
+
+close_block ()
+{
+	echo "}${version_prev:+ $SYMBOL_VERSION_PREFIX$version_prev};"
+	version_prev=$version
+	version=$1
+}
+
+open_block
+while read -r symbol _ new_version
+do
+	case $symbol in '#'*) continue ;; esac
+	if test -n "$new_version" && test "$new_version" != "$version"; then
+		close_block "$new_version"
+		open_block
+	fi
+	echo "	$symbol;"
+done
+
+echo "local:"
+echo "	*;"
+close_block
diff --git a/src/Makefile.shlib b/src/Makefile.shlib
index 373d73caef..d5bd5468cd 100644
--- a/src/Makefile.shlib
+++ b/src/Makefile.shlib
@@ -231,7 +231,7 @@ ifeq ($(PORTNAME), linux)
   ifdef soname
     LINK.shared		+= -Wl,-soname,$(soname)
   endif
-  BUILD.exports		= ( echo '{ global:'; $(AWK) '/^[^\#]/ {printf "%s;\n",$$1}' $<; echo ' local: *; };' ) >$@
+  BUILD.exports		= $(SHELL) $(top_srcdir)/config/build-exports-gnu-ld < $< > $@
   exports_file		= $(SHLIB_EXPORTS:%.txt=%.list)
   ifneq (,$(exports_file))
     LINK.shared		+= -Wl,--version-script=$(exports_file)
diff --git a/src/interfaces/libpq/exports.txt b/src/interfaces/libpq/exports.txt
index bbc1f90481..0b00a94279 100644
--- a/src/interfaces/libpq/exports.txt
+++ b/src/interfaces/libpq/exports.txt
@@ -171,11 +171,11 @@ PQsslAttributeNames       168
 PQsslAttribute            169
 PQsetErrorContextVisibility 170
 PQresultVerboseErrorMessage 171
-PQencryptPasswordConn     172
-PQresultMemorySize        173
+PQencryptPasswordConn     172      10
+PQresultMemorySize        173      12
 PQhostaddr                174
 PQgssEncInUse             175
 PQgetgssctx               176
-PQsetSSLKeyPassHook_OpenSSL         177
+PQsetSSLKeyPassHook_OpenSSL         177	13
 PQgetSSLKeyPassHook_OpenSSL         178
 PQdefaultSSLKeyPassHook_OpenSSL     179