(Build packages required by art) (Build a distributable ups) (Building art externals)
(Building extra packages for the neutrino experiments) (Building extra packages for Mu2e)
(Building CET packages and art)

Building art externals

These instructions should be considered obsolete. Please see the download page for the art distribution.

external packages needed by ART
Product Qualifier Extra Qualifier Notes
ups build first
upd installed by ups build
cmake build second
gcc build or install second
boost eN debug, opt, or prof built without boost python libraries
clhep eN debug, opt, or prof
cppunit eN debug, opt, or prof
fftw gccXX debug, opt, or prof required by root
gccxml gccXX build requires cmake
libsigcpp eN debug, opt, or prof
libxml2 gccXX debug, opt, or prof required by root
python gccXX required by root
sqlite gccXX debug, opt, or prof
tbb eN debug, opt, or prof
root eN, nu:eN, mu2e:eN debug, opt, or prof build last

These directions start from scratch by building EVERYTHING.
Tarballs for supported distributions of art_exernals are at

<product-dir> is the fully qualified path to your external packages directory.

  • The build order is very important. Several products rely on the existence of other products.
  • We start by building those products which have no depencencies except the existence of ups.
  • Next, we build products which depend only on gcc and cmake.
  • Within these sub-groups, products can be built in any order, and in parallel.
  • We recommend that you look at the various log files after they are created.

1. Make sure you have ups and cmake installed in your <product-dir>

Build ups and cmake

Make sure you have the lastest ups release.
See the list at

Make sure you downloaded all the source code.

2. Setup the environment

source <product-dir>/setup

3. Next, build gcc:

cd <product_dir>/gcc/<version>/
./ >& log.buildGCC &

If building on ubuntu, make sure dejagnu is installed.
Please note that we require that gcc be available as a ups product.
Building gcc takes a long time. If available, you may prefer to download and install a binary tarfile from For instance:

cd <product_dir>
curl -O
tar xf gcc-4.8.1-slf5-x86_64.tar.bz2
rm gcc-4.8.1-slf5-x86_64.tar.bz2

4. Now, build remaining packages with this gcc

There are 3 available build types: opt, debug, and prof.
If you are unsure which to use, start by building for debug.
We have found very little difference in performance between opt and prof, and therefore recommend building prof (for profile) for increased performance.

You MUST specify the "basequal" and either debug, opt, or prof
We will refer to this as <extra_qual> in the directions below.

cd <product_dir>/art_externals/<version>/scripts
./ <product_dir> <basequal> <extra_qual>
for instance: ./ $PRODUCTS e4 prof

5. Getting root

ROOT is a complex product which depends on various other products. will do the basic build of root
However, builds of root for nu and mu2e require that you have already built either nu_extras or mu2e_extras

6. Distributing art_externals

Verify that ups recognizes all the products

  • List all the products in <product-dir>
ups list -aK+

Your output might look like this:

"boost" "v1_45_0" "Linux64bit+2.6-2.5" "gcc45" "" 
"clhep" "v2_1_0_1" "Linux64bit+2.6-2.5" "gcc45" "" 
"cmake" "v2_6_4" "Linux64bit+2.6-2.5" "" "current" 
"cppunit" "v1_12_1" "Linux64bit+2.6-2.5" "gcc45" "" 
"fftw" "v3_2_2" "Linux64bit+2.6-2.5" "gcc45" "" 
"gcc" "v4_5_1" "Linux64bit+2.6-2.5" "" "" 
"gccxml" "v0_9_20101128" "Linux64bit+2.6-2.5" "gcc45" "" 
"libsigcpp" "v2_2_7" "Linux64bit+2.6-2.5" "gcc45" "" 
"libxml2" "v2_7_8" "Linux64bit+2.6-2.5" "gcc45" "" 
"python" "v2_4_2b" "Linux64bit+2.6-2.5" "gcc45" "" 
"root" "v5_28_00a" "Linux64bit+2.6-2.5" "gcc45" "" 
"upd" "v4_7_4b" "NULL" "" "current" 
"ups" "v4_9_1" "Linux64bit+2.6-2.5" "" "current" 
  • List the dependencies of root
ups depend root <version> -q <eN>:<extra_qual>

Your output might look like this:

$ ups depend root v5_34_05 -q e2:prof
root v5_34_05 -f Linux64bit+2.6-2.5 -z /archives/fwdev/externals -q e2:prof
|__fftw v3_3_2 -f Linux64bit+2.6-2.5 -z /archives/fwdev/externals -q gcc47:prof
|  |__gcc v4_7_1 -f Linux64bit+2.6-2.5 -z /archives/fwdev/externals
|__libxml2 v2_8_0 -f Linux64bit+2.6-2.5 -z /archives/fwdev/externals -q gcc47:prof
|__python v2_7_3 -f Linux64bit+2.6-2.5 -z /archives/fwdev/externals -q gcc47

Build the distributable ups tar file.

  • Some definitions used to name the tarball:
  • version: usually written as, for instance, 0.5.0 instead of v0_5_0
  • os: sl4, sl5, etc.
  • architecture: noarch, i686, or x86_64
  • compiler: e2, gcc47, etc.
  • For general distribution, we allow people to define their own <product-dir>, so we build the tarball from inside <product-dir>
  • Note that there are two hidden directories, .updfiles and .upsfiles, which need to be included explicitly
  • For art_externals, we put everything in one tarball since the noarch part is very small compared to the architecture specific part.
  • Note that <product-dir> may also contain other products. These instructions are just for the products distributed as art_externals.
cd <product_dir>/art_externals/<version>
./ <product_dir> <basequal> <extra_qual>
  • This will create <product_dir>/art_externals-<version>-<os>-<architecture>-<basequal>-<extra_qual>.tar.gz

7. Getting a prebuilt tarball