Build with a private libpq
Related: #1967918 Also discussed in Fedora bug #1905584 Some extensions require to build with libpq as well, but this might be a problem for the case server uses a private libpq, because extension would pull in another libpq.so into the same process. By adding new sub-packages private-libs and private-devel we can make sure only a single copy of libpq is used by server, including the extensions. Add dependency to libpq-devel to server-devel pkg if external libpq is used in order to let extensions not to care about what libpq the server uses.
This commit is contained in:
parent
242f9fe320
commit
4663183844
12
postgresql-no-libecpg.patch
Normal file
12
postgresql-no-libecpg.patch
Normal file
@ -0,0 +1,12 @@
|
||||
diff -up postgresql-13.1/src/interfaces/Makefile.patch10 postgresql-13.1/src/interfaces/Makefile
|
||||
--- postgresql-13.1/src/interfaces/Makefile.patch10 2021-02-02 21:33:23.235292305 +0100
|
||||
+++ postgresql-13.1/src/interfaces/Makefile 2021-02-02 21:33:30.281365440 +0100
|
||||
@@ -12,7 +12,7 @@ subdir = src/interfaces
|
||||
top_builddir = ../..
|
||||
include $(top_builddir)/src/Makefile.global
|
||||
|
||||
-SUBDIRS = libpq ecpg
|
||||
+SUBDIRS = libpq
|
||||
|
||||
$(recurse)
|
||||
|
@ -35,6 +35,7 @@
|
||||
# Disable temporarily to be able to build the package
|
||||
# tracked in RHBZ#1940964
|
||||
%{!?llvmjit:%global llvmjit 0}
|
||||
%{!?external_libpq:%global external_libpq 0}
|
||||
%{!?upgrade:%global upgrade 1}
|
||||
%{!?plpython3:%global plpython3 1}
|
||||
%{!?pltcl:%global pltcl 1}
|
||||
@ -109,6 +110,7 @@ Patch2: postgresql-logging.patch
|
||||
Patch5: postgresql-var-run-socket.patch
|
||||
Patch8: postgresql-external-libpq.patch
|
||||
Patch9: postgresql-server-pg_config.patch
|
||||
Patch12: postgresql-no-libecpg.patch
|
||||
|
||||
BuildRequires: make
|
||||
BuildRequires: gcc
|
||||
@ -121,7 +123,9 @@ BuildRequires: perl-generators
|
||||
BuildRequires: readline-devel zlib-devel
|
||||
BuildRequires: systemd systemd-devel util-linux
|
||||
BuildRequires: multilib-rpm-config
|
||||
%if %external_libpq
|
||||
BuildRequires: libpq-devel >= %version
|
||||
%endif
|
||||
BuildRequires: docbook-style-xsl
|
||||
|
||||
# postgresql-setup build requires
|
||||
@ -188,6 +192,35 @@ over a network connection. The PostgreSQL server can be found in the
|
||||
postgresql-server sub-package.
|
||||
|
||||
|
||||
%if ! %external_libpq
|
||||
%package private-libs
|
||||
Summary: The shared libraries required only for this build of PostgreSQL server
|
||||
Group: Applications/Databases
|
||||
# for /sbin/ldconfig
|
||||
Requires(post): glibc
|
||||
Requires(postun): glibc
|
||||
|
||||
%description private-libs
|
||||
The postgresql-private-libs package provides the shared libraries for this
|
||||
build of PostgreSQL server and plugins build with this version of server.
|
||||
For shared libraries used by client packages that need to connect to a
|
||||
PostgreSQL server, install libpq package instead.
|
||||
|
||||
|
||||
%package private-devel
|
||||
Summary: PostgreSQL development header files for this build of PostgreSQL server
|
||||
Group: Development/Libraries
|
||||
Requires: %{name}-private-libs%{?_isa} = %precise_version
|
||||
|
||||
%description private-devel
|
||||
The postgresql-private-devel package contains the header files and libraries
|
||||
needed to compile C or C++ applications which will directly interact
|
||||
with a PostgreSQL database management server.
|
||||
You need to install this package if you want to develop applications which
|
||||
will interact with a PostgreSQL server.
|
||||
%endif
|
||||
|
||||
|
||||
%package server
|
||||
Summary: The programs needed to create and run a PostgreSQL server
|
||||
Requires: %{name}%{?_isa} = %precise_version
|
||||
@ -243,6 +276,14 @@ Requires: krb5-devel
|
||||
%if %llvmjit
|
||||
Requires: clang-devel llvm-devel
|
||||
%endif
|
||||
%if %external_libpq
|
||||
# Some extensions require libpq
|
||||
# Do not make them care about whether server uses private or system-wide
|
||||
# libpq, simply let the server pull the correct one
|
||||
Requires: libpq-devel
|
||||
%else
|
||||
Requires: %{name}-private-devel
|
||||
%endif
|
||||
|
||||
%description server-devel
|
||||
The postgresql-server-devel package contains the header files and configuration
|
||||
@ -375,7 +416,11 @@ goal of accelerating analytics queries.
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch5 -p1
|
||||
%if %external_libpq
|
||||
%patch8 -p1
|
||||
%else
|
||||
%patch12 -p1
|
||||
%endif
|
||||
%patch9 -p1
|
||||
|
||||
# We used to run autoconf here, but there's no longer any real need to,
|
||||
@ -383,9 +428,20 @@ goal of accelerating analytics queries.
|
||||
|
||||
cp -p %{SOURCE1} .
|
||||
|
||||
%if ! %external_libpq
|
||||
%global private_soname private%{majorversion}
|
||||
find . -type f -name Makefile -exec sed -i -e "s/SO_MAJOR_VERSION=\s\?\([0-9]\+\)/SO_MAJOR_VERSION= %{private_soname}-\1/" {} \;
|
||||
%endif
|
||||
|
||||
%if %upgrade
|
||||
tar xfj %{SOURCE3}
|
||||
|
||||
# libpq from this upgrade-only build is dropped and the libpq from the main
|
||||
# version is used. Use the same major hack therefore.
|
||||
%if ! %external_libpq
|
||||
find . -type f -name Makefile -exec sed -i -e "s/SO_MAJOR_VERSION=\s\?\([0-9]\+\)/SO_MAJOR_VERSION= %{private_soname}-\1/" {} \;
|
||||
%endif
|
||||
|
||||
# apply once SOURCE3 is extracted
|
||||
%endif
|
||||
|
||||
@ -616,10 +672,15 @@ make DESTDIR=$RPM_BUILD_ROOT install-world
|
||||
|
||||
# We ship pg_config through libpq-devel
|
||||
mv $RPM_BUILD_ROOT/%_mandir/man1/pg_{,server_}config.1
|
||||
%if %external_libpq
|
||||
rm $RPM_BUILD_ROOT/%_includedir/pg_config*.h
|
||||
rm $RPM_BUILD_ROOT/%_includedir/libpq/libpq-fs.h
|
||||
rm $RPM_BUILD_ROOT/%_includedir/postgres_ext.h
|
||||
rm -r $RPM_BUILD_ROOT/%_includedir/pgsql/internal/
|
||||
%else
|
||||
ln -s pg_server_config $RPM_BUILD_ROOT/%_bindir/pg_config
|
||||
rm $RPM_BUILD_ROOT/%{_libdir}/libpq.a
|
||||
%endif
|
||||
|
||||
# make sure these directories exist even if we suppressed all contrib modules
|
||||
install -d -m 755 $RPM_BUILD_ROOT%{_datadir}/pgsql/contrib
|
||||
@ -757,7 +818,11 @@ find_lang_bins server.lst \
|
||||
find_lang_bins contrib.lst \
|
||||
pg_archivecleanup pg_test_fsync pg_test_timing pg_waldump
|
||||
find_lang_bins main.lst \
|
||||
pg_dump pg_upgrade pgscripts psql
|
||||
pg_dump pg_upgrade pgscripts psql \
|
||||
%if ! %external_libpq
|
||||
libpq%{private_soname}-5
|
||||
%endif
|
||||
|
||||
%if %plperl
|
||||
find_lang_bins plperl.lst plperl
|
||||
%endif
|
||||
@ -830,6 +895,12 @@ make -C postgresql-setup-%{setup_version} check
|
||||
%endif
|
||||
|
||||
|
||||
%if ! %external_libpq
|
||||
%files private-libs
|
||||
%{_libdir}/libpq.so.*
|
||||
%endif
|
||||
|
||||
|
||||
%files docs
|
||||
%doc *-US.pdf
|
||||
%doc doc/html
|
||||
@ -1058,6 +1129,21 @@ make -C postgresql-setup-%{setup_version} check
|
||||
%{macrosdir}/macros.%name
|
||||
|
||||
|
||||
%if ! %external_libpq
|
||||
%files private-devel
|
||||
%{_bindir}/pg_config
|
||||
%{_includedir}/libpq-events.h
|
||||
%{_includedir}/libpq-fe.h
|
||||
%{_includedir}/postgres_ext.h
|
||||
%{_includedir}/pgsql/internal/*.h
|
||||
%{_includedir}/pgsql/internal/libpq/pqcomm.h
|
||||
%{_includedir}/libpq/*.h
|
||||
%{_libdir}/pkgconfig/*.pc
|
||||
%{_libdir}/libpq.so
|
||||
%{_includedir}/pg_config*.h
|
||||
%endif
|
||||
|
||||
|
||||
%files test-rpm-macros
|
||||
%{_datadir}/postgresql-setup/postgresql_pkg_tests.sh
|
||||
%{macrosdir}/macros.%name-test
|
||||
@ -1126,9 +1212,12 @@ make -C postgresql-setup-%{setup_version} check
|
||||
|
||||
|
||||
%changelog
|
||||
* Fri Jun 16 2021 Honza Horak <hhorak@redhat.com> - 13.3-1
|
||||
* Wed Jun 16 2021 Honza Horak <hhorak@redhat.com> - 13.3-1
|
||||
- Update to 13.3
|
||||
Resolves: #1964497
|
||||
- Build with a private libpq
|
||||
Resolves: #1967918
|
||||
(also discussed in Fedora #1905584)
|
||||
|
||||
* Wed Jun 16 2021 Mohan Boddu <mboddu@redhat.com> - 13.2-7
|
||||
- Rebuilt for RHEL 9 BETA for openssl 3.0
|
||||
|
Loading…
Reference in New Issue
Block a user