#============================================================================
# Makefile for VMS Zip, ZipCloak, ZipNote  and ZipSplit          Greg Roelofs
# Version:  2.0 [for use with Todd Aven's MAKE/VMS 3.4]          25-JUN-1998
#============================================================================

# ChangeLog:  10-SEP-1993 08:53 by Hunter Goatley (add AXP support)
#             15-OCT-1995 22:40 by Chr. Spieler (Zip 2.1)
#             11-DEC-1995 12:09 by Chr. Spieler (AXP uses RELAXED_ANSI mode)
#             08-JAN-1996 19:08 by Chr. Spieler (updated header dependencies)
#             16-JAN-1996 19:08 by Chr. Spieler (crypt -> crypt & ttyio)
#             25-JUL-1997 22:25 by Chr. Spieler (syncronized with descrip.mms)
#             25-JUN-1998 23:53 by Chr. Spieler (removed bits.c source)


########################### USER CUSTOMIZATION ############################
# add any optional preprocessor flags (macros) to the following line
# for a custom version (do not forget a trailing comma##):
COMMON_DEFS =
######################## END OF USER CUSTOMIZATION ########################

#####################
# MACRO DEFINITIONS #
#####################

CFLAGS = /NOLIST/INCL=(SYS$DISK:[])
CC = cc
LIB =
# Define the macro __GNUC__ to use the GNU compiler (also add /undef=__STDC__
# to CFLAGS, and possibly replace /obj=$@ [below] with copy/rename/delete
# setup).  NOT TESTED.

OPTFILE = sys$disk:[.vms]vaxcshr.opt

%IFDEF __ALPHA
CC = CC/STANDARD=RELAX/PREFIX=ALL/ANSI
E = .AXP_EXE
O = .AXP_OBJ
OPTFILE_LIST =
OPTIONS =
%ELSE
%IFDEF __DECC__
CC = CC/DECC/STANDARD=VAXC/PREFIX=ALL
E = .VAX_DECC_exe
O = .VAX_DECC_obj
OPTFILE_LIST =
OPTIONS =
%ELSE
%IFDEF __GNUC__
CC = gcc
E = .VAX_GNUC_exe
O = .VAX_GNUC_obj
LIB = gnu_cc:[000000]gcclib.olb/lib,
%ELSE
E = .VAX_VAXC_exe
O = .VAX_VAXC_obj
%ENDIF
OPTFILE_LIST = ,$(OPTFILE)
OPTIONS = ,$(OPTFILE)/OPTIONS
%ENDIF
%ENDIF

CFLAGS_ALL  = $(CFLAGS) /def=($(COMMON_DEFS) VMS)
CFLAGS_CLI  = $(CFLAGS) /def=($(COMMON_DEFS) VMSCLI, VMS)
CFLAGS_UTIL = $(CFLAGS) /def=($(COMMON_DEFS) UTIL, VMS)
LD = LINK
LDFLAGS = /NOTRACE

# object file lists
OBJM =	zip$O, zipcli$O
OBJZ =	crc32$O, crctab$O, crypt$O, ttyio$O,-
	zipfile$O, zipup$O, fileio$O, globals$O, util$O
OBJV =	vmszip$O, vms$O, vmsmunch$O
OBJI =	deflate$O, trees$O
OBJU =	zipfile_$O, fileio_$O, globals$O,-
	util_$O, vms_$O, vmsmunch$O
OBJR =  crctab$O, crypt_$O, ttyio$O
OBJC =	zipcloak$O, $(OBJR), $(OBJU)
OBJN =	zipnote$O, $(OBJU)
OBJS =	zipsplit$O, $(OBJU)

ZIPX_UNX = zip
ZIPX_CLI = zip_cli
OBJSZIPLIB = $(OBJZ), $(OBJI), $(OBJV)
OBJSZIP = zip$O, $(OBJSZIPLIB)
OBJSCLI = zipcli$O, zip_cli$O, cmdline$O
OBJSZIP_CLI = $(OBJSCLI), $(OBJSZIPLIB)
ZIPHELP_UNX_RNH = [.vms]vms_zip.rnh
ZIPHELP_CLI_RNH = [.vms]zip_cli.rnh

ZIP_H =	zip.h ziperr.h tailor.h [.vms]osdep.h

ZIPS = $(ZIPX_UNX)$E $(ZIPX_CLI)$E zipcloak$E zipnote$E zipsplit$E
ZIPHELPS = $(ZIPX_UNX).hlp $(ZIPX_CLI).hlp

###############################################
# BASIC COMPILE INSTRUCTIONS AND DEPENDENCIES #
###############################################

default :	$(ZIPS) $(ZIPHELPS)


# suffix rules
*$O:	*.c				# `*.c' necessary?
	$(CC)$(CFLAGS_ALL)/OBJECT=$@ $<

*.hlp:	*.rnh
	runoff /out=$@ $<


# executables makerules (trailing `$' makes line a data line)
$(ZIPX_UNX)$E :	$(OBJSZIP) $(OPTFILE_LIST)
	$(LD) $(LDFLAGS)/EXEC=$(ZIPX_UNX)$E $(OBJSZIP) $(LIB) $(OPTIONS)

$(ZIPX_CLI)$E :	$(OBJSZIP_CLI) $(OPTFILE_LIST)
	$(LD) $(LDFLAGS)/EXEC=$(ZIPX_CLI)$E $(OBJSZIP_CLI) $(LIB) $(OPTIONS)

zipcloak$E :	$(OBJC) $(OPTFILE_LIST)
	$(LD) $(LDFLAGS)/EXEC=ZIPCLOAK$E $(OBJC) $(LIB) $(OPTIONS)

zipnote$E :	$(OBJN) $(OPTFILE_LIST)
	$(LD) $(LDFLAGS)/EXEC=ZIPNOTE$E $(OBJN) $(LIB) $(OPTIONS)

zipsplit$E :	$(OBJS) $(OPTFILE_LIST)
	$(LD) $(LDFLAGS)/EXEC=ZIPSPLIT$E $(OBJS) $(LIB) $(OPTIONS)

$(OPTFILE) :
	open/write tmp $(OPTFILE)
	write tmp "SYS$SHARE:VAXCRTL.EXE/SHARE"
	close tmp

$(ZIPHELP_CLI_RNH)	: [.vms]zip_cli.help
	set default [.vms]
	edit/tpu/nosection/nodisplay/command=cvthelp.tpu zip_cli.help
	set default [-]

$(ZIPX_UNX).hlp : $(ZIPHELP_UNX_RNH)
	runoff /out=$@ $<

$(ZIPX_CLI).hlp : $(ZIPHELP_CLI_RNH)

# dependencies for zip, zipnote, zipcloak, and zipsplit
vmszip$O :	[.vms]vmszip.c [.vms]vmsmunch.h
	$(CC)$(CFLAGS_ALL)/OBJECT=vmszip$O [.vms]vmszip.c
vms$O :		[.vms]vms.c [.vms]vms_im.c [.vms]vms_pk.c \
	[.vms]vms.h [.vms]vmsdefs.h
	$(CC)$(CFLAGS_ALL)/OBJECT=vms$O [.vms]vms.c
vmsmunch$O :	[.vms]vmsmunch.c [.vms]vmsmunch.h [.vms]vmsdefs.h
	$(CC)$(CFLAGS_ALL)/OBJECT=vmsmunch$O [.vms]vmsmunch.c
zipcli$O : zip.c [.vms]vmsmunch.h
	$(CC) $(CFLAGS_CLI) /OBJ=$(MMS$TARGET) $<
cmdline$O : [.vms]cmdline.c $(ZIP_H) crypt.h revision.h
	$(CC) $(CFLAGS_CLI) /OBJ=$(MMS$TARGET) $<
zip_cli$O : [.vms]zip_cli.cld

crypt_$O :	crypt.c crypt.h ttyio.h
	$(CC)$(CFLAGS_UTIL)/OBJECT=crypt_$O crypt.c
zipfile_$O :	zipfile.c [.vms]vmsmunch.h [.vms]vmsdefs.h
	$(CC)$(CFLAGS_UTIL)/OBJECT=zipfile_$O zipfile.c
fileio_$O :	fileio.c
	$(CC)$(CFLAGS_UTIL)/OBJECT=fileio_$O fileio.c
util_$O :	util.c
	$(CC)$(CFLAGS_UTIL)/OBJECT=util_$O util.c
vms_$O :	[.vms]vms.c [.vms]vms_im.c [.vms]vms_pk.c \
	[.vms]vms.h [.vms]vmsdefs.h
	$(CC)$(CFLAGS_UTIL)/OBJECT=vms_$O [.vms]vms.c

$(OBJM) zipcloak$O zipnote$O zipsplit$O zipup$O : revision.h
$(OBJM) zipcloak$O zipup$O crypt$O ttyio$O : crypt.h
$(OBJM) zipcloak$O crypt$O ttyio$O : ttyio.h
zipup$O :	[.vms]zipup.h
zipfile$O :	[.vms]vmsmunch.h [.vms]vmsdefs.h
zip$O :		[.vms]vmsmunch.h
$(OBJM) :	$(ZIP_H)
$(OBJZ) :	$(ZIP_H)
$(OBJI) :	$(ZIP_H)
$(OBJN) :	$(ZIP_H)
$(OBJS) :	$(ZIP_H)
$(OBJC) :	$(ZIP_H)

clean.com :
	@ open/write tmp $@
	@ write tmp "$!"
	@ write tmp "$!	Clean.com --	procedure to delete files. It always returns success"
	@ write tmp "$!			status despite any error or warnings. Also it extracts"
	@ write tmp "$!			filename from MMS ""module=file"" format."
	@ write tmp "$!"
	@ write tmp "$ on control_y then goto ctly"
	@ write tmp "$ if p1.eqs."""" then exit 1"
	@ write tmp "$ i = -1"
	@ write tmp "$scan_list:"
	@ write tmp "$	i = i+1"
	@ write tmp "$	item = f$elem(i,"","",p1)"
	@ write tmp "$	if item.eqs."""" then goto scan_list"
	@ write tmp "$	if item.eqs."","" then goto done		! End of list"
	@ write tmp "$	item = f$edit(item,""trim"")		! Clean of blanks"
	@ write tmp "$	wild = f$elem(1,""="",item)"
	@ write tmp "$	show sym wild"
	@ write tmp "$	if wild.eqs.""="" then wild = f$elem(0,""="",item)"
	@ write tmp "$	vers = f$parse(wild,,,""version"",""syntax_only"")"
	@ write tmp "$	if vers.eqs."";"" then wild = wild - "";"" + "";*"""
	@ write tmp "$scan:"
	@ write tmp "$		f = f$search(wild)"
	@ write tmp "$		if f.eqs."""" then goto scan_list"
	@ write tmp "$		on error then goto err"
	@ write tmp "$		on warning then goto warn"
	@ write tmp "$		delete/log 'f'"
	@ write tmp "$warn:"
	@ write tmp "$err:"
	@ write tmp "$		goto scan"
	@ write tmp "$done:"
	@ write tmp "$ctly:"
	@ write tmp "$	exit 1"
	@ close tmp

clean : clean.com
	@clean "$(OBJM)"
	@clean "$(OBJZ)"
	@clean "$(OBJI)"
	@clean "$(OBJV)"
	@clean "$(OBJU)"
	@clean "$(OBJR)"
	@clean "$(OBJN)"
	@clean "$(OBJS)"
	@clean "$(OBJC)"
	@clean "$(ZIPS)"
	@clean "$(ZIPHELP_CLI_RNH)"
	@clean "$(ZIPHELPS)"
	- delete/noconfirm/nolog clean.com;*


# the backslash '\' is the continuation character if it occurs as
# the last non-white character on the line.
# the hyphen '-' is the DCL continuation character, so if it occurs
# as the last non-white character on the line, the next line will
# not have the dollar sign '$' prepended.


################################
# INDIVIDUAL MACHINE MAKERULES #
################################

generic :	default		# first try if unknown
generic2 :	default		# second try if unknown
vax :		default
vms :		default

all :		$(ZIPS)
zip :		zip$E
zipcloak :	zipcloak$E
zipnote :	zipnote$E
zipsplit :	zipsplit$E
