mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-23 04:10:41 +02:00
290 lines
9.5 KiB
Makefile
290 lines
9.5 KiB
Makefile
#-------------------------------------------------------------------------
|
|
#
|
|
# Makefile--
|
|
# 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.41 1999/12/13 22:32:16 momjian Exp $
|
|
#
|
|
#-------------------------------------------------------------------------
|
|
|
|
SRCDIR = ..
|
|
include ../Makefile.global
|
|
|
|
DIRS = access bootstrap catalog commands executor lib libpq \
|
|
main parser nodes optimizer port postmaster regex rewrite \
|
|
storage tcop utils
|
|
|
|
ifdef TIOGA
|
|
DIRS += tioga
|
|
endif
|
|
|
|
OBJS = $(DIRS:%=%/SUBSYS.o)
|
|
|
|
# kerberos flags
|
|
|
|
ifdef KRBVERS
|
|
CFLAGS+= $(KRBFLAGS)
|
|
LDFLAGS+= $(KRBLIBS)
|
|
endif
|
|
|
|
ifeq ($(MAKE_DLL), true)
|
|
DLLOBJS=$(OBJS)
|
|
DLLOBJS+= ../utils/version.o
|
|
DLLLIBS= -L/usr/local/lib -lcygipc -lcrypt -lcygwin -lkernel32
|
|
|
|
postgres.def: $(DLLOBJS)
|
|
$(DLLTOOL) --export-all --output-def $@ $(DLLOBJS)
|
|
|
|
libpostgres.a: $(DLLOBJS) ../utils/dllinit.o postgres.def
|
|
$(DLLTOOL) --dllname postgres.exe --def postgres.def --output-lib $@
|
|
endif
|
|
|
|
all: postgres $(POSTGRES_IMP) global1.bki.source local1_template1.bki.source \
|
|
global1.description local1_template1.description
|
|
|
|
ifneq ($(PORTNAME), win)
|
|
postgres: fmgr.h $(OBJS) ../utils/version.o
|
|
$(CC) -o postgres $(OBJS) ../utils/version.o $(LDFLAGS)
|
|
else
|
|
postgres: $(DLLOBJS) ../utils/dllinit.o postgres.def libpostgres.a
|
|
dlltool --dllname $@$(X) --output-exp $@.exp --def postgres.def
|
|
gcc -g -o $@$(X) -Wl,--base-file,$@.base $@.exp $(DLLOBJS) $(DLLLIBS)
|
|
dlltool --dllname $@$(X) --base-file $@.base --output-exp $@.exp --def postgres.def
|
|
gcc -g -o $@$(X) $@.exp $(DLLOBJS) $(DLLLIBS)
|
|
rm $@.exp $@.base
|
|
endif
|
|
|
|
#.PHONY: postgres
|
|
|
|
$(OBJS): $(DIRS:%=%.dir)
|
|
|
|
$(DIRS:%=%.dir):
|
|
$(MAKE) -C $(subst .dir,,$@) all
|
|
|
|
../utils/version.o:
|
|
$(MAKE) -C ../utils version.o
|
|
|
|
../utils/dllinit.c:
|
|
$(MAKE) -C ../utils dllinit.o
|
|
|
|
global1.bki.source local1_template1.bki.source \
|
|
global1.description local1_template1.description: catalog/$@
|
|
cp catalog/$@ .
|
|
|
|
catalog/global1.bki.source catalog/local1_template1.bki.source \
|
|
catalog/global1.description catalog/local1_template1.description:
|
|
$(MAKE) -C catalog $@
|
|
|
|
# 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) $(LDREL) $(LDOUT) postgres.o $(OBJS) $(LDFLAGS)
|
|
|
|
############################################################################
|
|
# The following targets are specified in make commands that appear in the
|
|
# make files in our subdirectories.
|
|
|
|
parse.h: parser/parse.h
|
|
cp parser/parse.h .
|
|
|
|
parser/parse.h:
|
|
$(MAKE) -C parser parse.h
|
|
|
|
fmgr.h: utils/fmgr.h
|
|
cp utils/fmgr.h .
|
|
|
|
utils/fmgr.h:
|
|
$(MAKE) -C utils fmgr.h
|
|
|
|
#############################################################################
|
|
clean:
|
|
rm -f postgres$(X) $(POSTGRES_IMP) fmgr.h parse.h \
|
|
global1.bki.source local1_template1.bki.source \
|
|
global1.description local1_template1.description
|
|
ifeq ($(PORTNAME), win)
|
|
ifeq ($(MAKE_DLL), true)
|
|
rm -f postgres.dll postgres.def libpostgres.a
|
|
endif
|
|
endif
|
|
for i in $(DIRS); do $(MAKE) -C $$i clean; done
|
|
|
|
.DEFAULT:
|
|
for i in $(DIRS); do $(MAKE) -C $$i $@; done
|
|
|
|
#############################################################################
|
|
#
|
|
# Installation.
|
|
#
|
|
# 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. Install exported headers to the include
|
|
# directory (these headers are the minimal ones needed to build loadable
|
|
# backend extensions).
|
|
#
|
|
# (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.
|
|
|
|
.PHONY: install install-bin install-lib install-headers
|
|
|
|
install: $(LIBDIR) $(BINDIR) $(HEADERDIR) postgres $(POSTGRES_IMP) \
|
|
install-bin install-lib install-headers
|
|
|
|
install-bin: $(BINDIR) postgres$(X) $(POSTGRES_IMP)
|
|
$(INSTALL) $(INSTL_EXE_OPTS) postgres$(X) $(BINDIR)/postgres$(X)
|
|
@rm -f $(BINDIR)/postmaster
|
|
ln -s postgres$(X) $(BINDIR)/postmaster
|
|
ifeq ($(MAKE_EXPORTS), true)
|
|
$(INSTALL) $(INSTLOPTS) $(POSTGRES_IMP) $(LIBDIR)/$(POSTGRES_IMP)
|
|
endif
|
|
ifeq ($(PORTNAME), win)
|
|
ifeq ($(MAKE_DLL), true)
|
|
# $(INSTALL) $(INSTLOPTS) postgres.dll $(BINDIR)/postgres.dll
|
|
$(INSTALL) $(INSTLOPTS) libpostgres.a $(LIBDIR)/libpostgres.a
|
|
endif
|
|
endif
|
|
|
|
install-lib: $(LIBDIR) \
|
|
global1.bki.source local1_template1.bki.source \
|
|
global1.description local1_template1.description \
|
|
libpq/pg_hba.conf.sample optimizer/geqo/pg_geqo.sample
|
|
$(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
|
|
|
|
install-headers: fmgr.h $(SRCDIR)/include/config.h
|
|
@if [ ! -d $(HEADERDIR) ]; then mkdir $(HEADERDIR); fi
|
|
@if [ ! -d $(HEADERDIR)/port ]; then mkdir $(HEADERDIR)/port; fi
|
|
@if [ ! -d $(HEADERDIR)/port/$(PORTNAME) ]; \
|
|
then mkdir $(HEADERDIR)/port/$(PORTNAME); fi
|
|
@if [ ! -d $(HEADERDIR)/lib ]; \
|
|
then mkdir $(HEADERDIR)/lib; fi
|
|
@if [ ! -d $(HEADERDIR)/libpq ]; \
|
|
then mkdir $(HEADERDIR)/libpq; fi
|
|
@if [ ! -d $(HEADERDIR)/utils ]; \
|
|
then mkdir $(HEADERDIR)/utils; fi
|
|
@if [ ! -d $(HEADERDIR)/access ]; \
|
|
then mkdir $(HEADERDIR)/access; fi
|
|
@if [ ! -d $(HEADERDIR)/executor ]; \
|
|
then mkdir $(HEADERDIR)/executor; fi
|
|
@if [ ! -d $(HEADERDIR)/commands ]; \
|
|
then mkdir $(HEADERDIR)/commands; fi
|
|
$(INSTALL) $(INSTLOPTS) fmgr.h \
|
|
$(HEADERDIR)/fmgr.h
|
|
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/os.h \
|
|
$(HEADERDIR)/os.h
|
|
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/config.h \
|
|
$(HEADERDIR)/config.h
|
|
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/c.h \
|
|
$(HEADERDIR)/c.h
|
|
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/postgres.h \
|
|
$(HEADERDIR)/postgres.h
|
|
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/postgres_ext.h \
|
|
$(HEADERDIR)/postgres_ext.h
|
|
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/libpq/pqcomm.h \
|
|
$(HEADERDIR)/libpq/pqcomm.h
|
|
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/libpq/libpq-fs.h \
|
|
$(HEADERDIR)/libpq/libpq-fs.h
|
|
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/lib/dllist.h \
|
|
$(HEADERDIR)/lib/dllist.h
|
|
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/utils/geo_decls.h \
|
|
$(HEADERDIR)/utils/geo_decls.h
|
|
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/utils/elog.h \
|
|
$(HEADERDIR)/utils/elog.h
|
|
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/utils/palloc.h \
|
|
$(HEADERDIR)/utils/palloc.h
|
|
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/utils/mcxt.h \
|
|
$(HEADERDIR)/utils/mcxt.h
|
|
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/access/attnum.h \
|
|
$(HEADERDIR)/access/attnum.h
|
|
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/executor/spi.h \
|
|
$(HEADERDIR)/executor/spi.h
|
|
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/commands/trigger.h \
|
|
$(HEADERDIR)/commands/trigger.h
|
|
ifeq ($(PORTNAME), hpux)
|
|
# is this still necessary?
|
|
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/backend/port/hpux/fixade.h \
|
|
$(HEADERDIR)/port/hpux/fixade.h
|
|
endif
|
|
|
|
|
|
$(BINDIR):
|
|
mkdir $@
|
|
$(LIBDIR):
|
|
mkdir $@
|
|
$(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):
|
|
./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
|
|
# make foo.C
|
|
#
|
|
%.cpp: %.c
|
|
$(CC) -E $(CFLAGS) $(<:.C=.c) | cat -s | cb | tr -s '\012*' '\012' \
|
|
> $(@F)
|