#-*- Mode: Makefile -*- ONLINEDETECTORNAME:=$(firstword $(subst -, ,$(subst -clean,,$(subst -rpm,,$(subst daqDA-,,$(filter daqDA-% daqDA-%-rpm daqDA-%-clean,$(MAKECMDGOALS))))))) DAMODULE:=$(subst SPD,ITS,$(subst SDD,ITS,$(subst SSD,ITS,$(subst HMP,HMPID,$(subst PHS,PHOS,$(subst CPV,PHOS,$(subst MCH,MUON,$(subst MTR,MUON,$(subst T00,T0,$(subst V00,VZERO,$(subst ACO,ACORDE,$(subst EMC,EMCAL,$(ONLINEDETECTORNAME))))))))))))) ifeq ($(ONLINEDETECTORNAME),SPD) SUBDAMODULE:=SPD else ifeq ($(ONLINEDETECTORNAME),SDD) SUBDAMODULE:=SDD else ifeq ($(ONLINEDETECTORNAME),SSD) SUBDAMODULE:=SSD else ifeq ($(ONLINEDETECTORNAME),CPV) SUBDAMODULE:=CPV else ifeq ($(ONLINEDETECTORNAME),MCH) SUBDAMODULE:=TRK else ifeq ($(ONLINEDETECTORNAME),MTR) SUBDAMODULE:=TRG endif endif endif endif endif endif DANAME=$(word 2,$(subst -, ,$(subst -clean,,$(subst -rpm,,$(subst daqDA-,,$(filter daqDA-% daqDA-%-rpm daqDA-%-clean,$(MAKECMDGOALS))))))) ifneq ($(DANAME),) DATARGETNAME:=daqDA-$(ONLINEDETECTORNAME)-$(DANAME) ifeq ($(DANAME),NONAME) DANAME:= endif ifneq ($(findstring $(DAMODULE),$(MODULES)),) CXXFLAGS:=$(filter-out -pedantic-errors,$(CXXFLAGS)) CXXFLAGS+=-I${ALICE_ROOT}/RAW CXXFLAGS+=-I${ALICE_ROOT}/$(DAMODULE) CXXFLAGS+=$(addprefix -I,$(filter-out %tgt_${ALICE_TARGET},$(filter-out %CVS,$(patsubst %/,%,$(shell ls -d ${ALICE_ROOT}/$(DAMODULE)/*/))))) DATARGETDIR=${DAMODULE}/tgt_${ALICE_TARGET} DASRC=${DAMODULE}/${DAMODULE}$(SUBDAMODULE)${DANAME}da.cxx DAOBJ=${DATARGETDIR}/${DAMODULE}$(SUBDAMODULE)${DANAME}da.o DADEP=${DATARGETDIR}/${DAMODULE}$(SUBDAMODULE)${DANAME}da.d DALIB=${ALICE_ROOT}/lib/tgt_${ALICE_TARGET}/lib${DAMODULE}$(SUBDAMODULE)${DANAME}DA.a DAEXE=${ALICE_ROOT}/bin/tgt_${ALICE_TARGET}/${DAMODULE}$(SUBDAMODULE)${DANAME}da.exe DAVERSION=$(firstword $(shell cvs status $(DASRC) | grep "Working revision:" | cut -d: -f2 )) DAROOTRELEASE=$(subst /,.,$(shell root-config --version)) DAALIROOTRELEASE=$(subst -,.,$(firstword $(shell cvs status $(DASRC) | grep "Sticky Tag:" | cut -d: -f2 ))) ifeq ($(DAALIROOTRELEASE),(none)) DAALIROOTRELEASE:="HEAD_"$(subst -,.,$(shell date --iso-8601)) endif DAARCNAME=$(patsubst %-,%,daqDA-${ONLINEDETECTORNAME}-${DANAME}) DAARC=$(DAARCNAME)-$(DAVERSION) DATAR=${DATARGETDIR}/$(DAARC).src.tar.gz DASPECFILE=${DATARGETDIR}/$(DAMODULE)$(SUBDAMODULE)$(DANAME)da.spec DAMAKEFILE=${DATARGETDIR}/${DAMODULE}$(SUBDAMODULE)${DANAME}da.make ifeq ($(DAQDALIB_PATH),) DAQDADIR=${ALICE}/daqDAlib else DAQDADIR=${DAQDALIB_PATH} endif DAQDALIB=$(DAQDADIR)/libdaqDA.a ROOTLIBDIR=$(shell root-config --libdir) SYSLIBS=-ldl -lpthread MONITORLIBS=$(shell date-config --monitorlibs=noshift) ALIROOTALIBS=$(RAWDatabaseALIB) $(RAWDatarecALIB) $(RAWDatasimALIB) $(STEERBaseALIB) $(STEERALIB) $(CDBALIB) $(ESDALIB) $(AODALIB) ALIROOTALIBS+=$($(DAMODULE)ALIBS) EXTRAROOTLIB=${ALICE_ROOT}/lib/tgt_${ALICE_TARGET}/libRootExtra.a EXTRADAMODULE:=$(firstword $(subst /,,$(subst $(ALICE_ROOT),,$(filter-out $(ALICE_ROOT)/STEER/ $(ALICE_ROOT)/RAW/ $(ALICE_ROOT)/$(DAMODULE)% $(ALICE_ROOT)/include/,$(sort $(dir $(filter $(ALICE_ROOT)%,$(filter-out %.o:,$(filter-out %.cxx,$(filter-out \,$(shell if [ -f "${DADEP}" ]; then cat $(DADEP); fi))))))))))) ifneq ($(EXTRADAMODULE),) CXXFLAGS+=-I${ALICE_ROOT}/$(EXTRADAMODULE) CXXFLAGS+=$(addprefix -I,$(filter-out %tgt_${ALICE_TARGET},$(filter-out %CVS,$(patsubst %/,%,$(shell ls -d ${ALICE_ROOT}/$(EXTRADAMODULE)/*/))))) ALIROOTALIBS+=$($(EXTRADAMODULE)ALIBS) endif DACONTACT=$(sort $(shell grep -i "Contact:" $(DASRC) | cut -d':' -f2)) DALINKPAGE=$(sort $(shell grep -i "Link:" $(DASRC) | cut -d':' -f2)) DARUNTYPE=$(sort $(shell grep -i "Run Type:" $(DASRC) | cut -d':' -f2)) DATYPE=$(sort $(shell grep -i "DA Type:" $(DASRC) | cut -d':' -f2)) DANUMBEROFEVENTS=$(sort $(shell grep -i "Number of events needed:" $(DASRC) | cut -d':' -f2)) DAINPUTFILES=$(sort $(shell grep -i "Input Files:" $(DASRC) | cut -d':' -f2)) DAOUTPUTFILES=$(sort $(shell grep -i "Output Files:" $(DASRC) | cut -d':' -f2)) DATRIGGERTYPE=$(sort $(shell grep -i "Trigger types used:" $(DASRC) | cut -d':' -f2)) $(DATARGETNAME): $(DAEXE) $(DAEXE): $(DAOBJ) $(LIBPATH) $(DALIB) $(DAQDALIB) $(EXTRAROOTLIB) @echo "***** Making executable $(DAEXE) *****" $(MUTE)$(LD) $(LDFLAGS) -o $@ $< \ $(DALIB) \ $(EXTRAROOTLIB) \ $(ROOTLIBDIR)/libRoot.a \ $(ROOTLIBDIR)/libfreetype.a $(ROOTLIBDIR)/libpcre.a \ $(DAQDALIB) $(MONITORLIBS) \ $(SYSLIBS) $(DAOBJ): $(DASRC) $(DAQDADIR) $(DADEP) $(DATARGETDIR) @echo "***** Compiling $(DASRC) *****" $(MUTE)$(CXX) -c $(CXXFLAGS) -I$(DAQDADIR) $< -o $@ $(DADEP): $(DASRC) $(DAQDADIR) $(DATARGETDIR) @echo "***** Making detector-algorithm dependencies $(DADEP) *****" $(MUTE)$(CPP) -MM $(CXXFLAGS) $(addprefix -I$(ALICE_ROOT)/,$(MODULES)) -I$(DAQDADIR) $< > $@ -include $(DADEP) $(DATARGETDIR): $(MUTE)if [ ! -d '$@' ]; then echo "***** Making directory $@ *****"; mkdir -p $@; fi $(DALIB): $(ALIROOTALIBS) @echo "***** Linking static library $(DALIB) *****" $(MUTE)rm -rf $@ $(MUTE)rm -rf junk $(MUTE)mkdir junk && cd junk && $(addprefix $(AR) x ../,$(addsuffix &&,$^)) $(AR) r $@ *.o && cd .. && rm -rf junk $(EXTRAROOTLIB): $(LIBPATH) $(MUTE)$(AR) r $@ `ls ${ROOTSYS}/vmc/src/*.o ${ROOTSYS}/treeplayer/src/*.o` $(DATARGETNAME)-clean: @echo "***** Cleaning $(DAMODULE)$(SUBDAMODULE)$(DANAME) detector-algorithm *****" $(MUTE)rm -f $(DASPECFILE) $(MUTE)rm -f $(DATAR) $(MUTE)rm -f $(DAEXE) $(MUTE)rm -f $(DAOBJ) $(MUTE)rm -f $(DADEP) $(MUTE)rm -f $(DAMAKEFILE) $(MUTE)rm -f $(DALIB) $(MUTE)rm -f $(ALIROOTALIBS) $(MUTE)rm -f $(EXTRAROOTLIB) $(DAMAKEFILE): $(DATARGETDIR) $(MUTE)rm -f $(DAMAKEFILE) @echo "***** Making makefile $(DAMAKEFILE) *****" @echo "####################################################" >> $@ @echo "# Makefile for Detector Algorithm" >> $@ @echo "#" >> $@ @echo "# It is necessary to setup build environment before" >> $@ @echo "# using make:" >> $@ @echo "# - define path to daqDAlib (env. DAQDALIB_PATH)" >> $@ @echo "#" >> $@ @echo "####################################################" >> $@ @echo "" >> $@ @echo "CXX=$(CXX)" >> $@ @echo "LD=$(LD)" >> $@ @echo "" >> $@ @echo "CXXFLAGS=$(CXXFLAGS)" >> $@ @echo "LDFLAGS=$(LDFLAGS)" >> $@ @echo "" >> $@ @echo "ifeq (""$$""(DAQDALIB_PATH),)" >> $@ @echo "DAQDADIR=${ALICE}/daqDAlib" >> $@ @echo "else" >> $@ @echo "DAQDADIR=""$$""(DAQDALIB_PATH)" >> $@ @echo "endif" >> $@ @echo "" >> $@ @echo "DAQDALIB=""$$""(DAQDADIR)/libdaqDA.a" >> $@ @echo "MONITORLIBS=""$$""(shell date-config --monitorlibs=noshift)" >> $@ @echo "" >> $@ @echo "${DAMODULE}${SUBDAMODULE}${DANAME}da.exe: ${DAMODULE}${SUBDAMODULE}${DANAME}da.o" >> $@ @echo " ""$$""(LD) ""$$""(LDFLAGS) -o ""$$""@ ""$$""< \\" >> $@ @echo " $(DALIB) \\" >> $@ @echo " $(EXTRAROOTLIB) \\" >> $@ @echo " ""$$""(ROOTSYS)/lib/libRoot.a \\" >> $@ @echo " ""$$""(ROOTSYS)/lib/libfreetype.a ""$$""(ROOTSYS)/lib/libpcre.a \\" >> $@ @echo " ""$$""(DAQDALIB) ""$$""(MONITORLIBS) \\" >> $@ @echo " $(SYSLIBS)" >> $@ @echo "" >> $@ @echo "${DAMODULE}${SUBDAMODULE}${DANAME}da.o: ${DAMODULE}${SUBDAMODULE}${DANAME}da.cxx" >> $@ @echo " ""$$""(CXX) -c ""$$""(CXXFLAGS) -I""$$""(DAQDADIR) ""$$""< -o ""$$""@" >> $@ @echo "" >> $@ @echo "clean:" >> $@ @echo " @rm -f ${DAMODULE}${SUBDAMODULE}${DANAME}da.exe ${DAMODULE}${SUBDAMODULE}${DANAME}da.o" >> $@ @echo "" >> $@ @echo "install: ${DAMODULE}${SUBDAMODULE}${DANAME}da.exe" >> $@ @echo " @if [ '""$$""(INSTALL_PATH)' == '' ]; then \\" >> $@ @echo " echo Environment variable INSTALL_PATH undefined, cannot continue; \\" >> $@ @echo " exit 1; \\" >> $@ @echo " fi" >> $@ @echo " @cp -p ${DAMODULE}${SUBDAMODULE}${DANAME}da.exe ""$$""(INSTALL_PATH)" >> $@ $(DATAR): $(DASRC) $(DAMAKEFILE) $(DASPECFILE) @echo "***** Making archive $(DATAR) *****" $(MUTE)rm -rf $(DATAR) $(MUTE)rm -rf junk $(MUTE)mkdir junk && mkdir junk/$(DAARC) && \ cp -a $(DASRC) junk/$(DAARC) && \ cp -a $(DAMAKEFILE) junk/$(DAARC)/Makefile && \ cp -a $(DASPECFILE) junk/$(DAARC)/$(DAMODULE)${SUBDAMODULE}$(DANAME)da.spec && \ cd junk && \ tar czf ../$(DATAR) * && \ cd .. && rm -rf junk $(DASPECFILE): $(DATARGETDIR) $(MUTE)rm -f $(DASPECFILE) @echo "***** Making RPM spec-file $(DASPECFILE) *****" @echo "# RPM specfile for $(DAMODULE)${SUBDAMODULE}$(DANAME) Detector Algorithm" >> $@ @echo "Summary: $(ONLINEDETECTORNAME) Detector Algorithm" >> $@ @echo "Name: $(DAARCNAME)" >> $@ @echo "Version: $(DAVERSION)" >> $@ @echo "Release: $(DAALIROOTRELEASE)" >> $@ @echo "Copyright: CERN Alice DAQ/Offine" >> $@ @echo "Source: %{name}-%{version}.src.tar.gz" >> $@ @echo "Group: Applications/Alice" >> $@ @echo "Prefix: /opt/%{name}" >> $@ @echo "BuildRoot: %{_tmppath}/%{name}-root" >> $@ @echo "" >> $@ @echo "# automatic dependencies" >> $@ @echo "AutoReqProv: yes" >> $@ @echo "" >> $@ @echo "# list here required RPM packages for compilation" >> $@ @echo "BuildRequires: date" >> $@ @echo "" >> $@ @echo "# list here required RPM packages for runtime" >> $@ @echo "Requires: date" >> $@ @echo "" >> $@ @echo "# You can specify other dependencies in the description tag below." >> $@ @echo "" >> $@ @echo "# description of the package" >> $@ @echo "%description" >> $@ @echo "This is the $(ONLINEDETECTORNAME) $(DANAME) DA for online calibration." >> $@ @echo "It uses data from $(DAMODULE) and $(EXTRADAMODULE) detectors at run time." >> $@ @echo "Build requires: daqDAlib, date, AliRoot $(DAALIROOTRELEASE), ROOT $(DAROOTRELEASE)." >> $@ @echo "Runtime requires: date." >> $@ @echo "Contact: $(DACONTACT)" >> $@ @echo "Link: $(DALINKPAGE)" >> $@ @echo "Run type: $(DARUNTYPE)" >> $@ @echo "DA type: $(DATYPE)" >> $@ @echo "Number of events needed: $(DANUMBEROFEVENTS)" >> $@ @echo "Input files: $(DAINPUTFILES)" >> $@ @echo "Output files: $(DAOUTPUTFILES)" >> $@ @echo "Trigger types used: $(DATRIGGERTYPE)" >> $@ @echo "" >> $@ @echo "#################################################################" >> $@ @echo "# Do not modify following scripts" >> $@ @echo "#################################################################" >> $@ @echo "" >> $@ @echo "# here is defined the installation root directory" >> $@ @echo "%define pkgname %{name}-%{version}" >> $@ @echo "%define destdir %{prefix}" >> $@ @echo "" >> $@ @echo "# pre-compilation script: extract from tarball" >> $@ @echo "%prep" >> $@ @echo "# extract archive" >> $@ @echo "%setup -n %{pkgname}" >> $@ @echo "" >> $@ @echo "# compile" >> $@ @echo "%build" >> $@ @echo "export DATE_SITE=" >> $@ @echo ". /date/setup.sh" >> $@ @echo "gmake" >> $@ @echo "" >> $@ @echo "# install runtime files" >> $@ @echo "%install" >> $@ @echo "#remove install dir if existing" >> $@ @echo "[ -d ""$$""RPM_BUILD_ROOT ] && rm -rf ""$$""RPM_BUILD_ROOT" >> $@ @echo "#make install in install root directory" >> $@ @echo "mkdir -p ""$$""RPM_BUILD_ROOT/%{prefix}" >> $@ @echo "make install INSTALL_PATH=""$$""RPM_BUILD_ROOT/%{prefix}" >> $@ @echo "" >> $@ @echo "# clean RPM build files" >> $@ @echo "%clean" >> $@ @echo "# remove installed files" >> $@ @echo "rm -rf ""$$""RPM_BUILD_ROOT" >> $@ @echo "# remove source files" >> $@ @echo "rm -rf ""$$""RPM_BUILD_DIR/%{pkgname}" >> $@ @echo "" >> $@ @echo "# pre-install script" >> $@ @echo "%pre" >> $@ @echo "" >> $@ @echo "# list of files to be installed" >> $@ @echo "%files" >> $@ @echo "%defattr (-,root,root)" >> $@ @echo "%{destdir}" >> $@ @echo "" >> $@ @echo "# post-install script" >> $@ @echo "# launched after rpm installed" >> $@ @echo "%post" >> $@ @echo "" >> $@ @echo "# post-uninstall script" >> $@ @echo "# launched after rpm removed" >> $@ @echo "%postun" >> $@ $(DATARGETNAME)-rpm: $(DATAR) $(DASPECFILE) $(DALIB) $(DADEP) $(EXTRAROOTLIB) @echo "***** Making RPMS for $(DAMODULE)$(SUBDAMODULE)$(DANAME) detector-algorithm *****" $(MUTE)rm -rf junk $(MUTE)mkdir -p junk/SOURCES junk/SPECS junk/BUILD junk/RPMS junk/SRPMS $(MUTE)cp $(DATAR) junk/SOURCES $(MUTE)rpmbuild --quiet --define "_topdir $(ALICE_ROOT)/junk" --nodeps -bb $(DASPECFILE) $(MUTE)find junk/ -name "$(DAARC)-*.rpm" -exec cp -p {} . \; $(MUTE)rm -rf junk @echo "***** RPMS created and put $(ALICE_ROOT) folder *****" else $(DATARGETNAME): $(DATARGETNAME)-clean $(DATARGETNAME)-clean: $(DATARGETNAME)-rpm $(DATARGETNAME)-rpm: @echo @echo "*******************************************************************************************************" @echo "* In order to build a detector-algorithm package you have run AliRoot make with the following syntax: *" @echo "* For example: make daqDA-TPC (compiles and link all the TPC DAs and produces the corresponding DA *" @echo "* executables) *" @echo "* make daqDA-MCH (MCH is the online code for MUON TRK detector. *" @echo "* this target will compile and link MUON/MUONTRKda.cxx and will *" @echo "* produce MUONTRKda.exe) *" @echo "* In case you want to build the corresponding DA binary RPM, you have to add -rpm to your target name,*" @echo "* for example: *" @echo "* make daqDA-TOF-rpm (compiles, links TOF/TOFda.cxx and builds the TOF DA binary RPM) *" @echo "* make daqDA-SPD-rpm (compiles, link ITS/ITSSPDda.cxx and builds ITS SPD DA binary RPM) *" @echo "* For more details about the DA targets, please refer to: *" @echo "* http://aliceinfo.cern.ch/static/people/cheshkov/da-packaging/ *" @echo "*******************************************************************************************************" @echo endif else ifneq ($(findstring $(DAMODULE),$(MODULES)),) DAMODULEALLTARGETS:=$(notdir $(wildcard $(DAMODULE)/$(DAMODULE)$(SUBDAMODULE)*da.cxx)) daqDA-$(ONLINEDETECTORNAME): $(DAMODULEALLTARGETS) @echo "***** All available detector-algorithms for $(ONLINEDETECTORNAME) have been built *****" %da.cxx: $(MUTE)make $(patsubst %-,%-NONAME,$(addprefix daqDA-,$(subst $(DAMODULE)$(SUBDAMODULE),$(ONLINEDETECTORNAME)-,$(subst da.cxx,,$@)))) daqDA-$(ONLINEDETECTORNAME)-rpm: $(addsuffix -rpm,$(DAMODULEALLTARGETS)) @echo "***** All available detector-algorithm RPMs for $(ONLINEDETECTORNAME) have been built *****" %da.cxx-rpm: $(MUTE)make $(subst --,-NONAME-,$(addsuffix -rpm,$(addprefix daqDA-,$(subst $(DAMODULE)$(SUBDAMODULE),$(ONLINEDETECTORNAME)-,$(subst da.cxx-rpm,,$@))))) daqDA-$(ONLINEDETECTORNAME)-clean: $(addsuffix -clean,$(DAMODULEALLTARGETS)) @echo "***** All available detector-algorithms for $(ONLINEDETECTORNAME) have been cleaned *****" %da.cxx-clean: $(MUTE)make $(subst --,-NONAME-,$(addsuffix -clean,$(addprefix daqDA-,$(subst $(DAMODULE)$(SUBDAMODULE),$(ONLINEDETECTORNAME)-,$(subst da.cxx-clean,,$@))))) else daqDA-$(ONLINEDETECTORNAME): daqDA-$(ONLINEDETECTORNAME)-rpm daqDA-$(ONLINEDETECTORNAME)-rpm: daqDA-$(ONLINEDETECTORNAME)-clean daqDA-$(ONLINEDETECTORNAME)-clean: @echo @echo "=========================================================================================================================" @echo " $(ONLINEDETECTORNAME) is not a valid online detector code. " @echo " The list of the valid codes is SPD SDD SSD TPC TRD TOF HMP PHS CPV PMD MCH MTR FMD T00 V00 ZDC ACO TRI EMC HLT TST GRP " @echo "=========================================================================================================================" @echo endif endif