include Makefile.inc

ifeq "ghc" "$(findstring ghc, ${HC})"
HMAKEFLAGS = -fglasgow-exts -package lang -package util -DUSE_READLINE=1
else
HMAKEFLAGS = +CTS -H8M -CTS	# -K10M
endif

OBJDIR	= ${BUILDDIR}/${OBJ}/hattools
DEST	= $(LIBDIR)/$(MACHINE)

MALCLIBS = pathutils.c artutils.c hat-names.c observeutils.c
THORLIBS = detect.c hashtable.c

MALCOBJS = $(patsubst %.c,$(OBJDIR)/%.o,$(MALCLIBS))
THOROBJS = $(patsubst %.c,$(OBJDIR)/%.o,$(THORLIBS))


PROGNAMES = hat-check hat-stack hat-view hat-trail hat-observe
#           hat-detect hat-checki hat-names
PROGS = $(patsubst %, $(DEST)/%, $(PROGNAMES))

all: $(OBJDIR) $(PROGS)
install: $(OBJDIR) $(PROGS)
objdir: $(OBJDIR)
objs: $(MALCOBJS) $(THOROBJS) $(patsubst %, %.o, $(PROGS))
clean:
	rm -f $(MALCOBJS) $(THOROBJS)
realclean: clean
	rm -f $(PROGS)
$(OBJDIR):
	mkdir -p $(OBJDIR)

VERSIONING = -DVERSION="\"$(HATVERSION)\""

# Malcolm's libraries and tools
$(MALCOBJS) : $(OBJDIR)/%.o : %.c
	$(CC) $(OPT) -I$(INCDIR) $(VERSIONING) -c $< -o $@ \
		`glib-config --cflags`
$(OBJDIR)/artutils.o: artutils.h pathutils.h
$(OBJDIR)/observeutils.o: artutils.h observeutils.h
$(OBJDIR)/hat-names.o: artutils.h
$(DEST)/hat-stack: hat-stack.c artutils.h $(MALCOBJS)
	$(CC) $(OPT) -I$(INCDIR) hat-stack.c $(MALCOBJS) \
		-o $(DEST)/hat-stack `glib-config --libs`
$(DEST)/hat-trail: HatTrail.hs LowLevel.hs SExp.hs PrettyLibHighlight.hs \
			HighlightStyle.hs Run.hs FFIExtensions.hs \
			$(MALCOBJS)
	hmake -hc=$(HC) $(HMAKEFLAGS) HatTrail $(MALCOBJS) \
		-d$(OBJDIR) $(shell echo $(LIBCOMPAT)) \
		`glib-config --libs`
	mv $(OBJDIR)/HatTrail$(EXE) $(DEST)/hat-trail$(EXE)

$(DEST)/hat-view: SrcRefViewer.hs HighlightStyle.hs Run.hs
	hmake -hc=$(HC) $(HMAKEFLAGS) SrcRefViewer \
		-d$(OBJDIR) $(shell echo $(LIBCOMPAT))
	mv $(OBJDIR)/SrcRefViewer$(EXE) $(DEST)/hat-view$(EXE)
$(DEST)/hat-observe: HatObserve.hs Observe.hs LowLevel.hs SExp.hs Ident.hs \
			PrettyLibHighlight.hs HighlightStyle.hs Run.hs \
			FFIExtensions.hs Pattern.hs ParseLib.hs \
			CmdLine.hs $(MALCOBJS)
	hmake -hc=$(HC) $(HMAKEFLAGS) HatObserve \
		$(MALCOBJS) -d$(OBJDIR) \
		`glib-config --libs` $(shell echo $(LIBCOMPAT))
	mv $(OBJDIR)/HatObserve$(EXE) $(DEST)/hat-observe$(EXE)


# Colin's libraries and tools
$(DEST)/hat-check: hat-check.c
	$(CC) hat-check.c -o $(DEST)/hat-check -I$(INCDIR) $(VERSIONING) \
		$(shell echo $(LIBCOMPAT))


# Thorsten's libraries and tools
$(THOROBJS) : $(OBJDIR)/%.o : %.c
	$(CC) -c -o $@ $<

$(OBJDIR)/hashtable.o: hashtable.h
$(OBJDIR)/detect.o : detect.h FunTable.h hatinterface.h Expressions.h nodelist.h hashtable.h


# Thorsten's haskell tools
#$(DEST)/hat-observe: HatObserve.hs HatTrie.hs HatTrace.gc HatExpressionTree.hs PrettyExp.hs PrettyLib.hs $(OBJDIR)/hatlib.a
#	$(HMAKE) -hc=$(LOCAL)nhc98 -K10M +CTS -H20M -CTS HatObserve \
#		$(OBJDIR)/hatlib.a -d$(OBJDIR) $(shell echo $(LIBCOMPAT))
#	mv $(OBJDIR)/HatObserve$(EXE) $(DEST)/hat-observe$(EXE)
#
#$(DEST)/hat-detect: HatDetect.hs HatTrie.hs HatTrace.gc HatExpressionTree.hs PrettyExp.hs PrettyLib.hs $(OBJDIR)/hatlib.a
#	$(HMAKE) -hc=$(LOCAL)nhc98 -K10M +CTS -H20M -CTS HatDetect \
#		$(OBJDIR)/hatlib.a -d$(OBJDIR) $(shell echo $(LIBCOMPAT))
#	mv $(OBJDIR)/HatDetect$(EXE) $(DEST)/hat-detect$(EXE)

