# Copyright 2001-2015 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.
#
# ====================================================================
#
# NMAKEmakefile   HTTPD core library makefile.
# Usage:
#                 DEBUG=1   Build DEBUG version of HTTPD
#
# Originally contributed by Mladen Turk <mturk redhat.com>
#
# ====================================================================
#


TARGET=DLL
PROJECT = libhttpd

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

CFLAGS = $(CFLAGS) -DAP_DECLARE_EXPORT

!include <NMAKEbuild.inc>
!include <NMAKEhttpd.inc>

LDIRS = /libpath:"$(BUILDLIB)" /libpath:"$(EXTLIBPATH)"
LFLAGS = $(LFLAGS) user32.lib psapi.lib gdi32.lib shlwapi.lib wldap32.lib ole32.lib $(LIBAPR) $(LIBAPU) $(LIBPCRE)

INCLUDES = -I$(SRCDIR)\include -I$(BUILDINC) -I$(EXTINCPATH) -I$(EXTINCPATH)\apr-1
PDBFLAGS = -Fo$(WORKDIR)\ -Fd$(WORKDIR)\$(PROJECT)-src
OBJECTS = \
	$(WORKDIR)\buildmark.obj \
	$(WORKDIR)\byterange_filter.obj \
	$(WORKDIR)\chunk_filter.obj \
	$(WORKDIR)\config.obj \
	$(WORKDIR)\connection.obj \
	$(WORKDIR)\core.obj \
	$(WORKDIR)\core_filters.obj \
	$(WORKDIR)\http_core.obj \
	$(WORKDIR)\http_etag.obj \
	$(WORKDIR)\http_filters.obj \
	$(WORKDIR)\http_protocol.obj \
	$(WORKDIR)\http_request.obj \
	$(WORKDIR)\log.obj \
	$(WORKDIR)\protocol.obj \
	$(WORKDIR)\request.obj \
	$(WORKDIR)\vhost.obj \
	$(WORKDIR)\mod_so.obj \
	$(WORKDIR)\mod_win32.obj \
	$(WORKDIR)\modules.obj \
	$(WORKDIR)\eoc_bucket.obj \
	$(WORKDIR)\eor_bucket.obj \
	$(WORKDIR)\error_bucket.obj \
	$(WORKDIR)\util.obj \
	$(WORKDIR)\util_cfgtree.obj \
	$(WORKDIR)\util_charset.obj \
	$(WORKDIR)\util_cookies.obj \
	$(WORKDIR)\util_debug.obj \
	$(WORKDIR)\util_expr_eval.obj \
	$(WORKDIR)\util_expr_scan.obj \
	$(WORKDIR)\util_expr_parse.obj \
	$(WORKDIR)\util_fcgi.obj \
	$(WORKDIR)\util_filter.obj \
	$(WORKDIR)\util_md5.obj \
	$(WORKDIR)\util_mutex.obj \
	$(WORKDIR)\util_pcre.obj \
	$(WORKDIR)\util_regex.obj \
	$(WORKDIR)\util_script.obj \
	$(WORKDIR)\util_time.obj \
	$(WORKDIR)\util_win32.obj \
	$(WORKDIR)\util_xml.obj \
	$(WORKDIR)\ap_regkey.obj \
	$(WORKDIR)\child.obj \
	$(WORKDIR)\listen.obj \
	$(WORKDIR)\mpm_common.obj \
	$(WORKDIR)\mpm_winnt.obj \
	$(WORKDIR)\nt_eventlog.obj \
	$(WORKDIR)\provider.obj \
	$(WORKDIR)\scoreboard.obj \
	$(WORKDIR)\service.obj

HEADERS = \
	$(SRCDIR)\include\mod_cgi.h \
	$(SRCDIR)\include\mod_dav.h \
	$(SRCDIR)\include\mod_include.h \
	$(SRCDIR)\include\mod_proxy.h \
	$(SRCDIR)\include\mod_so.h \
	$(SRCDIR)\include\mod_status.h \
	$(SRCDIR)\include\mod_log_config.h \
	$(SRCDIR)\include\mod_rewrite.h \
	$(SRCDIR)\include\mod_ssl.h \
	$(SRCDIR)\include\mod_cache.h \
	$(SRCDIR)\include\cache_common.h \
	$(SRCDIR)\include\mod_so.h \
	$(SRCDIR)\include\mod_watchdog.h \
	$(SRCDIR)\include\os.h \
	$(SRCDIR)\include\mpm_default.h \
	$(SRCDIR)\include\mpm_winnt.h \
	$(SRCDIR)\server\test_char.h

BUILDBIN = $(WORKDIR)\$(PROJECT).dll
BUILDPDB = $(WORKDIR)\$(PROJECT).pdb 
BUILDRES = $(WORKDIR)\$(PROJECT).res
BUILDMFT = $(BUILDBIN).manifest

RCFLAGS =  $(RCFLAGS) /d BIN_NAME="$(PROJECT).dll" /d LONG_NAME="Apache HTTP Server Core"

BUILDTCHR = $(SRCDIR)\server\gen_test_char.exe

.SUFFIXES : .h

all: $(BUILDINS) $(WORKDIR) $(HEADERS) $(BUILDBIN)

$(WORKDIR):
	@$(MAKEWORKDIR)

$(BUILDINS):
	@copy /Y LICENSE $(@D) >NUL

$(BUILDTCHR):
	@cd $(SRCDIR)\server
	@$(MAKE) -nologo -f NMAKEmakefile install
	@cd ..

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

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

{$(SRCDIR)\modules\core}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<
	
{$(SRCDIR)\os\win32}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

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

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

$(SRCDIR)\server\test_char.h : $(BUILDTCHR)
	@$(BUILDTCHR) > $@ 

{$(SRCDIR)\os\win32}.h{$(SRCDIR)\include}.h:
	@copy /Y $< $@ >NUL

{$(SRCDIR)\modules\aaa}.h{$(SRCDIR)\include}.h:
	@copy /Y $< $@ >NUL

{$(SRCDIR)\modules\arch\win32}.h{$(SRCDIR)\include}.h:
	@copy /Y $< $@ >NUL

{$(SRCDIR)\modules\cache}.h{$(SRCDIR)\include}.h:
	@copy /Y $< $@ >NUL

{$(SRCDIR)\modules\core}.h{$(SRCDIR)\include}.h:
	@copy /Y $< $@ >NUL

{$(SRCDIR)\server\mpm\winnt}.h{$(SRCDIR)\include}.h:
	@copy /Y $< $@ >NUL

{$(SRCDIR)\modules\http}.h{$(SRCDIR)\include}.h:
	@copy /Y $< $@ >NUL

{$(SRCDIR)\modules\filters}.h{$(SRCDIR)\include}.h:
	@copy /Y $< $@ >NUL

{$(SRCDIR)\modules\generators}.h{$(SRCDIR)\include}.h:
	@copy /Y $< $@ >NUL

{$(SRCDIR)\modules\loggers}.h{$(SRCDIR)\include}.h:
	@copy /Y $< $@ >NUL

{$(SRCDIR)\modules\proxy}.h{$(SRCDIR)\include}.h:
	@copy /Y $< $@ >NUL

{$(SRCDIR)\modules\mappers}.h{$(SRCDIR)\include}.h:
	@copy /Y $< $@ >NUL

{$(SRCDIR)\modules\ssl}.h{$(SRCDIR)\include}.h:
	@copy /Y $< $@ >NUL

{$(SRCDIR)\modules\dav\main}.h{$(SRCDIR)\include}.h:
	@copy /Y $< $@ >NUL

$(BUILDRES): build\win32\httpd.rc
	$(RC) $(RCFLAGS) /i "$(SRCDIR)\build\win32" /i "$(SRCDIR)\include" /i "$(SRCDIR)\srclib\apr\include" /fo $(BUILDRES) build\win32\httpd.rc

$(BUILDBIN): $(WORKDIR) $(HEADERS) $(OBJECTS) $(BUILDRES)
	$(LINK) $(LFLAGS) $(OBJECTS) $(BUILDRES) $(LIBS) $(LDIRS) /pdb:$(BUILDPDB) /out:$(BUILDBIN)
	IF EXIST $(BUILDMFT) \
		mt -nologo -manifest $(BUILDMFT) -outputresource:$(BUILDBIN);2

clean:
	@$(CLEANTARGET)

install: all
	@xcopy "$(SRCDIR)\include\*.h" "$(BUILDINC)" /I /Y /Q
	@xcopy "$(WORKDIR)\*.lib" "$(BUILDLIB)" /I /Y /Q
	@xcopy "$(WORKDIR)\*.dll" "$(BUILDOUT)" /I /Y /Q 2>NUL
	@xcopy "$(WORKDIR)\*.pdb" "$(BUILDOUT)" /I /Y /Q 2>NUL
