Wire Cell News

Updates on the Wire Cell Toolkit.

ROOT dependency management changes

A change is recently made to how WCT depends on ROOT. This dependency has been concentrated to a single, new package, not surprisingly called wire-cell-root.

The WCT build system based on waf uses a very simple source package handling which encourages creation of new packages and creating flexible combinations of packages into a source distribution. One aspect of this is that it allows three independent dependency trees to be expressed. One tree for "libs", "tests" and "apps" (ie, main programs that aren't test programs). These trees are defined by the various use keyword arguments to the bld.smplpkg() function called inside the wscript_build file in each package.

Until recently, the dependency policy allowed for ROOT code to be used in tests of the core packages but not in the libs of these packages. This allowed WCT to be free of ROOT dependency in principle, but not in fact. The user/installer was forced to install ROOT even if it was not strictly required. The benefit to developers was that they could house their tests "close" to the code that was being tested. On balance, this benefit to developers does not outweigh the cost to user.

A recent refactoring has fixed this balance. All test code that depends on ROOT has been moved to the test/ directory of wire-cell-root. The only package that had a lib that included ROOT was wire-cell-sio (simple I/O). Some of its components wrote or read ROOT files so explicitly had to depend on ROOT software. These have also been moved to wire-cell-root and the SIO package can now be considered "core".

To explicitly build free of ROOT one may use the --with-root option:

$ ./wcb configure --with-root=false [...]

Otherwise the ROOT dependency will continue to be built into WCT but only if it is found. And the installer may still force a particular ROOT by providing a location to --with-root.