]> granicus.if.org Git - postgresql/blobdiff - src/backend/Makefile
Goodbye register keyword. Compiler knows better.
[postgresql] / src / backend / Makefile
index fbde3abee0cc22528e0e5533e376073ad4fce868..60b2d6f60d2be6078b02e6a97a4d053caf35b0cd 100644 (file)
 #-------------------------------------------------------------------------
 #
 # 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
@@ -258,30 +168,15 @@ CLEANFILES+= pg_id postgres
 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)