Cet build-packaging work - day two

Marc and Kurt's notes for case 4.

  • document that need ups tools (setup)
  • document that you need to setup art
  • need best practice guide:
  • -- recommended directory structure
  • product name as top level source code directory
  • -- include path
  • tool to make directory structure (cet_new_product)
  • CMakeLists.txt for top and all subdirectories
  • commented out example stuff
  • comments must be very explicit - "here's how"
  • executable, tests, dynamic libraries, static libraries
  • working example would be nice
  • cleanup extra stuff - how?
  • unless have cleanup, prefer that generated cruft is example/how-to rather than bogus code
  • "give me examples" optional command to copy in ToyCmake or something
  • need corresponding "remove examples"
  • fill out contents of ups directory
  • must write setup_for_development
  • -- need to know dependencies
  • -- product name and product version, qualifier if needed (min req version should be the same?)
  • Tool to add new dependency.
  • Look at table file and check for consistency.

install header macro should have exclude option

We note that keeping minimum required version up to date in CMakeLists.txt is a problem.

purpose of cet_cmake_env is unclear - documentation..

write list of products -- what qualifier to stitch there
add by hand - comment area for +$CETPKG_QUAL$extraqual

Range is possible, but how do we know what the range is until we get there?

Check dependency command?? Tool is linker. Can set flag to fail with unresolved dependencies. Can't do this when using root.
Possible to build root differently to allow this, but heading to uncharted territory.
Some root libraries depend on static initialization order. Can build root with libraries internally linked. Not sure if this solves the static initialization problem.

Qualifiers are a nightmare for users - most complex thing in system.

Art has large list of dependencies. Just want to depend on art.
CMakeLists.txt file...
Need art cmake thing to be used by find_package...
-- library list (link time)

current setup_for_development
-- write to log and echo problems to screen (aka buildtool)

Tool to add products -- add/remove/modify
For anytime where you have to change more than one place.

Better error messages
-- find_library - error is not helpful
-- symbol undefined - "not found"
-- see Marc & Kurt's notes
FAQ is OK if too hard

buildtool h
writes to stderr

how to test installed product
go to new shell and try using it
can this be easier?
general problem is hard
Chris has plan to check for execs - spawn shell, setup product,
command: here are the executables and libraries that will be installed?

Dependency check - suggest missing dependencies
is this even possible?

ups setup needs to fail properly

best practice recommendation
list all DIRECT dependencies

Jim's notes:
  • lots of boilerplate required
  • user guide needs to explain buildtool
  • add product (clhep) to product list
  • - problem specifying qualifier line
  • add find_ups_product and find_library for clhep
  • macros added to src instead of top
  • tools need messages
  • buildtool -? (could that be recognized as well as -h?)
  • need tool to tell you that you should run make, setup_for_development, etc. as appropriate

automate bumping version?
Can we get an embedded version?
Want facility that allows us to punch version number into every dynamic library.
Tag development libraries with version-dev (or some such)
Production build uses special directive to override this.
How do we distinguish between my build and your build?
Maybe we don't care.

  • develop fhiclcpp
  • - changing both art and fhiclcpp
  • - need messagefacility in local build
  • - can the system recognize this?
  • - prefer overall build option, not one at a time
  • conflicting versions of fhiclcpp with messagefacility
  • how to not need the "unsetup fhiclcpp" step to get the one you want?
  • will ups depend tell us if there an internal inconsistency in product versions?
  • tool to modify version of XX modifies version in other packages you might be working on that use XX
  • rsync of /products from cluck caused confusion
  • problem of how clean is your environment
  • really, really need skeleton package tool
  • in this case, need a tool that can populate existing code (directory structure) with CMakeLists.txt

user guide needs to recommend buildtool, not cmake/make

work environment
  • working in sandbox, aka test release
  • devel/checkouts devel/build devel/products
  • Adam, Ron, Jim will write requirements
  • Want facility to jam version into art libraries when make package is run.
  • May also need this for make install (with separate special flag).
  • Default is just "development" or maybe "version-devel".
  • Ron will investigate appropriate library link command.

Day 2 qualifier discussion