1999-12-20

Release Notes   
-------------
The Standard C++ Library v3, or libstc++-2.90.x, is an ongoing
project to implement the ISO 14882 Standard C++ library as described
in chapters 17 through 27 and annex D, as a drop-in replacement
for the current (ARM-conformant) library.

This is the eigth snapshot of the libstdc++ rewrite.  It is still 
incomplet and incorrekt.  

The Standard C++ Library v3, or libstc++-2.90.x, follows an open
development model, attempting to be fully buzzword, bazaar, and GNU
compliant. Full details on participating, including contributor
guidelines, mailing list subscription, mailing list archives,
up-to-date documentation, and various and sundry other details can be
found at the following URL:

  http://sourceware.cygnus.com/libstdc++/


New: 
--- 
- Now compiling with -Wall -Werror -Winline works, and is on by default.
- Conditional compilation for hosts that don't support wchar_t.
- Attempts have been made to get this to compile hosted on cygwin. 
  Mumit Khan has done bunches here.
- Chapter 22:
  Kevin Ediger did some killer formatting work for the floating point parts of 
  num_put::do_put.
- Chapter 26: 
  valarray fixes: 
    the non-standard member function
    'valarray<T>::product()' is removed for Standard compliance purpose.
    Some missing non member functions (e.g. tanh) are added.
    valarray::sum() now uses operator+= instead of operator+.
    valarray::min() and valarray::max() no longer causes parse errors.
    Typographical errors that used to cause a seg fault are corrected.
  complex fixes:  some missing constructors are added.
  Optimized calling of cmath funcs for targets that support builtin functions.
  mknumeric_limits was robustified.
- Chapter 27: 
  Preliminary inlining for all buffering and iostream classes and manipulators.
  Testing for istream and ostream operators complete.
  istream validation testing complete.
  ostream formatting validations mostly complete.
  ostream<<operator(float, double, etc.) now work.
  Testing for correct stream state and thrown exceptions complete.
  A lot of stringbuf changes.
  Attempts to make includes take as little time as possible.
  streambuf to streambuf copies now work.
  A brain-dead and in-elegant (but conformant) facet caching mechanism
  replaces the elegant but non-conformant design.
  iostream callbacks now work correctly.
  A lot of the library working group issues are now implemented.
- Additional documentation by Phil Edwards.
- New website and mailing list interface.
- For CVS egcs, -O2 and tree-level inlining works.
- Many, many bug fixes.


What doesn't:
-------------
- see BUGS.

 
Build and Install
-----------------
Unpack the tarball using GNU tar; it will create a directory libstdc++-2.90.7.

  tar xfz libstdc++-2.90.7.tar.gz

It's recommended that you create a separate build directory apart from
the source directory for the building of the library: this is optimal,
and will be assumed for the rest of the instructions. (It is possible
to configure/build in the same directory.) Call this build directory
(say) bld-libstdc++, and cd into it:

  mkdir bld-libstdc++
  cd    bld-libstdc++

You must have a recent snapshot release of gcc built (tested with
gcc-2.95.2), and massaged your PATH variable so that it is used for the
building of the library. Run configure; for example, using bash:

  ../libstdc++-2.90.7/configure --prefix=${PWD%/*}/H-libstdc++

Then 

  make
  make install

To check the status of your build, type

  make check

or this, to check the installed library:

  make check-install

This will create (according to the above configure arguments) a directory
H-libstdc++ containing 

  lib/
  include/g++-v3/
    bits/
    backward/
    ext/

To link against that you can say, for example,

  LIBINC=$prefix/include/g++-v3
  g++ -Wall -I$LIBINC -L$prefix/lib foo.cc -o foo

where prefix is set to the full name of your H-libstdc++ directory.
If you want the SGI STL extensions (e.g. hash tables) you can add
  -I$LIBINC/ext 
and/or 
  -I$LIBINC/backward

To run it, you will need to set LD_LIBRARY_PATH in your environment
correctly, so that the shared library for libstdc++ can be found and
loaded. (Or, you can compile with -static to link statically if you
are debugging or would rather not deal with the extra bits for shared
libraries.)

To set LD_LIBRARY_PATH try this (again, assuming bash):

  LD_LIBRARY_PATH=$prefix/lib foo


Contact:
--------
Places have changed from previous snapshots.  The web page, which has
information about joining the mailing list and searching its archives,
CVS access, and contribution information is now at:

  http://sourceware.cygnus.com/libstdc++/

Please note that the mailing list has recently moved, and is now
hosted on sourceware.cygnus.com. (The web site above has the most
up-to-date info.)
   
Obtain the library snapshot via ftp (including these release notes) from

  ftp://sourceware.cygnus.com/pub/libstdc++/

The library is maintained by Benjamin Kosnik, Nathan Myers, Gabriel
Dos Reis, and Ulrich Drepper.  


Development tools:
------------------
You will need a recent version of gcc to compile the snapshot of
libstdc++. The recently released gcc-2.95.2 works well. In addition,
you may need up-to-date tools for modifying Makefiles and regenerating
configure scripts: automake (version 1.4 from Cygnus, not the one on
the net) and autoconf (version 2.13 and higher). Please see the
website for more info on where to obtain these additional tools.

For the adventurous, testing may be done with different flags than the
current defaults. More information and a commentary on how to to this
can be found here:
http://sourceware.cygnus.com/ml/libstdc++/1999-q3/msg00066.html

If you compile programs -fnew-abi -fno-honor-std, uses of RTTI and 
certain other language features will link only if you build your 
compiler's libgcc using the same flags.  (The defaults use the old abi.)  
Using -fnew-abi offers real benefits, but note that it is not stable: 
later snapshots will *not* be binary-compatible with code compiled with 
older snapshots.

Some fun flags to try might include combinations of:

CXXFLAGS=  -g -Wall -O3 -fstrict-aliasing -ansi -fsquangle \
	   -fhonor-std -fnew-exceptions -fvtable-gc -ffunction-sections
CXXDEFINES= 
CXXINCLUDE= -I$LIBINC/std -I$LIBDIR -I$LIBINC/stl 







