From f1f39911e0d2d88c98eae96a3eb14a53c664206f Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Sat, 30 Nov 2019 22:37:25 +0300 Subject: Upgrade to 12.1 --- libpq/libpq/buildfile | 233 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 libpq/libpq/buildfile (limited to 'libpq/libpq/buildfile') diff --git a/libpq/libpq/buildfile b/libpq/libpq/buildfile new file mode 100644 index 0000000..d77ccf7 --- /dev/null +++ b/libpq/libpq/buildfile @@ -0,0 +1,233 @@ +# file : libpq/buildfile +# copyright : Copyright (c) 2016-2019 Code Synthesis Ltd +# license : PostgreSQL Licenes; see accompanying COPYRIGHT file + +import imp_libs = libssl%lib{ssl} +import imp_libs += libcrypto%lib{crypto} + +# Exclude source code of unused features (authentication methods, etc). +# +# @@ When it becomes possible (probably with ad hoc rules), generate +# libpqdll.map and libpqdll.def on the fly from pq/exports.txt applying +# regex replace to its lines and adding prologue/epilogue. +# +lib{pq}: {h }{* -version} \ + {h }{ version} \ + pq/{h c}{* -fe-gssapi-common -fe-secure-gssapi -*win32*} \ + mb/{ c}{* } \ + port/{h c}{* -strlcpy -getaddrinfo -inet_aton -*win32*} \ + common/{ c}{* } \ + include/{h }{** } \ + {def }{libpqdll } \ + {file}{libpqdll.map } \ + pq/{file}{pg_service.conf.sample } \ + $imp_libs + +tclass = $c.target.class +tsys = $c.target.system + +bsd = ($tclass == 'bsd') +macos = ($tclass == 'macos') +windows = ($tclass == 'windows') + +lib{pq}: port/c{strlcpy}: include = (!$bsd && !$macos) + +lib{pq}: pq/{h c}{*win32* } \ + port/{h c}{*win32* +getaddrinfo +inet_aton}: include = $windows + +# The version file is an internal one (it is only included from pg_config.h) +# so we don't distribute nor install it (see below). +# +h{version}: in{version} $src_root/manifest + +# Build options. +# +# Note that the upstream package also defines a bunch of the VAL_* macros +# (VAL_CONFIGURE, VAL_CC, etc) that are used in get_configdata(), if defined. +# We will omit them for the sake of simplicity. +# +c.poptions += -DFRONTEND -DUNSAFE_STAT_OK -DSO_MAJOR_VERSION=$abi_major + +if! $windows + # Note that the upstream package uses -pthread compiler/linker option. It is + # currently unsupported by build2, so we use -D_REENTRANT and -lpthread + # preprocessor/linker options instead. We also omit -D_THREAD_SAFE (synonym + # for -D_REENTRANT) and Solaris-specific -D_POSIX_PTHREAD_SEMANTICS. + # + c.poptions += -D_REENTRANT +else + # Note that the upstream package defines the WIN32 macro for VC only, + # relying on the fact that MinGW GCC defines it by default. However, the + # macro disappears from the default ones if to compile with -std=c9x (as we + # do). So we define it for both VC and MinGW GCC. + # + # It's tempting to move this definition to libpq/pg_config.h. However this + # header is not included into all files that use the macro, for example, + # libpq/port/open.c. + # + c.poptions += -DWIN32 + +# Note that we need to add "-I$src_root" for the headers auto-generating +# machinery to work properly. +# +c.poptions =+ "-I$out_root" "-I$src_root" "-I$src_base" "-I$src_base/port" \ + "-I$src_base/pq" "-I$src_base/include" + +switch $tclass, $tsys +{ + case 'linux' + c.poptions += -D_GNU_SOURCE + + case 'windows', 'mingw32' + { + c.poptions += -DBUILDING_DLL -DEXEC_BACKEND + c.poptions =+ "-I$src_base/include/port/win32" + } + case 'windows' + { + # Probably some of the *WIN* macro definitions are not really required, + # but let's keep all of them for good measure. + # + c.poptions += -DEXEC_BACKEND -D_WINDLL -D__WINDOWS__ -D__WIN32__ -D_MBCS \ + -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE + + c.poptions =+ "-I$src_base/include/port/win32_msvc" \ + "-I$src_base/include/port/win32" + } +} + +# Define SYSCONFDIR macro. This path is used as a last resort for the +# pg_service.conf file search (see pq/fe-connect.c for details). +# +# The whole idea feels utterly broken (hello cross-compilation) so we will +# just do bare minimum and wait and see. +# +# @@ We should probably allow to configure this macros via configuration +# variable config.libpq.sysconfdir. +# +# For the upstream package if the resulted sysconfdir path doesn't contain the +# 'postgres' or 'pgsql' substring then the '/postgresql' suffix is +# automatically appended (see the upstream INSTALL file for details). Note +# that the same rule is applied for the datadir and docdir paths. Also if the +# root directory is /usr, then the resulting sysconfdir path is +# /etc/postgresql (rather than /usr/etc/postgresql). +# +# Let's do the same for the sysconfdir to increase the chance that libpq will +# find the configuration file. Note that we don't install anything at this +# path and don't amend the install.data and install.doc path variables. We +# also use the same default path as the upstream package. Also note that on +# Windows the default path doesn't make any sense so let's make it empty +# instead. +# +if ($install.root != [null]) +{ + root = $install.resolve($install.root) + sysconfdir = ($windows || $root != /usr ? $root/etc : /etc) + + if! $regex.match("$sysconfdir", '.*(pgsql|postgresql).*') + sysconfdir = $sysconfdir/postgresql +} +else + sysconfdir = ($windows ? '' : /usr/local/pgsql/etc) + +# Escape backslashes and quotes in the directory path prior to representing it +# as C string literals. +# +sd = $regex.replace($sysconfdir, '(\\|")', '\\\1') + +# If we ever enable National Language Support then we will need to define the +# LOCALEDIR macro as well. It refers to the locale data directory and should +# be $install.data/locale by default. We will also need to install this +# directory (see configure script --enable-nls options and the libpq/po +# directory in the upstream package for details). +# +pq/obj{fe-connect}: c.poptions += -DSYSCONFDIR="\"$sd\"" + +switch $c.class +{ + case 'gcc' + { + # Omit -fexcess-precision=standard since -std=9x implies it. + # + c.coptions += -fno-strict-aliasing -fwrapv + + # Disable warnings that pop up with -Wall -Wextra. Upstream doesn't seem + # to care about these and it is not easy to disable specific warnings in a + # way that works across compilers/version (some -Wno-* options are only + # recognized in newer versions). + # + c.coptions += -Wno-all -Wno-extra + } + case 'msvc' + { + c.coptions += /GF + + # Disable warnings that pop up with /W3. + # + c.coptions += /wd4018 /wd4244 /wd4267 + } +} + +# On Windows the upstream package also adds the resource file to the library. +# The file contains only the version information. First, libpq.rc is produced +# from libpq.rc.in with the following command: +# +# sed -e 's/\(VERSION.*\),0 *$/\1,'`date '+%y%j' | \ +# sed 's/^0*//'`'/' libpq.rc.in >libpq.rc +# +# Then libpq.rc is compiled with: +# +# windres -i libpq.rc -o libpqrc.o +# +# Afterwards libpqrc.o is linked to the library. +# +# @@ Currently we don't have support for the first two steps. +# +switch $tclass, $tsys +{ + case 'windows', 'mingw32' + c.libs += -lsecur32 -lws2_32 + + case 'windows' + c.libs += secur32.lib ws2_32.lib advapi32.lib + + case 'linux' | 'bsd' + { + # Make sure all symbols are resolvable. + # + c.loptions += -Wl,--no-undefined + + c.loptions += "-Wl,--version-script=$src_base/libpqdll.map" + + c.libs += -lpthread + } + + default + c.libs += -lpthread +} + +# Export options. +# +lib{pq}: cc.export.poptions = "-I$src_base" "-I$src_base/pq" \ + "-I$src_base/include" + +# See bootstrap.build for details. +# +if $version.pre_release + lib{pq}: bin.lib.version = @"-$version.project_id" +else + lib{pq}: bin.lib.version = @"-$abi_major" linux@"$abi_major.$abi_minor" + +# Install the bare minimum of headers not recreating subdirectories. +# +# Note that upstream also installs several 'unofficial API' headers, that we +# won't install. +# +h{*}: install = false + +for h: pq/{libpq-fe libpq-events} include/postgres_ext pg_config_ext + h{$h}@./$path.directory($h): install = include/ + +# Install the config file example as the upstream does. +# +pq/file{pg_service.conf.sample}@pq/: install = data/ -- cgit v1.1