# $Id: Makefile 1210 2006-06-09 18:58:01Z 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 $@

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

$(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)


# 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)
-include $(foreach file,$(OBJS:.o=.d),$(DEPSDIR)/$(file))
endif
