Installing ROOT from Source
Getting the source
To install ROOT from source you first have to get the tar file
containing the source. This tar file can be found in the usual
ROOT download area.
The files are named root-<version>.source.tar.gz.
Here's a short summary:
-
Get access to the FTP area (substitute any FTP client and appropriate
email address below):
prompt% ftp root.cern.ch
User: anonymous
Password: <your-email-address>
-
Go to the directory, and prepare for binary transfer of files:
ftp> cd /root
ftp> bin
-
Get the sources tar-ball (substitute the appropriate version
number), and exit FTP client:
ftp> get root-<version>.source.tar.gz
ftp> bye
-
Unpack the distribution:
prompt% gzip -dc root-<version>.source.tar.gz | tar -xf -
An alternative approach is to use our public CVS repository to get
the latest version. See URL: http://root.cern.ch/root/CVS.html.
Here's a short summary:
-
Login to server, using anonymous read-only access:
prompt% cvs -d :pserver:cvs@root.cern.ch:/user/cvs login
Password: cvs
-
Get a specific version (>= 2.25/00), e.g.: version 2.25/03:
prompt% cvs -d :pserver:cvs@root.cern.ch:/user/cvs export \
-r v2-25-03 root
-
Alternatively, checkout the head (development version) of the sources:
prompt% cvs -d :pserver:cvs@root.cern.ch:/user/cvs co root
In both cases you should have a subdirectory called "root" in the
directory you ran the above commands in.
Getting ready to build
You may want to compile features into ROOT, which depends on third
party libraries. Make sure you meet all demands for additional
features before trying to enable them (see below).
If you are using some Un*x, you need to have libXpm installed. On very
few systems libXpm.a is not available. In that case get the pre-built
version from:
ftp://root.cern.ch/root/xpm
Then use either environment variable XPM or "configure" flags
"--with-xpm=<dir>" to specify where you installed libXpm, if you
didn't install it in some generally searched directory (see more
below).
If you are using Windows make sure you've installed Cygwin
http://sources.redhat.com/cygwin/
and that it is setup correctly, see:
http://root.cern.ch/root/Cygwin.html
Before proceeding read the complete document.
Choosing the installation method
There are two main methods of installing ROOT from source.
-
You want to install in a generic directory, depending on
environment variables ROOTSYS, LD_LIBRARY_PATH, and PATH.
-
get the sources of the latest ROOT (see above)
-
set ROOTSYS to the `root' directory:
sh family:
export ROOTSYS=/root
csh family
setenv ROOTSYS /root
-
now type the build commands:
all shells:
./configure --help
./configure <arch> [change arch appropriately]
gmake [or, make -j2 for dual CPU machines]
gmake install [when run directory is not $ROOTSYS]
-
add $ROOTSYS/bin to PATH and $ROOTSYS/lib to LD_LIBRARY_PATH:
sh family:
export PATH=$ROOTSYS/bin:$PATH
export LD_LIBRARY_PATH=$ROOTSYS/lib:$LD_LIBRARY_PATH
csh family:
setenv PATH ${ROOTSYS}/bin:${PATH}
setenv LD_LIBRARY_PATH ${ROOTSYS}/lib:${LD_LIBRARY_PATH}
rehash
-
try running root:
all shells:
root
-
You want to install ROOT in a fixed location, not depending on
ROOTSYS. Typically you want to do this when installing in a
location like `/usr/local/bin' or even `/usr/bin'. This allows you,
and all others on your system, to run ROOT without having to setup
ROOTSYS and special PATH and LD_LIBRARY_PATH variables.
This scheme also makes it easier to make ROOT
distributions/installations that fit with an existing system. E.g.,
it should be trivial to install ROOT via a RedHat (.rpm) or Debian
GNU/Linux (.deb) package.
It's strongly recommended to enable version numbers in sonames
(if possible) using this method (see --enable-soversion
below). Also, using the --enable-rpath option to "configure" you
can set the load path to the ROOT libraries on the
applications. However, this is not recommended if you have soome
other way (like /etc/ld.so.conf) of making the dynamic loader
aware of where you installed the ROOT libraries.
-
get the sources of latest ROOT (see above)
-
now type the build commands:
all shells:
./configure --help
./configure <arch> --prefix=/usr/local [change arch appropriately]
gmake [or, make -j2, for dual CPU machines]
gmake install [su to root if --prefix points to a system dir]
-
try running root:
sh family:
root
csh family:
rehash
root
Installation Location
By default, the system will be installed depending on the ROOTSYS
environment variable. In that case the whole package will live under the
directory ROOTSYS points to.
Using the fixed location mode (option 2 above), the default `--prefix'
path is `/usr/local', which will result in the ROOT files to be installed
in `/usr/local/bin', `/usr/local/lib', etc. You can specify an installation
prefix other than `/usr/local' by giving `configure' the option
`--prefix=PATH'. For more detailed location specifications see
`configure --help'.
Here's the complete list:
-
prefix (/usr/local)
Installation prefix. This will prefix any installation directory not
explicitly specified.
-
bindir (<prefix>/bin)
This is where the ROOT applications (root, cint, rootcint, etc.)
will be installed.
-
libdir (<prefix>/lib/root)
Library installation directory. All the class libraries of ROOT will
be installed into this directory. You should make your dynamic
linker aware of this directory. On Linux - and some other Un*ces -
this directory can be added to /etc/ld.so.conf and ldconfig should
be run afterward (you need to be root - the user - to do
this). Please note, that this directory should probably not be
something like /usr/lib or /usr/local/lib, since you'll most likely
get a name clash with ROOT libraries and other libraries
(e.g. libMatrix.so); rather use something like /usr/local/lib/root
-
incdir (<prefix>/include/root)
Header installation directory. All the header (declaration) files
for the ROOT classes will be installed into this directory. This
should be parallel to libdir, for consistency.
-
etcdir (/etc/root)
Configuration files installation directory. The system-wide
system.rootrc and root.mimes will be installed into this directory.
-
mandir (<prefix>/share/man/man1)
Installation directory for the ROOT man(1) pages. This should be
somewhere searched by man(1). On most Un*x you can set the search
path for man(1) via environment variable MANPATH. On some systems, a
special configuration file /etc/manpath.config exist and should be
used. See also man(1) - type man man in the prompt - on your
system.
-
datadir (<prefix>/share/root)
Top-level data installation directory. Under this directory, various
data files needed by ROOT will be installed, either in
subdirectories, or directly.
-
proofdir (<datadir>/proof)
PROOF utilities directory. Various PROOF utility scripts as well as
example configurations are installed into this directory.
-
macrodir (<datadir>/macros)
Macro installation directory. Macros - properly called scripts -
provided by the ROOT system are installed into this directory. ROOT
- the application - will always search this directory for scripts.
-
cintincdir (<datadir>/cint)
CINT data directory. In this directory, the CINT runtime headers
will be installed, both the standard headers, as well as
pre-processed once.
-
iconpath (<datadir>/icons)
Icon installation directory. The icons used by the TBrowser and other
classes will be installed into this directory. The user can specify
additional directories in using the "--with-sysicondir" option.
-
srcdir (<datadir>/src)
Sources installation directory. Currently not used!
-
docdir (<prefix>/doc/root)
Documentation, like the LICENCE, README, etc. files will be
installed into this directory.
-
testdir (<docdir>/test)
The test applications and libraries will be installed here.
-
tutdir (<docdir>/tutorial)
All the tutorials will be installed in this directory.
Makefile targets
The Makefile system and supported make targets are explained in the
BUILDSYSTEM file.
Installing optional add-on libraries
If you want to compile the ROOT optional add-on libraries to handle
True Type fonts, OpenGL graphics, SRP authentication, MySQL access,
RFIO access and event generator interfaces (Pythia, Pythia6 and
Venus) you can either specify the options as environment variables.
For example:
# Used during build of ROOT can be overridden in ./configure
export ROOTBUILD=debug # see $ROOTSYS/README/BUILDSYSTEM
export CERNLIB=~/cernlib # must contain libpacklib.a libkernlib.a
export RFIO=~/shift/lib # CERN's SHIFT library, must
# contain libshift.a
export TTF=~/ttf # must contain fonts/ (and possibly
# include/ lib/)
export OPENGL=~/Mesa # must contain include/ lib/
export SRP=~/src/srp # must contain include/ lib/
#export AFS= # must contain include/ lib/
#export XPM= # must contain libXpm
#export MYSQL= # must contain include/ lib/
#export PYTHIA= # must contain libPythia
#export PYTHIA6= # must contain libPythia6
#export VENUS= # must contain libVenus
#export STAR=yes # to build the STAR contrib library
The ROOTBUILD environment variable is special and architecture
dependent. To get an idea of which values it can take, take a look in
the config/Makefile.<architecture> corresponding to your
architecture.
Using "configure" flags
You can also specify additional features and external linking using
command line options - or flags - to the configure script.
A special flag is "--build=<option list>" which correspond to the
ROOTBUILD environment variable, as described above.
The flags consist of two classes:
-
--enable-<feature>/--disable-<feature> flags:
These flags enables/disables support for the corresponding feature
<feature>. Specifying such a flag will make the configure script
look for third-party libraries, headers, etc. at default
locations.
If you find that the default locations does not work with some
standard path e.g., on OS <Foo>, library lib<Bar>, is in general
installed in path <Baz>, but "configure" doesn't look there, please
file a bug report with rootbugs@root.cern.ch.
If, for some reason, you have installed some third-party library
outside it's usual location, you can make "configure" look for it
using the corresponding "--with-<feature dir>" option (see below).
By default, all features are enabled, except for a few cases (noted
below).
Here's a list of supported features:
-
shared
Use shared 3rd party libraries if possible. Some platforms assume
this by default, others do not support it at all. Default is true.
-
rpath
Set library path on executables. This is only supported on some
platforms. Default is false.
-
soversion
Include the major version number of ROOT in the soname of the
shared libraries. This means that you'll have an additional check
on whether your applications are linked to the proper runtime
libraries. It's strongly encouraged to use this option. This
options is only supported on some platforms. Default is false.
-
star
Build STAR contributed library, including new containers and
extended 3D geometry descriptions. Default is false.
-
thread
Compile ROOT thread safe, as well as a thread API library. This
options is strongly recommended. This requires the system library
libpthread (Posix threads). Default is false, except for the
"linuxegcs" architecture.
-
ttf
True Type Font support for those OSs with no native TTF
support. This feature requires third-party library libtff, header
files and True Type fonts. Default is true.
-
opengl
OpenGL (3D rendering and visualisation) support. This is
especially powerful if you have a 3D accelerated card and a
proper OpenGL interface for your graphics system. This requires
the third party libraries libGL and libGLU - or libMesaGL and
libMesaGLU, as well header files for these libraries. For
platforms with native OpenGL suppport (Windows), this is always
enabled, even if the --disable-opengl flag is set. Default is true.
-
cern
Build h2root and g2root utilities to convert ZEBRA files with
HBOOK histograms and/or Ntuple, and GEANT geometries
respectively, into ROOT structures in ROOT files. This requires
the third-party libraries libkernlib and libpacklib from the
CERNLIB distribution. Default is true.
-
mysql
Build a thin MySQL client for ROOT. This requires the third-party
library libmysqlclient and header files. Note that there may be
licensing issues regarding linking against libmysqlclient.
Default is true.
-
shift
Interface to SHIFT managed tape robots. This option requires you
get the libshift.a from CERN. Please note, that this library is
only available as a static library (archive), and will always be
statically linked in. There may be licensing issues involved.
Default is true.
-
pythia
Build thin wrapper for the Pythia Event Generator (version
5). This requires the third party library libPythia. Default is true.
-
pythia6
Build thin wrapper for the Pythia Event Generator (version
6). This requires the third party library libPythia6. Default is true.
-
venus
Build thin wrapper for the Venus Event Generator. This requires
the third party library libVenus. Default is true.
-
srp
Build daemons rootd and proofd with SRP support. This requires
the full third-party SRP distribution to be installed and build.
Default is true.
-
afs
Build daemons rootd and proofd with AFS support. This requires
the third-party AFS libs and objects. Default is false.
-
"--with-<feature dir>=<dir>" flags:
If "configure" isn't able to find some third-party library, header,
or other file, corresponding to one of the above features, you can
force it to look for these files in specific directories, using the
"--with-" options.
Using a "--with-<feature dir>=<dir>" will make "configure" look for
whatever needed by <feature> in <dir>, and will also enable the
corresponding feature. Hence, you do not need to specify
"--enable-<feature>" if you give an "--with-<featuredir>=<dir>".
The inverse - of course - isn't true.
Here is a list of "--with-" flags:
-
xpm
Directory containing libXpm.{so,a}. This option is special, since
this doesn't correspond to any feature, as described
above. However, the XPM library is needed on Un*x, and if
installed somewhere non-standard, this option may help you.
-
thread
Directory containing libpthread.{so,a} (Posix thread
library). It's highly unlikely that you need to specify this
option, since libpthread is completely standard on Un*x, and
should be found by "configure".
-
sys-iconpath
Extra icon path for TBrowser, etc. This, again doesn't correspond
to any feature, but provides you with way of getting the TBrowser
and others to look for additional icons in some system-wide
directory.
-
ttf-incdir
Directory containing freetype.h, needed by feature ttf.
-
ttf-libdir
Directory containing libttf.{so,a}, needed by feature ttf.
-
ttf-fontdir
Directory containing TTF font files, needed by feature ttf.
"configure" is looking for "arial.ttf", which must be present.
-
opengl-incdir
Directory containing GL/gl.h (note the sub-directory), needed by
feature opengl.
-
opengl-libdir
Directory containing libGL.{so,a} and libGLU.{so,a} -
alternatively libMesaGL.{so,a} and libMesaGLU.{so,a} - needed by
feature opengl.
-
mysql-incdir
Directory containing mysql.h, needed by feature mysql.
-
mysql-libdir
Directory containing libmysqlclient.{so,a}, needed by feature mysql.
-
pythia-libdir
Directory containing libPythia.{so,a}, needed by feature pythia.
-
pythia6-libdir
Directory containing libPythia6.{so,a}, needed by feature pythia6.
-
venus-libdir
Directory containing libVenus.{so,a}, needed by feature venus.
-
cern-libdir
Directory containing libpacklib.{so,a} and libkernlib.{so,a},
needed by feature cern, for the ZEBRA file converters.
-
shift-libdir
Directory containing libshift.a, needed for feature shify.
-
srp
Top directory of the SRP (Secure Remote Passwd). This directory
must contain:
base/libmisc/libmisc.a
base/lib/libshadow.a
lib/libsrp.a
include
And alternatively
lib/libgmp.a
lib/libcrack.a
This is needed for building the daemons rootd and proofd with
SRP support (authentication).
-
afs
Top directory of the AFS distribution. This directory must
contain:
lib/libubik.a
lib/librxkad.a
lib/libdes.a
lib/librx.a
lib/liblwp.a
lib/afs/libkauth.a
lib/afs/libprot.a
lib/afs/libauth.a
lib/afs/libsys.a
lib/afs/libcmd.a
lib/afs/libcom_err.a
lib/afs/libaudit.a
lib/afs/util.a
This is needed for building the daemons rootd and proofd with
AFS support (authentication).
Information on third party software
The optional add-ons are not necessary for the proper functioning of
ROOT but we advice you to at least get the True Type fonts since they
hugely increase the appearance of text on the screen.
Posix Thread usage
To build the library providing thread support you need to have the
library libpthread.{a,so} and header files installed. This is usually
the case for any Un*x OS. For architecture "linuxegcs" thread support
will always be build.
True Type Font library and fonts
On how to get the True Type ttf directory see:
http://root.cern.ch/root/TrueType.html
For prebuilt versions see:
ftp://root.cern.ch/root/ttf/
Most Linux distributions have a freetype package with the needed
library and headers, but seldomly do they provide the fonts. You can
get a minimal set of fonts from:
ftp://root.cern.ch/root/ttf/ttf_fonts.tar.gz
OpenGL library
On how to get an open source version of OpenGL see:
http://www.mesa3d.org
For prebuilt versions see:
ftp://root.cern.ch/root/opengl/
Most Linux distributions come with a Mesa package, providing the
needed headers and libraries. Also, the OpenGL libraries are already
in XFree86 version 4 or above.
SHIFT managed tape I/O
To build the library providing CERN RFIO (remote I/O)
support you need
to get the "libshift.a" library from CERN. You can get pre-build
libraries from
http://root.cern.ch/root/shift
or you can download the full source from
http://wwwinfo.cern.ch/pdp/serv/shift.html
Please note the the source code isn't GNU library compliant, so you
may need the following patch to compile on a GNU based system
(e.g. Linux).
http://cholm.home.cern.ch/cholm
Apply it with
prompt% patch -p 1 -d shift < shift_1.10-1.10_cholm.patch
ZEBRA file conversion tools
To build the HBOOK and Geant3 conversion programs `h2root' and
`g2root' you need the CERNLIB components "libpacklib.{a,so}" and
"libkernlib.{a,so}" from CERN. You can get it from
ftp://asisftp.cern.ch/cernlib
MySQL client
To build the MySQL interface library you need to install MySQL first. See:
http://www.mysql.com/
Pythia Event Generators
To build the event generator interfaces for Pythia and Pythia6, you
first have to get the pythia libraries. You can get pre-build
libraries from:
ftp://root.cern.ch/root/pythia/
or you can download the source from the same directory. The original
sources can be found via Lunds FTP server.
More information is avaliable from:
http://www.thep.lu.se/~torbjorn/Pythia.html
Venus Event Generators
No information at this time.
Secure Remote Password (SRP) Authentication
To build the strong authentication module used by rootd and proofd,
you first have to install the SRP (Secure Remote Password)
system. See:
http://srp.stanford.edu/
Please note, that the library "libsrp-dev" as distributed by Standford
is not enough.
AFS Authentication
To build rootd and proofd with support for AFS authentication, you
first have to install AFS client libraries system. There are a few AFS
distributions avaliable.
Rene Brun,
Fons Rademakers
Last update 11/12/2000 by FR