Newer
Older
# Top level Makefile for ROOT System
# Copyright (c) 2000 Rene Brun and Fons Rademakers
#
# Author: Fons Rademakers, 29/2/2000
##### Include path/location macros (result of ./configure) #####
##### However, if we are building packages or cleaning, #####
##### config/Makefile.config isn't made yet - the package #####
##### scripts want's to make it them selves - so we don't #####
ifeq ($(findstring $(MAKECMDGOALS), debian redhat),)
include config/Makefile.config
ifeq ($(MAKECMDGOALS),maintainer-clean)
-include config/Makefile.config
endif
ifeq ($(MAKECMDGOALS),clean)
include config/Makefile.config
endif
MAKE_VERSION_MAJOR := $(word 1,$(subst ., ,$(MAKE_VERSION)))
MAKE_VERSION_MINOR := $(shell echo $(word 2,$(subst ., ,$(MAKE_VERSION))) | \
ORDER_ := $(shell test $(MAKE_VERSION_MAJOR) -gt 3 || \
test $(MAKE_VERSION_MAJOR) -eq 3 && \
test $(MAKE_VERSION_MINOR) -ge 80 && echo '|')
Fons Rademakers
committed
##### Include compiler overrides specified via ./configure #####
##### However, if we are building packages or cleaning, we #####
##### don't include this file since it may screw up things #####
##### Included before Makefile.$ARCH only because of f77 #####
##### if case has to be processed #####
ifeq ($(findstring $(MAKECMDGOALS), maintainer-clean debian redhat),)
include config/Makefile.comp
endif
ifeq ($(MAKECMDGOALS),clean)
include config/Makefile.comp
endif
##### Include machine dependent macros #####
##### However, if we are building packages or cleaning, we #####
##### don't include this file since it may screw up things #####
Fons Rademakers
committed
ifndef ROOT_SRCDIR
$(error Please run ./configure again, the build system has been updated)
endif
ifeq ($(findstring $(MAKECMDGOALS), maintainer-clean debian redhat),)
Fons Rademakers
committed
include $(ROOT_SRCDIR)/config/Makefile.$(ARCH)
ifeq ($(MAKECMDGOALS),clean)
Fons Rademakers
committed
include $(ROOT_SRCDIR)/config/Makefile.$(ARCH)
endif
##### Include compiler overrides specified via ./configure #####
##### However, if we are building packages or cleaning, we #####
##### don't include this file since it may screw up things #####
ifeq ($(findstring $(MAKECMDGOALS), maintainer-clean debian redhat),)
Fons Rademakers
committed
include config/Makefile.comp
endif
ifeq ($(MAKECMDGOALS),clean)
include config/Makefile.comp
endif
Fons Rademakers
committed
##### Include library dependencies for explicit linking #####
Fons Rademakers
committed
MAKEFILEDEP = $(ROOT_SRCDIR)/config/Makefile.depend
include $(MAKEFILEDEP)
Fons Rademakers
committed
##### Allow local macros #####
-include MyConfig.mk
##### Modules to build #####
MODULES = build cint/cint core/metautils core/pcre core/clib core/utils \
core/base core/cont core/meta io/io math/mathcore net/net \
core/zip core/thread math/matrix core/newdelete hist/hist \
tree/tree graf2d/freetype graf2d/graf graf2d/gpad graf3d/g3d \
gui/ged tree/treeviewer math/physics graf2d/postscript \
core/rint html montecarlo/eg \
geom/geom geom/geompainter montecarlo/vmc \
math/fumili math/mlp math/quadp net/auth gui/guibuilder io/xml \
geom/geombuilder hist/spectrum hist/spectrumpainter \
gui/fitpanel proof/proof proof/proofplayer \
ifeq ($(ARCH),win32)
MODULES += core/winnt graf2d/win32gdk
MODULES := $(filter-out core/newdelete,$(MODULES))
SYSTEML = $(WINNTL)
SYSTEMO = $(WINNTO)
SYSTEMDO = $(WINNTDO)
else
ifeq ($(ARCH),win32gcc)
MODULES += core/unix
SYSTEML = $(UNIXL)
SYSTEMO = $(UNIXO)
SYSTEMDO = $(UNIXDO)
else
MODULES += core/unix
SYSTEML = $(UNIXL)
SYSTEMO = $(UNIXO)
SYSTEMDO = $(UNIXDO)
endif
endif
ifeq ($(BUILDX11),yes)
MODULES += graf2d/x11 graf2d/x11ttf graf3d/x3d rootx
endif
Fons Rademakers
committed
ifeq ($(BUILDGL),yes)
ifeq ($(BUILDGLEW),yes)
MODULES += graf3d/glew
endif
endif
endif
ifeq ($(BUILDRFIO),yes)
endif
ifeq ($(BUILDCASTOR),yes)
endif
endif
ifeq ($(BUILDBONJOUR),yes)
MODULES += net/bonjour
endif
ifeq ($(BUILDHDFS),yes)
MODULES += io/hdfs
endif
ifeq ($(BUILDMEMSTAT),yes)
MODULES += misc/memstat
endif
ifeq ($(BUILDASIMAGE),yes)
ifeq ($(BUILDFITSIO),yes)
MODULES += graf2d/fitsio
endif
MODULES += montecarlo/pythia6
endif
ifeq ($(BUILDFPYTHIA8),yes)
MODULES += montecarlo/pythia8
MODULES += math/fftw
ifeq ($(BUILDGVIZ),yes)
MODULES += graf2d/gviz
endif
MODULES += bindings/pyroot
MODULES += bindings/ruby
endif
MODULES += graf2d/qt gui/qtroot
MODULES += gui/qtgsi
MODULES += math/genvector
endif
ifeq ($(BUILDMATHMORE),yes)
MODULES += math/mathmore
Fons Rademakers
committed
ifeq ($(BUILDREFLEX),yes)
# put reflex right in front of CINT; CINT needs it
MODULES := $(subst cint/cint,cint/reflex cint/cint,$(MODULES))
Fons Rademakers
committed
endif
MODULES += math/minuit2
MODULES += math/unuran
Fons Rademakers
committed
ifeq ($(BUILDCINTEX),yes)
# to be added to the unconditional MODULES list above once cling is in trunk
Fons Rademakers
committed
endif
ifeq ($(BUILDROOFIT),yes)
Fons Rademakers
committed
MODULES += roofit/roofitcore roofit/roofit roofit/roostats
ifeq ($(BUILDXML),yes)
MODULES += roofit/histfactory
endif
MODULES += geom/gdml
Fons Rademakers
committed
endif
endif
endif
Fons Rademakers
committed
endif
ifneq ($(F77),)
MODULES += misc/minicern hist/hbook
endif
ifeq ($(BUILDXRD),yes)
MODULES += net/xrootd net/netx
endif
MODULES += proof/clarens
endif
ifeq ($(BUILDPEAC),yes)
MODULES += proof/peac
ifeq ($(BUILDEDITLINE),yes)
MODULES += core/editline
endif
MODULES += proof/proofd
MODULES += proof/proofx
-include MyModules.mk # allow local modules
ifneq ($(findstring $(MAKECMDGOALS),distclean maintainer-clean),)
MODULES += core/unix core/winnt core/editline graf2d/x11 graf2d/x11ttf \
graf3d/gl graf3d/ftgl graf3d/glew io/rfio io/castor \
montecarlo/pythia6 montecarlo/pythia8 misc/table \
sql/mysql sql/pgsql sql/sapdb net/srputils graf3d/x3d \
rootx net/rootd io/dcache io/chirp hist/hbook graf2d/asimage \
net/ldap net/krb5auth net/rpdutils net/globusauth \
bindings/pyroot bindings/ruby io/gfal misc/minicern \
graf2d/qt gui/qtroot gui/qtgsi net/xrootd net/netx net/alien \
proof/proofd proof/proofx proof/clarens proof/peac proof/pq2 \
sql/oracle io/xmlparser math/mathmore cint/reflex cint/cintex \
tmva math/genetic io/hdfs graf2d/fitsio roofit/roofitcore \
roofit/roofit roofit/roostats roofit/histfactory \
math/minuit2 net/monalisa math/fftw sql/odbc math/unuran \
geom/gdml graf3d/eve net/glite misc/memstat \
MODULES := $(sort $(MODULES)) # removes duplicates
endif
MODULES += main # must be last, $(ALLLIBS) must be fully formed
ifeq ($(BUILDTOOLS),yes)
MODULES = build cint/cint core/metautils core/clib core/base core/meta \
core/utils
endif
##### ROOT libraries #####
LPATH = lib
RPATH := -L$(LPATH)
CINTLIBS := -lCint
NEWLIBS := -lNew
BOOTLIBS := -lCore -lCint -lMathCore
BOOTLIBS += -lCintex -lReflex
ROOTLIBS := $(BOOTLIBS) -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad \
-lTree -lMatrix -lThread
RINTLIBS := -lRint
else
CINTLIBS := $(LPATH)/libCint.lib
NEWLIBS := $(LPATH)/libNew.lib
BOOTLIBS := $(LPATH)/libCore.lib $(LPATH)/libCint.lib \
$(LPATH)/libMathcore.lib
BOOTLIBS += $(LPATH)/libCintex.lib $(LPATH)/libReflex.lib
ROOTLIBS := $(BOOTLIBS) $(LPATH)/libRIO.lib $(LPATH)/libNet.lib \
$(LPATH)/libHist.lib $(LPATH)/libGraf.lib \
$(LPATH)/libGraf3d.lib $(LPATH)/libGpad.lib \
$(LPATH)/libTree.lib $(LPATH)/libMatrix.lib \
$(LPATH)/libThread.lib
RINTLIBS := $(LPATH)/libRint.lib
endif
ROOTALIB := $(LPATH)/libRoot.a
BOOTLIBSDEP = $(ORDER_) $(CORELIB) $(CINTLIB) $(MATHCORELIB)
BOOTLIBSDEP += $(CINTEXLIB) $(REFLEXLIB)
ROOTLIBSDEP = $(BOOTLIBSDEP) $(IOLIB) $(NETLIB) $(HISTLIB) \
$(GRAFLIB) $(G3DLIB) $(GPADLIB) $(TREELIB) $(MATRIXLIB)
# Force linking of not referenced libraries
ifeq ($(PLATFORM),aix5)
ROOTULIBS := -Wl,-u,.G__cpp_setupG__Net \
-Wl,-u,.G__cpp_setupG__Hist \
-Wl,-u,.G__cpp_setupG__G3D \
-Wl,-u,.G__cpp_setupG__GPad \
-Wl,-u,.G__cpp_setupG__Tree \
-Wl,-u,.G__cpp_setupG__Thread \
-Wl,-u,.G__cpp_setupG__Matrix
BOOTULIBS := -Wl,-u,.G__cpp_setupG__MathCore
ROOTULIBS := -Wl,-u,_G__cpp_setupG__Net \
-Wl,-u,_G__cpp_setupG__Hist \
-Wl,-u,_G__cpp_setupG__G3D \
-Wl,-u,_G__cpp_setupG__GPad \
-Wl,-u,_G__cpp_setupG__Tree \
-Wl,-u,_G__cpp_setupG__Thread \
-Wl,-u,_G__cpp_setupG__Matrix
BOOTULIBS := -Wl,-u,_G__cpp_setupG__MathCore
endif
ifeq ($(PLATFORM),win32)
ROOTULIBS := -include:_G__cpp_setupG__Net \
-include:_G__cpp_setupG__Hist \
-include:_G__cpp_setupG__G3D \
-include:_G__cpp_setupG__GPad \
-include:_G__cpp_setupG__Tree \
-include:_G__cpp_setupG__Thread \
-include:_G__cpp_setupG__Matrix
BOOTULIBS := -include:_G__cpp_setupG__MathCore
endif
ifneq ($(findstring clang,$(CXX)),)
CLANG_MAJOR := $(shell $(CXX) -v 2>&1 | awk '{if (NR==1) print $$3}' | cut -d'.' -f1)
CLANG_MINOR := $(shell $(CXX) -v 2>&1 | awk '{if (NR==1) print $$3}' | cut -d'.' -f2)
else
ifneq ($(findstring gnu,$(COMPILER)),)
GCC_MAJOR := $(shell $(CXX) -dumpversion 2>&1 | cut -d'.' -f1)
GCC_MINOR := $(shell $(CXX) -dumpversion 2>&1 | cut -d'.' -f2)
GCC_PATCH := $(shell $(CXX) -dumpversion 2>&1 | cut -d'.' -f3)
GCC_VERS := gcc-$(GCC_MAJOR).$(GCC_MINOR)
GCC_VERS_FULL := gcc-$(GCC_MAJOR).$(GCC_MINOR).$(GCC_PATCH)
##### f77 options #####
endif
ifeq ($(F77OPT),)
F77OPT := $(OPT)
endif
ifeq ($(F77LDFLAGS),)
F77LDFLAGS := $(LDFLAGS)
endif
ifeq ($(GCC_MAJOR),3)
LIBFRTBEGIN := $(shell $(F77) -print-file-name=libfrtbegin.a)
F77LIBS := $(LIBFRTBEGIN) $(F77LIBS)
endif
endif
endif
LIBFRTBEGIN := $(shell $(F77) -print-file-name=libfrtbegin.a)
F77LIBS := $(LIBFRTBEGIN) $(F77LIBS)
ifeq ($(findstring $(MAKECMDGOALS),clean distclean maintainer-clean dist),)
ifeq ($(findstring clean-,$(MAKECMDGOALS)),)
ifeq ($(shell which svn 2>&1 | sed -ne "s@.*/svn@svn@p"),svn)
SVNREV := $(shell bash $(ROOT_SRCDIR)/build/unix/svninfo.sh $(ROOT_SRCDIR))
Fons Rademakers
committed
ifneq ($(ROOT_OBJDIR),$(ROOT_SRCDIR))
MAKEDIR = +@[ -d $(dir $@) ] || mkdir -p $(dir $@)
RUNTIMEDIRS := etc macros icons fonts README tutorials test man
POSTBIN += $(RUNTIMEDIRS)
Fons Rademakers
committed
endif
ifneq ($(HOST),)
BUILDTOOLSDIR := buildtools
POSTBIN += static
endif
Fons Rademakers
committed
MAKEDEP = $(RMKDEP)
MAKELIB = $(ROOT_SRCDIR)/build/unix/makelib.sh $(MKLIBOPTIONS)
MAKEDIST := $(ROOT_SRCDIR)/build/unix/makedist.sh
MAKEDISTSRC := $(ROOT_SRCDIR)/build/unix/makedistsrc.sh
MAKEVERSION := $(ROOT_SRCDIR)/build/unix/makeversion.sh
MAKECOMPDATA := $(ROOT_SRCDIR)/build/unix/compiledata.sh
MAKECINTDLL := $(ROOT_SRCDIR)/build/unix/makecintdll.sh
MAKECHANGELOG := $(ROOT_SRCDIR)/build/unix/makechangelog.sh
MAKEHTML := $(ROOT_SRCDIR)/build/unix/makehtml.sh
MAKELOGHTML := $(ROOT_SRCDIR)/build/unix/makeloghtml.sh
MAKERELNOTES := $(ROOT_SRCDIR)/build/unix/makereleasenotes.sh
MAKESTATIC := $(ROOT_SRCDIR)/build/unix/makestatic.sh
RECONFIGURE := $(ROOT_SRCDIR)/build/unix/reconfigure.sh
Fons Rademakers
committed
MAKELIB := $(ROOT_SRCDIR)/build/win/makelib.sh
MAKECOMPDATA := $(ROOT_SRCDIR)/build/win/compiledata.sh
endif
COMPILEDATA = include/compiledata.h
Fons Rademakers
committed
ROOTRC = etc/system.rootrc
ROOTMAP = etc/system.rootmap
##### Extra libs needed for "static" target #####
STATICEXTRALIBS = $(PCRELDFLAGS) $(PCRELIB) \
$(FREETYPELDFLAGS) $(FREETYPELIB)
##### libCore #####
COREL = $(BASEL1) $(BASEL2) $(BASEL3) $(CONTL) $(METAL) \
$(SYSTEML) $(CLIBL) $(METAUTILSL) $(EDITLINEL)
COREO = $(BASEO) $(CONTO) $(METAO) $(SYSTEMO) $(ZIPO) $(CLIBO) \
$(METAUTILSO) $(EDITLINEO) $(CLINGO)
COREDO = $(BASEDO) $(CONTDO) $(METADO) $(METACDO) $(SYSTEMDO) \
$(CLIBDO) $(METAUTILSDO) $(EDITLINEDO) $(CLINGDO)
CORELIB := $(LPATH)/libCore.$(SOEXT)
COREMAP := $(CORELIB:.$(SOEXT)=.rootmap)
CORELIBEXTRA += $(ZLIBLIBDIR) $(ZLIBCLILIB)
STATICEXTRALIBS += $(ZLIBLIBDIR) $(ZLIBCLILIB)
ifeq ($(BUILDEDITLINE),yes)
CORELIBEXTRA += $(CURSESLIBDIR) $(CURSESLIB)
STATICEXTRALIBS += $(CURSESLIBDIR) $(CURSESLIB)
endif
##### In case shared libs need to resolve all symbols (e.g.: aix, win32) #####
Fons Rademakers
committed
ifeq ($(EXPLICITLINK),yes)
else
MAINLIBS =
endif
##### all #####
ALLHDRS :=
ALLLIBS := $(CORELIB)
ALLMAPS := $(COREMAP)
ALLEXECS :=
INCLUDEFILES :=
##### RULES #####
.SUFFIXES: .cxx .d
.PRECIOUS: include/%.h
# special rules (need to be defined before generic ones)
cint/cint/lib/dll_stl/G__%.o: cint/cint/lib/dll_stl/G__%.cxx
$(MAKEDEP) -R -f$(patsubst %.o,%.d,$@) -Y -w 1000 -- \
Fons Rademakers
committed
$(CXXFLAGS) $(DICTFLAGS) -D__cplusplus -I$(CINTDIRL)/prec_stl \
-I$(CINTDIRSTL) -I$(CINTDIR)/inc -- $<
$(CXX) $(NOOPT) $(CXXFLAGS) $(DICTFLAGS) -I. -I$(CINTDIR)/inc $(CXXOUT)$@ -c $<
cint/cint/lib/dll_stl/G__c_%.o: cint/cint/lib/dll_stl/G__c_%.c
$(MAKEDEP) -R -f$(patsubst %.o,%.d,$@) -Y -w 1000 -- \
Fons Rademakers
committed
$(CFLAGS) $(DICTFLAGS) -I$(CINTDIRL)/prec_stl \
-I$(CINTDIRSTL) -I$(CINTDIR)/inc -- $<
$(CC) $(NOOPT) $(CFLAGS) $(DICTFLAGS) -I. -I$(CINTDIR)/inc $(CXXOUT)$@ -c $<
cint/cint/lib/G__%.o: cint/cint/lib/G__%.cxx
$(MAKEDEP) -R -f$(patsubst %.o,%.d,$@) -Y -w 1000 -- \
Fons Rademakers
committed
$(CXXFLAGS) $(DICTFLAGS) -D__cplusplus -I$(CINTDIRL)/prec_stl \
-I$(CINTDIRSTL) -I$(CINTDIR)/inc -- $<
$(CXX) $(NOOPT) $(CXXFLAGS) $(DICTFLAGS) -I. -I$(CINTDIR)/inc $(CXXOUT)$@ -c $<
cint/cint/lib/G__c_%.o: cint/cint/lib/G__c_%.c
$(MAKEDEP) -R -f$(patsubst %.o,%.d,$@) -Y -w 1000 -- \
Fons Rademakers
committed
$(CFLAGS) $(DICTFLAGS) -I$(CINTDIRL)/prec_stl \
-I$(CINTDIRSTL) -I$(CINTDIR)/inc -- $<
$(CC) $(NOOPT) $(CFLAGS) $(DICTFLAGS) -I. -I$(CINTDIR)/inc $(CXXOUT)$@ -c $<
$(MAKEDEP) -R -f$(patsubst %.o,%.d,$@) -Y -w 1000 -- \
Fons Rademakers
committed
$(CXXFLAGS) $(DICTFLAGS) -D__cplusplus -I$(CINTDIRL)/prec_stl \
-I$(CINTDIRSTL) -I$(CINTDIR)/inc -- $<
$(CXX) $(NOOPT) $(CXXFLAGS) $(DICTFLAGS) -I. -I$(CINTDIR)/inc $(CXXOUT)$@ -c $<
G__c_%.o: G__c_%.c
$(MAKEDEP) -R -f$(patsubst %.o,%.d,$@) -Y -w 1000 -- \
Fons Rademakers
committed
$(CFLAGS) $(DICTFLAGS) -I$(CINTDIRL)/prec_stl \
-I$(CINTDIRSTL) -I$(CINTDIR)/inc -- $<
$(CC) $(NOOPT) $(CFLAGS) $(DICTFLAGS) -I. -I$(CINTDIR)/inc $(CXXOUT)$@ -c $<
cint/cint/%.o: cint/cint/%.cxx
$(MAKEDEP) -R -fcint/cint/$*.d -Y -w 1000 -- $(CINTCXXFLAGS) -I. -D__cplusplus -- $<
$(CXX) $(OPT) $(CINTCXXFLAGS) -I. $(CXXOUT)$@ -c $<
Fons Rademakers
committed
cint/cint/%.o: $(ROOT_SRCDIR)/cint/cint/%.cxx
$(MAKEDIR)
$(MAKEDEP) -R -fcint/cint/$*.d -Y -w 1000 -- $(CINTCXXFLAGS) -I. -D__cplusplus -- $<
$(CXX) $(OPT) $(CINTCXXFLAGS) -I. $(CXXOUT)$@ -c $<
Fons Rademakers
committed
cint/cint/%.o: $(ROOT_SRCDIR)/cint/cint/%.c
$(MAKEDIR)
$(MAKEDEP) -R -fcint/cint/$*.d -Y -w 1000 -- $(CINTCFLAGS) -I. -- $<
$(CC) $(OPT) $(CINTCFLAGS) -I. $(CXXOUT)$@ -c $<
Fons Rademakers
committed
build/rmkdepend/%.o: $(ROOT_SRCDIR)/build/rmkdepend/%.cxx
$(MAKEDIR)
$(CXX) $(OPT) $(CXXFLAGS) $(CXXOUT)$@ -c $<
Fons Rademakers
committed
build/rmkdepend/%.o: $(ROOT_SRCDIR)/build/rmkdepend/%.c
$(MAKEDIR)
$(CC) $(OPT) $(CFLAGS) $(CXXOUT)$@ -c $<
Fons Rademakers
committed
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
define SRCTOOBJ_template
$(1)/%_tmp.o: $(1)/%_tmp.cxx
$$(MAKEDIR)
$$(MAKEDEP) -R -f$$(@:.o=.d) -Y -w 1000 -- $$(CXXFLAGS) -D__cplusplus -- $$<
$$(CXX) $$(OPT) $$(CXXFLAGS) $$(CXXOUT)$$@ -c $$<
$(1)/%.o: $(ROOT_SRCDIR)/$(1)/%.cxx
$$(MAKEDIR)
$$(MAKEDEP) -R -f$$(@:.o=.d) -Y -w 1000 -- $$(CXXFLAGS) -D__cplusplus -- $$<
$$(CXX) $$(OPT) $$(CXXFLAGS) $$(CXXOUT)$$@ -c $$<
$(1)/%.o: $(ROOT_SRCDIR)/$(1)/%.c
$$(MAKEDIR)
$$(MAKEDEP) -R -f$$(@:.o=.d) -Y -w 1000 -- $$(CFLAGS) -- $$<
$$(CC) $$(OPT) $$(CFLAGS) $$(CXXOUT)$$@ -c $$<
$(1)/%.o: $(ROOT_SRCDIR)/$(1)/%.f
$$(MAKEDIR)
ifeq ($$(F77),f2c)
f2c -a -A $$<
$$(CC) $$(F77OPT) $$(CFLAGS) $$(CXXOUT)$$@ -c $$(@:.o=.c)
else
$$(F77) $$(F77OPT) $$(F77FLAGS) $$(CXXOUT)$$@ -c $$<
endif
endef
MODULESGENERIC := build $(filter-out build,$(MODULES))
MODULESGENERIC := $(filter-out cint/cint,$(MODULES))
$(foreach module,$(MODULESGENERIC),$(eval $(call SRCTOOBJ_template,$(module))))
%.o: %.cxx
$(MAKEDEP) -R -f$*.d -Y -w 1000 -- $(CXXFLAGS) -D__cplusplus -- $<
%.o: %.c
$(MAKEDEP) -R -f$*.d -Y -w 1000 -- $(CFLAGS) -- $<
%.o: %.f
ifeq ($(F77),f2c)
f2c -a -A $<
else
endif
##### TARGETS #####
.PHONY: all fast config rootcint rootlibs rootexecs dist distsrc \
clean distclean maintainer-clean compiledata \
version html changelog install uninstall showbuild \
releasenotes static map debian redhat skip postbin \
showit help
Fons Rademakers
committed
ifneq ($(findstring map, $(MAKECMDGOALS)),)
.NOTPARALLEL:
endif
all: rootexecs postbin
fast: rootexecs
skip:
@true;
Fons Rademakers
committed
-include $(patsubst %,$(ROOT_SRCDIR)/%/ModuleVars.mk,$(MODULES))
include $(patsubst %,$(ROOT_SRCDIR)/%/Module.mk,$(MODULES))
-include MyRules.mk # allow local rules
ifeq ($(findstring $(MAKECMDGOALS),clean distclean maintainer-clean dist \
Fons Rademakers
committed
distsrc version showbuild \
Fons Rademakers
committed
changelog debian redhat),)
ifeq ($(findstring skip,$(MAKECMDGOALS))$(findstring fast,$(MAKECMDGOALS)),)
-include $(INCLUDEFILES)
endif
-include build/dummy.d # must be last include
endif
rootcint: all-cint all-utils
rootlibs: rootcint compiledata $(ALLLIBS) $(ALLMAPS)
ifneq ($(HOST),)
.PHONY: buildtools
Fons Rademakers
committed
buildtools:
@if [ ! -f $(BUILDTOOLSDIR)/Makefile ]; then \
echo "*** Building build tools in $(BUILDTOOLSDIR)..."; \
mkdir -p $(BUILDTOOLSDIR); \
cd $(BUILDTOOLSDIR); \
$(ROOT_SRCDIR)/configure $(HOST) --minimal; \
Fons Rademakers
committed
else \
echo "*** Running make in $(BUILDTOOLSDIR)..."; \
cd $(BUILDTOOLSDIR); \
fi; \
($(MAKE) BUILDTOOLS=yes \
TARGETFLAGS=-DR__$(shell echo $(ARCH) | tr 'a-z' 'A-Z') \
) || exit 1;
distclean::
@rm -rf $(BUILDTOOLSDIR)
endif
Fons Rademakers
committed
postbin: $(POSTBIN)
config config/Makefile.:
@(if [ ! -f config/Makefile.config ] || \
[ ! -f config/Makefile.comp ]; then \
echo ""; echo "Please, run ./configure first"; echo ""; \
exit 1; \
fi)
@(if [ ! -f config/Makefile.config ] || \
[ ! -f config/Makefile.comp ]; then \
./configure --build=debug `cat config.status 2>/dev/null`; \
fi)
endif
# Target Makefile is synonym for "run (re-)configure"
# Makefile is target as we need to re-parse dependencies after
Fons Rademakers
committed
# configure is run (as RConfigure.h changed etc)
config/Makefile.config config/Makefile.comp include/RConfigure.h \
Fons Rademakers
committed
include/RConfigOptions.h etc/system.rootauthrc etc/system.rootdaemonrc \
etc/root.mimes $(ROOTRC) \
bin/root-config: Makefile
ifeq ($(findstring $(MAKECMDGOALS),distclean maintainer-clean debian redhat),)
Fons Rademakers
committed
Makefile: $(addprefix $(ROOT_SRCDIR)/,configure config/rootrc.in \
config/RConfigure.in config/Makefile.in config/Makefile.$(ARCH) \
config/Makefile-comp.in config/root-config.in config/rootauthrc.in \
config/rootdaemonrc.in config/mimes.unix.in config/mimes.win32.in \
Fons Rademakers
committed
config/proofserv.in config/roots.in) config.status
Fons Rademakers
committed
echo ""; echo "Please, run $(ROOT_SRCDIR)/configure again as config option files ($?) have changed."; \
Fons Rademakers
committed
Fons Rademakers
committed
$(COMPILEDATA): $(ROOT_SRCDIR)/config/Makefile.$(ARCH) config/Makefile.comp \
$(MAKECOMPDATA)
@$(MAKECOMPDATA) $(COMPILEDATA) "$(CXX)" "$(OPTFLAGS)" "$(DEBUGFLAGS)" \
"$(CXXFLAGS)" "$(SOFLAGS)" "$(LDFLAGS)" "$(SOEXT)" "$(SYSLIBS)" \
"$(LIBDIR)" "$(BOOTLIBS)" "$(RINTLIBS)" "$(INCDIR)" \
"$(MAKESHAREDLIB)" "$(MAKEEXE)" "$(ARCH)" "$(ROOTBUILD)" "$(EXPLICITLINK)"
ifeq ($(HOST),)
build/dummy.d: config Makefile $(ALLHDRS) $(RMKDEP) $(BINDEXP)
else
build/dummy.d: config Makefile buildtools $(ALLHDRS) $(RMKDEP) $(BINDEXP)
endif
@(if [ ! -f $@ ] ; then \
touch $@; \
fi)
$(CORELIB): $(COREO) $(COREDO) $(CINTLIB) $(PCREDEP) $(CORELIBDEP)
Fons Rademakers
committed
ifneq ($(ARCH),alphacxx6)
@$(MAKELIB) $(PLATFORM) $(LD) "$(LDFLAGS)" \
"$(SOFLAGS)" libCore.$(SOEXT) $@ "$(COREO) $(COREDO)" \
"$(CORELIBEXTRA) $(PCRELDFLAGS) $(PCRELIB) $(CRYPTLIBS)"
Fons Rademakers
committed
else
@$(MAKELIB) $(PLATFORM) $(LD) "$(CORELDFLAGS)" \
"$(SOFLAGS)" libCore.$(SOEXT) $@ "$(COREO) $(COREDO)" \
"$(CORELIBEXTRA) $(PCRELDFLAGS) $(PCRELIB) $(CRYPTLIBS)"
Fons Rademakers
committed
endif
$(COREMAP): $(RLIBMAP) $(MAKEFILEDEP) $(COREL)
Fons Rademakers
committed
$(RLIBMAP) -o $@ -l $(CORELIB) -d $(CORELIBDEPM) -c $(COREL)
map:: $(ALLMAPS)
dist:
@$(MAKEDIST) $(GCC_VERS)
@$(MAKEDISTSRC)
build/package/msi/makemsi$(EXEEXT): build/package/msi/makemsi.cxx build/version_number
@vers=`sed 's|\(.*\)/\(.*\)|\1.\2|' < build/version_number` && \
$(CXX) -DPRODUCT=\"ROOT\" -DVERSION=\"$$vers\" $(CXXFLAGS) Rpcrt4.lib build/package/msi/makemsi.cxx -Fe$@
rebase: $(ALLLIBS) $(ALLEXECS)
@echo -n "Rebasing binaries... "
@echo done.
@if [ ! -x `which dpkg-buildpackage` ] || [ ! -x `which dh_testdir` ]; then \
echo "You must have debhelper installed to make the "; \
echo "Debian GNU/Linux packages"; exit 1; fi
@echo "OK, you're on a Debian GNU/Linux system - cool"
@vers=`sed 's|\(.*\)/\(.*\)|\1.\2|' < build/version_number` ; \
dirvers=`basename $$PWD | sed 's|root-\(.*\)|\1|'` ; \
if [ "$$vers" != "$$dirvers" ] ; then \
echo "Must have ROOT source tree in root-$$vers" ; \
echo "Please rename this directory to `basename $$PWD` to"; \
echo "root-$$vers and try again"; exit 1 ; fi
Fons Rademakers
committed
$(ROOT_SRCDIR)/build/package/lib/makedebdir.sh
dpkg-buildpackage -rfakeroot -us -uc -i"G__|^debian|root-bin.png|\.d$$"
@echo "Debian GNU/Linux packages done. They are put in '../'"
@if [ ! -x `which rpm` ]; then \
echo "You must have rpm installed to make the Redhat package"; \
exit 1; fi
@echo "OK, you have RPM on your system - good"
Fons Rademakers
committed
$(ROOT_SRCDIR)/build/package/lib/makerpmspec.sh
@echo "To build the packages, make a gzipped tar ball of the sources"
@vers=`sed 's|\(.*\)/\(.*\)|\1.\2|' < build/version_number` ; \
echo "called root_v$$vers.source.tar.gz and put it in you RPM "
@echo "source directory (default /usr/src/rpm/SOURCES) and the "
@echo "spec-file root.spec in your RPM spec directory"
@echo "(default /usr/src/RPM/SPECS). If you want to build outside"
@echo "the regular tree, please refer to the RPM documentation."
@echo "After that, do"
@echo " rpm -ba root.spec "
@echo "to actually build the packages. More details are given in"
@echo "README/INSTALL"
# rpm -bb --rcfile rpm/rpmrc --buildroot `pwd`/rpm/tmp rpm/root.spec
# @echo "Redhat Linux packages done. They are put in '../<arch>'"
redhat-tar:
@if [ ! -x `which rpm` ]; then \
echo "You must have rpm installed to make the Redhat package"; \
exit 1; fi
@echo "OK, you have RPM on your system - good"
Fons Rademakers
committed
$(ROOT_SRCDIR)/build/package/lib/makerpmspec.sh
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
-@$(MAKE) distclean
-@$(MAKE) maintainer-clean
@vers=`sed 's|\(.*\)/\(.*\)|\1.\2|' < build/version_number` && \
rm -f root_v$$vers.source.tar.gz && \
(cd ../ && tar \
--exclude=\\.svn \
--exclude=root/debian \
--exclude=root/bin \
--exclude=root/lib \
--exclude=root/include \
-czf root_v$$vers.source.tar.gz root) && \
mv ../root_v$$vers.source.tar.gz .
@echo "To build the packages, run "
@echo ""
@vers=`sed 's|\(.*\)/\(.*\)|\1.\2|' < build/version_number` ; \
echo " rpmbuild -ta root_v$$vers.source.tar.gz"
@echo ""
@echo "as user root (or similar). If you want to build outside"
@echo "the regular tree (as a normal user), please refer to the"
@echo "RPM documentation."
redhat-rpm: redhat-tar
@rm -rf rpm
@mkdir -p rpm/SOURCES rpm/SPECS rpm/BUILD rpm/RPMS rpm/SRPMS
@vers=`sed 's|\(.*\)/\(.*\)|\1.\2|' < build/version_number` && \
rpmbuild --define "_topdir `pwd`/rpm" -ta root_v$$vers.source.tar.gz
@rm -rf rpm/SOURCES rpm/SPECS
@echo "Packages build in rpm/RPMS and rpm/SPRMS"
rootdrpm:
@if [ ! -x `which rpm` ]; then \
echo "You must have rpm installed to make the root-rootd package"; \
exit 1; fi
@echo "OK, you have RPM on your system - good"
@if [ "x$(ARCOMP)" != "x" ]; then \
rm -f rootd-$(ARCOMP)-*-$(ROOTDRPMREL).spec ; \
else \
rm -f rootd-*-$(ROOTDRPMREL).spec ; \
fi
Fons Rademakers
committed
$(ROOT_SRCDIR)/build/package/lib/makerpmspecs.sh rpm \
$(ROOT_SRCDIR)/build/package/common \
$(ROOT_SRCDIR)/build/package/rpm root-rootd >> \
root-rootd.spec.tmp
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
@if [ "x$(ARCOMP)" != "x" ]; then \
echo "Architecture+compiler flag: $(ARCOMP)" ; \
fi
@if [ "x$(ROOTDRPMREL)" != "x" ]; then \
echo "RPM release set to: $(ROOTDRPMREL)" ; \
fi
@if [ ! -d "/tmp/rootdrpm" ]; then \
echo "Creating build directory /tmp/rootdrpm ..."; \
mkdir -p /tmp/rootdrpm; \
chmod 0777 /tmp/rootdrpm; \
fi
@echo "Make the substitutions ..."
@vers=`sed 's|\(.*\)/\(.*\)|\1.\2|' < build/version_number` ; \
echo "Version is $$vers ... " ; \
rootdir=`echo $(PWD)` ; \
echo "Rootdir: $$rootdir" ; \
prefix=`dirname $(DESTDIR)$(BINDIR)` ; \
echo "Prefix: $$prefix" ; \
etcdir=`echo $(DESTDIR)$(ETCDIR)` ; \
echo "Etcdir: $$etcdir" ; \
arcomp="" ; \
if [ "x$(ARCOMP)" != "x" ]; then \
arcomp=`echo -$(ARCOMP)` ; \
fi ; \
sed -e "s|@version@|$$vers|" \
-e "s|@rootdir@|$$rootdir|" \
-e "s|@prefix@|$$prefix|" \
-e "s|@etcdir@|$$etcdir|" \
-e "s|@arcomp@|$$arcomp|" \
-e "s|@release@|$(ROOTDRPMREL)|" \
< root-rootd.spec.tmp \
> rootd$$arcomp-$$vers-$(ROOTDRPMREL).spec
@echo " "
@echo "To build the RPM package run:"
@specfile=`ls -1 rootd*$(ARCOMP)*-$(ROOTDRPMREL).spec` ; \
echo " rpmbuild -ba $$specfile "
@rm -f root-rootd.spec.tmp root-rootd.spec.tmp.*
@if [ "x$(ARCOMP)" == "x" ]; then \
echo " " ; \
echo "To add a flag to the package name re-run with" ; \
echo " " ; \
echo " make rootdrpm ARCOMP=<flag> " ; \
echo " " ; \
echo "The RPM will then be called rootd-<flag> " ; \
echo " " ; \
fi
@if [ "x$(ROOTDRPMREL)" == "x1" ]; then \
echo " " ; \
echo "To change the release version number re-run with" ; \
echo " " ; \
echo " make rootdrpm ROOTDRPMREL=<new_release_version_number> " ; \
echo " " ; \
fi
clean::
ifeq ($(CXX),KCC)
clean::
@(find . -name "ti_files" -exec rm -rf {} \; >/dev/null 2>&1;true)
endif
@(find . -name "SunWS_cache" -exec rm -rf {} \; >/dev/null 2>&1;true)
distclean:: clean
Fons Rademakers
committed
-@mv -f include/RConfigure.h include/RConfigure.h-
Fons Rademakers
committed
-@mv -f include/RConfigOptions.h include/RConfigOptions.h-
@rm -f include/*.h $(ROOTMAP) $(CORELIB) $(COREMAP)
Fons Rademakers
committed
-@mv -f include/RConfigure.h- include/RConfigure.h
Fons Rademakers
committed
-@mv -f include/RConfigOptions.h- include/RConfigOptions.h
@rm -f bin/*.dll bin/*.exp bin/*.lib bin/*.pdb \
Fons Rademakers
committed
*.def .def
Fons Rademakers
committed
ifeq ($(PLATFORM),macosx)
Fons Rademakers
committed
@rm -f lib/*.dylib
@rm -f lib/*.so
endif
-@(mv -f tutorials/gallery.root tutorials/gallery.root- >/dev/null 2>&1;true)
-@(mv -f tutorials/mlp/mlpHiggs.root tutorials/mlp/mlpHiggs.root- >/dev/null 2>&1;true)
-@(mv -f tutorials/quadp/stock.root tutorials/quadp/stock.root- >/dev/null 2>&1;true)
@(find tutorials -name "files" -exec rm -rf {} \; >/dev/null 2>&1;true)
@(find tutorials -name "*.root" -exec rm -rf {} \; >/dev/null 2>&1;true)
@(find tutorials -name "*.ps" -exec rm -rf {} \; >/dev/null 2>&1;true)
@(find tutorials -path '*/doc' -prune -o -name "*.gif" -exec rm -rf {} \; >/dev/null 2>&1;true)
@(find tutorials -name "so_locations" -exec rm -rf {} \; >/dev/null 2>&1;true)
@(find tutorials -name "pca.C" -exec rm -rf {} \; >/dev/null 2>&1;true)
@(find tutorials -name "*.so" -exec rm -rf {} \; >/dev/null 2>&1;true)
@(find tutorials -name "work.pc" -exec rm -rf {} \; >/dev/null 2>&1;true)
@(find tutorials -name "work.pcl" -exec rm -rf {} \; >/dev/null 2>&1;true)
@rm -rf tutorials/eve/aliesd
-@(mv -f tutorials/gallery.root- tutorials/gallery.root >/dev/null 2>&1;true)
-@(mv -f tutorials/mlp/mlpHiggs.root- tutorials/mlp/mlpHiggs.root >/dev/null 2>&1;true)
-@(mv -f tutorials/quadp/stock.root- tutorials/quadp/stock.root >/dev/null 2>&1;true)
@rm -f bin/roota bin/proofserva lib/libRoot.a
@rm -f $(CINTDIR)/include/*.dll $(CINTDIR)/include/*.so*
@rm -f $(CINTDIR)/stl/*.dll $(CINTDIR)/stl/*.so*
@rm -f $(CINTDIR)/include/sys/*.dll $(CINTDIR)/include/sys/*.so.*
@rm -f $(CINTDIR)/lib/posix/a.out $(CINTDIR)/lib/posix/mktypes
@rm -f README/ChangeLog build/dummy.d
@rm -rf README/ReleaseNotes
@rm -f etc/svninfo.txt
@(find . -path '*/daemons' -prune -o -name *.d -exec rm -rf {} \; >/dev/null 2>&1;true)
Fons Rademakers
committed
@(find . -name *.o -exec rm -rf {} \; >/dev/null 2>&1;true)
-@([ -d test ] && (cd test && $(MAKE) distclean); true)
@rm -rf bin lib include htmldoc system.rootrc config/Makefile.config \
config/Makefile.comp $(ROOTRC) etc/system.rootauthrc \
etc/system.rootdaemonrc etc/root.mimes etc/daemons/rootd.rc.d \
etc/daemons/rootd.xinetd etc/daemons/proofd.rc.d \
etc/daemons/proofd.xinetd main/src/proofserv.sh main/src/roots.sh \
etc/daemons/olbd.rc.d etc/daemons/xrootd.rc.d \
etc/daemons/cmsd.rc.d macros/html.C \
build/misc/root-help.el build-arch-stamp build-indep-stamp \
configure-stamp build-arch-cint-stamp config.status config.log
version: $(CINTTMP)
@$(MAKEVERSION)
static: $(ROOTALIB)