Blob Blame Raw
The libpq package is supposed to be used for all the PostgreSQL modules
available in RHEL 8, and ABI versioning will guarantee us that modular RPMs will
depend on appropriate libpq ABI version (picked at build-time).

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..bdcfb40d48
--- /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 95b82a6dea..a7065d02a4 100644
--- a/src/Makefile.shlib
+++ b/src/Makefile.shlib
@@ -221,7 +221,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 d6a38d0df8..29bebeac7e 100644
--- a/src/interfaces/libpq/exports.txt
+++ b/src/interfaces/libpq/exports.txt
@@ -171,4 +171,4 @@ PQsslAttributeNames       168
 PQsslAttribute            169
 PQsetErrorContextVisibility 170
 PQresultVerboseErrorMessage 171
-PQencryptPasswordConn     172
+PQencryptPasswordConn     172     10
-- 
2.17.0