# 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 = lib.exe
RC = rc.exe
SRCDIR = .

_CPU = x64
_LIB = lib64
WINVER = 0x0A00

CRT_CFLAGS = -MT

CFLAGS = $(CFLAGS) -I$(SRCDIR) -I$(SRCDIR)\lib -DXML_BUILDING_EXPAT
CFLAGS = $(CFLAGS) -DNDEBUG -DWIN32 -D_WIN32_WINNT=$(WINVER) -DWINVER=$(WINVER)
CFLAGS = $(CFLAGS) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE $(EXTRA_CFLAGS)
RFLAGS = /nologo /l 0x409 /n /d NDEBUG /d WIN32 /d WINNT /d WINVER=$(WINVER)

!IF DEFINED(_STATIC)
TARGET  = lib
CFLAGS  = $(CFLAGS) -DXML_STATIC
PROJECT = expat
!ELSE
TARGET  = dll
PROJECT = libexpat
LDFLAGS = /nologo /INCREMENTAL:NO /OPT:REF /DLL /SUBSYSTEM:WINDOWS /MACHINE:$(_CPU)
LDFLAGS  = $(LDFLAGS) /NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib $(EXTRA_LDFLAGS)
!ENDIF

!IF DEFINED(_UNICODE)
CFLAGS  = $(CFLAGS) -DXML_UNICODE_WCHAR_T
PROJECT = $(PROJECT)w
RFLAGS  = $(RFLAGS) /d XML_UNICODE_WCHAR_T
WORKDIR = $(_CPU)-w-$(TARGET)
!ELSE
WORKDIR = $(_CPU)-a-$(TARGET)
!ENDIF

OUTPUT  = $(WORKDIR)\$(PROJECT)-2.$(TARGET)

CLOPTS = /c /nologo /wd4996 $(CRT_CFLAGS) -W3 -O2 -Ob2
RFLAGS = $(RFLAGS) /d _WIN32_WINNT=$(WINVER) $(EXTRA_RFLAGS)
LDLIBS = kernel32.lib $(EXTRA_LIBS)

!IF DEFINED(_STATIC)
ARFLAGS = /nologo /MACHINE:$(_CPU) $(EXTRA_ARFLAGS)
!ELSE
PDBNAME  = -Fd$(WORKDIR)\$(PROJECT)-2
OUTPDB   = /pdb:$(WORKDIR)\$(PROJECT)-2.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)\xmlparse.obj \
	$(WORKDIR)\xmlrole.obj \
	$(WORKDIR)\xmltok.obj

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

all: $(WORKDIR) $(OUTPUT)

$(WORKDIR) :
	@-md $(WORKDIR)

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

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

$(OUTPUT): $(WORKDIR) $(OBJECTS)
!IF "$(TARGET)" == "dll"
	$(LN) $(LDFLAGS) $(OBJECTS) $(LDLIBS) /def:$(SRCDIR)\lib\$(PROJECT).def $(OUTPDB) /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)\lib $(PREFIX)\include expa*.h >NUL
!ENDIF
	-robocopy /NP $(WORKDIR) $(PREFIX)\$(_LIB) *.lib >NUL

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

