# ----------------------------------------------------------------
#    Makefile for POSTGRES support code
#
#	$Header: Makefile,v 1.2 89/02/04 11:50:49 goh Exp $
# ----------------------------------------------------------------

# ----------------
#    conf.local contains all the configuration definitions
# ----------------

#include "conf.local"

# ----------------
#    support settings
# ----------------

AMIINT		=	$(DATAHOME)/bin/amiint
SCRDIR		=	$(DATAHOME)/src/support

DFLAGS		=	-DAMIINT='"$(AMIINT)"' \
			-DSCRDIR='"$(SCRDIR)"' \
			-DDATAHOME='"$(DATAHOME)"'

BUFIFLAGS	=	-I$(OBJDIR)/storage/buffer

IFLAGS		=	-I$(HDRDIR)

CFLAGS		=	-O -DEBUG -DPOSTMASTERLOG -DVACUUMDLOG $(IFLAGS)

LIBS		=	-lm -ll

# ----------------
#    port.mk contains port-specific information, including
#    PORTSRCDIR and PORTOBJDIR
# ----------------

#include "CONF/port.mk"

# ----------------
#    Definition of search paths
# ----------------

PMAKE_VPATH_SRCS ?=	./ \
			$(SRCDIR)/$(LISPLIB) \
			$(SRCDIR)/access/genam \
			$(SRCDIR)/access/heap \
			$(SRCDIR)/access/index-btree \
			$(SRCDIR)/access/spam \
			$(SRCDIR)/access/tuple \
			$(SRCDIR)/commands \
			$(SRCDIR)/lib/C \
			$(SRCDIR)/lib/libpq \
			$(SRCDIR)/lib/libpq/demo \
			$(SRCDIR)/lib/libpqcl \
			$(SRCDIR)/lib/catalog \
			$(SRCDIR)/parser \
			$(SRCDIR)/storage/buffer \
			$(SRCDIR)/storage/ipc \
			$(SRCDIR)/storage/lmgr \
			$(SRCDIR)/storage/page \
			$(SRCDIR)/storage/file \
			$(SRCDIR)/support \
			$(SRCDIR)/test \
			$(SRCDIR)/utils/adt \
			$(SRCDIR)/utils/cache \
			$(SRCDIR)/utils/fmgr \
			$(SRCDIR)/utils/init \
			$(SRCDIR)/utils/mmgr \
			$(SRCDIR)/utils/error \
			$(SRCDIR)/utils/comm \
			$(SRCDIR)/utils/xact \
			$(SRCDIR)/utils/time \
			$(SRCDIR)/utils/rules

PMAKE_VPATH_HDRS ?=	./ $(SRCDIR) $(HDRDIR)

PMAKE_VPATH_OBJS ?=	./ \
			$(OBJDIR)/$(LISPLIB) \
			$(OBJDIR)/access/genam \
			$(OBJDIR)/access/heap \
			$(OBJDIR)/access/index-btree \
			$(OBJDIR)/access/spam \
			$(OBJDIR)/access/tuple \
			$(OBJDIR)/commands \
			$(OBJDIR)/lib/C \
			$(OBJDIR)/lib/libpq \
			$(OBJDIR)/lib/libpq/demo \
			$(OBJDIR)/lib/libpqcl \
			$(OBJDIR)/lib/catalog \
			$(OBJDIR)/parser \
			$(OBJDIR)/storage/buffer \
			$(OBJDIR)/storage/ipc \
			$(OBJDIR)/storage/lmgr \
			$(OBJDIR)/storage/page \
			$(OBJDIR)/storage/file \
			$(OBJDIR)/support \
			$(OBJDIR)/test \
			$(OBJDIR)/utils/adt \
			$(OBJDIR)/utils/cache \
			$(OBJDIR)/utils/fmgr \
			$(OBJDIR)/utils/init \
			$(OBJDIR)/utils/mmgr \
			$(OBJDIR)/utils/error \
			$(OBJDIR)/utils/comm \
			$(OBJDIR)/utils/xact \
			$(OBJDIR)/utils/time \
			$(OBJDIR)/utils/rules

# ----------------
#    Definition of sources
# ----------------

#
# local postmaster files
#

LOCALPMSRCS=	buf_sync.c \
		itemptr.c

LOCALPMOBJS=	$(LOCALPMSRCS:S/.c/.o/g)

#
# local support files
#

LOCALSRCS=	daemon.c \
		suputils.c

LOCALOBJS=	$(LOCALSRCS:S/.c/.o/g)

#
# amiint files
#

AMISRCS=	ami_parser.c \
		ami_lexer.c \
		ami_sup.c

AMIOBJS=	$(AMISRCS:S/.c/.o/g)

#
# sources of targets
#

TARGETSRCS=	createdb.c \
		destroydb.c \
		postmaster.c \
		dumpbpages.c \
		vacuumd.c \
		oamiint.c

#
# special sources
#

SPECIALSRCS=	fmgr.c \
		elog.c \
		syscache.c

SPECIALOBJS=	$(SPECIALSRCS:S/.c/.o/g)

SPECIALFLAGS=	-DPG_STANDALONE $(DFLAGS)

#
# generalized sources
#

SOURCES=	$(LOCALSRCS) \
		$(SPECIALSRCS) \
		$(TARGETSRCS) \
		nullbufmgr.o

#
# access method objs
#

GENAMOBJS= \
	$(SPECIALOBJS) \
	access.o \
	assert.o \
	att.o \
	attnum.o \
	attval.o \
	bit.o \
	block.o \
	bool.o \
	btdata.o \
	bthacks.o \
	bthdr.o \
	btinsrt.o \
	btitem.o \
	btkey.o \
	btlock.o \
	btnode.o \
	btpage.o \
	btqual.o \
	btree.o \
	btscan.o \
	btsrch.o \
	btstk.o \
	btstrat.o \
	buf.o \
	bufmgr.o \
	bufpage.o \
	buf_sync.o \
	catalog.o \
	catcache.o \
	catname.o \
	char.o \
	cinit.o \
	context.o \
	create.o \
	creati.o \
	date.o \
	datum.o \
	defind.o \
	dlog.o \
	dt.o \
	fd.o \
	float.o \
	form.o \
	format.o \
	ftup.o \
	genam.o \
	geo-ops.o \
	geo-selfuncs.o \
	hash.o \
	hashlib.o \
	heapam.o \
	hio.o \
	hrnd.o \
	htup.o \
	imark.o \
	initspam.o \
	int.o \
	inval.o \
	ipc.o \
	ipci.o \
	iqual.o \
	isop.o \
	istrat.o \
	itemid.o \
	itemptr.o \
	itup.o \
	linval.o \
	lmgr.o \
	log-blocktuple.o \
	log-primitives.o \
	magic.o \
	mmgr.o \
	name.o \
	newam.o \
	numutils.o \
	off.o \
	oid.o \
	order.o \
	page.o \
	pagenum.o \
	part.o \
	pcomm.o \
	pladt.o \
	pladtdeb.o \
	pldebug.o \
	plm.o \
	plsync.o \
	pos.o \
	pskip.o \
	rac.o \
	regproc.o \
	rel.o \
	relcache.o \
	sdir.o \
	selfuncs.o \
	sinval.o \
	sinvaladt.o \
	skey.o \
	spam-accessors.o \
	spam-control.o \
	spam-debug.o \
	spam-index.o \
	spam-mmgr.o \
	spam-primitives.o \
	spam-utils.o \
	tim.o \
	time-blocktuple.o \
	time-dirtuple.o \
	time-primitives.o \
	tqual.o \
	trange.o \
	tuple.o \
	valid.o \
	var-access.o \
	varlena.o \
	xcxt.o \
	xid.o \
	xlog.o \
	xstate.o \
	xtim.o

#
# target objs
#

NAMIINTOBJS= \
	$(GENAMOBJS) \
	utils.o

AMIINTOBJS= \
	$(NAMIINTOBJS)

CREATEDBOBJS= \
	$(LOCALOBJS) \
	elog.o \
	assert.o \
	magic.o

DESTROYDBOBJS= \
	$(GENAMOBJS) \
	$(LOCALOBJS)

DUMPBPAGESOBJS= \
	nullbufmgr.o \
	block.o \
	bufpage.o \
	itemid.o \
	itemptr.o \
	off.o \
	page.o \
	part.o \
	pos.o \
	xid.o

POSTMASTEROBJS= \
	$(LOCALOBJS) \
	$(LOCALPMOBJS) \
	elog.o \
	assert.o \
	block.o \
	context.o \
	dlog.o \
	format.o \
	ipc.o \
	ipci.o \
	mmgr.o \
	name.o \
	pladt.o \
	pladtdeb.o \
	pldebug.o \
	plm.o \
	plsync.o \
	pos.o \
	sinval.o \
	sinvaladt.o \
	xid.o

VACUUMDOBJS= \
	$(DESTROYDBOBJS)

#---------
# on pain of death, do not include $(GENAMOBJS)
# $(NAMIINTOBJS) , $(AMIINTOBJS) $(DESTROYDBOBJS)
# $(DUMPBPAGESOBJS)
# to the list below
#-----------
OBJS= $(LOCALOBJS) $(LOCALPMOBJS) $(CREATEDBOBJS) \
	$(AMIOBJS) 

LIBPQ=	$(OBJDIR)/lib/libpq/libpq.a


ALL=	amiint createdb destroydb postmaster dumpbpages vacuumd


stdout		?=	/dev/tty

# ----------------
#    default.mk contains standard make information like
#    transformation rules, what compiler to use, etc.
# ----------------

#include "CONF/default.mk"

# ----------------
#    targets
# ----------------

.MAIN:	Main

Main:	$(ALL)

dumpbpages: $(START) dumpbpages.o $(DUMPBPAGESOBJS) 
	$(cc) -o $(.TARGET) $(.ALLSRC) $(LIBS)
	$(chmod) $(BINMODE) $(.TARGET)

createdb: $(START) createdb.o $(CREATEDBOBJS) $(LIBPQ) 
	$(cc) -o $(.TARGET) $(.ALLSRC)  $(LIBS)
	$(chmod) $(BINMODE) $(.TARGET)

destroydb: $(START) destroydb.o $(DESTROYDBOBJS) 
	$(cc) -o $(.TARGET) $(.ALLSRC) $(LIBS)
	$(chmod) $(BINMODE) $(.TARGET)

vacuumd: $(START) vacuumd.o $(VACUUMDOBJS) 
	$(cc) -o $(.TARGET) $(.ALLSRC) $(LIBS)
	$(chmod) $(BINMODE) $(.TARGET)

amiint: $(START) oamiint.o $(AMIINTOBJS)  
	$(cc) -o $(.TARGET) $(.ALLSRC) $(LIBS)
	$(chmod) $(BINMODE) $(.TARGET)

# ami.h might be a problem
namiint: $(START) ami.h $(AMIOBJS) $(NAMIINTOBJS) 
	$(cc) -o $(.TARGET) $(.ALLSRC) $(LIBS)
	$(chmod) $(BINMODE) $(.TARGET)

postmaster: $(START) postmaster.o $(POSTMASTEROBJS) 
	$(cc) -o $(.TARGET) $(.ALLSRC) $(LIBS)
	$(chmod) $(BINMODE) $(.TARGET)

# ----------------
#	currently have to use ! here because these have
#	to be compiled specially (flags are different)
#	there should be a better way around this.
# ----------------

buf_sync.o! $(START) buf_sync.c 
	$(cc) $(BUFIFLAGS) -c $(.ALLSRC)

elog.o! $(START) elog.c  
	$(cc) $(SPECIALFLAGS) -c $(.ALLSRC)

fmgr.o! $(START) fmgr.c  
	$(cc) $(SPECIALFLAGS) -c $(.ALLSRC)

itemptr.o! $(START) itemptr.c 
	$(cc) -c $(.ALLSRC)

relcache.o! $(START) relcache.c  
	$(cc) $(SPECIALFLAGS) -c $(.ALLSRC)

syscache.o! $(START) syscache.c 
	$(cc) $(SPECIALFLAGS) -c $(.ALLSRC)

# ----------------
#
# ----------------

ami_parser.o: $(START) ami_parser.y 
	$(yacc) -dv ami_parser.y
	$(mv) y.tab.c ami_parser.c
	$(cc) -c ami_parser.c

ami_lexer.c: $(START) ami_lexer.l 
	$(lex) ami_lexer.l
	$(mv) lex.yy.c ami_lexer.c

# ----------------
#
# ----------------

$(LIBPQ):: $(START)  
	$(echo) "Making $@ ... "
	$(cd) $(OBJDIR)/lib/libpq
	pmake libpq.a

# ----------------
#
# ----------------

install:: $(START)  \
		$(BINDIR)/amiint \
		$(BINDIR)/createdb \
		$(BINDIR)/destroydb \
		$(BINDIR)/dumpbpages \
		$(BINDIR)/postmaster \
		$(BINDIR)/vacuumd

$(BINDIR)/amiint: $(START) amiint  
	$(cp) amiint $(.TARGET)
	$(chmod) $(BINMODE) $(.TARGET)

$(BINDIR)/createdb: $(START) createdb  
	$(cp) createdb $(.TARGET)
	$(chmod) $(SUMODE) $(.TARGET)

$(BINDIR)/destroydb: $(START) destroydb  
	$(cp) destroydb $(.TARGET)
	$(chmod) $(SUMODE) $(.TARGET)

$(BINDIR)/dumpbpages: $(START) dumpbpages  
	$(cp) dumpbpages $(.TARGET)
	$(chmod) $(BINMODE) $(.TARGET)

$(BINDIR)/postmaster: $(START) postmaster  
	$(cp) postmaster $(.TARGET)
	$(chmod) $(BINMODE) $(.TARGET)

$(BINDIR)/vacuumd: $(START) vacuumd  
	$(cp) vacuumd $(.TARGET)
	$(chmod) $(BINMODE) $(.TARGET)
