upd config file

The upd user callouts (updusr.pm) are not as user-friendly as is required, so we have added one such module which reads a ups-database-style file to decide important upd install issues, and make that the default user callout module. I describe it in the form of an example:
File = updconfig

group:
  product = ANY
  flavor= IRIX+6
  flavor = IRIX+5
  qualifiers = ANY
  options = ANY

common:
     UPS_THIS_DB = "/usr/products/irix6/upsdb"
 UNWIND_PROD_DIR = "/usr/products/irix6/${UPS_PROD_NAME}/${UPS_PROD_VERSION}/${UPS_PROD_FLAVOR}"
    UPS_PROD_DIR = "${UNWIND_PROD_DIR}"
  UNWIND_UPS_DIR = "${UNWIND_PROD_DIR}/ups"
     UPS_UPS_DIR = "ups"
UNWIND_TABLE_DIR = "${UPS_THIS_DB}/${UPS_PROD_NAME}"
   UPS_TABLE_DIR = "${UNWIND_TABLE_DIR}"
  UPS_TABLE_FILE = "${UPS_PROD_VERSION}.table"

end:

group:
product = ANY
flavor = ANY
qualifiers = ANY
options = ANY

common:
     UPS_THIS_DB = "/afs/.fnal.gov/products/upsdb"
 UNWIND_PROD_DIR = "/afs/.fnal.gov/products/${UPS_PROD_NAME}/${UPS_PROD_VERSION}/${UPS_PROD_FLAVOR}"
    UPS_PROD_DIR = "/afs/fnal/products/${UPS_PROD_NAME}/${UPS_PROD_VERSION}/${UPS_PROD_FLAVOR}"
  UNWIND_UPS_DIR = "${UNWIND_PROD_DIR}/ups"
     UPS_UPS_DIR = "ups"
UNWIND_TABLE_DIR = "${UPS_THIS_DB}/${UPS_PROD_NAME}"
   UPS_TABLE_DIR = "${UNWIND_TABLE_DIR}"
  UPS_TABLE_FILE = "${UPS_PROD_VERSION}.table"

    Action = predeclare
	Execute( "/usr/local/bin/upd_volrelease ${UNWIND_PROD_DIR}",NO_UPS_ENV)
	Execute( "/usr/local/bin/upd_volrelease ${UNWIND_UPS_DIR}",NO_UPS_ENV)
	Execute( "/usr/local/bin/upd_volrelease ${UNWIND_TABLE_DIR}",NO_UPS_ENV)

    Action = postdeclare
	Execute( "/usr/local/bin/upd_volrelease ${UPS_THIS_DB}",NO_UPS_ENV)

end:

This example has two groups in it; the first case handles specificly products flavored IRIX+5 or IRIX+6 , the second case handles everything else. You can make the cases specific based on product name or names, version name or names, qualifier name or names, and options set with -O on the upd command line.

Several variables have an UNWIND_ prefix variant; This specifies the real path to actually put the files in, rather than the string to use when declaring the product. So for example, you could use:


     UNWIND_PROD_DIR = /cdf/products/${UPS_PROD_NAME}/${UPS_PROD_VERSION}
            prod_dir = \$BFDIST/${UPS_PROD_NAME}/${UPS_PROD_VERSION}

to specify that it really goes in /cdf/products, but its declared as '$BFDIST/...' in the database.

The actions are:

predeclare
called after the product files are unwound but before the declare.
postdeclare
called after the product is declared.
Only the "Execute()" function is supported for actions in the first release. The second argument to Execute is currently required to be NO_UPS_ENV.

For more complicated configurations than this can handle, actual perl callout editing is still avaliable.

With in a group:...end:, listing multiple products and/or flavors means the or of the list: e.g.

group:
    product=fred
    product=joe
    flavor=IRIX+5
    flavor=IRIX+6
    qualifiers=""
    qualifiers="mips1"
...
end:
means product fred or joe, flavor IRIX+5 or IRIX+6, qualifiers none or mips1. If left out, product, flavor, and qualifiers default to ANY, which matches everything.