# Makefile for Zip, ZipCloak, ZipNote and ZipSplit for
# Borland C++ for Win32.
# By E-Yen Tan.
# Updated on 18 Dec 2005 by Cosmin Truta.
# Last updated on 22 Jun 2008 by Christian Spieler.

# To use, do "make -fwin32\makefile.bor"

# Add -DNO_ASM to LOC and comment out the ASMOBJS definition below
# if you do not have tasm32.

# Optional nonstandard preprocessor flags (as -DMEDIUM_MEM or -DNO_ASM)
# should be added to the environment via "set LOCAL_ZIP=-DFOO" or added
# to the declaration of LOC here:
!IF $(USEASM)
LOC = $(LOCAL_ZIP)
!ELSE
LOC = -DNO_ASM $(LOCAL_ZIP)
!ENDIF

# CPU type: 3 (i386), 4 (i486), 5 (Pentium), etc.
CPU_TYP = 6

# Uncomment the following macro to use the optimized assembler
# routines in Zip:
!IF $(USEASM)
ASMOBJS = match32.obj
CRCA_O = crc_i386.obj
!ENDIF

ASCPUFLAG = __$(CPU_TYP)86

VPATH=.;win32
CC = bcc32
CFLAGS=-w -w-aus -w-ccc -w-par -w-sig -O2 -I. -DWIN32 $(LOC)
UTILFLAGS=-DUTIL $(CFLAGS) -o

!ifdef USETASM16
AS=tasm
!else
AS=tasm32
!endif
ASFLAGS=-ml -t -m2 -D$(ASCPUFLAG) $(LOC)

LD=ilink32
LDFLAGS=

# variables
OBJZ1 = zip.obj crypt.obj ttyio.obj zipfile.obj zipup.obj fileio.obj util.obj \
	crc32.obj $(CRCA_O) globals.obj
OBJZ2 = deflate.obj trees.obj $(ASMOBJS)
OBJZS = win32zip.obj win32.obj win32i64.obj nt.obj
OBJZ  = $(OBJZ1) $(OBJZ2) $(OBJZS)

OBJU  = zipfile_.obj fileio_.obj util_.obj crc32_.obj $(CRCA_O) globals.obj \
	win32_.obj win32i64.obj
OBJN  = zipnote.obj $(OBJU)
OBJC  = zipcloak.obj crypt_.obj ttyio.obj $(OBJU)
OBJS  = zipsplit.obj $(OBJU)

ZIP_H = zip.h ziperr.h tailor.h win32/osdep.h

ZIPS = zip.exe zipnote.exe zipsplit.exe zipcloak.exe

zips: $(ZIPS)

zip.obj:        zip.c $(ZIP_H) revision.h crc32.h crypt.h ttyio.h
	$(CC) -c $(CFLAGS) $*.c

zipfile.obj:    zipfile.c $(ZIP_H) crc32.h
	$(CC) -c $(CFLAGS) $*.c

zipup.obj:      zipup.c $(ZIP_H) revision.h crc32.h crypt.h win32/zipup.h
	$(CC) -c $(CFLAGS) $*.c

fileio.obj:     fileio.c $(ZIP_H) crc32.h
	$(CC) -c $(CFLAGS) $*.c

util.obj:       util.c $(ZIP_H)
	$(CC) -c $(CFLAGS) $*.c

globals.obj:    globals.c $(ZIP_H)
	$(CC) -c $(CFLAGS) $*.c

deflate.obj:    deflate.c $(ZIP_H)
	$(CC) -c $(CFLAGS) $*.c

trees.obj:      trees.c $(ZIP_H)
	$(CC) -c $(CFLAGS) $*.c

crc32.obj:      crc32.c $(ZIP_H) crc32.h
	$(CC) -c $(CFLAGS) $*.c

crypt.obj:      crypt.c $(ZIP_H) crypt.h crc32.h ttyio.h
	$(CC) -c $(CFLAGS) $*.c

ttyio.obj:      ttyio.c $(ZIP_H) crypt.h ttyio.h
	$(CC) -c $(CFLAGS) $*.c

win32zip.obj:   win32/win32zip.c $(ZIP_H) win32/win32zip.h win32/nt.h
	$(CC) -c $(CFLAGS) win32/$*.c

win32.obj:      win32/win32.c $(ZIP_H) win32/win32zip.h
	$(CC) -c $(CFLAGS) win32/$*.c

win32i64.obj:   win32/win32i64.c $(ZIP_H)
	$(CC) -c $(CFLAGS) win32/$*.c

nt.obj:         win32/nt.c $(ZIP_H) win32/nt.h
	$(CC) -c $(CFLAGS) win32/$*.c

zipcloak.obj:   zipcloak.c $(ZIP_H) revision.h crc32.h crypt.h ttyio.h
	$(CC) -c $(CFLAGS) $*.c

zipnote.obj:    zipnote.c $(ZIP_H) revision.h
	$(CC) -c $(CFLAGS) $*.c

zipsplit.obj:   zipsplit.c $(ZIP_H) revision.h
	$(CC) -c $(CFLAGS) $*.c

zipfile_.obj:   zipfile.c $(ZIP_H) crc32.h
	$(CC) -c $(UTILFLAGS)$* zipfile.c

fileio_.obj:    fileio.c $(ZIP_H) crc32.h
	$(CC) -c $(UTILFLAGS)$* fileio.c

util_.obj:      util.c $(ZIP_H)
	$(CC) -c $(UTILFLAGS)$* util.c

crc32_.obj:     crc32.c $(ZIP_H) crc32.h
	$(CC) -c $(UTILFLAGS)$* crc32.c

crypt_.obj:     crypt.c $(ZIP_H) crypt.h crc32.h ttyio.h
	$(CC) -c $(UTILFLAGS)$* crypt.c

win32_.obj:     win32/win32.c $(ZIP_H) win32/win32zip.h
	$(CC) -c $(UTILFLAGS)$* win32/win32.c

!ifdef USEMASM
crc_i386.obj:   win32/crc_i386.asm
	masm -ml win32/crc_i386.asm,$@;
!else
!ifndef ASMOVERBCC32
crc_i386.obj:   win32/crc_i386.asm
	$(AS) $(ASFLAGS) win32\crc_i386.asm, $@ ;
!else
crc_i386.obj:	win32/crc_i386.c crc32.h
	$(CC) -c $(CFLAGS) -o$@ win32/crc_i386.c
!endif
!endif

!ifdef USEMASM
match32.obj:    win32/match32.asm
	masm -ml win32/match32.asm,$@;
!else
match32.obj:    win32/match32.asm
	$(AS) $(ASFLAGS) win32\match32.asm, $@ ;
!endif

zip.res:        win32/zip.rc revision.h
	$(RC) /l 0x409 /fo$@ /i win32 /d WIN32 win32/zip.rc

# Split the command line to fit in the MS-DOS 128 byte limit by using
# Borland-Make specific response file syntax:
zip.exe: $(OBJZ) zip.res
	$(LD) -Gn -x -c -ap -Tpe @&&|
c0x32.obj $(OBJZ),$@,,import32.lib cw32.lib,,zip.res
|

zipcloak.exe: $(OBJC)
	$(CC) $(LDFLAGS) @&&|
$(OBJC)
|

zipnote.exe: $(OBJN)
	$(CC) $(LDFLAGS) @&&|
$(OBJN)
|

zipsplit.exe: $(OBJS)
	$(CC) $(LDFLAGS) @&&|
$(OBJS)
|

clean:
	-del *.obj
	-del *.res
	-del *.exe
	-del *.tds
