
ASSSHOME = ..
SCRIPTS = $(ASSSHOME)/scripts

# change this to the directory of your bdb 4.x install
DB_HOME = /opt/db-4.0.14
DB_INC = $(DB_HOME)/include
DB_LIB = $(DB_HOME)/lib
DB_CFLAGS = -I$(DB_INC)
DB_LDFLAGS = -L$(DB_LIB) -Wl,-rpath,$(DB_LIB) -ldb-4

# change this to the directory of your mysql install
MYSQL_HOME = /opt/mysql
MYSQL_INC = $(MYSQL_HOME)/include
MYSQL_LIB = $(MYSQL_HOME)/lib
MYSQL_CFLAGS = -I$(MYSQL_INC)
MYSQL_LDFLAGS = -L$(MYSQL_LIB) -Wl,-rpath,$(MYSQL_LIB) -lmysqlclient_r

# change this to the location of your python 2.2+ install
PYTHON_HOME = /opt/python-2.2.2
PYTHON_INC = $(PYTHON_HOME)/include/python2.2
PYTHON_LIB = $(PYTHON_HOME)/lib/python2.2
PYTHON_CFLAGS = -I$(PYTHON_INC)
PYTHON_LDFLAGS = -L$(PYTHON_LIB)/config -lpython2.2 -lutil -lm


LDFLAGS = -fPIC $(PROF_FLAGS)
#PROF_FLAGS = -pg

OPT_CFLAGS = -O2 -Wall -fpedantic -DNDEBUG
DEBUG_CFLAGS = -g -Wall -fpedantic
STD_CFLAGS = -D_REENTRANT -D_GNU_SOURCE -fPIC

CFLAGS = $(STD_CFLAGS) $(DEBUG_CFLAGS) $(PROF_FLAGS) $(OPT_CFLAGS)

CC = gcc -pipe

ALL_STUFF = asss         \
            dbtool       \
            core.so      \
            loggers.so   \
            game.so      \
            command.so   \
            external.so  \
            scoring.so   \
            admin.so     \
            database.so  \
            turf.so      \
            pymod.so     \
            funky.so



# comment out 'install' here to not replace binaries by default
all: $(ALL_STUFF) install

asss: main.o app.o module.o cmod.o util.o pathutil.o protutil.o region.o rwlock.o
	$(CC) $(LDFLAGS) -rdynamic -o $@ $^ -ldl -lpthread

dbtool: dbtool.o statcodes.o util.c
	$(CC) $(LDFLAGS) -DNOMPQUEUE -o $@ $^ $(DB_LDFLAGS)

core.so: config.o player.o core.o logman.o mainloop.o net.o \
	nullenc.o encrypt1.o arenaman.o mapdata.o mapnewsdl.o clientset.o \
	capman.o lagdata.o lagaction.o
	$(CC) $(LDFLAGS) -shared -o $@ $^ -lz

loggers.so: log_file.o log_console.o log_sysop.o

game.so: game.o game_timer.o chat.o flags.o balls.o fm_normal.o \
	banners.o objects.o messages.o koth.o fm_lockspec.o
	$(CC) $(LDFLAGS) -shared -o $@ $^ -lm

command.so: cmdman.o playercmd.o admincmd.o watchdamage.o buy.o help.o \
	cfghelp.o

external.so: directory.o billing.o billing_ssc.o

scoring.so: persist.o stats.o statcodes.o points_kill.o points_flag.o \
	points_goal.o jackpot.o periodic.o points_periodic.o basicstats.o
	$(CC) $(LDFLAGS) -shared -o $@ $^ $(DB_LIB)/libdb.a
	# uncomment this one to link dynamically
	#$(CC) $(LDFLAGS) -shared -o $@ $^ $(DB_LDFLAGS)

admin.so: filetrans.o quickfix.o

database.so: mysql.o aliasdb.o
	$(CC) $(LDFLAGS) -shared -o $@ $^ $(MYSQL_LDFLAGS) -lz

turf.so: turf_reward.o points_turf_reward.o turf_stats.o

pymod.so: pymod.o
	$(CC) $(LDFLAGS) -shared -o $@ $^ $(PYTHON_LDFLAGS)

funky.so: bricklayer.o freqowners.o arenaperm.o auth_prefix.o \
	fake.o autoturret.o chatnet.o md5.o auth_file.o ap_multipub.o sendfile.o \
	record.o
	$(CC) $(LDFLAGS) -shared -o $@ $^ -lz



sparse.inc: $(SCRIPTS)/gensparse.py $(SCRIPTS)/sparse_params.py
	$(SCRIPTS)/gensparse.py $@ $(SCRIPTS)/sparse_params.py

letters.inc: $(SCRIPTS)/processfont.py $(SCRIPTS)/banner.font
	$(SCRIPTS)/processfont.py $(SCRIPTS)/banner.font > $@

cfghelp.inc: $(SCRIPTS)/extract-cfg-docs.py
	cat *.c *.def | $(SCRIPTS)/extract-cfg-docs.py -c > $@

py_constants.inc py_callbacks.inc py_interfaces.inc: $(SCRIPTS)/pymod-process.py *.h
	cat *.h | $(SCRIPTS)/pymod-process.py

persist.o:
	$(CC) $(CFLAGS) $(DB_CFLAGS) -c -o $@ $<

dbtool.o:
	$(CC) $(CFLAGS) $(DB_CFLAGS) -c -o $@ $<

mysql.o:
	$(CC) $(CFLAGS) $(MYSQL_CFLAGS) -c -o $@ $<

pymod.o:
	$(CC) $(CFLAGS) $(PYTHON_CFLAGS) -c -o $@ $<


Makefile.deps: sparse.inc letters.inc cfghelp.inc py_constants.inc \
	py_callbacks.inc py_interfaces.inc # *.c *.h
	-$(CC) $(STD_CFLAGS) $(DB_CFLAGS) $(MYSQL_CFLAGS) $(PYTHON_CFLAGS) -MM *.c > $@


include Makefile.deps


%.so:
	$(CC) $(LDFLAGS) -shared -o $@ $^

install: $(ALL_STUFF)
	if [ ! -d $(ASSSHOME)/bin ]; then mkdir $(ASSSHOME)/bin; fi
	cp -f $(ALL_STUFF) $(ASSSHOME)/bin

clean:
	-rm -f asss dbtool *.o *.so core Makefile.deps


.PHONY: clean install all

