| #------------------------------------------------------------------------- |
| # |
| # 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 \ |
| 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 \ |
| kmgr_utils.o \ |
| kwlookup.o \ |
| link-canary.o \ |
| md5.o \ |
| md5_common.o \ |
| pg_get_line.o \ |
| pg_lzcompress.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 \ |
| etcdutils.o |
| |
| ifeq ($(with_ssl),openssl) |
| OBJS_COMMON += \ |
| cipher_openssl.o \ |
| protocol_openssl.o \ |
| cryptohash_openssl.o \ |
| hmac_openssl.o |
| else |
| OBJS_COMMON += \ |
| cipher.o \ |
| cryptohash.o \ |
| hmac.o \ |
| md5.o \ |
| sha1.o \ |
| sha2.o |
| endif |
| |
| OBJS_COMMON += sm3.o |
| |
| # 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 |