include ../proc_characteristics
include ../../Source/make_opts
include ../analyse_opts

LIBDIR = ../../lib/
ANADIR = ../../FixedOrderAnalysis/

#check if fastjet-config is set
ifdef fastjet_config
    FASTJET_CONFIG = $(fastjet_config)
    CXXFLAGS += $(shell $(FASTJET_CONFIG) --cxxflags)
    FJLIBS += $(shell $(FASTJET_CONFIG) --libs --plugins ) $(STDLIB)
    fastjetfortran_madfks=fastjetfortran_madfks_full.o fastjet_wrapper.o
else
    fastjetfortran_madfks=fastjetfortran_madfks_core.o fjcore.o fastjet_wrapper.o
    FJLIBS += $(STDLIB)
endif

NLOLIBS=-L$(LIBDIR) $(libmadloop) $(libcuttools) $(libOLP)
# Uncomment the line below to compile with MadLoop without setting the environnement 
# variables 'by hand'
# NLOLIBS= -L. -lMadLoop -L$(LIBDIR) -lcts
LINKLIBS = -L$(LIBDIR) -ldhelas -lgeneric -lmodel -lpdf -lcernlib $(llhapdf)
LIBS = $(LIBDIR)libdhelas.a $(LIBDIR)libgeneric.a $(LIBDIR)libmodel.a	\
$(LIBDIR)libpdf.a $(LIBDIR)libcernlib.a

# Files for all executables
FILES= $(patsubst %.f,%.o,$(wildcard parton_lum_*.f)) $(patsubst	\
	 %.f,%.o,$(wildcard matrix_*.f)) real_me_chooser.o		\
	 fks_inc_chooser.o leshouche_inc_chooser.o genps_fks.o		\
	 setcuts.o setscales.o born.o sborn_sf.o $(patsubst		\
	 %.f,%.o,$(wildcard b_sf_???.f)) fks_Sij.o trapfpe.o		\
	 $(fastjetfortran_madfks) fks_singular.o veto_xsec.o		\
	 montecarlocounter.o reweight_xsec.o boostwdir2.o       	\
	 configs_and_props_inc_chooser.o initcluster.o cluster.o 	\
	 reweight.o get_color.o FKSParamReader.o iproc_map.o		\
	 MC_integer.o $(reweight_xsec_events_pdf_dummy)			\
	 $(applgrid_interface)

# Files needed for mintFO & mintMC
RUN= $(FO_ANALYSE) $(FILES) cuts.o pythia_unlops.o recluster.o 		\
	fill_MC_mshell.o born_hel.o open_output_files.o			\
	add_write_info.o BinothLHA.o madfks_plot.o

# Files for mintFO
MINTFO= $(RUN) driver_mintFO.o mint-integrator2.o handling_lhe_events.o

# Files for mintMC
MINTMC= $(RUN) mint-integrator2.o driver_mintMC.o write_event.o		\
	handling_lhe_events.o

# Files for check_poles
POLES= $(FILES) cuts.o pythia_unlops.o recluster.o check_poles.o	\
       BinothLHA.o born_hel.o

# Files for tests
TEST= $(FILES) BinothLHADummy.o cuts.o pythia_unlops.o recluster.o

# Files for gensym
SYM= $(FILES) BinothLHADummy.o symmetry_fks_v3.o write_ajob.o

# Files for event reweighting to get e.g. scale and PDF uncertainties
RWGFILES=reweight_xsec_events.o handling_lhe_events.o reweight_xsec.o	\
	$(patsubst %.f,%.o,$(wildcard parton_lum_*.f)) setscales.o	\
	cuts.o $(fastjetfortran_madfks) boostwdir2.o veto_xsec.o	\
	$(reweight_xsec_events_pdf_dummy) fill_MC_mshell.o cluster.o	\
	reweight.o get_color.o iproc_map.o fks_inc_chooser.o 		\
	leshouche_inc_chooser.o pythia_unlops.o recluster.o

%.o: %.f
	$(FC) $(FFLAGS) -c -I. $<
%.o: $(ANADIR)/%.f
	$(FC) $(FFLAGS) -c -I. -I$(ANADIR) $(FO_INCLUDEPATHS) $<
%.o: %.for
	$(FC) $(FFLAGS) -c -I. -I$(ANADIR) $<
%.o: $(ANADIR)/%.for
	$(FC) $(FFLAGS) -c -I. -I$(ANADIR) $(FO_INCLUDEPATHS) $<
%.o: %.c
	$(CXX) $(CFLAGS) -c -I. $^
%.o: $(ANADIR)/%.c
	$(CXX) $(CFLAGS) -c -I. -I$(ANADIR) $(FO_INCLUDEPATHS) $^
%.o: %.cc
	$(CXX) $(CXXFLAGS) -c -I. $^
%.o: $(ANADIR)/%.cc
	$(CXX) $(CXXFLAGS) -c -I. -I$(ANADIR) $(FO_INCLUDEPATHS) $^

gensym: $(SYM)
	$(FC) $(LDFLAGS) -o gensym $(SYM) $(APPLLIBS) $(LINKLIBS) $(FJLIBS)
	rm fks_singular.o
	strip gensym

test_ME: symmetry_fks_test_ME.o $(TEST)
	$(FC) $(LDFLAGS) -o test_ME symmetry_fks_test_ME.o $(TEST) $(APPLLIBS) $(LINKLIBS) $(FJLIBS)
	rm symmetry_fks_test_ME.o
	strip test_ME

test_MC: symmetry_fks_test_MC.o $(TEST) 
	$(FC) $(LDFLAGS) -o test_MC symmetry_fks_test_MC.o $(TEST) $(APPLLIBS) $(LINKLIBS) $(FJLIBS)
	rm symmetry_fks_test_MC.o
	strip test_MC

check_poles: $(POLES) $(libmadloop)
	$(FC) -o check_poles $(POLES) $(NLOLIBS) $(APPLLIBS) $(LINKLIBS) $(FJLIBS) $(LDFLAGS)
	strip check_poles

madevent_mintMC: $(MINTMC) $(libmadloop) makefile $(LIBS)
	$(FC) -o madevent_mintMC $(MINTMC) $(NLOLIBS) $(APPLLIBS) $(LINKLIBS) $(FJLIBS) $(FO_EXTRAPATHS) $(FO_EXTRALIBS) $(LDFLAGS)
	rm handling_lhe_events.o
	strip madevent_mintMC

madevent_mintFO: $(MINTFO) $(libmadloop) makefile $(LIBS)
	$(FC) -o madevent_mintFO $(MINTFO) $(NLOLIBS) $(APPLLIBS) $(LINKLIBS) $(FJLIBS) $(FO_EXTRAPATHS) $(FO_EXTRALIBS) $(LDFLAGS)
	rm handling_lhe_events.o
	strip madevent_mintFO

reweight_xsec_events: $(RWGFILES) makefile $(LIBS)
	$(FC) -o reweight_xsec_events $(RWGFILES) $(LINKLIBS) $(FJLIBS) $(LDFLAGS)
	rm handling_lhe_events.o
	strip reweight_xsec_events

libMadLoop.a:
	for dir in `ls -d V*`; do cd $$dir; make; cd ../; done

clean:
	@rm -f *.o write_ajob_basic reweight_xsec_events madevent_* check_poles\
	    test_M* gensym
	for dir in `ls -d V*`; do cd $$dir; make clean; cd ../; done

