Building a new version of the uboone product

In order for the uboone product to be able to appropriately handle the qualifiers and flavors available from larsoft and uboonecode, it is very useful to utilize the build capability of mrb and more complicated options of ups/upd. This is not necessary for ubtools, ubfcl, and ubxml since these products have no dependencies as they are just input files.

Overview of building the uboone product

There are four iterations of the uboone product build: SLF5:debug, SLF5:prof, SLF6:debug, and SLF6:prof. The process beings by creating a new mrb working area, declaring a new product (uboone), populating the srcs area for uboone, and then in four separate shells building and installing the product.

Creating the mrb working area

Login into the uboone account on one of the SLF5 uboone interactive nodes (uboonegpvm01/02/03):


Next you will create the mrb working area. You need to replace <version> with the version of uboonecode that you are building against (e.g. v1_00_02):

source /grid/fermiapp/products/uboone/
mkdir ~uboone/tmp/
cd ~uboone/tmp
mkdir ups_working_area_slf5_debug
cd ups_working_area_slf5_debug
mrb newDev -v <version> -q e4:debug
source <local_products_directory>/setup

Declaring the new product and populating the source directory

You need to add a new product to the mrb working area that is called uboone. (this is because there is no git repository explicitly containing just the uboone product)

cd srcs
mrb newProduct uboone
export CVSROOT=svn+ssh://
rm -f uboone/CMakeLists.txt
svn co --depth files $CVSROOT/trunk/products/uboone/
cd uboone
rm -f ups/product_deps ups/uboone.table
svn co --depth files $CVSROOT/trunk/products/uboone/ups/

You need to get the CMakeLists.txt and ups/product_deps files from the ubooneoffline svn repository so that the product will be built in ups correctly.

Editing the product_deps file for the build

At this point you should edit the srcs/uboone/ups/product_deps to increment the "parent uboone <version>" and update for new versions of uboonecode, ubtools, ubfcl, and ubxml. Please note that in the matrix of qualifier dependency you need to make sure that the column order always has the ubfcl dependencies listed in a column that is to the left of uboonecode. (This is so that the FHICL_FILE_PATH environmental variable has the correct order.)

Building the SLF5:debug version of the uboone ups product

At this point everything should still be logged into the SLF5 uboone node and will build the SLF5:debug dependencies for the uboone product.

cd ~uboone/tmp/ups_working_area_slf5_debug/build
source mrb setEnv
mrb i

This should have installed a version of the uboone ups product in the ~uboone/tmp/ups_working_area/<local_products_directory>uboone/<version>/

Creating the other mrb working areas of the uboone ups product

You will now create three other mrb working area that are based upon the same "srcs" area, build and install those version into the ups_working_area_slf5_debug. From within the same shell that you performed the build of the SLF5:debug version issue these commands:

cd ~uboone/tmp/ups_working_area_slf5_debug
mrb newDev -v <version> -q e4:prof -T ~uboone/tmp/ups_working_area_slf5_prof -f
mrb newDev -v <version> -q e4:debug -T ~uboone/tmp/ups_working_area_slf6_debug -f
mrb newDev -v <version> -q e4:prof -T ~uboone/tmp/ups_working_area_slf6_prof -f

Building the other mrb working areas and installing in the SLF5:debug area

In a new shell on an SLF5 machine (e.g. ssh ) issue the following commands:

cd ~uboone/tmp/ups_working_area_slf5_prof
source /grid/fermiapp/products/uboone/
source <local_products_directory>/setup
cd build
source mrb setEnv
mrb i -I ~uboone/tmp/ups_working_area_slf5_debug/<local_products_directory>

You then need to do similar commands on an SLF6 node (e.g. ssh )

cd ~uboone/tmp/ups_working_area_slf6_prof
source /grid/fermiapp/products/uboone/
source <local_products_directory>/setup
cd build
source mrb setEnv
mrb i -I ~uboone/tmp/ups_working_area_slf5_debug/<local_products_directory>

And finally, again in a fresh shell on an SLF6 node (e.g. ssh )

cd ~uboone/tmp/ups_working_area_slf6_debug
source /grid/fermiapp/products/uboone/
source <local_products_directory>/setup
cd build
source mrb setEnv
mrb i -I ~uboone/tmp/ups_working_area_slf5_debug/<local_products_directory>

Installing the uboone product in the production area

You just copy it over in the right way.

cp -r ~uboone/tmp/ups_working_area_slf5_debug/<local_products_directory>/uboone/<new version>/ /grid/fermiapp/products/uboone/uboone/
p -r ~uboone/tmp/ups_working_area_slf5_debug/<local_products_directory>/uboone/<new version>.version/ /grid/fermiapp/products/uboone/uboone/

Pushing updates back into repository

Then you need to push the updated product_deps and uboone.table files back into svn and copy it over to a new version in the products/uboone/<version>.

cd ~uboone/tmp/ups_working_area_slf5_debug/srcs/uboone/ups/
export CVSROOT=svn+ssh://
svn commit -m "message" 
svn copy $CVSROOT/trunk/products/uboone $CVSROOT/products/uboone/<new version> -m "Comment"