# Makefile for "p2c", the Pascal to C translator.
#  Copyright (C) 1989 David Gillespie.
#  Author's address: daveg@csvax.caltech.edu; 256-80 Caltech/Pasadena CA 91125.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation (any version).

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program; see the file COPYING.  If not, write to
# the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

#
# Makefile for Lattice C 5.0 on Amiga
# Amiga port done by G. R. Walter
#

# Directories (private version)
ABSHOMEDIR = P2C:home
HOMEDIR    = /home
LIBDIR     = $(HOMEDIR)
INCDIR     = $(HOMEDIR)/p2c
BINDIR = 
MANDIR = /home
MANFILE = p2c.cat.amiga

LIBS = lib:lcm.lib+lib:lcnb.lib+lib:amiga.lib
CFLAGS = -ma

.c.o:
	lc -b0 $(CFLAGS) $<

# Custom translator modules
CUSTSRCS = hpmods.c citmods.c
CUSTOBJS = hpmods.o citmods.o
CUSTDEFS = -DCUST1=hpmods -DCUST2=citmods

# File names
SRC1 = trans.c stuff.c out.c comment.c dir.c
SRC2 = parse1.c parse2.c parse3.c parse4.c
SRC3 = decl1.c decl2.c decl3.c decl4.c decl5.c
SRC4 = expr1.c expr2.c expr3.c expr4.c expr5.c
SRC5 = pexpr1.c pexpr2.c pexpr3.c pexpr4.c
SRC6 = lex1.c lex2.c lex3.c
SRC7 = funcs1.c funcs2.c funcs3.c funcs4.c funcs5.c
P2CSRCS = $(SRC1) $(SRC2) $(SRC3) $(SRC4) $(SRC5) $(SRC6) $(SRC7)
OBJ1 = trans.o stuff.o out.o comment.o dir.o
OBJ2 = parse1.o parse2.o parse3.o parse4.o
OBJ3 = decl1.o decl2.o decl3.o decl4.o decl5.o
OBJ4 = expr1.o expr2.o expr3.o expr4.o expr5.o
OBJ5 = pexpr1.o pexpr2.o pexpr3.o pexpr4.o
OBJ6 = lex1.o lex2.o lex3.o
OBJ7 = funcs1.o funcs2.o funcs3.o funcs4.o funcs5.o
P2COBJS = $(OBJ1) $(OBJ2) $(OBJ3) $(OBJ4) $(OBJ5) $(OBJ6) $(OBJ7)

SRCS = $(P2CSRCS) $(CUSTSRCS)
OBJS = $(P2COBJS) $(CUSTOBJS)

LIBSRCS = p2clib.c loc.p2clib.c
LIBOBJS = p2clib.o loc.p2clib.o

MISCSRCS = makeproto.c
PROTOA = p2c.proto1 p2c.proto2 p2c.proto3 p2c.proto4
PROTOB = p2c.proto5 p2c.proto6 p2c.proto7 p2c.protoc
PROTOS = $(PROTOA) $(PROTOB)
PROTO_HDRA = p2c.hdrs1 p2c.hdrs2 p2c.hdrs3 p2c.hdrs4
PROTO_HDRB = p2c.hdrs5 p2c.hdrs6 p2c.hdrs7 p2c.hdrsc
PROTO_HDRS = $(PROTO_HDRA) $(PROTO_HDRB)
HDRS = trans.h p2c.h

# Top-level targets
all: p2c.lib p2c

# Making and using makeproto
# Need to use makeproto because author used "Static" to sometimes
# mean "static"

makeproto: makeproto.o
	BLINK TO makeproto FROM lib:c.o makeproto.o LIB LIB:lc.lib ND

hdrs: makeproto $(PROTO_HDRS)
	join p2c.hdrs? AS p2c.hdrs

proto: makeproto $(PROTOS)
	join p2c.proto? AS p2c.proto

p2c.hdrs1: $(SRC1)
	makeproto -n -m -h -t16 -a35 -s0 -x $(SRC1) -o p2c.hdrs1

p2c.hdrs2: $(SRC2)
	makeproto -n -m -h -t16 -a35 -s0 -x $(SRC2) -o p2c.hdrs2

p2c.hdrs3: $(SRC3)
	makeproto -n -m -h -t16 -a35 -s0 -x $(SRC3) -o p2c.hdrs3

p2c.hdrs4: $(SRC4)
	makeproto -n -m -h -t16 -a35 -s0 -x $(SRC4) -o p2c.hdrs4

p2c.hdrs5: $(SRC5)
	makeproto -n -m -h -t16 -a35 -s0 -x $(SRC5) -o p2c.hdrs5

p2c.hdrs6: $(SRC6)
	makeproto -n -m -h -t16 -a35 -s0 -x $(SRC6) -o p2c.hdrs6

p2c.hdrs7: $(SRC7)
	makeproto -n -m -h -t16 -a35 -s0 -x $(SRC7) -o p2c.hdrs7

p2c.hdrsc: $(CUSTSRCS)
	makeproto -n -m -h -t16 -a35 -s0 -x $(CUSTSRCS) -o p2c.hdrsc

p2c.proto1: $(SRC1)
	makeproto -n -m -h -t16 -a35 -s1 -i $(SRC1) -o p2c.proto1

p2c.proto2: $(SRC2)
	makeproto -n -m -h -t16 -a35 -s1 -i $(SRC2) -o p2c.proto2

p2c.proto3: $(SRC3)
	makeproto -n -m -h -t16 -a35 -s1 -i $(SRC3) -o p2c.proto3

p2c.proto4: $(SRC4)
	makeproto -n -m -h -t16 -a35 -s1 -i $(SRC4) -o p2c.proto4

p2c.proto5: $(SRC5)
	makeproto -n -m -h -t16 -a35 -s1 -i $(SRC5) -o p2c.proto5

p2c.proto6: $(SRC6)
	makeproto -n -m -h -t16 -a35 -s1 -i $(SRC6) -o p2c.proto6

p2c.proto7: $(SRC7)
	makeproto -n -m -h -t16 -a35 -s1 -i $(SRC7) -o p2c.proto7

p2c.protoc: $(CUSTSRCS)
	makeproto -n -m -h -t16 -a35 -s1 -i $(CUSTSRCS) -o p2c.protoc

# Making p2c
p2c: proto hdrs $(OBJS)
	BLINK WITH p2c.amiga.lnk

dir.o: dir.c trans.h
	lc -b0 $(CFLAGS) $(CUSTDEFS) dir.c

trans.o: trans.c trans.h
	lc -b0 $(CFLAGS) -DHASDUMPS trans.c

# Making the p2c runtime library
p2c.lib: $(LIBOBJS)
	oml p2c.lib r $(LIBOBJS)

p2clib.o: p2clib.c
	lc $(CFLAGS) p2clib.c

loc.p2clib.o: loc.p2clib.c
	lc $(CFLAGS) loc.p2clib.c

# Initially installing p2c:
#  First, make sure $(HOMEDIR) and $(INCDIR) exist and are writable;
#  Second, make sure $(LIBDIR), $(BINDIR) and $(MANDIR) are writable;
#  Third, execute "make install" to compile and set things up.
# (You may need to have a system operator do these steps for you.)

COPY = copy

# force trans.c to be recompiled (if HOMEDIR changes)
newhome:
	delete trans.o

INST1 = $(HOMEDIR) $(INCDIR) $(BINDIR)/p2c $(LIBDIR)/p2c.lib
INST2 = $(MANDIR)/p2c.1 $(INCDIR)/p2c.h $(HOMEDIR)/p2crc $(HOMEDIR)/loc.p2crc
INST3 = $(HOMEDIR)/system.imp $(HOMEDIR)/system.m2 $(HOMEDIR)/turbo.imp
INST4 = $(HOMEDIR)/string.pas
INST  = $(INST1) $(INST2) $(INST3) $(INST4)

install: $(INST)

$(HOMEDIR):
	makedir $(HOMEDIR)

$(INCDIR):
	makedir $(INCDIR)

$(BINDIR)/p2c: p2c
	$(COPY) p2c $(BINDIR)/p2c

$(LIBDIR)/p2c.lib: p2c.lib
	$(COPY) p2c.lib $(LIBDIR)/p2c.lib

$(MANDIR)/p2c.1: $(MANFILE)
	$(COPY)  $(MANFILE)   $(MANDIR)/p2c.1

$(INCDIR)/p2c.h: p2c.h
	$(COPY)  p2c.h        $(INCDIR)/p2c.h

$(HOMEDIR)/p2crc: sys.p2crc
	$(COPY)  sys.p2crc    $(HOMEDIR)/p2crc

$(HOMEDIR)/loc.p2crc: loc.p2crc
	$(COPY)  loc.p2crc    $(HOMEDIR)/loc.p2crc

$(HOMEDIR)/system.imp: system.imp
	$(COPY)  system.imp   $(HOMEDIR)/system.imp

$(HOMEDIR)/system.m2: system.m2
	$(COPY)  system.m2    $(HOMEDIR)/system.m2

$(HOMEDIR)/turbo.imp: turbo.imp
	$(COPY)  turbo.imp    $(HOMEDIR)/turbo.imp

$(HOMEDIR)/string.pas: string.pas
	$(COPY)  string.pas   $(HOMEDIR)/string.pas

# Miscellaneous
tags:
	ctags $(SRCS) $(LIBSRCS) $(MISCSRCS) $(HDRS)

clean.o:
	delete $(OBJS)

clean:
	delete $(OBJS)
	delete $(LIBOBJS)
	delete p2c.proto* p2c.hdrs*
	delete p2c makeproto makeproto.o p2c.lib
	delete TAGS

wc:
	wc $(SRCS) $(LIBSRCS) trans.h

test:
	echo '"make test" should be used in the outer-level p2c directory.'
	echo 'Type "cd .." and "make test" again.'
