You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Andres Freund 01368e5d9d Split all OBJS style lines in makefiles into one-line-per-entry style. 6 days ago
..
.gitignore Build src/port files as a library with -fPIC, and use that in libpq. 1 year ago
Makefile Split all OBJS style lines in makefiles into one-line-per-entry style. 6 days ago
README Always use our own versions of *printf(). 1 year ago
chklocale.c Remove some code for old unsupported versions of MSVC 1 month ago
dirent.c Fix error handling of readdir() port implementation on first file lookup 8 months ago
dirmod.c Update copyright for 2019 10 months ago
dlopen.c Initial pgindent run for v12. 5 months ago
erand48.c Update copyright for 2019 10 months ago
explicit_bzero.c Use explicit_bzero 2 months ago
fls.c Update copyright for 2019 10 months ago
fseeko.c Update copyright for 2019 10 months ago
getaddrinfo.c Avoid conflicts with library versions of inet_net_ntop() and friends. 2 months ago
getopt.c Use our own getopt() on OpenBSD. 9 months ago
getopt_long.c Phase 3 of pgindent updates. 2 years ago
getpeereid.c Update copyright for 2019 10 months ago
getrusage.c Update copyright for 2019 10 months ago
gettimeofday.c Phase 3 of pgindent updates. 2 years ago
inet_aton.c Correct include file name in inet_aton fallback. 2 years ago
inet_net_ntop.c Avoid conflicts with library versions of inet_net_ntop() and friends. 2 months ago
isinf.c ANSI-ify a few straggler K&R-style function definitions. 5 months ago
kill.c Update copyright for 2019 10 months ago
mkdtemp.c Update copyright for 2019 10 months ago
noblock.c Update copyright for 2019 10 months ago
open.c Assert that pgwin32_signal_initialize() has been called early enough. 7 months ago
path.c Phase 2 pgindent run for v12. 5 months ago
pg_bitutils.c Fix typos and inconsistencies in code comments 5 months ago
pg_crc32c_armv8.c Make the order of the header file includes consistent in non-backend modules. 2 weeks ago
pg_crc32c_armv8_choose.c Update copyright for 2019 10 months ago
pg_crc32c_sb8.c Update copyright for 2019 10 months ago
pg_crc32c_sse42.c Make the order of the header file includes consistent in non-backend modules. 2 weeks ago
pg_crc32c_sse42_choose.c Update copyright for 2019 10 months ago
pg_strong_random.c Fix compiler warning 2 months ago
pgcheckdir.c Update copyright for 2019 10 months ago
pgmkdirp.c Fix various typos and grammar errors in comments. 4 years ago
pgsleep.c Update copyright for 2019 10 months ago
pgstrcasecmp.c Update copyright for 2019 10 months ago
pgstrsignal.c Improve what pg_strsignal prints if we haven't got strsignal(3). 2 months ago
pqsignal.c In the postmaster, rely on the signal infrastructure to block signals. 4 weeks ago
pread.c Update copyright for 2019 10 months ago
pthread-win32.h Remove cvs keywords from all files. 9 years ago
pwrite.c Fix more typos and inconsistencies in the tree 4 months ago
qsort.c Phase 2 pgindent run for v12. 5 months ago
qsort_arg.c Phase 2 pgindent run for v12. 5 months ago
quotes.c Update copyright for 2019 10 months ago
random.c Update copyright for 2019 10 months ago
rint.c Rethink how to get float.h in old Windows API for isnan/isinf 1 year ago
snprintf.c Fix most -Wundef warnings 3 weeks ago
sprompt.c Fix failures to ignore \r when reading Windows-style newlines. 3 months ago
srandom.c Update copyright for 2019 10 months ago
strerror.c Update copyright for 2019 10 months ago
strlcat.c pgindent run for 9.4 5 years ago
strlcpy.c Update copyright for 2019 10 months ago
strnlen.c Update copyright for 2019 10 months ago
strtof.c Initial pgindent run for v12. 5 months ago
system.c Update copyright for 2019 10 months ago
tar.c Make the order of the header file includes consistent in non-backend modules. 2 weeks ago
thread.c Fix inconsistencies and typos in the tree 3 months ago
unsetenv.c Update copyright for 2019 10 months ago
win32.ico Revert binary change in copyright year adjustment. 7 years ago
win32env.c Update copyright for 2019 10 months ago
win32error.c Fix most -Wundef warnings 3 weeks ago
win32security.c Update copyright for 2019 10 months ago
win32setlocale.c Deal with yet another issue related to "Norwegian (Bokmål)" locale. 3 weeks ago
win32ver.rc Stamp HEAD as 13devel. 4 months ago

README

src/port/README

libpgport
=========

libpgport must have special behavior. It supplies functions to both
libraries and applications. However, there are two complexities:

1) Libraries need to use object files that are compiled with exactly
the same flags as the library. libpgport might not use the same flags,
so it is necessary to recompile the object files for individual
libraries. This is done by removing -lpgport from the link line:

# Need to recompile any libpgport object files
LIBS := $(filter-out -lpgport, $(LIBS))

and adding infrastructure to recompile the object files:

OBJS= execute.o typename.o descriptor.o data.o error.o prepare.o memory.o \
connect.o misc.o path.o exec.o \
$(filter strlcat.o, $(LIBOBJS))

The problem is that there is no testing of which object files need to be
added, but missing functions usually show up when linking user
applications.

2) For applications, we use -lpgport before -lpq, so the static files
from libpgport are linked first. This avoids having applications
dependent on symbols that are _used_ by libpq, but not intended to be
exported by libpq. libpq's libpgport usage changes over time, so such a
dependency is a problem. Windows, Linux, and macOS use an export list to
control the symbols exported by libpq.