# emacs, this is a -*- Makefile -*-
include ../MakefileCommonOpt

NAME = FastJet

# Check if user specified fastjet installation
ifndef FASTJETDIR
# if not use default shipped with SpartyJet
FASTJETDIR = $(shell pwd)/fastjet_build/
CHKDIR =
else
# Make sure user-specified dir exists
CHKDIR = checkdir
endif

FASTJETINC = $(FASTJETDIR)/include/
FASTJETLIB = $(FASTJETDIR)/lib/

CSUFF = cc
HSUFF = hh

INCLUDE += $(ROOTCFLAGS) -I$(FASTJETINC)  -I../

LIBDIR  = libs
HEADERS = $(wildcard *.$(HSUFF))
SRCS 		= $(wildcard *.$(CSUFF))
OBJS 		= $(patsubst %.$(CSUFF),$(LIBDIR)/%.o,$(SRCS))
DICT 		= $(LIBDIR)/$(NAME)Dict.o
DYNLIB	= ../libs/lib$(NAME).so
PLUGINHEADERS = UserPlugins/include/fastjet
PLUGINLIBDIR 	= UserPlugins/lib
EXAMPLEPLUGIN = UserPlugins/ExamplePlugin

.PHONY : $(EXAMPLEPLUGIN)

all : $(LIBDIR)  $(DYNLIB) $(EXAMPLEPLUGIN)

$(LIBDIR) :
	@mkdir $(LIBDIR)

$(DYNLIB): $(FASTJETDIR) $(OBJS) $(DICT)
	@echo "Building shared object library: ../libs/$@"
	@cd $(LIBDIR) && for f in `ls $(FASTJETLIB)/*.a` `ls ../$(PLUGINLIBDIR)/*.a 2> /dev/null`; do ar x $$f; done
	@$(LD) $(SOFLAGS) $(LDFLAGS) `ls $(LIBDIR)/*.o`  $(OutPutOpt) $@ $(EXPLLINKLIBS)
	@echo "$@ done"

$(EXAMPLEPLUGIN) :
	@make -C $(EXAMPLEPLUGIN)

$(NAME)Dict.cpp: $(HEADERS) $(NAME)LinkDef.hpp
	@echo "Generating dictionary: $@"
	@rootcint -f $@ -c -p $(INCLUDE) $(FASTJETINC)fastjet/internal/BasicRandom.hh $(FASTJETINC)fastjet/JetDefinition.hh `ls $(FASTJETINC)fastjet/*Plugin.hh` `ls $(PLUGINHEADERS)/*.h* 2> /dev/null` $^
	@echo "$@ done"

$(DICT): $(NAME)Dict.cpp
	$(CXX) $(CXXFLAGS) $(INCLUDE) -c $^ -o $@

$(LIBDIR)/%.o : %.$(CSUFF)
	$(CXX) $(CXXFLAGS) $(INCLUDE) -c $< -o $@

clean:
	rm -f *.o *Dict.*
	rm -rf $(LIBDIR) 
	rm -f ../$(LIBDIR)/$(DYNLIB)
	make -C $(EXAMPLEPLUGIN) clean 

# '|' means do CHKDIR before doing FASTJETDIR, but it's not a "real" prereq.
#   Otherwise this is always run!
$(FASTJETDIR):| $(CHKDIR)
	@echo "Unpacking fastjet in"
	@tar -xvzf fastjet-2.4.1.tar.gz
	@echo "Compiling fastjet:"
	@cd fastjet-2.4.1 && ./configure --enable-allcxxplugins --with-pic --prefix=$(FASTJETDIR) && make && make install
	@cd ..
	@echo "Fastjet install complete"

checkdir:
	@if test ! -d $(FASTJETDIR); then echo "FastJet directory missing: $(FASTJETDIR)"; exit 2; fi

