# Makefile.win for Win32 APR alone
#
# Targets are:
#
#     buildall - compile everything
#     checkall - run APR regression tests
#     install  - compile everything
#     clean    - mop up everything
#
# You can override the build mechanism, choose only one;
#
#     USEMAK=1 - compile from exported make files
#     USEDSW=1 - compile from .dsw / .dsp VC6 projects
#     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 Release"
#     ARCH="Win32 Debug"
#     ARCH="x64 Release"
#     ARCH="x64 Debug"
#
# For example;
#
#   nmake -f Makefile.win PREFIX=C:\APR buildall checkall install clean
#

!IF EXIST("apr.sln") && ([devenv /help > NUL 2>&1] == 0) \
    && !defined(USEMAK) && !defined(USEDSW)
USESLN=1
USEMAK=0
USEDSW=0
!ELSEIF EXIST("apr.mak") && !defined(USEDSW)
USESLN=0
USEMAK=1
USEDSW=0
!ELSE
USESLN=0
USEMAK=0
USEDSW=1
!ENDIF

PREFIX=..\apr-dist

!IF [$(COMSPEC) /c cl /nologo /? \
	| $(SystemRoot)\System32\find.exe "x64" >NUL ] == 0
ARCH=x64 Release
!ELSE
ARCH=Win32 Release
!ENDIF

!MESSAGE ARCH        = $(ARCH)
!MESSAGE PREFIX      = $(PREFIX)  (install path)


# Utility and Translation things, nothing here for the user
#
!IF "$(ARCH)" == "Win32 Release"
SLNARCH=Release|Win32
ARCHOSPATH=Release
LIBSOSPATH=LibR
!ELSEIF "$(ARCH)" == "Win32 Debug"
SLNARCH=Debug|Win32
ARCHOSPATH=Debug
LIBSOSPATH=LibD
!ELSEIF "$(ARCH)" == "x64 Release"
SLNARCH=Release|x64
ARCHOSPATH=x64\Release
LIBSOSPATH=x64\LibR
!ELSEIF "$(ARCH)" == "x64 Debug"
SLNARCH=Debug|x64
ARCHOSPATH=x64\Debug
LIBSOSPATH=x64\LibD
!ENDIF

!IFNDEF MAKEOPT
# Only default the behavior if MAKEOPT= is omitted
!IFDEF _NMAKE_VER
# Microsoft NMake options
MAKEOPT=-nologo
!ELSEIF "$(MAKE)" == "make"
# Borland make options?  Not really supported (yet)
MAKEOPT=-s -N
!ENDIF
!ENDIF


all: buildall checkall

!IF $(USEMAK) == 1

clean:
	$(MAKE) $(MAKEOPT) -f Makefile.win ARCH="$(ARCH)" \
		CTARGET=CLEAN buildall

buildall:
	$(MAKE) $(MAKEOPT) -f apr.mak         CFG="apr - $(ARCH)" RECURSE=0 $(CTARGET)
	$(MAKE) $(MAKEOPT) -f libapr.mak      CFG="libapr - $(ARCH)" RECURSE=0 $(CTARGET)
	cd build
	 $(MAKE) $(MAKEOPT) -f aprapp.mak     CFG="aprapp - $(ARCH)" RECURSE=0 $(CTARGET)
	 $(MAKE) $(MAKEOPT) -f libaprapp.mak  CFG="libaprapp - $(ARCH)" RECURSE=0 $(CTARGET)
	cd ..

!ELSEIF $(USESLN) == 1

clean:
	-devenv apr.sln /useenv /clean "$(SLNARCH)" /project libaprapp
	-devenv apr.sln /useenv /clean "$(SLNARCH)" /project libapr
	-devenv apr.sln /useenv /clean "$(SLNARCH)" /project aprapp
	-devenv apr.sln /useenv /clean "$(SLNARCH)" /project apr

buildall:
	devenv apr.sln /useenv /build "$(SLNARCH)" /project apr
	devenv apr.sln /useenv /build "$(SLNARCH)" /project aprapp
	devenv apr.sln /useenv /build "$(SLNARCH)" /project libapr
	devenv apr.sln /useenv /build "$(SLNARCH)" /project libaprapp

!ELSE
#	$(USEDSP) == 1

clean:
	-msdev apr.dsw /USEENV /MAKE "libaprapp - $(ARCH)" /CLEAN
	-msdev apr.dsw /USEENV /MAKE "libapr - $(ARCH)" /CLEAN
	-msdev apr.dsw /USEENV /MAKE "aprapp - $(ARCH)" /CLEAN
	-msdev apr.dsw /USEENV /MAKE "apr - $(ARCH)" /CLEAN

buildall:
	@msdev apr.dsw /USEENV /MAKE "apr - $(ARCH)"
	@msdev apr.dsw /USEENV /MAKE "aprapp - $(ARCH)"
	@msdev apr.dsw /USEENV /MAKE "libapr - $(ARCH)"
	@msdev apr.dsw /USEENV /MAKE "libaprapp - $(ARCH)"

!ENDIF


checkapr:
	cd test
	 $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=static \
		OUTDIR=$(LIBSOSPATH) check
	 $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=dynamic \
		OUTDIR=$(ARCHOSPATH) check
	 cd ..

checkall: checkapr


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 CHANGES "$(PREFIX)\CHANGES.txt" <.y
	copy LICENSE "$(PREFIX)\LICENSE.txt" <.y
	copy NOTICE  "$(PREFIX)\NOTICE.txt"  <.y
	xcopy include\*.h		"$(PREFIX)\include\" /d < .a
	copy $(LIBSOSPATH)\apr-2.lib		"$(PREFIX)\lib\" <.y
	copy $(LIBSOSPATH)\apr-2.pdb		"$(PREFIX)\lib\" <.y
	copy $(LIBSOSPATH)\aprapp-2.lib		"$(PREFIX)\lib\" <.y
	copy $(LIBSOSPATH)\aprapp-2.pdb		"$(PREFIX)\lib\" <.y
	copy $(ARCHOSPATH)\libaprapp-2.lib	"$(PREFIX)\lib\" <.y
	copy $(ARCHOSPATH)\libaprapp-2.pdb	"$(PREFIX)\lib\" <.y
	copy $(ARCHOSPATH)\libapr-2.lib		"$(PREFIX)\lib\" <.y
	copy $(ARCHOSPATH)\libapr-2.exp		"$(PREFIX)\lib\" <.y
	copy $(ARCHOSPATH)\libapr-2.dll		"$(PREFIX)\bin\" <.y
	copy $(ARCHOSPATH)\libapr-2.pdb		"$(PREFIX)\bin\" <.y
	del .y
	del .a

