The real ChangeLog is the git log. This is just a summary of the
user-visible changes between releases.

New in 0.9.5:
=============

sbolist:
- Check for leading blank lines in README, which are reported as an error.
- Check for trailing blank lines in README. If one is found, it's reported
  as a note. If more than one, it's an error.

New in 0.9.4:
=============

sbolint:
- Check for tabs or carriage returns in .info files (which have never been
  allowed).
- When running in a git repo, check for files that are in the current
  dir that aren't in the rep. If .diff and .patch files are found, it's
  an error. If any other file is found, it's just a note.

sbopkglint:
- Error messages now begin with the string "--- ERR:".
- Check .pc files for validity, ownerships/perms, correct lib dir (lib
  vs. lib64) and make sure any -I or -L dirs from pkg-config actually exist
  in the package.
- Use a modified 'explodepkg' that will report errors, such as the partition
  filling up. Regular Slackware explodepkg silently ignores such errors,
  which led to large packages failing to lint properly if /tmp was a tmpfs.

sbofixinfo:
- Correctly indent URLs in multi-line DOWNLOAD, DOWNLOAD_x86_64.

New in 0.9.3:
=============

sbopkglint:
- Don't complain if ELF binaries in /lib/firmware or /usr/share/alsa/firmware
  are -x and/or unstripped.
- If any of /bin, /usr/bin, /sbin, /usr/sbin exist but are empty, upgrade
  the 'empty directory' note to a warning. These are generally the result
  of a SlackBuild that's missing "set -e" or "|| exit" error checks.

sbolint:
- Only apply github URL checking to URLs with github subdomains (e.g.
  https://gists.github.com will not be checked).
- Complain about chown commands that use a dot as a separator. This
  is deprecated in coreutils, and causes a warning when the script
  is run.

New in 0.9.2:
=============

sbopkglint:
- Detect packages that contain nothing but "install/" and/or "/usr/doc".
  These are generally the result of a badly-written SlackBuild that
  does no error checking.

sbolint:
- github download URLs in .info files are checked. The intent is to use
  a URL that gives the same downloaded filename regardless of whether
  Content-disposition is in use or not. See:
  https://slackbuilds.org/GITHUB_URLs.txt
- New -N/--notes-as-warnings option.
- Scripts that do no error-checking (don't use either bash's -e option or
  "|| exit 1" anywhere in the script) trigger an error.

New in 0.9.1:
=============

sbopkglint:
- The $TMP directory is created, if it doesn't exist. Derp.
- Files/dirs owned by UID or GID >= 1000 are errors.
- ELF objects aren't checked for ARCH, if they're in /usr/share/qemu.
- perllocal.pod, .packlist, *.bs are detected.
- Invalid characters in the package name are detected.
- /usr/share/terminfo structure and contents are now checked.
- Don't suggest noarch, if the package contains static libraries.
- Support aarch64 static lib checking.
- Images in /usr/share/pixmaps are only checked if they're directly
  in the directory; contents of /usr/share/pixmaps/*/ aren't checked.
- If doinst.sh contains hardcoded $PKG, mention doinst.sh in the message.
  Previously, it just said /var/lib/pkgtools/scripts/$PRGNAM, which is
  where doinst.sh gets moved to after package install.

sbolint:
- *.rej files are detected and draw a warning.
- Script permission check allows 0644 or 0755 now.
- URLs in .info files with % characters are now handled correctly.
- Files named *.diff and *.patch are checked; if they have DOS-style
  CRLF line endings, that's an error, and the message suggests
  gzipping the file. This is needed because SBo's git repo will
  "helpfully" strip the carriage returns (so your submission tarball
  is correct, but after it's approved *everyone else* get a bad patch
  file).

sbodl:
- Don't refer to itself as sbopkglint in --help and man page.
- Add -n (--no-content-disposition) option, and make option
  processing nicer (long options and bundling).

New in 0.9.0:
=============

sbopkglint:
- Spaces in filenames are now handled correctly.
- Permissions and ownership of icons are now checked.
- Shared libraries are now checked for +x permission.
- Option bundling is now supported (e.g. -ki is the same as -k -i).
- Long names for all options (see --help or man page).
- New static library test (permissions, ownership, validity, plus a
  note if there's also a shared version of the same lib).
- Files that aren't supposed to exist in perl builds are now
  checked for (perllocal.pod, .packlist, *.bs).

sbolint:
- Warning: -n option has changed meaning! It used to mean "no warnings",
  use "-e" for that, now. New -n is "no notes".
- Option bundling is now supported (e.g. -qr is the same as -q -r).
- Long names for all options (see --help or man page).
- New -n (--no-notes) option to disable notes.
- You can use - for a build name, to read a list of builds from
  standard input. This is actually not new, but was undocumented before.
- If doinst.sh exists, it's checked for correct usage of config(),
  preserve_perms(), and gtk-update-icon-cache.
- If the slack-desc still has "(short description of app)", that's an error.
- The -a option now redirects stdout to a log file, if stdout is a terminal.

sbodl:
- Color is now used only if stdout is a TTY.
- Exit status is now useful: success if all files exist and their
  md5sums match, or failure otherwise.

New in 0.8.2:
=============

sbolint:
- When checking for doinst.sh, don't complain if it's doinst.sh.gz.
- Add progress bar (on stderr) for -a. Also, make the user redirect
  stdout (instead of spewing to the terminal).
- Add summary for -a (total builds, totals + percentages OK and failed).
- Check for douninst.sh (must exist if the script mentions it; must not
  exist if the the script doesn't mention it).
- If LIBDIRSUFFIX and/or SLKCFLAGS are set, and then never used, you'll
  get a non-fatal NOTE message. Yes, you can ignore this.

sbopkglint:
- Forbid nonstandard directories directly under /usr (e.g. /usr/$PRGNAM).
- Check for install/slack-desc.
- Check for $TMP/package-* baked into any files in the package. This requires
  TMP to be set the same as it was when the package was built (normally,
  /tmp/SBo).

New in 0.8.1:
=============

This is a bugfix release.

sbolint:
- When linting tarballs, files with extra dots in the filename (e.g.
  foo.bar.tar.gz) were failing to validate. Fixed.
- Also handle tarballs created by file-roller, which list the directory
  last rather than first. And tarballs created by 'tar cvfz foo.tar.gz
  foo/*', which don't list the directory at all.

New in 0.8.0:
=============

Added this NEWS file :)

Added a new tool: sbodl, which downloads sources and checks md5sums.

sbolint:
- Suggestions only (not an error/warning) to split python builds into
  separate python2- and python3- builds, and to use the python2 command
  rather than plain python (because someday, /usr/bin/python will become
  a symlink to python3, not python2).
- Add a bit of color in the output (red errors, green OK, etc).
- Check TMP= PKG= OUTPUT= assignments.
- Check for outdated (i386, i486) ARCH and flags.
- Check for hidden and empty files/directories.
- Fix off-by-one error in slack-desc line length check.
- Add check for trailing whitespace on slack-desc non-blank lines.

sbopkglint:
- Add tests for /usr/info.
- /etc/ld.so.conf.d is not allowed.
- *-mimetypes.list is now allowed in /usr/share/applications.
- Broken python modules (named UNKNOWN-*) are now detected.

Thanks to bedlam, fourtysixandtwo, Fonix, lockywolf, timsoft, and
probably others for the ideas that led to the new features in 0.8.0.
