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/README-DEV | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 libpq/README-DEV (limited to 'libpq/README-DEV') diff --git a/libpq/README-DEV b/libpq/README-DEV new file mode 100644 index 0000000..cadfe63 --- /dev/null +++ b/libpq/README-DEV @@ -0,0 +1,77 @@ +This document describes how libpq was packaged for build2. In particular, this +understanding will be useful when upgrading to a new upstream version. See +../README-DEV for general notes on PostgreSQL packaging. + +The upstream package builds the common and ports static libraries and links +them to the libpq library. These static libraries are generic enough to fit +all the binaries built by the package. We will build libpq selecting only the +required static libraries source files, relying on the linker diagnostics +(unresolved symbol errors, etc). + +Symlink the required upstream components and provide our own implementations +for auto-generated headers: + +$ ln -s ../upstream/COPYRIGHT + +Note that we symlink the libpq directory under the different name not to +confuse the headers auto-generating machinery while it maps the header +directory prefixes. + +$ ln -s ../../upstream/src/interfaces/libpq libpq/pq + +Note that while we could symlink the upstream's top source directories, this +would potentially bloat the distribution, uglify the buildfile, and complicate +pg_config.h change tracking on upgrade (see below). Thus, we selectively +symlink only the required files. + +$ mkdir libpq/mb +$ ln -s ../../../upstream/src/backend/utils/mb/{encnames,wchar}.c libpq/mb + +$ mkdir -p libpq/include/libpq libpq/include/mb libpq/include/port +$ ln -s ../../../upstream/src/include/{c,getaddrinfo,pg_config_manual,port,postgres_ext,postgres_fe}.h libpq/include +$ ln -s ../../../../upstream/src/include/libpq/{libpq-fs,pqcomm}.h libpq/include/libpq +$ ln -s ../../../../upstream/src/include/mb/pg_wchar.h libpq/include/mb +$ ln -s ../../../../upstream/src/include/port/{linux,freebsd,darwin,win32,win32_port,pg_bswap}.h libpq/include/port +$ ln -s ../../../../upstream/src/include/port/{win32,win32_msvc} libpq/include/port + +$ mkdir libpq/common +$ ln -s ../../../upstream/src/common/{md5,scram-common,ip,sha2_openssl,link-canary,base64,saslprep,unicode_norm}.c \ + libpq/common + +$ mkdir libpq/port +$ ln -s ../../../upstream/src/port/{pgstrcasecmp,snprintf,getpeereid,pg_strong_random,thread,strerror,chklocale,noblock,inet_net_ntop,strlcpy,win32setlocale,getaddrinfo,open,inet_aton,pgsleep,win32error,system}.c libpq/port +$ ln -s ../../../upstream/src/port/pthread-win32.h libpq/port + +$ ln -s ../../upstream/src/include/pg_config_ext.h.in libpq/pg_config_ext.h.in.orig +$ ln -s ../../upstream/src/include/pg_config_ext.h.win32 libpq/pg_config_ext.h.win32.orig +$ ln -s ../../upstream/src/include/pg_config.h.in libpq/pg_config.h.in.orig +$ ln -s ../../upstream/src/include/pg_config.h.win32 libpq/pg_config.h.win32.orig + +$ ln -s ../../../upstream/src/interfaces/libpq/test/uri-regress.c tests/conninfo + +Create libpq/{pg_config,pg_config_ext,pg_config_os,pg_config_paths}.h using as +a base the upstream's auto-generated headers and/or the corresponding +templates, makefiles, and perl/batch/shell scripts. + +Note that re-creating libpq/pg_config.h from scratch every time we upgrade to +a new upstream version would be a real pain. Instead we can only (un)define +the newly introduced macros, comparing the already defined and currently used +macro sets: + +$ for m in `cat libpq/pg_config.h.in.orig libpq/pg_config.h.win32.orig | \ + sed -n 's/.*#\s*\(define\|undef\)\s\{1,\}\([_A-Z0-9]\{1,\}\)\(\s.*\)\{0,1\}$/\2/p' | \ + sort -u`; do + if grep -q -e "\b$m\b" `find -L . -name '*.h' -a ! -name 'pg_config.h' -o -name '*.c'`; then + echo "$m" + fi + done >used-macros + +$ cat libpq/pg_config.h | \ + sed -n 's/#\s*\(define\|undef\)\s\{1,\}\([_A-Z0-9]\{1,\}\)\(\s.*\)\{0,1\}$/\2/p' | \ + sort -u >defined-macros + +$ diff defined-macros used-macros + +Copy upstream's auto-generated src/interfaces/libpq/{exports.list,libpqdll.def} +to libpq/{libpqdll.map,libpqdll.def} or create them manually based on +pq/exports.txt. Comment out the "LIBRARY LIBPQ" line in libpqdll.def. -- cgit v1.1