#-------------------------------------------------------------------------
#
# Makefile--
-# Makefile for the postgres backend (and the postmaster)
+# Makefile for the postgres backend (and the postmaster)
#
# Copyright (c) 1994, Regents of the University of California
#
+# Functional notes:
+#
+# Parallel make:
+#
+# This make file is set up so that you can do a parallel make (with
+# the --jobs option of make) and make multiple subdirectories at
+# once.
+#
+# However, the subdirectory make files are not so careful.
+# Normally, the --jobs option would get passed down to those
+# subdirectory makes, like any other make option, and they would
+# fail. But there's a trick: Put a value (max number of
+# processes) on the --jobs option, e.g. --jobs=4. Now, due to a
+# special feature of make, the --jobs option will not get passed
+# to the subdirectory makes. (make does this because if you only
+# want 4 tasks running, then splitting the subdirectory makes into
+# multiple tasks would violate your wishes).
+#
+#
+#
+# Implementation notes:
+#
+# We don't use $(LD) for linking. We use $(CC) instead. This is because
+# the $(CC) program apparently can do linking too, and it has certain
+# thinks like default options and search paths for libraries set up for
+# it that the more primitive $(LD) doesn't have.
+#
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/backend/Makefile,v 1.2 1996/07/31 17:19:49 scrappy Exp $
+# $Header: /cvsroot/pgsql/src/backend/Makefile,v 1.30 1998/01/04 19:12:02 scrappy Exp $
#
#-------------------------------------------------------------------------
-#
-# The following turns on intermediate linking of partial objects to speed
-# the link cycle during development. (To turn this off, put "BIGOBJS=false"
-# in your custom makefile, ../Makefile.custom.)
-BIGOBJS= true
+SRCDIR = ..
+include ../Makefile.global
+DIRS = access bootstrap catalog commands executor lib libpq \
+ main nodes optimizer parser port postmaster regex rewrite \
+ storage tcop utils
-PROG= postgres
+ifdef TIOGA
+DIRS += tioga
+endif
-MKDIR= ../mk
-include $(MKDIR)/postgres.mk
+OBJS = $(DIRS:%=%/SUBSYS.o)
+# kerberos flags
-include $(CURDIR)/access/Makefile.inc
-include $(CURDIR)/bootstrap/Makefile.inc
-include $(CURDIR)/catalog/Makefile.inc
-include $(CURDIR)/commands/Makefile.inc
-include $(CURDIR)/executor/Makefile.inc
-include $(CURDIR)/include/Makefile.inc
-include $(CURDIR)/lib/Makefile.inc
-include $(CURDIR)/libpq/Makefile.inc
-include $(CURDIR)/main/Makefile.inc
-include $(CURDIR)/nodes/Makefile.inc
-include $(CURDIR)/optimizer/Makefile.inc
-include $(CURDIR)/parser/Makefile.inc
-include $(CURDIR)/port/Makefile.inc
-include $(CURDIR)/postmaster/Makefile.inc
-include $(CURDIR)/regex/Makefile.inc
-include $(CURDIR)/rewrite/Makefile.inc
-include $(CURDIR)/storage/Makefile.inc
-include $(CURDIR)/tcop/Makefile.inc
-include $(CURDIR)/tioga/Makefile.inc
-include $(CURDIR)/utils/Makefile.inc
+ifdef KRBVERS
+CFLAGS+= $(KRBFLAGS)
+LDFLAGS+= $(KRBLIBS)
+endif
-SRCS:= ${SRCS_ACCESS} ${SRCS_BOOTSTRAP} $(SRCS_CATALOG) ${SRCS_COMMANDS} \
- ${SRCS_EXECUTOR} $(SRCS_LIB) $(SRCS_LIBPQ) ${SRCS_MAIN} \
- ${SRCS_NODES} ${SRCS_OPTIMIZER} ${SRCS_PARSER} ${SRCS_PORT} \
- $(SRCS_POSTMASTER) ${SRCS_REGEX} ${SRCS_REWRITE} ${SRCS_STORAGE} \
- ${SRCS_TCOP} ${SRCS_UTILS}
-ifeq ($(BIGOBJS), true)
-OBJS= ACCESS.o BOOTSTRAP.o COMMANDS.o EXECUTOR.o MAIN.o MISC.o NODES.o \
- PARSER.o OPTIMIZER.o REGEX.o REWRITE.o STORAGE.o TCOP.o UTILS.o
-CLEANFILES+= $(subst .s,.o,$(SRCS:.c=.o)) $(OBJS)
-else
-OBJS:= $(subst .s,.o,$(SRCS:%.c=$(objdir)/%.o))
-CLEANFILES+= $(notdir $(OBJS))
-endif
+all: postgres $(POSTGRES_IMP) global1.bki.source local1_template1.bki.source \
+ global1.description local1_template1.description
-#############################################################################
-#
-# TIOGA stuff
-#
-ifdef TIOGA
-SRCS+= $(SRCS_TIOGA)
- ifeq ($(BIGOBJS), true)
-TIOGA.o: $(SRCS_TIOGA:%.c=$(objdir)/%.o)
- $(make_partial)
-OBJS+= TIOGA.o
-CLEANFILES+= $(SRCS_TIOGA:%.c=%.o) TIOGA.o
- else
-OBJS+= $(SRCS_TIOGA:%.c=$(objdir)/%.o)
- endif
-endif
+postgres: $(OBJS) ../utils/version.o
+ $(CC) -o postgres $(OBJS) ../utils/version.o $(LDFLAGS)
+$(OBJS): $(DIRS:%=%.dir)
-#############################################################################
-#
-# Compiling the postgres backend.
-#
-CFLAGS+= -DPOSTGRESDIR='"$(POSTGRESDIR)"' \
- -DPGDATADIR='"$(DATADIR)"' \
- -I$(CURDIR)/. -I$(CURDIR)/$(objdir) \
- -I$(CURDIR)/include \
- -I$(CURDIR)/port/$(PORTNAME)
+$(DIRS:%=%.dir):
+ $(MAKE) -C $(subst .dir,,$@) all
-# turn this on if you prefer European style dates instead of American
-# style dates
-ifdef EUROPEAN_DATES
-CFLAGS += -DEUROPEAN_STYLE
-endif
+../utils/version.o:
+ $(MAKE) -C ../utils version.o
-# host based access flags
-ifdef HBA
-CFLAGS+= $(HBAFLAGS)
-endif
-
-#
-# All systems except NEXTSTEP require the math library.
-# Loader flags for system-dependent libraries are appended in
-# src/backend/port/$(PORTNAME)/Makefile.inc
-#
-ifneq ($(PORTNAME), next)
-LDADD+= -lm
-endif
+global1.bki.source local1_template1.bki.source \
+global1.description local1_template1.description: catalog/$@
+ cp catalog/$@ .
-# kerberos flags
-ifdef KRBVERS
-CFLAGS+= $(KRBFLAGS)
-LDADD+= $(KRBLIBS)
-endif
+catalog/global1.bki.source catalog/local1_template1.bki.source \
+catalog/global1.description catalog/local1_template1.description:
+ $(MAKE) -C catalog $@
-# statically link in libc for linux
-ifeq ($(PORTNAME), linux)
-LDADD+= -lc
-endif
+# The postgres.o target is needed by the rule in Makefile.global that
+# creates the exports file when MAKE_EXPORTS = true.
+postgres.o: $(OBJS)
+ $(CC) -r -o postgres.o $(OBJS) $(LDFLAGS)
-postgres: $(POSTGRES_DEPEND) $(OBJS) $(EXPORTS)
- $(CC) $(LDFLAGS) -o $(objdir)/$(@F) $(addprefix $(objdir)/,$(notdir $(OBJS))) $(LDADD)
-# Make this target first if you are doing a parallel make.
-# The targets in 'first' need to be made sequentially because of dependencies.
-# Then, you can make 'all' with parallelism turned on.
-first: $(POSTGRES_DEPEND)
+############################################################################
+# The following targets are specified in make commands that appear in the
+# make files in our subdirectories.
+parse.h:
+ $(MAKE) -C parser parse.h
+ cp parser/parse.h .
-#############################################################################
-#
-# Partial objects for platforms with slow linkers.
-#
-ifeq ($(BIGOBJS), true)
+fmgr.h:
+ $(MAKE) -C utils fmgr.h
+ cp utils/fmgr.h .
-OBJS_ACCESS:= $(SRCS_ACCESS:%.c=$(objdir)/%.o)
-OBJS_BOOTSTRAP:= $(SRCS_BOOTSTRAP:%.c=$(objdir)/%.o)
-OBJS_CATALOG:= $(SRCS_CATALOG:%.c=$(objdir)/%.o)
-OBJS_COMMANDS:= $(SRCS_COMMANDS:%.c=$(objdir)/%.o)
-OBJS_EXECUTOR:= $(SRCS_EXECUTOR:%.c=$(objdir)/%.o)
-OBJS_MAIN:= $(SRCS_MAIN:%.c=$(objdir)/%.o)
-OBJS_POSTMASTER:= $(SRCS_POSTMASTER:%.c=$(objdir)/%.o)
-OBJS_LIB:= $(SRCS_LIB:%.c=$(objdir)/%.o)
-OBJS_LIBPQ:= $(SRCS_LIBPQ:%.c=$(objdir)/%.o)
-OBJS_PORT:= $(addprefix $(objdir)/,$(subst .s,.o,$(SRCS_PORT:.c=.o)))
-OBJS_NODES:= $(SRCS_NODES:%.c=$(objdir)/%.o)
-OBJS_PARSER:= $(SRCS_PARSER:%.c=$(objdir)/%.o)
-OBJS_OPTIMIZER:= $(SRCS_OPTIMIZER:%.c=$(objdir)/%.o)
-OBJS_REGEX:= $(SRCS_REGEX:%.c=$(objdir)/%.o)
-OBJS_REWRITE:= $(SRCS_REWRITE:%.c=$(objdir)/%.o)
-OBJS_STORAGE:= $(SRCS_STORAGE:%.c=$(objdir)/%.o)
-OBJS_TCOP:= $(SRCS_TCOP:%.c=$(objdir)/%.o)
-OBJS_UTILS:= $(SRCS_UTILS:%.c=$(objdir)/%.o)
+#############################################################################
+clean:
+ rm -f postgres $(POSTGRES_IMP) fmgr.h parse.h \
+ global1.bki.source local1_template1.bki.source \
+ global1.description local1_template1.description
+ for i in $(DIRS); do $(MAKE) -C $$i clean; done
-ACCESS.o: $(OBJS_ACCESS)
- $(make_partial)
-BOOTSTRAP.o: $(OBJS_BOOTSTRAP)
- $(make_partial)
-COMMANDS.o: $(OBJS_COMMANDS)
- $(make_partial)
-EXECUTOR.o: $(OBJS_EXECUTOR)
- $(make_partial)
-MAIN.o: $(OBJS_MAIN) $(OBJS_POSTMASTER)
- $(make_partial)
-MISC.o: $(OBJS_CATALOG) $(OBJS_LIB) $(OBJS_LIBPQ) $(OBJS_PORT)
- $(make_partial)
-NODES.o: $(OBJS_NODES)
- $(make_partial)
-PARSER.o: $(OBJS_PARSER)
- $(make_partial)
-OPTIMIZER.o: $(OBJS_OPTIMIZER)
- $(make_partial)
-REGEX.o: $(OBJS_REGEX)
- $(make_partial)
-REWRITE.o: $(OBJS_REWRITE)
- $(make_partial)
-STORAGE.o: $(OBJS_STORAGE)
- $(make_partial)
-TCOP.o: $(OBJS_TCOP)
- $(make_partial)
-UTILS.o: $(OBJS_UTILS)
- $(make_partial)
-endif
+.DEFAULT:
+ for i in $(DIRS); do $(MAKE) -C $$i $@; done
#############################################################################
#
# Installation.
#
-# Install the bki files to the data directory. We also copy a version
-# of them that has "PGUID" intact, so one can change the value of the
-# postgres userid before running initdb in the case of customizing the
-# binary release (i.e., fixing up PGUID w/o recompiling the system).
-# Those files are copied out as foo.source. The program newbki(1) can
-# be run later to reset the postgres login id (but it must be run before
-# initdb is run, or after clearing the data directory with
-# cleardbdir(1)). [newbki distributed with v4r2 but not with Postgres95.]
-#
-
-# NAMEDATALEN=`egrep "^#define NAMEDATALEN" $(CURDIR)/include/postgres.h | awk '{print $$3}'`; \
-# OIDNAMELEN=`egrep "^#define OIDNAMELEN" $(CURDIR)/include/postgres.h | awk '{print $$3}'`; \
-
-install: beforeinstall pg_id $(BKIFILES) postgres
- $(INSTALL) $(INSTL_EXE_OPTS) $(objdir)/postgres $(DESTDIR)$(BINDIR)/postgres
- @rm -f $(DESTDIR)$(BINDIR)/postmaster
- cd $(DESTDIR)$(BINDIR); ln -s postgres postmaster
- @cd $(objdir); \
- PG_UID=`./pg_id $(POSTGRESLOGIN)`; \
- POSTGRESLOGIN=$(POSTGRESLOGIN);\
- echo "NAMEDATALEN = $(NAMEDATALEN)"; \
- echo "OIDNAMELEN = $(OIDNAMELEN)"; \
- case $$PG_UID in "NOUSER") \
- echo "Warning: no account named $(POSTGRESLOGIN), using yours";\
- POSTGRESLOGIN=`whoami`; \
- PG_UID=`./pg_id`;; \
- esac ;\
- for bki in $(BKIFILES); do \
- sed \
- -e "s/postgres PGUID/$$POSTGRESLOGIN $$PG_UID/" \
- -e "s/NAMEDATALEN/$(NAMEDATALEN)/g" \
- -e "s/OIDNAMELEN/$(OIDNAMELEN)/g" \
- -e "s/PGUID/$$PG_UID/" \
- < $$bki > $$bki.sed ; \
- echo "Installing $(DESTDIR)$(DATADIR)/files/$$bki."; \
- $(INSTALL) $(INSTLOPTS) \
- $$bki.sed $(DESTDIR)$(DATADIR)/files/$$bki; \
- rm -f $$bki.sed; \
- echo "Installing $(DESTDIR)$(DATADIR)/files/$$bki.source."; \
- $(INSTALL) $(INSTLOPTS) \
- $$bki $(DESTDIR)$(DATADIR)/files/$$bki.source; \
- done;
- @echo "Installing $(DATADIR)/pg_hba";
- @cp $(srcdir)/libpq/pg_hba $(DATADIR)
- @chmod 644 $(DATADIR)/pg_hba
-
-
-# so we can get the UID of the postgres owner (w/o moving pg_id to
-# src/tools). We just want the vanilla LDFLAGS for pg_id
-IDLDFLAGS:= $(LDFLAGS)
-ifeq ($(PORTNAME), hpux)
-ifeq ($(CC), cc)
-IDLDFLAGS+= -Aa -D_HPUX_SOURCE
+# Install the backend program (postgres) to the binary directory and
+# make a link as "postmaster". Install the bki files templates and sample
+# files to the library directory.
+#
+# (History: Before Release 2, make install generated a bki.source file
+# and then used build parameters to convert it to a bki file, then installed
+# that bki file in the /files subdirectory of the default data directory.
+# Initdb then used the bki file to generate the database catalog classes.
+# That had to change because (1) there can be more than one database system,
+# and (2) the parameters of a database system should be set at initdb time,
+# not at postgres build time.
+
+install: $(LIBDIR) $(BINDIR) $(HEADERDIR) postgres $(POSTGRES_IMP) fmgr.h\
+ global1.bki.source local1_template1.bki.source \
+ global1.description local1_template1.description \
+ libpq/pg_hba.conf.sample optimizer/geqo/pg_geqo.sample
+ $(INSTALL) $(INSTL_EXE_OPTS) postgres $(BINDIR)/postgres
+ifeq ($(MAKE_EXPORTS), true)
+ $(INSTALL) $(INSTLOPTS) $(POSTGRES_IMP) $(LIBDIR)/$(POSTGRES_IMP)
endif
-endif
-pg_id: $(srcdir)/bin/pg_id/pg_id.c
- $(CC) $(IDLDFLAGS) -o $(objdir)/$(@F) $<
-
-CLEANFILES+= pg_id postgres
-
+ @rm -f $(BINDIR)/postmaster
+ ln -s postgres $(BINDIR)/postmaster
+ $(INSTALL) $(INSTLOPTS) fmgr.h $(HEADERDIR)/fmgr.h
+ $(INSTALL) $(INSTLOPTS) global1.bki.source \
+ $(LIBDIR)/global1.bki.source
+ $(INSTALL) $(INSTLOPTS) global1.description \
+ $(LIBDIR)/global1.description
+ $(INSTALL) $(INSTLOPTS) local1_template1.bki.source \
+ $(LIBDIR)/local1_template1.bki.source
+ $(INSTALL) $(INSTLOPTS) local1_template1.description \
+ $(LIBDIR)/local1_template1.description
+ $(INSTALL) $(INSTLOPTS) libpq/pg_hba.conf.sample \
+ $(LIBDIR)/pg_hba.conf.sample
+ $(INSTALL) $(INSTLOPTS) optimizer/geqo/pg_geqo.sample \
+ $(LIBDIR)/pg_geqo.sample
+
+$(BINDIR) $(LIBDIR) $(HEADERDIR):
+ mkdir $@
#############################################################################
#
# Support for code development.
#
+# Use target "quick" to build "postgres" when you know all the subsystems
+# are up to date. It saves the time of doing all the submakes.
+.PHONY: quick
+quick: $(OBJS)
+ $(CC) -o postgres $(OBJS) $(LDFLAGS)
#
# Build the file, "./ID", used by the "gid" (grep-for-identifier) tool
IDFILE= ID
.PHONY: $(IDFILE)
$(IDFILE):
- $(CURDIR)/makeID $(PORTNAME)
+ ./makeID
#
# Special rule to generate cpp'd version of a .c file. This is
# especially useful given all the hellish macro processing going on.
# The cpp'd version has a .C suffix. To create foo.C from foo.c, just
# type
-# bmake foo.C
+# make foo.C
#
%.cpp: %.c
- $(CC) -E $(CFLAGS) $(<:.C=.c) | cat -s | cb | tr -s '\012*' '\012' > $(objdir)/$(@F)
-
-cppall: $(SRCS:.c=.cpp)
-
-#
-# To use Purify (SunOS only), define PURIFY to be the path (and
-# options) with which to invoke the Purify loader. Only the executable
-# needs to be loaded with Purify.
-#
-# PURIFY = /usr/sww/bin/purify -cache-dir=/usr/local/postgres/src/backend/purify-cache
-#.if defined(PURIFY)
-#${PROG}: $(POSTGRES_DEPEND) $(OBJS) $(EXPORTS)
-# ${PURIFY} ${CC} ${LDFLAGS} -o $(objdir)/$(@F) $(addprefix $(objdir)/,$(notdir $(OBJS))) $(LDADD)
-#
-#CLEANFILES+= .purify* .pure .lock.*.o *_pure_*.o *.pure_*link*
-#.endif
-
+ $(CC) -E $(CFLAGS) $(<:.C=.c) | cat -s | cb | tr -s '\012*' '\012' \
+ > $(@F)