1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329
|
# WMAKE makefile for 16 bit MSDOS or 32 bit DOS extender (PMODE/W or DOS/4GW)
# using Watcom C/C++ v11.0+, by Paul Kienitz, last revised 16 Feb 2008.
# Makes UnZip.exe, fUnZip.exe, and UnZipSFX.exe.
#
# Invoke from UnZip source dir with "WMAKE -F MSDOS\MAKEFILE.WAT [targets]".
# To make the PMODE/W version use "WMAKE PM=1 ..."
# To make the DOS/4GW version use "WMAKE GW=1 ..." (overrides PM=1)
# Note: specifying PM or GW without NOASM requires that the win32 source
# directory be present, so it can access the 32 bit assembly source.
# PMODE/W is recommended over DOS/4GW for best performance.
# To build with debug info use "WMAKE DEBUG=1 ..."
# To build with no assembly modules use "WMAKE NOASM=1 ..."
# To omit unshrinking support use "WMAKE NO_LZW=1 ..."
# To support unreducing, get the real unreduce.c and go "WMAKE OFFEND_RMS=1 ..."
# To include support for bzip2 decompression (only for 32-bit), get the bzip2
# source distribution into the bzip2/ subfolder and start compilation
# with "WMAKE PM=1 USEBZ2=1 ..."
#
# Other options to be fed to the compiler can be specified in an environment
# variable called LOCAL_UNZIP.
variation = $(%LOCAL_UNZIP)
# Stifle annoying "Delete this file?" questions when errors occur:
.ERASE
.EXTENSIONS:
.EXTENSIONS: .exe .obj .obx .c .h .asm
# We maintain multiple sets of object files in different directories so that
# we can compile msdos, dos/4gw, and win32 versions of UnZip without their
# object files interacting. The following var must be a directory name
# ending with a backslash. All object file names must include this macro
# at the beginning, for example "$(O)foo.obj".
!ifdef GW
PM = 1 # both protected mode formats use the same object files
!endif
!ifdef DEBUG
! ifdef PM
OBDIR = od32d
! else
OBDIR = od16d
! endif
!else
! ifdef PM
OBDIR = ob32d
! else
OBDIR = ob16d
! endif
!endif
O = $(OBDIR)\ # comment here so backslash won't continue the line
!ifdef NO_LZW
cvars = $+$(cvars)$- -DLZW_CLEAN
avars = $+$(avars)$- -DLZW_CLEAN
# "$+$(foo)$-" means expand foo as it has been defined up to now; normally,
# this Make defers inner expansion until the outer macro is expanded.
!endif
!ifdef OFFEND_RMS
cvars = $+$(cvars)$- -DUSE_SMITH_CODE
avars = $+$(avars)$- -DUSE_SMITH_CODE
!endif
IZ_BZIP2 = bzip2
!ifdef USEBZ2
!ifdef PM
cvars = $+$(cvars)$- -DUSE_BZIP2 -I$(IZ_BZIP2)
bz2errob = $(O)ubz2err.obj
bz2errox = $(O)ubz2err.obj
BZIPLIB = $(IZ_BZIP2)/$(OBDIR)/bz2.lib
BZ2LNKLIB = lib {$(BZIPLIB)}
!else
bz2errob =
bz2errox =
BZIPLIB =
BZ2LNKLIB =
!endif
!else
bz2errob =
bz2errox =
BZIPLIB =
BZ2LNKLIB =
!endif
# The assembly hot-spot code in crc_i[3]86.asm is optional. This section
# controls its usage.
!ifdef NOASM
crcaob =
crcaof =
crcaox =
!else # !NOASM
cvars = $+$(cvars)$- -DASM_CRC
! ifdef PM
crcaob = $(O)crc_i386.obj
crcaof = $(O)crc_i38f.obj
crcaox = $(O)crc_i386.obx
crc_s = win32\crc_i386.asm # requires that the win32 directory be present
! else
crcaob = $(O)crc_i86.obj
crcaof = $(O)crc_i8f.obj
crcaox = $(O)crc_i86.obx
crc_s = msdos\crc_i86.asm
! endif
!endif
# Our object files: OBJ[A-C] is for UnZip, OBJX for UnZipSFX, OBJF for fUnZip:
OBJA1 = $(O)unzip.obj $(O)crc32.obj $(crcaob) $(O)crypt.obj $(O)envargs.obj
OBJA = $(OBJA1) $(O)explode.obj $(O)extract.obj $(O)fileio.obj $(O)globals.obj
OBJB2 = $(O)inflate.obj $(O)list.obj $(O)match.obj $(O)process.obj
OBJB = $(OBJB2) $(O)ttyio.obj $(bz2errob) $(O)unreduce.obj
OBJC = $(O)unshrink.obj $(O)zipinfo.obj $(O)msdos.obj
OBJX2 = $(O)unzip.obx $(O)crc32.obx $(crcaox) $(O)crypt.obx $(O)extract.obx
OBJX1 = $(OBJX2) $(O)fileio.obx $(O)globals.obx $(O)inflate.obx $(O)match.obx
OBJX = $(OBJX1) $(O)process.obx $(bz2errox) $(O)ttyio.obx $(O)msdos.obx
OBJF1 = $(O)funzip.obj $(O)crc32f.obj $(crcaof) $(O)cryptf.obj $(O)globalsf.obj
OBJF = $(OBJF1) $(O)inflatef.obj $(O)ttyiof.obj $(O)msdosf.obj
# Common header files included by all C sources:
UNZIP_H = unzip.h unzpriv.h globals.h msdos\doscfg.h
# Now we have to pick out the proper compiler and options for it. This gets
# pretty complicated with the PM, GW, DEBUG, and NOASM options...
link = wlink
asm = wasm
!ifdef PM
cc = wcc386
# Use Pentium Pro timings, flat memory, static strings in code, max strictness:
cflags = -bt=DOS -mf -6r -zt -zq -wx
aflags = -bt=DOS -mf -3 -zq
cflagf = $(cflags)
aflagf = $(aflags)
cflagx = $(cflags)
aflagx = $(aflags)
! ifdef GW
lflags = sys DOS4G
! else
# THIS REQUIRES THAT PMODEW.EXE BE FINDABLE IN THE COMMAND PATH.
# It does NOT require you to add a pmodew entry to wlink.lnk or wlsystem.lnk.
defaultlibs = libpath %WATCOM%\lib386 libpath %WATCOM%\lib386\dos
lflags = format os2 le op osname='PMODE/W' op stub=pmodew.exe $(defaultlibs)
! endif
!else # plain 16-bit DOS:
cc = wcc
# Use plain 8086 code, large memory, static strings in code, max strictness:
cflags = -bt=DOS -ml -0 -zt -zq -wx
aflags = -bt=DOS -ml -0 -zq
# for fUnZip, Deflate64 support requires the compact memory model:
cflagf = -bt=DOS -mc -0 -zt -zq -wx
aflagf = -bt=DOS -mc -0 -zq
# for UnZipSFX (without Deflate64 support), use the small memory model:
cflagx = -bt=DOS -ms -0 -zt -zq -wx
aflagx = -bt=DOS -ms -0 -zq
lflags = sys DOS
!endif # !PM
cvars = $+$(cvars)$- -DMSDOS $(variation)
avars = $+$(avars)$- $(variation)
# Specify optimizations, or a nonoptimized debugging version:
!ifdef DEBUG
cdebug = -od -d2
cdebux = -od -d2
ldebug = d w all op symf
!else
! ifdef PM
cdebug = -s -obhikl+rt -oe=100 -zp8
# -oa helps slightly but might be dangerous.
! else
cdebug = -s -oehiklrt
! endif
cdebux = -s -obhiklrs
ldebug = op el
!endif
# How to compile sources:
.c.obx:
$(cc) $(cdebux) $(cflagx) $(cvars) -DSFX $[@ -fo=$@
.c.obj:
$(cc) $(cdebug) $(cflags) $(cvars) $[@ -fo=$@
# Here we go! By default, make all targets, except no UnZipSFX for PMODE:
!ifdef PM
all: UnZip.exe fUnZip.exe
!else
all: UnZip.exe fUnZip.exe UnZipSFX.exe
!endif
# Convenient shorthand options for single targets:
u: UnZip.exe .SYMBOLIC
f: fUnZip.exe .SYMBOLIC
x: UnZipSFX.exe .SYMBOLIC
UnZip.exe: $(OBDIR) $(OBJA) $(OBJB) $(OBJC) $(BZIPLIB)
set WLK_VA=file {$(OBJA)}
set WLK_VB=file {$(OBJB)}
set WLK_VC=file {$(OBJC)} $(BZ2LNKLIB)
$(link) $(lflags) $(ldebug) name $@ @WLK_VA @WLK_VB @WLK_VC
set WLK_VA=
set WLK_VB=
set WLK_VC=
# We use WLK_VA/WLK_VB/WLK_VC to keep the size of each command below 256 chars.
UnZipSFX.exe: $(OBDIR) $(OBJX) $(BZIPLIB)
set WLK_VX=file {$(OBJX)}
$(link) $(lflags) $(ldebug) name $@ @WLK_VX
set WLK_VX=
fUnZip.exe: $(OBDIR) $(OBJF)
set WLK_VF=file {$(OBJF)}
$(link) $(lflags) $(ldebug) name $@ @WLK_VF
set WLK_VF=
# Source dependencies:
# for UnZip ...
$(O)crc32.obj: crc32.c $(UNZIP_H) zip.h crc32.h
$(O)crypt.obj: crypt.c $(UNZIP_H) zip.h crypt.h crc32.h ttyio.h
$(O)envargs.obj: envargs.c $(UNZIP_H)
$(O)explode.obj: explode.c $(UNZIP_H)
$(O)extract.obj: extract.c $(UNZIP_H) crc32.h crypt.h
$(O)fileio.obj: fileio.c $(UNZIP_H) crc32.h crypt.h ttyio.h ebcdic.h
$(O)globals.obj: globals.c $(UNZIP_H)
$(O)inflate.obj: inflate.c inflate.h $(UNZIP_H)
$(O)list.obj: list.c $(UNZIP_H)
$(O)match.obj: match.c $(UNZIP_H)
$(O)process.obj: process.c $(UNZIP_H) crc32.h
$(O)ttyio.obj: ttyio.c $(UNZIP_H) zip.h crypt.h ttyio.h
$(O)ubz2err.obj: ubz2err.c $(UNZIP_H)
$(O)unreduce.obj: unreduce.c $(UNZIP_H)
$(O)unshrink.obj: unshrink.c $(UNZIP_H)
$(O)unzip.obj: unzip.c $(UNZIP_H) crypt.h unzvers.h consts.h
$(O)zipinfo.obj: zipinfo.c $(UNZIP_H)
# for UnZipSFX ...
$(O)crc32.obx: crc32.c $(UNZIP_H) zip.h crc32.h
$(O)crypt.obx: crypt.c $(UNZIP_H) zip.h crypt.h crc32.h ttyio.h
$(O)extract.obx: extract.c $(UNZIP_H) crc32.h crypt.h
$(O)fileio.obx: fileio.c $(UNZIP_H) crc32.h crypt.h ttyio.h ebcdic.h
$(O)globals.obx: globals.c $(UNZIP_H)
$(O)inflate.obx: inflate.c inflate.h $(UNZIP_H)
$(O)match.obx: match.c $(UNZIP_H)
$(O)process.obx: process.c $(UNZIP_H) crc32.h
$(O)ttyio.obx: ttyio.c $(UNZIP_H) zip.h crypt.h ttyio.h
$(O)ubz2err.obx: ubz2err.c $(UNZIP_H)
$(O)unzip.obx: unzip.c $(UNZIP_H) crypt.h unzvers.h consts.h
# Special case object files:
$(O)msdos.obj: msdos\msdos.c $(UNZIP_H)
$(cc) $(cdebug) $(cflags) $(cvars) msdos\msdos.c -fo=$@
$(O)msdos.obx: msdos\msdos.c $(UNZIP_H)
$(cc) $(cdebux) $(cflagx) $(cvars) -DSFX msdos\msdos.c -fo=$@
!ifndef NOASM
$(crcaob): $(crc_s)
$(asm) $(aflags) $(avars) $(crc_s) -fo=$@
$(crcaof): $(crc_s)
$(asm) $(aflagf) $(avars) $(crc_s) -fo=$@
$(crcaox): $(crc_s)
$(asm) $(aflagx) $(avars) $(crc_s) -fo=$@
!endif
# Variant object files for fUnZip, using $(cflagf):
$(O)funzip.obj: funzip.c $(UNZIP_H) crc32.h crypt.h ttyio.h
$(cc) $(cdebux) $(cflagf) $(cvars) funzip.c -fo=$@
$(O)crc32f.obj: crc32.c $(UNZIP_H) zip.h crc32.h
$(cc) $(cdebux) $(cflagf) $(cvars) -DFUNZIP crc32.c -fo=$@
$(O)cryptf.obj: crypt.c $(UNZIP_H) zip.h crypt.h crc32.h ttyio.h
$(cc) $(cdebux) $(cflagf) $(cvars) -DFUNZIP crypt.c -fo=$@
$(O)globalsf.obj: globals.c $(UNZIP_H)
$(cc) $(cdebux) $(cflagf) $(cvars) -DFUNZIP globals.c -fo=$@
$(O)inflatef.obj: inflate.c inflate.h $(UNZIP_H) crypt.h
$(cc) $(cdebux) $(cflagf) $(cvars) -DFUNZIP inflate.c -fo=$@
$(O)ttyiof.obj: ttyio.c $(UNZIP_H) zip.h crypt.h ttyio.h
$(cc) $(cdebux) $(cflagf) $(cvars) -DFUNZIP ttyio.c -fo=$@
$(O)msdosf.obj: msdos\msdos.c $(UNZIP_H)
$(cc) $(cdebux) $(cflagf) $(cvars) -DFUNZIP msdos\msdos.c -fo=$@
# The bzip2 (de)compression library for BZIP2 support:
$(IZ_BZIP2)/$(OBDIR)/bz2.lib : .ALWAYS .RECHECK
$(MAKE) -h -f $(IZ_BZIP2)/makbz2iz.wat CC=$(cc) AR=lib386 &
CFLSYS="$(cdebug) $(cflags)" &
BZROOTDIR=$(IZ_BZIP2) BZOBDIR=$(IZ_BZIP2)/$(OBDIR)
# Creation of subdirectory for intermediate files
$(OBDIR):
-mkdir $@
# Unwanted file removal:
clean_bz2_lib: .SYMBOLIC
$(MAKE) -h -f $(IZ_BZIP2)/makbz2iz.wat &
BZROOTDIR=$(IZ_BZIP2) BZOBDIR=$(IZ_BZIP2)\$(OBDIR) clean
clean: clean_bz2_lib .SYMBOLIC
del $(O)*.ob?
cleaner: clean .SYMBOLIC
del UnZip.exe
del fUnZip.exe
del UnZipSFX.exe
|