#!gmake
#
CC = @CC@
prefix = @prefix@
exec_prefix = @exec_prefix@
datarootdir = @datarootdir@
includedir = @includedir@
libdir = @libdir@
bindir = @bindir@
VPATH = @srcdir@:@tdbdir@:@tallocdir@:@libreplacedir@
srcdir = @srcdir@
builddir = @builddir@
EXTRA_OBJ=@EXTRA_OBJ@

CFLAGS=-g -I$(srcdir)/include -Iinclude -Ilib/util -I$(srcdir) \
       -I@tallocdir@ -I@tdbdir@/include -I@libreplacedir@ \
	-DLIBDIR=\"$(libdir)\" -DSHLIBEXT=\"@SHLIBEXT@\" -DUSE_MMAP=1 @CFLAGS@

LIB_FLAGS=@LDFLAGS@ -Llib @LIBS@ -lpopt @INFINIBAND_LIBS@

EVENTS_OBJ = lib/events/events.o lib/events/events_standard.o

CTDB_COMMON_OBJ = common/ctdb.o common/ctdb_daemon.o common/ctdb_client.o common/ctdb_io.o common/util.o common/ctdb_util.o \
	common/ctdb_call.o common/ctdb_ltdb.o common/ctdb_lockwait.o common/ctdb_message.o \
	common/cmdline.o lib/util/idtree.o lib/util/db_wrap.o lib/util/debug.o

CTDB_TCP_OBJ = tcp/tcp_connect.o tcp/tcp_io.o tcp/tcp_init.o

CTDB_OBJ = $(CTDB_COMMON_OBJ) $(CTDB_TCP_OBJ)

OBJS = @TDBOBJ@ @TALLOCOBJ@ @LIBREPLACEOBJ@ @INFINIBAND_WRAPPER_OBJ@ $(EXTRA_OBJ) $(EVENTS_OBJ) $(CTDB_OBJ)

BINS = bin/ctdbd bin/ctdbd_test bin/ctdb_test bin/ctdb_bench bin/ctdb_messaging bin/ctdb_fetch bin/ctdb_fetch1 bin/lockwait @INFINIBAND_BINS@

DIRS = lib bin

all: showflags dirs $(OBJS) $(BINS)

showflags:
	@echo 'ctdb will be compiled with flags:'
	@echo '  CFLAGS = $(CFLAGS)'
	@echo '  LIBS = $(LIBS)'

.c.o:
	@echo Compiling $*.c
	@mkdir -p `dirname $@`
	@$(CC) $(CFLAGS) -c $< -o $@

dirs:
	@mkdir -p $(DIRS)

bin/ctdb_test: $(OBJS) tests/ctdb_test.o
	@echo Linking $@
	@$(CC) $(CFLAGS) -o $@ tests/ctdb_test.o $(OBJS) $(LIB_FLAGS)

bin/ctdbd: $(OBJS) direct/ctdbd.o 
	@echo Linking $@
	@$(CC) $(CFLAGS) -o $@ direct/ctdbd.o $(OBJS) $(LIB_FLAGS)

bin/ctdbd_test: $(OBJS) direct/ctdbd_test.o
	@echo Linking $@
	@$(CC) $(CFLAGS) -o $@ direct/ctdbd_test.o 

bin/ctdb_bench: $(OBJS) tests/ctdb_bench.o 
	@echo Linking $@
	@$(CC) $(CFLAGS) -o $@ tests/ctdb_bench.o $(OBJS) $(LIB_FLAGS)

bin/ctdb_fetch: $(OBJS) tests/ctdb_fetch.o 
	@echo Linking $@
	@$(CC) $(CFLAGS) -o $@ tests/ctdb_fetch.o $(OBJS) $(LIB_FLAGS)

bin/ctdb_fetch1: $(OBJS) tests/ctdb_fetch1.o 
	@echo Linking $@
	@$(CC) $(CFLAGS) -o $@ tests/ctdb_fetch1.o $(OBJS) $(LIB_FLAGS)

bin/ctdb_messaging: $(OBJS) tests/ctdb_messaging.o 
	@echo Linking $@
	@$(CC) $(CFLAGS) -o $@ tests/ctdb_messaging.o $(OBJS) $(LIB_FLAGS)

bin/ibwrapper_test: $(OBJS) ib/ibwrapper_test.o
	@echo Linking $@
	@$(CC) $(CFLAGS) -o $@ ib/ibwrapper_test.o $(OBJS) $(LIB_FLAGS)

bin/lockwait: $(OBJS) tests/lockwait.o 
	@echo Linking $@
	@$(CC) $(CFLAGS) -o $@ tests/lockwait.o $(OBJS) $(LIB_FLAGS)

clean:
	rm -f *.o */*.o */*/*.o
	rm -f $(BINS)

distclean: clean
	rm -f *~ */*~
	rm -rf bin
	rm -f config.log config.status config.cache config.h
	rm -f Makefile

realdistclean: distclean
	rm -f configure config.h.in
