# Copyright 2001-2020 The Apache Software Foundation or its licensors, as
# applicable.
#
# Licensed 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.
#
# ====================================================================
#
# Makefile.windows Master NGHTTP2 makefile.
# Usage:
#                  DLL=1     Build DLL version
#                  DEBUG=1   Build DEBUG version of NGHTTP2
#
# Originally contributed by Mladen Turk <mturk redhat.com>
#
# ====================================================================
#

!IF !DEFINED(NGHTTP2_DECLARE_STATIC) || "$(NGHTTP2_DECLARE_STATIC)" == ""
TARGET  = DLL
CFLAGS  = -DBUILDING_NGHTTP2 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
PROJECT = libnghttp2-1
!ELSE
TARGET=LIB
CFLAGS  = -DNGHTTP2_STATICLIB -DBUILDING_NGHTTP2 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
PROJECT = nghttp2-1
!ENDIF

!IF !DEFINED(SRCDIR) || "$(SRCDIR)" == ""
SRCDIR = .
!ENDIF

!include <xbuild.inc>

INCLUDES = -I$(SRCDIR)\lib -I$(SRCDIR)\lib\includes -I$(SRCDIR)\lib\includes\nghttpd2
PDBFLAGS = -Fo$(WORKDIR)\ -Fd$(WORKDIR)\$(PROJECT)
OBJECTS = \
	$(WORKDIR)\nghttp2_pq.obj \
	$(WORKDIR)\nghttp2_map.obj \
	$(WORKDIR)\nghttp2_queue.obj \
	$(WORKDIR)\nghttp2_frame.obj \
	$(WORKDIR)\nghttp2_buf.obj \
	$(WORKDIR)\nghttp2_stream.obj \
	$(WORKDIR)\nghttp2_outbound_item.obj \
	$(WORKDIR)\nghttp2_session.obj \
	$(WORKDIR)\nghttp2_submit.obj \
	$(WORKDIR)\nghttp2_helper.obj \
	$(WORKDIR)\nghttp2_npn.obj \
	$(WORKDIR)\nghttp2_hd.obj \
	$(WORKDIR)\nghttp2_hd_huffman.obj \
	$(WORKDIR)\nghttp2_hd_huffman_data.obj \
	$(WORKDIR)\nghttp2_version.obj \
	$(WORKDIR)\nghttp2_priority_spec.obj \
	$(WORKDIR)\nghttp2_option.obj \
	$(WORKDIR)\nghttp2_callbacks.obj \
	$(WORKDIR)\nghttp2_mem.obj \
	$(WORKDIR)\nghttp2_http.obj \
	$(WORKDIR)\nghttp2_ratelim.obj \
	$(WORKDIR)\nghttp2_time.obj \
	$(WORKDIR)\nghttp2_rcbuf.obj \
	$(WORKDIR)\nghttp2_ksl.obj


BUILDINC = $(PREFIX)\include\nghttp2
BUILDLIB = $(PREFIX)\$(_LIB)
BUILDBIN = $(PREFIX)\bin
!IF "$(TARGET)" == "DLL"
BUILDOUT = $(WORKDIR)\$(PROJECT).dll
BUILDPDB = $(WORKDIR)\$(PROJECT).pdb
BUILDRES = $(WORKDIR)\$(PROJECT).res
BUILDMFT = $(BUILDOUT).manifest
!ELSE
BUILDOUT = $(WORKDIR)\$(PROJECT).lib
!ENDIF

all : $(WORKDIR) $(BUILDOUT)

$(WORKDIR) :
	@$(MAKEWORKDIR)


{$(SRCDIR)\lib}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

!IF "$(TARGET)" == "DLL"
$(BUILDRES): $(SRCDIR)\nghttp2.rc
	$(RC) $(RCFLAGS) /i "$(SRCDIR)\include" /fo $(BUILDRES) $(SRCDIR)\nghttp2.rc
$(BUILDOUT): $(WORKDIR) $(OBJECTS) $(BUILDRES)
	$(LINK) $(LFLAGS) $(OBJECTS) $(BUILDRES) $(LIBS) /pdb:$(BUILDPDB) /out:$(BUILDOUT)
	IF EXIST $(BUILDMFT) \
		mt -nologo -manifest $(BUILDMFT) -outputresource:$(BUILDOUT);2
!ELSE
$(BUILDOUT): $(WORKDIR) $(OBJECTS)
	$(LINK) $(LFLAGS) $(OBJECTS) /out:$(BUILDOUT)
!ENDIF

clean:
	@$(CLEANTARGET)

!IF "$(TARGET)" == "DLL"
install: all
	@xcopy "$(WORKDIR)\*.lib" "$(BUILDLIB)" /I /Y /Q
	@xcopy "$(WORKDIR)\*.dll" "$(BUILDBIN)" /I /Y /Q 2>NUL
	@xcopy "$(WORKDIR)\*.pdb" "$(BUILDBIN)" /I /Y /Q 2>NUL
!ELSE
install: all
	@xcopy "$(SRCDIR)\lib\includes\nghttp2\*.h" "$(BUILDINC)" /I /Y /Q
	@xcopy "$(WORKDIR)\*.lib" "$(BUILDLIB)" /I /Y /Q
	@xcopy "$(WORKDIR)\*.pdb" "$(BUILDLIB)" /I /Y /Q 2>NUL
!ENDIF

