# -*- Makefile -*-
!IF "$(OS)" == "Windows_NT"
NULL=
rmdir=rd /s /q
!ELSE
NULL=nul
rmdir=deltree /y
!ENDIF

SILENT=@

# Default build and bind modes
BUILD_MODE = release
BIND_MODE  = shared

!IF "$(BUILD_MODE)" == "release" || "$(BUILD_MODE)" == "Release"
!IF "$(BIND_MODE)" == "shared"
# release shared
APR_LIB_PFX = $(APR_SOURCE)\Release\lib
API_LIB_PFX = $(API_SOURCE)\Release\lib
CFG_CFLAGS  = /MD /O2 /Oy- /Zi
CFG_DEFINES = /D "NDEBUG"
CFG_LDFLAGS = /debug /opt:ref
CFG_OUTPUT  = Release\iconv

!ELSE
!IF "$(BIND_MODE)" == "static"
# release static
APR_LIB_PFX = $(APR_SOURCE)\LibR\	# no line continuation
API_LIB_PFX = $(API_SOURCE)\LibR\	# no line continuation
CFG_CFLAGS  = /MD /O2 /Oy- /Zi
CFG_DEFINES = /D "NDEBUG" /D "APR_DECLARE_STATIC" /D "API_DECLARE_STATIC"
CFG_LDFLAGS = /debug /incremental:no /opt:ref
CFG_OUTPUT  = LibR\iconv

!ELSE
!ERROR Unknown bind mode "$(BIND_MODE)"
!ENDIF
!ENDIF

!ELSE
!IF "$(BUILD_MODE)" == "debug" || "$(BUILD_MODE)" == "Debug"
!IF "$(BIND_MODE)" == "shared"
# debug shared
APR_LIB_PFX = $(APR_SOURCE)\Debug\lib
API_LIB_PFX = $(API_SOURCE)\Debug\lib
CFG_CFLAGS  = /MDd /Zi /Od
CFG_DEFINES = /D "_DEBUG"
CFG_LDFLAGS = /debug
CFG_OUTPUT  = Debug\iconv

!ELSE
!IF "$(BIND_MODE)" == "static"
# debug static
APR_LIB_PFX = $(APR_SOURCE)\LibD\	# no line continuation
API_LIB_PFX = $(API_SOURCE)\LibD\	# no line continuation
CFG_CFLAGS  = /MDd /Zi /Od
CFG_DEFINES = /D "_DEBUG" /D "APR_DECLARE_STATIC" /D "API_DECLARE_STATIC"
CFG_LDFLAGS = /debug
CFG_OUTPUT  = LibD\iconv

!ELSE
!ERROR Unknown bind mode "$(BIND_MODE)"
!ENDIF
!ENDIF

!ELSE
!ERROR Unknown build mode "$(BUILD_MODE)"
!ENDIF
!ENDIF


APR_SOURCE   = ..\..\apr
API_SOURCE   = ..
OUTPUT_DIR   = $(API_SOURCE)\$(CFG_OUTPUT)
OBJ_DIR   = $(OUTPUT_DIR)\objs

INT_CFLAGS   = /nologo $(CFG_CFLAGS) /Fp"$(OUTPUT_DIR)\iconv.pch" /YX"iconv.h"
INT_INCLUDES = /I "$(API_SOURCE)\include" /I "$(API_SOURCE)\lib" \
		/I "$(APR_SOURCE)\include"
INT_DEFINES  = /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" $(CFG_DEFINES)
INT_LDFLAGS  = /nologo /dll /incremental:no /subsystem:windows \
		/export:iconv_module,DATA $(CFG_LDFLAGS)

CFLAGS       = /W3
ALL_CFLAGS   = $(INT_CFLAGS) $(INT_INCLUDES) $(INT_DEFINES) $(CFLAGS)

LDFLAGS      = 
ALL_LDFLAGS  = $(INT_LDFLAGS) $(LDFLAGS)

.c{$(OUTPUT_DIR)}.so:
	-$(SILENT)if not exist "$(OUTPUT_DIR)\$(NULL)" mkdir "$(OUTPUT_DIR)"
	-$(SILENT)if not exist "$(OBJ_DIR)\$(NULL)" mkdir "$(OBJ_DIR)"
	$(SILENT)echo Compiling $<... via $(OBJ_DIR)\$(@B).obj to $@
	$(SILENT)cl $(ALL_CFLAGS) /Fo"$(OBJ_DIR)\$(@B).obj" \
		/Fd"$(OBJ_DIR)\$(@B)_src" $< \
		/link $(ALL_LDFLAGS) /out:$@ \
		/base:@"..\build\BaseAddr.ref",$(@F) \
		"$(API_LIB_PFX)apriconv-1.lib" "$(APR_LIB_PFX)apr-1.lib" \
		kernel32.lib advapi32.lib ws2_32.lib mswsock.lib
	if exist $@.manifest mt.exe -manifest $@.manifest -outputresource:$@;2
	$(SILENT)echo.
	$(SILENT)del "$*.exp"
	$(SILENT)del "$*.lib"

all: $(ALL_TARGETS)


# The rebase target below is used only to *regenerate* the BaseAddr.ref file
# if the module list or sizes change considerably.  Use the rebase target to

# to create the BaseAddr.0xNNNNNNNN.txt file of the rebase results, 
# then remerge it back into the explicit build/BaseAddr.ref file.
#
BASE_REF = $(OUTPUT_DIR)\BaseAddr.$(REBASE_TOP).txt
ALL_REBASE = -d -p -b $(REBASE_TOP) -C $(BASE_REF) 

rebase: $(ALL_TARGETS) 
	$(SILENT)echo Extracting .dbg symbols and rebasing all modules...
	$(SILENT)rebase $(ALL_REBASE) $(ALL_TARGETS)
	$(SILENT)echo.


clean:
	-$(SILENT)if exist "$(OUTPUT_DIR)/$(NULL)" $(rmdir) $(OUTPUT_DIR)

install:
	@echo Copying apr-iconv modules from $(OUTPUT_DIR) to $(INSTALL_DIR)
	-$(SILENT)mkdir "$(INSTALL_DIR)"
	$(SILENT)copy $(OUTPUT_DIR)\*.so "$(INSTALL_DIR)" < <<
A
<<
	@echo Copying apr-iconv pdb debugging symbols from $(OUTPUT_DIR) to $(INSTALL_DIR)
	$(SILENT)copy $(OUTPUT_DIR)\*.pdb "$(INSTALL_DIR)" < <<
A
<<
