commit dd8ef976eff3b6a4f3162446798b460838cbd88e6a925f3f458bc22b512d56f1 Author: Reinhard Max Date: Fri Sep 25 07:12:04 2020 +0000 - Initial packaging of PostgreSQL 13: * https://www.postgresql.org/about/news/2077/ * https://www.postgresql.org/docs/13/release-13.html OBS-URL: https://build.opensuse.org/package/show/server:database:postgresql/postgresql13?expand=0&rev=1 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/_multibuild b/_multibuild new file mode 100644 index 0000000..9317e4b --- /dev/null +++ b/_multibuild @@ -0,0 +1,3 @@ + + mini + diff --git a/baselibs.conf b/baselibs.conf new file mode 100644 index 0000000..6dc994f --- /dev/null +++ b/baselibs.conf @@ -0,0 +1,5 @@ +libpq5 + provides "postgresql-libs- = " + obsoletes "postgresql-libs- < " + conflicts "postgresql-libs- < 9.1.6" +libecpg6 diff --git a/postgresql-13.0.tar.bz2 b/postgresql-13.0.tar.bz2 new file mode 100644 index 0000000..6a4f9fe --- /dev/null +++ b/postgresql-13.0.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80e750be8d436b54197636a02636f8fd3263ba6779bf865b04832495ea592296 +size 20999465 diff --git a/postgresql-13.0.tar.bz2.sha256 b/postgresql-13.0.tar.bz2.sha256 new file mode 100644 index 0000000..baf9f48 --- /dev/null +++ b/postgresql-13.0.tar.bz2.sha256 @@ -0,0 +1 @@ +80e750be8d436b54197636a02636f8fd3263ba6779bf865b04832495ea592296 postgresql-13.0.tar.bz2 diff --git a/postgresql-README.SUSE b/postgresql-README.SUSE new file mode 100644 index 0000000..2fbea8e --- /dev/null +++ b/postgresql-README.SUSE @@ -0,0 +1,80 @@ +Unix-Domain Socket Directory +============================ + + + +Upgrading PostgreSQL on openSUSE and SUSE Linux Enterprise Server +================================================================= + +Current versions of PostgreSQL come with the pg_upgrade tool that +simplifies and speeds up the migration of a PostgreSQL installation to +a new version. Before version 9.1 dump and restore was needed which +was much slower. + +pg_upgrade needs to have the server binaries of both versions +available. To allow this, we had to change the way PostgreSQL is +packaged as well as the naming of the packages, so that two or more +versions of PostgreSQL can be installed in parallel. The package +names for PostgreSQL contain numbers indicating the major version. + +In PostgreSQL terms for versions up to 9.6 the major version consisted +of the first two components of the three-component version number, +i.e. 8.3, 8.4, 9.0, or 9.1. So, the packages for Postgresql 9.1 are +named postgresql91, postgresql91-server, etc. Inside the packages the +files were moved from their standard locations to a versioned location +such as /usr/lib/postgresql83/bin or /usr/lib/postgresql91/bin to +avoid file conflicts if packages are installed in parallel. + +Starting with version 10 the PostgreSQL project changed their +versioning scheme from from three components to two, which means one +component for the major version and one for the minor. So, the +sequence of major version across the versioning scheme change will be: +9.4, 9.5, 9.6, 10, 11, 12. For versions that use the new versioning +scheme SUSE only puts the single component major version into the +package name, so the postgresql96 package (containg version 9.6 +according to the old versioning scheme) will be followed by +postgresql10, then postgresql11, and so on. + +The update-alternatives mechanism creates and maintains symbolic links +that cause one version (by default the highest installed version) to +re-appear in the standard locations. By default, database data are +stored under /var/lib/pgsql/data on SUSE Linux. + +The following preconditions have to be fulfilled before data migration +can be started: + + 1. If not already done, the packages of the old PostgreSQL version + must be upgraded to the new packaging scheme through a maintenance + update. + + 2. The packages of the new PostgreSQL major version need to be + installed. As pg_upgrade is contained in postgresql91-contrib, that + one has to be installed as well, at least until the migration is + done. + + 3. Unless pg_upgrade is used in link mode, the server must have + enough free disk space to temporarily hold a copy of the database + files. If the database instance was installed in the default + location, the needed space in megabytes can be determined by running + the follwing command as root: "du -hs /var/lib/pgsql/data". If space + is tight, it might help to run the "VACUUM FULL" SQL command on each + database in the instance to be migrated, but be aware that it might + take very long. + +The latest upstream documentation for pg_upgrade including step by +step instructions for performing a database migration can be found +online under https://www.postgresql.org/docs/current/pgupgrade.html , +or locally under +file:///usr/share/doc/packages/postgresqlXX/html/pgupgrade.html , if +the postgresqlXX-docs package is installed. XX is a place holder for +the respective major version here. + +NOTE: The online documentation starts with explaining how you can +install PostgreSQL from the upstream sources (which is not necessary +when you install the SUSE RPMs) and also uses other directory names +(/usr/local instead of the update-alternatives based path as described +above). + +For background information about the inner workings of pg_upgrade and +a performance comparison with the old dump and restore method, see +http://momjian.us/main/writings/pgsql/pg_upgrade.pdf . diff --git a/postgresql-conf.patch b/postgresql-conf.patch new file mode 100644 index 0000000..bd0a31e --- /dev/null +++ b/postgresql-conf.patch @@ -0,0 +1,28 @@ +Index: src/backend/utils/misc/postgresql.conf.sample +=================================================================== +--- src/backend/utils/misc/postgresql.conf.sample.orig ++++ src/backend/utils/misc/postgresql.conf.sample +@@ -416,13 +416,13 @@ + + # - Where to Log - + +-#log_destination = 'stderr' # Valid values are combinations of ++log_destination = 'stderr' # Valid values are combinations of + # stderr, csvlog, syslog, and eventlog, + # depending on platform. csvlog + # requires logging_collector to be on. + + # This is used when logging to stderr: +-#logging_collector = off # Enable capturing of stderr and csvlog ++logging_collector = on # Enable capturing of stderr and csvlog + # into log files. Required to be on for + # csvlogs. + # (change requires restart) +@@ -514,6 +514,7 @@ + #log_error_verbosity = default # terse, default, or verbose messages + #log_hostname = off + #log_line_prefix = '%m [%p] ' # special values: ++log_line_prefix = '%m %d %u [%p]' + # %a = application name + # %u = user name + # %d = database name diff --git a/postgresql-plperl-keep-rpath.patch b/postgresql-plperl-keep-rpath.patch new file mode 100644 index 0000000..8fce391 --- /dev/null +++ b/postgresql-plperl-keep-rpath.patch @@ -0,0 +1,34 @@ +This patch keeps PosgreSQL's configure script from removing the rpath from +Perl's linker options, because otherwise the PL/Perl module can't find +libperl.so (bsc#578053). + +Index: config/perl.m4 +=================================================================== +--- config/perl.m4.orig ++++ config/perl.m4 +@@ -98,9 +98,7 @@ if test "$PORTNAME" = "win32" ; then + fi + fi + else +- pgac_tmp1=`$PERL -MExtUtils::Embed -e ldopts` +- pgac_tmp2=`$PERL -MConfig -e 'print $Config{ccdlflags}'` +- perl_embed_ldflags=`echo X"$pgac_tmp1" | sed -e "s/^X//" -e "s%$pgac_tmp2%%" -e ["s/ -arch [-a-zA-Z0-9_]*//g"]` ++ perl_embed_ldflags=`$PERL -MExtUtils::Embed -e ldopts` + fi + AC_SUBST(perl_embed_ldflags)dnl + if test -z "$perl_embed_ldflags" ; then +Index: configure +=================================================================== +--- configure.orig ++++ configure +@@ -9696,9 +9696,7 @@ if test "$PORTNAME" = "win32" ; then + fi + fi + else +- pgac_tmp1=`$PERL -MExtUtils::Embed -e ldopts` +- pgac_tmp2=`$PERL -MConfig -e 'print $Config{ccdlflags}'` +- perl_embed_ldflags=`echo X"$pgac_tmp1" | sed -e "s/^X//" -e "s%$pgac_tmp2%%" -e "s/ -arch [-a-zA-Z0-9_]*//g"` ++ perl_embed_ldflags=`$PERL -MExtUtils::Embed -e ldopts` + fi + if test -z "$perl_embed_ldflags" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 diff --git a/postgresql-rpmlintrc b/postgresql-rpmlintrc new file mode 100644 index 0000000..0d1b8be --- /dev/null +++ b/postgresql-rpmlintrc @@ -0,0 +1,8 @@ +addFilter("useless-explicit-provides") +addFilter("unnecessary-buildrequires") +addFilter("patch-not-applied") +addFilter("non-standard-uid") +addFilter("file-not-in-%lang") +addFilter("no-dependency-on") +addFilter("no-soname") +addFilter("devel-file-in-non-devel-package") diff --git a/postgresql-testsuite-int8.sql.patch b/postgresql-testsuite-int8.sql.patch new file mode 100644 index 0000000..53f10de --- /dev/null +++ b/postgresql-testsuite-int8.sql.patch @@ -0,0 +1,46 @@ +commit a210bee6273041cf9773383e2dda58a7d7c84be4 +Author: yac +Date: Fri Mar 8 17:56:58 2013 +0100 + + + SET LC_ + +--- src/test/regress/expected/int8.out.orig ++++ src/test/regress/expected/int8.out +@@ -580,6 +580,7 @@ SELECT '' AS to_char_12, to_char(q2, 'FM + | -4567890123456789.000 + (5 rows) + ++SET LC_MONETARY='C'; + SELECT '' AS to_char_13, to_char(q2, 'L9999999999999999.000') FROM INT8_TBL; + to_char_13 | to_char + ------------+------------------------ +--- src/test/regress/expected/numeric.out.orig ++++ src/test/regress/expected/numeric.out +@@ -1079,6 +1079,7 @@ SELECT '' AS to_char_15, to_char(val, 'F + | -24926804.04504742 + (10 rows) + ++SET LC_MONETARY='C'; + SELECT '' AS to_char_16, to_char(val, 'L9999999999999999.099999999999999') FROM num_data; + to_char_16 | to_char + ------------+------------------------------------ +--- src/test/regress/sql/int8.sql.orig ++++ src/test/regress/sql/int8.sql +@@ -116,6 +116,7 @@ SELECT '' AS to_char_9, to_char(q2, '09 + SELECT '' AS to_char_10, to_char(q2, 'S0999999999999999') FROM INT8_TBL; + SELECT '' AS to_char_11, to_char(q2, 'FM0999999999999999') FROM INT8_TBL; + SELECT '' AS to_char_12, to_char(q2, 'FM9999999999999999.000') FROM INT8_TBL; ++SET LC_MONETARY='C'; + SELECT '' AS to_char_13, to_char(q2, 'L9999999999999999.000') FROM INT8_TBL; + SELECT '' AS to_char_14, to_char(q2, 'FM9999999999999999.999') FROM INT8_TBL; + SELECT '' AS to_char_15, to_char(q2, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9') FROM INT8_TBL; +--- src/test/regress/sql/numeric.sql.orig ++++ src/test/regress/sql/numeric.sql +@@ -773,6 +773,7 @@ SELECT '' AS to_char_12, to_char(val, 'F + SELECT '' AS to_char_13, to_char(val, 'FM9999999999990999.990999999999999') FROM num_data; + SELECT '' AS to_char_14, to_char(val, 'FM0999999999999999.999909999999999') FROM num_data; + SELECT '' AS to_char_15, to_char(val, 'FM9999999990999999.099999999999999') FROM num_data; ++SET LC_MONETARY='C'; + SELECT '' AS to_char_16, to_char(val, 'L9999999999999999.099999999999999') FROM num_data; + SELECT '' AS to_char_17, to_char(val, 'FM9999999999999999.99999999999999') FROM num_data; + SELECT '' AS to_char_18, to_char(val, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data; diff --git a/postgresql-testsuite-keep-results-file.patch b/postgresql-testsuite-keep-results-file.patch new file mode 100644 index 0000000..0cfcec3 --- /dev/null +++ b/postgresql-testsuite-keep-results-file.patch @@ -0,0 +1,18 @@ +commit 463154c669010cffc0e96b683576f1e879b61d8b +Author: yac +Date: Mon Mar 11 18:42:39 2013 +0100 + + don't unlink the result file + +Index: postgresql-12beta2/src/test/regress/pg_regress.c +=================================================================== +--- postgresql-12beta2.orig/src/test/regress/pg_regress.c ++++ postgresql-12beta2/src/test/regress/pg_regress.c +@@ -2597,7 +2597,6 @@ regression_main(int argc, char *argv[], + else + { + unlink(difffilename); +- unlink(logfilename); + } + + if (fail_count != 0) diff --git a/postgresql-var-run-socket.patch b/postgresql-var-run-socket.patch new file mode 100644 index 0000000..751b0f7 --- /dev/null +++ b/postgresql-var-run-socket.patch @@ -0,0 +1,48 @@ +Change the built-in default socket directory to be /var/run/postgresql. +For backwards compatibility with (probably non-libpq-based) clients that +might still expect to find the socket in /tmp, also create a socket in +/tmp. This is to resolve communication problems with clients operating +under systemd's PrivateTmp environment, which won't be using the same +global /tmp directory as the server; see bug #825448. + +Note that we apply the socket directory change at the level of the +hard-wired defaults in the C code, not by just twiddling the setting in +postgresql.conf.sample; this is so that the change will take effect on +server package update, without requiring any existing postgresql.conf +to be updated. (Of course, a user who dislikes this behavior can still +override it via postgresql.conf.) + + +--- src/backend/utils/misc/guc.c.orig ++++ src/backend/utils/misc/guc.c +@@ -4159,7 +4159,7 @@ static struct config_string ConfigureNam + }, + &Unix_socket_directories, + #ifdef HAVE_UNIX_SOCKETS +- DEFAULT_PGSOCKET_DIR, ++ DEFAULT_PGSOCKET_DIR ", /tmp", + #else + "", + #endif +--- src/bin/initdb/initdb.c.orig ++++ src/bin/initdb/initdb.c +@@ -1091,7 +1091,7 @@ setup_config(void) + + #ifdef HAVE_UNIX_SOCKETS + snprintf(repltok, sizeof(repltok), "#unix_socket_directories = '%s'", +- DEFAULT_PGSOCKET_DIR); ++ DEFAULT_PGSOCKET_DIR ", /tmp"); + #else + snprintf(repltok, sizeof(repltok), "#unix_socket_directories = ''"); + #endif +--- src/include/pg_config_manual.h.orig ++++ src/include/pg_config_manual.h +@@ -201,7 +201,7 @@ + * support them yet. + */ + #ifndef WIN32 +-#define DEFAULT_PGSOCKET_DIR "/tmp" ++#define DEFAULT_PGSOCKET_DIR "/var/run/postgresql" + #else + #define DEFAULT_PGSOCKET_DIR "" + #endif diff --git a/postgresql13.changes b/postgresql13.changes new file mode 100644 index 0000000..15b5687 --- /dev/null +++ b/postgresql13.changes @@ -0,0 +1,6 @@ +------------------------------------------------------------------- +Fri Sep 25 06:57:55 UTC 2020 - Reinhard Max + +- Initial packaging of PostgreSQL 13: + * https://www.postgresql.org/about/news/2077/ + * https://www.postgresql.org/docs/13/release-13.html diff --git a/postgresql13.spec b/postgresql13.spec new file mode 100644 index 0000000..6838d3f --- /dev/null +++ b/postgresql13.spec @@ -0,0 +1,943 @@ +# +# spec file for package postgresql12 +# +# Copyright (c) 2020 SUSE LLC +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +%define pgversion 13.0 +%define pgmajor 13 +%define pgsuffix %pgmajor +%define buildlibs 1 +%define tarversion %{pgversion} + +### CUT HERE ### +%define pgname postgresql%pgsuffix +%define priority %pgsuffix +%define libpq libpq5 +%define libecpg libecpg6 +%define libpq_so libpq.so.5 +%define libecpg_so libecpg.so.6 +%define pgbasedir %_prefix/lib/%pgname +%define pgtestdir %pgbasedir/test +%define pgbindir %pgbasedir/bin +%define pglibdir %pgbasedir/%_lib +%define pgincludedir %_includedir/pgsql +%define pgdatadir %_datadir/%pgname +%define pgdocdir %_docdir/%pgname +%define pgextensiondir %pgdatadir/extension +%define pgcontribdir %pgdatadir/contrib +%define pgmandir %_mandir + +Name: %pgname +%if "@BUILD_FLAVOR@" == "mini" +%define devel devel-mini +%define mini 1 +%else +%define devel devel +%define mini 0 +%endif + +# Use Python 2 for PostgreSQL 9.x on all platforms and for PostgreSQL 10 on SLE12. +# Use Python 3 for everything else. +%if %pgsuffix < 90 && ( 0%{?is_opensuse} || 0%{?sle_version} >= 150000 || %pgsuffix > 10 ) +%define python python3 +%else +%define python python +%endif + +%if %mini +%bcond_with selinux +%bcond_with icu +%else +BuildRequires: %{python}-devel +BuildRequires: docbook_4 +BuildRequires: gettext-devel +BuildRequires: libuuid-devel +BuildRequires: ncurses-devel +BuildRequires: pam-devel +BuildRequires: readline-devel +BuildRequires: tcl-devel +BuildRequires: timezone +BuildRequires: zlib-devel +%bcond_without selinux +%bcond_without icu +%if 0%{?suse_version} >= 1300 +%bcond_without systemd +%bcond_without systemd_notify +%else +%bcond_with systemd +%bcond_with systemd_notify +%endif +%if 0%{?is_opensuse} && 0%{?suse_version} >= 1500 && %pgsuffix >= 11 && %pgsuffix < 90 +%bcond_without llvm +%else +# LLVM is currently unsupported on SLE, so don't use it +%bcond_with llvm +%endif +%endif + +%ifnarch %arm +%bcond_without check +%else +%bcond_with check +%endif + +%if ( %pgsuffix >= 11 && %pgsuffix < 90 ) || %mini +%bcond_without server_devel +%else +%bcond_with server_devel +%endif + +BuildRequires: fdupes +%if %{with icu} +BuildRequires: libicu-devel +%endif +%if %{with selinux} +BuildRequires: libselinux-devel +%endif +%if %{with llvm} +BuildRequires: clang +BuildRequires: gcc-c++ +BuildRequires: llvm-devel +%endif +BuildRequires: libxslt-devel +BuildRequires: openldap2-devel +BuildRequires: openssl-devel +BuildRequires: pkg-config +BuildRequires: pkgconfig(krb5) +%if %{with systemd_notify} +BuildRequires: pkgconfig(libsystemd) +BuildRequires: pkgconfig(systemd) +%endif +#!BuildIgnore: %pgname +#!BuildIgnore: %pgname-server +#!BuildIgnore: postgresql-implementation +#!BuildIgnore: postgresql-server-implementation +Summary: Basic Clients and Utilities for PostgreSQL +License: PostgreSQL +Group: Productivity/Databases/Tools +Version: %pgversion +Release: 0 +Source0: https://ftp.postgresql.org/pub/source/v%{version}/postgresql-%{tarversion}.tar.bz2 +Source1: https://ftp.postgresql.org/pub/source/v%{version}/postgresql-%{tarversion}.tar.bz2.sha256 +Source2: baselibs.conf +Source3: postgresql-README.SUSE +Source17: postgresql-rpmlintrc +Patch1: postgresql-conf.patch +# PL/Perl needs to be linked with rpath (bsc#578053) +Patch4: postgresql-plperl-keep-rpath.patch +Patch6: postgresql-testsuite-int8.sql.patch +Patch8: postgresql-testsuite-keep-results-file.patch +Patch9: postgresql-var-run-socket.patch +URL: https://www.postgresql.org/ +BuildRoot: %{_tmppath}/%{name}-%{version}-build +Provides: postgresql = %version-%release +Provides: postgresql-implementation = %version-%release +Requires: %libpq >= %version +Requires(post): postgresql-noarch >= %pgmajor +Requires(postun): postgresql-noarch >= %pgmajor +# At this point we changed the package layout on SLE and conflict with +# older releases to get a clean cut. +Conflicts: postgresql-noarch < 12.0.1 + +%description +PostgreSQL is an advanced object-relational database management system +that supports an extended subset of the SQL standard, including +transactions, foreign keys, subqueries, triggers, and user-defined +types and functions. + +This package contains the basic utility and client programs necessary +to maintain and work with local or remote PostgreSQL databases as well +as manual pages for the SQL commands that PostgreSQL supports. Full +HTML documentation for PostgreSQL can be found in the postgresql-docs +package. + +%package -n %libpq +Summary: Shared Libraries Required for PostgreSQL Clients +Group: Productivity/Databases/Clients +Provides: postgresql-libs:%_libdir/libpq.so.5 +Obsoletes: postgresql-libs < %version +# bug437293 +%if "%_lib" == "lib64" +Conflicts: %libpq-32bit < %version +%endif +%ifarch ia64 +Conflicts: %libpq-x86 < %version +%endif +%ifarch ppc64 +Obsoletes: postgresql-libs-64bit +%endif + +%description -n %libpq + +PostgreSQL is an advanced object-relational database management system +that supports an extended subset of the SQL standard, including +transactions, foreign keys, subqueries, triggers, user-defined types +and functions. + +This package provides the client library that most PostgreSQL client +program or language bindings are using. + +%package -n %libecpg + +Summary: Shared Libraries Required for PostgreSQL Clients +Group: Productivity/Databases/Clients +Provides: postgresql-libs:%_libdir/libecpg.so.6 + +%description -n %libecpg +PostgreSQL is an advanced object-relational database management system +that supports an extended subset of the SQL standard, including +transactions, foreign keys, subqueries, triggers, user-defined types +and functions. + +This package provides the runtime library of the embedded SQL C +preprocessor for PostgreSQL. + +%package %devel +Summary: PostgreSQL client development header files and libraries +Group: Development/Libraries/C and C++ +Provides: postgresql-devel = %version-%release +Provides: postgresql-devel-implementation = %version-%release +%if %mini +Requires: this-is-only-for-build-envs +Provides: %libecpg = %version-%release +Provides: %libpq = %version-%release +Provides: %pgname-devel = %version-%release +Conflicts: %pgname-devel +Conflicts: %libecpg +Conflicts: %libpq +%else +Requires: %libecpg >= %version +Requires: %libpq >= %version +%endif +# Installation of postgresql??-devel is exclusive +Provides: postgresql-devel-exclusive = %pgmajor +Conflicts: postgresql-devel-exclusive < %pgmajor + +%if %{with server_devel} +%package server-devel +Summary: PostgreSQL server development header files and utilities +Group: Development/Libraries/C and C++ +%else +Provides: %pgname-server-devel = %version-%release +%endif +Provides: postgresql-server-devel = %version-%release +Provides: postgresql-server-devel-implementation = %version-%release +Requires(post): postgresql-server-noarch >= %pgmajor +Requires(postun): postgresql-server-noarch >= %pgmajor +Requires: %pgname-devel = %version +Requires: %pgname-server = %version-%release +# Installation of postgresql??-devel is exclusive +Provides: postgresql-server-devel-exclusive = %pgmajor +Conflicts: postgresql-server-devel-exclusive < %pgmajor +%if %{with llvm} +Requires: clang +Requires: llvm +%endif +Requires: libxslt-devel +Requires: openssl-devel +Requires: pam-devel +Requires: readline-devel +Requires: zlib-devel +Requires: pkgconfig(krb5) +%if %{with selinux} +Requires: libselinux-devel +%endif + +%if %{with server_devel} +%description server-devel +PostgreSQL is an advanced object-relational database management system +that supports an extended subset of the SQL standard, including +transactions, foreign keys, subqueries, triggers, and user-defined +types and functions. + +This package contains the header files and libraries needed to compile +C extensions that link into the PostgreSQL server. For building client +applications, see the postgresql%pgsuffix-devel package. +%endif + +%description %devel +PostgreSQL is an advanced object-relational database management system +that supports an extended subset of the SQL standard, including +transactions, foreign keys, subqueries, triggers, and user-defined +types and functions. + +This package contains the header files and libraries needed to compile +C applications which will directly interact with a PostgreSQL database +management server and the ECPG Embedded C Postgres preprocessor. You +need to install this package if you want to develop applications in C +which will interact with a PostgreSQL server. + +For building PostgreSQL server extensions, see the +postgresql%pgsuffix-server-devel package. + +%package server +Summary: The Programs Needed to Create and Run a PostgreSQL Server +Group: Productivity/Databases/Servers +PreReq: /sbin/chkconfig +PreReq: postgresql = %version +Requires: glibc-locale +Requires: timezone +%if %{with llvm} +Recommends: %{name}-llvmjit +%endif +Provides: postgresql-server-implementation = %version-%release +Requires: %libpq >= %version +Requires(pre): postgresql-server-noarch >= %pgmajor +Requires(preun): postgresql-server-noarch >= %pgmajor +Requires(postun): postgresql-server-noarch >= %pgmajor +Requires(post): postgresql-noarch >= %pgmajor +Requires(postun): postgresql-noarch >= %pgmajor + +%description server +PostgreSQL is an advanced object-relational database management system +that supports an extended subset of the SQL standard, including +transactions, foreign keys, sub-queries, triggers, and user-defined +types and functions. + +This package includes the programs needed to create and run a +PostgreSQL server, which will in turn allow you to create and maintain +PostgreSQL databases. + +%package llvmjit +Summary: Just-in-time compilation support for PostgreSQL +Group: Productivity/Databases/Servers +Provides: postgresql-llvmjit-implementation = %version-%release +Requires: %pgname-server = %version-%release +Requires: postgresql-llvmjit-noarch >= %pgmajor + +%description llvmjit +PostgreSQL is an advanced object-relational database management system +that supports an extended subset of the SQL standard, including +transactions, foreign keys, sub-queries, triggers, and user-defined +types and functions. + +This package contains support for just-in-time compiling parts of +PostgreSQL queries. Using LLVM it compiles e.g. expressions and tuple +deforming into native code, with the goal of accelerating analytics +queries. + +%package test +Summary: The test suite for PostgreSQL +Group: Productivity/Databases/Servers +Provides: postgresql-test-implementation = %version-%release +Requires: %pgname-server = %version +Requires: postgresql-test-noarch >= %pgmajor + +%description test +This package contains the sources and pre-built binaries of various +tests for the PostgreSQL database management system, including +regression tests and benchmarks. + +%package docs +Summary: HTML Documentation for PostgreSQL +Group: Productivity/Databases/Tools +Provides: postgresql-docs-implementation = %version-%release +Requires: postgresql-docs-noarch >= %pgmajor +BuildArch: noarch + +%description docs +PostgreSQL is an advanced object-relational database management system +that supports an extended subset of the SQL standard, including +transactions, foreign keys, subqueries, triggers, and user-defined +types and functions. + +This package contains the HTML documentation for PostgreSQL. The start +page is: file:///usr/share/doc/packages/%pgname/html/index.html . +Manual pages for the PostgreSQL SQL statements can be found in the +postgresql package. + +%package contrib +Summary: Contributed Extensions and Additions to PostgreSQL +Group: Productivity/Databases/Tools +Provides: postgresql-contrib-implementation = %version-%release +Requires: postgresql-contrib-noarch >= %pgmajor +Requires(post): %pgname >= %pgmajor +Requires: %pgname >= %pgmajor +PreReq: %pgname-server = %version-%release + +%description contrib +PostgreSQL is an advanced object-relational database management system +that supports an extended subset of the SQL standard, including +transactions, foreign keys, subqueries, triggers, and user-defined +types and functions. + +The postgresql-contrib package includes extensions and additions that +are distributed along with the PostgreSQL sources, but are not (yet) +officially part of the PostgreSQL core. + +Documentation for the modules contained in this package can be found in +/usr/share/doc/packages/postgresql/contrib. + +%package plperl +Summary: The PL/Tcl, PL/Perl, and PL/Python procedural languages for PostgreSQL +Group: Productivity/Databases/Servers +Provides: postgresql-plperl-implementation = %version-%release +Requires: %pgname-server = %version-%release +Requires: perl = %perl_version +Requires: postgresql-plperl-noarch >= %pgmajor + +%description plperl +This package contains the the PL/Tcl, PL/Perl, and PL/Python procedural +languages for the back-end. With these modules one can use Perl, +Python, and Tcl to write stored procedures, functions and triggers. + +PostgreSQL also offers the builtin procedural language PL/SQL. + +%package plpython +Summary: The PL/Python Procedural Languages for PostgreSQL +Group: Productivity/Databases/Servers +Provides: postgresql-plpython-implementation = %version-%release +Requires: %pgname-server = %version-%release +Requires: %python +Requires: postgresql-plpython-noarch >= %pgmajor + +%description plpython +PostgreSQL is an advanced object-relational database management system +that supports an extended subset of the SQL standard, including +transactions, foreign keys, subqueries, triggers, and user-defined +types and functions. + +This package contains the PL/Python procedural language for PostgreSQL. +With this module one can use Python to write stored procedures, +functions, and triggers. + +PostgreSQL also offers the built-in procedural language PL/SQL which is +included in the postgresql-server package. + +%package pltcl +Summary: PL/Tcl Procedural Language for PostgreSQL +Group: Productivity/Databases/Tools +Provides: postgresql-pltcl-implementation = %version-%release +Requires: %pgname-server = %version +Requires: postgresql-pltcl-noarch >= %pgmajor +Requires: tcl + +%description pltcl +PostgreSQL is an advanced object-relational database management system +that supports an extended subset of the SQL standard, including +transactions, foreign keys, subqueries, triggers, and user-defined +types and functions. + +This package contains the PL/Tcl procedural language for PostgreSQL. +With thie module one can use Tcl to write stored procedures, functions, +and triggers. + +PostgreSQL also offers the built-in procedural language PL/SQL which is +included in the postgresql-server package. + +%prep +%setup -q -n postgresql-%tarversion +# Keep the timestamp of configure, because patching it would otherwise +# confuse PostgreSQL's build system +touch -r configure tmp +%patch1 +%patch4 +%patch6 +%patch8 -p1 +%patch9 +touch -r tmp configure +rm tmp +find src/test/ -name '*.orig' -delete +find -name .gitignore -delete + +%build +%global _lto_cflags %{_lto_cflags} -ffat-lto-objects +export PYTHON=%python +%ifarch %arm +export USE_ARMV8_CRC32C=0 +%endif +PACKAGE_TARNAME=%pgname %configure \ + --bindir=%pgbindir \ + --libdir=%pglibdir \ + --includedir=%pgincludedir \ + --datadir=%pgdatadir \ + --docdir=%pgdocdir \ + --mandir=%pgmandir \ + --disable-rpath \ + --enable-nls \ + --enable-thread-safety \ + --enable-integer-datetimes \ +%if !%mini + --with-python \ + --with-perl \ + --with-tcl \ + --with-tclconfig=%_libdir \ + --with-pam \ + --with-uuid=e2fs \ + --with-libxml \ + --with-libxslt \ +%if %{with systemd_notify} + --with-systemd \ +%endif +%if %{with selinux} + --with-selinux \ +%endif +%if %{with icu} + --with-icu \ +%endif +%if %{with llvm} + --with-llvm \ +%endif +%else + --without-readline \ +%endif + --with-openssl \ + --with-ldap \ + --with-gssapi \ + --with-krb5 \ + --with-system-tzdata=/usr/share/zoneinfo +%if %mini +make -C src/interfaces %{?_smp_mflags} PACKAGE_TARNAME=%pgname +%else +make %{?_smp_mflags} PACKAGE_TARNAME=%pgname + +%if %{with check} + +%check +# +# Run the regression tests. +# +make check || { + for f in src/test/regress/log/* {,src/test/regress/}regression.diffs; do + if test -f $f; then + cat $f + fi + done + exit 1 +} +%endif +%endif + +%install +VLANG=${RPM_PACKAGE_VERSION%%.*} +VSO=${RPM_PACKAGE_VERSION%%%%.*} +%if %mini +make DESTDIR=%buildroot PACKAGE_TARNAME=%pgname -C src/include install +make DESTDIR=%buildroot PACKAGE_TARNAME=%pgname -C src/interfaces install +rm -rf %buildroot%pgincludedir/server +%else +make DESTDIR=%buildroot PACKAGE_TARNAME=%pgname install install-docs +%if 0 +mv %buildroot%pgincludedir/{server,..} +make DESTDIR=%buildroot PACKAGE_TARNAME=%pgname -C src/interfaces uninstall +rm -rf %buildroot%pgincludedir/* +mv %buildroot%pgincludedir{/../server,} +%endif + +# {{{ the test package +mkdir -p %buildroot%pgtestdir/regress +install -sm 0755 contrib/spi/{refint.so,autoinc.so} %buildroot%pgtestdir/regress +install -sm 0755 src/test/regress/{pg_regress,regress.so} %buildroot%pgtestdir/regress +for i in src/test/regress/{data,expected,input,output,sql}; do + cp -r $i %buildroot%pgtestdir/regress/ +done +install -m 0644 src/test/regress/{serial,parallel}_schedule %buildroot%pgtestdir/regress +# }}} +%endif + +# The client libraries go to libdir +mkdir -p %buildroot/%_libdir +ls %buildroot%pglibdir/lib* | + grep -v walreceiver | + xargs mv -t %buildroot/%_libdir +mv %buildroot%pglibdir/pkgconfig %buildroot%_libdir +find %buildroot%_libdir/pkgconfig -type f -exec sed -i 's, -L%pglibdir,,' '{}' + + +# Don't ship static libraries, +# libpgport.a and libpgcommon.a are needed, though. +rm -f $(ls %buildroot/%_libdir/*.a %buildroot%pglibdir/*.a | grep -F -v -e libpgport.a -e libpgcommon.a) + +%if !%mini +# +# Install and collect the contrib stuff +# +touch flag; sleep 1 # otherwise we have installed files that are not newer than flag +make DESTDIR=%buildroot -C contrib install +find %buildroot -type f -cnewer flag -printf "/%%P\n" | + grep -v -e %_docdir -e %pgbindir -e %pgincludedir -e %pglibdir/bitcode \ + > contrib.files +rm flag +install -d -m 750 %buildroot/var/lib/pgsql +install -d -m755 %buildroot%pgdocdir +cp doc/KNOWN_BUGS doc/MISSING_FEATURES COPYRIGHT \ + README HISTORY %buildroot%pgdocdir +cp -a %SOURCE3 %buildroot%pgdocdir/README.SUSE +# Use versioned names for the man pages: +for f in %buildroot%pgmandir/man*/*; do + mv $f ${f}pg%pgsuffix +done +%endif + +mkdir -p %buildroot{%_bindir,%_mandir/man1} +mkdir -p %buildroot/etc/alternatives +genlists () +{ + # usage: genlists packagename basenames + PKG=$1 + shift + for f in $@ + do + BIN=%_bindir/$f + ALTBIN=/etc/alternatives/$f + PGBIN=%pgbindir/$f + MAN=%pgmandir/man1/$f.1* + + touch %buildroot$ALTBIN + ln -s $ALTBIN %buildroot$BIN + + echo "$PGBIN" >> $PKG.files + echo "$BIN" >> $PKG.files + echo "%ghost $ALTBIN" >> $PKG.files + test -e %buildroot$MAN && + echo "%doc $MAN" >> $PKG.files + %find_lang $f-$VLANG $PKG.files ||: + done +} +%if !%mini +genlists main \ + createdb \ + clusterdb \ + createuser \ + dropdb \ + dropuser \ + pg_dump \ + pg_dumpall \ + pg_restore \ + pg_rewind \ + psql \ + vacuumdb \ + reindexdb \ + pg_basebackup \ +%if %pgsuffix < 90 + pg_receivewal \ +%else + createlang \ + droplang \ + pg_receivexlog \ +%endif + pg_isready \ + pg_recvlogical \ +%if %pgsuffix == 11 + pg_verify_checksums \ +%endif +%if %pgsuffix >= 12 + pg_checksums \ +%endif +%if %pgsuffix >= 13 + pg_verifybackup +%endif + +%find_lang plpgsql-$VLANG main.files +%find_lang pgscripts-$VLANG main.files + +genlists server \ + initdb \ + pg_ctl \ + pg_controldata \ +%if %pgsuffix < 90 + pg_resetwal \ + pg_waldump \ +%else + pg_resetxlog \ +%endif + postgres \ + postmaster + +genlists contrib \ +%if %pgsuffix > 90 + pg_xlogdump \ +%endif + oid2name \ + pg_archivecleanup \ + pg_standby \ + pg_test_fsync \ + pg_upgrade \ + pgbench \ + vacuumlo \ + pg_test_timing +for pl in plperl plpython pltcl; do + %find_lang $pl-$VLANG $pl.lang +done +ln -s /etc/alternatives/postgresql %buildroot/usr/lib/postgresql +touch %buildroot/etc/alternatives/postgresql + +# Remove mostly unneeded buildtime requirements for server extensions +sed -i '/^LIBS = /s/= .*/=/' %buildroot/%pglibdir/pgxs/src/Makefile.global +%endif + +# Make sure we can also link agaist newer versions +pushd %buildroot%_libdir +for f in *.so; do + ln -sf $f.? $f +done +%if 0 +for long in *.so.*.*; do + short=${long%%.*} + so=${short%%.*} + ln -sf $long $short + ln -sf $short $so +done +%endif +popd + +mkdir -p %buildroot%pgmandir/man1 +cp -a doc/src/sgml/man1/ecpg.1 %buildroot%pgmandir/man1/ecpg.1pg%pgsuffix +%find_lang ecpg-$VLANG devel.files +ln -s %pgbindir/ecpg %buildroot%_bindir/ecpg + +%if !%mini +%find_lang pg_config-$VLANG server-devel.files +ln -s %pgbindir/pg_config %buildroot%_bindir/pg_config +%endif + +%if %{without server_devel} +cat server-devel.files >> devel.files +%endif + +# Build up the file lists for the libpq and libecpg packages +cat > libpq.files <> libpq.files +%find_lang libpq5-$VLANG libpq.files + +cat > libecpg.files <> libecpg.files +%find_lang ecpglib6-$VLANG libecpg.files + +%if !%buildlibs +# Delete the contents of the library packages, if we don't want to build them +awk -v P=%buildroot '/^(%lang|[^%])/{print P $NF}' libpq.files libecpg.files | xargs rm +%endif + +%fdupes %buildroot + +%post %devel +/sbin/ldconfig +%if %{with server_devel} +%post server-devel +%endif +/usr/share/postgresql/install-alternatives %priority + +%postun %devel +/sbin/ldconfig +%if %{with server_devel} +%postun server-devel +%endif +/usr/share/postgresql/install-alternatives %priority + +%if !%mini + +%postun +/usr/share/postgresql/install-alternatives %priority + +%post +/usr/share/postgresql/install-alternatives %priority + +%post server +/usr/share/postgresql/install-alternatives %priority + +%preun server +# Stop only when we are uninstalling the currently running version +test -n "$FIRST_ARG" || FIRST_ARG="$1" +if [ "$FIRST_ARG" -eq 0 -a -x /usr/bin/systemctl ]; then + %if %{with systemd} + %define stop %_stop_on_removal postgresql.service + eval $(systemctl show postgresql --property=MainPID) + %else + %define stop /sbin/init.d postgresql stop + MainPID=$(pidof -s postgres) || : + %endif + if test -n "$MainPID" && test "$MainPID" -ne 0; then + BIN=$(readlink -n /proc/$MainPID/exe) + DIR=$(dirname ${BIN% *}) + if test "$DIR" = "%pgbindir" -o "$DIR" = "%_bindir"; then + %stop + fi + fi +fi + +%postun server +/usr/share/postgresql/install-alternatives %priority +# Restart only when we are updating the currently running version +# or from the old packaging scheme +test -n "$FIRST_ARG" || FIRST_ARG="$1" +if [ "$FIRST_ARG" -ge 1 ]; then + %if %{with systemd} + %define restart %_restart_on_update postgresql.service + eval $(systemctl show postgresql --property=MainPID) + %else + %define restart /sbin/init.d postgresql restart + MainPID=$(pidof -s postgres) || : + %endif + if test -n "$MainPID" && test "$MainPID" -ne 0 && + readlink -n /proc/$MainPID/exe | grep -Fq " (deleted)" + then + BIN=$(readlink -n /proc/$MainPID/exe) + DIR=$(dirname ${BIN% *}) + if test "$DIR" = "%pgbindir" -o "$DIR" = "%_bindir"; then + %restart + fi + fi +fi + +%post contrib +/usr/share/postgresql/install-alternatives %priority + +%postun contrib +/usr/share/postgresql/install-alternatives %priority + +%if %buildlibs +%post -n %libpq -p /sbin/ldconfig + +%postun -n %libpq -p /sbin/ldconfig + +%post -n %libecpg -p /sbin/ldconfig + +%postun -n %libecpg -p /sbin/ldconfig +%endif + +%files -f main.files +%defattr(-,root,root) +%dir %pgbindir +%doc %pgmandir/man7/* +%docdir %pgdocdir +%dir %pgdocdir +%pgdocdir/[[:upper:]]* +%dir %pglibdir +/usr/lib/postgresql +%ghost /etc/alternatives/postgresql + +%files test +%defattr(-,root,root,-) +%pgtestdir + +%files docs +%defattr(-,root,root) +%doc %pgmandir/man3/* +%docdir %pgdocdir +%dir %pgdocdir +%pgdocdir/html + +%files contrib -f contrib.files +%defattr(-,root,root) +%docdir %pgdocdir +%dir %pgdocdir +%pgdocdir/extension +%dir %pgdatadir +%dir %pgcontribdir + +%files server -f server.files +%defattr(-,root,root) +%dir %pgbasedir +%dir %pgextensiondir +%dir %pglibdir +%if %pgsuffix < 90 +%pglibdir/pgoutput.so +%endif +%pglibdir/plpgsql.so +%pglibdir/dict_snowball.so +%pgdatadir/tsearch_data +%exclude %pgdatadir/tsearch_data/*.rules +%dir %pgdatadir +%pgdatadir/timezone* +%pgdatadir/*.* +%if %buildlibs +%exclude %pgdatadir/pg_service.conf.sample +%endif +%if %pgsuffix > 90 +%exclude %pgdatadir/*.pltcl +%endif +%pglibdir/*_and_*.so +%pglibdir/euc2004_sjis2004.so +%pglibdir/libpqwalreceiver.so +%if %{with llvm} +%dir %pglibdir/bitcode +%endif +%pgextensiondir/plpgsql* +%attr(750,postgres,postgres) %dir /var/lib/pgsql + +%if %{with llvm} +%files llvmjit +%defattr(-,root,root) +%pglibdir/llvm* +%pglibdir/bitcode/* +%endif + +%files pltcl -f pltcl.lang +%defattr(-,root,root) +%pgextensiondir/pltcl* +%pglibdir/pltcl.so +%if %pgsuffix > 90 +%pgdatadir/*.pltcl +%pgbindir/pltcl* +%endif + +%files plperl -f plperl.lang +%defattr(-,root,root) +%pgextensiondir/plperl* +%pglibdir/plperl.so + +%files plpython -f plpython.lang +%defattr(-,root,root) +%pgextensiondir/plpython* +%pglibdir/plpython*.so + +%endif + +%if %buildlibs && !%mini +%files -n %libpq -f libpq.files + +%files -n %libecpg -f libecpg.files +%endif + +%if %buildlibs && %mini +%files %devel -f devel.files -f libpq.files -f libecpg.files +%else +%files %devel -f devel.files +%endif + +%defattr(-,root,root) +%dir %pgbasedir +%dir %pgbindir +%_bindir/ecpg +%_libdir/pkgconfig/* +%_libdir/lib*.so +%pgbindir/ecpg +%pgincludedir +%if %{with server_devel} +%exclude %pgincludedir/server +%endif +%doc %pgmandir/man1/ecpg.1* + +%if !%mini +%if %{with server_devel} +%files server-devel -f server-devel.files +%endif +%defattr(-,root,root) +%_bindir/pg_config +%pgbindir/pg_config +%pgincludedir/server +%pglibdir/pgxs +%_libdir/lib*.a +%doc %pgmandir/man1/pg_config.1* +%endif + +%changelog