# Makefile template for ROOT dictionary generation
#
+# This is a common include file which handles generation of the ROOT dictionary
+# files. It creates:
+# - the dict.cxx (variable DICTCPP)
+# - the dict.h (variable DICTCPP:.cxx=.h)
+# - optional: the linkdef.h (variable MODULE postfixed by -LinkDef.h)
+#
+# If the MODULE_DHDR variable is set in the package definition lib<module>.pkg
+# to a custom LinkDef file, the automatic generation of the LinkDef header is
+# disabled. Instead, the specified one is used.
+#
# usage:
# 1. set variable CLASS_HDRS to the class header files
# 2. set DICTCPP variable to dictionary c++ file name
#
# Author: Matthias.Richter@ift.uib.no
#
-DICTDEF = $(MODULE)-LinkDef.h
-DICTFILES = $(DICTCPP) $(DICTCPP:.cxx=.h) $(DICTDEF)
+DICTAUTODEF = $(MODULE)-LinkDef.h
+DICTDEF = $(shell if test "x$(MODULE_DHDR)" = "x"; then echo $(DICTAUTODEF); else echo $(MODULE_DHDR); fi)
+DICTFILES = $(DICTCPP) $(DICTCPP:.cxx=.h) $(DICTAUTODEF)
DICTHEADERS = $(CLASS_HDRS)
CLEANFILES += $(DICTFILES)
+EXTRA_DIST += $(MODULE_DHDR)
+
+# the rootcint buffer for macros is limited to 1024 characters
+# we have to filter out some of the defines
+# The asterisk at the end is important even for defines which
+# are not wildcards. But otherwise the case does not pick them.
+DEFFILTER = -DPACKAGE* -DHAVE_STDLIB_H=1* -DHAVE_STRING_H=1* -DHAVE_MEMORY_H=1* -DHAVE_STRINGS_H=1* -DHAVE_INTTYPES_H=1* -DHAVE_STDINT_H=1* -DHAVE_UNISTD_H=1* -DHAVE_DLFCN_H=1* -DHAVE_NOT_ALIMAGF30848* -DHAVE_NOT_ALTRORAWSTREAMV3* -DHAVE_NOT_ALIRUNLOADER30859* -DHAVE_NOT_ESD_COPY* -DHAVE_NOT_MUON_DIGITMAKER_GETRAWSTREAM* -DHAVE_NOT_ALITPCCALIBPULSER* -DHAVE_NOT_ALIRAWREADERMEMORY_ADDBUFFER* -DHAVE_NOT_TPCOFFLINE_REC*
$(DICTCPP:.cxx=.h): $(DICTCPP)
if test $@ ; then : ; else rm -f $< ; $(MAKE) $(MAKEFLAGS) $< ; fi
$(DICTCPP): $(DICTHEADERS:%=$(srcdir)/%) $(DICTDEF)
- if [ -x $(ROOTCINT) ]; then $(ROOTCINT) -f $@ -c $(CPPFLAGS) $(AM_CPPFLAGS) $(DEFS) $(foreach i, $(DICTINCLUDE), $(i)) $^ ; fi
-$(DICTDEF): Makefile.am $(PKGDEF)
+ if [ -x $(ROOTCINT) ]; then $(ROOTCINT) -f $@ -c $(CPPFLAGS) $(AM_CPPFLAGS) \
+ `for i in $(DEFS);do case $$i in $(foreach def, $(DEFFILTER), $(def) |) -DVERSION*);; *) echo -n " $$i";; esac; done` \
+ $(foreach i, $(DICTINCLUDE), $(i)) \
+ $^ ; fi
+
+$(DICTAUTODEF): Makefile.am $(PKGDEF)
@echo '//automatically generated ROOT DICT definition' > $@
@echo '//!!! DO NOT EDIT THIS FILE !!!' >> $@
@echo '//add further class definitions to the CLASS_HDRS variable in Makefile.am' >> $@
@echo '#pragma link off all globals;' >> $@
@echo '#pragma link off all classes;' >> $@
@echo '#pragma link off all functions;' >> $@
- $(foreach i, $(DICTHEADERS:.h=), \
- echo "#pragma link C++ class "`echo $(i)| sed -e 's|.*/||'`";" >> $@ ;)
+ @$(foreach i, $(DICTHEADERS:.h=), \
+ attribute='+' ;\
+ cat $(srcdir)/$(i).cxx | grep -e $(i)::Streamer | grep TBuffer > /dev/null && attribute='-' ;\
+ echo "#pragma link C++ class "`echo $(i)| sed -e 's|.*/||'`"$$attribute;" >> $@ ;)
@echo '#endif' >> $@