# Makefile.win for Win32 ActiveMQ-CPP
#
# Targets are:
#
#     build    - compile everything
#     check    - run APR regression tests
#     install  - compile everything
#     clean    - mop up everything
#
# You can override the build mechansim, choose only one;
#
#     USEMAK=1 - compile from exported make files
#     USESLN=1 - compile from converted .sln / .vcproj VC7+ files
#
# Define ARCH to your desired preference (your PATH must point
# to the correct compiler tools!)  Choose only one;
#
#     ARCH="Win32"
#     ARCH="x64"
#
# Set CONFIG to your desired build type.
#
#     CONFIG="ReleaseDLL"
#     CONFIG="DebugDLL"
#     CONFIG="Release"
#     CONFIG="Debug"
#
# Set VERBOCITY to indicate how much information is logged about the build.
#
#     VERBOCITY=quiet
#     VERBOCITY=minimal
#     VERBOCITY=normal
#     VERBOCITY=detailed
#     VERBOCITY=diagnostic
#
# For example;
#
#   nmake -f Makefile.win PREFIX=C:\ActiveMQ-CPP build check install clean
#

!IF EXIST(".\vs2005-build\vs2005-activemq-cpp.sln") && ([msbuild /help > NUL 2>&1] == 0) \
    && !defined(USEMAK)
USESLN=1
USEMAK=0
!ELSEIF EXIST("activemq-cpp.mak")
USESLN=0
USEMAK=1
!ENDIF

CONFIGS="Release ReleaseDLL Debug DebugDLL"

PREFIX=..\ActiveMQ-CPP
CONFIG=Release
VERBOCITY=Normal

!IF [$(COMSPEC) /c cl /nologo /? \
	| $(SystemRoot)\System32\find.exe "x64" >NUL ] == 0
ARCH=x64
!ELSE
ARCH=Win32
!ENDIF

!IF "$(CONFIG)" == "Debug" || "$(CONFIG)" == "DebugDLL"
POSTFIX="d"
!ENDIF

!MESSAGE ARCH          = $(ARCH)
!MESSAGE CONFIG        = $(CONFIG)
!MESSAGE VERBOCITY     = $(VERBOCITY)
!MESSAGE PREFIX        = $(PREFIX)  (install path)

rebuild: clean build

all: build check

clean:
	cd vs2005-build
	-msbuild vs2005-activemq-cpp.sln /t:vs2005-activemq:Clean /p:Configuration=$(CONFIG);Platform=$(ARCH) /verbosity:$(VERBOCITY)
	-msbuild vs2005-activemq-cpp.sln /t:vs2005-activemq-example:Clean /p:Configuration=$(CONFIG);Platform=$(ARCH)
	-msbuild vs2005-activemq-cpp.sln /t:vs2005-activemq-integration-tests:Clean /p:Configuration=$(CONFIG);Platform=$(ARCH)
	-msbuild vs2005-activemq-cpp.sln /t:vs2005-activemq-unittests:Clean /p:Configuration=$(CONFIG);Platform=$(ARCH)
	cd ..

build:
	cd vs2005-build
	-msbuild vs2005-activemq-cpp.sln /t:vs2005-activemq /p:Configuration=$(CONFIG);Platform=$(ARCH) /verbosity:$(VERBOCITY)
	-msbuild vs2005-activemq-cpp.sln /t:vs2005-activemq-example /p:Configuration=$(CONFIG);Platform=$(ARCH)
	-msbuild vs2005-activemq-cpp.sln /t:vs2005-activemq-integration-tests /p:Configuration=$(CONFIG);Platform=$(ARCH)
	-msbuild vs2005-activemq-cpp.sln /t:vs2005-activemq-unittests /p:Configuration=$(CONFIG);Platform=$(ARCH)
	cd ..

checkamq:
	cd vs2005-build\$(CONFIG)
	.\vs2005-activemq-unittests.exe
	cd ..\..\

check: checkamq

install:
	echo Y >.y
	echo A >.A
	@if NOT EXIST "$(PREFIX)\."		mkdir "$(PREFIX)"
	@if NOT EXIST "$(PREFIX)\bin\."		mkdir "$(PREFIX)\bin"
	@if NOT EXIST "$(PREFIX)\include\."	mkdir "$(PREFIX)\include"
	@if NOT EXIST "$(PREFIX)\lib\."		mkdir "$(PREFIX)\lib"
	copy RELEASE_NOTES.txt "$(PREFIX)\RELEASE_NOTES.txt" <.y
	copy LICENSE.txt "$(PREFIX)\LICENSE.txt" <.y
	copy NOTICE.txt  "$(PREFIX)\NOTICE.txt"  <.y
	xcopy src\main\*.h		"$(PREFIX)\include\" /s /d < .a
!IF "$(CONFIG)" == "Debug" || "$(CONFIG)" == "Release"
	copy .\vs2005-build\$(ARCH)\$(CONFIG)\libactivemq-cpp$(POSTFIX).lib		"$(PREFIX)\lib\" <.y
!ELSE
	copy .\vs2005-build\$(ARCH)\$(CONFIG)\activemq-cpp$(POSTFIX).lib		"$(PREFIX)\lib\" <.y
	copy .\vs2005-build\$(ARCH)\$(CONFIG)\activemq-cpp$(POSTFIX).exp		"$(PREFIX)\lib\" <.y
	copy .\vs2005-build\$(ARCH)\$(CONFIG)\activemq-cpp$(POSTFIX).dll		"$(PREFIX)\bin\" <.y
	copy .\vs2005-build\$(ARCH)\$(CONFIG)\activemq-cpp$(POSTFIX).pdb		"$(PREFIX)\bin\" <.y
!ENDIF
	del .y
	del .a

