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/setup_uboone.sh 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://email@example.com/cvs/projects/ubooneoffline/ 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 firstname.lastname@example.org) issue the following commands:
cd ~uboone/tmp/ups_working_area_slf5_prof source /grid/fermiapp/products/uboone/setup_uboone.sh 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 email@example.com)
cd ~uboone/tmp/ups_working_area_slf6_prof source /grid/fermiapp/products/uboone/setup_uboone.sh 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 firstname.lastname@example.org)
cd ~uboone/tmp/ups_working_area_slf6_debug source /grid/fermiapp/products/uboone/setup_uboone.sh 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://email@example.com/cvs/projects/ubooneoffline/ svn commit -m "message" svn copy $CVSROOT/trunk/products/uboone $CVSROOT/products/uboone/<new version> -m "Comment"