#
# LLRNet - network part of LLR
#
# (C) 2004-2005 Vincent Penne
#
# Released under GNU LIBRARY GENERAL PUBLIC LICENSE
# (See file LICENSE that must be included with this software)
#
# Makefile for Llrnet, 
#

##################################################

# you must create a conf.linux.makefile that defines fltk_prefix to the correct value
# for your system ... (see exemples below)
#fltk_prefix =	./fltk/
#fltk_prefix =	/home/cptpc24/penne/c/fltk-cvs/fltk/
#fltk_prefix =	/home/zig/c/fltk-cvs/fltk/


# relative path to llr source code
llrpath = ../llrsource


##################################################
# -----------------------------------------------------------------------------
# Try to guess the target
# -----------------------------------------------------------------------------

WIN32	=	$(shell ld --help | grep i386pe | sed s/i386pe/1/ | sed s/[^1]*//)
LINUX	=	$(shell ld --version | grep i386linux | sed s/i386linux/1/ | sed s/\ *//)

##################################################
# -----------------------------------------------------------------------------
# Target specific options
# -----------------------------------------------------------------------------

ifeq ($(WIN32),1)
CFLAGS		+=	-DWIN32_LEAN_AND_MEAN -mno-cygwin
CCFLAGS		+=	-DWIN32_LEAN_AND_MEAN -mno-cygwin
LDFLAGS		+=	-mno-cygwin #-mconsole
target		= llrnet.exe
objsuf		= .ow32
libsuf		= .aw32
include conf.win32.makefile
CCFLAGS += -DWIN32
else
ifeq ($(LINUX),1)
target		= llrnet
objsuf		= .o
libsuf		= .a
include conf.linux.makefile
#LIBS = -lGL -lGLU
else
target		= llrnet
objsuf		= .o
libsuf		= .a
include conf.generic.makefile
#LIBS = -lGL -lGLU
endif
endif

fluid =		$(fltk_prefix)fluid/fluid

#USE_FOX = 1

##################################################

ifeq ($(USE_MYSQL),1)
CCFLAGS += -DUSE_MYSQL -Imysql -Imysql/compat

ifeq ($(WIN32),1)
ifeq ($(CROSS_WIN32),1)
CCFLAGS += -I/usr/local/cross-tools/i386-mingw32msvc/include/mysql
#LIBS += -L/usr/local/cross-tools/i386-mingw32msvc/lib/mysql -lmysqlclient
LIBS += /usr/local/cross-tools/i386-mingw32msvc/lib/mysql/libmysqlclient.a /usr/local/cross-tools/i386-mingw32msvc/lib/libz.a
else
endif
else
CCFLAGS += -I/usr/include/mysql
LIBS += -lmysqlclient
endif

endif

ifeq ($(USE_SQLITE),1)
CCFLAGS += -DUSE_SQLITE -Imysql -Imysql/compat

ifeq ($(WIN32),1)
ifeq ($(CROSS_WIN32),1)
CCFLAGS += -I/usr/local/cross-tools/i386-mingw32msvc/include/sqlite
#LIBS += -L/usr/local/cross-tools/i386-mingw32msvc/lib/sqlite -lsqlite
LIBS += /usr/local/cross-tools/i386-mingw32msvc/lib/mysql/libsqlite.a /usr/local/cross-tools/i386-mingw32msvc/lib/libz.a
else
endif
else
LIBS += -lsqlite
endif

endif

ifeq ($(USE_FOX),1)
ifeq ($(CROSS_WIN32),1)
LIBS += fox-binding/lua5-fox$(libsuf) -I/usr/local/cross-tools/i386-mingw32msvc/include/fox -lFOX
else
LIBS += fox-binding/lua5-fox$(libsuf) -I/usr/local/cross-tools/i386-mingw32msvc/include/fox -L/usr/local/lib -lFOX
endif
CCFLAGS += -DUSE_FOX
ifneq ($(WIN32),1)
LIBS += -L/usr/X11R6/lib -lX11 -lXext #-lGL -lGLU
endif
endif

ifeq ($(USE_FLTK),1)
LIBS += 	`$(fltk_prefix)fltk-config --use-images --use-forms --use-gl --ldflags`
else
ifeq ($(WIN32),1)
LIBS += -lole32 -luuid -lcomctl32 -lwsock32
ifeq ($(USE_FOX),1)
LIBS += -mwindows -lwinspool -lws2_32 -lopengl32 -lglu32 -lglut32# -lz -lpng -ljpeg
else
LIBS += -mwindows
endif
endif
endif

LIBS +=		-lm lua/lib/liblua.a lua/lib/liblualib.a #-Llua/lib -llua -llualib

ifeq ($(WIN32),1)
#LIBS += -lwinspool -lopengl32 -lglu32 -lglut32 -lz -lpng -ljpeg
else
ifeq ($(FREEBSD),1)
LIBS += -lc_r -lcompat
else
LIBS += -lpthread
endif
endif

ifeq ($(WIN32),1)
OBJ = obj
llrobjs = $(llrpath)/Prime95
else
OBJ = o
llrobjs = $(llrpath)/linux
ifneq ($(USE_MYSQL),1)
LDFLAGS += -static
endif
endif

THREADING=1
ifeq ($(THREADING),1)
CCFLAGS += -DTHREADING
endif

DEFAULT_LUA_FILE = \"llrnet.lua\"
CCFLAGS += "-DDEFAULT_LUA_FILE=$(DEFAULT_LUA_FILE)"

CC =		gcc
LD =		g++
MAKEDEPEND =	gcc -M -MP
ifeq ($(USE_FLTK),1)
CCFLAGS +=	`$(fltk_prefix)fltk-config --use-images --use-forms --use-gl --cflags` -DUSE_FLTK
endif
CCFLAGS +=	-g -c $(INC) $(CCExtra) -Ilua/include -I$(llrpath) -I$(llrpath)/linuxllr -malign-double
LDFLAGS +=	-g $(LIBS)

##################################################

sources =	llrnet.cxx net.cxx threads.cxx
ifeq ($(USE_FLTK),1)
sources +=	bind-fltk-ext.cxx
endif

ifeq ($(USE_MYSQL),1)
csources +=	mysql/luasql.c mysql/ls_mysql.c mysql/compat/compat-5.1.c
endif

ifeq ($(USE_SQLITE),1)
csources +=	mysql/ls_sqlite.c
endif

ifneq ($(NO_LLR),1)
csources +=	llr2.c #filenames.c

COFFOBJS = $(llrobjs)/mult.$(OBJ) $(llrobjs)/mult1.$(OBJ) $(llrobjs)/mult2.$(OBJ) $(llrobjs)/mult2a.$(OBJ) $(llrobjs)/mult3.$(OBJ) $(llrobjs)/mult3a.$(OBJ) $(llrobjs)/mult4.$(OBJ) $(llrobjs)/mult2p.$(OBJ) $(llrobjs)/mult2ap.$(OBJ) $(llrobjs)/mult3p.$(OBJ) $(llrobjs)/mult3ap.$(OBJ) $(llrobjs)/mult4p.$(OBJ) $(llrobjs)/mult1aux.$(OBJ) $(llrobjs)/mult2aux.$(OBJ) $(llrobjs)/xmult1.$(OBJ) $(llrobjs)/xmult1ax.$(OBJ) $(llrobjs)/xmult2.$(OBJ) $(llrobjs)/xmult2a.$(OBJ) $(llrobjs)/xmult2ax.$(OBJ) $(llrobjs)/xmult3.$(OBJ) $(llrobjs)/xmult3a.$(OBJ) $(llrobjs)/xmult3ax.$(OBJ) $(llrobjs)/ecmhelp.$(OBJ) $(llrobjs)/cpuid.$(OBJ)
DUMMYOBJS = $(llrobjs)/dummy4.$(OBJ) $(llrobjs)/dummy8.$(OBJ) $(llrobjs)/dummy12.$(OBJ) $(llrobjs)/dummy16.$(OBJ) $(llrobjs)/dummy20.$(OBJ) $(llrobjs)/dummy24.$(OBJ) $(llrobjs)/dummy28.$(OBJ)
DUMMY1   = $(llrobjs)/dummy24.$(OBJ)
DUMMY2   = $(llrobjs)/dummy24.$(OBJ)
else
CCFLAGS += -DNO_LLR
endif

objects =	$(sources:.cxx=$(objsuf)) $(csources:.c=$(objsuf))


##################################################

all :		depend lua $(target)

.PHONY: lua
lua :
	@echo [building lua]
	@$(MAKE) -C lua

$(target) :	$(objects) $(DUMMY1) $(COFFOBJS)
	$(LD) -o $(target) $(objects) $(DUMMY1) $(COFFOBJS) $(LDFLAGS)

.PHONY:	doc
doc:	$(sources)
	@mkdir -p doc/html
	@doxygen
	@cp images/logo.png doc/html
	@cp images/slogo.png doc/html

##################################################

.SUFFIXES: $(objsuf) .c .cxx .s .fl

.c$(objsuf): 
	$(CC) $(CCFLAGS) -o $@ $<

.cxx$(objsuf):
	$(CC) $(CCFLAGS) -o $@ $<

$(COFFOBJS) $(DUMMYOBJS): $(llrobjs)/%.o : ../llrsource/Prime95/%.obj
	$(OBJCOPY) -Oelf32-i386 $< $@

fox-binding/lua5-fox$(libsuf):
	make -C fox-binding

##################################################

.PHONY: clean
clean:
	$(MAKE) -C lua clean
	rm -f $(target) $(objects)

##################################################

.PHONY: depend
depend:
	@echo [building dependencies]
	@($(MAKEDEPEND) $(CCFLAGS) $(csources) $(sources) 2> /dev/null) | sed s/\\.o:/\\$(objsuf):/ > makedepend

##################################################

ifeq ($(FREEBSD),1)
suffix=freebsd
else
suffix=linux
endif

.PHONY: release
release: all
ifeq ($(WIN32),1)
	rm -rf llrnet.win32 llrnet.win32.zip
	mkdir llrnet.win32
	rm llrnet$(objsuf)
	make WIN32=1 target=llrserver.exe DEFAULT_LUA_FILE=\\\"llrserver.lua\\\" NO_LLR=1 USE_FOX=0 USE_MYSQL=1
	cp llrserver.exe llrnet.win32
	strip llrnet.win32/llrserver.exe
	rm llrnet$(objsuf)
	cp $(target) llr.ini llr-clientconfig.txt llr-serverconfig.txt llrnet.win32
	cp *.lua llrnet.win32
	cp remote-gui.bat llrnet.win32
#	cp llrserver.bat llrnet.win32
#	cp $(sources) $(csources) *.h Makefile conf.*.makefile llrnet.win32
	cp *.dll llrnet.win32 || true
	cp README llrnet.win32/README.txt
	cp LICENSE llrnet.win32/LICENSE.txt
	cp CHANGELOG llrnet.win32/CHANGELOG.txt
#	$(MAKE) -C lua clean
#	cp -r lua llrnet.win32
	strip llrnet.win32/$(target)
#	cp -f LLRnet-gui.exe llrnet.win32
	zip -r llrnet.win32.zip llrnet.win32
else
	rm -rf llrnet.$(suffix) llrnet.$(suffix).tgz
	mkdir llrnet.$(suffix)
	mkdir llrnet.$(suffix)/mysql
	mkdir llrnet.$(suffix)/mysql/compat
	cp $(target) llr.ini LICENSE README CHANGELOG llr-clientconfig.txt llr-serverconfig.txt llrnet.$(suffix)
	cp mysql/*.c mysql/*.h llrnet.$(suffix)/mysql
	cp mysql/compat/*.c mysql/compat/*.h mysql/compat/*.lua llrnet.$(suffix)/mysql/compat
	cp *.lua $(sources) $(csources) *.h Makefile conf.*.makefile llrnet.$(suffix)
#	$(MAKE) -C lua clean
	cp -r lua llrnet.$(suffix)
	cp remote-gui.sh llrnet.$(suffix)
	strip llrnet.$(suffix)/$(target)
	tar zcf llrnet.$(suffix).tgz llrnet.$(suffix)
endif

.PHONY: source-release
source-release:
	rm -rf llrnet-sources
	rm -rf llr
	cvs -d:ext:zigziggy@ziggy:/cvs/dev co llr
	mv llr llrnet-sources
	cd llrnet-sources/llrnet ; rm -rf lua ; tar zxf lua.tgz ; rm lua.tgz ; mv lua-5.0.2 lua
	tar zcf llrnet-sources.tgz llrnet-sources

-include makedepend
