Installation of ROOT from source ================================ Contents: ========= 1. Getting the source 2. Getting ready to build 3. Choosing the installation method 3.1. Environment driven build 3.2. Fixed locations build 3.3. Redhat packages 3.4. Debian GNU/Linux packages 4. Installation Location 5. Makefile targets 6. Installing optional add-on libraries 6.1. Using the environment 6.2. Using "configure" flags 7. Information on third party software 7.1. Posix Thread usage 7.2. OpenGL library 7.3. SHIFT managed tape I/O 7.4. ZEBRA file conversion tools 7.5. MySQL client 7.6. PostGreSQL Client 7.7. SapDB Client 7.8. Pythia Event Generators 7.9. Venus Event Generators 7.10. Secure Remote Password (SRP) Authentication 7.11. AFS Authentication 7.12. Kerberos Authentication 7.13. Globus Authentication 7.14. SSH Authentication 1. 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 (ftp://root.cern.ch/root). The files are named root-.source.tar.gz. Here's a short summary: 1) Get access to the FTP area (substitute any FTP client and appropriate email address below): prompt% ftp root.cern.ch User: anonymous Password: 2) Go to the directory, and prepare for binary transfer of files: ftp> cd /root ftp> bin 3) Get the sources tar-ball (substitute the appropriate version number), and exit FTP client: ftp> get root-.source.tar.gz ftp> bye 4) Unpack the distribution: prompt% gzip -dc root-.source.tar.gz | tar -xf - An alternative approach is to use our public Subversion repository to get the latest version. See URL: http://root.cern.ch/twiki/bin/view/ROOT/SubversionHowto Here's a short summary: 1a) Get a specific version (>= 2.25/00), e.g.: version 2.25/03: prompt% svn co http://root.cern.ch/svn/root/tags/v2-25-03 root 1b) Alternatively, checkout the head (development version) of the sources: prompt% svn co http://root.cern.ch/svn/root/trunk root In both cases you should have a subdirectory called "root" in the directory you ran the above commands in. 2. 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-libdir=" 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. Note: With the advent of Cygwin 1.0 your system is mostly setup correctly by the setup.exe program. 3. Choosing the installation method: ==================================== There are two main methods of installing ROOT from source. As an alternative, you can build either a set of Debian GNU/Linux or Redhat Linux packages. 3.1. Environment driven build: ------------------------------ You want to install in a generic directory, depending on environment variables ROOTSYS, LD_LIBRARY_PATH, and PATH. 1) Get the sources of the latest ROOT (see above) 2) Type the build commands: cd root ./configure --help ./configure [change arch appropriately] (g)make [or, make -j n for n core machines] 3) Add bin/ to PATH and lib/ to LD_LIBRARY_PATH. For the sh shell family do: . bin/thisroot.sh and for the csh shell family do: source bin/thisroot.csh 4) try running root: root 3.2. Fixed locations build: --------------------------- 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 is trivial to install ROOT via a RedHat (.rpm) or Debian GNU/Linux (.deb) package (see also below). 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 some other way (like /etc/ld.so.conf) of making the dynamic loader aware of where you installed the ROOT libraries. 1) Get the sources of latest ROOT (see above) 2) Now type the build commands: cd root ./configure --help ./configure --prefix=/usr/local [change arch appropriately] (g)make [or, make -j2, for dual CPU machines] (g)make install [su to root if --prefix points to a system dir] 3) Update the ldconfig cache by doing: ldconfig 4) try running root: root 3.3. Redhat packages: --------------------- Get the sources for a specific release from Subversion or from a tar-ball, as outlined above and cd into the source directory. Then just do make redhat This will create a RPM spec file in the source tree. To build the packages do: 1) Make a tar-ball of the source tree: cd ../ tar -czvf root-v.source.tar.gz where =.. is the version number of ROOT (see the file build/version_number). 2) A) If you have system privileges, you can now do: cp root_v.source.tar.gz /usr/src/redhat/SOURCES/ or where ever RPM looks for source archives. B) However, if you don't have system privileges, you should set up a build area by having the file ~/.rpmrc with a contents like: %macrofiles: /usr/lib/rpm/macros:/.rpmmac and a file /.rpmmac with a contents like: %_topdir /redhat Then you should make the appropriate directories: mkdir /redhat mkdir /redhat/SOURCES mkdir /redhat/BUILD mkdir /redhat/RPMS mkdir /redhat/SRPMS mkdir /redhat/SPECS and finally copy the source tar-ball: cp root_v.source.tar.gz \ /redhat/SOURCES 3) Wether you have system privileges or not, you can now build the RPM packages by issuing (Red Hat 7.3 or less): rpm -ba root.spec or (Red Hat 8.0 or above): rpmbuild -ba root.spec If you left the spec file in the source tree, you can build directly from the tar-ball. You still need to have a proper build area setup, as outlined above. All you need to do is: rpm -ta root_v.source.tar.gz (Red Hat 7.3-) rpmbuild -ta root_v.source.tar.gz (Red Hat 8.0+) Per default the binaries will be build in /tmp/rootrpm, but one may change that at build time by passing the option --buildroot too rpm. Please refer to man-page rpm(1) and http://www.rpm.org for more information on RPM. Please note, that all possible packages may not be specified in the spec file. See also build/package/common/README. 3.4. Debian GNU/Linux packages: ------------------------------- Get the sources for a specific release from Subversion or from a tar-ball, as outlined above and cd into the source directory. Then just do make debian The packages will be build in "../". Please note, that all possible packages may not be specified in the debian directory file. See also build/package/common/README. 4. 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 (section 3.2), 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 (/bin) This is where the ROOT applications (root, cint, rootcint, etc.) will be installed. * libdir (/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 (/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 (/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 (/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 (/proof) PROOF utilities directory. Various PROOF utility scripts as well as example configurations are installed into this directory. * macrodir (/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 (/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 (/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 (/src) Sources installation directory. Currently not used! * docdir (/doc/root) Documentation, like the LICENCE, README, etc. files will be installed into this directory. * testdir (/test) The test applications and libraries will be installed here. * tutdir (/tutorial) All the tutorials will be installed in this directory. 5. Makefile targets: ==================== The Makefile system and supported make targets are explained in the BUILDSYSTEM file. 6. Installing optional add-on libraries: ======================================== There are two ways in which you can specify additional features to build into the ROOT system: 6.1. Using the environment: --------------------------- 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 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 TABLE=yes # to build the Table 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. corresponding to your architecture. 6.2. 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=