# *************************************************************************
# *                                                                       *
# *  Makefile for                                                         *
# *                                                                       *
# *  Compiler Construction Tool Box                                       *
# *  ==============================                                       *
# *                                                                       *
# *  Copyright (c) 1989, 1990, 1991, 1992 by                              *
# *                                                                       *
# *  Gesellschaft fuer Mathematik und Datenverarbeitung                   *
# *  (German National Research Center for Computer Science)               *
# *  Forschungsstelle fuer Programmstrukturen                             *
# *  an der Universitaet Karlsruhe                                        *
# *                                                                       *
# *  All rights reserved. GMD assumes no responsibility for the use       *
# *  or reliability of its software.                                      *
# *                                                                       *
# *************************************************************************

# Choose a suitable C compiler
CC	= cc

# Choose optimizer flags for the C compiler
OPT	=

# Choose a suitable Modula compiler
# MC or M2C
MC	= MC

# BSD needs this
MAKE	= make

# The place to install the binaries
BIN	= $(HOME)/bin

# The libraries go there
LIB	= $(HOME)/lib

# Directory for man pages
MANDIR	= $(HOME)/lib

# Where to put include files for reuse
INCDIR	= $(LIB)/include

# The following targets are legal:
# PCS10
# PCS20
# SUN (also valid for DECstations and VAX)
TARGET	= SUN

# For PCS10 you must define
# OPT = "-DPCS10"

# Choose the source language:
LANGUAGE = c
# LANGUAGE = modula

# ****************************************************************
# *	DON'T CHANGE ANYTHING BELOW THIS LINE !
# ****************************************************************

MFLAGS	= BIN=$(BIN) LIB=$(LIB) CC=$(CC) OPT=$(OPT) MC=$(MC)

CTARGETS = \
	reuselib \
	c_reuse \
	c_common \
	c_rex \
	c_front \
	c_bnf \
	c_ell \
	c_lalr \
	c_l2r \
	c_y2l \
	c_r2l \
	c_rpp \
	c_cg \
	c_puma \
	c_estra

MTARGETS = \
	reuselib \
	m_reuse \
	m_common \
	m_rex \
	m_front \
	m_bnf \
	m_ell \
	m_lalr \
	c_l2r \
	c_y2l \
	m_r2l \
	m_rpp \
	m_cg \
	m_puma \
	m_mpp \
	m_estra

all:	$(LANGUAGE)

install:	install$(LANGUAGE)

reuselib:
	@echo; echo "Making public reuse library"
	cd reuse/c; $(MAKE) $(MFLAGS) TARGET=$(TARGET)

c:	$(CTARGETS)

c_reuse:
	@echo; echo "Making local reuse library"
	cd reuse/m2c; $(MAKE) $(MFLAGS)
c_common:
	@echo; echo "Making common"
	cd common/m2c; $(MAKE) $(MFLAGS)
c_rex:
	@echo; echo "Making rex"
	cd rex/m2c; $(MAKE) $(MFLAGS)
c_front:
	@echo; echo "Making front"
	cd front/m2c; $(MAKE) $(MFLAGS)
c_bnf:
	@echo; echo "Making bnf"
	cd bnf/m2c; $(MAKE) $(MFLAGS)
c_ell:
	@echo; echo "Making ell"
	cd ell/m2c; $(MAKE) $(MFLAGS)
c_lalr:
	@echo; echo "Making lalr"
	cd lalr/m2c; $(MAKE) $(MFLAGS)
c_l2r:
	@echo; echo "Making l2r"
	cd l2r; $(MAKE) $(MFLAGS)
c_y2l:
	@echo; echo "Making y2l"
	cd y2l; $(MAKE) $(MFLAGS)
c_r2l:
	@echo; echo "Making r2l"
	cd r2l/m2c; $(MAKE) $(MFLAGS)
c_rpp:
	@echo; echo "Making rpp"
	cd rpp/m2c; $(MAKE) $(MFLAGS)
c_cg:
	@echo; echo "Making cg"
	cd cg/m2c; $(MAKE) $(MFLAGS)
c_puma:
	@echo; echo "Making puma"
	cd puma/m2c; $(MAKE) $(MFLAGS)
c_estra:
	@echo; echo "Making estra"
	cd estra/m2c; $(MAKE) $(MFLAGS)

installc:	c_reuse c_common
	sh -c "if test ! -d $(BIN); then mkdir $(BIN); else true; fi"
	sh -c "if test ! -d $(LIB); then mkdir $(LIB); else true; fi"
	sh -c "if test ! -d $(MANDIR); then mkdir $(MANDIR); else true; fi"
	sh -c "if test ! -d $(INCDIR); then mkdir $(INCDIR); else true; fi"
	cd reuse/c	; $(MAKE) install $(MFLAGS) TARGET=$(TARGET) INCDIR=$(INCDIR)
	cd rex/m2c	; $(MAKE) install $(MFLAGS)
	cd front/m2c	; $(MAKE) install $(MFLAGS)
	cd bnf/m2c	; $(MAKE) install $(MFLAGS)
	cd ell/m2c	; $(MAKE) install $(MFLAGS)
	cd lalr/m2c	; $(MAKE) install $(MFLAGS)
	cd front/doc	; $(MAKE) install $(MFLAGS)
	cd l2r		; $(MAKE) install $(MFLAGS)
	cd y2l		; $(MAKE) install $(MFLAGS)
	cd r2l/m2c	; $(MAKE) install $(MFLAGS)
	cd rpp/m2c	; $(MAKE) install $(MFLAGS)
	cd cg/m2c	; $(MAKE) install $(MFLAGS)
	cd puma/m2c	; $(MAKE) install $(MFLAGS)
	cd estra/m2c	; $(MAKE) install $(MFLAGS)
	cd man; cp * $(MANDIR); chmod a+r $(MANDIR)/*.1


modula:	$(MTARGETS)

m_reuse:
	@echo; echo "Making local reuse library"
	cd reuse/src; $(MAKE) $(MFLAGS)
m_common:
	@echo; echo "Making common"
	cd common/src; $(MAKE) $(MFLAGS)
m_rex:
	@echo; echo "Making rex"
	cd rex/src; $(MAKE) $(MFLAGS)
m_front:
	@echo; echo "Making front"
	cd front/src; $(MAKE) $(MFLAGS)
m_bnf:
	@echo; echo "Making bnf"
	cd bnf/src; $(MAKE) $(MFLAGS)
m_ell:
	@echo; echo "Making ell"
	cd ell/src; $(MAKE) $(MFLAGS)
m_lalr:
	@echo; echo "Making lalr"
	cd lalr/src; $(MAKE) $(MFLAGS)
m_r2l:
	@echo; echo "Making r2l"
	cd r2l/src; $(MAKE) $(MFLAGS)
m_rpp:
	@echo; echo "Making rpp"
	cd rpp/src; $(MAKE) $(MFLAGS)
m_cg:
	@echo; echo "Making cg"
	cd cg/src; $(MAKE) $(MFLAGS)
m_puma:
	@echo; echo "Making puma"
	cd puma/src; $(MAKE) $(MFLAGS)
m_mpp:
	@echo; echo "Making mpp"
	cd mpp/src; $(MAKE) $(MFLAGS)
m_estra:
	@echo; echo "Making estra"
	cd estra/src; $(MAKE) $(MFLAGS)

installmodula:	m_reuse m_common
	sh -c "if test ! -d $(BIN); then mkdir $(BIN); else true; fi"
	sh -c "if test ! -d $(LIB); then mkdir $(LIB); else true; fi"
	sh -c "if test ! -d $(MANDIR); then mkdir $(MANDIR); else true; fi"
	sh -c "if test ! -d $(INCDIR); then mkdir $(INCDIR); else true; fi"
	cd reuse/c	; $(MAKE) install $(MFLAGS) TARGET=$(TARGET) INCDIR=$(INCDIR)
	cd rex/src	; $(MAKE) install $(MFLAGS)
	cd front/src	; $(MAKE) install $(MFLAGS)
	cd bnf/src	; $(MAKE) install $(MFLAGS)
	cd ell/src	; $(MAKE) install $(MFLAGS)
	cd lalr/src	; $(MAKE) install $(MFLAGS)
	cd front/doc	; $(MAKE) install $(MFLAGS)
	cd l2r		; $(MAKE) install $(MFLAGS)
	cd y2l		; $(MAKE) install $(MFLAGS)
	cd r2l/src	; $(MAKE) install $(MFLAGS)
	cd rpp/src	; $(MAKE) install $(MFLAGS)
	cd cg/src	; $(MAKE) install $(MFLAGS)
	cd puma/src	; $(MAKE) install $(MFLAGS)
	cd mpp/src	; $(MAKE) install $(MFLAGS)
	cd estra/src	; $(MAKE) install $(MFLAGS)
	cd man; cp * $(MANDIR); chmod a+r $(MANDIR)/*.1

endian:
	cd hexa		; $(MAKE) endian; endian

bin.conv:
	-cd cg/m2c	; $(MAKE) bin.conv
	-cd cg/src	; $(MAKE) bin.conv
	-cd ell/m2c	; $(MAKE) bin.conv
	-cd ell/src	; $(MAKE) bin.conv
	-cd estra/m2c	; $(MAKE) bin.conv
	-cd front/m2c	; $(MAKE) bin.conv
	-cd front/src	; $(MAKE) bin.conv
	-cd puma/m2c	; $(MAKE) bin.conv
	-cd puma/src	; $(MAKE) bin.conv
	-cd r2l/m2c	; $(MAKE) bin.conv
	-cd rex/m2c	; $(MAKE) bin.conv
	-cd rex/src	; $(MAKE) bin.conv
	-cd rpp/m2c	; $(MAKE) bin.conv

test:
	-cd specs/c/ada			; $(MAKE) -i LIB=$(LIB) INCDIR=$(INCDIR)
	-cd specs/c/c			; $(MAKE) -i LIB=$(LIB) INCDIR=$(INCDIR)
	-cd specs/c/c++			; $(MAKE) -i LIB=$(LIB) INCDIR=$(INCDIR)
	-cd specs/c/modula2		; $(MAKE) -i LIB=$(LIB) INCDIR=$(INCDIR)
	-cd specs/c/modula2.ell		; $(MAKE) -i LIB=$(LIB) INCDIR=$(INCDIR)
	-cd specs/c/sather		; $(MAKE) -i LIB=$(LIB) INCDIR=$(INCDIR)
	-cd specs/c/sql			; $(MAKE) -i LIB=$(LIB) INCDIR=$(INCDIR)
	-cd specs/c/oberon2		; $(MAKE) -i LIB=$(LIB) INCDIR=$(INCDIR)
	-cd specs/c/minilax		; $(MAKE) -i LIB=$(LIB) INCDIR=$(INCDIR) minilax
	-cd specs/c/wag			; $(MAKE) -i LIB=$(LIB) INCDIR=$(INCDIR) minilax
	-cd specs/modula/ada		; $(MAKE) -i
	-cd specs/modula/modula2	; $(MAKE) -i
	-cd specs/modula/modula2.ell	; $(MAKE) -i
	-cd specs/modula/modula3	; $(MAKE) -i
	-cd specs/modula/oberon		; $(MAKE) -i
	-cd specs/modula/pascal		; $(MAKE) -i
	-cd specs/modula/minilax	; $(MAKE) -i minilax
	-cd specs/modula/wag		; $(MAKE) -i minilax

clean:
	-cd reuse/c			; $(MAKE) clean
	-cd reuse/src			; $(MAKE) clean
	-cd common/src			; $(MAKE) clean
	-cd rex/src			; $(MAKE) clean
	-cd rex/test			; $(MAKE) clean
	-cd front/src			; $(MAKE) clean
	-cd bnf/src			; $(MAKE) clean
	-cd lalr/src			; $(MAKE) clean
	-cd ell/src			; $(MAKE) clean
	-cd l2r				; $(MAKE) clean
	-cd y2l				; $(MAKE) clean
	-cd r2l/src			; $(MAKE) clean
	-cd rpp/src			; $(MAKE) clean
	-cd cg/src			; $(MAKE) clean
	-cd puma/src			; $(MAKE) clean
	-cd mpp/src			; $(MAKE) clean
	-cd estra/src			; $(MAKE) clean
	-cd reuse/m2c			; $(MAKE) clean
	-cd common/m2c			; $(MAKE) clean
	-cd rex/m2c			; $(MAKE) clean
	-cd front/m2c			; $(MAKE) clean
	-cd bnf/m2c			; $(MAKE) clean
	-cd lalr/m2c			; $(MAKE) clean
	-cd ell/m2c			; $(MAKE) clean
	-cd r2l/m2c			; $(MAKE) clean
	-cd rpp/m2c			; $(MAKE) clean
	-cd cg/m2c			; $(MAKE) clean
	-cd puma/m2c			; $(MAKE) clean
	-cd estra/m2c			; $(MAKE) clean
	-cd specs/c/ada			; $(MAKE) clean
	-cd specs/c/c			; $(MAKE) clean
	-cd specs/c/c++			; $(MAKE) clean
	-cd specs/c/modula2		; $(MAKE) clean
	-cd specs/c/modula2.ell		; $(MAKE) clean
	-cd specs/c/sather		; $(MAKE) clean
	-cd specs/c/sql			; $(MAKE) clean
	-cd specs/c/oberon2		; $(MAKE) clean
	-cd specs/c/minilax		; $(MAKE) clean
	-cd specs/c/wag			; $(MAKE) clean
	-cd specs/modula/ada		; $(MAKE) clean
	-cd specs/modula/modula2	; $(MAKE) clean
	-cd specs/modula/modula2.ell	; $(MAKE) clean
	-cd specs/modula/modula3	; $(MAKE) clean
	-cd specs/modula/oberon		; $(MAKE) clean
	-cd specs/modula/pascal		; $(MAKE) clean
	-cd specs/modula/minilax	; $(MAKE) clean
	-cd specs/modula/wag		; $(MAKE) clean
