# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Originally contributed by Mladen Turk <mturk apache.org>
#
CC = cl.exe
LN = link.exe
AR = link.exe -lib
RC = rc.exe
SRCDIR = .

WINVER = 0x0A00
CFLAGS = -DNDEBUG -DWIN32 -D_WIN32_WINNT=$(WINVER) -DWINVER=$(WINVER)
CFLAGS = $(CFLAGS) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE $(EXTRA_CFLAGS)

!IF DEFINED(ZLIB_STATIC)
PROJECT  = zlib-1
TARGET   = lib
ARFLAGS  = /nologo /MACHINE:x64 $(EXTRA_ARFLAGS)
!UNDEF _PDB
!ELSE
PROJECT  = libzlib-1
TARGET   = dll
CFLAGS   = $(CFLAGS) -DZLIB_DLL
LDFLAGS  = /nologo /INCREMENTAL:NO /OPT:REF /DLL /MACHINE:x64
LDFLAGS  = $(LDFLAGS) /NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib $(EXTRA_LDFLAGS)
!ENDIF

OUTNAME  = $(PROJECT).$(TARGET)
WORKDIR  = rel-$(TARGET)
IMPLIB   = $(WORKDIR)\$(PROJECT).lib
OUTPUT   = $(WORKDIR)\$(OUTNAME)
CLOPTS   = -c -nologo -wd4267 -W3 -O2 -Ob2 -GF -Gs0 -MT
RFLAGS   = /nologo /l 0x409 /n /d NDEBUG /d WIN32 /d WINNT /d WINVER=$(WINVER)
RFLAGS   = $(RFLAGS) /d _WIN32_WINNT=$(WINVER) $(EXTRA_RFLAGS)
LDLIBS   = kernel32.lib $(EXTRA_LIBS)

!IF DEFINED(_PDB)
PDBNAME  = -Fd$(WORKDIR)\$(PROJECT)
OUTPDB   = /pdb:$(WORKDIR)\$(PROJECT).pdb
CLOPTS   = $(CLOPTS) -Zi
LDFLAGS  = $(LDFLAGS) /DEBUG
!ENDIF
!IF DEFINED(_VENDOR_SFX)
RFLAGS = $(RFLAGS) /d _VENDOR_SFX=$(_VENDOR_SFX)
!ENDIF
!IF DEFINED(_VENDOR_NUM)
RFLAGS = $(RFLAGS) /d _VENDOR_NUM=$(_VENDOR_NUM)
!ENDIF

OBJECTS = \
	$(WORKDIR)\adler32.obj \
	$(WORKDIR)\compress.obj \
	$(WORKDIR)\crc32.obj \
	$(WORKDIR)\deflate.obj \
	$(WORKDIR)\gzclose.obj \
	$(WORKDIR)\gzlib.obj \
	$(WORKDIR)\gzread.obj \
	$(WORKDIR)\gzwrite.obj \
	$(WORKDIR)\infback.obj \
	$(WORKDIR)\inffast.obj \
	$(WORKDIR)\inflate.obj \
	$(WORKDIR)\inftrees.obj \
	$(WORKDIR)\trees.obj \
	$(WORKDIR)\uncompr.obj \
	$(WORKDIR)\zutil.obj

!IF "$(TARGET)" == "dll"
OBJECTS = $(OBJECTS) $(WORKDIR)\llzlib.res
!ENDIF

all: $(WORKDIR) $(OUTPUT)

$(WORKDIR):
	-md $(WORKDIR) 2>NUL

{$(SRCDIR)}.c{$(WORKDIR)}.obj:
	$(CC) $(CLOPTS) $(CFLAGS) -Fo$(WORKDIR)\ $(PDBNAME) $<

{$(SRCDIR)}.rc{$(WORKDIR)}.res:
	$(RC) $(RFLAGS) /fo $@ $<

$(OUTPUT): $(WORKDIR) $(OBJECTS)
!IF "$(TARGET)" == "dll"
	$(LN) $(LDFLAGS) $(OBJECTS) $(LDLIBS) $(OUTPDB) /implib:$(IMPLIB) /out:$(OUTPUT)
!ELSE
	$(AR) $(ARFLAGS) $(OBJECTS) /out:$(OUTPUT)
!ENDIF

install: all
!IF "$(TARGET)" == "dll"
	-robocopy /NP $(WORKDIR) $(PREFIX)\bin *.dll *.pdb >NUL
	-robocopy /NP $(SRCDIR)\ $(PREFIX)\include zconf.h zlib.h >NUL
!ENDIF
	-robocopy /NP $(WORKDIR) $(PREFIX)\lib64 *.lib >NUL

clean:
	@-rd /S /Q $(WORKDIR) 2>NUL

