#	$Id$
#
# Makefile.in for cxxcom
#
VPATH=@srcdir@
srcdir=@srcdir@
top_srcdir=@top_srcdir@
builddir=@builddir@
top_builddir=@top_builddir@
CC = @CC@
EXEEXT = @EXEEXT@
CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@ @ADD_CFLAGS@
CPPFLAGS = @CPPFLAGS@ @ADD_CPPFLAGS@ -D_ISOC99_SOURCE -DLANG_CXX \
	-Dos_$(TARGOS) -Dmach_$(TARGMACH) \
	-I$(srcdir) -I$(builddir) -I$(top_builddir) -I$(MIPDIR) -I$(MDIR) \
	-I$(top_srcdir)/os/$(TARGOS) -I$(COMMONDIR)
LIBS = @LIBS@
LDFLAGS = @LDFLAGS@
LEX = @LEX@
LFLAGS =
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
YACC = @YACC@
YFLAGS = @YFLAGS@
TARGOS = @targos@
TARGOSVER = @targosver@
TARGMACH = @targmach@
TARGMACHDIR = @targmachdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
libexecdir = @libexecdir@
datarootdir = @datarootdir@
mandir = @mandir@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@

MDIR=$(top_srcdir)/arch/$(TARGMACHDIR)
MIPDIR=$(top_srcdir)/mip
COMMONDIR=$(top_srcdir)/common

DEST=@BINPREFIX@cxxcom$(EXEEXT)
MANPAGE=@BINPREFIX@cxxcom
MKEXT=mkext$(EXEEXT)

all: $(DEST)

OBJS=	builtins.o cgram.o code.o common.o compat.o external.o		\
	gcc_compat.o init.o inline.o local.o local2.o main.o cxxcode.o	\
	match.o optim.o optim2.o order.o pftn.o reader.o		\
	regs.o scan.o stabs.o symtabs.o table.o trees.o

LOBJS=	mkext.lo common.lo table.lo

HDRS=	$(srcdir)/pass1.h $(MIPDIR)/pass2.h $(MIPDIR)/manifest.h	\
	$(MDIR)/macdefs.h $(MIPDIR)/node.h $(COMMONDIR)/compat.h

#
# round 1: generate external.[ch], cgram.[ch] & scan.c
#

$(LOBJS): $(HDRS)

mkext.lo: $(MIPDIR)/mkext.c
	$(CC_FOR_BUILD) $(CFLAGS) $(CPPFLAGS) -DMKEXT -c -o $@ $(MIPDIR)/mkext.c

common.lo: $(MIPDIR)/common.c
	$(CC_FOR_BUILD) $(CFLAGS) $(CPPFLAGS) -DMKEXT -c -o $@ $(MIPDIR)/common.c

table.lo: $(MDIR)/table.c
	$(CC_FOR_BUILD) $(CFLAGS) $(CPPFLAGS) -DMKEXT -c -o $@ $(MDIR)/table.c

$(MKEXT): $(LOBJS)
	$(CC_FOR_BUILD) $(LDFLAGS) $(LOBJS) -o $@ $(LIBS)

external.c: $(MKEXT)
	$(builddir)/$(MKEXT)

cgram.c: $(srcdir)/cgram.y
	$(YACC) $(YFLAGS) -d $(srcdir)/cgram.y
	mv -f y.tab.c cgram.c
	mv -f y.tab.h cgram.h

scan.c: $(srcdir)/scan.l
	$(LEX) $(LFLAGS) $(srcdir)/scan.l
	mv -f $(LEX_OUTPUT_ROOT).c scan.c

#
# round 2: compile $(OBJS)
#

$(OBJS): $(HDRS) external.c cgram.c

builtins.o: $(srcdir)/builtins.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/builtins.c

cgram.o: cgram.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ cgram.c

code.o: $(MDIR)/code.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MDIR)/code.c

common.o: $(MIPDIR)/common.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MIPDIR)/common.c

compat.o: $(COMMONDIR)/compat.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(COMMONDIR)/compat.c

cxxcode.o: $(srcdir)/cxxcode.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/cxxcode.c

external.o: external.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ external.c

gcc_compat.o: $(srcdir)/gcc_compat.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/gcc_compat.c

init.o: $(srcdir)/init.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/init.c

inline.o: $(srcdir)/inline.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/inline.c

local.o: $(MDIR)/local.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MDIR)/local.c

local2.o: $(MDIR)/local2.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MDIR)/local2.c

main.o: $(srcdir)/main.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/main.c

match.o: $(MIPDIR)/match.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MIPDIR)/match.c

optim.o: $(srcdir)/optim.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/optim.c

optim2.o: $(MIPDIR)/optim2.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MIPDIR)/optim2.c

order.o: $(MDIR)/order.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MDIR)/order.c

pftn.o: $(srcdir)/pftn.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/pftn.c

reader.o: $(MIPDIR)/reader.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MIPDIR)/reader.c

regs.o: $(MIPDIR)/regs.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MIPDIR)/regs.c

scan.o: scan.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ scan.c

stabs.o: $(srcdir)/stabs.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/stabs.c

symtabs.o: $(srcdir)/symtabs.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/symtabs.c

table.o: $(MDIR)/table.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MDIR)/table.c

trees.o: $(srcdir)/trees.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/trees.c

#
# round 3: build $(DEST)
#

$(DEST): $(OBJS)
	$(CC) $(LDFLAGS) $(OBJS) -o $@ $(LIBS)

install: $(DEST)
	test -z "$(DESTDIR)$(libexecdir)" || mkdir -p "$(DESTDIR)$(libexecdir)"
	$(INSTALL_PROGRAM) $(DEST) $(DESTDIR)$(libexecdir)
	test -z "$(DESTDIR)$(mandir)/man1" || mkdir -p "$(DESTDIR)$(mandir)/man1"
#	$(INSTALL_DATA) $(srcdir)/ccom.1 $(DESTDIR)$(mandir)/man1/$(MANPAGE).1

clean:
	rm -f $(DEST) $(OBJS) $(MKEXT) $(LOBJS) $(LEX_OUTPUT_ROOT).c	\
	    scan.c y.tab.[ch] cgram.[ch] external.[ch]

distclean: clean
	rm -f Makefile
