------------------------------
shFlags.sh 1.0.3 Release Notes
------------------------------

Preface
=======
Copyright 2009 Kate Ward. All Rights Reserved.
Released under the LGPL (GNU Lesser General Public License)
Author: Kate Ward (kate.ward@forestent.com)

This document covers any known issues and workarounds for the stated release of
shFlags.

Release info
============

This is a major bugfix release of shFlags. The biggest fix is in how non-flag
arguments are made available to the script.

Major changes
-------------

The use of the ``FLAGS_ARGC`` variable is now obsolete. It will be maintained
for backwards compatibility with old scripts, but its value is known to be
wrong when flag and non-flag arguments are mixed together on the command-line.

To gain access to the non-flag arguments, replace the following snippet of code
in your scripts with the updated version.

old ::
  shift ${FLAGS_ARGC}

new ::
  eval set -- "${FLAGS_ARGV}"

Please see the CHANGES-1.0.txt file for a complete list of changes.

Obsolete items
--------------

Bug fixes
---------

Issue# 7 Flags set with '=' result in off-by-one shifting error

General info
============

The unit tests
--------------

shFlags is designed to work on as many environments as possible, but not all
environments are created equal. As such, not all of the unit tests will succeed
on every platform. The unit tests are therefore designed to fail, indicating to
the tester that the supported functionality is not present, but an additional
test is present to verify that shFlags properly caught the limitation and
presented the user with an appropriate error message.

shFlags tries to support both the standard and enhanced versions of ``getopt``.
As each responds differently, and not everything is supported on the standard
version, some unit tests will be skipped (i.e. ASSERTS will not be thrown) when
the standard version of ``getopt`` is detected. The reason being that there is
no point testing for functionality that is positively known not to exist. A
tally of skipped tests will be kept for later reference.

Standard vs Enhanced getopt
---------------------------

Here is a matrix of the supported features of the various **getopt** variants.

+-------------------------+---+---+
|Feature                  |std|enh|
+=========================+===+===+
|short option names       | Y | Y |
|long option names        | N | Y |
|spaces in string options | N | Y |
+-------------------------+---+---+

Known Issues
------------

The **getopt** version provided by default with all versions of Mac OS X (up to
and including 10.5.6) is the standard version. As such, only short flags are
supported. Additionally, the version supplied does not support intermixing flag
and non-flag arguments on the command-line.

The **getopt** version provided by default with all versions of Solaris (up to
and including Solaris 10 and OpenSolaris) is the standard version. As such,
only short flags are supported.

Workarounds
-----------

The Zsh shell requires the ``shwordsplit`` option to be set, and the special
``FLAGS_PARENT`` variable must be defined.


.. vim:fileencoding=latin1:ft=rst:spell:tw=80
