###################################################################
#
## Makefile for building GeoIP stuff (Win32 version - gnu make)
## To build the binaries you need awk, GNU make and MingW32 gcc
## or Metrowerks CodeWarrior CommandlineTools.  
## Usage: make -f Makefile.win32 [all|dist|clean|distclean]
##
## hacked by: Guenter Knauf
#
###################################################################

# Edit the path below to point to your zlib sources and libs.
ifndef ZLIBSDK
ZLIBSDK = d:/projects/mingw32/zlib-1.2.3
endif

ifndef DISTDIR
DISTDIR	= GeoIP-$(GEOIP_VERSION_STR)-bin-w32
endif
ARCHIVE	= $(DISTDIR).zip

# Edit the vars below to change EXE target settings.
TARGETS	:= $(patsubst apps/%.c,%.exe,$(wildcard apps/*.c))
DESCR	= $(subst .rc,,$(notdir $@)) $(GEOIP_VERSION_STR)
COMPANY	= MaxMind LLC
COPYR	= © 2003-2006 MaxMind LLC  All Rights Reserved.
WWWURL	= http://www.maxmind.com/app/c
LICENSE	= Licensed under LGPL
ICON 	= geoip.ico
DATADIR	= c:/GeoIP
CONFDIR	= c:/GeoIP

# Comment the line below if you dont want to link with the static libz.lib.
LSTATIC = 1

# must be equal to DEBUG or NDEBUG
DB	= NDEBUG
# DB	= DEBUG
# Optimization: -O<n> or debugging: -g
ifeq ($(DB),NDEBUG)
	OPT	= -O2
	OBJDIR	= release
else
	OPT	= -g
	OBJDIR	= debug
endif
OBJLIB	= lib-$(OBJDIR)

# Include the version info retrieved from header.
-include $(OBJDIR)/version.inc

# Global tools and toolflags used with all compilers.
ZIP	= zip -qzR9
CP	= cp -afv
MV	= mv -fv
# RM	= rm -f
RE	= reimp -d
DLLTOOL	= dlltool
DTFLAGS	= -k

# The following line defines your compiler.
ifdef METROWERKS
	CC = mwcc
else
	CC = gcc
endif

# Global flags for all compilers
CFLAGS	= $(OPT) -D$(DB) -D_WIN32
# -nostdinc
CFLAGS	+= -DHAVE_STDINT_H
CFLAGS	+= -DGEOIPDATADIR=\"$(DATADIR)\"
CFLAGS	+= -DSYSCONFDIR=\"$(CONFDIR)\"

ifeq ($(CC),mwcc)
LD	= mwld
LDFLAGS	= -nostdlib
LIBPATH	= -lr "$(METROWERKS)/MSL" -lr "$(METROWERKS)/Win32-x86 Support/Libraries"
CWLIBS	= -lMSL_Runtime_x86.lib -lMSL_C_x86.lib -lMSL_Extras_x86.lib
LDLIBS	= -lkernel32.lib -luser32.lib $(CWLIBS)
AR	= mwld
ARFLAGS	= -type library -w nocmdline $(OBJDIR)/*.o -o
LIBEXT	= lib
RC	= mwwinrc
CFLAGS	+= -nostdinc
CFLAGS	+= -msgstyle gcc -gccinc -opt nointrinsics -proc 586
CFLAGS	+= -relax_pointers
#CFLAGS	+= -w on
CFLAGS	+= -ir "$(METROWERKS)/MSL" -ir "$(METROWERKS)/Win32-x86 Support/Headers"
else
LD	= gcc
LDFLAGS	= -s
AR	= ar
ARFLAGS	= -cq
LIBEXT	= a
RC	= windres
RCFLAGS	= -I rc -O coff -i
CFLAGS	+= -Wall -Wno-unused # -Wno-format #-pedantic
endif

INCLUDES += -I./libGeoIP
INCLUDES += -I$(ZLIBSDK)
CFLAGS	+= $(INCLUDES)

LDLIBS	+= -lwsock32
LIBPATH	+= -L$(ZLIBSDK)
ifdef LSTATIC
	LDLIBS	+= -lz
else
	LDLIBS	+= -lzdll
endif

ifeq ($(findstring linux,$(OSTYPE)),linux)
DL	= '
#-include $(NDKBASE)/nlmconv/ncpfs.inc
endif

vpath %.c ./apps ./libGeoIP

LIBOBJS	= $(OBJLIB)/GeoIP.o $(OBJLIB)/GeoIPCity.o
UPDOBJS	= $(OBJLIB)/GeoIPUpdate.o $(OBJLIB)/md5.o
LIBOBJS += $(UPDOBJS)

.PRECIOUS: $(OBJLIB)/%.o $(OBJDIR)/%.o $(OBJDIR)/%.rc

all: prebuild $(TARGETS)

prebuild: $(OBJLIB) $(OBJDIR) $(OBJDIR)/version.inc

dist: $(DISTDIR) all $(DISTDIR)/readme_bin.txt
	@$(CP) *.exe $(DISTDIR)
	@$(CP) Changelog $(DISTDIR)
	@$(CP) README $(DISTDIR)
	@$(CP) conf/GeoIP.conf.default $(DISTDIR)
	@$(CP) data/GeoIP.dat $(DISTDIR)
	@echo Creating $(ARCHIVE)
	@$(ZIP) $(ARCHIVE) $(DISTDIR)/* < $(DISTDIR)/readme_bin.txt

clean:
	-$(RM) -r $(OBJDIR) $(OBJLIB)
	-$(RM) $(TARGETS)

distclean:
	-$(RM) -r $(DISTDIR)
	-$(RM) $(ARCHIVE)

%.exe: $(OBJDIR)/%.res $(LIBOBJS) $(OBJDIR)/%.o
	@echo Linking $@
	@-$(RM) $@
	$(LD) $(LDFLAGS) -o $@ $^ $(LIBPATH) $(LDLIBS)
#	$(LD) $(LDFLAGS) $(LIBPATH) $(LIBFILES) -o $@ $^

$(DISTDIR):
	@mkdir $@

$(OBJDIR):
	@mkdir $@

$(OBJLIB):
	@mkdir $@

$(OBJDIR)/%.o: %.c
#	@echo Compiling $<
	$(CC) $(CFLAGS) -c $< -o $@

$(OBJLIB)/%.o: %.c
#	@echo Compiling $<
	$(CC) $(CFLAGS) -c $< -o $@

$(OBJDIR)/version.inc: configure.in $(OBJDIR)
	@echo Creating $@
	@awk -f get_ver.awk $< > $@

$(OBJDIR)/%.res: $(OBJDIR)/%.rc
	@echo Creating $@
	@$(RC) $(RCFLAGS) $< -o $@

$(OBJDIR)/%.rc: Makefile.win32
	@echo 1 VERSIONINFO > $@
	@echo  FILEVERSION $(GEOIP_VERSION),0 >> $@
	@echo  PRODUCTVERSION $(GEOIP_VERSION),0 >> $@
	@echo  FILEFLAGSMASK 0x3fL >> $@
	@echo  FILEOS 0x40004L >> $@
	@echo  FILEFLAGS 0x0L >> $@
	@echo  FILETYPE 0x1L >> $@
	@echo  FILESUBTYPE 0x0L >> $@
	@echo BEGIN >> $@
	@echo   BLOCK "StringFileInfo" >> $@
	@echo   BEGIN >> $@
	@echo     BLOCK "040904E4" >> $@
	@echo     BEGIN >> $@
	@echo       VALUE "LegalCopyright","$(COPYR)\0" >> $@
ifdef COMPANY
	@echo       VALUE "CompanyName","$(COMPANY)\0" >> $@
endif
ifdef LICENSE
	@echo       VALUE "License","$(LICENSE)\0" >> $@
endif
	@echo       VALUE "ProductName","$(basename $(notdir $@))\0" >> $@
	@echo       VALUE "ProductVersion","$(GEOIP_VERSION_STR)\0" >> $@
	@echo       VALUE "FileDescription","$(DESCR)\0" >> $@
	@echo       VALUE "FileVersion","$(GEOIP_VERSION_STR)\0" >> $@
	@echo       VALUE "InternalName","$(basename $(notdir $@))\0" >> $@
	@echo       VALUE "OriginalFilename","$(basename $(notdir $@)).exe\0" >> $@
	@echo       VALUE "WWW","$(WWWURL)\0" >> $@
	@echo     END >> $@
	@echo   END >> $@
	@echo   BLOCK "VarFileInfo" >> $@
	@echo   BEGIN >> $@
	@echo     VALUE "Translation", 0x409, 1252 >> $@
	@echo   END >> $@
	@echo END >> $@
ifdef ICON
	@echo 10 ICON DISCARDABLE "$(ICON)" >> $@
endif

$(DISTDIR)/readme_bin.txt: Makefile.win32
	@echo Creating $@
	@echo $(DL)This is a binary distribution for Win32 platform.$(DL) > $@
	@echo $(DL)GeoIP version $(GEOIP_VERSION_STR)$(DL) >> $@
ifndef LSTATIC
	@echo $(DL)These binaries depend on zlib1.dll in the search path!$(DL) >> $@
endif
	@echo $(DL)Please download the complete GeoIP package for$(DL) >> $@
	@echo $(DL)any further documentation:$(DL) >> $@
	@echo $(DL)$(WWWURL)$(DL) >> $@

info:
	@echo Targets to build: $(TARGETS)



