]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - build/MakefileDA
Compilation on Windows/Cygwin
[u/mrichter/AliRoot.git] / build / MakefileDA
index 5e9689b9a95048aa7e4ba9cb8dd6e3005748a4eb..f3a5acb0671d2f746eaedc789cf1a5fed63192a2 100644 (file)
 #-*- Mode: Makefile -*-
 
-ifdef DAMODULE
+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)))))))))))))
 
-CXXFLAGS+=-I${ALICE_ROOT}/RAW
+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
 
-ifneq ($(EXTRADAMODULE),) 
-CXXFLAGS+=-I${ALICE_ROOT}/$(EXTRADAMODULE)
+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
 
-DASRC=${DAMODULE}/${DAMODULE}da.cxx
-DADEP=${DAMODULE}/${DAMODULE}da.d
-DAOBJ=${DAMODULE}/tgt_${ALICE_TARGET}/${DAMODULE}da.o
-DALIB=${ALICE_ROOT}/lib/tgt_${ALICE_TARGET}/lib${DAMODULE}DA.a
-DAEXE=${ALICE_ROOT}/bin/tgt_${ALICE_TARGET}/${DAMODULE}da.exe
+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},$(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 svn info $(DASRC) | grep "Last Changed Rev:" | cut -d: -f2 ))
+
+DAROOTRELEASE=$(subst /,.,$(shell root-config --version))
 
-DAMAKEFILE=${DAMODULE}/${DAMODULE}da.make
+#DAALIROOTRELEASE=$(notdir $(subst /$(DASRC),,$(shell svn info $(DASRC) | grep "URL:" | cut -d: -f3 )))
+DAALIROOTRELEASE+=$(subst -,.,$(notdir $(subst /$(DASRC),,$(shell svn info $(DASRC) | grep "URL:" | cut -d: -f3 ))))"."$(firstword $(shell svn info $(DASRC) | grep "Revision:" | cut -d: -f2 ))
 
+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
 
+ifneq ($(shell amore-config 2>&1 |grep -i usage),)
+AMOREFLAGS = -DALI_AMORE $(shell amore-config --cflags --includes)
+CXXFLAGS  += $(AMOREFLAGS)
+CFLAGS    += $(AMOREFLAGS)
+CINTFLAGS += $(AMOREFLAGS)
+DEPINC    += $(AMOREFLAGS)
+AMOREDALIBS+=$(shell amore-config --auxlibs)
+else
+AMOREDALIBS=
+endif
+
 ROOTLIBDIR=$(shell root-config --libdir)
 
-SYSLIBS=-ldl
+SYSLIBS=-ldl -lpthread
 
 MONITORLIBS=$(shell date-config --monitorlibs=noshift)
 
-ALIROOTALIBS=$(RAWDatabaseALIB) $(RAWDatarecALIB) $(RAWDatasimALIB) $(STEERALIB) $(CDBALIB) $(ESDALIB)
+ALIROOTALIBS=$(RAWDatabaseALIB) $(RAWDatarecALIB) $(RAWDatasimALIB) $(STEERBaseALIB) $(STEERALIB) $(CDBALIB) $(ESDALIB) $(AODALIB)
 
-ALIROOTALIBS+=$($(DAMODULE)baseALIB) $($(DAMODULE)recALIB) $($(DAMODULE)simALIB)
+ALIROOTALIBS+=$($(DAMODULE)ALIBS)
 
-ifneq ($(EXTRADAMODULE),) 
+EXTRAROOTLIB=${ALICE_ROOT}/lib/tgt_${ALICE_TARGET}/libRootExtra.a
 
-ALIROOTALIBS+=$($(EXTRADAMODULE)baseALIB) $($(EXTRADAMODULE)recALIB) $($(EXTRADAMODULE)simALIB)
+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
 
-static-DA: $(DAEXE)
+DACONTACT=$(sort $(shell grep -i "Contact:" $(DASRC) | cut -d':' -f2))
+DALINKPAGE=$(sort $(subst Link:,,$(shell grep -i "Link:" $(DASRC))))
+DAREFRUN=$(sort $(shell grep -i "Reference Run:" $(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))
 
-$(DAEXE): $(LIBPATH) $(DAOBJ) $(DALIB) $(DAQDALIB)
+$(DATARGETNAME): $(DAEXE)
 
-       $(LD) $(LDFLAGS) -o $@ $(DAOBJ) $(DALIB) \
-       $(SYSLIBS) \
+$(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 \
-       $(MONITORLIBS) $(DAQDALIB)
-
-$(DAOBJ): $(DASRC) $(DAQDADIR) $(DADEP)
-       $(CXX) -c $(CXXFLAGS) -I$(DAQDADIR) $< -o $@
+       $(DAQDALIB) $(MONITORLIBS) $(AMOREDALIBS) \
+       $(SYSLIBS)
 
-$(DADEP): $(DASRC) $(DAQDADIR)
-       $(CPP) -MM $(CXXFLAGS) -I$(DAQDADIR) $< > $@
+$(DAOBJ): $(DASRC) $(DAQDADIR) $(DADEP) $(DATARGETDIR)
+       @echo "***** Compiling $(DASRC) *****"
+       $(MUTE)$(CXX) -c $(CXXFLAGS) -I$(DAQDADIR) $< -o $@
 
-DAINCLUDES=$(sort $(filter-out %.o:,$(filter-out %.cxx,$(filter-out \,$(shell cat $(DADEP))))))
+$(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)
-       @rm -rf $@
-       @rm -rf junk
-       mkdir junk && cd junk && $(addprefix $(AR) x ../,$(addsuffix &&,$^)) $(AR) r $@ *.o && cd .. && rm -rf junk
-
-clean-DA:
-       @rm -f $(DAEXE)
-       @rm -f $(DAOBJ)
-       @rm -f $(DADEP)
-       @rm -f $(DAMAKEFILE)
-       @rm -f $(DALIB)
-       @rm -f $(ALIROOTALIBS)
-
-$(DAMAKEFILE):
-       @echo "CXXFLAGS+=""$$""(shell date-config --cflags)" > $@
-       @echo "CXXFLAGS+=-Iinclude" >> $@
-       @echo "DAQDADIR=daqDAlib" >> $@
+       @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}/montecarlo/vmc/src/*.o ${ROOTSYS}/tree/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 "AMOREDALIBS=""$$""(shell amore-config --auxlibs)" >> $@
        @echo "MONITORLIBS=""$$""(shell date-config --monitorlibs=noshift)" >> $@
-       @echo "${DAMODULE}da.exe: ${DAMODULE}da.o" >> $@
-       @echo "         ""$$""(CXX) ""$$""(LDFLAGS) -o ""$$""@ ""$$""< \\" >> $@
-       @echo "         lib/lib${DAMODULE}DA.a \\" >> $@
-       @echo "         $(SYSLIBS) \\" >> $@
-       @echo "         lib/libRoot.a \\" >> $@
-       @echo "         lib/libfreetype.a lib/libpcre.a \\" >> $@
-       @echo "         ""$$""(MONITORLIBS) ""$$""(DAQDALIB)" >> $@
-       @echo "${DAMODULE}da.o: ${DAMODULE}da.cxx" >> $@
+       @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) ""$$""(AMOREDALIBS) \\" >> $@
+       @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}da.exe ${DAMODULE}da.o" >> $@
-
-tar-DA: $(DASRC) $(DALIB) $(DAQDADIR) $(DADEP) $(DAMAKEFILE)
-       @rm -rf $(DAMODULE)da.tar
-       @rm -rf junk
-       @mkdir junk && mkdir junk/lib && mkdir junk/include && \
-       cp -a $(DASRC) $(DAQDADIR) junk && \
-       cp -a $(DALIB) $(ROOTLIBDIR)/libRoot.a $(ROOTLIBDIR)/libfreetype.a $(ROOTLIBDIR)/libpcre.a junk/lib && \
-       $(foreach daincfile,$(DAINCLUDES), cp -a $(daincfile) junk/include &&) \
-       cp -a $(DAMAKEFILE) junk/Makefile && \
+       @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 cf ../$(DAMODULE)da.tar * && \
+       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 "Reference Run: $(DAREFRUN)" >> $@
+       @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
 
-static-DA: clean-DA
-clean-DA: tar-DA
-tar-DA:
+$(DATARGETNAME):        $(DATARGETNAME)-clean
+$(DATARGETNAME)-clean:  $(DATARGETNAME)-rpm
+$(DATARGETNAME)-rpm:
        @echo
-       @echo "****************************************************************************************************"
-       @echo "* In order to build a detector-algorithm package you have to set the environment variable DAMODULE *"
-       @echo "* For example: setenv DAMODULE TOF                                                                 *"
-       @echo "*          or  export DAMODULE=TOF                                                                 *"
-       @echo "* If the detector algorithm uses data from another sub-detector you can specify this by setting    *"
-       @echo "* the environment variable EXTRADAMODULE                                                           *"
-       @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