$Id$ | |
Apache C++ Standard Library (STDCXX) 4.2.2 | |
------------------------------------------ | |
0 Index | |
-------- | |
Index ............................................................ 0 | |
Contents ......................................................... 1 | |
Compatibility ................................................ 1.1 | |
Requirements ..................................................... 2 | |
Unpacking Instructions ........................................... 3 | |
Source Directory Structure ....................................... 4 | |
Library Files ................................................ 4.1 | |
Library Utilities ............................................ 4.2 | |
Locales ...................................................... 4.3 | |
Test Suite Files ............................................. 4.4 | |
Examples and Tutorials ....................................... 4.5 | |
Build Directory Structure .................................... 4.6 | |
VisualStudio Build Directory Structure ................... 4.6.1 | |
Library Build Instructions ....................................... 5 | |
VisualStudio Setup Instructions .............................. 5.1 | |
Library Installation ............................................. 6 | |
Library Installation on UNIX Systems ......................... 6.1 | |
Library Installation on Microsoft Windows .................... 6.2 | |
Test Suite Build Instructions .................................... 7 | |
VisualStudio Test Suite Build Instructions ................... 7.1 | |
Library Configuration ............................................ 8 | |
Header config.h (and config.log) ............................. 8.1 | |
Headers rw/_config.h and rw/_defs.h .......................... 8.2 | |
Configuration Macros ......................................... 8.3 | |
Platform Identification Macros ........................... 8.3.1 | |
Compiler Configuration Macros ............................ 8.3.2 | |
Runtime Library Configuration Macros ..................... 8.3.3 | |
C Library Configuration Macros ........................... 8.3.4 | |
Macros Controlling Strings ............................... 8.3.5 | |
Macros Controlling Iostreams ............................. 8.3.6 | |
Macros Controlling Locale ................................ 8.3.7 | |
Macros Controlling Implementation Properties ............. 8.3.8 | |
Other Configuration Macros ............................... 8.3.9 | |
Macros Controlling Extensions ........................... 8.3.10 | |
Library Organization ............................................. 9 | |
Organization of Headers ...................................... 9.1 | |
Organization of Sources ...................................... 9.2 | |
Platform Notes .................................................. 10 | |
Apogee C++ .................................................. 10.1 | |
Borland C++ ................................................. 10.2 | |
Comeau C++ .................................................. 10.3 | |
Compaq/HP C++ ............................................... 10.4 | |
EDG eccp .................................................... 10.5 | |
GNU gcc ..................................................... 10.6 | |
HP aCC ...................................................... 10.7 | |
IBM VisualAge C++ ........................................... 10.8 | |
Intel C++ ................................................... 10.9 | |
KAI C++ .................................................... 10.10 | |
Metrowerks CodeWarrior ..................................... 10.11 | |
Microsoft Visual Studio .................................... 10.12 | |
SGI MIPSpro ................................................ 10.13 | |
Siemens CDS++ .............................................. 10.14 | |
Sun C++ .................................................... 10.15 | |
1 Contents | |
----------- | |
This file is part of version 4.2.2 of the Apache C++ Standard | |
Library (STDCXX), an Open Source implementation of the C++ Standard | |
Library conforming to INCITS/ISO/IEC 14882-2003 Programming | |
Languages -- C++. | |
The distribution consists of this file and a compressed (gzipped) | |
tar file containing the header and source files comprising the | |
Apache implementation of the C++ Standard Library, the configuration | |
infrastructure required to characterize the platform on which the | |
library is to be built, and a set of scripts and makefiles to build | |
the library. In addition, a license (LICENSE.txt) and a notice | |
(NOTICE.txt) files are provided. Read LICENSE.txt to understand the | |
licensing requirements of the Apache C++ Standard Library. The | |
NOTICE.txt file contains a list of copyrights that apply to the | |
same. | |
In addition, the distribution also contains the Apache C++ Standard | |
Library test suite, a set of example programs demonstrating the use | |
of the library, plus scripts and makefiles to build and run the test | |
suite and the examples and report their results. | |
The primary audience targeted by this document is library | |
maintainers, developers, and those porting the library to new | |
platforms. The purpose of the document is to describe in detail the | |
process of unpacking, configuring, building, and testing the | |
library. | |
1.1 Compatibility | |
------------------ | |
This version of the library is source as well as both backward and | |
forward binary compatible with all past or future 4.2.x releases. | |
Programs compiled and linked with other releases of the (shared) | |
library within the 4.2.x lineage will continue to link and work | |
correctly when linked with this version of the library, provided the | |
same compiler is used to compile both the programs and the library. | |
Changing the compiler, its version, or some compiler options may | |
have an impact on the binary compatibility of the generated object | |
code. | |
2 Requirements | |
--------------- | |
The following utilities are required in addition to the standard set | |
of POSIX utilities in order to unpack and build the library, test | |
suite (*), and examples (*) on a UNIX system. | |
* Where available. | |
o GNU gunzip | |
o GNU make, version 3.70 or later (referred to as gmake here) | |
o C++ compiler and linker | |
3 Unpacking Instructions | |
------------------------- | |
The distribution consists entirely of a single file named either | |
stdcxx-X.Y.Z.tar.gz for a final release, or | |
stdcxx-X.Y.Z-YYYYMMDD.tar.gz for snapshots. | |
To unpack the tarball, execute the following command: | |
$ gunzip -c stdcxx-X.Y.Z.tar.gz | tar -xf - | |
Above, X, Y, and Z are the major, minor, and micro version number of | |
the library, respectively, and the optional -YYYYMMDD part is the | |
date of the snapshot. The date part of the file name will be missing | |
if the tarball is a final release rather than a snapshot. | |
The script above will expand the tarball and create a single | |
directory named stdcxx-X.Y.Z (or stdcxx-X.Y.Z-YYYYMMDD/ for a | |
snapshot). This directory is referred to a ${TOPDIR} throughout the | |
rest of this document. | |
4 Source Directory Structure | |
----------------------------- | |
The infrastructure described in this document expects that source | |
files and any support scripts are organized in a directory tree | |
described below. If the files are arranged otherwise you will need | |
to move them to the expected directories in order to accommodate | |
this requirement and use the infrastructure. | |
${TOPDIR}/bin/ executable scripts | |
| doc/index.html documentation index | |
| generate.bat (obsolete) | |
| configure.bat Windows configuration script | |
| ChangeLog log of changes | |
| GNUmakefile master makefile | |
| LICENSE.txt license file | |
| NOTICE.txt copyright notices | |
| README this file | |
| | |
+- etc/ | |
| +- config/GNUmakefile.* makefiles | |
| | | /*.config compiler config files | |
| | | /makefile.* common definitions and rules | |
| | +- src/ configuration sources and | |
| | | scripts | |
| | +- windows/generate.wsf solution generation script | |
| | /configure.wsf configuration script | |
| | /build.wsf solution build script | |
| | /makelog.wsf log creation script | |
| | /runall.wsf testsuite run script | |
| | /*.js utility scripts | |
| | /*.config compiler config files | |
| +- nls/ locale definitions and | |
| | charmaps | |
| +- charmaps/ character set description files | |
| +- src/ locale definition files | |
+- examples/ set of examples and tutorials | |
| +- include/*.h common example headers | |
| +- manual/*.cpp example sources | |
| +- tutorial/*.cpp tutorial sources | |
+- include/* public library headers | |
| +- ansi/* C++ C library headers | |
| +- loc/_*.{h,c,cc} private locale headers | |
| +- rw/_*.{h,c,cc} other private library headers | |
+- src/*.cpp library sources | |
+- util/*.{h,c,cc,cpp} utility headers and sources | |
+- tests/ test suite files | |
| +- include/*.h common test headers | |
| +- */*.cpp test suite sources | |
+- ../rwtest test suite infrastructure | |
+- rw/ | |
| +- rwtest/*.h test suite infrastructure | |
| headers | |
+- src/*.cpp test suite infrastructure | |
sources | |
4.1 Library Files | |
------------------ | |
The public interface to the library consists of the following header | |
files specified by the C++ International Standard: | |
+------------+------------+------------+------------+------------+ | |
|<algorithm> |<iomanip> |<list> |<ostream> |<streambuf> | | |
+------------+------------+------------+------------+------------+ | |
|<bitset> |<ios> |<locale> |<queue> |<string> | | |
+------------+------------+------------+------------+------------+ | |
|<complex> |<iosfwd> |<map> |<set> |<typeinfo> | | |
+------------+------------+------------+------------+------------+ | |
|<deque> |<iostream> |<memory> |<sstream> |<utility> | | |
+------------+------------+------------+------------+------------+ | |
|<exception> |<istream> |<new> |<stack> |<valarray> | | |
+------------+------------+------------+------------+------------+ | |
|<fstream> |<iterator> |<numeric> |<stdexcept> |<vector> | | |
+------------+------------+------------+------------+------------+ | |
|<functional>|<limits> | | | | | |
+------------+------------+------------+------------+------------+ | |
These header files are contained in the ${TOPDIR}/include/ | |
directory. Some of them have corresponding .cc and .c files in the | |
same directory. Those are private files that contain definitions of | |
out of line template functions, member functions of class templates, | |
or static data members of class templates. | |
The facilities of the Standard C library are exposed via the | |
following header files (along with their deprecated forms, i.e., | |
files having the same name except for the leading letter 'c' and the | |
.h suffix) contained in the ${TOPDIR}/include/ansi/ directory: | |
+------------+------------+------------+------------+------------+ | |
|<cassert> |<ciso646> |<csetjmp> |<cstdio> |<ctime> | | |
+------------+------------+------------+------------+------------+ | |
|<cctype> |<climits> |<csignal> |<cstdlib> |<cwchar> | | |
+------------+------------+------------+------------+------------+ | |
|<cerrno> |<clocale> |<cstdarg> |<cstring> |<cwctype> | | |
+------------+------------+------------+------------+------------+ | |
|<cfloat> |<cmath> |<cstddef> | | | | |
+------------+------------+------------+------------+------------+ | |
Any other header files not mandated by the C++ Standard are | |
contained in the include/rw/ or include/loc subdirectories. Their | |
names start with an underscore, to prevent potential clashes with | |
any user headers, and end in a .h suffix. Some of them may have | |
corresponding .c and .cc files. | |
In addition to header files, the library consists of a set of | |
private source files. Source files may have a .cpp, .s or .S | |
extension (for C++ or assembly source, respectively) and are | |
contained in the src/ subdirectory of the library source tree. | |
4.2 Library Utilities | |
---------------------- | |
Several utility programs are provided in complete source form along | |
with the library sources. They are: exec, gencat, locale and | |
localedef. The header and source files for these utilities are | |
contained in the ${TOPDIR}/util/ directory. The exec and gencat | |
utilities are part of the test harness and are not intended to be | |
used directly. The localedef utility is used to build locales from | |
locale definition files and character set description files. | |
Locales generated by the utility can be read by the locale utility | |
and used by the Apache C++ Standard Library's localization library. | |
4.3 Locales | |
------------ | |
Locale definition files suitable for processing by the localedef | |
utility are provided in the ${TOPDIR}/etc/nls/src/ | |
directory. Character set description files that accompany the locale | |
definition files are provided in the ${TOPDIR}/etc/nls/charmaps/ | |
directory. These files are copies of those distributed with GNU libc | |
2.2. | |
4.4 Test Suite Files | |
--------------------- | |
The test suite consists of a set of three components: a makefile, | |
the exec test utility residing in ${BUILDDIR}/bin/exec, the test | |
driver library, rwtest, in ${TOPDIR}/tests/include/, and a large | |
number of test source files, residing in several subdirectories | |
under ${TOPDIR}/tests/. | |
Each test program links with the test driver library, | |
${BUILDDIR}/rwtest/librwtest.a, which contains code for command line | |
processing. When the tests are run by the test harness, they produce | |
output files which are then read and analyzed by the exec | |
utility. The utility writes the test results to stdandard output in | |
a tabular format, with columns indicating the exit status of each | |
test, the number of failed assertions, the total number of | |
assertions, the number of runtime warnings, and the amount of time | |
each test took to run. For more information refer to the help | |
output of the exec utility. | |
4.5 Examples and Tutorials | |
--------------------------- | |
Two sets of example and tutorial programs are provided under the | |
${TOPDIR}/examples/ directory, in subdirectories manual/ and | |
tutorial/. The vast majority of example programs write their | |
results to standard output, and some of them also read their | |
standard input. When running the example programs via the test | |
harness, the standard input of each example is redirected from the | |
corresponding .in file (if one exists) in the in/ subdirectory, and | |
the standard output is compared with the corresponding .out file (if | |
it exists) in the out/ subdirectory to make sure the two match. | |
4.6 Build Directory Structure | |
------------------------------ | |
The directory tree created and partially populated by the master | |
makefile, ${TOPDIR}/GNUmakefile, has the following structure (the -> | |
symbol indicates a symbolic link from the file on the left to the | |
one on the right): | |
${BUILDDIR}/GNUmakefile -> ${TOPDIR}/GNUmakefile | |
| /makefile.in generated makefile | |
| /makefile.common-> ${TOPDIR}/makefile.common | |
| /makefile.rules -> ${TOPDIR}/makefile.rules | |
+- bin/GNUmakefile -> ${TOPDIR}/etc/config/GNUmakefile.bin | |
| /*.{o,...} binaries and temporary files | |
| /.depend/*.d dependencies | |
| /run -> ${BUILDDIR}/bin/exec | |
| /run_utils -> ${TOPDIR}/etc/config/run_locale_utils.sh | |
+- examples/GNUmakefile -> ${TOPDIR}/etc/config/GNUmakefile.exm | |
| /run -> ${BUILDDIR}/bin/exec | |
| /*.{o,...} binaries and temporary files | |
| /.depend/*.d dependencies | |
+- include/GNUmakefile -> ${TOPDIR}/etc/config/GNUmakefile.cfg | |
| /config.h generated config header | |
| /*.{o,...} binaries and temporary files | |
| /.depend/*.d dependencies | |
+- lib/GNUmakefile -> ${TOPDIR}/etc/config/GNUmakefile.lib | |
| /*.{a,o,so,...} binaries and temporary files | |
| /.depend/*.d dependencies | |
+- nls/* -> binary locale files | |
+- rwtest/GNUmakefile.rwt->${TOPDIR}/etc/config/GNUmakefile.rwt | |
| /*.{a,o,so,...} binaries and temporary files | |
| /.depend/*.d dependencies | |
+- plumhall/GNUmakefile -> ${TOPDIR}/etc/config/GNUmakefile.ph | |
| /*.{d,o,...} binaries and temporary files | |
+- tests/GNUmakefile -> ${TOPDIR}/etc/config/GNUmakefile.tst | |
/*.{o,...} binaries and temporary files | |
/.depend/*.d dependencies | |
/*/run -> ${BUILDDIR}/bin/exec | |
4.6.1 VisualStudio Directory Structure | |
--------------------------------------- | |
The directory tree created and partially populated by the configure | |
script, ${TOPDIR}/configure.bat, has the following structure: | |
${BUILDDIR}/build_${CONFIG}.bat Root build script | |
| /*.{html,...} Temporary files | |
+- ${CONFIG}/${CONFIG}.sln Root solution | |
| /${CONFIG}_ex.sln Examples solution | |
| /${CONFIG}_loc.sln Locales solution | |
| /${CONFIG}_run.sln Run examples/tests solution | |
| /${CONFIG}_tst.sln Tests solution | |
| /${CONFIG}_tstloc.sln Locales tests solution | |
| /${CONFIG}slngen.log Configuration log file | |
+- Projects/*.vcproj Project files | |
| /examples/*.vcproj Examples project files | |
| /locales/*.vcproj Locales project files | |
| /tests/*.vcproj Tests project files | |
| /util/*.vcproj Utilities project files | |
. | |
. ...${BUILDTYPE} directories generated by running build script | |
. | |
+- ${BUILDTYPE}/bin/*.{exe,...} Binaries and temporary files | |
/examples/*.{exe,...} Binaries and temporary files | |
/include/config.h Generated config header | |
/lib/*.{dll,lib,...} Binaries and temporary files | |
/src/*.{obj,...} Temporary files | |
/tests/*.{obj,...} Binaries and temporary files | |
/src/*.{obj,...} Temporary files | |
5 Library Build Instructions | |
----------------------------- | |
To build the library, test suite (*), and examples (*), perform the | |
following steps: (* Where available.) | |
o $ cd stdcxx-X.Y.Z/ | |
$ ls # this is ${TOPDIR} | |
bin doc generate.bat LICENSE.txt src | |
ChangeLog etc GNUmakefile NOTICE.txt tests | |
configure.bat examples include README util | |
o $ gmake [ BUILDDIR=<build-dir> ] \ | |
[ BUILDTYPE=<build-type> \ | |
| BUILDMODE=<build-mode> ] \ | |
[ CONFIG=<config-file> ] | |
<build-dir> is the pathname of the build directory where you want | |
to perform the build; the directory will be created | |
(as will all its required subdirectories) | |
Setting the BUILDDIR variable is optional. When not | |
specified the effect is the same as if | |
BUILLDDIR=${TOPDIR}/build had been specified instead. | |
<build-type> is one of { | |
8s, 8d, 11s, 11d, 12s, 12d, 15s, 15d, | |
8S, 8D, 11S, 11D, 12S, 12D, 15S, 15D | |
} | |
The numeric part of <build-type> determines the | |
presence or absence of support for debugging, | |
whether optimization is or isn't enabled, and the | |
thread safety level of the library, as follows: | |
-- optimization enabled: even numbers (i.e., 8 and | |
12) | |
-- debugging enabled: odd numbers (i.e., 11 and 15) | |
-- thread safe code: 12 and 15 | |
The single letter following the numeric part of | |
<build-type> determines whether an archive or shared | |
library is built, and whether narrow (32-bit) code | |
or wide (64-bit) code should be generated: | |
-- s and S implies an archive library | |
-- d and D implies a shared library | |
-- lowercase letter implies narrow (32-bit) code | |
-- capital letter implies wide (64-bit) code | |
Setting the BUILDTYPE variable is optional. The | |
variable must not be defined when BUILDMODE is | |
defined. | |
<build-mode> is a comma-separated list of keywords describing how | |
to build the library and the rest of the | |
binaries. The following arguments are recognized: | |
archive - create an archive library (this is default) | |
dcethreads - create a thread-safe library, use DCE | |
threads | |
debug - include debugging information | |
optimized - optimized | |
pthreads - create a thread safe library, use POSIX | |
threads | |
shared - create a shared library (archive is default) | |
shared,archive - create an AIX shared archive | |
threads - create a thread-safe library, use Solaris | |
threads | |
narrow - generate narrow (32-bit) code | |
wide - generate wide (64-bit) code | |
Setting the BUILDMODE variable is optional. The | |
variable must not be defined when BUILDTYPE is | |
defined. | |
Note that at most one of BUILDTYPE and BUILDMODE must be | |
defined. When neither is specified, the effect is that of creating | |
a default configuration for the platform. This is typically an | |
archive library of the native word-width (narrow on 32-bit | |
platforms and wide on 64-bit platforms), with no debugging | |
information, no optimization, and no thread safety. | |
<config-file> name (not pathname) of a config file containing | |
compiler options; the available configuration files | |
are: | |
acc.config - for HP aCC | |
como.config - for Comeau C++ | |
eccp.config - for EDG eccp | |
gcc.config - for gcc | |
icc.config - for Intel C++ on Linux | |
mipspro.config - for SGI MIPSpro | |
osf_cxx.config - for Compaq/HP C++ | |
reliant_cds.config - for Siemens CDS++ | |
sunpro.config - for Sun C++ | |
vacpp.config - for IBM VisualAge C++ and XL C/C++ | |
this argument is optional, the default is gcc.config | |
o Example: | |
$ gmake BUILDDIR=/tmp/g++-15d \ | |
BUILDTYPE=15d \ | |
CONFIG=gcc.config | |
or equivalently | |
$ gmake BUILDDIR=/tmp/g++-15d \ | |
BUILDMODE=debug,shared,pthreads \ | |
CONFIG=gcc.config | |
This command will create a build directory rooted at ${BUILDDIR}, | |
run the configuration scripts, and build a thread-safe shared | |
library with debugging information included and debugging | |
facilities enabled. If the build is successful, the library will | |
be located in ${BUILDDIR}/lib/ and will be named | |
libstd${BUILDTYPE}.so.X.Y.Z (libstd${BUILDTYPE}.a if building an | |
archive). A symbolic link named libstd${BUILDTYPE}.so in the | |
same directory will also be created pointing to the shared | |
library. Public library headers are in ${TOPDIR}/include/ and its | |
subdirectories, the generated config.h is in | |
${BUILDDIR}/include/. | |
o To change preprocessor, compiler, or linker options you can | |
either set the make variables CPPOPTS, CXXOPTS, and LDOPTS on the | |
command line (recommended, except with HP aCC) or modify | |
${BUILDDIR}/makefile.in. The second option is recommended when | |
compiling with HP aCC (as the compiler looks for environment | |
variables with the same names). | |
o To reconfigure and/or rebuild the library (perhaps after changing | |
a preprocessor, compiler, or linker option), follow these steps: | |
$ cd ${BUILDDIR} | |
$ gmake -Cinclude [ config ] # configure | |
$ gmake config # same | |
$ gmake lib # build the library | |
$ gmake examples # build examples | |
$ gmake util # build utility programs | |
$ gmake rwtest # build the test driver | |
$ gmake tests # build tests | |
$ gmake locales # build locale databases | |
Alternatively, you can cd into the respective subdirectories and | |
just type gmake: | |
$ (cd ${BUILDDIR}/include && gmake) # configure | |
$ (cd ${BUILDDIR}/lib && gmake) # build the library | |
$ (cd ${BUILDDIR}/bin && gmake) # build utilities | |
$ (cd ${BUILDDIR}/examples && gmake) # build examples | |
$ (cd ${BUILDDIR}/tests && gmake) # build tests | |
$ (cd ${BUILDDIR}/bin && gmake locales) # build locale databases | |
Parallel builds (gmake -j[N]) are possible in any directory | |
except for ${BUILDDIR}/include/. | |
To remove intermediate files from the build directory, use one of | |
the following commands: | |
$ cd ${BUILDDIR} | |
$ gmake clean # remove all object files | |
$ gmake dependclean # remove .d files (dependencies) | |
$ gmake realclean # remove all temporary files | |
5.1 VisualStudio Setup Instructions | |
------------------------------------ | |
To generate a Microsoft VisualStudio solution (for .NET 2003 or 2005 | |
only) follow the step below. | |
o > CD stdlib-X.Y.Z\stdlib | |
> DIR /D # this is ${TOPDIR} | |
GNUmakefile etc examples configure.bat include src tests | |
If your distribution does not contain the test suite and/or the | |
examples, the output will look like so: | |
> DIR /D # this is ${TOPDIR} | |
GNUmakefile etc configure.bat include src | |
o > .\configure.bat [/BUILDDIR:<builddir>] [/CONFIG:<config>] | |
<builddir> is the pathname of the build directory where to create | |
the solution and projects; the directory will be | |
created (as will all its required subdirectories) | |
The <builddir> argument is optional. When not | |
specified a current directory is assumed. | |
<config> name (not pathname) of a config file containing | |
compiler options; the available configuration options | |
are: | |
icc-9.0 - for Intel C++ 9.0 | |
icc-9.1 - for Intel C++ 9.1 | |
icc-10.0 - for Intel C++ 10.0 | |
icc-10.0-x64 - for Intel C++ 10.0 (x64 platform) | |
msvc-7.0 - for Microsoft Visual C++ .NET | |
msvc-7.1 - for Microsoft Visual C++ .NET 2003 | |
msvc-8.0 - for Microsoft Visual C++ .NET 2005 | |
msvc-8.0-x64 - for Microsoft Visual C++ .NET 2005 | |
(x64 platform) | |
msvc-9.0 - for Microsoft Visual C++ .NET 2008 | |
msvc-8.0-x64 - for Microsoft Visual C++ .NET 2008 | |
(x64 platform) | |
msvcex-8.0 - for Microsoft Visual C++ Express | |
2005 | |
The <config> argument is optional. When not | |
specified, the suitable config file will be selected | |
automatically. | |
o Example: | |
> configure.bat /BUILDDIR:C:\stdcxx /CONFIG:msvc-7.1 | |
This command will create a build directory rooted at ${BUILDDIR}, | |
the solution file ${BUILDDIR}\msvc-7.1\msvc-7.1.sln, the project | |
files in directory ${BUILDDIR}\msvc-7.1\Projects, and batch file | |
${BUILDDIR}\build_msvc-7.1.bat. | |
To build the library, test suite (*), and examples (*), perform the | |
following steps: (* Where available.) | |
o > cd ${BUILDDIR} | |
o > build_msvc-7.1.bat [<build-types>] | |
<build-types> is one or more of { | |
8s, 8d, 11s, 11d, 12s, 12d, 15s, 15d | |
} | |
The numeric part of <build-type> determines the | |
presence or absence of support for debugging, | |
whether optimization is or isn't enabled, and the | |
thread safety level of the library, as follows: | |
-- optimization enabled: even numbers (i.e., 8 and | |
12) | |
-- debugging enabled: odd numbers (i.e., 11 and 15) | |
-- thread safe code: 12 and 15 | |
The single letter following the numeric part of | |
<build-type> determines whether a static or dynamic | |
library is built: | |
-- s implies an static library | |
-- d implies a dynamic library | |
The <build-types> argument is optional. When not | |
specified a build type of 11s is assumed. | |
o Example: | |
> build_msvc-7.1.bat 15d | |
run the configuration scripts, and build a thread-safe dynamic | |
library with debugging information included and debugging | |
facilities enabled. If the build is successful, the library will | |
be located in ${BUILDDIR}\msvc-7.1\${BUILDTYPE}\lib\ and will be | |
named libstd${BUILDTYPE}.dll (libstd${BUILDTYPE}.lib if building | |
a static library). Public library headers are in | |
${TOPDIR}\include\ and its subdirectories, the generated config.h | |
is in ${BUILDDIR}\msvc-7.1\${BUILDTYPE}\include\. | |
Alternatively, you can run Microsoft Visual Studio IDE, open the | |
generated solution file, select the desired solution configuration | |
and invoke "Build"->"Build Solution" command. | |
6 Library Installation | |
----------------------- | |
When using the installed library be sure to define any macros also | |
defined on the command line when building the library. These are: | |
_RWSTDDEBUG to enable debugging support in the library; when using | |
compilers that do not provide an option to enable thread safety or | |
to select a thread library, the following macros may also have to be | |
defined: _RWSTD_POSIX_THREADS, _RWSTD_SOLARIS_THREADS, | |
_RWSTD_DCE_THREADS, and _RWSTDDEBUG. Failing to do so, or failing | |
to specify the same compiler options that affect the binary | |
compatibility of the library leads to undefined behavior of the | |
produced executables. | |
6.1 Library Installation on UNIX Systems | |
----------------------------------------- | |
To install the library, including all required headers, the | |
utilities that are intended for distribution, and the full set of | |
locales, follow the following steps: | |
o $ cd ${BUILDDIR} | |
o $ gmake install PREFIX=<installation-directory> | |
The second command will build the library, the utilities, and the | |
full set of locales, create the specified installation directory if | |
it doesn't exist yet, and install in it the final product (including | |
library headers). The structure of the installation directory is as | |
follows: | |
${PREFIX} | |
| | |
+- bin/locale utility programs | |
| /localedef | |
+- etc/rwstderr.cat message catalog | |
+- include/*{,.cc} library headers | |
| /config.h generated configuration header | |
+- lib/libstd*.[a|so] archive or .so symbolic link | |
| libstd*.so.4.2.2 versioned shared library | |
+- nls/*/* codeset and locale databases | |
To specify a subset of locales to install instead of the full set, | |
define the LOCALES make variable to the desired set of locale | |
names. For example, to install only the en_US.ISO-8859-1 and | |
de_DE@UTF-8 locales, enter: | |
o $ cd ${BUILDDIR} | |
o $ gmake install PREFIX=<installation-directory> \ | |
LOCALES="en_US.ISO-8859-1 de_DE@UTF-8" | |
To use the installed library to compile and link C++ programs, set | |
your compiler's preprocessor search path (typically via the -I | |
command line option) to point to ${PREFIX}/include, and the linker | |
search path (typically via the -L command line option) to point to | |
${PREFIX}/lib, and specify the base name of the library (typically | |
via the -l command line option). | |
For example, to compile a C++ program, t.cpp, in the current working | |
directory with Sun C++ using stdcxx instead of the compiler's native | |
C++ Standard Library, and link it with the stdcxx library named | |
libstd12d (i.e., a narrow or 32-bit, optimized, reentrant, shared | |
library), enter: | |
o CC -I${PREFIX}/include -mt -library=%none -c -o t.o t.cpp | |
o CC -L${PREFIX}/lib -mt -library=%none t.o -lstd12d -o prog | |
This will produce ane executable file named prog that depends on the | |
stdcxx shared library libstd12d.so. To run the executable, set your | |
runtime loader path to point to ${PREFIX}/lib before invoking prog. | |
This is typically done like so (the name of the envrionment variable | |
may be different depending on the operating system): | |
o LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PREFIX}/lib ./prog | |
7 Test Suite Build Instructions | |
-------------------------------- | |
The test suite along with the supplied set of example programs and | |
locales can be built and run or verified by executing the following | |
commands at the shell prompt: | |
o $ cd ${BUILDDIR} | |
$ gmake [ rwtest ][ tests ] [ examples ] | |
$ gmake runall | |
The rwtest library is a prerequisite for the test programs (gmake | |
rwtest). | |
From ${BUILDDIR}, you can proceed to build the tests and the | |
examples, either individually or all at the same time. You can | |
either navigate into the respective subdirectories (i.e., | |
${BUILDDIR}/tests/, or ${BUILDDIR}/examples/) and type gmake [ | |
target ] to build there or you can build directly from | |
${BUILDDIR} by typing gmake tests or gmake examples. | |
The library sources and headers are expected to reside in | |
${TOPDIR}/src/ and ${TOPDIR}/include/, respectively, tests in | |
${TOPDIR}/tests/ and examples in ${TOPDIR}/examples/. The .d | |
(dependencies) files are placed in the .depend/ subdirectory, and | |
.o (object) files and the executables are placed in the | |
respective subdirectories of ${BUILDDIR}. | |
To run all examples and compare their output with the expected | |
master output, all tests, and build and verify all locales, type | |
gmake run while in ${BUILDDIR}. To run the tests or examples | |
individually, cd into ${BUILDDIR}/tests/ or | |
${BUILDDIR}/examples/, respectively, and type gmake run. | |
7.1 VisualStudio Test Suite Build Instructions | |
----------------------------------------------- | |
When available, the test suite can be built by following the | |
following steps. | |
o Run Microsoft Visual Studio IDE, open the generated solution | |
file and select the desired solution configuration. | |
To build the examples select the .stdcxx_examples project and | |
invoke "Build"->"Build .stdcxx_examples" command. | |
To build the tests select the .stdcxx_tests project and invoke | |
"Build"->"Build .stdcxx_tests" command. | |
To run the examples select the .stdcxx_runexamples project and | |
invoke "Build"->"Build .stdcxx_runexamples" command. | |
To run the tests select the .stdcxx_runtests project and invoke | |
"Build"->"Build .stdcxx_runtests" command. | |
8 Library Configuration | |
------------------------ | |
8.1 Heade config.h (and config.log) | |
------------------------------------ | |
The library is configured (or reconfigured) for the platform (i.e., | |
the compiler and operating system) it is to be built by executing | |
the following command in the ${BUILDDIR}/include/ directory: | |
$ gmake config | |
This command generates a new config.h header file in the | |
${BUILDDIR}/include/ directory (replacing an existing one only if | |
the new one differs) containing configuration macros describing to | |
the library the properties of the platform. Executing the config | |
target writes the details of the configuration, including the | |
executed commands, into a log file named config.log. This file is | |
helpful in detecting configuration problems when porting the library | |
to new environments. | |
8.2 rw/_config.h and rw/_defs.h | |
-------------------------------- | |
The generated config.h header is #included by a single private | |
library header, ${TOPDIR}/include/rw/_config.h. The purpose of this | |
header is to provide a central place for the maintainers of the | |
project to manually override the configuration macros #defined in | |
the automatically generated config.h (e.g., by #undefining them when | |
they are #defined incorrectly or vice versa) based on their | |
knowledge of the platform. | |
The header is divided into three sets of sections: one for the | |
hardware architecture, one for each supported compiler, and one for | |
each supported operating system. Each section may #define or | |
#undefine object-like configuration macros. As a matter of | |
convention, function-like macros are not #defined in this header. | |
The ${TOPDIR}/rw/_config.h header is #included by a single library | |
header, ${TOPDIR}/include/rw/_defs.h. The purpose of this header is | |
to #define convenience function-like macros, typically based on the | |
value of one or more object-like configuration macros #defined in | |
${BUILDDIR}/include/config.h and/or ${TOPDIR}/include/rw/_config.h, | |
that can then be easily used in the library headers and sources | |
without the need for complicated, hard-to-read preprocessor | |
conditionals. The idea is that all the complicated, unsightly logic | |
is tucked away in one central place and the rest of the code is | |
clean, even if obfuscated by macros. | |
Every other library header, whether public or private, #includes the | |
${TOPDIR}/include/rw/_defs.h header. | |
8.3 Configuration Macros | |
------------------------- | |
The library and the testsuite make use of a large number of macros | |
to adjust their interface and behavior to the capabilities of the | |
compiler, the underlying C libraries, and the operating system. | |
Many of the macro definitions are generated during the | |
autoconfiguration of the library and placed in | |
${BUILDDIR}/include/config.h. Some (but not necessarily all) of the | |
important macros are described here. This list is intended as a | |
reference for maintainers or porters of the library. | |
The symbols in square brackets next to the macros below have the | |
following meaning: | |
- abi: Affects the binary (ABI or functional) compatibility of the | |
library. The macro must be consistently #defined to the same value | |
(or consistently #undefined) during the compilation of the library | |
as well while using it. | |
- auto: Automatically determined and #defined during configuration | |
- lib: Affects library builds. The macro is not to be set except | |
when building the library. | |
- over: May be #defined or overridden on the command line or by | |
editing one of the two config headers either when building the | |
library or when using it (except for those marked lib). | |
In addition, whenever a macro with the same root but a different | |
suffix appears in the description a modified regular expression | |
syntax has been used to abbreviate the list. | |
8.3.1 Platform Identification Macros | |
------------------------------------- | |
The configuration infrastructure #defines a number of macros some of | |
which can and should be used instead of similar such macros #defined | |
by some compilers. | |
o _RWSTD_OS_<os-name> | |
The name of the macro depends on the name of the operating system | |
typically reported by the uname utility: | |
_RWSTD_OS_AIX: AIX | |
_RWSTD_OS_DARWIN: Apple Darwin | |
_RWSTD_OS_FREEBSD: FreeBSD | |
_RWSTD_OS_HP_UX: HP-UX | |
_RWSTD_OS_IRIX64: IRIX | |
_RWSTD_OS_LINUX: Linux | |
_RWSTD_OS_NETBSD: NetBSD | |
_RWSTD_OS_OSF1: Tru64 UNIX | |
_RWSTD_OS_SUNOS: SunOS and Solaris | |
_RWSTD_OS_WINDOWS: Microsoft Windows | |
o _RWSTD_OS_SYSNAME | |
This macro expands to a string literal with the name of the | |
operating system (the output of uname). | |
o _RWSTD_OS_RELEASE | |
This macro expands to a string literal with the name of the | |
operating system release (the output of uname -r). | |
o _RWSTD_OS_VERSION | |
This macro expands to a string literal with the name of the | |
operating system version (the output of uname -v). | |
o _RWSTD_OS_MAJOR | |
This macro expands to the major operating system version as a | |
constant integer expressions suitable for use in #if | |
preprocessing directives. | |
o _RWSTD_OS_MINOR | |
This macro expands to the minor operating system version as a | |
constant integer expressions suitable for use in #if | |
preprocessing directives. | |
o _RWSTD_OS_MICRO | |
This macro expands to the micro operating system version as a | |
constant integer expressions suitable for use in #if | |
preprocessing directives. | |
8.3.2 Compiler Configuration Macros | |
------------------------------------ | |
o _RWSTD_NO_CONST_CAST [auto, over] | |
o _RWSTD_NO_DYNAMIC_CAST [auto, over] | |
o _RWSTD_NO_REINTERPRET_CAST [auto, over] | |
o _RWSTD_NO_STATIC_CAST [auto, over] | |
#defined when the respective cast operator is not available or | |
does not function properly. In such cases, the ordinary | |
(C-style) cast is used instead. | |
o _RWSTD_NO_EXCEPTION_SPECIFICATION [auto] | |
#defined when function exception specification is not supported | |
or not functioning properly. All function exception | |
specifications in the source code are removed. | |
o _RWSTD_NO_EXPORT [auto, over] | |
#defined when the export keyword is not supported or when the | |
export feature does not work as expected. | |
o _RWSTD_NO_EXPORT_KEYWORD [auto, over] | |
#defined when the export keyword is not supported. | |
o _RWSTD_NO_FUNCTION_TRY_BLOCK [auto] | |
#defined when the function try block syntax is not supported. | |
o _RWSTD_NO_EXCEPTIONS [auto, lib] | |
#defined when exceptions are not supported or disabled. All try | |
keywords in the source code are removed, catch expands to while | |
(0) with the assumption that an optimizing compiler will remove | |
the block. | |
o _RWSTD_NO_EXPLICIT_INSTANTIATION [abi, auto, lib] | |
#defined when explicit template instantiation isn't supported. | |
o _RWSTD_NO_EXPLICIT_CTOR_INSTANTIATION [auto] | |
#defined when explicit template instantiation of constructors | |
isn't supported. | |
o _RWSTD_NO_EXPLICIT_FUNC_INSTANTIATION [abi, auto, lib] | |
#defined when explicit function template instantiation isn't | |
supported. | |
o _RWSTD_NO_EXPLICIT_INSTANTIATION_BEFORE_DEFINITION [auto, lib] | |
#defined when class templates cannot be explicitly instantiated | |
lexically before the definitions of all their members defined | |
outside their bodies. | |
o _RWSTD_NO_EXPLICIT_INSTANTIATION_WITH_IMPLICIT_INCLUSION [auto] | |
#defined when explicit template instantiation isn't supported in | |
conjunction with the implicit inclusion of template definition | |
files (i.e., the .c or .cc files). | |
o _RWSTD_NO_EXPLICIT_MEMBER_INSTANTIATION [auto] | |
#defined when the explicit instantiation of member functions of | |
class templates isn't supported. | |
o _RWSTD_NO_EXTERN_TEMPLATE [auto, over] | |
When #defined, the extern template C++ extension is not supported | |
by the compiler. | |
o _RWSTD_NO_IMPLICIT_INSTANTIATION [auto] | |
#defined when the explicit instantiation of a template that | |
references another template doesn't cause the implicit | |
instantiation of the other template. | |
o _RWSTD_NO_INSTANTIATE_DEFAULT_ARGS | |
#defined when the explicit instantiation of a function template | |
with a default argument causes the instantiation of the argument. | |
o _RWSTD_NO_HONOR_STD | |
#defined when namespace std is not completely honored. The macro | |
is typically only #defined when using gcc versions prior to 3.0 | |
without the -fhonor-std compiler option. | |
o _RWSTD_NO_ICONV_CONST_CHAR [auto] | |
#defined at configuration time according to the declaration of | |
the POSIX function iconv(). | |
o _RWSTD_NO_INSTANTIATE_DEFAULT_ARGS [auto, over] | |
#defined at configuration time for C++ implementations that | |
instantiate default arguments of function templates (or member | |
functions of class templates) that depend on a template | |
parameter. | |
o _RWSTD_NO_ISO_10646_WCHAR_T | |
#defined for libc implementations that do not represent values of | |
wchar_t type in the ISO 10646 encoding (essentially UCS-4, or | |
UNICODE). | |
o _RWSTD_NO_IMPLICIT_INCLUSION | |
#defined for the compilers that use the Borland instantiation | |
model. It is also defined in some tests and example programs | |
that have a code layout which is incompatible with using | |
implicit inclusion on AIX 5.1 with VisualAge for C++ 5.0.2.0. | |
o _RWSTD_NO_INSTANTIATE [abi, lib, over] | |
When #defined the library will not explicitly instantiate any | |
class or function templates. | |
o _RWSTD_NO_LIB_EXCEPTIONS [auto, lib] | |
#defined at configuration time when exceptions throws from a | |
library cannot be caught in a program that links with the | |
library. | |
o _RWSTD_NO_LIST_NODE_BUFFER [abi, over] | |
#defined to disable node buffer management of the class template | |
std::list. | |
o _RWSTD_NO_LONG_LONG [abi, auto] | |
#defined if the C99 type long long is not supported or disabled, | |
or when _RWSTD_STRICT_ANSI is #defined. | |
o _RWSTD_NO_MEMBER_EXPLICIT_INSTANTIATION [auto, over] | |
#defined when explicit instantiation of member templates is not | |
supported. | |
o _RWSTD_NO_MEMBER_TEMPLATES [abi, auto] | |
#defined when member templates are not supported. The library | |
tries to provide alternative solutions wherever possible. Some | |
loss of functionality is inevitable. | |
o _RWSTD_REENTRANT [abi, auto, lib] | |
#defined for multi-thread safe build types 12[sd] and 15[sd] | |
either automatically, when the library detects the usage of a | |
special compiler switch (e.g. -mt on HP-UX and Sun/Solaris), or | |
through the compiler configurations files in etc/config/ | |
directory. | |
o _RWSTD_NO_MUTABLE [auto, over] | |
#defined at configuration time for C++ implementations that do | |
not recognize the word mutable as a valid keyword. | |
o _RWSTD_NO_NAMESPACE [abi, auto, lib] | |
#defined when namespaces are not supported or disabled. All | |
namespace-scope symbols defined in the sources are introduced to | |
the global namespace. All using declarations and directives are | |
removed. | |
o _RWSTD_NO_NATIVE_BOOL [abi, auto, lib] | |
#defined for C++ implementations that do not treat bool as a | |
distinct fundamental type (but perhaps provide a typedef). | |
o _RWSTD_NO_NATIVE_WCHAR_T | |
#defined for C++ implementations that do not treat wchar_t as a | |
distinct fundamental type (but perhaps provide a typedef). | |
o _RWSTD_NO_NEW_HEADER [auto, over] | |
When #defined, files will #include the deprecated C library | |
header files rather than the "new" C++ C library files (e.g., | |
<string.h> rather than <cstring>). | |
o _RWSTD_NO_NEW_CLASS_TEMPLATE_SYNTAX | |
o _RWSTD_NO_NEW_FUNC_TEMPLATE_SYNTAX | |
o _RWSTD_NO_NEW_TEMPLATE_SYNTAX | |
o _RWSTD_NO_NONCLASS_ARROW_RETURN | |
o _RWSTD_NO_NONDEDUCED_CONTEXT | |
o _RWSTD_NO_NONTYPE_ARGS | |
o _RWSTD_NO_NONTYPE_ARGUMENT_DEDUCTION | |
o _RWSTD_NO_OBJECT_MANGLING [abi, auto, lib] | |
#defined when the compiler does not include (mangle) information | |
about the type of namespace-scope objects in their names. | |
o _RWSTD_NO_PARTIAL_CLASS_SPEC [abi, auto] | |
#defined when partial specialization of class templates isn't | |
supported or isn't functional. | |
o _RWSTD_NO_PART_SPEC_OVERLOAD | |
o _RWSTD_NO_PRAGMA_INSTANTIATE [lib, over] | |
#defined when the #pragma instantiate directive isn't supported. | |
o _RWSTD_NO_PRETTY_FUNCTION [auto, lib, over] | |
#defined when the __PRETTY_FUNCTION__ special identifier (a | |
common extension) is not supported. | |
o _RWSTD_NO_PTR_EXCEPTION_SPEC [auto, over] | |
#defined when declaring function pointers with exception | |
specification is not supported. | |
o _RWSTD_NO_PTR_VALUE_TEMPLATE_OVERLOAD | |
o _RWSTD_NO_REDUNDANT_DEFINITIONS | |
o _RWSTD_NO_REDUNDANT_DEFINITIONS [over] | |
When #defined, public library headers will #include only a | |
minimum set of other library headers necessary in order for the | |
definitions of templates contained therein to compile without | |
actually instantiating any of them. #defining the macro has the | |
potential to decrease compile times. | |
o _RWSTD_NO_SETLOCALE_ENVIRONMENT [auto, lib] | |
#defined when the C locale is not affected by the setting of the | |
LC_XXX environment variables. | |
o _RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES | |
o _RWSTD_NO_SPECIALIZED_FRIEND | |
o _RWSTD_NO_STATIC_CONST_MEMBER_INIT | |
o _RWSTD_NO_STATIC_TEMPLATE_MEMBER_INIT | |
o _RWSTD_NO_STATIC_MUTEX_INIT [abi, auto, lib, over] | |
#defined when mutex objects with static storage duration cannot | |
be statically initialized (3.6.2 [basic.start.init]) but must be | |
initialized during dynamic initialization instead. The macro has | |
an impact on thread-safety of the library. | |
o _RWSTD_NO_TEMPLATE_DEFINITIONS [over] | |
When #defined, public library header files containing definitions | |
of iostream and locale templates do not explicitly #include the | |
corresponding implementation .cc files. This option considerably | |
decreases compile times on platforms that do not support implicit | |
file inclusion. The macro has no effect when explicit | |
instantiation is not supported. The macro must not be #defined | |
when specializations other than those provided by the library | |
binary are instantiated. | |
o _RWSTD_NO_TEMPLATE_TEMPLATE [auto] | |
#defined when template template arguments aren't supported. | |
o _RWSTD_NO_THROW_SPEC_ON_NEW | |
When #defined, overloads of operators new and delete declared in | |
the public library header <new> do not include the required | |
exception specifications. | |
o _RWSTD_NO_TYPENAME [auto] | |
#defined when they keyword typename isn't fully supported. | |
o _RWSTD_NO_COLLAPSE_STATIC_LOCALS [auto] | |
#defined when the compiler/linker fail to collapse static local | |
variables defined in a function template instantiated on the same | |
type in multiple translation units into one. | |
o _RWSTD_NO_COLLAPSE_TEMPLATE_LOCALS [auto] | |
#defined when the compiler/linker fail to collapse static local | |
variables whose type depends on a template parameter and that are | |
defined in a function template instantiated on the same type in | |
multiple translation units into one. | |
o _RWSTD_NO_COLLAPSE_TEMPLATE_STATICS [auto] | |
#defined when the compiler/linker fail to collapse static data | |
members of a class template instantiated on the same type in | |
multiple translation units into one. | |
o _RWSTD_NO_USING_LIBC_IN_STD | |
o _RWSTD_NO_VECTOR_BOOL | |
When #defined the vector<bool> partial specialization is disabled | |
and the primary template is used instead. | |
8.3.3 Runtime Library Configuration Macros | |
------------------------------------------- | |
o _RWSTD_NO_NEW_THROWS [auto] | |
When #defined, operator new doesn't throw an exception but | |
instead returns 0 on failure. | |
o _RWSTD_NO_{GLOBAL,STD}_BAD_{ALLOC,CAST,EXCEPTION,TYPEID} | |
o _RWSTD_NO_{GLOBAL,STD}_EXCEPTION | |
o _RWSTD_NO_{GLOBAL,STD}_NOTHROW[_T] | |
o _RWSTD_NO_{GLOBAL,STD}_SET_{NEW_HANDLER,TERMINATE,UNEXPECTED} | |
o _RWSTD_NO_{GLOBAL,STD}_TERMINATE | |
[abi, auto, lib] | |
The macros above are #defined at configuration time according to | |
which namespace (global or std) each type (or the object nothrow) | |
is defined in by the language runtime library. | |
o _RWSTD_NO_{BAD_ALLOC,BAD_CAST,BAD_EXCEPTION,BAD_TYPEID}_{ASSIGNMENT, | |
COPY_CTOR,DEFAULT_CTOR,DTOR,WHAT} [abi, auto, lib] | |
Each macro is #defined when the corresponding member of each | |
respective class is not defined in the language support library. | |
o _RWSTD_NO_OPERATOR_{DELETE,NEW}[_ARRAY][{_NOTHROW,_PLACEMENT}] | |
[auto, over] | |
#defined at configuration time when the definition of the | |
corresponding operator does not appear in the compiler support | |
library. The library will provide the missing definitions by | |
default. If any definition (except for the non-replaceable | |
placement forms) needs to be replaced, user code should either | |
#undefine the corresponding macro first or #define | |
_RWSTD_NO_EXT_OPERATOR_NEW to disable all definitions provided by | |
the library. | |
The library is autoconfigured to detect the level of support for | |
these operators provided by the compiler. The configuration | |
macros below are #defined if and only if the functions are not | |
found in the compiler support (a.k.a. language runtime) | |
library. For each #defined macro, the C++ Standard library | |
defines the corresponding function in header <new>. | |
[x] _RWSTD_NO_OPERATOR_DELETE_ARRAY | |
[x] _RWSTD_NO_OPERATOR_DELETE_ARRAY_NOTHROW | |
[ ] _RWSTD_NO_OPERATOR_DELETE_ARRAY_PLACEMENT | |
[x] _RWSTD_NO_OPERATOR_DELETE_NOTHROW | |
[ ] _RWSTD_NO_OPERATOR_DELETE_PLACEMENT | |
[x] _RWSTD_NO_OPERATOR_NEW_ARRAY | |
[x] _RWSTD_NO_OPERATOR_NEW_ARRAY_NOTHROW | |
[ ] _RWSTD_NO_OPERATOR_NEW_ARRAY_PLACEMENT | |
[x] _RWSTD_NO_OPERATOR_NEW_NOTHROW | |
[ ] _RWSTD_NO_OPERATOR_NEW_PLACEMENT | |
In addition, however, since the functions whose corresponding | |
config macros above are marked [x] must be replaceable, and since | |
it may not be possible to achieve the effect of replaceability | |
without compiler support, the user-controlled macro | |
_RWSTD_NO_EXT_OPERATOR_NEW may be manually #defined to prevent | |
the library from defining the functions if a program needs to | |
replace them. | |
Finally, the macro _RWSTD_NO_PLACEMENT_DELETE may be #defined | |
(either by the library headers or, if not, by a program) if it is | |
necessary to disable declarations and definitions of placement | |
forms of operator delete, e.g., due to a compiler limitation or a | |
bug. | |
o _RWSTD_NO_PLACEMENT_DELETE [auto, over] | |
When #defined, placement forms of ::operator delete() will not be | |
declared (or defined) by the header <new>. Provided in case their | |
declarations cause problems in user code. | |
8.3.4 C Library Configuration Macros | |
------------------------------------- | |
o _RWSTD_NO_EQUAL_CTYPE_MASK [auto, lib] | |
When #defined, the isxxx() and iswxxx() character classification | |
functions return different results for of the same arguments. | |
o _RWSTD_NO_LIBC_IN_STD [auto, over] | |
When #defined, the names defined by the C library are expected to | |
be found in namespace std. Otherwise they are expected to be | |
defined only in the global namespace. | |
o _RWSTD_NO_{CASSERT,CCTYPE,CERRNO,CFLOAT,CISO646,CLIMITS,CLOCALE, | |
CMATH,CSETJMP,CSIGNAL,CSTDARG,CSTDDEF,CSTDIO,CSTDLIB, | |
CSTRING,CTIME,CWCHAR,CWCTYPE} [auto] | |
#defined when the respective header is not found in the | |
preprocessor search path. | |
o _RWSTD_NO_${FUN}[_IN_LIBC] [auto] | |
#defined when the extern "C" function ${FUN} declaration is not | |
found in the expected C header, or if the extern "C" symbol | |
${FUN} is not found in the libc binary. | |
o _RWSTD_NO_{ABS,ACOS,ASIN,ATAN,ATAN2,CEIL,COS,COSH,EXP,FABS,FLOOR, | |
FMOD,FREXP,LDEXP,LOG,LOG10,MODF,POW,POW,SIN,SINH,SQRT, | |
TAN,TANH}{D,DBL,F,FLT,L,LDBL}[_IN_LIBM] [auto] | |
#defined when the respective functions are not found during | |
autoconfiguration in the <math.h> header or in the libm library | |
binary. For example, when the function extern "C" float | |
acosf(float) is not declared in <math.h> on a platform but the | |
symbol extern "C" acosf is found in the libm library binary, the | |
macro _RWSTD_NO_ACOSF will be #defined but the macro | |
_RWSTD_NO_ACOSF_IN_LIBM will be #undefined. | |
o _RWSTD_NO_PURE_C_HEADERS | |
#defined to disable the use of "pure" C++ Standard C library | |
headers. The pure headers expose only the set of symbols | |
specified by the C++ and C standards and nothing more. | |
o _RWSTD_NO_WCSFTIME_WCHAR_T_FMAT [auto] | |
8.3.5 Macros Controlling Strings | |
--------------------------------- | |
o _RWSTD_NO_STRING_MUTEX [abi, lib, over] | |
When #defined std::basic_string objects are not reference counted. | |
o _RWSTD_ONE_STRING_MUTEX [abi, lib, over] | |
When #defined std::basic_string objects are reference counted. A | |
single per-process mutex object is used for thread safety. | |
o _RWSTD_USE_STRING_ATOMIC_OPS [abi, lib, over] | |
When #defined on Linux/x86_64 (AMD64 or EM64T), in wide (64-bit) | |
mode, std::basic_string objects use atomic operations for | |
reference counting instead of the default mutex. Using a mutex | |
in basic_string is suboptimal and is only done in this release of | |
the library to maintain binary compatibility with previous | |
versions. This macro is provided to allow users not constrained | |
by binary compatibility to make use of the more efficient | |
implementation of strings. The macro has no effect in the narrow | |
(32-bit) configuration on this platform or on any other | |
platforms. | |
8.3.6 Macros Controlling Iostreams | |
----------------------------------- | |
o _RWSTD_NO_IOSTREAM_OBJECT_REFS [abi, auto, lib, over] | |
When #defined while _RWSTD_NO_STATIC_IOSTREAM_INIT is not | |
#defined, the eight standard iostream objects (cout, etc.) are | |
declared in <iostream> to be of their respective types but | |
defined in the library binary to be of an unrelated POD type to | |
prevent their destruction during program lifetime. Since object | |
type isn't typically encoded in its name and the declaration and | |
definition isn't ever seen by the compiler in the same | |
translation unit this doesn't cause problems. | |
o _RWSTD_NO_NATIVE_IO [lib, over] | |
#defined to force file streams to use the facilities of libc | |
stdio as opposed to the POSIX I/O interface. | |
o _RWSTD_DEFAULT_BUFSIZE [lib, over] | |
#defined to the size of the character buffer used by objects of | |
std::basic_filebuf<>, in characters. The default value is 512. | |
o _RWSTD_PBACK_SIZE [lib, auto] | |
#defined to the size of the basic_streambuf putback area in | |
characters. The default value is 4. | |
o _RWSTD_NO_REENTRANT_IO [abi, lib, over] | |
#defined when the iostream library should not be thread-safe. | |
o _RWSTD_NO_REENTRANT_IO_DEFAULT [abi, lib, over] | |
#defined when the standard iostream objects should not be | |
thread-safe by default. | |
o _RWSTD_NO_STATIC_IOSTREAM_INIT [abi, auto, lib, over] | |
When #defined, the eight standard iostream objects (std::cin, | |
std::cout, etc.) are ordinary objects with static storage | |
duration and are destroyed during program lifetime (which | |
violates 27.3, p2). | |
8.3.7 Macros Controlling Locale | |
-------------------------------- | |
o _RWSTD_NO_CAT_NAMES | |
When #defined, combined locale names do not include the names of | |
locale categories. For example, on Solaris, combined locale names | |
consist of the name of each category in a fixed order separated | |
by slashes. On Linux, combined locale names, however, include the | |
name of each category followed by the equals sign followed by the | |
name of the locale, with the categories separated from one | |
another by a semicolon. E.g., "LC_CTYPE=C;LC_TIME=en;..." | |
o _RWSTD_NO_INITIAL_CAT_SEP [auto, lib] | |
#defined at configuration time in environments where combined | |
libc locale names do not begin with the character used to | |
separate the names of individual locale categories. For example, | |
HP-UX 11.00 combined locale name has the form "C C C en C C" but | |
on Solaris, the equivalent name would be "/C/C/C/en/C/C". On | |
Solaris, then, the macro would be #defined. | |
o _RWSTD_CAT_SEP | |
Expands to a character string that separates locale categories in | |
combined locale names (such as " " on AIX and HP-UX, "/" on | |
Solaris, or ";" on Linux). | |
o _RWSTD_NO_CAT_EQ | |
When #defined, the names of locale categories in combined locale | |
names are not separated from the name of the locale by the | |
equals sign. | |
o _RWSTD_NO_CONDENSED_NAME | |
When #defined, locale names always include all locale | |
categories, even if they are all the same. This is true, for | |
example, on HP-UX when the name of the "C" locale returned from | |
setlocale (LC_ALL, 0) is "C C C C C C" and not just "C" as it is | |
on Solaris. | |
o _RWSTD_LDBL_PRINTF_PREFIX [auto, lib] | |
#defined the printf() format modifier as a string literal for | |
type long double, when supported. Typically, the value of the | |
macro is "L". | |
o _RWSTD_NO_LDBL_PRINTF_PREFIX [auto, lib] | |
#defined when no printf() format modifier for type long double is | |
known. | |
o _RWSTD_LLONG_PRINTF_PREFIX [auto] | |
#defined the printf() format modifier as a string literal for | |
type long long, when supported. Typically, the value of the macro | |
is "ll". | |
o _RWSTD_NO_LLONG_PRINTF_PREFIX [auto] | |
#defined when no printf() format modifier for type long long is | |
known. | |
o _RWSTD_EXPORT [auto] | |
_RWSTD_CLASS_EXPORT [auto] | |
_RWSTD_MEMBER_EXPORT [auto] | |
These three macros control the exporting of symbols from the | |
library; the latter two are used in selectively controlling the | |
exporting of symbols from classes that have member templates | |
(e.g. locale class). | |
o _RWSTD_NO_STRTOF_UFLOW [auto, lib] | |
_RWSTD_NO_STRTOD_UFLOW | |
_RWSTD_NO_STRTOLD_UFLOW | |
Each of these macros is #defined when the corresponding C library | |
function fails to set errno (usually to ERANGE) on underflow. | |
8.3.8 Macros Controlling Implementation Properties | |
--------------------------------------------------- | |
o _RWSTD_BOOL_SIZE [abi, auto, lib] | |
_RWSTD_CHAR_SIZE | |
_RWSTD_SHRT_SIZE | |
_RWSTD_INT_SIZE | |
_RWSTD_LONG_SIZE | |
_RWSTD_LLONG_SIZE | |
_RWSTD_FLT_SIZE | |
_RWSTD_DBL_SIZE | |
_RWSTD_LDBL_SIZE | |
_RWSTD_WCHAR_T_SIZE | |
_RWSTD_PTR_SIZE | |
_RWSTD_FUNPTR_SIZE (function pointer) | |
_RWSTD_MEMPTR_SIZE (member pointer) | |
Each of the _RWSTD_<type>_SIZE macros above expands to the size | |
of the respective fundamental type (as returned by sizeof) as a | |
constant integer expressions suitable for use in #if | |
preprocessing directives. If no such type exists the | |
corresponding macros are not #defined. | |
o _RWSTD_CHAR_BIT | |
Expands to the value of CHAR_BIT as a constant integer | |
expressions suitable for use in #if preprocessing directives. | |
o _RWSTD_BOOL_{MAX,MIN} [abi, auto, lib] | |
_RWSTD_CHAR_{MAX,MIN} | |
_RWSTD_SCHAR_{MAX,MIN} (int) | |
_RWSTD_UCHAR_{MAX,MIN} (unsigned int) | |
_RWSTD_SHRT_{MAX,MIN} (int) | |
_RWSTD_USHRT_{MAX,MIN} (unsigned int) | |
_RWSTD_INT_{MAX,MIN} | |
_RWSTD_UINT_{MAX,MIN} | |
_RWSTD_LONG_{MAX,MIN} | |
_RWSTD_ULONG_{MAX,MIN} | |
_RWSTD_LLONG_{MAX,MIN} | |
_RWSTD_ULLONG_{MAX,MIN} | |
_RWSTD_WCHAR_T_{MAX,MIN} (int or long) | |
_RWSTD_SIZE_{MAX,MIN} (size_t) | |
_RWSTD_PTRDIFF_{MAX,MIN} (ptrdiff_t) | |
_RWSTD_WINT_{MAX,MIN} (wint_t) | |
Each of the _RWSTD_<type>_{MAX,MIN} macros above expands to the | |
maximum and minimum representable value in the respective integer | |
type as a constant integer expressions suitable for use in #if | |
preprocessing directives. Except as marked, the type of each | |
macro is the corresponding type promoted according to the integer | |
promotion rules. If no such type exists the corresponding macros | |
are not #defined. | |
o _RWSTD_INT8_T [abi, auto, lib] | |
_RWSTD_UINT8_T | |
_RWSTD_INT16_T | |
_RWSTD_UINT16_T | |
_RWSTD_INT32_T | |
_RWSTD_UINT32_T | |
_RWSTD_INT64_T | |
_RWSTD_UINT64_T | |
Each of the _RWSTD_INT<width>_T and _RWSTD_UINT<width>_T macros | |
above expands to the signed and unsigned, respectively, type T | |
for which (sizeof(T) * CHAR_BIT == width) holds. If no such type | |
exists the macro is not #defined. Note that each macro can expand | |
to two or more tokens. | |
o _RWSTD_{FLT,DBL,LDBL}_{INF,SNAN,QNAN}_BITS [auto, lib] | |
#defined at configuration time to be the byte representation of | |
infinity, signaling NaN and quiet NaN, respectively. The macros | |
are defined as brace-delimited arrays of chars. | |
o _RWSTD_{FLT,DBL,LDBL}_HAS_DENORM [auto, lib] | |
#defined to 1 when the corresponding floating point type supports | |
denormalized values and to 0 otherwise. | |
o _RWSTD_NO_DBL_TRAPS [auto, lib] | |
#defined when values of type double implement trapping for | |
certain arithmetic operations (such division by zero). | |
o _RWSTD_NO_IEC559 [auto, over] | |
#defined at configuration time if it is determined that the | |
environment fails to satisfy the requirements of the IEC 559 | |
standard. | |
o _RWSTD_NO_IEEEFP_H | |
o _RWSTD_NO_INFINITY [auto] | |
#defined at configuration time for environments that do not | |
support the concept of a floating point infinity. | |
o _RWSTD_NO_INT_TRAPS [auto, lib] | |
#defined when values of type int implement trapping for certain | |
arithmetic operations (such division by zero). | |
o _RWSTD_NO_NAN_TRAPS [auto, lib] | |
#defined when the value NaN (Not a Number) causes a hardware trap | |
when used in arithmetic expressions. | |
o _RWSTD_NO_SIGNALING_NAN | |
8.3.9 Other Configuration Macros | |
--------------------------------- | |
o _RWSTD_NO_OPTIMIZE_SPEED | |
8.3.10 Macros Controlling Extensions | |
------------------------------------- | |
The following options are provided to allow to disable various | |
library extensions. An extensions is defined as a library interface | |
or its behavior that is left unspecified by the standard or, in some | |
rare cases, that is specified by the standard but where this | |
implementation differs from the specification. | |
In addition to the symbols in square brackets defined above, the | |
symbol pure denotes an extension that is not conflict with the C++ | |
standard: | |
o _RWSTD_NO_EXTENSIONS [over] | |
o _RWSTD_STRICT_ANSI [over] | |
When #defined, most library extensions are disabled by #defining | |
the various _RWSTD_NO_EXT_XXX macros documented below. The | |
_RWSTD_STRICT_ANSI macro is deprecated and should be avoided. | |
o _RWSTD_NO_EXT_DEQUE_ASSIGN_IN_PLACE [over] | |
o _RWSTD_NO_EXT_DEQUE_INSERT_IN_PLACE [over] | |
o _RWSTD_NO_EXT_VECTOR_ASSIGN_IN_PLACE [over] | |
o _RWSTD_NO_EXT_VECTOR_INSERT_IN_PLACE [over] | |
When #defined, the multi-element overloads of the member | |
functions assign() and insert() defined by the class templates | |
deque and vector provide the basic exception guarantee as | |
required by the C++ Standard. Otherwise, when (size() >= N) holds | |
for N being the number elements being assigned or inserted, and | |
value_type's assignment operator or iterator operations do not | |
throw, the functions provide the nothrow exception guarantee. | |
o _RWSTD_NO_EXT_FILEBUF [pure, over] | |
When #defined, extensions to the class template | |
std::basic_filebuf and the std::basic_fstream family of templates | |
are not available. | |
o _RWSTD_NO_EXT_DEEP_STRING_COPY [pure] | |
When #defined, the member function copy() of class template | |
basic_string which returns a deep copy of the string object is | |
not declared. | |
o _RWSTD_NO_EXT_FAILURE [lib, over, pure] | |
When #defined, disables extensions to the std::ios_base::failure | |
class (i.e., the classes std::ios_base::badbit_set, eofbit_set, | |
and failbit_set). #defining _RWSTD_STRICT_ANSI causes the | |
#definition of this macro as well. | |
o _RWSTD_NO_EXT_BITSET_CTOR_CHAR_ARRAY [over, pure] | |
When #defined, disable the declarations of the two std::bitset | |
constructor overloads that take const char* and const wchar_t*, | |
respectively, as their first argument. The purpose of this | |
extension is to make it possible to construct std::bitset objects | |
from string literals without dynamic memory allocation. | |
o _RWSTD_NO_EXT_BITSET_CTOR_STRING [over, pure] | |
When #defined, disable the declaration of the two std::bitset | |
constructor overloads that take std::string and std::wstring, | |
respectively, as their first argument. The purpose of this | |
extension is to make it possible to construct std::bitset objects | |
from string literals. | |
o _RWSTD_NO_EXT_BITSET_TO_STRING [over, pure] | |
When #defined, disables the declarations of the three overloads | |
of the const member function to_string() of the class template | |
std::bitset specified in LWG issue 434: | |
http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#434 | |
o _RWSTD_NO_EXT_BIN_IO [over, pure] | |
When #defined, disables support for base 2 numerical input and | |
output in iostreams and the std::num_get<> and std::num_put<> | |
facets, and undefines the symbol std::ios_base::bin. #defining | |
_RWSTD_STRICT_ANSI causes the #definition of this macro as well. | |
o _RWSTD_NO_EXT_IOS_SAFE_CONVERSION [over] | |
When #defined, the const member function operator void*() of | |
the class template basic_ios is declared. Otherwise, the | |
resolution of the Library Working Group's issue 568 is | |
implemented instead. See | |
http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#468 | |
o _RWSTD_NO_EXT_OPERATOR_NEW [auto, over] | |
When #defined, disables the replaceable definitions provided in | |
<new> for missing global operators new and delete, allowing them | |
to be defined by the user. | |
o _RWSTD_NO_EXT_PORTABLE_RANDOM_SEQUENCE [lib, pure] | |
When #defined, the random number generator used by this | |
implementation of the C++ Standard Library generates integer | |
values in the full range of the type size_t. Otherwise, the | |
generator is restricted to the range of unsigned 32-bit values | |
for data portability. | |
o _RWSTD_NO_EXT_REENTRANT_IO [over, pure] | |
When #defined, disables support for user-control of iostream and | |
streambuf locking, and undefines the symbols | |
std::ios_base::nolock and std::ios_base::nolockbuf. Only | |
relevant in thread-safe builds. #defining _RWSTD_STRICT_ANSI | |
causes the #definition of this macro as well. | |
o _RWSTD_NO_EXT_SETBASE | |
When #defined, the std::setbase manipulator accepts only the | |
required numeric bases (i.e., 0, 8, 10, 16, and 2 unless | |
_RWSTD_NO_EXT_BIN_IO is also #defined). | |
o _RWSTD_NO_EXT_VOID_COUNT [over, pure] | |
When #defined, disables the non-conforming versions of the | |
std::count() and std::count_if() algorithms that take four or | |
five arguments, respectively, and return void. The algorithms are | |
provided for backward compatibility or on platforms that cannot | |
handle partial specialization of class templates. The macro has | |
no effect if partial specialization is not supported. | |
o _RWSTD_NO_EXT_VOID_DISTANCE [over, pure] | |
When #defined, disables the non-conforming version of the | |
std::distance() algorithm that takes three arguments and returns | |
void. The algorithm is provided for backward compatibility or on | |
platforms that cannot handle partial specialization of class | |
templates. The macro has no effect if partial specialization is | |
not supported. | |
o _RWSTD_NO_REENTRANT_IO_DEFAULT [lib, over, pure] | |
When #defined in thread-safe builds, all newly constructed | |
iostream objects (i.e., other than the standard iostream objects | |
std::cin, std::cout, etc.) are created with the bits | |
std::ios_base::lock and std::ios_base::lockbuf set (i.e., the | |
same object will be safe to use across thread | |
boundaries). Otherwise, the are created with the bits set. Has | |
no effect if _RWSTD_NO_EXT_REENTRANT_IO is #defined or in | |
non-thread-safe builds. | |
o _RWSTD_NO_EXT_CHAR_TRAITS_PRIMARY [over, pure] | |
o _RWSTD_NO_EXT_CODECVT_PRIMARY [over, pure] | |
o _RWSTD_NO_EXT_CTYPE_PRIMARY [over, pure] | |
o _RWSTD_NO_EXT_COLLATE_PRIMARY [over, pure] | |
o _RWSTD_NO_EXT_MONEYPUNCT_PRIMARY [over, pure] | |
o _RWSTD_NO_EXT_NUMPUNCT_PRIMARY [over, pure] | |
o _RWSTD_NO_EXT_TIME_GET_PRIMARY [over, pure] | |
o _RWSTD_NO_EXT_TIME_PUT_PRIMARY [over, pure] | |
o _RWSTD_NO_EXT_MESSAGES_PRIMARY [over, pure] | |
When #defined, the corresponding primary template, which is | |
otherwise defined as an extension of this implementation, is not | |
defined by the library. | |
9 Library Organization | |
----------------------- | |
The symbols declared and defined by this implementation of the C++ | |
Standard Library are organized in a number of public and private | |
headers, template implementation files, C++ source files, and | |
assembly files. The purpose of this section is to document the | |
conventions used in the organization of the symbols and their | |
declarations and definitions in the library files. | |
9.1 Organization of Headers | |
---------------------------- | |
Every library header starts with a comment containing the relative | |
pathname of the file with respect to the ${TOPDIR}/include/ | |
directory (such as iostream or rw/_config.h) along with a brief | |
description of the contents of the file and a copyright notice. | |
Below the comment is a header #inclusion guard that prevents the | |
contents of the same header file from being expanded more than once | |
in any translation unit from which the header might be included more | |
than once. The naming convention used for the guard is as follows: | |
#ifndef _RWSTD_<file-name>_INCLUDED | |
#define _RWSTD_<file-name>_INCLUDED | |
... /* contents of the file*/ | |
#endif // _RWSTD_<file-name>_INCLUDED | |
Where <file-name> is the relative pathname of the header with | |
slashes replaced by underscores (e.g, _RWSTD_IOSTREAM_INCLUDE for | |
the header iostream or _RWSTD_RW_CONFIG_H_INCLUDED for | |
rw/_config.h). | |
In order to minimize the size of translation units and the namespace | |
pollution caused by #including library headers in programs (as well | |
as the library sources themselves) library headers #include only the | |
absolute minimum of other C++ Standard library headers, and only | |
those third party (such as libc or OS) headers that are absolutely | |
necessary and whose symbols cannot be forward-declared. This set of | |
third party headers is at this point limited to <cstring>, <cwchar>, | |
and <ctime>, and the appropriate threads header in thread-safe | |
configurations. Since no other headers are #included, common C | |
library symbols such as ptrdiff_t, size_t, or CHAR_MAX that are | |
declared in these headers are determined at library configuration | |
time and available under the appropriate configuration macros | |
(_RWSTD_PTRDIFF_T, _RWSTD_SIZE_T, and _RWSTD_CHAR_MAX in this | |
example). The C++ Standard library headers always use these macros | |
rather than their C library equivalents. In order to make sure these | |
macros are always available every library header must contain the | |
#include <rw/_defs.h> directive. | |
9.2 Organization of Sources | |
---------------------------- | |
Every library source file starts with a comment containing name of | |
the file along with a brief description of the contents of the file | |
and a copyright notice. | |
Below the comment are any necessary #include directives, including | |
#include <rw/_defs.h>. Since namespace pollution is not a concern | |
for source files, the "deprecated" C library headers (such as | |
<stdio.h>) are always #included in favor of the "new" C++ C library | |
equivalents (i.e., <cstdio>) for portability. However, since the | |
size of library translation units has an effect on the size of the | |
library itself as well as on the size of executables linked with an | |
archive version of the library, each source file must include only | |
the bare minimum of the C++ Standard Library headers. | |
In order to minimize code bloat, library source files must take care | |
to instantiate only the barest minimum of templates defined by the | |
library. No source file instantiates any public templates unless | |
necessitated by the requirements of the C++ Standard. For instance, | |
while it isn't possible to avoid instantiating std::string (since | |
the type is used in locale and iostreams), instantiating any other | |
container is unnecessary and thus avoided. | |
In order to further minimize the size of programs that link with an | |
archive version of the library each library source file defines only | |
the smallest set of symbols that is to the maximum possible extent | |
independent of those defined in any other library source file. | |
10 Platform Notes | |
------------------ | |
10.1 Apogee C++ | |
---------------- | |
Port not maintained. | |
10.2 Borland C++ | |
----------------- | |
Not ported. | |
10.3 Comeau C++ | |
---------------- | |
Ported to Comeau C++ 4.2.42 or later on Solaris. | |
This release not tested. | |
10.4 Compaq/HP C++ | |
------------------- | |
Ported to Compaq/HP C++ 6.2 or later for Tru64 UNIX. | |
This release tested with: | |
o Compaq/HP C++ 6.5 and 7.1 on Tru64 UNIX | |
o Compaq/HP C++ 7.1 on Tru64 UNIX | |
Shared library contains uresolved references that cause | |
linker errors in programs that link with it. | |
See http://issues.apache.org/jira/browse/STDCXX-406 | |
10.5 EDG eccp | |
-------------- | |
Ported to the EDG eccp demo 2.45.2 through 3.10 on Linux and | |
Solaris. | |
This release tested with: | |
o EDG eccp 3.9 on Red Hat Enterprise Linux 5.0, x86_64 | |
o EDG eccp 3.9 on Solaris 9 | |
10.6 GNU gcc | |
------------- | |
Ported to gcc 2.95.2 through 4.1.0 on a variety of operating | |
systems and architectures, including Darwin (Mac OS X), HP-UX, | |
Linux, and Solaris. | |
This release tested with: | |
o gcc 4.3.0, Fedora 8, x86_64 | |
o gcc 4.2.1, Fedora 8, x86_64 | |
o gcc 4.1.1, Solaris 10, SPARC | |
o gcc 4.1.0, SUSE Linux Enterprise Server 10, x86_64 | |
o gcc 4.0.1, Mac OS X (Darwin), x86 | |
o gcc 3.4.6, Red Hat Enterprise Linux 4, x86_64 | |
o gcc 3.4.4, Cygwin on Windows XP, x86 | |
o gcc 3.4.4, FreeBSD 6.2, x86 | |
o gcc 3.4.4, Red Hat Enterprise Linux 4, IA64 | |
o gcc 3.3.3, SUSE Linux Enterprise Server 9.1, x86_64 | |
o gcc 3.2.3, Red Hat Enterprise Linux 3, x86_64 | |
10.7 HP aCC | |
------------ | |
Ported to HP aCC 3.13 and later for PA-RISC, and 5.36 and later, | |
and 6.0 and later for IPF. | |
This release tested with: | |
o aCC 6.15, HPUX 11.23, IPF | |
o aCC 6.15, HPUX 11.23, IPF | |
o aCC 6.00, HPUX 11.23, IPF | |
o aCC 5.57, HPUX 11.23, IPF | |
o aCC 3.73, HPUX 11.23, PA-RISC | |
o aCC 3.73, HPUX 11.11, PA-RISC | |
o aCC 3.63, HPUX 11.31, PA-RISC | |
o aCC 3.63, HPUX 11.23, PA-RISC | |
o aCC 3.63, HPUX 11.11, PA-RISC | |
10.8 IBM VisualAge C++ | |
----------------------- | |
Ported to VisualAge C++ 5.0 on AIX 4.3, VisualAge C++ 6.0 on AIX | |
5.2, and XLC++ 7.0, 8.0, and 9.0 on AIX 5.2 and 5.3. | |
This release tested with: | |
o XLC++ 9.0, AIX 5.3, POWER | |
o XLC++ 8.0, AIX 5.3, POWER | |
o XLC++ 7.0, AIX 5.3, POWER | |
o VisualAge C++ 6.0, AIX 5.2, POWER | |
For builds with VisualAge C++ 5.0 and 6.0 there are some special | |
considerations when building programs that use the implicit | |
inclusion mechanism (i.e., the -qtempinc mode which is active by | |
default). | |
The mechanism imposes some restrictions on the way the source code | |
is structured: template declarations have to be present in header | |
files while corresponding .c source files must contain these | |
templates' implementations. Source code otherwise perfectly | |
correct, containing template classes or functions definitions or | |
definitions of types used in instantiations of templates in cpp | |
files, will not be able to benefit from this feature. | |
10.9 Intel C++ | |
--------------- | |
Ported to Intel C++ 7.0 through 9.0 on Linux and Windows (x86, | |
IA64, and x86_64). | |
This release tested with: | |
o Intel C++ 10.0 and 9.1, Red Hat Enterprise Linux 5 and 4, x86_64 | |
o Intel C++ 10.0 and 9.1, SUSE Linux Enterprise Server 10 and 9, x86_64 | |
o Intel C++ 10.0 and 9.1, Windows Vista, XP and 2003, x86_64 and x86 | |
10.10 KAI C++ | |
-------------- | |
Port not maintained. | |
10.11 Metrowerks CodeWarrior | |
----------------------------- | |
Not ported. | |
10.12 Microsoft Visual Studio | |
------------------------------ | |
Ported to Visual Studio .NET 2002 (AKA MSVC 7.0) through Visual | |
Studio .NET 2008 (AKA MSVC 9.0) on Windows (x86, IA64, and | |
x86_64). | |
This release tested with: | |
o Visual Studio 2008, Windows Vista, XP, and 2003, x86 and x86_64 | |
o Visual Studio 2005, Windows Vista, XP, and 2003, x86 and x86_64 | |
o Visual Studio 2003, Windows XP and 2003, x86 | |
10.13 SGI MIPSpro | |
------------------ | |
Ported to SGI MIPSpro 7.3 through 7.5 for IRIX 6.5. | |
This release tested with: | |
o SGI MIPSpro 7.41, IRIX 6.5, MIPS | |
10.14 Siemens CDS++ | |
-------------------- | |
Port not maintained. | |
10.15 Sun C++ | |
-------------- | |
Ported to Sun C++ 5.3 through 5.9 on Solaris and Linux (SPARC, | |
x86, and x86_64). | |
This release tested with: | |
o Sun C++ 5.9, Red Hat Enterprise Linux 4, Update 4, x86_64 | |
o Sun C++ 5.9, SUSE Linux Enterprise Server 9.1, x86_64 | |
o Sun C++ 5.9, Solaris 10, 9, 8, x86_64 and SPARC | |
o Sun C++ 5.8, Solaris 10, 9, 8, x86_64 and SPARC | |
o Sun C++ 5.7, Solaris 10, SPARC | |
o Sun C++ 5.6, Solaris 9, SPARC | |
o Sun C++ 5.3, Solaris 8, SPARC |