#!/bin/ksh # ------------------------------------------------------------- # udbToAny.ksh # # This script was leveraged from "databaseConversionTool.ksh" # it should provide a superset of the functionality of that script; # however the primary motivation was to get away from the use of # multiple divergent parsers for the ".udb" style database. The # parser has been moved into an awk "library" file: udbParseLib.awk. # this parser can and should be used by all scripts wishing to parse # the ".udb" data bases. # # ---------------------------- # new features: # # -toDB to convert to old mksubmit-style ".db" format # -toLst to convert to old domain-port-style ".lst" files # -toCustom to specify a print routine for a custom format # -custom to specify a library containing custom print routines. # -udbParseLib to specify a library containing an alternate parser. # -mailTo to specify an administrator who will receive mail # concerning parsing errors. # # -Database is now obsolete (although it will still work) # ... ... The script can now take multiple udb files (Only the # defaults specified in the first udb file will apply). # # ---------------------------- # # This script converts a universal database to an # HP OSF style System Definition Database (SDD) file, # or a set of args suitable to supply to the Chelmsford deliver # tool, or a set of commands to build a delivery tree. # For more details, please refer to the "X11 and VUE for HP_OSF/1.0" # document. # # This script was leveraged (read hacked extensively) from # the "udbToDb" script by Jim Andreas. Ron Voll authored the # original "udbToDb" script. # # ------------------------------------------------------------- # usage: databaseToSDD.ksh Option udbFile # # where Option is one of the following: # # -toDB convert a .udb to ".db" format # -toLst convert a .udb to ".lst" format # -toSDD convert a .udb to SDD format # -toDeliverArgs convert a .udb to args that the deliver tool likes # -toReleaseTree convert a .udb to a script to build a delivery tree # -toCheckBuild convert a .udb to a script to check the items in a build # -toFileList convert a .udb to a list of files for carbon units # -Machine specifies 3,7,8 for hp-ux releases # -ReleaseStream {hp-ux, osf, whatever} # -NoDefaults do not convert any records labeled default # -toTargetList convert a .udb to a list of target files in product tree # the leading path is stripped and just the target # file is left - for easy diffing with some other # version of a release # -custom Supply a custom "awk" print library # -toCustom # -udbParseLib Supply an alternate "awk" parser library # ------------------------------------------------------------- # ConvertRoutine # # This ksh function invokes awk to do all of the dirty # work. The DoAction variable is consulted only in the # final stages of printing the desired info after the # .udb "phrases" are parsed. # # ------------------------------------------------------------- ConvertRoutine() { # # set what we are going to do # typeset DoAction=$1 # # set the "release stream" or token in a block in the .udb # file for which we will scan. # typeset BlockToken=$2 # # and for HP-UX releases, the particular machine 68k/Snake/S800 3/7/8 # typeset machine=$3 # # set flag if default blocks are to be processed # typeset UseDefaultBlocks=$4 shift shift shift shift AWK=awk if type nawk > /dev/null 2>&1; then AWK=nawk fi # # Custom print routines may use the following parser variables: # defOrder[] --- An array containing the names of the fields in # a data base record (in the correct order). # NumEntries --- One MORE than the number of entries in the # "defOrder" array. This is the number of fields # in a data base record. # rec[] --- An associative array indexed by data base record # field name containing the value of the field. # # Assign custom print routines to be used for output. The default is to # use the "printDb" function associated with the library. # typeset PRT=printDb case "$DoAction" in toDB) PRT=printDb ;; toLst) PRT=printLst ;; toFileList|toTargetList|toCheckBuild|toReleaseTree|toDeliverArgs|toSDD) PRT=printGather; ;; toCustom) CUSTOM_PRINT="-f $CUSTOM_PRINT_LIB" PRT=$CUS_PRT ;; *) # Unknown Action echo "$0: Unknown Action>> \"$doAction\"" exit 1; ;; esac cat > $TMPFILE <> $TMPFILE [ -z "$CUSTOM_PRINT" ] || cat "$CUSTOM_PRINT_LIB" >> $TMPFILE $AWK -v mailTo="$Administrator" \ -v action="$DoAction" \ -v BlockToken="$BlockToken" \ -v Machine="$machine" \ -v UseDefaultBlocks="$UseDefaultBlocks" \ -v DeBugFile="$DEBUGFILE" \ -v DeBug="$DEBUGLEVEL" \ -f $TMPFILE $* # # Removed from parameter list because IBM's awk only allows one "-f" # $CUSTOM_PRINT \ # -f "$UDB_PARSE_LIB" \ # rm $TMPFILE } # # print a handy usage message to stderr (file descriptor 2 ) # # usage() { exec >&2 echo "$ScriptName: usage:" echo "" echo " $ScriptName [Options] ..." echo "" echo " -toDB convert a .udb to \".db\" format" echo " -toLst convert a .udb to \".lst\" format" echo " -toSDD convert a .udb to SDD format" echo " -toDeliverArgs convert a .udb to args that the deliver tool likes" echo " -toReleaseTree convert a .udb to a script to build a delivery tree" echo " -toCheckBuild convert a .udb to a script to check a build" echo " -toFileList convert a .udb to a list of files" echo " -toTargetList convert a .udb to a list of product files" echo " -ReleaseStream {hp-ux, osf, whatever}" echo " -Machine specifies machine 3,7,8 for hp-ux" echo " -NoDefaults do not convert any records labeled \"default\"" echo " -Database path (obsolete) specifies full path to the .udb file to convert" echo " -mailTo Specify a user to receive mail on errors." echo " -toCustom Specify the name of a custom print routine." echo " -custom Supply a custom "awk" print library." echo " -udbParseLib Supply an alternate 'awk' parser library" exit 1 } # OK, here is where we really start execution. # Check that the first argument defines what this script is # supposed to do: # Obscurity footprint-in-the-sand: "${1##*/}" is equivalent # to basename(1) # ScriptName=${0##*/} # -toSDD convert a .udb to SDD format # -toDeliverArgs convert a .udb to args that the deliver tool likes # -toReleaseTree convert a .udb to a script to build a delivery tree # -toCheckBuild convert a .udb to a script to check the items in a build if [ $# -le 3 ]; then usage $0 fi typeset TakeDefaultBlocks="Y" typeset Administrator="" #typeset DBTOOLSRC=/x/toolsrc/dbTools typeset DBTOOLSRC=`dirname $0` typeset UDB_PARSE_LIB="$DBTOOLSRC/udbParseLib.awk" typeset CUSTOM_PRINT_LIB="" typeset DEBUGFILE="/dev/tty" typeset DEBUGLEVEL=0 typeset TMPFILE=`mktemp /tmp/awkXXXXXXXXXXXXXXXXXXXXX` if [ $# -gt 2 ]; then while [ $# -gt 0 ] do case $1 in -NoDefaults) TakeDefaultBlocks=N shift continue ;; -toDB) Action=toDB shift; continue; ;; -toLst) Action=toLst shift; continue; ;; -toSDD) Action=toSDD shift continue ;; -toDeliverArgs) Action=toDeliverArgs shift continue ;; -toReleaseTree) Action=toReleaseTree shift continue ;; -toCheckBuild) Action=toCheckBuild shift continue ;; -toTargetList) Action=toTargetList shift continue ;; -toFileList) Action=toFileList shift continue ;; -Machine) if [ "x$2" = "x" ]; then usage fi Machine=$2 shift shift continue ;; -ReleaseStream) if [ "x$2" = "x" ]; then usage fi ReleaseStream=$2 shift shift continue ;; -Database) if [ "x$2" = "x" ]; then usage fi if [ ! -r "$2" ]; then usage fi Database="$Database $2" shift shift continue ;; -udbParseLib) # specify alternate "awk" parser location if [ "x$2" = "x" ]; then usage fi if [ ! -r "$2" ]; then usage fi UDB_PARSE_LIB=$2 shift shift continue ;; -toCustom) # specify custom "awk" print routines if [ "x$2" = "x" ]; then usage fi Action=toCustom CUS_PRT=$2 shift shift continue ;; -custom) # specify custom "awk" print routines if [ "x$2" = "x" ]; then usage fi if [ ! -r "$2" ]; then usage fi CUSTOM_PRINT_LIB=$2 shift shift continue ;; -mailTo) # specify an administrator who receives mail about errors. if [ "x$2" = "x" ]; then usage fi Administrator=$2 shift shift continue ;; -DeBugFile) # specify a debug file and debug level for parser debug info if [ "x$2" = "x" ]; then usage fi if [ "x$3" = "x" ]; then usage fi DEBUGFILE=$2 shift 2 continue ;; -DeBugLevel) # specify a debug level for parser debug info if [ "x$2" = "x" ]; then usage fi if [ "x$3" = "x" ]; then usage fi DEBUGLEVEL=$2 shift 2 continue ;; -*) echo "unknown option: $1" echo "" usage exit 1; ;; *) if [ ! -r $1 ]; then usage fi Database="$Database $1" shift; ;; esac done fi if [ "$Action" = "toCustom" ]; then if [ -z "$CUSTOM_PRINT_LIB" ]; then echo "You Must specify an awk file containing the custom print routine \"$CUS_PRT\"" exit 1; fi fi if [ "$Machine" = "" ]; then Machine=NA elif [ "$Machine" = "300" ]; then Machine="3" elif [ "$Machine" = "700" ]; then Machine="7" elif [ "$Machine" = "800" ]; then Machine="8" fi if [ "$ReleaseStream" = "" ]; then echo "$ScriptName: need to specify a -ReleaseStream" >&2 exit 1 fi if [ "$Database" = "" ]; then echo "$ScriptName: need to specify a -Database" >&2 exit 1 fi ConvertRoutine $Action $ReleaseStream $Machine $TakeDefaultBlocks $Database