name = unzzip	# AvP[V
zlibdir = zlib-1.3.2
UseAsmObj = 0

UseDebug = 0	# 1 Ȃ debug w
UseBCC = 0	# 1 Ȃ BCC32 , 0 Ȃ CL
UseIlink = 0	# 1 Ȃ ilink32(BCC 5.5ȍ~) gp
!ifndef ARM
ARM = 0		# 1 Ȃ Arm/Arm64(UNICODE)
!endif
!ifndef VCTOOLKIT
VCTOOLKIT = 0	# VC TOOL KIT gȂLɁAVS2008Ȃ疳
!endif

#=======================================
!ifndef X64
X64 = 0
TAIL	= 32
!else
X64 = 1		# 1 Ȃ x64(UNICODE)
UseBCC	= 0
TAIL	= 64
!endif
UseUnicode	= 1

!if $(ARM)
UseUnicode	= 0
TAIL	= $(TAIL)A
spi	= $(spi)a
!endif

!ifndef UseUnicode
UseUnicode = 0	# 1 Ȃ UNICODE 
!else
  UnicodeCopt	= -DUNICODE
!endif
#=============================================================== Borland pݒ
!if $(UseBCC)
.autodepend
!if $(UseDebug)
  Copt	= -R -v -DDEBUG	# ǉ C RpCIvV
  DebugLopt	= -v
  DebugLib	=		# ǉCu
!endif
 C0D	= $(C0DLL)
#-------------------------------------- RpCʎw
cc	= @BCC32 -4 -c -C -d -H -Hc -w -O -O1 -RT- -x- -DWINVER=0x400 $(bc56opt) $(Copt) $(UnicodeCopt)
#-------------------------------------- Jʎw
!if $(UseIlink)
 bc56opt = -Oc -q -a4
 linkopt = @ilink32 -c -m -P -V4.0 -Gn -q $(DebugLopt)
!else
 linkopt = @tlink32 -c -m -P -V4.0 $(DebugLopt)
!endif
  C0CON	= C0X32
  C0GUI	= C0W32
  C0DLL	= C0D32X
#-------------------------------------- J(GUI)
linkexe	= $(linkopt) -Tpe -aa
#-------------------------------------- J(CONSOLE)
linkcon	= $(linkopt) -Tpe -ap
#-------------------------------------- J(DLL)
linkdll	= $(linkopt) -Tpd -aa

#-------------------------------------- C|[g
implib  = @implib
#-------------------------------------- \[XRpC
rc	= @Brc32 -r
#-------------------------------------- Öق̎w
.C.OBJ:
  $(cc) -o$@ $<

.CPP.OBJ:
  $(cc) -o$@ $<

.RC.RES:
  $(rc) -fo$@ $<
#============================================================= Microsoft pݒ
!else
!if $(UseDebug)
Copt	= /Od /Zi /GS #/analyze
DebugLopt	= /DEBUG /PDB:$(name).pdb
!else # UseDebug
!ifdef RELEASE
Copt	= /Gz /O2 /Oy /DRELEASE
!else # RELEASE
Copt	= /Gz /O2 /Oy
!endif # RELEASE
!endif # UseDebug

!if $(X64) # x64, ARM64
X64Copt	= /wd4244 /wd4267
# TCYႢx(ł邾̎wgȂ)
!if $(VCTOOLKIT)
LIB64	= bufferoverflowu.lib
!endif
!if !$(ARM) # x64
LINK64	= /MACHINE:AMD64 /LARGEADDRESSAWARE
RC64	= /d_WIN64
!else # ARM64
LINK64	= /MACHINE:ARM64 /LARGEADDRESSAWARE
Copt	= /O2 /Oy /DRELEASE
X64Copt	= /wd4244 /wd4267
RC64	= /d_WIN64 /d_ARM64_
!endif # ARM64
!else # !$(X64), x86, ARM32
!if $(ARM) # ARM32
LINK64	= /MACHINE:ARM /LARGEADDRESSAWARE
!endif # ARM32
!endif # X64
#-------------------------------------- RpC
cc	= @"cl" /GF /nologo /c /DWINVER=0x400 $(Copt) $(UnicodeCopt) $(X64Copt) /W3 /wd4068 /wd4334 /wd4996 /I $(zlibdir) $(zlibasmopt) $(MAKEEXE)
# 4068:s #pragma	4996:Â֐gp	/Wp64:64bitڐA`FbN

#-------------------------------------- Jʎw
linkopt = @"link" /NOLOGO /INCREMENTAL:NO /MAP $(DebugLopt) $(LINK64)
C0DLL	= Kernel32.Lib AdvAPI32.Lib Ole32.Lib Imm32.Lib Gdi32.Lib\
	  Shell32.Lib User32.Lib comctl32.lib Comdlg32.lib $(LIB64)
C0GUI	= $(C0DLL)
C0CON	= $(C0DLL)
#-------------------------------------- J(GUI)
linkexe	= $(linkopt) /SUBSYSTEM:WINDOWS
#-------------------------------------- J(CONSOLE)
linkcon	= $(linkopt) /SUBSYSTEM:CONSOLE
#-------------------------------------- J(DLL)
linkdll	= $(linkopt) /DLL
#-------------------------------------- \[XRpC
rc	= @%COMSPEC% /C RC /dSDKRC $(RC64) $(UnicodeCopt) $(MAKEEXE) /I $(zlibdir)

#-------------------------------------- Öق̎w
.C.OBJ:
  $(cc) /Fo$@ $<

.CPP.OBJ:
  $(cc) /Fo$@ $<

.RC.RES:
  $(rc) $<
!endif

#------------------------------------------------------------------------------
!ifdef MAKEEXE
MAKEEXE = -DMAKEEXE
allFiles:	MAKEFILE CODE$(TAIL).OBJ $(name)$(TAIL).exe
!else
allFiles:	MAKEFILE CODE$(TAIL).OBJ $(name)$(TAIL).dll
!endif

!if $(UseAsmObj)
zlibasmopt = -DASMV -DASMINF
!if $(X64)
zlibasmobj = $(zlibdir)\contrib\masmx64\gvmat64.obj $(zlibdir)\contrib\masmx64\inffasx64.obj
zlibasmobjc = $(zlibdir)\inffas8664.obj
!else
zlibasmobj = $(zlibdir)\contrib\masmx86\match686.obj $(zlibdir)\contrib\masmx86\inffas32.obj
!endif
!endif

# $(zlibdir)\deflate.obj\ $(zlibdir)\compress.obj $(zlibdir)\gzwrite.obj\ $(zlibdir)\gzclose.obj 

zlibobj	= $(zlibdir)\adler32.obj $(zlibdir)\crc32.obj\
	$(zlibdir)\gzlib.obj $(zlibdir)\gzread.obj\
	$(zlibdir)\infback.obj $(zlibdir)\inffast.obj $(zlibdir)\inflate.obj\
	$(zlibdir)\inftrees.obj $(zlibdir)\trees.obj $(zlibdir)\uncompr.obj\
	$(zlibdir)\zutil.obj $(zlibasmobjc)\
	$(zlibdir)\contrib\infback9\infback9.obj $(zlibdir)\contrib\infback9\inftree9.obj

$(zlibdir)\inffas8664.obj:
  @copy $(zlibdir)\contrib\masmx64\inffas8664.c $(zlibdir)
  $(cc) /Fo$@ $(zlibdir)\inffas8664.c

#------------------------------------------------------ coděn؊p
CODE$(TAIL).OBJ:
  -@del *.obj 2> nul
  -@del $(zlibdir)\*.obj 2> nul
  -@del $(zlibdir)\contrib\infback9\*.obj 2> nul
  -@del *.res 2> nul
  -@if exist %CSM% del %CSM%\*.CSM
  @copy nul CODE$(TAIL).OBJ > nul

#------------------------------------------------------------------------------
$(name).obj: $(name).c unzzip.h unzzip_l.h zipinfo.h
unzzip_c.obj: unzzip_c.cpp unzzip.h unzzip_l.h zipinfo.h
unzzip_api.obj: unzzip_c.cpp unzzip.h unzzip_l.h zipinfo.h
unzzip_crypt.obj: unzzip_c.cpp unzzip.h unzzip_l.h zipinfo.h

$(name)$(TAIL).EXE:	$(name).RES $(name).OBJ $(C0DOBJ) unzzip_crypt.obj unzzip_c.obj unzzip_api.obj $(zlibobj)

!if $(UseBCC)
  $(linkcon) $(C0CON) $(name) $(zlibobj) unzzip_c.obj,$<,$*,$(DebugLib) NOEH32 IMPORT32 CW32,$(name),$(name)
!else
  $(linkcon) $(C0CON) $(name).OBJ $(zlibasmobj) $(zlibobj) unzzip_crypt.obj unzzip_c.obj unzzip_api.obj /OUT:$. $(name).RES
!endif

#---------------------------------------------------------------------
$(name)$(TAIL).dll:	$(name).RES $(name).OBJ $(C0DOBJ) unzzip_crypt.obj unzzip_c.obj unzzip_api.obj $(zlibobj)

!if $(UseBCC)
  $(linkdll) $(C0D) $(name) $(zlibobj) unzzip_crypt.obj unzzip_c.obj unzzip_api.obj,$<,$*,$(DebugLib) NOEH32 IMPORT32 CW32,$(name),$(name)
!else
  $(linkdll) $(C0DLL) $(name).OBJ $(zlibasmobj) $(zlibobj) unzzip_crypt.obj unzzip_c.obj unzzip_api.obj /OUT:$. /DEF:unzzip.def $(name).RES
!endif
