diff options
Diffstat (limited to 'server')
-rwxr-xr-x | server/pg_config.pl | 76 | ||||
-rw-r--r-- | server/postgresql.mk | 263 | ||||
-rw-r--r-- | server/test-with-jit.conf | 8 |
3 files changed, 347 insertions, 0 deletions
diff --git a/server/pg_config.pl b/server/pg_config.pl new file mode 100755 index 0000000..2c90236 --- /dev/null +++ b/server/pg_config.pl @@ -0,0 +1,76 @@ +#!/usr/bin/perl + +# Perl reimplementation of PostgreSQL's pg_config binary. +# We provide this as /usr/bin/pg_config to support cross-compilation using +# libpq-dev. Also, this makes the two installed pg_config copies not conflict +# via their debugging symbols. +# +# This code is released under the terms of the PostgreSQL License. +# Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group +# Author: Christoph Berg + +use strict; +use warnings; + +# no arguments, print all items +if (@ARGV == 0) { + while (<DATA>) { + last if /^$/; # begin of help section + print; + } + exit 0; +} + +# --help or -? +if (grep {$_ =~ /^(--help|-\?)$/} @ARGV) { + while (<DATA>) { + last if /^$/; # begin of help section + } + print; # include empty line in output + while (<DATA>) { + next if /^Report bugs/; # Skip bug address in the perl version + print; + } + exit 0; +} + +# specific value(s) requested +my %options; +my $help; +while (<DATA>) { + last if /^$/; # begin of help section + /^(\S+) = (.*)/ or die "malformatted data item"; + $options{'--' . lc $1} = $2; +} + +foreach my $arg (@ARGV) { + unless ($options{$arg}) { + print "pg_config: invalid argument: $arg\n"; + print "Try \"pg_config --help\" for more information.\n"; + exit 1; + } + print "$options{$arg}\n"; +} + +exit 0; + +# The DATA section consists of the `pg_config` output (one KEY = value item per +# line), and the `pg_config --help` text. The first --help line is empty, which +# we use to detect the beginning of the help section. + +__DATA__ +INCLUDEDIR = /usr/include/postgresql + +pg_config provides information about the installed version of PostgreSQL. + +Usage: + pg_config [OPTION]... + +Options: + --includedir show location of C header files of the client + interfaces + -?, --help show this help, then exit + +With no arguments, all known items are shown. + +Report bugs to <pgsql-bugs@postgresql.org>. diff --git a/server/postgresql.mk b/server/postgresql.mk new file mode 100644 index 0000000..d0e3509 --- /dev/null +++ b/server/postgresql.mk @@ -0,0 +1,263 @@ +#!/usr/bin/make -f + +# The PostgreSQL server packages include this in their debian/rules file. + +ifndef MAJOR_VER +$(error MAJOR_VER must be defined before including this file) +endif + +# path to auxiliary build files +AUX_MK_DIR = /usr/share/postgresql-common/server + +# version comparison +version_ge = $(shell dpkg --compare-versions $(MAJOR_VER) ge $(1) && echo y) + +# include dpkg makefiles +include /usr/share/dpkg/architecture.mk +include /usr/share/dpkg/pkg-info.mk +include /usr/share/dpkg/vendor.mk +export DEB_BUILD_MAINT_OPTIONS = hardening=+all +DPKG_EXPORT_BUILDFLAGS = 1 +include /usr/share/dpkg/buildflags.mk + +# strict symbol checking +export DPKG_GENSYMBOLS_CHECK_LEVEL = 4 + +# server catalog version +CATVERSION = $(shell awk '/CATALOG_VERSION_NO/ { print $$3 }' src/include/catalog/catversion.h) + +# configure flags + +CONFIGURE_FLAGS = \ + --with-tcl \ + --with-perl \ + --with-python \ + --with-pam \ + --with-openssl \ + --with-libxml \ + --with-libxslt \ + --mandir=/usr/share/postgresql/$(MAJOR_VER)/man \ + --docdir=/usr/share/doc/postgresql-doc-$(MAJOR_VER) \ + --sysconfdir=/etc/postgresql-common \ + --datarootdir=/usr/share/ \ + --datadir=/usr/share/postgresql/$(MAJOR_VER) \ + --bindir=/usr/lib/postgresql/$(MAJOR_VER)/bin \ + --libdir=/usr/lib/$(DEB_HOST_MULTIARCH)/ \ + --libexecdir=/usr/lib/postgresql/ \ + --includedir=/usr/include/postgresql/ \ + --with-extra-version=" ($(DEB_VENDOR) $(DEB_VERSION))" \ + --enable-nls \ + --enable-thread-safety \ + --enable-debug \ + --enable-dtrace \ + --disable-rpath \ + --with-uuid=e2fs \ + --with-gnu-ld \ + --with-gssapi \ + --with-ldap \ + --with-pgport=5432 \ + --with-system-tzdata=/usr/share/zoneinfo \ + AWK=mawk \ + MKDIR_P='/bin/mkdir -p' \ + PROVE='/usr/bin/prove' \ + PYTHON=/usr/bin/python3 \ + TAR='/bin/tar' \ + XSLTPROC='xsltproc --nonet' \ + CFLAGS='$(CFLAGS)' \ + LDFLAGS='$(LDFLAGS)' + +ifeq ($(call version_ge,9.4),y) + CONFIGURE_FLAGS += --enable-tap-tests +endif + +ifeq ($(call version_ge,9.5),y) + ifneq ($(findstring $(DEB_HOST_ARCH), alpha),) + CONFIGURE_FLAGS += --disable-spinlocks + endif +endif + +ifeq ($(call version_ge,10),y) + CONFIGURE_FLAGS += --with-icu +endif + +ifeq ($(call version_ge,11),y) + # if LLVM is installed, use it + ifneq ($(wildcard /usr/bin/llvm-config-*),) + LLVM_CONFIG = $(lastword $(shell ls -v /usr/bin/llvm-config-*)) + LLVM_VERSION = $(subst /usr/bin/llvm-config-,,$(LLVM_CONFIG)) + CONFIGURE_FLAGS += --with-llvm LLVM_CONFIG=$(LLVM_CONFIG) CLANG=/usr/bin/clang-$(LLVM_VERSION) + else + LLVM_VERSION = 0.invalid # mute dpkg error on empty version fields in debian/control + endif + TEMP_CONFIG = TEMP_CONFIG=$(AUX_MK_DIR)/test-with-jit.conf +endif + +ifeq ($(call version_ge,14),y) + CONFIGURE_FLAGS += --with-lz4 +endif + +ifeq ($(call version_ge,15),y) + ifeq ($(filter pkg.postgresql.nozstd,$(DEB_BUILD_PROFILES)),) + CONFIGURE_FLAGS += --with-zstd + endif +endif + +# Facilitate hierarchical profile generation on amd64 (#730134) +ifeq ($(DEB_HOST_ARCH),amd64) + CFLAGS += -fno-omit-frame-pointer +endif + +# Work around an ICE bug in GCC 11.2.0, see +# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103395 +ifneq ($(findstring $(DEB_HOST_ARCH), armel armhf),) + CFLAGS+= -DSTAP_SDT_ARG_CONSTRAINT=g +endif + +ifeq ($(DEB_HOST_ARCH_OS),linux) + CONFIGURE_FLAGS += --with-systemd + CONFIGURE_FLAGS += --with-selinux +endif + +ifneq ($(filter pkg.postgresql.cassert,$(DEB_BUILD_PROFILES)),) + CONFIGURE_FLAGS += --enable-cassert + GENCONTROL_FLAGS += -Vcassert='$${Newline}$${Newline}This package has been built with cassert enabled.' +endif + +# alpha fails stats tests with postgresql-15 +# hurd implemented semaphores only recently and tests still fail a lot +# plperl fails on kfreebsd-* (#704802) +ifneq ($(filter alpha hurd kfreebsd,$(DEB_HOST_ARCH_OS)),) + TEST_FAIL_COMMAND = echo "Ignoring test failures on this architecture" +else + TEST_FAIL_COMMAND = exit 1 +endif + +# recipes + +%: + dh $@ + +override_dh_auto_configure: + dh_auto_configure --builddirectory=build -- $(CONFIGURE_FLAGS) + # remove pre-built documentation + rm -fv doc/src/sgml/*-stamp + +ifeq ($(filter nodoc,$(DEB_BUILD_PROFILES)),) +override_dh_auto_build-indep: + $(MAKE) -C build/doc all # build man + html +endif + +override_dh_auto_build-arch: + # set MAKELEVEL to 0 to force building submake-generated-headers in src/Makefile.global(.in) + MAKELEVEL=0 $(MAKE) -C build/src all + $(MAKE) -C build/doc man # build man only + $(MAKE) -C build/config all + $(MAKE) -C build/contrib all + # build tutorial stuff + $(MAKE) -C build/src/tutorial NO_PGXS=1 + +override_dh_auto_install-arch: + $(MAKE) -C build/doc/src/sgml install-man DESTDIR=$(CURDIR)/debian/tmp + $(MAKE) -C build/src install DESTDIR=$(CURDIR)/debian/tmp + $(MAKE) -C build/config install DESTDIR=$(CURDIR)/debian/tmp + $(MAKE) -C build/contrib install DESTDIR=$(CURDIR)/debian/tmp + # move SPI examples into server package (they wouldn't be in the doc package in an -A build) + mkdir -p debian/postgresql-$(MAJOR_VER)/usr/share/doc/postgresql-$(MAJOR_VER) + mv debian/tmp/usr/share/doc/postgresql-doc-$(MAJOR_VER)/extension debian/postgresql-$(MAJOR_VER)/usr/share/doc/postgresql-$(MAJOR_VER)/examples + +ifeq ($(filter nodoc,$(DEB_BUILD_PROFILES)),) +override_dh_auto_install-indep: + $(MAKE) -C build/doc install DESTDIR=$(CURDIR)/debian/tmp +endif + +override_dh_makeshlibs: + dh_makeshlibs -Xusr/lib/postgresql/$(MAJOR_VER) + +override_dh_auto_clean: + rm -rf build + +override_dh_installchangelogs: + dh_installchangelogs HISTORY + +override_dh_compress: + dh_compress -X.source -X.c + # compress manpages (excluding debian/tmp/) + gzip -9n $(CURDIR)/debian/*-*/usr/share/postgresql/*/man/man*/*.[137] + +override_dh_install-arch: + dh_install -a + + # link README.Debian.gz to postgresql-common + mkdir -p debian/postgresql-$(MAJOR_VER)/usr/share/doc/postgresql-$(MAJOR_VER) + ln -s ../postgresql-common/README.Debian.gz debian/postgresql-$(MAJOR_VER)/usr/share/doc/postgresql-$(MAJOR_VER)/README.Debian.gz + + # assemble perl version of pg_config in libpq-dev + sed -ne '1,/__DATA__/p' $(AUX_MK_DIR)/pg_config.pl > debian/libpq-dev/usr/bin/pg_config + LC_ALL=C debian/postgresql-client-$(MAJOR_VER)/usr/lib/postgresql/$(MAJOR_VER)/bin/pg_config | sed -e 's![^ ]*/debian/postgresql-client-$(MAJOR_VER)!!' >> debian/libpq-dev/usr/bin/pg_config + LC_ALL=C debian/postgresql-client-$(MAJOR_VER)/usr/lib/postgresql/$(MAJOR_VER)/bin/pg_config --help >> debian/libpq-dev/usr/bin/pg_config + chmod 755 debian/libpq-dev/usr/bin/pg_config + [ "$$(debian/libpq-dev/usr/bin/pg_config --bindir)" = "/usr/lib/postgresql/$(MAJOR_VER)/bin" ] + + # remove actual build path from Makefile.global for reproducibility + sed -i -e "s!^abs_top_builddir.*!abs_top_builddir = /build/postgresql-$(MAJOR_VER)/build!" \ + -e "s!^abs_top_srcdir.*!abs_top_srcdir = /build/postgresql-$(MAJOR_VER)/build/..!" \ + -e 's!-f\(debug\|file\)-prefix-map=[^ ]* !!g' \ + debian/postgresql-client-$(MAJOR_VER)/usr/lib/postgresql/$(MAJOR_VER)/lib/pgxs/src/Makefile.global + + # these are shipped in the pl packages + bash -c "rm -v debian/postgresql-$(MAJOR_VER)/usr/share/postgresql/$(MAJOR_VER)/extension/{plperl,plpython,pltcl,*_pl}*" + bash -c "rm -v debian/postgresql-$(MAJOR_VER)/usr/lib/postgresql/$(MAJOR_VER)/lib/{plperl,plpython,pltcl,*_pl}*" + bash -c "rm -rfv debian/postgresql-$(MAJOR_VER)/usr/lib/postgresql/$(MAJOR_VER)/lib/bitcode/*{plperl,plpython,pltcl}*" + + # record catversion in a file + echo $(CATVERSION) > debian/postgresql-$(MAJOR_VER)/usr/share/postgresql/$(MAJOR_VER)/catalog_version + +override_dh_install-indep: + dh_install -i + + if [ -d debian/postgresql-doc-$(MAJOR_VER) ]; then set -e; \ + install -d debian/postgresql-doc-$(MAJOR_VER)/usr/share/doc/postgresql-doc-$(MAJOR_VER)/tutorial; \ + install src/tutorial/*.c src/tutorial/*.source src/tutorial/Makefile src/tutorial/README debian/postgresql-doc-$(MAJOR_VER)/usr/share/doc/postgresql-doc-$(MAJOR_VER)/tutorial; \ + fi + +override_dh_auto_test-indep: + # nothing to do + +override_dh_auto_test-arch: +ifeq (, $(findstring nocheck, $(DEB_BUILD_OPTIONS))) + # when tests fail, print newest log files + # initdb doesn't like LANG and LC_ALL to contradict, unset LANG and LC_CTYPE here + # temp-install wants to be invoked from a top-level make, unset MAKELEVEL here + # tell pg_upgrade to create its sockets in /tmp to avoid too long paths + unset LANG LC_CTYPE MAKELEVEL; ulimit -c unlimited; \ + if ! make -C build check-world \ + $(TEMP_CONFIG) \ + PGSOCKETDIR="/tmp" \ + PG_TEST_EXTRA='ssl' \ + PROVE_FLAGS="--verbose"; \ + then \ + for l in `find build -name 'regression.*' -o -name '*.log' -o -name '*_log_*' | perl -we 'print map { "$$_\n"; } sort { (stat $$a)[9] <=> (stat $$b)[9] } map { chomp; $$_; } <>' | tail -n 10`; do \ + echo "******** $$l ********"; \ + cat $$l; \ + done; \ + for c in `find build -name 'core*'`; do \ + echo "******** $$c ********"; \ + gdb -batch -ex 'bt full' build/tmp_install/usr/lib/postgresql/$(MAJOR_VER)/bin/postgres $$c || :; \ + done; \ + $(TEST_FAIL_COMMAND); \ + fi +endif + +override_dh_installdeb-arch: + dh_installdeb + # record catversion in preinst + sed -i -e 's/@CATVERSION@/$(CATVERSION)/' debian/postgresql-$(MAJOR_VER)/DEBIAN/preinst + +override_dh_gencontrol: + # record catversion in .deb control file + dh_gencontrol $(EXCLUDE_PACKAGES) -- -Vpostgresql:Catversion=$(CATVERSION) -Vllvm:Version=$(LLVM_VERSION) $(GENCONTROL_FLAGS) + +ifneq ($(EXCLUDE_PACKAGES),) +override_dh_builddeb: + dh_builddeb $(EXCLUDE_PACKAGES) +endif diff --git a/server/test-with-jit.conf b/server/test-with-jit.conf new file mode 100644 index 0000000..c68a521 --- /dev/null +++ b/server/test-with-jit.conf @@ -0,0 +1,8 @@ +# config used by pg_regress --temp-config + +fsync = off + +# force JITing of all queries in tests +jit = on +jit_above_cost = 0 +jit_optimize_above_cost = 1000 |