# 
# Makefile for libdi194 and gtkdaq
# Paul Hubbard hubbard@mcs.anl.gov
# Re-write 4/12/02

DISTNAME = dataq-194

CC = cc
CFLAGS = -g -Wall

# Target library
DILIB = libdi194.a
DILIB_BASENAME = di194
LDFLAGS = -g
LOADLIBS = -L. -l$(DILIB_BASENAME)

LIB_SRC = di194.c
LIB_OBJ = di194.o
LIB_INC = di194.h di194-internal.h

# Target: GTK app
GTK_APP = gtkdaq
GTK_SRC = gtkdaq.c
GTK_OBJ = gtkdaq.o

# Target: data source app
SRV_APP = di_source
SRV_SRC = di_source.c
SRV_OBJ = di_source.o

# Target: temp daemon app
TMP_APP = di_tempd
TMP_SRC = di_tempd.c
TMP_OBJ = di_tempd.o

# Use gtk-config to get local required flags
GTK_LIBS = $(shell gtk-config --libs) -lgtkdatabox
GTK_FLAGS = $(shell gtk-config --cflags)

# Target: cmdline app
TST_APP = di_test
TST_SRC = di_test.c
TST_OBJ = di_test.o

# Targe - basic DAQ tester
SPL_APP = di_simplest
SPL_SRC = di_simplest.c
SPL_OBJ = di_simplest.o

# Emacs source code browser/db
etags = TAGS

# Hold-all 
source = $(LIB_SRC) $(TST_SRC) $(SRV_SRC) $(SPL_SRC)

# Default target skips doxygen, temp daemon and gtkdaq

# Make targets
usual: $(DILIB) $(TST_APP) $(SRV_APP) $(SPL_APP) $(etags)
all: $(DILIB) $(TST_APP) $(SRV_APP) $(SPL_APP) $(etags) $(GTK_APP) doxygen 

# General compliation rule
.c.o:	$(source)
	$(CC) -c $(CFLAGS) $< 

# Library build rule
$(DILIB): $(LIB_OBJ)
	ar r $(DILIB) $(LIB_OBJ)
	ranlib $(DILIB)

# Test app, cmdline
$(TST_APP): $(DILIB) $(TST_OBJ)
	$(CC) $(LDFLAGS) $(TST_OBJ) $(LOADLIBS) -o $(TST_APP)

# Test app, simplest
$(SPL_APP): $(DILIB) $(SPL_OBJ)
	$(CC) $(LDFLAGS) $(SPL_OBJ) $(LOADLIBS) -o $(SPL_APP)

# gtk app
$(GTK_APP): $(DILIB) $(GTK_SRC)
	$(CC) -c $(CFLAGS) $(GTK_FLAGS) $(GTK_SRC)
	$(CC) -o $(GTK_APP) $(GTK_OBJ) $(GTK_LIBS) $(LDFLAGS) $(LOADLIBS)

# Server/source app
$(SRV_APP): $(DILIB) $(SRV_OBJ)
	$(CC) $(LDFLAGS) $(SRV_OBJ) $(LOADLIBS) -o $(SRV_APP)

# Temp daemon app
$(TMP_APP): $(DILIB) $(TMP_OBJ)
	$(CC) $(LDFLAGS) $(TMP_OBJ) $(LOADLIBS) -o $(TMP_APP)

clean:
	-rm -f $(objs) $(etags) $(GTK_APP)\
	 $(TST_APP) $(DILIB) $(GTK_OBJ) $(LIB_OBJ) $(TST_OBJ)\
	$(SRV_OBJ) $(SRV_APP) $(TMP_APP) $(TMP_OBJ) $(SPL_APP) $(SPL_OBJ)

# Etags build rule
$(etags):	$(source) $(LIB_INC)
	-etags $(INCLUDES) $(source) $(LIB_INC)

# Doxygen docs - see also Doxyfile
doxygen: $(source)
	-doxygen

dist:
	mkdir ../$(DISTNAME)-self
	cp -R * ../$(DISTNAME)-self
	mv ../$(DISTNAME)-self ./$(DISTNAME)
	cd $(DISTNAME) && rm -rf `find -name CVS`
	tar cvzf $(DISTNAME).tar.gz $(DISTNAME)
	rm -rf $(DISTNAME)
