# Makefile for Zip, ZipNote, ZipCloak and ZipSplit

# add -g to CC to debug
# add -d to BIND to debug
CC   = cc
BIND = link
AS   = $(CC) -c
ASM  = objasm
SQUEEZE = squeeze -v
E    =

# flags
#   CFLAGS    flags for C compile
#   LFLAGS1   flags after output file spec, before obj file list
#   LFLAGS2   flags after obj file list (libraries, etc)
#
LIB      =
CFLAGS   = -throwback -wn -wd -DASMV -IC:,@.
ASMFLAGS = -Throwback -Stamp -NoCache -CloseExec -quit
LFLAGS1  =
LFLAGS2  = $(LIB) C:o.Stubs

# Uncomment the following line to enable support for Unix
# Extra Field (Timezone)
#CFLAGS  = $(CFLAGS) -DUSE_EF_UT_TIME

# object file lists
OBJZ = zip.o zipfile.o zipup.o fileio.o util.o globals.o crc32.o \
       crypt.o ttyio.o riscos.o acornzip.o swiven.o

OBJI = deflate.o trees.o
OBJA = match.o sendbits.o
OBJU = zipfile_.o fileio_.o util_.o globals.o riscos.o acornzip_.o swiven.o
OBJN = zipnote.o  $(OBJU)
OBJC = zipcloak.o $(OBJU) crc32_.o crypt_.o ttyio.o
OBJS = zipsplit.o $(OBJU)

ZIP_H = zip.h ziperr.h tailor.h acorn/osdep.h acorn/riscos.h acorn/swiven.h

all:      zip zipnote zipsplit zipcloak


install:  %.zip %.zipnote %.zipsplit %.zipcloak %.zipsfx \
          zip zipnote zipsplit zipcloak zipsfx
	$(SQUEEZE) zip %.zip
	$(SQUEEZE) zipnote %.zipnote
	$(SQUEEZE) zipsplit %.zipsplit
	$(SQUEEZE) zipcloak %.zipcloak
	copy acorn.zipsfx %.zipsfx ~CVF

# suffix rules
.SUFFIXES:      _.o .o .c
.c_.o:
	$(CC) $(CFLAGS) -DUTIL -c $*.c -o $*_.o
.c.o:
	$(CC) $(CFLAGS) -c $<
.s.o:
	$(ASM) $(ASMFLAGS) -from @*.s -to @*.o

# rules for zip, zipnote, zipcloak and zipsplit
$(OBJZ): $(ZIP_H)
$(OBJI): $(ZIP_H)
$(OBJN): $(ZIP_H)
$(OBJS): $(ZIP_H)
$(OBJC): $(ZIP_H)
zip.o crc32.o crypt.o fileio.o zipfile.o zipup.o: crc32.h
zipcloak.o crc32_.o crypt_.o fileio_.o zipfile_.o: crc32.h
zip.o zipup.o crypt.o ttyio.o zipcloak.o crypt_.o: crypt.h
zip.o zipup.o zipnote.o zipcloak.o zipsplit.o: revision.h
zip.o crypt.o ttyio.o zipcloak.o crypt_.o: ttyio.h

crc32_.o: crc32.c
	$(CC) $(CFLAGS) -DUTIL -c crc32.c -o crc32_.o
crypt_.o: crypt.c
	$(CC) $(CFLAGS) -DUTIL -c crypt.c -o crypt_.o
util_.o: util.c
	$(CC) $(CFLAGS) -DUTIL -c util.c -o util_.o
fileio_.o: fileio.c
	$(CC) $(CFLAGS) -DUTIL -c fileio.c -o fileio_.o
zipfile_.o: zipfile.c
	$(CC) $(CFLAGS) -DUTIL -c zipfile.c -o zipfile_.o
acornzip_.o: acorn/acornzip.c $(ZIP_H)
	$(CC) $(CFLAGS) -DUTIL -c acorn/acornzip.c -o acornzip_.o

riscos.o: acorn/riscos.c acorn/riscos.h
	$(CC) $(CFLAGS) -c acorn/riscos.c

acornzip.o: acorn/acornzip.c $(ZIP_H)
	$(CC) $(CFLAGS) -c acorn/acornzip.c

swiven.o: acorn/swiven.c acorn/swiven.h
	$(CC) $(CFLAGS) -c acorn/swiven.c

match.o: acorn/match.s
	$(ASM) $(ASMFLAGS) -from acorn.s.match -to match.o

sendbits.o: acorn/sendbits.s
	$(ASM) $(ASMFLAGS) -from acorn.s.sendbits -to sendbits.o

zip:	$(OBJZ) $(OBJI) $(OBJA)
	$(BIND) -o zip$(E) $(LFLAGS1) $(OBJZ) $(OBJI) $(OBJA) $(LFLAGS2)
zipnote:  $(OBJN)
	$(BIND) -o zipnote$(E) $(LFLAGS1) $(OBJN) $(LFLAGS2)
zipcloak: $(OBJC)
	$(BIND) -o zipcloak$(E) $(LFLAGS1) $(OBJC) $(LFLAGS2)
zipsplit: $(OBJS)
	$(BIND) -o zipsplit$(E) $(LFLAGS1) $(OBJS) $(LFLAGS2)

clean:
	remove zip
	remove zipcloak
	remove zipsplit
	remove zipnote
	create o.!fake! 0
	wipe o.* ~cf

# end of Makefile
