include toprules.make

#include default config
include Makefile.conf-default
#if exists, include local config which overrides defaults
ifneq ($(shell ls Makefile.conf 2>/dev/null),)
include Makefile.conf
endif

versrcs = ./Version.cpp
verhdrs = ./Mercury.h
verobjs = $(shell echo $(versrcs) | \
		perl -pe 's|(.*)/([^/]*)\.cpp|$$1/.$$2.o|')

coresrcs = $(wildcard $(patsubst %,%/*.cpp,$(coredirs)))
corehdrs = $(wildcard $(patsubst %,%/*.h,$(coredirs)))
coreobjs = $(shell ls $(coresrcs) | \
		perl -pne 's|(.*)/([^/]*)\.cpp|$$1/.$$2.o|') \
		$(verobjs)


simsrcs = $(wildcard $(patsubst %,%/*.cpp,$(simdirs)))
simhdrs = $(wildcard $(patsubst %,%/*.h,$(simdirs)))
simobjs = $(shell ls $(simsrcs) | \
		perl -pne 's|(.*)/([^/]*)\.cpp|$$1/.$$2.o|')

wansrcs = $(wildcard $(patsubst %,%/*.cpp,$(wandirs)))
wanhdrs = $(wildcard $(patsubst %,%/*.h,$(wandirs)))
wanobjs = $(shell ls $(wansrcs) | \
		perl -pne 's|(.*)/([^/]*)\.cpp|$$1/.$$2.o|')

ifeq ($(make_onlysim),YES)
subdirs += $(simdirs)
TARGETS += onlysim
endif
ifeq ($(make_sim),YES)
subdirs += $(coredirs) $(simdirs)
TARGETS += sim
endif
ifeq ($(make_wan),YES)
subdirs += $(coredirs) $(wandirs)
TARGETS += wan
endif
ifeq ($(make_wanarchive),YES)
subdirs += $(coredirs) $(wandirs)
TARGETS += wan-archive
endif
ifeq ($(make_simarchive), YES)
subdirs += $(coredirs) $(simdirs)
TARGETS += sim-archive
endif

SUBDIRS = $(shell echo $(subdirs) | tr '\\ ' '\n' | sort | uniq | tr '\n' ' ')
APPDIRS = $(appdirs)

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

all: $(TARGETS) $(APPDIRS)

simtarg     = libcolyseus-sim$(LIBEXT)
onlysimtarg = libsim$(LIBEXT)
wantarg     = libcolyseus-wan$(LIBEXT)
wanarchivetarg = libcolyseus-wan.a
simarchivetarg = libcolyseus-sim.a

onlysim: $(onlysimtarg)
sim: $(simtarg)
wan: $(wantarg)
wan-archive: $(wanarchivetarg)
sim-archive: $(simarchivetarg)

precompile:
ifeq ($(RELEASE),release)
	@-rm -f $(verobjs)
endif

version: precompile $(verobjs)

###############################################################################
$(simarchivetarg) $(simtarg): $(version) $(coreobjs) $(simobjs)
$(onlysimtarg): $(version) $(simobjs)
$(wanarchivetarg) $(wantarg): $(version) $(coreobjs) $(wanobjs)

## why is this here?
# $(APPDIRS): $(TARGETS)

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

clean: $(SUBDIRS) $(APPDIRS) 

doc: doxygen/doxygen.conf doxygen/doxygen.css $(coresrcs)
	doxygen doxygen/doxygen.conf

include botrules.make
