mirror of
https://github.com/postgres/postgres.git
synced 2026-03-11 02:34:28 -04:00
This reverts commits 24c35ec and 57169ad. PreRestoreCommand() and PostRestoreCommand() need to be put closer to the system() call calling a restore_command, as they enable in_restore_command for the startup process which would in turn trigger an immediate proc_exit() in the SIGTERM handler. Perhaps we could get rid of this behavior entirely, but 24c35ec has made the window where the flag is enabled much larger than it was, and any Postgres-like actions (palloc, etc.) taken by code paths while the flag is enabled could lead to more severe issues in the shutdown processing. Note that curculio has showed that there are much more problems in this area, unrelated to this change, actually, hence the issues related to that had better be addressed first. Keeping the code of HEAD in line with the stable branches should make that a bit easier. Per discussion with Andres Freund and Nathan Bossart. Discussion: https://postgr.es/m/Y979NR3U5VnWrTwB@paquier.xyz
197 lines
5.8 KiB
Makefile
197 lines
5.8 KiB
Makefile
#-------------------------------------------------------------------------
|
|
#
|
|
# Makefile
|
|
# Makefile for src/common
|
|
#
|
|
# These files are used by the Postgres backend, and also by frontend
|
|
# programs. These files provide common functionality that isn't directly
|
|
# concerned with portability and thus doesn't belong in src/port.
|
|
#
|
|
# This makefile generates three outputs:
|
|
#
|
|
# libpgcommon.a - contains object files with FRONTEND defined,
|
|
# for use by client applications
|
|
#
|
|
# libpgcommon_shlib.a - contains object files with FRONTEND defined,
|
|
# built suitably for use in shared libraries; for use
|
|
# by frontend libraries
|
|
#
|
|
# libpgcommon_srv.a - contains object files without FRONTEND defined,
|
|
# for use only by the backend
|
|
#
|
|
# IDENTIFICATION
|
|
# src/common/Makefile
|
|
#
|
|
#-------------------------------------------------------------------------
|
|
|
|
subdir = src/common
|
|
top_builddir = ../..
|
|
include $(top_builddir)/src/Makefile.global
|
|
|
|
# don't include subdirectory-path-dependent -I and -L switches
|
|
STD_CPPFLAGS := $(filter-out -I$(top_srcdir)/src/include -I$(top_builddir)/src/include,$(CPPFLAGS))
|
|
STD_LDFLAGS := $(filter-out -L$(top_builddir)/src/common -L$(top_builddir)/src/port,$(LDFLAGS))
|
|
override CPPFLAGS += -DVAL_CC="\"$(CC)\""
|
|
override CPPFLAGS += -DVAL_CPPFLAGS="\"$(STD_CPPFLAGS)\""
|
|
override CPPFLAGS += -DVAL_CFLAGS="\"$(CFLAGS)\""
|
|
override CPPFLAGS += -DVAL_CFLAGS_SL="\"$(CFLAGS_SL)\""
|
|
override CPPFLAGS += -DVAL_LDFLAGS="\"$(STD_LDFLAGS)\""
|
|
override CPPFLAGS += -DVAL_LDFLAGS_EX="\"$(LDFLAGS_EX)\""
|
|
override CPPFLAGS += -DVAL_LDFLAGS_SL="\"$(LDFLAGS_SL)\""
|
|
override CPPFLAGS += -DVAL_LIBS="\"$(LIBS)\""
|
|
|
|
override CPPFLAGS := -DFRONTEND -I. -I$(top_srcdir)/src/common $(CPPFLAGS)
|
|
LIBS += $(PTHREAD_LIBS)
|
|
|
|
# If you add objects here, see also src/tools/msvc/Mkvcbuild.pm
|
|
|
|
OBJS_COMMON = \
|
|
archive.o \
|
|
base64.o \
|
|
checksum_helper.o \
|
|
compression.o \
|
|
config_info.o \
|
|
controldata_utils.o \
|
|
d2s.o \
|
|
encnames.o \
|
|
exec.o \
|
|
f2s.o \
|
|
file_perm.o \
|
|
file_utils.o \
|
|
hashfn.o \
|
|
ip.o \
|
|
jsonapi.o \
|
|
keywords.o \
|
|
kwlookup.o \
|
|
link-canary.o \
|
|
md5_common.o \
|
|
percentrepl.o \
|
|
pg_get_line.o \
|
|
pg_lzcompress.o \
|
|
pg_prng.o \
|
|
pgfnames.o \
|
|
psprintf.o \
|
|
relpath.o \
|
|
rmtree.o \
|
|
saslprep.o \
|
|
scram-common.o \
|
|
string.o \
|
|
stringinfo.o \
|
|
unicode_norm.o \
|
|
username.o \
|
|
wait_error.o \
|
|
wchar.o
|
|
|
|
ifeq ($(with_ssl),openssl)
|
|
OBJS_COMMON += \
|
|
cryptohash_openssl.o \
|
|
hmac_openssl.o \
|
|
protocol_openssl.o
|
|
else
|
|
OBJS_COMMON += \
|
|
cryptohash.o \
|
|
hmac.o \
|
|
md5.o \
|
|
sha1.o \
|
|
sha2.o
|
|
endif
|
|
|
|
# A few files are currently only built for frontend, not server
|
|
# (Mkvcbuild.pm has a copy of this list, too). logging.c is excluded
|
|
# from OBJS_FRONTEND_SHLIB (shared library) as a matter of policy,
|
|
# because it is not appropriate for general purpose libraries such
|
|
# as libpq to report errors directly.
|
|
OBJS_FRONTEND_SHLIB = \
|
|
$(OBJS_COMMON) \
|
|
fe_memutils.o \
|
|
restricted_token.o \
|
|
sprompt.o
|
|
OBJS_FRONTEND = \
|
|
$(OBJS_FRONTEND_SHLIB) \
|
|
logging.o
|
|
|
|
# foo.o, foo_shlib.o, and foo_srv.o are all built from foo.c
|
|
OBJS_SHLIB = $(OBJS_FRONTEND_SHLIB:%.o=%_shlib.o)
|
|
OBJS_SRV = $(OBJS_COMMON:%.o=%_srv.o)
|
|
|
|
# where to find gen_keywordlist.pl and subsidiary files
|
|
TOOLSDIR = $(top_srcdir)/src/tools
|
|
GEN_KEYWORDLIST = $(PERL) -I $(TOOLSDIR) $(TOOLSDIR)/gen_keywordlist.pl
|
|
GEN_KEYWORDLIST_DEPS = $(TOOLSDIR)/gen_keywordlist.pl $(TOOLSDIR)/PerfectHash.pm
|
|
|
|
all: libpgcommon.a libpgcommon_shlib.a libpgcommon_srv.a
|
|
|
|
distprep: kwlist_d.h
|
|
|
|
# libpgcommon is needed by some contrib
|
|
install: all installdirs
|
|
$(INSTALL_STLIB) libpgcommon.a '$(DESTDIR)$(libdir)/libpgcommon.a'
|
|
$(INSTALL_STLIB) libpgcommon_shlib.a '$(DESTDIR)$(libdir)/libpgcommon_shlib.a'
|
|
|
|
installdirs:
|
|
$(MKDIR_P) '$(DESTDIR)$(libdir)'
|
|
|
|
uninstall:
|
|
rm -f '$(DESTDIR)$(libdir)/libpgcommon.a'
|
|
rm -f '$(DESTDIR)$(libdir)/libpgcommon_shlib.a'
|
|
|
|
libpgcommon.a: $(OBJS_FRONTEND)
|
|
rm -f $@
|
|
$(AR) $(AROPT) $@ $^
|
|
|
|
#
|
|
# Shared library versions of object files
|
|
#
|
|
|
|
libpgcommon_shlib.a: $(OBJS_SHLIB)
|
|
rm -f $@
|
|
$(AR) $(AROPT) $@ $^
|
|
|
|
# Because this uses its own compilation rule, it doesn't use the
|
|
# dependency tracking logic from Makefile.global. To make sure that
|
|
# dependency tracking works anyway for the *_shlib.o files, depend on
|
|
# their *.o siblings as well, which do have proper dependencies. It's
|
|
# a hack that might fail someday if there is a *_shlib.o without a
|
|
# corresponding *.o, but there seems little reason for that.
|
|
%_shlib.o: %.c %.o
|
|
$(CC) $(CFLAGS) $(CFLAGS_SL) $(CPPFLAGS) -c $< -o $@
|
|
|
|
#
|
|
# Server versions of object files
|
|
#
|
|
|
|
libpgcommon_srv.a: $(OBJS_SRV)
|
|
rm -f $@
|
|
$(AR) $(AROPT) $@ $^
|
|
|
|
# Because this uses its own compilation rule, it doesn't use the
|
|
# dependency tracking logic from Makefile.global. To make sure that
|
|
# dependency tracking works anyway for the *_srv.o files, depend on
|
|
# their *.o siblings as well, which do have proper dependencies. It's
|
|
# a hack that might fail someday if there is a *_srv.o without a
|
|
# corresponding *.o, but it works for now.
|
|
%_srv.o: %.c %.o
|
|
$(CC) $(CFLAGS) $(subst -DFRONTEND,, $(CPPFLAGS)) -c $< -o $@
|
|
|
|
# generate SQL keyword lookup table to be included into keywords*.o.
|
|
kwlist_d.h: $(top_srcdir)/src/include/parser/kwlist.h $(GEN_KEYWORDLIST_DEPS)
|
|
$(GEN_KEYWORDLIST) --extern $<
|
|
|
|
# Dependencies of keywords*.o need to be managed explicitly to make sure
|
|
# that you don't get broken parsing code, even in a non-enable-depend build.
|
|
keywords.o keywords_shlib.o keywords_srv.o: kwlist_d.h
|
|
|
|
# The code imported from Ryu gets a pass on declaration-after-statement,
|
|
# in order to keep it more closely aligned with its upstream.
|
|
RYU_FILES = d2s.o f2s.o
|
|
RYU_OBJS = $(RYU_FILES) $(RYU_FILES:%.o=%_shlib.o) $(RYU_FILES:%.o=%_srv.o)
|
|
|
|
$(RYU_OBJS): CFLAGS += $(PERMIT_DECLARATION_AFTER_STATEMENT)
|
|
|
|
# kwlist_d.h is in the distribution tarball, so it is not cleaned here.
|
|
clean distclean:
|
|
rm -f libpgcommon.a libpgcommon_shlib.a libpgcommon_srv.a
|
|
rm -f $(OBJS_FRONTEND) $(OBJS_SHLIB) $(OBJS_SRV)
|
|
|
|
maintainer-clean: distclean
|
|
rm -f kwlist_d.h
|