
Apache C++ Standard Library - stdcxx

Introduction
============

This experimental branch of the 4.2.0 release adds support for the GNU
"Autotools" suite consisting primarily of GNU Autoconf, Automake, and
Libtool.   It preserves the layout and structure of the 4.2.0 release.
This new infrastructure is intended to be distributed as an alternative
to the existing Makefile-based infrastructure in the 4.3.0 release.

First, a word of warning.  The current version is incomplete and quite
likely broken.  Hack at your own risk.

To "bootstrap" the resulting distribution, run the following commands
in the top-level source directory:

	$ libtoolize -c
	$ aclocal -I etc/config/macros
	$ autoheader
	$ automake -ac
	$ autoconf

To hack on files in this branch, generate a config.h header file using
the old (existing) configuration method.  Rename the header (such as
config.old.h using the name specified in configure.ac) then generate
another config.h header file using the new configure script.  Include
the old, renamed config header in the new config.h header (also done
already in configure.ac).  Migrate the old config tests (found in
etc/config/src) to Autoconf (m4)  macros (found in etc/config/macros).
After completing each new Autoconf macro, remove the correspoding
define(s) from the old config header.  Rinse and repeat as necessary.

You can test maintenance/distribution changes really easy by running
'make distcheck'.  If the last lines of output look like the following,
then you can safely check in your changes.

	==============================================
	stdcxx-4.3.0 archives ready for distribution: 
	stdcxx-4.3.0.tar.gz
	stdcxx-4.3.0.tar.bz2
	stdcxx-4.3.0.zip
	==============================================

Lastly, there are plenty of specific changes needed in individual files
as indicated by a "TODO:" prefix.


ChangeLog (4.3 Release Plans)
=============================

The following list describes the differences between the files and
directories found in the 4.2.0 distribution and this branch.

Existing Distribution Files
---------------------------

* ChangeLog,
README:

No changes required in new infrastructure.  Automatically packaged and
distributed.

* NOTICE.txt,
configure.bat,
generate.bat:

No changes required to these files but they are not automatically
distributed.  Add them to the EXTRA_DIST variable found in Makefile.am
so that they get packaged in the distribution.

* GNUmakefile:

The file name of this makefile (or its current location in the top-level
source directory) may need to change (e.g. GNUmakefile.top) because GNU
Make looks for this filename before files named "Makefile".  This might
not be a problem for the 4.3 release since the existing infrastructure
is the default but it will likely cause confusion for users who use the
new configure script then type "make" and get a totally unexpected.
output.

* LICENSE.txt:

No changes required to this file but it is not automatically distributed.
Add it to the EXTRA_DIST variable found in Makefile.am so that it gets
packaged in the distribution.

* bin/xbuildgen:

Not really a distribution file, only used for internal testing.  Ignore
it and the subdirectory containing it.

* etc,
doc:

No changes required to files in these subdirectories but they are not
automatically distributed.  Add the subdirectories to the EXTRA_DIST
variable found in Makefile.am so that they get packaged in the
distribution.  (The makefiles generated by Autotools are smart enough
to recursively package the subdirectories and all files within them.)

All other distribution files require no further changes and are
automatically packaged in the distribution by implicit reference in the
associated Automake files.

New Distribution Files
----------------------

The remaining file and directories listed hereafter are specific to the
new infrastructure.

* AUTHORS:

This is a file conventionally found in GNU and other open source
distributions and is automatically packaged in the distribution.  It
should contain at least a list of the STDCXX committers and probably
special thanks to any other major contributors to the project.

(Unless the NOTICE.txt file is mandated by Apache distribution policies,
it can be integrated into the AUTHORS file and then removed from
Subversion.)

* NEWS,
TODO (this file):

Other text files conventionally found in GNU and other open source
distributions that get packaged automatically in the distribution.
Once this experimental branch becomes reasonably stable enough to merge
into the main development baseline, the NEWS file is replaced with
release notes prior to actual distribution.  The TODO file contains a
summary of features and enhancements planned for future releases.

* COPYING:

The conventional filename for including a copy of the GPL.  It is
automatically packaged as part of the distribution by Automake's
makefiles.

Since this branch utilizes quite a bit of code (and includes some GNU
config macros) that was developed with the GPL, it is quite likely that
BOTH license files will need to be included in the distribution.

* configure.ac:

The GNU Autoconf input file.  This is the primary input file used by GNU
Autoconf to generate the configure script.

* Makefile.am:

Input file used by GNU Automake to generate Makefile.in templates.  The
top-level Makefile.am file NEED TO FINISH THIS

This file also contains rules for updating the `maintainer-clean` target.
In addition to files cleaned by the `distclean' target, this target will
clean all files generated by maintenance tools.

* etc/config/aux:

This subdirectory, as specified by the AC_CONFIG_AUX_DIR macro in the
configure.ac file, contains support files required in the new
infrastructure.

* etc/config/macros:

This subdirectory, specified by the AC_CONFIG_MACRO_DIR in configure.ac,
contains the M4 configuration macros used primarily by the GNU Autoconf
tools.  

All other files found in the new infrastructure are either copied from
Autotools or generated by some other means and automatically packaged,
if necessary, in the distribution.


ChangeLog (Proposed 5.0 Release Plans)
======================================

Some of the subdirectories in the 4.2 release use abbreviated names
(e.g. doc, etc, src, util) while others don't (e.g. examples, tests).
For installation directories, the conventional Unix names make sense but
they aren't required for a source distribution.  So for the 5.0 release,
a more consistent naming convention is used for the subdirectories.

* GNUmakefile:

Moved to "config/GNUmakefile" so that GNU Make with find the Makefile
generated by GNU Automake by default.  If users still want to use the
old infrastructure, they'll need to specify the "-f config/GNUmakefile"
option for GNU Make.

* etc/config:

Moved to the top-level "config" subdirectory.

* etc/nls:

Moved to top-level "locale" or "nls" subdirectory.  The "etc"
subdirectory is no longer needed.

* src:

Renamed to "source".

* util:

Renamed to "tools".

* examples,
include,
tests:

No change.

