####################################################
# Makefile for savan c				   #
# you can do 					   #
# nmake dist     - distribution  (dist / samples ) #
# nmake clean  	 - clean			   #
# nmake samples  - samples 			   #
####################################################

AUTOCONF = configure.in
!include $(AUTOCONF)

#define folders 

SAVANSRC = ..\..
SAVANDISTDIR = ..\savanc
SAVANINTDIR = .\int.msvc
SAVANDLL = savan
MODSAVANDLL = mod_savan
SAVAN_CLIENT = savan_client
SAVAN_MSG_RECV = savan_msgreceivers

SAVAN_CODE = $(SAVANSRC)\src\util\*.c \
	     $(SAVANSRC)\src\subscribers\*.c \
	     $(SAVANSRC)\src\subs_mgrs\common\*.c

SAVAN_CODE1 = $(SAVANSRC)\src\subs_mgrs\sqlite\*.c  

MOD_SAVAN_CODE = $(SAVANSRC)\src\core\*.c \
		 $(SAVANSRC)\src\handlers\*.c \

SAVAN_MSG_RECV_CODE = $(SAVANSRC)\src\msgreceivers\*.c \
		      $(SAVANSRC)\src\publishers\common\*.c

SAVAN_MSG_RECV_CODE1 = $(SAVANSRC)\src\publishers\default\*.c

SAVAN_CLIENT_CODE = $(SAVANSRC)\src\client\*.c \
		    $(SAVANSRC)\src\filters\common\*.c \
		    $(SAVANSRC)\src\filters\xpath\*.c 
		
#compiler options
CC = @cl.exe

CFLAGS = /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "AXIS2_DECLARE_EXPORT" /D_WIN32_WINNT=0x0400  /w /nologo \
	/I$(AXIS2_BIN_DIR)\include /I$(SAVANSRC)\include $(CRUNTIME) /I$(LIBXSLT_BIN_DIR)\include /I$(LIBXML2_BIN_DIR)\include /I$(ICONV_BIN_DIR)\include

#linker options 
LD = @link.exe
LDFLAGS = /nologo /LIBPATH:$(AXIS2_BIN_DIR)\lib /LIBPATH:$(SAVANDISTDIR)\lib /LIBPATH:$(LIBXSLT_BIN_DIR)\lib /LIBPATH:$(LIBXML2_BIN_DIR)\lib
LIBS = axutil.lib axiom.lib axis2_parser.lib axis2_engine.lib axis2_http_receiver.lib axis2_http_sender.lib libxslt.lib libxml2.lib

#debug symbols
!if "$(DEBUG)" == "1"
CFLAGS = $(CFLAGS) /D "_DEBUG" /Od /Z7
LDFLAGS = $(LDFLAGS) /DEBUG
!else
CFLAGS = $(CFLAGS) /D "NDEBUG" /O2 
LDFLAGS = $(LDFLAGS)
!endif

##############
MT=mt.exe
MT="$(MT)"

!if "$(EMBED_MANIFEST)" == "0"
_VC_MANIFEST_EMBED_EXE=
_VC_MANIFEST_EMBED_DLL=
!else
_VC_MANIFEST_EMBED_EXE= if exist $@.manifest $(MT) -nologo -manifest $@.manifest -outputresource:$@;1
_VC_MANIFEST_EMBED_DLL= if exist $@.manifest $(MT) -nologo -manifest $@.manifest -outputresource:$@;2
!endif
###############

#create the directory structure

distdir:
	if not exist $(SAVANDISTDIR) mkdir $(SAVANDISTDIR)
	if not exist $(SAVANDISTDIR)\modules\savan mkdir $(SAVANDISTDIR)\modules\savan
	if not exist $(SAVANDISTDIR)\lib mkdir $(SAVANDISTDIR)\lib
	if not exist $(SAVANDISTDIR)\include mkdir $(SAVANDISTDIR)\include
	if not exist $(SAVANDISTDIR)\samples mkdir $(SAVANDISTDIR)\samples
	if not exist $(SAVANDISTDIR)\samples\bin mkdir $(SAVANDISTDIR)\samples\bin
	if not exist $(SAVANDISTDIR)\samples\bin\savanc mkdir $(SAVANDISTDIR)\samples\bin\savanc
	if not exist $(SAVANDISTDIR)\samples\src mkdir $(SAVANDISTDIR)\samples\src
	if not exist $(SAVANDISTDIR)\samples\src\savanc mkdir $(SAVANDISTDIR)\samples\src\savanc
	if not exist $(SAVANDISTDIR)\services\listener mkdir $(SAVANDISTDIR)\services\listener
	if not exist $(SAVANDISTDIR)\services\weather mkdir $(SAVANDISTDIR)\services\weather
	if not exist $(SAVANDISTDIR)\services\subscription mkdir $(SAVANDISTDIR)\services\subscription


intdir:
	if not exist $(SAVANINTDIR) mkdir $(SAVANINTDIR)
	if not exist $(SAVANINTDIR)\s mkdir $(SAVANINTDIR)\s
	if not exist $(SAVANINTDIR)\client mkdir $(SAVANINTDIR)\client
	if not exist $(SAVANINTDIR)\samples mkdir $(SAVANINTDIR)\samples
	if not exist $(SAVANINTDIR)\samples\subscriber mkdir $(SAVANINTDIR)\samples\subscriber
	if not exist $(SAVANINTDIR)\samples\listener mkdir $(SAVANINTDIR)\samples\listener
	if not exist $(SAVANINTDIR)\samples\weather mkdir $(SAVANINTDIR)\samples\weather
	if not exist $(SAVANINTDIR)\samples\subscription mkdir $(SAVANINTDIR)\samples\subscription
	
clean :
	@if exist $(SAVANDISTDIR) rmdir /S /Q $(SAVANDISTDIR)
	@if exist int.msvc rmdir /S /Q int.msvc

copy_extra:
	@if exist $(SAVANSRC)\README copy $(SAVANSRC)\README $(SAVANDISTDIR)
	@if exist $(SAVANSRC)\NEWS copy $(SAVANSRC)\NEWS $(SAVANDISTDIR)
	@if exist $(SAVANSRC)\COPYING copy $(SAVANSRC)\COPYING $(SAVANDISTDIR)
	@if exist $(SAVANSRC)\LICENSE copy $(SAVANSRC)\LICENSE $(SAVANDISTDIR)
	@if exist $(SAVANSRC)\INSTALL copy $(SAVANSRC)\INSTALL $(SAVANDISTDIR)
	@if exist  $(SAVANSRC)\AUTHORS copy $(SAVANSRC)\AUTHORS $(SAVANDISTDIR)
	
copy_samples:
	@xcopy /E $(SAVANSRC)\samples $(SAVANDISTDIR)\samples\src\savanc
	@del /s /q $(SAVANDISTDIR)\samples\src\savanc\*.am
	@del /q $(SAVANDISTDIR)\samples\src\savanc\*.*
	@copy $(SAVANSRC)\src\data\axis2.xml $(SAVANDISTDIR)\samples\src\savanc\server

copy_include:
	@xcopy /E $(SAVANSRC)\include $(SAVANDISTDIR)\include

$(SAVANDISTDIR)\lib\$(SAVANDLL).dll:
	$(CC) $(CFLAGS) $(SAVAN_CODE) /Fo$(SAVANINTDIR)\ /c
	$(CC) $(CFLAGS) $(SAVAN_CODE1) /Fo$(SAVANINTDIR)\s\ /c
	$(LD) $(LDFLAGS) $(LIBS) $(SAVANINTDIR)\*.obj $(SAVANINTDIR)\s\*.obj /DLL \
	/OUT:$(SAVANDISTDIR)\lib\$(SAVANDLL).dll /IMPLIB:$(SAVANDISTDIR)\lib\$(SAVANDLL).lib
	-@$(_VC_MANIFEST_EMBED_DLL)

savan: $(SAVANDISTDIR)\lib\$(SAVANDLL).dll

$(SAVANDISTDIR)\modules\savan\$(MODSAVANDLL).dll:
	if not exist $(SAVANINTDIR)\mod_savan mkdir $(SAVANINTDIR)\mod_savan
	$(CC) $(CFLAGS) $(MOD_SAVAN_CODE) /Fo$(SAVANINTDIR)\mod_savan\ /c
	$(LD) $(LDFLAGS) $(LIBS) $(SAVANDLL).lib $(SAVANINTDIR)\mod_savan\*.obj /DLL \
	/OUT:$(SAVANDISTDIR)\modules\savan\$(MODSAVANDLL).dll /IMPLIB:$(SAVANDISTDIR)\modules\savan\$(MODSAVANDLL).lib
	-@$(_VC_MANIFEST_EMBED_DLL)
	@copy $(SAVANSRC)\src\data\module.xml $(SAVANDISTDIR)\modules\savan\module.xml

mod_savan: $(SAVANDISTDIR)\modules\savan\$(MODSAVANDLL).dll

##### savan client

$(SAVANDISTDIR)\lib\$(SAVAN_CLIENT).dll :
	if not exist $(SAVANINTDIR)\client mkdir $(SAVANINTDIR)\client
	$(CC) $(CFLAGS) $(SAVAN_CLIENT_CODE) /Fo$(SAVANINTDIR)\client\ /c
	$(LD) $(LDFLAGS) $(LIBS) $(SAVANDLL).lib $(SAVANINTDIR)\client\*.obj /DLL \
	/OUT:$(SAVANDISTDIR)\lib\$(SAVAN_CLIENT).dll /IMPLIB:$(SAVANDISTDIR)\lib\$(SAVAN_CLIENT).lib
	-@$(_VC_MANIFEST_EMBED_DLL)

savan_client: $(SAVANDISTDIR)\lib\$(SAVAN_CLIENT).dll

$(SAVANDISTDIR)\lib\$(SAVAN_MSG_RECV).dll :
	if not exist $(SAVANINTDIR)\msg_recv mkdir $(SAVANINTDIR)\msg_recv
	if not exist $(SAVANINTDIR)\msg_recv1 mkdir $(SAVANINTDIR)\msg_recv1
	$(CC) $(CFLAGS) $(SAVAN_MSG_RECV_CODE) /Fo$(SAVANINTDIR)\msg_recv\ /c
	$(CC) $(CFLAGS) $(SAVAN_MSG_RECV_CODE1) /Fo$(SAVANINTDIR)\msg_recv1\ /c
	$(LD) $(LDFLAGS) $(LIBS) $(SAVANDLL).lib $(SAVANINTDIR)\msg_recv\*.obj $(SAVANINTDIR)\msg_recv1\*.obj /DLL \
	/OUT:$(SAVANDISTDIR)\lib\$(SAVAN_MSG_RECV).dll /IMPLIB:$(SAVANDISTDIR)\lib\$(SAVAN_MSG_RECV).lib
	-@$(_VC_MANIFEST_EMBED_DLL)

savan_msg_recv: $(SAVANDISTDIR)\lib\$(SAVAN_MSG_RECV).dll


###samples

SUBSCRIPTION_SRC=$(SAVANSRC)\src\subs_mgrs\service\subs_mgr_svc\*.c \
		 $(SAVANSRC)\src\subs_mgrs\service\*.c 

$(SAVANDISTDIR)\services\subscription\subscription.dll :
	$(CC) $(CFLAGS) $(SUBSCRIPTION_SRC) /Fo$(SAVANINTDIR)\samples\subscription\ /c
	$(LD) $(LDFLAGS) $(LIBS) $(SAVANDLL).lib $(SAVANINTDIR)\samples\subscription\*.obj  $(SAVAN_CLIENT).lib /DLL \
	/OUT:$(SAVANDISTDIR)\services\subscription\subscription.dll
	-@$(_VC_MANIFEST_EMBED_DLL)
	@copy $(SAVANSRC)\src\subs_mgrs\service\subs_mgr_svc\services.xml $(SAVANDISTDIR)\services\subscription\

subscription: $(SAVANDISTDIR)\services\subscription\subscription.dll

$(SAVANDISTDIR)\services\weather\weather.dll :
	$(CC) $(CFLAGS) $(SAVANSRC)\samples\server\weather\*.c /Fo$(SAVANINTDIR)\samples\weather\ /c
	$(LD) $(LDFLAGS) $(LIBS) $(SAVANINTDIR)\samples\weather\*.obj  $(SAVAN_CLIENT).lib /DLL \
	/OUT:$(SAVANDISTDIR)\services\weather\weather.dll
	-@$(_VC_MANIFEST_EMBED_DLL)
	@copy $(SAVANSRC)\samples\server\weather\services.xml $(SAVANDISTDIR)\services\weather\

weather: $(SAVANDISTDIR)\services\weather\weather.dll

$(SAVANDISTDIR)\services\listener\listener.dll :
	$(CC) $(CFLAGS) $(SAVANSRC)\samples\server\listener\*.c /Fo$(SAVANINTDIR)\samples\listener\ /c
	$(LD) $(LDFLAGS) $(LIBS) $(SAVANINTDIR)\samples\listener\*.obj  $(SAVAN_CLIENT).lib /DLL \
	/OUT:$(SAVANDISTDIR)\services\listener\listener.dll
	-@$(_VC_MANIFEST_EMBED_DLL)
	@copy $(SAVANSRC)\samples\server\listener\services.xml $(SAVANDISTDIR)\services\listener\

listener: $(SAVANDISTDIR)\services\listener\listener.dll
		
$(SAVANDISTDIR)\samples\bin\savanc\subscriber.exe :
	$(CC) $(CFLAGS) $(SAVANSRC)\samples\client\subscriber\*.c /Fo$(SAVANINTDIR)\samples\subscriber\ /c
	$(LD) $(LDFLAGS) $(LIBS) $(SAVANINTDIR)\samples\subscriber\*.obj $(SAVAN_CLIENT).lib \
	/OUT:$(SAVANDISTDIR)\samples\bin\savanc\subscriber.exe
	-@$(_VC_MANIFEST_EMBED_EXE)

subscriber: $(SAVANDISTDIR)\samples\bin\savanc\subscriber.exe
	
dist: clean distdir intdir savan mod_savan savan_msg_recv savan_client listener weather subscription subscriber copy_include copy_samples copy_extra
