# $Id: Makefile 1268 2006-07-15 09:03:48Z holger $

PLATFORM = unix

CXX = g++
CPP = $(CXX) -E
INSTALL = /usr/bin/install

INCLUDE =
LIBPATH =


CXXFLAGS = -W -Wall
LDFLAGS  = 


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

-include Makefile.local

#PLATFORM = unix

BUILDDIR = .build-$(PLATFORM)
DEPSDIR = $(BUILDDIR)

SOURCES = $(wildcard *.cc) 
HEADERS = $(wildcard *.h)
OBJS = $(patsubst %.cc,%.o,$(SOURCES))
BUILDDIR_OBJS = $(foreach f,$(OBJS),$(BUILDDIR)/$(f))


#
# Platform-specific stuff
#

ifeq ($(PLATFORM),unix)
override CXXFLAGS += -DHAVE_PTHREAD
LIBS += -lpthread
BIN = $(BUILDDIR)/hoichess
endif

ifeq ($(PLATFORM),mingw32)
override INCLUDE += -Iwin32 -Ilib
SOURCES += $(wildcard lib/*.cc win32/*.cc)
HEADERS += $(wildcard lib/*.h win32/*.h)
BIN = $(BUILDDIR)/hoichess.exe
endif

#
# Feature configurations
#

ifdef HAVE_READLINE
override CXXFLAGS += -DHAVE_READLINE
LIBS += -lreadline
endif

#
# OS-specific stuff
# 

ifeq ($(shell uname -s),SunOS)
override INCLUDE += -Ilib
SOURCES += lib/my_getopt.cc
endif

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

.PHONY: all
all: $(BIN)


compile.h: $(subst compile.h,,$(SOURCES) $(HEADERS))
	touch $@

debug_printconfig.h: config.h build/mk_debug_config_h.sh
	build/mk_debug_config_h.sh > $@

# link object files
$(BIN): $(BUILDDIR_OBJS)
	@mkdir -p $(dir $@)
	$(CXX) $(CXXFLAGS) $(LDFLAGS) $(LIBPATH) $(LIBS) -o $@ $^

# compile source files
$(BUILDDIR)/%.o: %.cc Makefile Makefile.local
	@mkdir -p $(dir $@)
	$(CXX) $(CXXFLAGS) $(INCLUDE) -c -o $@ $<


.PHONY: install
install: all
	$(INSTALL) -m 755 -D $(BIN) $(DESTDIR)$(bindir)/$(notdir $(BIN))


.PHONY: clean
clean:
	#rm -f $(BIN) $(OBJS)
	rm -rf $(BUILDDIR) $(DEPSDIR)

.PHONY: maintainer-clean
maintainer-clean: clean
	rm -f debug_printconfig.h
	

# Generate dependencies
$(DEPSDIR)/%.d: %.cc
	@mkdir -p $(dir $@)
	$(CPP) $(CXXFLAGS) $(INCLUDE) 	\
		-MM -MT '$(patsubst %.cc,$(BUILDDIR)/%.o,$<)' $<	\
		| sed 's,\($*\)\.o *:,\1.o $@:,g' > $@
	if [ ! -s $@ ]; then rm -f $@; fi

# Include dependencies
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),maintainer-clean)
-include $(foreach file,$(OBJS:.o=.d),$(DEPSDIR)/$(file))
endif
endif
