File: Makefile

package info (click to toggle)
unzip 6.0-29
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 10,432 kB
  • sloc: ansic: 55,350; cpp: 4,084; makefile: 2,481; asm: 1,789; cs: 1,012; sh: 110
file content (778 lines) | stat: -rw-r--r-- 24,888 bytes parent folder | download | duplicates (10)
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
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
# NMAKE Makefile for Windows NT/2K/XP/... and Windows 95/98/Me
#   D. Feinleib 7/92 <t-davefe@microsoft.com>
#   H. Gessau 9/93 <henryg@kullmar.kullmar.se>
#   J. Lee 8/95 (johnnyl@microsoft.com)
#   C. Spieler 03/99
#
# Last revised:  06 Jan 2009
#
# Tested with VC++ 2.0 for NT for MIPS and Alpha, Visual C++ 2.2 for Intel CPUs
# Revision tested with VC++ 5.0, 6.0, 8.0 and 9.0 for Intel CPUs
#
# Option switches
# (specify OPTFLAG as "OPTFLAG={1|0}" on the nmake command line)
#   USEBZ2DLL=1         : bzip2 support, link against externally supplied dll
#   USEBZ2STAT=1        : bzip2 support by static library created during build
#   USEBZ2=1            : alias for USEBZ2STAT=1
#
#   USEZLIBDLL=1        : replace built-in inflate by external zlib dll
#   USEZLIBSTAT=1       : replace built-in inflate by external zlib static lib
#   USEZLIB=1           : alias for USEZLIBSTAT=1
#
#   USE_DLLRUNTIME      : link executables against C runtime dll
#                         (default: executables are linked against static lib)
#                         USEBZ2DLL or USEZLIBDLL imply USE_DLLRUNTIME !
#   DLLSTANDALONE       : unzip32.dll is linked against static MT runtime lib
#                         (default: unzip32.dll linked against C runtime dll)
#
#   USE_UTF8            : =0 no unicode names support
#                         =1 force recognition of UTF8 extra fields and
#                            "UTF8 name" attrib (default)
#
#   USEASM              : use assembler code for crc32 function (default)
#   NOASM               : use C implementation for crc32 function
#   USEMASM             : use MS macro assembler (MASM) to assemble crc32 code
#   USEML               : use MS macro assembler (ML driver) to create crc32
#                         (default: use C inline assembler code for crc32)
#
#   NOCRC_OPT=1         : disable "unfolding CRC tables" optimization
#
#   USEIZTIMEZONE       : =0 (default) timezone setup by built-in C RTL
#                         =1 apply InfoZip replacement code for timezone setup
#                            (recognizes extended syntax when timezone setup
#                            is overridden by environment variable)

# Nmake macros for building Win32 applications
# To build with debug info use 'nmake debug=1'
!IFNDEF debug
NODEBUG=1
!ENDIF

!ifdef NOASM
APPLY_ASMCRC=0
!else
!ifdef USEASM
APPLY_ASMCRC=1
!endif
!endif

# Options to decide whether using zlib as decompression library.
# Specify USEZLIBDLL or USEZLIBSTAT to replace UnZip's built-in inflation code
# by the inflate service of the zlib library.
# (The option USEZLIB is currently set as a synonym for USEZLIBSTAT.)
!if defined(USEZLIBSTAT) || defined(USEZLIBDLL)
USEZLIB=1
!endif

!ifdef USEZLIB
!if defined(USEZLIBSTAT) && defined(USEZLIBDLL)
!ERROR Conflicting options USEZLIBSTAT and USEZLIBDLL requested!
!endif
# Set static zlib linkage as default in case nothing is specified.
!if !defined(USEZLIBSTAT) && !defined(USEZLIBDLL)
USEZLIBSTAT=1
!endif
!undef USEASM
APPLY_ASMCRC=0
NOCRC_OPT=1
ZLIBLIB=zlib.lib
ZLIBLIBDLL=zdll.lib
!else # !USEZLIB
ZLIBLIB=
ZLIBLIBDLL=
!endif # ?USEZLIB


# Options to include optional support for bzip2 decompression
!if defined(USEBZ2STAT) || defined(USEBZ2DLL)
USEBZ2=1
!endif

IZ_BZIP2 = bzip2
# Subfolder containing bz2 objects/lib for UnZip program target(s).
OBEXE = obexe
# Subfolder containing bz2 objects/lib for UnZip DLL target(s).
OBDLL = obdll
!ifdef USEBZ2
!if defined(USEBZ2STAT) && defined(USEBZ2DLL)
!ERROR Conflicting options USEBZ2STAT and USEBZ2DLL requested!
!endif
INC_BZ2LIB=-I$(IZ_BZIP2)
# Set static bzip2 linkage as default in case nothing is specified.
!if !defined(USEBZ2STAT) && !defined(USEBZ2DLL)
USEBZ2STAT=1
!endif
!IFNDEF debug
!ifdef USEBZ2STAT
BZIPLIBEXE=$(IZ_BZIP2)/$(OBEXE)/bz2.lib
BZIPLIBDLL=$(IZ_BZIP2)/$(OBDLL)/bz2.lib
!else
BZIPLIBEXE=bz2.lib
BZIPLIBDLL=bz2.lib
!endif
!ELSE
BZIPLIBEXE=bz2d.lib
BZIPLIBDLL=bz2d.lib
!ENDIF
!else # !USEBZ2
INC_BZ2LIB=
BZIPLIBEXE=
BZIPLIBDLL=
!endif # ?USEBZ2

!ifndef APPLY_ASMCRC
#default ASM CRC code (inline asm in C source) for now...
APPLY_ASMCRC=1
!endif

!ifndef USE_IZTIMEZONE
#default: do not use the IZ timezone replacement
USE_IZTIMEZONE=0
!endif

!ifndef USE_UTF8
#default for now: include support for UTF8 paths
USE_UTF8=1
!endif

!IF "$(CPU)" == ""  &&  "$(PROCESSOR_ARCHITECTURE)" == "x86"
CPU = i386
!ENDIF
!IF "$(CPU)" == ""  &&  "$(PROCESSOR_ARCHITECTURE)" == "MIPS"
CPU = $(PROCESSOR_ARCHITECTURE)
!ENDIF
!IF "$(CPU)" == ""  &&  "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
CPU = $(PROCESSOR_ARCHITECTURE)
!ENDIF
!IF "$(CPU)" == ""  &&  "$(PROCESSOR_ARCHITECTURE)" == "PPC"
CPU = $(PROCESSOR_ARCHITECTURE)
!ENDIF
!IF "$(CPU)" == ""
CPU = i386
!ENDIF

# special subdirectory for the static library binaries, to separate them
# from other binaries (including dll import library file)
OBDIR = ow32lib
OB = $(OBDIR)/

# object files
OBJU1 = unzip.obj crc32.obj $(CRCA_O) crypt.obj envargs.obj explode.obj
OBJU2 = extract.obj fileio.obj globals.obj inflate.obj list.obj match.obj
OBJU3 = process.obj ttyio.obj ubz2err.obj unreduce.obj unshrink.obj zipinfo.obj
OBJUS = win32.obj win32i64.obj nt.obj $(TIMEZONE_OBJU)
OBJU  = $(OBJU1) $(OBJU2) $(OBJU3) $(OBJUS)
OBJX1 = unzipsfx.obj crc32_.obj $(CRCA_OX) crypt_.obj
OBJX2 = extract_.obj fileio_.obj globals_.obj inflate_.obj
OBJX3 = match_.obj process_.obj ttyio_.obj ubz2err_.obj
OBJXS = win32_.obj win32i64_.obj nt_.obj $(TIMEZONE_OBJX)
OBJX  = $(OBJX1) $(OBJX2) $(OBJX3) $(OBJXS)
OBJF1 = funzip.obj crc32f.obj $(CRCA_OF) cryptf.obj globalsf.obj
OBJF2 = inflatef.obj ttyiof.obj
OBJFS = win32f.obj win32i64f.obj
OBJF  = $(OBJF1) $(OBJF2) $(OBJFS)
OBJD1 = api.obj crc32l.obj $(CRCA_OL) cryptl.obj explodel.obj
OBJD2 = extractl.obj fileiol.obj globalsl.obj inflatel.obj
OBJD3 = listl.obj matchl.obj processl.obj
OBJD4 = ubz2errl.obj unreducl.obj unshrnkl.obj zipinfol.obj
OBJDS = win32l.obj win32i64l.obj ntl.obj windll.obj $(TIMEZONE_OBJD)
OBJD  = $(OBJD1) $(OBJD2) $(OBJD3) $(OBJD4) $(OBJDS)
OBLX1 = apig.obj crc32g.obj $(CRCA_OG) cryptg.obj
OBLX2 = extractg.obj fileiog.obj globalsg.obj inflateg.obj
OBLX3 = matchg.obj processg.obj
OBLXS = win32g.obj win32i64g.obj ntg.obj windllg.obj $(TIMEZONE_OBLX)
OBLX  = $(OBLX1) $(OBLX2) $(OBLX3) $(OBLXS)
OBGX  = sfxwiz.obj
OBJB1 = $(OB)apib.obj $(OB)crc32b.obj $(CRCA_OB) $(OB)cryptb.obj
OBJB2 = $(OB)explodeb.obj $(OB)extractb.obj $(OB)fileiob.obj $(OB)globalsb.obj
OBJB3 = $(OB)inflateb.obj $(OB)listb.obj $(OB)matchb.obj $(OB)processb.obj
OBJB4 = $(OB)ubz2errb.obj $(OB)unreducb.obj $(OB)unshrnkb.obj $(OB)zipinfob.obj
OBJBS = $(OB)win32b.obj $(OB)win32i64b.obj $(OB)ntb.obj $(OB)windllb.obj $(TIMEZONE_OBJB)
OBJB  = $(OBJB1) $(OBJB2) $(OBJB3) $(OBJB4) $(OBJBS)

UNZIP_H = unzip.h unzpriv.h globals.h win32/w32cfg.h
WINDLL_H = windll/windll.h windll/decs.h windll/structs.h
WINDLL_DEF = windll/windll32.def
WINDLL_IMP_H = windll/decs.h windll/structs.h

!if $(APPLY_ASMCRC) != 0
CFVARS_ASM = -DASM_CRC
!else
CFVARS_ASM = -DNO_ASM
!endif

!if $(USE_IZTIMEZONE) != 0
LOCAL_UNZIP = -DW32_USE_IZ_TIMEZONE $(LOCAL_UNZIP)
!endif

!if $(USE_UTF8) != 0
LOCAL_UNZIP = -DUNICODE_SUPPORT $(LOCAL_UNZIP)
!else
LOCAL_UNZIP = -DNO_UNICODE_SUPPORT $(LOCAL_UNZIP)
!endif

!ifndef NOCRC_OPT
LOCAL_UNZIP = -DIZ_CRCOPTIM_UNFOLDTBL $(LOCAL_UNZIP)
!endif

!ifdef USEZLIB
LOCAL_UNZIP = -DUSE_ZLIB $(LOCAL_UNZIP)
!endif
!ifdef USEBZ2
LOCAL_UNZIP = -DUSE_BZIP2 $(LOCAL_UNZIP)
!endif

#CF_LOC = -nologo -J -D_MBCS $(CFVARS_ASM) -DREENTRANT
CF_LOC = -nologo -J -D_MBCS $(CFVARS_ASM) $(LOCAL_UNZIP)

!if $(APPLY_ASMCRC) != 0
CRCA_O = crc_i386.obj
CRCA_OX = $(CRCA_O)
CRCA_OF = $(CRCA_O)
CRCA_OL = crci386l.obj
CRCA_OG = crci386g.obj
CRCA_OB = $(OB)crci386b.obj
!else
CRCA_O =
CRCA_OX =
CRCA_OF =
CRCA_OL =
CRCA_OG =
CRCA_OB =
!endif

!if $(USE_IZTIMEZONE) != 0
TIMEZONE_OBJU = timezone.obj
TIMEZONE_OBJX = timezon_.obj
TIMEZONE_OBJD = timezonl.obj
TIMEZONE_OBLX = timezolx.obj
TIMEZONE_OBJB = $(OB)timezonb.obj
!else
TIMEZONE_OBJU =
TIMEZONE_OBJX =
TIMEZONE_OBJD =
TIMEZONE_OBLX =
TIMEZONE_OBJB =
!endif

# binary declarations common to all platforms
cc     = cl
rc     = rc
link   = link
implib = lib
hc     = hcrtf -xn

# declarations common to all compiler options
cflags = -c -W3 -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo
!IF "$(CPU)" == "i386"
cflags = $(cflags) -D_X86_=1
!ELSE
!IF "$(CPU)" == "ALPHA"
cflags = $(cflags) -D_ALPHA_=1
!ENDIF
!ENDIF

# for Windows applications that use the C Run-Time libraries
cvars      = -DWIN32 -D_WIN32
cvarsmt    = $(cvars) -MT
cvarsdll   = $(cvars) -MD

## The CRT library, depending on Compiler version and target configuration.
## This Makefile version has been changed to rely on the 'default library'
## notations in the compiled object files, to work around differences between
## MS Visual C++ releases concerning libraries support.
#libc = libc.lib oldnames.lib
#libcmt = libcmt.lib oldnames.lib
#libcdll = msvcrt.lib oldnames.lib

# optional profiling and tuning libraries
!IFDEF PROFILE
optlibs =  cap.lib
!ELSE
!IFDEF TUNE
optlibs = wst.lib
!ELSE
optlibs =
!ENDIF
!ENDIF

# USER32.LIB is needed for OemToChar and related routines
baselibs = kernel32.lib $(optlibs) advapi32.lib user32.lib
winlibs  = $(baselibs) gdi32.lib comdlg32.lib winspool.lib
conlibs = $(baselibs)
conlibsmt = $(baselibs)
conlibsdll = $(baselibs)
guilibs = $(winlibs)
guilibsdll = $(winlibs)

# Some optimization (if not debugging)
!IFDEF NODEBUG
cdebug = -O2
cdbgsz = -O1
!ELSE
!IFDEF PROFILE
cdebug = -Gh -Zd -Ox
!ELSE
!IFDEF TUNE
cdebug = -Gh -Zd -Ox
!ELSE
cdebug = -Z7 -Od
!ENDIF
!ENDIF
cdbgsz = $(cdebug)
!ENDIF

# declarations common to all linker options
lflags  = /INCREMENTAL:NO /PDB:NONE /NOLOGO

# for Windows applications that use the C Run-Time libraries
conlflags = $(lflags) /subsystem:console
guilflags = $(lflags) /subsystem:windows
dlllflags = $(lflags) /DLL

# -------------------------------------------------------------------------
# Target Module Dependent Link Debug Flags - must be specified after $(link)
#
# These switches allow the inclusion of the necessary symbolic information
# for source level debugging with WinDebug, profiling and/or performance
# tuning.
#
# Note: Debug switches are on by default.
# -------------------------------------------------------------------------
!IFDEF NODEBUG
ldebug = /RELEASE
!ELSE
!IFDEF PROFILE
ldebug = -debug:mapped,partial -debugtype:coff
!ELSE
!IFDEF TUNE
ldebug = -debug:mapped,partial -debugtype:coff
!ELSE
ldebug = -debug:full -debugtype:cv
!ENDIF
!ENDIF
!ENDIF

!ifdef PROFILEINFO
ldebug = $(ldebug) /PROFILE
!endif

!ifdef SYM
ldebug = $(ldebug) /DEBUG:FULL /DEBUGTYPE:CV
cdebug = $(cdebug) -Zi
cdbgsz = $(cdbgsz) -Zi
!endif

# When using zlib and/or bzip2 external decompression code DLLs, we want
# to link against the dll version of the C runtime library.
!IF defined(USEZLIBDLL) || defined(USEBZ2DLL) || defined(USE_DLLRUNTIME)
LINK_CRTDLL=1
!UNDEF DLLSTANDALONE
!ELSE
LINK_CRTDLL=0
!ENDIF

!IF $(LINK_CRTDLL) == 1
# Using zlib DLL as decompression core (and/or bzip2 decompression dll)
# implies linking all executables against the DLL version of the C RTL.
cvars_iz = $(cvarsdll) $(CF_LOC)
cvars_izdll = $(cvarsdll) $(CF_LOC)
conlibs_iz = $(conlibsdll) $(ZLIBLIBDLL) $(BZIPLIBEXE)
conlibs_izdll = $(conlibsdll) $(ZLIBLIBDLL) $(BZIPLIBDLL)
guilibs_iz = $(guilibsdll) $(ZLIBLIBDLL) $(BZIPLIBEXE)
!ELSE
# With the default setup (using Info-ZIP's own inflate code and/or static
# external decompression code), the executables are linked against the
# single-thread static C-RTL library to get self-contained programs.
cvars_iz = $(cvars) $(CF_LOC)
conlibs_iz = $(conlibs) $(ZLIBLIB) $(BZIPLIBEXE)
guilibs_iz = $(guilibs) $(ZLIBLIB) $(BZIPLIBEXE)

!IFDEF DLLSTANDALONE
# The standalone variant of unzip32.dll is linked against the
# multithread-safe static C runtime library.
cvars_izdll = $(cvarsmt) $(CF_LOC)
conlibs_izdll = $(conlibsmt) $(ZLIBLIB) $(BZIPLIBDLL)
!ELSE
# The (normal) variant of unzip32.dll is linked against the import library
# of the multithread-safe C runtime dll.
# -> smaller dll size; efficient use of shared resources,
#    but requires the C RTL DLL msvcrt.dll to be installed at runtime
cvars_izdll = $(cvarsdll) $(CF_LOC)
conlibs_izdll = $(conlibsdll) $(ZLIBLIBDLL) $(BZIPLIBDLL)
!ENDIF
!ENDIF # ?(LINK_CRTDLL == 1)

CFLAGS_UN = $(cdebug) $(cflags) $(INC_BZ2LIB) $(cvars_iz)
CFLAGS_SX = $(cdbgsz) $(cflags) $(INC_BZ2LIB) $(cvars_iz) -DSFX
CFLAGS_FU = $(cdebug) $(cflags) $(cvars_iz) -DFUNZIP
CFLAGS_DL = $(cdebug) $(cflags) $(INC_BZ2LIB) $(cvars_izdll) -DWINDLL -DDLL
CFLAGS_DX = $(cdebug) $(cflags) $(INC_BZ2LIB) $(cvars_izdll)
CFLAGS_SL = $(cdbgsz) $(cflags) $(INC_BZ2LIB) $(cvars_iz) -DWINDLL -DDLL -DUNZIPLIB -DSFX
CFLAGS_GX = $(cdbgsz) $(cflags) $(cvars_iz) -DSFX
CFLAGS_LB = $(cdebug) $(cflags) $(INC_BZ2LIB) $(cvars_iz) -DWINDLL -DDLL -DUNZIPLIB

# You may define VC6LINK if your linker recognizes "-opt:nowin98" alignment
# qualifier. (VC6 or newer). This option reduces the executable size of the
# SFX stubs (Instead, you might apply the free executable compressor "upx"
# which is far more efficient in reducing the stub's file size.)
!IFDEF VC6LINK
LINKOPT_SIZE = -opt:nowin98
!ENDIF

# How to compile sources
.c.obj:
	$(cc) $(CFLAGS_UN) -Fo$@ $<

# How to link
.obj.exe:
	$(link) $(ldebug) $(conlflags) $(conlibs_iz) $** -out:$@


# Default target is all command-line executables
unzips: unzip.exe funzip.exe unzipsfx.exe
guisfx: SFXWiz32.exe
dll: unzip32.dll
dllsample: uzexampl.exe
lib: $(OBDIR) $(OB)unzip32.lib
all: unzips guisfx dll dllsample lib


unzip.exe:	$(OBJU) $(BZIPLIBEXE) winapp.res
	$(link) $(ldebug) $(conlflags) $(conlibs_iz) $** -out:$@
unzipsfx.exe:	$(OBJX) $(BZIPLIBEXE)
	$(link) $(ldebug) $(conlflags) $(conlibs_iz) $** $(LINKOPT_SIZE) -out:$@
funzip.exe:	$(OBJF)
unzip32.dll:	$(OBJD) $(BZIPLIBDLL) windll.res $(WINDLL_DEF)
	$(link) $(ldebug) $(dlllflags) $(conlibs_izdll) -def:$(WINDLL_DEF) \
		$(OBJD) $(BZIPLIBDLL) windll.res -out:$@
unzsfx32.lib:	$(OBLX)
	$(link) -lib $** -out:$@
SFXWiz32.exe:	$(OBGX) sfxwiz.res unzsfx32.lib $(BZIPLIBEXE)
	$(link) $(ldebug) $(guilflags) $(guilibs_iz) \
		$(OBGX) sfxwiz.res unzsfx32.lib $(LINKOPT_SIZE) -out:$@
uzexampl.exe:	uzexampl.obj
	$(link) $(ldebug) $(conlflags) $(conlibs) version.lib $** -out:$@
$(OB)unzip32.lib:	$(OBJB)
	$(link) -lib $** -out:$@

$(IZ_BZIP2)/$(OBEXE)/bz2.lib:
	$(MAKE) -f $(IZ_BZIP2)/makbz2iz.msc \
	CFLSYS="$(cdebug) $(cflags) $(cvars_iz)" \
	BZROOTDIR=$(IZ_BZIP2) BZOBDIR=$(IZ_BZIP2)\$(OBEXE)

$(IZ_BZIP2)/$(OBDLL)/bz2.lib:
	$(MAKE) -f $(IZ_BZIP2)/makbz2iz.msc \
	CFLSYS="$(cdebug) $(cflags) $(cvars_izdll)" \
	BZROOTDIR=$(IZ_BZIP2) BZOBDIR=$(IZ_BZIP2)\$(OBDLL)

crc32.obj:	crc32.c $(UNZIP_H) zip.h crc32.h
crypt.obj:	crypt.c $(UNZIP_H) zip.h crypt.h crc32.h ttyio.h
envargs.obj:	envargs.c $(UNZIP_H)
explode.obj:	explode.c $(UNZIP_H)
extract.obj:	extract.c $(UNZIP_H) crc32.h crypt.h
fileio.obj:	fileio.c $(UNZIP_H) crc32.h crypt.h ttyio.h ebcdic.h
funzip.obj:	funzip.c $(UNZIP_H) crc32.h crypt.h ttyio.h
globals.obj:	globals.c $(UNZIP_H)
inflate.obj:	inflate.c inflate.h $(UNZIP_H)
list.obj:	list.c $(UNZIP_H)
match.obj:	match.c $(UNZIP_H)
process.obj:	process.c $(UNZIP_H) crc32.h
timezone.obj:	timezone.c $(UNZIP_H) zip.h timezone.h
ttyio.obj:	ttyio.c $(UNZIP_H) zip.h crypt.h ttyio.h
ubz2err.obj:	ubz2err.c $(UNZIP_H)
unreduce.obj:	unreduce.c $(UNZIP_H)
unshrink.obj:	unshrink.c $(UNZIP_H)
unzip.obj:	unzip.c $(UNZIP_H) crypt.h unzvers.h consts.h
zipinfo.obj:	zipinfo.c $(UNZIP_H)

win32.obj:	win32/win32.c $(UNZIP_H) win32/nt.h
	$(cc) $(CFLAGS_UN) -I. win32/win32.c -Fo$@

win32i64.obj:	win32/win32i64.c $(UNZIP_H)
	$(cc) $(CFLAGS_UN) -I. win32/win32i64.c -Fo$@

nt.obj:		win32/nt.c $(UNZIP_H) win32/nt.h
	$(cc) $(CFLAGS_UN) -I. win32/nt.c -Fo$@

!ifdef USEMASM
crc_i386.obj:	win32/crc_i386.asm
	masm -ml win32/crc_i386.asm,$@;
!else
!ifdef USEML
crc_i386.obj:	win32/crc_i386.asm
	ml -c -Cp -coff -Fo$@ win32/crc_i386.asm
!else
crc_i386.obj:	win32/crc_i386.c
	$(cc) $(CFLAGS_UN) -I. win32/crc_i386.c -Fo$@
!endif
!endif

# UnZipSFX compilation section
crc32_.obj:	crc32.c $(UNZIP_H) zip.h crc32.h
	$(cc) $(CFLAGS_SX) crc32.c -Fo$@
crypt_.obj:	crypt.c $(UNZIP_H) zip.h crypt.h crc32.h ttyio.h
	$(cc) $(CFLAGS_SX) crypt.c -Fo$@
extract_.obj:	extract.c $(UNZIP_H) crc32.h crypt.h
	$(cc) $(CFLAGS_SX) extract.c -Fo$@
fileio_.obj:	fileio.c $(UNZIP_H) crc32.h crypt.h ttyio.h ebcdic.h
	$(cc) $(CFLAGS_SX) fileio.c -Fo$@
globals_.obj:	globals.c $(UNZIP_H)
	$(cc) $(CFLAGS_SX) globals.c -Fo$@
inflate_.obj:	inflate.c inflate.h $(UNZIP_H) crypt.h
	$(cc) $(CFLAGS_SX) inflate.c -Fo$@
match_.obj:	match.c $(UNZIP_H)
	$(cc) $(CFLAGS_SX) match.c -Fo$@
process_.obj:	process.c $(UNZIP_H) crc32.h
	$(cc) $(CFLAGS_SX) process.c -Fo$@
timezon_.obj:	timezone.c $(UNZIP_H) zip.h timezone.h
	$(cc) $(CFLAGS_SX) timezone.c -Fo$@
ttyio_.obj:	ttyio.c $(UNZIP_H) zip.h crypt.h ttyio.h
	$(cc) $(CFLAGS_SX) ttyio.c -Fo$@
ubz2err_.obj:	ubz2err.c $(UNZIP_H)
	$(cc) $(CFLAGS_SX) ubz2err.c -Fo$@
unzipsfx.obj:	unzip.c $(UNZIP_H) crypt.h unzvers.h consts.h
	$(cc) $(CFLAGS_SX) unzip.c -Fo$@

win32_.obj:	win32/win32.c $(UNZIP_H) win32/nt.h
	$(cc) $(CFLAGS_SX) -I. win32/win32.c -Fo$@

win32i64_.obj:	win32/win32i64.c $(UNZIP_H)
	$(cc) $(CFLAGS_SX) -I. win32/win32i64.c -Fo$@

nt_.obj:	win32/nt.c $(UNZIP_H) win32/nt.h
	$(cc) $(CFLAGS_SX) -I. win32/nt.c -Fo$@

# fUnZip compilation section
crc32f.obj:	crc32.c $(UNZIP_H) zip.h crc32.h
	$(cc) $(CFLAGS_FU) crc32.c -Fo$@
cryptf.obj:	crypt.c $(UNZIP_H) zip.h crypt.h crc32.h ttyio.h
	$(cc) $(CFLAGS_FU) crypt.c -Fo$@
globalsf.obj:	globals.c $(UNZIP_H)
	$(cc) $(CFLAGS_FU) globals.c -Fo$@
inflatef.obj:	inflate.c inflate.h $(UNZIP_H) crypt.h
	$(cc) $(CFLAGS_FU) inflate.c -Fo$@
ttyiof.obj:	ttyio.c $(UNZIP_H) zip.h crypt.h ttyio.h
	$(cc) $(CFLAGS_FU) ttyio.c -Fo$@

win32f.obj:	win32/win32.c $(UNZIP_H) win32/nt.h
	$(cc) $(CFLAGS_FU) -I. win32/win32.c -Fo$@

win32i64f.obj:	win32/win32i64.c $(UNZIP_H)
	$(cc) $(CFLAGS_FU) -I. win32/win32i64.c -Fo$@

# DLL compilation section
api.obj:	api.c $(UNZIP_H) $(WINDLL_H) unzvers.h
	$(cc) $(CFLAGS_DL) api.c -Fo$@
crc32l.obj:	crc32.c $(UNZIP_H) zip.h crc32.h
	$(cc) $(CFLAGS_DL) crc32.c -Fo$@
cryptl.obj:	crypt.c $(UNZIP_H) zip.h crypt.h crc32.h ttyio.h
	$(cc) $(CFLAGS_DL) crypt.c -Fo$@
explodel.obj:	explode.c $(UNZIP_H)
	$(cc) $(CFLAGS_DL) explode.c -Fo$@
extractl.obj:	extract.c $(UNZIP_H) $(WINDLL_H) crc32.h crypt.h
	$(cc) $(CFLAGS_DL) extract.c -Fo$@
fileiol.obj:	fileio.c $(UNZIP_H) $(WINDLL_H) crc32.h crypt.h ttyio.h ebcdic.h
	$(cc) $(CFLAGS_DL) fileio.c -Fo$@
globalsl.obj:	globals.c $(UNZIP_H)
	$(cc) $(CFLAGS_DL) globals.c -Fo$@
inflatel.obj:	inflate.c inflate.h $(UNZIP_H)
	$(cc) $(CFLAGS_DL) inflate.c -Fo$@
listl.obj:	list.c $(UNZIP_H) $(WINDLL_H)
	$(cc) $(CFLAGS_DL) list.c -Fo$@
matchl.obj:	match.c $(UNZIP_H)
	$(cc) $(CFLAGS_DL) match.c -Fo$@
processl.obj:	process.c $(UNZIP_H) $(WINDLL_H) crc32.h
	$(cc) $(CFLAGS_DL) process.c -Fo$@
timezonl.obj:	timezone.c $(UNZIP_H) zip.h timezone.h
	$(cc) $(CFLAGS_DL) timezone.c -Fo$@
ubz2errl.obj:	ubz2err.c $(UNZIP_H)
	$(cc) $(CFLAGS_DL) ubz2err.c -Fo$@
unreducl.obj:	unreduce.c $(UNZIP_H)
	$(cc) $(CFLAGS_DL) unreduce.c -Fo$@
unshrnkl.obj:	unshrink.c $(UNZIP_H)
	$(cc) $(CFLAGS_DL) unshrink.c -Fo$@
zipinfol.obj:	zipinfo.c $(UNZIP_H)
	$(cc) $(CFLAGS_DL) zipinfo.c -Fo$@

win32l.obj:	win32/win32.c $(UNZIP_H) win32/nt.h
	$(cc) $(CFLAGS_DL) -I. win32/win32.c -Fo$@

win32i64l.obj:	win32/win32i64.c $(UNZIP_H)
	$(cc) $(CFLAGS_DL) -I. win32/win32i64.c -Fo$@

ntl.obj:	win32/nt.c $(UNZIP_H) win32/nt.h
	$(cc) $(CFLAGS_DL) -I. win32/nt.c -Fo$@

windll.obj:  windll/windll.c $(UNZIP_H) $(WINDLL_H) crypt.h unzvers.h consts.h
	$(cc) $(CFLAGS_DL) -I. windll/windll.c -Fo$@

!ifdef USEMASM
crci386l.obj:	win32/crc_i386.asm
	masm -ml win32/crc_i386.asm,$@;
!else
!ifdef USEML
crci386l.obj:	win32/crc_i386.asm
	ml -c -Cp -coff -Fo$@ win32/crc_i386.asm
!else
crci386l.obj:	win32/crc_i386.c
	$(cc) $(CFLAGS_DL) -I. win32/crc_i386.c -Fo$@
!endif
!endif

winapp.res:	win32/winapp.rc unzvers.h
	$(rc) /l 0x409 /fo$@ /i win32 /d WIN32 win32/winapp.rc

windll.res:	windll/windll.rc unzvers.h
	$(rc) /l 0x409 /fo$@ /i windll /d WIN32 windll/windll.rc

uzexampl.obj:	windll/uzexampl.c windll/uzexampl.h
	$(cc) $(CFLAGS_DX) -I. windll/uzexampl.c -Fo$@

# SFX Lib compilation section
apig.obj:	api.c $(UNZIP_H) $(WINDLL_H) unzvers.h
	$(cc) $(CFLAGS_SL) api.c -Fo$@
crc32g.obj:	crc32.c $(UNZIP_H) zip.h crc32.h
	$(cc) $(CFLAGS_SL) crc32.c -Fo$@
cryptg.obj:	crypt.c $(UNZIP_H) zip.h crypt.h crc32.h ttyio.h
	$(cc) $(CFLAGS_SL) crypt.c -Fo$@
extractg.obj:	extract.c $(UNZIP_H) $(WINDLL_H) crc32.h crypt.h
	$(cc) $(CFLAGS_SL) extract.c -Fo$@
fileiog.obj:	fileio.c $(UNZIP_H) $(WINDLL_H) crc32.h crypt.h ttyio.h ebcdic.h
	$(cc) $(CFLAGS_SL) fileio.c -Fo$@
globalsg.obj:	globals.c $(UNZIP_H)
	$(cc) $(CFLAGS_SL) globals.c -Fo$@
inflateg.obj:	inflate.c inflate.h $(UNZIP_H)
	$(cc) $(CFLAGS_SL) inflate.c -Fo$@
matchg.obj:	match.c $(UNZIP_H)
	$(cc) $(CFLAGS_SL) match.c -Fo$@
processg.obj:	process.c $(UNZIP_H) $(WINDLL_H) crc32.h
	$(cc) $(CFLAGS_SL) process.c -Fo$@
timezong.obj:	timezone.c $(UNZIP_H) zip.h timezone.h
	$(cc) $(CFLAGS_SL) timezone.c -Fo$@
ubz2errg.obj:	ubz2err.c $(UNZIP_H)
	$(cc) $(CFLAGS_SL) ubz2err.c -Fo$@

win32g.obj:	win32/win32.c $(UNZIP_H) win32/nt.h
	$(cc) $(CFLAGS_SL) -I. win32/win32.c -Fo$@

win32i64g.obj:	win32/win32i64.c $(UNZIP_H)
	$(cc) $(CFLAGS_SL) -I. win32/win32i64.c -Fo$@

ntg.obj:	win32/nt.c $(UNZIP_H) win32/nt.h
	$(cc) $(CFLAGS_SL) -I. win32/nt.c -Fo$@

windllg.obj:  windll/windll.c $(UNZIP_H) $(WINDLL_H) crypt.h unzvers.h consts.h
	$(cc) $(CFLAGS_SL) -I. windll/windll.c -Fo$@

!ifdef USEMASM
crci386g.obj:	win32/crc_i386.asm
	masm -ml win32/crc_i386.asm,$@;
!else
!ifdef USEML
crci386g.obj:	win32/crc_i386.asm
	ml -c -Cp -coff -Fo$@ win32/crc_i386.asm
!else
crci386g.obj:	win32/crc_i386.c
	$(cc) $(CFLAGS_SL) -I. win32/crc_i386.c -Fo$@
!endif
!endif

sfxwiz.obj:	windll/guisfx/sfxwiz.c windll/guisfx/dialog.h $(WINDLL_IMP_H)
	$(cc) $(CFLAGS_GX) windll/guisfx/sfxwiz.c -Fo$@

sfxwiz.res:	windll/guisfx/sfxwiz.rc
	$(rc) /l 0x409 /fo$@ /i windll/guisfx /d WIN32 windll/guisfx/sfxwiz.rc

# static LIB compilation section
$(OB)apib.obj:	api.c $(UNZIP_H) $(WINDLL_H) unzvers.h
	$(cc) $(CFLAGS_LB) api.c -Fo$@
$(OB)crc32b.obj:	crc32.c $(UNZIP_H) zip.h crc32.h
	$(cc) $(CFLAGS_LB) crc32.c -Fo$@
$(OB)cryptb.obj:	crypt.c $(UNZIP_H) zip.h crypt.h crc32.h ttyio.h
	$(cc) $(CFLAGS_LB) crypt.c -Fo$@
$(OB)explodeb.obj:	explode.c $(UNZIP_H)
	$(cc) $(CFLAGS_LB) explode.c -Fo$@
$(OB)extractb.obj:	extract.c $(UNZIP_H) $(WINDLL_H) crc32.h crypt.h
	$(cc) $(CFLAGS_LB) extract.c -Fo$@
$(OB)fileiob.obj:	fileio.c $(UNZIP_H) $(WINDLL_H) crc32.h crypt.h ttyio.h ebcdic.h
	$(cc) $(CFLAGS_LB) fileio.c -Fo$@
$(OB)globalsb.obj:	globals.c $(UNZIP_H)
	$(cc) $(CFLAGS_LB) globals.c -Fo$@
$(OB)inflateb.obj:	inflate.c inflate.h $(UNZIP_H)
	$(cc) $(CFLAGS_LB) inflate.c -Fo$@
$(OB)listb.obj:	list.c $(UNZIP_H) $(WINDLL_H)
	$(cc) $(CFLAGS_LB) list.c -Fo$@
$(OB)matchb.obj:	match.c $(UNZIP_H)
	$(cc) $(CFLAGS_LB) match.c -Fo$@
$(OB)processb.obj:	process.c $(UNZIP_H) $(WINDLL_H) crc32.h
	$(cc) $(CFLAGS_LB) process.c -Fo$@
$(OB)timezonb.obj:	timezone.c $(UNZIP_H) zip.h timezone.h
	$(cc) $(CFLAGS_LB) timezone.c -Fo$@
$(OB)ubz2errb.obj:	ubz2err.c $(UNZIP_H)
	$(cc) $(CFLAGS_LB) ubz2err.c -Fo$@
$(OB)unreducb.obj:	unreduce.c $(UNZIP_H)
	$(cc) $(CFLAGS_LB) unreduce.c -Fo$@
$(OB)unshrnkb.obj:	unshrink.c $(UNZIP_H)
	$(cc) $(CFLAGS_LB) unshrink.c -Fo$@
$(OB)zipinfob.obj:	zipinfo.c $(UNZIP_H)
	$(cc) $(CFLAGS_LB) zipinfo.c -Fo$@

$(OB)win32b.obj:	win32/win32.c $(UNZIP_H) win32/nt.h
	$(cc) $(CFLAGS_LB) -I. win32/win32.c -Fo$@

$(OB)win32i64b.obj:	win32/win32i64.c $(UNZIP_H)
	$(cc) $(CFLAGS_LB) -I. win32/win32i64.c -Fo$@

$(OB)ntb.obj:	win32/nt.c $(UNZIP_H) win32/nt.h
	$(cc) $(CFLAGS_LB) -I. win32/nt.c -Fo$@

$(OB)windllb.obj:  windll/windll.c $(UNZIP_H) $(WINDLL_H) crypt.h unzvers.h consts.h
	$(cc) $(CFLAGS_LB) -I. windll/windll.c -Fo$@

!ifdef USEMASM
$(OB)crci386b.obj:	win32/crc_i386.asm
	masm -ml win32/crc_i386.asm,$@;
!else
!ifdef USEML
$(OB)crci386b.obj:	win32/crc_i386.asm
	ml -c -Cp -coff -Fo$@ win32/crc_i386.asm
!else
$(OB)crci386b.obj:	win32/crc_i386.c
	$(cc) $(CFLAGS_LB) -I. win32/crc_i386.c -Fo$@
!endif
!endif

$(OBDIR):
	-mkdir $@

clean:	clean_bz2exe_lib clean_bz2dll_lib
	-del *.obj
	-del winapp.res
	-del unzip.exe
	-del unzip.pdb
	-del funzip.exe
	-del funzip.pdb
	-del unzipsfx.exe
	-del unzipsfx.pdb
	-del vc60.pdb
	-del sfxwiz.res
	-del SFXWiz32.exe
	-del windll.res
	-del unzip32.dll
	-del unzip32.lib
	-del unzip32.exp
	-del unzip32.dll.manifest
	-del uzexampl.exe
	-del unzsfx32.lib
	-del $(OBDIR)\*.obj
	-del $(OBDIR)\unzip32.lib
	-rmdir $(OBDIR)

clean_bz2exe_lib:
	-$(MAKE) -f $(IZ_BZIP2)/makbz2iz.msc \
	BZROOTDIR=$(IZ_BZIP2) BZOBDIR=$(IZ_BZIP2)\$(OBEXE) clean

clean_bz2dll_lib:
	-$(MAKE) -f $(IZ_BZIP2)/makbz2iz.msc \
	BZROOTDIR=$(IZ_BZIP2) BZOBDIR=$(IZ_BZIP2)\$(OBDLL) clean