OpenPKG Quick Reference (DEVELOPMENT)
  =====================================

  Unpacking And Patching Sources
  ==============================

  Synopsis
  --------

  %setup[<x>] [options] 
  -q        # quiet unpacking operation
  -n <dir>  # set name of directory
  -c        # create directory (and change to it) before unpacking
  -D        # do not delete directory before unpacking sources
  -T        # do not perform default archive unpacking of %{SOURCE<x>}
  -b <n>    # also unpack %{SOURCE<n>} before changing to directory
              (usually combined with -T, -D)
  -a <n>    # also unpack %{SOURCE<n>} after  changing to directory
              (usually combined with -T, -D, -c)

  %patch[<x>] [options] [<x> ...]
  -P        # do not perform default apply of %{PATCH<x>}
  -p <#>    # strip <#> leading slashes and directories from patch filenames
  -b <ext>  # set the backup file extension to <ext> instead of ".orig"
  -E        # remove empty output files
  -R        # apply patch as it would be reversed
  <x>       # also apply %{PATCH<x>}

  Visualization
  -------------

  Input:
    %setup[<x>]                      # default for <x> is 0

  Output:
    rm -rf <name>-<version>          # changed by -n <dir>, omitted by -D
    mkdir <name>-<version>           # changed by -n <dir>, added by -c (else omitted)
    cd <name>-<version>              # changed by -n <dir>, added by -c (else omitted)
    gunzip <%{SOURCE<x>} | tar xvf - # omitted by -T,   "xvf" replaced with "xf" by -q
    gunzip <%{SOURCE<n>} | tar xvf - # added by -b <n>, "xvf" replaced with "xf" by -q
    cd <name>-<version>              # changed by -n <dir>
    gunzip <%{SOURCE<n>} | tar xvf - # added by -a <n>, "xvf" replaced with "xf" by -q


  Platform Identification
  =======================

                                       FreeBSD         Linux          Solaris
  platform class      %{l_platform -c} ix86-4.4bsd     ix86-lsb1.2    sparc-svr4
  platform product    %{l_platform -p} ix86-freebsd4.8 ix86-redhat9   sparc64-solaris9
  platform technology %{l_platform -t} i686-freebsd4.8 i585-linux2.4  sun4u-sunos5.9

  Sections And Commands
  =====================

  --rebuild => -Uvh, -bb, --clean, --rmsource (undocumented), --rmspec (undocumented)

  %description
  %prep
  %build
  %install
  %check   (for rpmlint things)
  %files
  %clean
  %pre
  %post
  %preun
  %postun
  %trigger
  %triggerin
  %triggerun
  %triggerpostun
  %verifyscript (for custom -V checks)
  %package      (not allowed in OpenPKG)
  %changelog    (not allowed in OpenPKG)

  action                   only this action     up to this action
  ------------------------ -------------------- -----------------
  execute %prep            -bp --short-circuit  -bp
  execute %build           -bc --short-circuit  -bc
  execute %install         -bi --short-circuit  -bi
  execute %check           N.A.                 N.A.
  execute %files           -bl                  N.A.
  roll binary RPM package  -bb --short-circuit  N.A.
  execute %clean           N.A.                 -bb
  roll source RPM package  -bs                  -ba

  Script Execution
  ----------------

  section install erase   upgrade reinstall
  ------- ------- ------- ------- ---------
  %pre    1       -       2       2
  %post   1       -       2       2
  %preun  -       0       1       -
  %postun -       0       1       -

  ("reinstall" is the case where one uses the --force option to rpm (-i or
  -U) to install the same version of the package that already is in the
  system. "-" means that the scriptlet will not be run in this phase)

  The order in which scripts are executed on a single package install:
  new-%pre    $1=1 for new version of package being installed
  ...              (all new files are installed and override old versions)
  new-%post   $1=1 for new version of package being installed

  The order in which scripts are executed on a single package upgrade:
  new-%pre    $1=2 for new version of package being installed
  ...              (all new files are installed and override old versions)
  new-%post   $1=2 for new version of package being installed
  old-%preun  $1=1 for old version of package being removed
  ...              (all old files are removed which are not part of the new package)
  old-%postun $1=1 for old version of package being removed

  The order in which scripts are executed on a single package erase:
  old-%preun  $1=0 for old version of package being removed
  ...              (all old files are removed which are not part of the new package)
  old-%postun $1=0 for old version of package being removed

  Package Variants
  ----------------

  o Naming Convention
    - primary/intended package is named "foo"
    - secondary/alternative/compatibility/etc packages are named "fooN"
      where "N" is the compressed version string not longer than 2 or 3 digits.
    - examples: perl/perl56, gcc/gcc2/gcc33, mysql/mysql4, tomcat/tomcat4

  o Alternative Packages
    - for using automatically handled package alternatives
    - packages conflict by default, because are true alternatives
    - intention is that packages are fully equal and compatible, any can be used, any is chosen
    - multiple existing packages is final solution and will remain in near future
    - multiple packages are of different products (only)

    Original Package:
    | Name:         foo
    | Provides:     FOO
    
    Alternative Packages:
    | Name:         fooN
    | Provides:     FOO
    | %install
    |     ln -s $RPM_BUILD_ROOT%{l_prefix}/bin/fooN $RPM_BUILD_ROOT%{l_prefix}/bin/foo

    Examples: MTA, JDK, JRE, MOTIF, KSH, X11

  o Faked Packages
    - for using manually enforced package alternatives
    - packages do not conflict by default, but on enforcement
    - intention is that packages are not fully compatible, only one particular should be used, others can be enfored
    - multiple existing packages is temporary solution and will certainly change in near future
    - multiple packages are of different versions of same product (only)

    Original Package:
    | Name:         foo
    
    Faked Packages:
    | Name:         fooN
    | %options      with_foo  no
    | %if "%{with_foo}" == "yes"
    | Provides:     foo = %{version}-%{release}
    | %endif
    | %install
    | %if "%{with_foo}" == "yes"
    |     ln -s $RPM_BUILD_ROOT%{l_prefix}/bin/fooN $RPM_BUILD_ROOT%{l_prefix}/bin/foo
    | %endif

    Examples: perl, gcc, mysql, gd, tomcat