
Richard's Packaging Manual Checklist (not completed, yet)


Binary packages
  DEBIAN directory
     control:
       * exists (Packaging manual, 2.2)
       * contains Package, Version, and Architecture (Packaging manual, 2.3)
       - does not contain fields other than the ones listed in
         Packaging manual, 2.3.  (Package, Version, Architecture,
         Depends, Recommends, Suggests, Replaces, Conflicts, Provides,
         Essential, Maintainer, Section, Priority, Source, Description,
         Installed-Size)
     Maintainer scripts (postinst, preinst, postrm, prerm)
       * Are executable if they exist (??)
       - warn if postinst.foo versions exist
       * Should not assume stdin/stdout are ttys (use /dev/tty instead)
            (Packaging manual, 2.2)
       * Perl scripts should set unbuffered output with $|=1
            (Packaging manual, 2.2)
       - warn if /bin/sh script contains bashishms
     conffiles: (check format)
       - warn if conffiles are not included by package
     shlibs: (check format)
     - warn if versions with filename extensions exist of any of the
       standard control files.

Source packages
  * New source format
  * Can be unpacked  (this also checks the md5sums)
  - dsc file is signed and signature is found in debian keyring
     [ dinstall already checks this AFAIK ]
  * shared library dependencies are listed for all executables
     (Packaging manual, 3.1.4)
  * and all libraries (Packaging manual should be updated)
  Packaging manual, 3.2.1:
  * debian/rules exists and starts with #!/usr/bin/make -f
    [ perhaps allow #! /usr/bin/make -f ]
  * contains targets build, binary, binary-arch, binary-indep, clean
  * build target is not interactive
  * build target does not need root access
  * binary-arch builds architecture-specific binary packages
  * binary-indep builds architecture-independent binary packages
    [ lintian can at least check that binary-indep is not empty if
      control file contains packages with architecture "all" ]
  * if build target touches "build", clean target should rm it as
    the first thing it does.
  * debian/control exists (Packaging manual, 3.2.2)
    * and contains a paragraph for the source followed by a paragraph for
      each binary package (Packaging manual, 3.2.2)
    * source paragraph contains Source, Section, and Priority fields
      (Packaging manual, 3.2.2)
    * binary paragraphs contain Package and Architecture fields,
      and may contain Description, Essential, Depends, Recommends, Suggests,
      Provides, Conflicts, Replaces.  (Packaging manual, 3.2.2)
    * source paragraph may contain extra fields.  (Packaging manual, 3.2.2.1)
    [ dpkg does not follow its own rules here.  It should not copy 
      user-defined fields to the package control files, but it does. ]
    [ nothing says whether binary paragraphs may contain extra fields. ]
  * debian/changelog is in format that can be parsed by dpkg-parsechangelog
    (Packaging manual, 3.2.3)
  * date should be in RFC822 format (Packaging manual, 3.2.3)
    [ not sure if dpkg-parsechangelog checks this ]
  [ I wonder if any packages use non-default changelog formats, as allowed
    by Packaging manual, 3.2.3.1 ]
  * If debian/substvars is generated or modified dynamically by debian/rules,
    it should not exist in the source archive. (Packaging manual, 3.2.4)
  * debian/files does not exist (Packaging manual, 3.2.5)
  * debian/tmp and any other tmp directories created and used by binary
    target must not exist in the source archive. (Packaging manual, 3.2.6)
  * .dsc file contains Source, Version, Maintainer, Binary, Architecture,
    Standards-Version, and Files fields.  (Packaging manual, 3.3)
  [ The rest of section 3.3 ignored because dpkg-source -x will check it ]
  * The source package may not contain any hard links, device special
    files, sockets or setuid or setgid files. (Packaging manual, 3.4.1)
    [ setgid directories are allowed ]
    [ not sure if dpkg-source -x checks this ]

