UPS and external products

Important note: as of 10/18/2010 the instructions retained at bottom for historical purposes only are now obsolete.

Instead, the UPS table file for each product as generated by cmake using instructions that can be found in the example ToyCmake area of the cetbuildtools package will list (and therefore ensure the setup of) all packages satisfying the product's dependencies. These packages may be installed en masse in a relocatable-UPS area using "roll-up" tarballs which should be provided for each CET product containing a coherent set of packages satisfying that product's dependencies. In addition, individual external packages may be installed to satisfy a dependency (eg on oink by a developer testing a new version of a product) using the centrally-supported UPD utility. Going forward, there is no need to provide XXX_externals packages as this would only provide enhanced functionality over the above-mentioned procedure in the case where client groups were willing to use UPD (which is not the case at this time).


We do not yet have a detailed plan on getting the mu2e_externals into the simplified UPS structure
that Ron provided. Below is an example of installing geant4.

I think we need to do things in groups, similar to how the current mu2e_externals is.
How about the following subproducts:

  • ROOT
  • GEANT4 (only if needed)
  • all others

There should be a "mu2e_externals" product that depends on a version of each of the above subproducts.

How I got geant4 going

Geant4 can now be set up using UPS on oink. It has been installed according to Ron's procedure.
It can also be "unsetup". Doing a "ups list" will show it. What is missing are qualifiers.
For this version, it is compiled optimized -O2 with symbols.

Here are the preliminary steps to establish the geant4 product:

 $ cd /p
 $ mkdir geant4
 $ cd geant4
 $ mkdir v4_9_2
 $ mkdir v4_9_2_work
 $ cp ../current.chain .
 $ cp ../generic.table v4_9_2.table
 $ cp ../vX_Y.version v4_9_2.version

The geant4 unwinding and building procedure is in the UPS directory /p/geant4/NOTE.txt.
The procedure runs a unpack, setup, and build script derived from our geant4 performance measurement package.
This script is ~jbk/bin/ The entire UPS setup procedure goes like this:

 $ cd /p/geant4
 $ cd v4_9_2
 $ cp ~jbk/bin/ . # and add 2 more sed statements -- this is now
                                     # the new ups compatible
 $ tar zxvf /work/downloads/geant4.9.2.tar.gz
 $ mv geant4.9.2/* .
 $ ./
 $ source
 $ cd source
 $ make -j 8
 $ make global
 $ make includes

Now edit the current.chain file.
Change the "VERSION" line to "VERSION=v4_9_2", and adjust the DECLARED and MODIFIER.

Now edit the v4_9_2.table file.
Add "PRODUCT=geant4" after the "FILE" line.
See the SETUP section for the rest of the changes. This one is interesting because it needs to source a configuration file ( created during the geant build using the UPS SourceOptional.
I also created an "" script that removes the environment variables and information from LD_LIBRARY_PATH that geant4 adds during setup.

Now edit the v4_9_2.version file.
Add "PRODUCT=geant4" after the "FILE" line.
Change the VERSION line so it reads "VERSION = v4_9_2".
Make sure "TABLE_FILE" has the value v4_9_2.table.
Make sure "PROD_DIR = geant4/v4_9_2" is there.

You will need to be sure the ownership and permissions are set properly. I built and installed
everything as jbk during this procedure.

You should now be able to do "setup geant4" and "unsetup geant4".