Newer
Older
# Top level Makefile for ROOT System
# Copyright (c) 2000 Rene Brun and Fons Rademakers
#
# Author: Fons Rademakers, 29/2/2000
##### Check version of GNU make #####
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 '|')
##### Include path/location macros (result of ./configure) #####
include config/Makefile.config
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 first)
Fons Rademakers
committed
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 interpreter/llvm interpreter/cling core/metautils \
core/pcre core/clib core/utils \
io/io math/mathcore net/net core/zip core/lzma math/matrix \
Olivier Couet
committed
core/newdelete hist/hist tree/tree graf2d/freetype \
graf2d/mathtext 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 ($(PLATFORM),ios)
MODULES += graf2d/ios
endif
ifeq ($(BUILDCOCOA),yes)
MODULES += graf2d/quartz
MODULES += graf2d/cocoa
MODULES += core/macosx
Fons Rademakers
committed
MODULES += rootx
SYSTEML += $(MACOSXL)
SYSTEMO += $(MACOSXO)
SYSTEMDO += $(MACOSXDO)
CORELIBEXTRA += -framework Cocoa
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
MODULES += math/minuit2
MODULES += math/unuran
ifeq ($(BUILDROOFIT),yes)
Fons Rademakers
committed
MODULES += roofit/roofitcore roofit/roofit roofit/roostats
ifeq ($(BUILDXML),yes)
MODULES += roofit/histfactory
endif
ifeq ($(BUILDGEOCAD),yes)
MODULES += geom/geocad
endif
MODULES += geom/gdml
Fons Rademakers
committed
endif
endif
endif
Fons Rademakers
committed
endif
ifneq ($(F77),)
MODULES += misc/minicern hist/hbook
endif
MODULES += net/rpdutils net/rootd proof/proofd proof/pq2 proof/proofbench
MODULES += proof/proofd
MODULES += proof/proofx
ifeq ($(BUILDAFDSMGRD),yes)
MODULES += proof/afdsmgrd
endif
-include MyModules.mk # allow local modules
ifneq ($(findstring $(MAKECMDGOALS),distclean maintainer-clean),)
MODULES += core/unix core/winnt 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 \
proof/proofd proof/proofx proof/pq2 \
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/geocad geom/gdml graf3d/eve net/glite misc/memstat \
proof/proofbench proof/afdsmgrd graf2d/ios \
graf2d/quartz graf2d/cocoa core/macosx
MODULES := $(sort $(MODULES)) # removes duplicates
endif
MODULES += main # must be last, $(ALLLIBS) must be fully formed
ifeq ($(BUILDTOOLS),yes)
MODULES = build interpreter/llvm interpreter/cling core/metautils \
core/clib core/base core/meta core/utils
endif
##### ROOT libraries #####
LPATH = lib
RPATH := -L$(LPATH)
NEWLIBS := -lNew
ROOTLIBS := -lRIO -lHist -lGraf -lGraf3d -lGpad -lTree \
-lMatrix -lNet -lThread -lMathCore $(BOOTLIBS)
RINTLIBS := -lRint
else
NEWLIBS := $(LPATH)/libNew.lib
ROOTLIBS := $(LPATH)/libRIO.lib $(LPATH)/libHist.lib \
$(LPATH)/libGraf.lib $(LPATH)/libGraf3d.lib \
$(LPATH)/libGpad.lib $(LPATH)/libTree.lib \
$(LPATH)/libMatrix.lib $(LPATH)/libNet.lib \
$(LPATH)/libThread.lib $(LPATH)/libMathCore.lib \
$(BOOTLIBS)
RINTLIBS := $(LPATH)/libRint.lib
endif
ROOTALIB := $(LPATH)/libRoot.a
Fons Rademakers
committed
ROOTA := bin/roota
PROOFSERVA := bin/proofserva
ROOTLIBSDEP = $(BOOTLIBSDEP) $(MATHCORELIB) $(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
else
Axel Naumann
committed
ifeq ($(PLATFORM),macosx)
LDSYMPREFIX := _
endif
ROOTULIBS := -Wl,-u,$(LDSYMPREFIX)G__cpp_setupG__Net \
-Wl,-u,$(LDSYMPREFIX)G__cpp_setupG__IO \
-Wl,-u,$(LDSYMPREFIX)G__cpp_setupG__Hist \
-Wl,-u,$(LDSYMPREFIX)G__cpp_setupG__Graf \
-Wl,-u,$(LDSYMPREFIX)G__cpp_setupG__G3D \
-Wl,-u,$(LDSYMPREFIX)G__cpp_setupG__GPad \
-Wl,-u,$(LDSYMPREFIX)G__cpp_setupG__Tree \
-Wl,-u,$(LDSYMPREFIX)G__cpp_setupG__Thread \
-Wl,-u,$(LDSYMPREFIX)G__cpp_setupG__Matrix
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
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)
ifeq ($(CLANG_MAJOR),version)
# Apple version of clang has different -v layout
CLANG_MAJOR := $(shell $(CXX) -v 2>&1 | awk '{if (NR==1) print $$4}' | cut -d'.' -f1)
CLANG_MINOR := $(shell $(CXX) -v 2>&1 | awk '{if (NR==1) print $$4}' | cut -d'.' -f2)
endif
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)
Fons Rademakers
committed
NOUNDEF := -Wl,--no-undefined
LDFLAGS := $(filter-out $(NOUNDEF),$(LDFLAGS))
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)
Fons Rademakers
committed
##### Store Git SHA1 of this version #####
ifeq ($(findstring $(MAKECMDGOALS),clean distclean maintainer-clean dist distsrc),)
Fons Rademakers
committed
ifeq ($(shell which git 2>&1 | sed -ne "s@.*/git@git@p"),git)
GITREV := $(shell bash $(ROOT_SRCDIR)/build/unix/gitinfo.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
Fons Rademakers
committed
POSTBIN += runtimedirs
Fons Rademakers
committed
endif
ifneq ($(HOST),)
BUILDTOOLSDIR := buildtools
Fons Rademakers
committed
endif
ifeq ($(PLATFORM),ios)
POSTBIN += staticlib
endif
POSTBIN += onepcm
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
MAKECHANGELOG := $(ROOT_SRCDIR)/build/unix/makechangelog.sh
MAKEHTML := $(ROOT_SRCDIR)/build/unix/makehtml.sh
MAKELOGHTML := $(ROOT_SRCDIR)/build/unix/makeloghtml.sh
MAKEPLUGINS := $(ROOT_SRCDIR)/build/unix/makeplugins-ios.sh
Fons Rademakers
committed
MAKERELNOTES := $(ROOT_SRCDIR)/build/unix/makereleasenotes.sh
Fons Rademakers
committed
STATICOBJLIST := $(ROOT_SRCDIR)/build/unix/staticobjectlist.sh
MAKESTATICLIB := $(ROOT_SRCDIR)/build/unix/makestaticlib.sh
Fons Rademakers
committed
MAKESTATIC := $(ROOT_SRCDIR)/build/unix/makestatic.sh
RECONFIGURE := $(ROOT_SRCDIR)/build/unix/reconfigure.sh
MAKEONEPCM := $(ROOT_SRCDIR)/build/unix/makeonepcm.sh $(ROOT_SRCDIR)
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 #####
Fons Rademakers
committed
STATICEXTRALIBS = $(CLINGLIBEXTRA) \
$(PCRELDFLAGS) $(PCRELIB) \
ifneq ($(SSLLIB),)
STATICEXTRALIBS += $(SSLLIB)
endif
ifeq ($(XFTLIB),yes)
STATICEXTRALIBS += -lXft
endif
ifeq ($(BUILDCOCOA),yes)
Fons Rademakers
committed
STATICEXTRALIBS += -framework Cocoa -framework OpenGL
endif
##### libCore #####
Philippe Canal
committed
COREL = $(BASEL1) $(BASEL2) $(BASEL3) $(CONTL) $(METAL) $(ZIPL) \
$(SYSTEML) $(CLIBL) $(METAUTILSL) $(TEXTINPUTL)
COREO = $(BASEO) $(CONTO) $(METAO) $(SYSTEMO) $(ZIPO) $(LZMAO) \
$(CLIBO) $(METAUTILSO) $(METAUTILSTO) $(TEXTINPUTO)
Philippe Canal
committed
COREDO = $(BASEDO) $(CONTDO) $(METADO) $(METACDO) $(SYSTEMDO) $(ZIPDO) \
Axel Naumann
committed
$(CLIBDO) $(METAUTILSDO) $(TEXTINPUTDO)
CORELIB := $(LPATH)/libCore.$(SOEXT)
COREMAP := $(CORELIB:.$(SOEXT)=.rootmap)
CORELIBEXTRA += $(ZLIBLIBDIR) $(ZLIBCLILIB)
STATICEXTRALIBS += $(ZLIBLIBDIR) $(ZLIBCLILIB)
ifneq ($(BUILTINLZMA),yes)
CORELIBEXTRA += $(LZMALIBDIR) $(LZMACLILIB)
STATICEXTRALIBS += $(LZMALIBDIR) $(LZMACLILIB)
else
CORELIBEXTRA += $(LZMALIB)
STATICEXTRALIBS += $(LZMALIB)
##### 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 #####
.PRECIOUS: include/%.h
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
define SRCTOOBJ_template
$(1)/%_tmp.o: $(1)/%_tmp.cxx
$$(MAKEDEP) -R -f$$(@:.o=.d) -Y -w 1000 -- $$(CXXFLAGS) -D__cplusplus -- $$<
$$(CXX) $$(OPT) $$(CXXFLAGS) $$(CXXOUT)$$@ -c $$<
$(1)/src/G__%.o: $(1)/src/G__%.cxx
$$(MAKEDEP) -R -f$$(patsubst %.o,%.d,$$@) -Y -w 1000 -- \
$$(CXXFLAGS) -D__cplusplus -- $$<
$$(CXX) $$(NOOPT) $$(CXXFLAGS) -I. $$(CXXOUT)$$@ -c $$<
Fons Rademakers
committed
$(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)/%.mm
$$(MAKEDIR)
$$(MAKEDEP) -R -f$$(@:.o=.d) -Y -w 1000 -- $$(CXXFLAGS) -D__cplusplus -- $$<
$$(CXX) $$(OPT) $$(CXXFLAGS) -ObjC++ $$(CXXOUT)$$@ -c $$<
Fons Rademakers
committed
$(1)/%.o: $(ROOT_SRCDIR)/$(1)/%.f
$$(MAKEDIR)
ifeq ($$(F77),f2c)
f2c -a -A $$<
$$(CC) $$(F77OPT) $$(CFLAGS) $$(CXXOUT)$$@ -c $$(@:.o=.c)
else
ifneq ($(findstring gfortran, $(F77)),)
# Ignore gfortran warnings, our Fortran code is old, won't change and works
$$(F77) $$(F77OPT) $$(F77FLAGS) $$(CXXOUT)$$@ -c $$< 2>&1 | sed -e s/arning:/arn-Ignore:/ >&2
Fons Rademakers
committed
else
$$(F77) $$(F77OPT) $$(F77FLAGS) $$(CXXOUT)$$@ -c $$<
endif
endif
Fons Rademakers
committed
endef
MODULESGENERIC := build $(filter-out build,$(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: %.mm
$(MAKEDEP) -R -f$*.d -Y -w 1000 -- $(CXXFLAGS) -D__cplusplus -- $<
$(CXX) $(OPT) $(CXXFLAGS) -ObjC++ $(CXXOUT)$@ -c $<
%.o: %.f
ifeq ($(F77),f2c)
f2c -a -A $<
else
ifneq ($(findstring gfortran, $(F77)),)
# Ignore gfortran warnings, our Fortran code is old, won't change and works
$(F77) $(F77OPT) $(F77FLAGS) $(CXXOUT)$@ -c $< 2>&1 | sed -e s/arning:/arn-Ignore:/ >&2
else
endif
endif
##### TARGETS #####
.PHONY: all fast config rootcling rootlibs rootexecs dist distsrc \
clean distclean distclean-xrootd maintainer-clean compiledata \
version html changelog install uninstall showbuild \
Fons Rademakers
committed
releasenotes staticlib static map debian redhat skip postbin \
showit help runtimedirs plugins-ios onepcm
Fons Rademakers
committed
ifneq ($(findstring map, $(MAKECMDGOALS)),)
.NOTPARALLEL:
endif
all: rootexecs postbin
@echo " "
@echo " ============================================================"
@echo " === ROOT BUILD SUCCESSFUL. ==="
ifeq ($(USECONFIG),FALSE)
@echo " === Run 'source bin/thisroot.[c]sh' before starting ROOT ==="
else
@echo " === Run 'make install' now. ==="
endif
@echo " ============================================================"
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
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
ifneq ($(ROOT_OBJDIR),$(ROOT_SRCDIR))
Makefile: $(ROOT_SRCDIR)/Makefile
endif
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
ifneq ($(ROOT_OBJDIR),$(ROOT_SRCDIR))
cp $(ROOT_SRCDIR)/Makefile $@
endif
ifeq ($(findstring $(MAKECMDGOALS),distclean maintainer-clean debian redhat),)
Fons Rademakers
committed
echo ""; echo "Please, run $(ROOT_SRCDIR)/configure again as config option files ($?) have changed."; \
Fons Rademakers
committed
$(COMPILEDATA): $(ROOT_SRCDIR)/config/Makefile.$(ARCH) config/Makefile.comp Makefile \
$(MAKECOMPDATA) $(wildcard MyRules.mk) $(wildcard MyConfig.mk) $(wildcard MyModules.mk)
@$(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): $(CLINGO) $(COREO) $(COREDO) $(PCREDEP) $(CORELIBDEP)
@$(MAKELIB) $(PLATFORM) $(LD) "$(LDFLAGS)" \
Fons Rademakers
committed
"$(SOFLAGS)" libCore.$(SOEXT) $@ \
"$(COREDO) $(COREO) $(CLINGO) $(CLINGLIBEXTRA)" \
"$(CORELIBEXTRA) $(PCRELDFLAGS) $(PCRELIB) $(CRYPTLIBS)"
$(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
-@$(MAKE) distclean
-@$(MAKE) maintainer-clean
@vers=`sed 's|\(.*\)/\(.*\)|\1.\2|' < build/version_number` && \
rm -f root_v$$vers.source.tar.gz && \
(cd ../ && tar \
Fons Rademakers
committed
--exclude=\\.git \
--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
869
870
871
872
873
874
875
876
877
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
@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 \
lib/*.so.* *.def .def
Fons Rademakers
committed
ifeq ($(PLATFORM),macosx)
Fons Rademakers
committed
@rm -f lib/*.dylib
@rm -f lib/*.so
@(find . -name "*.dSYM" -exec rm -rf {} \; >/dev/null 2>&1;true)
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)
-@(mv -f tutorials/proof/ntprndm.root tutorials/proof/ntprndm.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)
-@(mv -f tutorials/proof/ntprndm.root- tutorials/proof/ntprndm.root >/dev/null 2>&1;true)
Fons Rademakers
committed
@rm -f $(ROOTA) $(PROOFSERVA) $(ROOTALIB)
@rm -rf README/ReleaseNotes
Fons Rademakers
committed
@rm -f etc/gitinfo.txt
@(find . -path '*/daemons' -prune -o -name *.d -exec rm -rf {} \; >/dev/null 2>&1;true)
@(find . -path '*/interpreter/llvm/src' -prune -o -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 \
build/misc/root-help.el build-arch-stamp build-indep-stamp \
configure-stamp build-arch-cint-stamp config.status config.log
distclean-xrootd:
make distclean-netx
make distclean-proofx
make distclean-proofd
version: $(ROOTEXE)
@$(MAKEVERSION)
Fons Rademakers
committed
staticlib: $(ROOTALIB)
Fons Rademakers
committed
static: $(ROOTA)
$(ROOTA) $(PROOFSERVA): $(ROOTALIB) $(MAKESTATIC) $(STATICOBJLIST)
@$(MAKESTATIC) $(PLATFORM) "$(CXX)" "$(CC)" "$(LD)" "$(LDFLAGS)" \
Fons Rademakers
committed
"$(XLIBS)" "$(SYSLIBS)" "$(STATICEXTRALIBS)" $(STATICOBJLIST)