WITH_PTHREAD=1
WITH_MUDFLAP=
WITH_OPTIMIZE=
WITH_PROFILE=
WITH_VALGRIND=
WITH_EPOLL=
WITH_SYSCONF_CPUS=1
WITH_WIN32=

CXX=g++
CXXFLAGS=-W -Wall -pedantic -Wundef -Wendif-labels -Wshadow -Wpointer-arith \
	-Wcast-align -Wwrite-strings -Winline -Wdisabled-optimization -ggdb3 \
	-D_GLIBCXX_DEBUG
LIBS=
OBJS=runner.o microthread.o coroutine.o channel.o callback.o basescheduler.o \
	selectscheduler.o waitqueue.o globalqueue.o currentthread.o \
	cpudetect.o selectwrapper.o
UNITTEST_OBJS=unittest_main.o unittest.o timeval_test.o
ALLOBJS=test.o testweb.o testprime.o testforward.o $(OBJS) \
	$(UNITTEST_OBJS) unittest_simple.o unittest_libmuth.o

ifneq (${WITH_EPOLL},)
CXXFLAGS+=-DUSE_EPOLL
OBJS+=epollscheduler.o
endif

ifneq (${WITH_PTHREAD},)
CXXFLAGS+=-pthread -DUSE_PTHREAD
LIBS+=pthread
OBJS+=pthreadlock.o pthreadcondition.o
ifneq (${WITH_SYSCONF_CPUS},)
CXXFLAGS+=-DUSE_SYSCONF_CPUS
endif
endif

ifneq (${WITH_MUDFLAP},)
ifneq (${WITH_PTHREAD},)
CXXFLAGS:=$(filter-out -D_GLIBCXX_DEBUG, ${CXXFLAGS})
CXXFLAGS+=-fmudflapth
LIBS+=mudflapth
else
CXXFLAGS+=-fmudflap
LIBS+=mudflap
endif
endif

ifneq (${WITH_OPTIMIZE},)
CXXFLAGS+=-O3 -DNDEBUG -ffunction-sections -fdata-sections
CXXFLAGS:=$(filter-out -ggdb3 -D_GLIBCXX_DEBUG, ${CXXFLAGS})
ifneq ($(filter pentium2 k8,${WITH_OPTIMIZE}),)
CXXFLAGS+=-march=${WITH_OPTIMIZE}
endif
endif

ifneq (${WITH_PROFILE},)
CXXFLAGS+=-pg
CXXFLAGS=$(filter-out -ffunction-sections -fdata-sections,${CXXFLAGS})
endif

ifneq (${WITH_VALGRIND},)
CXXFLAGS+=-DUSE_VALGRIND -I/usr/include/valgrind
CXXFLAGS:=$(filter-out -pedantic,${CXXFLAGS})
endif

ifneq (${WITH_WIN32},)
OBJS+=win32.o
CXXFLAGS+=-D__WIN32__
endif

%.o:%.c++
	${CXX} ${CXXFLAGS} -c $< -o $@
%:%.o
	${CXX} ${CXXFLAGS} $^ -o $@ $(foreach l,${LIBS},-l$l)
default:
	@echo This Makefile is to be abandoned, you probably want to use scons.
	scons
all:test testweb testforward unittest_libmuth unittest_simple testprime
test:test.o $(OBJS)
testweb:testweb.o $(OBJS)
testforward:testforward.o $(OBJS)
testprime:testprime.o $(OBJS)
	${CXX} ${CXXFLAGS} $^ -o $@ $(foreach l,${LIBS},-l$l) -lgmp
unittest_libmuth:unittest_libmuth.o $(UNITTEST_OBJS) $(OBJS)
unittest_simple:unittest_simple.o $(UNITTEST_OBJS)
tags:$(wildcard *.c++) $(wildcard *.h)
	ctags -f $@ --extra=+q --fields=+i --c++-kinds=+p $^
clean:
	rm -f test testweb testforward testprime unittest_simple
	rm -f unittest_libmuth tags Makefile.dep *.o
	rm -Rf html
docs:
	doxygen
.PHONY:all clean docs

Makefile.dep:$(subst .o,.c++,$(ALLOBJS)) $(wildcard *.h)
	${CXX} -MM ${CXXFLAGS} $(subst .o,.c++,$(ALLOBJS)) > $@
include Makefile.dep

# vim7:nospell
