A.2. Definition of Package Kinds: the Resource PkgBase.DefaultData

In Elego ComPact, the meaning of package is flexible, that is, what exactly constitutes a package can be defined in the resource file PkgBase.DefaultData. This file contains a sequence of definitions of package kinds that may be adapted or extended as needed by the user.

As in all ComPact configuration files, lines beginning with `#' are comments. The overall syntax of the file is

  Start ::= PackageKindDecl +

  PackageKindDecl ::= pkgkind PkgKindName Conditions
                      InheritedPredicates? InheritedActions* PkgKindAction+

  Conditions ::= Expression | Expression and Conditions

  Expression ::= dir Filename
              |  file Filename
              |  nofile Filename
              |  dir Dirname
              |  nodir Dirname
              |  match PathPattern
              |  nomatch PathPattern
              |  hosttype RegExPattern
              |  ostype RegExPattern
              |  platform RegExPattern

  InheritedPredicates ::= inherit predicates PkgKindName

  InheritedActions ::= inherit actions PkgKindName

  PkgKindAction ::= action ActionName CommandSequence


So there is a sequence of definitions for different kinds of packages, each starting with the keyword pkgkind followed by a descriptive name, followed by a list of conditions that may be evaluated to check the kind of a package, followed by a list of actions that are applicable to the specified package kind.

Conditions is a list of Expressions concatenated by and. ComPact investigates every directory structure in a collection by applying the expressions of every package kind definition in the given order. If all expressions of a package kind definition yield true, the kind of the package is determined. The check for all conditions can be overriden by a PkgKind file located in the root directory of the package which must contain the correct package kind to be used. It is an error if a package kind name from a PkgKind file is not defined in the PkgBase.DefaultData resource.

Since early in the development of ComPact release 1.2, package kind definitions also support inheritance of predicates (single inheritance) and actions (multiple inheritance). This is accomplished with the keywords `inherit predicates' and `inherit actions' as in the following examples:

    pkgkind COMPACT_CC_UNIX
      ostype "bsd|unix|linux|sunos5" has dir "src" and dir "inc" and 
      dir "doc" and file "PkgDesc"
      inherit actions COMPACT_VC_UNIX_OVERRIDES
      inherit actions COMPACT_VC
      inherit actions COMPACT_BUILD

    pkgkind COMPACT_SIMPLE_UNIX
      ostype "bsd|unix|linux|sunos5"
      inherit predicates COMPACT_SIMPLE
      inherit actions COMPACT_VC_UNIX_OVERRIDES
      inherit actions COMPACT_SIMPLE


The conditional expressions have the following semantics:



An action definition consists of the keyword action followed by a symbolic name followed by a string containing a command sequence which is executed by the internal shell or passed to an external shell for execution. The command sequence must be enclosed in double quotes (`"').

Currently the ComPact project manager uses the following symbolic action names:

build buildlocal shiplocal shipproject
shipglobal clean realclean mkdep
isrelease conflicts uptodate modified
checkrelease checkconflicts checkuptodate checkmodified
currentdeveltag currentreleasetag currenttag commitdevelmajor
commitdevelminor commitdevelpatch commitreleasemajor commitreleaseminor
commitreleasepatch update checkout getlabel
currentlabel setlabel listlabels  


As shipped, ComPact knows about packages of the following kind:



There is a special package kind named DEFAULT at the end of the file, which is used if none of the other kinds matches. This is especially useful if the package doesn't exist because it has not yet been checked out, and so the package kind cannot be determined from the structure in the local workspace.

# ----------------------------------------------------------------------------
# DEC SRC Modula-3 packages
# ----------------------------------------------------------------------------
pkgkind DEC_SRC_M3_UNIX
  ostype "bsd|unix|linux|sunos5" has file "src/m3makefile" and dir "src"
  inherit actions BASIC_VC_UNIX_OVERRIDES
  inherit actions BASIC_VC
  action build          "m3build {?OPT} {?M3BUILDOPT} 2> .errors && m3err .errors"
  action buildlocal     "m3build {?OPT} {?M3BUILDOPT} {?optVerbose} {?optQuiet} -O  2> .errors && m3err .errors"
  action shipglobal     "m3ship {?OPT} {?M3SHIPOPT} {?optVerbose} {?optQuiet} 2> .errors && m3err .errors"
  action shipproject        "m3ship {?OPT} {?M3SHIPOPT} {?optVerbose} {?optQuiet} 2> .errors && m3err .errors"
  action shiplocal      "echo no shipping needed"
  action clean          "m3build {?OPT} {?M3BUILDOPT} {?optVerbose} {?optQuiet} clean 2> .errors && m3err .errors"
  action realclean      "rm {?OPT} {?RMOPT} -f PkgDep PkgCDT PkgCRT .errors ; m3build clean"
  action mkdep          "m3dep {?OPT} > PkgDep ; m3ovr -v {:LOCATIONS} > src/m3overrides 2> /dev/null"

# ----------------------------------------------------------------------------
# DEC SRC Modula-3 packages on NT
# ----------------------------------------------------------------------------
pkgkind DEC_SRC_M3_WIN32
  ostype "winnt|windows|win32|nt" has file "src/m3makefile" and dir "src"
  #action externalshell     "cmd.exe /c "
  inherit actions BASIC_VC
  action build          "m3build {?OPT} {?M3BUILDOPT} 2> PkgErr && m3err PkgErr"
  action buildlocal     "m3build {?OPT} {?M3BUILDOPT} -O  2> PkgErr && m3err PkgErr"
  action shipglobal     "m3ship {?OPT} {?M3SHIPOPT} 2> PkgErr && m3err PkgErr"
  action shipproject        "m3ship {?OPT} {?M3SHIPOPT} 2> PkgErr && m3err PkgErr"
  action shiplocal      "echo no shipping needed"
  action clean          "m3build {?OPT} {?M3BUILDOPT} clean 2> PkgErr && m3err PkgErr"
  action realclean      "del {?OPT} {?DELOPT}  PkgDep PkgCDT PkgCRT PkgErr ; m3build clean"
  #action mkdep         "m3dep {?OPT} {?M3DEPOPT} > PkgDep"
  action mkdep          "m3dep {?OPT} {?M3DEPOPT} > PkgDep &&  m3ovr -v {!LOCATIONS} > src/m3overrides 2> PkgErr"

# ----------------------------------------------------------------------------
# Critical Mass Reactor Modula-3 packages
# ----------------------------------------------------------------------------
pkgkind CRITICAL_MASS_M3_UNIX
  ostype "bsd|unix|linux|sunos5" has file "src/m3makefile" and dir "src"
  inherit actions BASIC_VC_UNIX_OVERRIDES
  inherit actions BASIC_VC
  action build          "cm3 {?OPT} {?CM3OPT} -build 2> .errors && m3err .errors"
  action buildlocal     "cm3 {?OPT} {?CM3OPT} -build -override  2> .errors && m3err .errors"
  action shipglobal     "cm3 {?OPT} {?CM3OPT} -ship 2> .errors && m3err .errors"
  action shipproject        "cm3 {?OPT} {?CM3OPT} -ship 2> .errors && m3err .errors"
  action shiplocal      "echo no shipping needed"
  action clean          "cm3 {?OPT} {?CM3OPT} -clean 2> .errors && m3err .errors"
  action realclean      "rm {?OPT} {?RMOPT} -f PkgDep PkgCDT PkgCRT .errors ; cm3 -clean"
  action mkdep          "m3dep {?OPT} {?M3DEPOPT} > PkgDep ; m3ovr -v {!LOCATIONS} > src/m3overrides 2> /dev/null"

# ----------------------------------------------------------------------------
# Critical Mass Reactor Modula-3 packages
# ----------------------------------------------------------------------------
pkgkind CRITICAL_MASS_M3_WIN32
  ostype "winnt|windows|win32|nt" has file "src/m3makefile" and dir "src"
  #action externalshell     "cmd.exe /c "
  inherit actions BASIC_VC
  action build          "cm3 {?OPT} {?CM3OPT} -build 2> PkgErr && m3err PkgErr"
  action buildlocal     "cm3 {?OPT} {?CM3OPT} -build -override  2> PkgErr && m3err PkgErr"
  action shipglobal     "cm3 {?OPT} {?CM3OPT} -ship 2> PkgErr && m3err PkgErr"
  action shipproject        "cm3 {?OPT} {?CM3OPT} -ship 2> PkgErr && m3err PkgErr"
  action shiplocal      "echo no shipping needed"
  action clean          "cm3 {?OPT} {?CM3OPT} -clean 2> PkgErr && m3err PkgErr"
  action realclean      "del {?OPT} {?DELOPT}  PkgDep PkgCDT PkgCRT PkgErr ; cm3 -clean"
  #action mkdep         "m3dep {?OPT} {?M3DEPOPT} > PkgDep"
  action mkdep          "m3dep {?OPT} {?M3DEPOPT} > PkgDep &&  m3ovr -v {!LOCATIONS} > src/m3overrides 2> PkgErr"

# ----------------------------------------------------------------------------
# COMPACT C and C++ packages
# ----------------------------------------------------------------------------
pkgkind COMPACT_CC_UNIX
  ostype "bsd|unix|linux|sunos5" has dir "src" and dir "inc" and 
  dir "doc" and file "PkgDesc"
  inherit actions COMPACT_VC_UNIX_OVERRIDES
  inherit actions COMPACT_VC
  inherit actions COMPACT_BUILD

# ----------------------------------------------------------------------------
# COMPACT C and C++ packages
# ----------------------------------------------------------------------------
pkgkind COMPACT_CC_WIN32
  ostype "winnt|windows|win32|nt" has dir "src" and dir "inc" and 
  dir "doc" and file "PkgDesc"
  inherit actions COMPACT_VC
  inherit actions COMPACT_BUILD

# ----------------------------------------------------------------------------
# COMPACT JAVA packages
# ----------------------------------------------------------------------------
pkgkind COMPACT_JAVA_UNIX
  ostype "bsd|unix|linux|sunos5" has dir "java" and 
  dir "html" and file "PkgDesc"
  inherit actions COMPACT_VC_UNIX_OVERRIDES
  inherit actions COMPACT_VC
  inherit actions COMPACT_BUILD

# ----------------------------------------------------------------------------
# COMPACT SIMPLE packages
# ----------------------------------------------------------------------------
pkgkind COMPACT_SIMPLE_UNIX
  ostype "bsd|unix|linux|sunos5"
  inherit predicates COMPACT_SIMPLE
  inherit actions COMPACT_VC_UNIX_OVERRIDES
  inherit actions COMPACT_SIMPLE

pkgkind COMPACT_SIMPLE_WIN32
  ostype "winnt|windows|win32|nt"
  inherit predicates COMPACT_SIMPLE
  inherit actions COMPACT_SIMPLE

pkgkind COMPACT_SIMPLE
  inherit predicates COMPACT_PKG
  inherit actions COMPACT_VC
  action build          "-"
  action buildlocal     "-"
  action shipglobal     "-"
  action shipproject        "-"
  action shiplocal      "-"
  action clean          "-"
  action realclean      "rm {?OPT} {?RMOPT} -f PkgDep PkgCDT PkgCRT .errors ; pkgm {?PKGMOPT} -F -realclean"
  action mkdep          "-"

# ----------------------------------------------------------------------------
# COMPACT project management packages
# ----------------------------------------------------------------------------
pkgkind COMPACT_PRJM_UNIX
  ostype "bsd|unix|linux|sunos5"
  inherit predicates COMPACT_PRJM
  inherit actions COMPACT_VC_UNIX_OVERRIDES
  inherit actions COMPACT_PRJM

pkgkind COMPACT_PRJM_WIN32
  ostype "winnt|windows|win32|nt"
  inherit predicates COMPACT_PRJM
  inherit actions COMPACT_PRJM

pkgkind COMPACT_PRJM
  inherit predicates COMPACT_PRJ
  inherit actions COMPACT_VC
  action build          "prjm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -buildglobal"
  action buildlocal     "prjm {?OPT} {?PRJMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -buildlocal"
  action shipglobal     "echo 'shipping of sub-projects disabled'"
  action shipproject        "echo 'shipping of sub-projects disabled'"
  action shiplocal      "echo 'shipping of sub-projects disabled'"
  action clean          "prjm {?OPT} {?PRJMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -clean"
  action realclean      "prjm {?OPT} {?PRJMOPT} {?optForce}  -realclean"
  action mkdep          "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -deps"

# ----------------------------------------------------------------------------
# probably BROKEN packages with only a PkgTags, PkgDep, PkgCRT, or PkgCDT
# file left
# ----------------------------------------------------------------------------
pkgkind COMPACT_PKG_TAGS_UNIX
  ostype "bsd|unix|linux|sunos5"
  inherit predicates COMPACT_PKG_TAGS
  inherit actions COMPACT_VC_UNIX_OVERRIDES
  inherit actions COMPACT_PKG_TAGS

pkgkind COMPACT_PKG_TAGS_WIN32
  ostype "winnt|windows|win32|nt"
  inherit predicates COMPACT_PKG_TAGS
  inherit actions COMPACT_PKG_TAGS

pkgkind COMPACT_PKG_DEPS_UNIX
  ostype "bsd|unix|linux|sunos5"
  inherit predicates COMPACT_PKG_DEPS
  inherit actions COMPACT_VC_UNIX_OVERRIDES
  inherit actions COMPACT_PKG_DEPS

pkgkind COMPACT_PKG_DEPS_WIN32
  ostype "winnt|windows|win32|nt"
  inherit predicates COMPACT_PKG_DEPS
  inherit actions COMPACT_PKG_DEPS

pkgkind COMPACT_PKG_CRT_UNIX
  ostype "bsd|unix|linux|sunos5"
  inherit predicates COMPACT_PKG_CRT
  inherit actions COMPACT_VC_UNIX_OVERRIDES
  inherit actions COMPACT_PKG_CRT

pkgkind COMPACT_PKG_CRT_WIN32
  ostype "winnt|windows|win32|nt"
  inherit predicates COMPACT_PKG_CRT
  inherit actions COMPACT_PKG_CRT

pkgkind COMPACT_PKG_CDT_UNIX
  ostype "bsd|unix|linux|sunos5"
  inherit predicates COMPACT_PKG_CDT
  inherit actions COMPACT_VC_UNIX_OVERRIDES
  inherit actions COMPACT_PKG_CDT

pkgkind COMPACT_PKG_CDT_WIN32
  ostype "winnt|windows|win32|nt"
  inherit predicates COMPACT_PKG_CDT
  inherit actions COMPACT_PKG_CDT

pkgkind M3_OVR_UNIX
  ostype "bsd|unix|linux|sunos5"
  inherit predicates M3_OVR
  inherit actions BASIC_VC_UNIX_OVERRIDES
  inherit actions M3_OVR

pkgkind M3_OVR_WIN32
  ostype "winnt|windows|win32|nt"
  inherit predicates M3_OVR
  inherit actions M3_OVR

pkgkind COMPACT_PRJ_SNAPS_UNIX
  ostype "bsd|unix|linux|sunos5"
  inherit predicates COMPACT_PRJ_SNAPS
  inherit actions COMPACT_VC_UNIX_OVERRIDES
  inherit actions COMPACT_PRJ_SNAPS

pkgkind COMPACT_PRJ_SNAPS_WIN32
  ostype "winnt|windows|win32|nt"
  inherit predicates COMPACT_PRJ_SNAPS
  inherit actions COMPACT_PRJ_SNAPS

pkgkind M3_OVR
  has file src/m3overrides
  inherit actions BASIC_VC

# ----------------------------------------------------------------------------
# COMPACT_PKG packages
# ----------------------------------------------------------------------------
pkgkind COMPACT_PKG
  has file "PkgDesc"
  inherit actions COMPACT_VC

pkgkind COMPACT_PKG_TAGS
  has file "PkgTags"
  inherit actions COMPACT_VC

pkgkind COMPACT_PKG_DEPS
  has file "PkgDep"
  inherit actions COMPACT_VC

pkgkind COMPACT_PKG_CRT
  has file "PkgCRT"
  inherit actions COMPACT_VC

pkgkind COMPACT_PKG_CDT
  has file "PkgCDT"
  inherit actions COMPACT_VC

# ----------------------------------------------------------------------------
# COMPACT_PRJ packages
# ----------------------------------------------------------------------------
pkgkind COMPACT_PRJ
  has file "PrjDesc"
  inherit actions COMPACT_VC

pkgkind COMPACT_PRJ_SNAPS
  has dir "snaps"
  inherit actions COMPACT_VC

# ----------------------------------------------------------------------------
# BASIC_VC_MAKE
# ----------------------------------------------------------------------------
pkgkind BASIC_VC_MAKE_UNIX
  ostype "bsd|unix|linux|sunos5"
  inherit predicates BASIC_VC_MAKE
  inherit actions BASIC_VC_UNIX_OVERRIDES
  inherit actions BASIC_VC_MAKE

pkgkind BASIC_VC_MAKE_WIN32
  ostype "winnt|windows|win32|nt"
  inherit predicates BASIC_VC_MAKE
  inherit actions BASIC_VC_MAKE

pkgkind BASIC_VC_MAKE
  has file "Makefile"
  inherit actions BASIC_VC
  inherit actions MAKE_BUILD

# ----------------------------------------------------------------------------
# MAKE_BUILD actions
# ----------------------------------------------------------------------------
pkgkind MAKE_BUILD
  ostype none
  action build          "make {?OPT} {?MAKEOPT} all install"
  action buildlocal     "make {?OPT} {?MAKEOPT}"
  action shipglobal     "make {?OPT} {?MAKEOPT} shipglobal"
  action shipproject        "make {?OPT} {?MAKEOPT} shipproject"
  action shiplocal      "make {?OPT} {?MAKEOPT} shiplocal"
  action clean          "make {?OPT} {?MAKEOPT} clean"
  action realclean      "make {?OPT} {?MAKEOPT} realclean"
  action mkdep          "make {?OPT} {?MAKEOPT} depend"

# ----------------------------------------------------------------------------
# COMPACT_BUILD actions
# ----------------------------------------------------------------------------
pkgkind COMPACT_BUILD
  ostype none
  action build          "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -build"
  action buildlocal     "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -build"
  action shipglobal     "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -ship global"
  action shipproject        "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -ship project"
  action shiplocal      "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -ship local"
  action clean          "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -clean"
  action realclean      "rm {?OPT} {?RMOPT} -f PkgDep PkgCDT PkgCRT .errors PkgTmp ; pkgm {?PKGMOPT} -F -realclean"
  action mkdep          "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -deps"

# ----------------------------------------------------------------------------
# COMPACT_VC actions
# ----------------------------------------------------------------------------
pkgkind COMPACT_VC_UNIX_OVERRIDES
  ostype none
  action isrelease      "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -isrelease > /dev/null"
  action conflicts      "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -conflicts > /dev/null"
  action uptodate       "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -uptodate > /dev/null"
  action modified       "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -modified > /dev/null"

pkgkind COMPACT_VC
  ostype none
  action isrelease      "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -isrelease > PkgTmp"
  action conflicts      "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -conflicts > PkgTmp"
  action uptodate       "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -uptodate > PkgTmp"
  action modified       "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -modified > PkgTmp"
  action checkrelease       "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -isrelease"
  action checkconflicts     "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -conflicts"
  action checkuptodate      "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -uptodate"
  action checkmodified      "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -modified"
  action currentdeveltag    "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -cdt > PkgCDT"
  action currentreleasetag      "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -crt > PkgCRT"
  action currenttag             "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -ct > PkgCT"
  action commitdevelmajor   "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -commit major"
  action commitdevelminor   "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -commit minor"
  action commitdevelpatch   "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -commit patch"
  action commitreleasemajor "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -release major"
  action commitreleaseminor "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -release minor"
  action commitreleasepatch "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -release patch"
  action update         "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -update {!TAG}"
  action checkout       "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -c {!LOCATION} -checkout {!TAG} {!PKG}"
  action getlabel       "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -getlabel {:TAG} > .label"
  action currentlabel       "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -getlabel > .label"
  action setlabel       "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -setlabel {!TAG} {!LABEL}"
  action listlabels     "pkgm {?OPT} {?PKGMOPT} {?optForce} {?optVerbose} {?optDebug} {?optQuiet} -listlabels > .labels"
  action diff                   "pkgm {?OPT} {?PKGMOPT} {?optVerbose} {?optDebug} {?optQuiet} -{?diffPrefix}diff {?selectedFiles}"
  action diff1                  "pkgm {?OPT} {?PKGMOPT} {?optVerbose} {?optDebug} {?optQuiet} -{?diffPrefix}diff -t {!TAG1} {?selectedFiles}"
  action diff2                  "pkgm {?OPT} {?PKGMOPT} {?optVerbose} {?optDebug} {?optQuiet} -{?diffPrefix}diff -t {!TAG1} -t {!TAG2} {?selectedFiles}"
  action merge                  "pkgm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -merge {!TAG1}"
  action merge2                 "pkgm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -merge {!TAG1} {!TAG2}"

# ----------------------------------------------------------------------------
# BASIC_VC actions
# ----------------------------------------------------------------------------
pkgkind BASIC_VC_UNIX_OVERRIDES
  ostype none
  action isrelease      "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -isrelease > /dev/null"
  action conflicts      "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -conflicts > /dev/null"
  action uptodate       "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -uptodate > /dev/null"
  action modified       "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -modified > /dev/null"

pkgkind BASIC_VC
  ostype none
  action isrelease      "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -isrelease > PkgTmp"
  action conflicts      "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -conflicts > PkgTmp"
  action uptodate       "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -uptodate > PkgTmp"
  action modified       "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -modified > PkgTmp"
  action checkrelease       "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -isrelease"
  action checkconflicts     "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -conflicts"
  action checkuptodate      "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -uptodate"
  action checkmodified      "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -modified"
  action currentdeveltag    "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -cdt > PkgCDT"
  action currentreleasetag      "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -crt > PkgCRT"
  action currenttag             "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -ct > PkgCT"
  action commitdevelmajor   "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -commit major"
  action commitdevelminor   "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -commit minor"
  action commitdevelpatch   "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -commit patch"
  action commitreleasemajor "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -release major"
  action commitreleaseminor "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -release minor"
  action commitreleasepatch "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -release patch"
  action update         "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -update {!TAG}"
  action checkout       "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -c {!LOCATION} -checkout {!TAG} {!PKG}"
  action getlabel       "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -getlabel {:TAG} > .label"
  action currentlabel       "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -getlabel > .label"
  action setlabel       "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -setlabel {!TAG} {!LABEL}"
  action listlabels     "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -listlabels > .labels"
  action diff                   "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -{?diffPrefix}diff {?selectedFiles}"
  action diff1                  "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -{?diffPrefix}diff -t {!TAG1} {?selectedFiles}"
  action diff2                  "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -{?diffPrefix}diff -t {!TAG1} -t {!TAG2} {?selectedFiles}"
  action merge                  "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -merge {!TAG1}"
  action merge2                 "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -merge {!TAG1} {!TAG2}"

# ----------------------------------------------------------------------------
# DEFAULT package descriptions for fall-back definitions
# ----------------------------------------------------------------------------
pkgkind DEFAULT
  # The next predicate should be FALSE every time
  has dir "yXyXyx" and file "rQp7654RfVq99"
  action update         "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -update {!TAG}"
  action checkout       "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -c {!LOCATION} -checkout {!TAG} {!PKG}"
  action getlabel       "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -getlabel {:TAG} > .label"
  action currentlabel       "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -getlabel > .label"
  action setlabel       "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -setlabel {!TAG} {!LABEL}"
  action listlabels     "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -listlabels > .labels"
  action currentdeveltag    "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -cdt > PkgCDT"
  action currentreleasetag      "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -crt > PkgCRT"
  action currenttag             "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -ct > PkgCT"
  action diff                   "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -{?diffPrefix}diff {?selectedFiles}"
  action diff1                  "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -{?diffPrefix}diff -t {!TAG1} {?selectedFiles}"
  action diff2                  "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -{?diffPrefix}diff -t {!TAG1} -t {!TAG2} {?selectedFiles}"
  action merge                  "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -merge {!TAG1}"
  action merge2                 "pkgvm {?OPT} {?PKGVMOPT} {?optVerbose} {?optDebug} {?optQuiet} -merge {!TAG1} {!TAG2}"