The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
!==========================================================================
! MMS description file for bzip2 support in UnZip 6              2008-02-16
!==========================================================================
!
! To build the LIBBZ2_NS library, edit the USER CUSTOMIZATION
! lines below to taste, then do
!	mms
! or
!	mmk
! if you use Matt's Make (free MMS-compatible make utility).
!
! In all other cases where you want to explicitly specify a makefile target,
! you have to specify your compiling environment, too. These are:
!
!	$ MMS/MACRO=(__ALPHA__=1)		! Alpha AXP, (DEC C)
!	$ MMS/MACRO=(__IA64__=1)		! IA64, (DEC C)
!	$ MMS/MACRO=(__DECC__=1)		! VAX, using DEC C
!	$ MMS/MACRO=(__FORCE_VAXC__=1)		! VAX, prefering VAXC over DECC
!	$ MMS/MACRO=(__VAXC__=1)		! VAX, where VAXC is default
!	$ MMS/MACRO=(__GNUC__=1)		! VAX, using GNU C
!

! To delete all .OBJ, .OLB, .EXE and .HLP files,
!	mms clean

## The "DO_THE_BUILD" target does no longer work with current
## releases of the MMS tool, sigh.
#DO_THE_BUILD :
#	@ decc = f$search("SYS$SYSTEM:DECC$COMPILER.EXE").nes.""
#	@ axp = (f$getsyi("HW_MODEL") .ge. 1024) .and. -
#	   (f$getsyi("HW_MODEL") .lt. 4096)
#	@ i64 = f$getsyi("HW_MODEL") .ge. 4096
#	@ macro = "/MACRO=("
#.IFDEF CCOPTS
#	@ macro = macro + """CCOPTS=$(CCOPTS)"","
#.ENDIF
#	@ if decc then macro = macro + "__DECC__=1,"
#	@ if axp then macro = macro + "__ALPHA__=1,"
#	@ if i64 then macro = macro + "__IA64__=1,"
#	@ if .not.(axp .or. i64 .or. decc) then macro = macro + "__VAXC__=1,"
#	@ macro = f$extract(0,f$length(macro)-1,macro)+ ")"
#	$(MMS)$(MMSQUALIFIERS)'macro' DEFAULT

# Define MMK architecture macros when using MMS.

.IFDEF __MMK__                  # __MMK__
.ELSE                           # __MMK__
ALPHA_X_ALPHA = 1
IA64_X_IA64 = 1
VAX_X_VAX = 1
.IFDEF $(MMS$ARCH_NAME)_X_ALPHA     # $(MMS$ARCH_NAME)_X_ALPHA
__ALPHA__ = 1
.ENDIF                              # $(MMS$ARCH_NAME)_X_ALPHA
.IFDEF $(MMS$ARCH_NAME)_X_IA64      # $(MMS$ARCH_NAME)_X_IA64
__IA64__ = 1
.ENDIF                              # $(MMS$ARCH_NAME)_X_IA64
.IFDEF $(MMS$ARCH_NAME)_X_VAX       # $(MMS$ARCH_NAME)_X_VAX
__VAX__ = 1
.ENDIF                              # $(MMS$ARCH_NAME)_X_VAX
.ENDIF                          # __MMK__

.IFDEF __ALPHA__                # __ALPHA__
DEST = ALPHA
#E = .AXP_EXE
#O = .AXP_OBJ
#A = .AXP_OLB
.ELSE                           # __ALPHA__
.IFDEF __IA64__                     # __IA64__
DEST = IA64
#E = .I64_EXE
#O = .I64_OBJ
#A = .I64_OLB
.ELSE                               # __IA64__
.IFDEF __DECC__                         # __DECC__
DEST = VAX
#E = .VAX_DECC_EXE
#O = .VAX_DECC_OBJ
#A = .VAX_DECC_OLB
.ENDIF                                  # __DECC__
.IFDEF __FORCE_VAXC__                   # __FORCE_VAXC__
__VAXC__ = 1
.ENDIF                                  # __FORCE_VAXC__
.IFDEF __VAXC__                         # __VAXC__
DEST = VAXV
#E = .VAX_VAXC_EXE
#O = .VAX_VAXC_OBJ
#A = .VAX_VAXC_OLB
.ENDIF                                  # __VAXC__
.IFDEF __GNUC__                         # __GNUC__
DEST = VAXG
#E = .VAX_GNUC_EXE
#O = .VAX_GNUC_OBJ
#A = .VAX_GNUC_OLB
.ENDIF                                  # __GNUC__
.ENDIF                              # __IA64__
.ENDIF                          # __ALPHA__
.IFDEF O                        # O
.ELSE                           # O
!If EXE and OBJ extensions aren't defined, define them
E = .EXE
O = .OBJ
A = .OLB
.ENDIF                          # O

.IFDEF SRCDIR
.ELSE
SRCDIR = []
.ENDIF
.IFDEF DSTDIR                   # DSTDIR
.ELSE                           # DSTDIR
.IFDEF DEST                       # DEST
DSTDIR = [.$(DEST)]
.ELSE                             # DEST
DSTDIR = []
.ENDIF                            # DEST
.ENDIF                          # DSTDIR

!!!!!!!!!!!!!!!!!!!!!!!!!!! USER CUSTOMIZATION !!!!!!!!!!!!!!!!!!!!!!!!!!!!
! add any common optional preprocessor flags (macros) here
! (do not forget a trailing comma!!):
COMMON_DEFS =
!!!!!!!!!!!!!!!!!!!!!!!! END OF USER CUSTOMIZATION !!!!!!!!!!!!!!!!!!!!!!!!

.IFDEF __GNUC__
CC = gcc
LIBS = ,GNU_CC:[000000]GCCLIB.OLB/LIB
.ELSE
CC = cc
LIBS =
.ENDIF

CFLAGS = /NOLIST

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

.IFDEF __ALPHA__                # __ALPHA__
CC_OPTIONS = /STANDARD=RELAX/PREFIX=ALL/ANSI/NAMES=(AS_IS)
CC_DEFS =
.ELSE                           # __ALPHA__
.IFDEF __IA64__                     # __IA64__
CC_OPTIONS = /STANDARD=RELAX/PREFIX=ALL/ANSI/NAMES=(AS_IS)
CC_DEFS =
.ELSE                               # __IA64__
.IFDEF __DECC__                         # __DECC__
CC_OPTIONS = /DECC/STANDARD=RELAX/PREFIX=ALL/NAMES=(AS_IS)
CC_DEFS =
.ELSE                                   # __DECC__
.IFDEF __FORCE_VAXC__                       # __FORCE_VAXC__
!Select VAXC on systems where DEC C exists
CC_OPTIONS = /VAXC
.ELSE                                       # __FORCE_VAXC__
!No flag allowed/needed on a pure VAXC system
CC_OPTIONS =
.ENDIF                                      # __FORCE_VAXC__
CC_DEFS =
.ENDIF                                  # __DECC__
.ENDIF                              # __IA64__
.ENDIF                          # __ALPHA__

!
! The .FIRST target is needed only if we're serious about building,
! and then, only if BZIP2 support was requested.
!
.IFDEF MMSTARGETS               # MMSTARGETS
.FIRST
	@ write sys$output "   Destination: $(DSTDIR)"
	@ write sys$output ""
	if ("$(DEST)" .nes. "") then -
	 if (f$search("$(DEST).DIR;1") .eqs. "") then -
	  create /directory $(DSTDIR)
.ENDIF                          # MMSTARGETS
CC_DEFS2 =
CFLAGS_INCL = /INCLUDE = []

.IFDEF __DEBUG__
CDEB = /DEBUG/NOOPTIMIZE
.ELSE
CDEB =
.ENDIF

CFLAGS_ALL  = $(CC_OPTIONS) $(CFLAGS) $(CDEB) $(CFLAGS_INCL) -
              /def=($(CC_DEFS) $(COMMON_DEFS) BZ_NO_STDIO, VMS) -
              $(CCOPTS)


OBJBZ2LIB = \
 $(DSTDIR)blocksort$(O), \
 $(DSTDIR)huffman$(O), \
 $(DSTDIR)crctable$(O), \
 $(DSTDIR)randtable$(O), \
 $(DSTDIR)compress$(O), \
 $(DSTDIR)decompress$(O), \
 $(DSTDIR)bzlib$(O)

OLBBZ2 = $(DSTDIR)LIBBZ2_NS$(A)

BZIP2_H = $(SRCDIR)bzlib.h $(SRCDIR)bzlib_private.h

!!!!!!!!!!!!!!!!!!! override default rules: !!!!!!!!!!!!!!!!!!!
.suffixes :
.suffixes : .ANL $(E) $(A) .MLB .HLB .TLB .FLB $(O) -
	    .FORM .BLI .B32 .C .c .COB -
	    .FOR .BAS .B16 .PLI .PEN .PAS .MAC .MAR .M64 .CLD .MSG .COR .DBL -
	    .RPG .SCN .IFDL .RBA .RC .RCO .RFO .RPA .SC .SCO .SFO .SPA .SPL -
	    .SQLADA .SQLMOD .RGK .RGC .MEM .RNO .HLP .RNH .L32 .REQ .R32 -
	    .L16 .R16 .TXT .H .FRM .MMS .DDL .COM .DAT .OPT .CDO .SDML .ADF -
	    .GDF .LDF .MDF .RDF .TDF

$(O)$(A) :
	If "''F$Search("$(MMS$TARGET)")'" .EQS. "" Then $(LIBR)/Create $(MMS$TARGET)
	$(LIBR)$(LIBRFLAGS) $(MMS$TARGET) $(MMS$SOURCE)

.c$(O) :
	$(CC) $(CFLAGS_ALL) /OBJ=$(MMS$TARGET) $(MMS$SOURCE)

!!!!!!!!!!!!!!!!!! here starts the bzip2 specific part !!!!!!!!!!!

DEFAULT default :	CHK_DESTDIR $(OLBBZ2)
	@	!	Do nothing.

CLEAN.COM clean.com :
	@ open/write tmp $(MMS$TARGET)
	@ 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 : clean.com
	@clean "$(OBJBZ2LIB)"
	@clean "$(OLBBZ2)"
	@- delete/noconfirm/nolog clean.com;*
        @- if ("$(DEST).dir" .nes. "") then -
	   if (f$search("$(DEST).dir") .nes. "") then -
	    set protect=w:d $(DEST).dir;*
        @- if ("$(DEST).dir" .nes. "") then -
	   if (f$search("$(DEST).dir") .nes. "") then -
	    delete/noconfirm $(DEST).dir;*

CHK_DESTDIR chk_destdir :
	@ If ("$(DEST)" .NES. "") Then -
	   If "''F$Search("$(DEST).DIR;1")'" .EQS. "" Then -
	    Create /directory $(DSTDIR)

$(OLBBZ2)	: $(OBJBZ2LIB)
	If "''F$Search("$(MMS$TARGET)")'" .EQS. "" Then $(LIBR)/Create $(MMS$TARGET)
	$(LIBR)$(LIBRFLAGS) $(MMS$TARGET) $(MMS$CHANGED_LIST)
	@ write sys$output "$(MMS$TARGET) updated."

$(OBJBZ2LIB)	: $(BZIP2_H)

$(DSTDIR)blocksort$(O)	: $(SRCDIR)blocksort.c
$(DSTDIR)huffman$(O)	: $(SRCDIR)huffman.c
$(DSTDIR)crctable$(O)	: $(SRCDIR)crctable.c
$(DSTDIR)randtable$(O)	: $(SRCDIR)randtable.c
$(DSTDIR)compress$(O)	: $(SRCDIR)compress.c
$(DSTDIR)decompress$(O)	: $(SRCDIR)decompress.c
$(DSTDIR)bzlib$(O)	: $(SRCDIR)bzlib.c