.de Sc
\\s-1\\$1\\s0\\$2
..
.ds cA 2008/549
.ds aR \s-1PSARC\s0
.LP
.so /shared/sac/Tools/lib/amac
.Co
.ds LF \fI\*(aR/\*(cA\fP
.ds RF \fICopyright 2008 Sun Microsystems\fP
.if n .ds CF
.IP \fBSubject:\fP 15
Apache Standard C++ Library
.IP "\fBSubmitted by:\fP" 15
Stefan Teleman
.IP \fBFile:\fP 15
\*(aR/\*(cA/opinion.ms
.IP \fBDate:\fP 15
October 8th, 2008
.IP "\fBCommittee:\fP" 15
Garrett D'Amore,
Kais Belgaied,
Mark Carlson,
John Fischer,
Tim Marsland,
Rick Matthews,
Glenn Skinner.
.IP "\fBProduct Approval Committee:\fP" 15
solaris-pac@sun.com
.pn 2
.NH
Summary
.LP
This project seeks to integrate the Apache Standard C++ library version 4.x.
This library is conforming implementation of the C++ Standard Library.  The
project desires that this library is to be the foundation for all future
Solaris projects which require a C++ standard library, and supercedes and
obsoletes the
libCstd and STLport implementations shipped by DevPro for use in Solaris.
Notably, this
is only applicable to the Sun DevPro compilers, as GNU C++ ships with its
own C++ libraries.
.NH
Decision & Precedence Information
.LP
The project is approved as specified in reference [1], but as modified
by the required technical change listed in Appendix A below.
.LP
The project may be delivered in a patch release of the SFW consolidation.
.NH
Interfaces
.LP
\." this information, listing imported interfaces in a separate table from
\." interfaces being exported.  Two skeleton tables appear below; fill them in
The project exports the following interfaces.
.if n .ne 8
.if t .ne 3
.TS H
box;
c s s
l | l | l.
Interfaces Exported
_
Interface	Classification	Comments
_
.TH
/usr/include/stdcxx4	Committed	(1)
/usr/lib/libstdcxx4.so.4	Committed	(2)(3)
/usr/lib/libstdcxx4.so	Committed	(2)(3)
/usr/lib/pkgconfig/stdcxx.pc	Committed	(4)
/usr/share/doc/html/stdcxx4	Committed	
libCstd	Obsolete Committed	(5)
STLport4	Obsolete Uncommitted	(5)
.TE
.RS
.IP (1)
The include directory includes a number of header files
which are required by the Standard.  The entire set of
header files listed in reference [2] are included
by reference herein, with a Committed classification.
.IP (2)
These libraries are symbolic links to a more specific
version of the library, depending on the specific version
of Apache C++ used.  The actual version (beyond Apache
Standard C++ 4.x) is not specified here.
.IP (3)
In addition, 64-bit versions of these are delivered in
the appropriate location (e.g. /usr/lib/amd64 or
/usr/lib/sparcv9) also with Committed classification.
.IP (4)
This is the pkg-config configuration file containing the
actual compiler flags that should be used with this library.
A 64-bit version of the configuration file is located in
/usr/lib/${MACH64}/pkgconfig as well.
.IP (5)
These libraries are marked Obsolete for use in building
Solaris components.  The DevPro group will continue to
deliver them.  They remain suitable for use when building
programs which need to run on earlier versions of Solaris.
.RE
.LP
The project imports the following interfaces.
.if n .ne 8
.if t .ne 3
.TS H
box;
c s s
l | l | l.
Interfaces Imported
_
Interface	Classification	Comments
_
.TH
libCrun	Committed	C++ runtime.
libc	Committed	C runtime.
libm	Committed	Math library.
.TE
.NH
Opinion
.LP
.NH 2
Base C++ Standard Library
.LP
This case sets a precedent that allows for projects which desire to deliver
components built upon the Standard C++ library can do so, but that they
are required to use this library.  No other Standard C++ library may be
used in the construction of shared objects delivered, as alternate
implementations are generally toxic to one another in the same address space.
.NH 2
Future Incompatible Versions
.LP
One concern raised is that new versions of the Apache Standard C++ library may
become available which are not binary compatible with the version this
project proposes to deliver.  Generally, this happens on major version
boundaries within the Apache Standard C++ project, and can be expected
to support upcoming C++ standards.  Such incompatible deliveries are
required to obtain ARC approval as per normal interface classification rules.
.NH 2
Obsolete Legacy Libraries
.LP
As the library delivered by this project is incompatible with alternate
implementations, the project team and the DevPro team have agreed that
alternate implementations shall be considered Obsolete when used on
Solaris versions where this library is delivered.
.NH 2
New Compiler Flags
.LP
A member expressed concern over the addition of new flags to the compiler.
Specifically, the final disposition of the flags is unknown.  The compiler
project to add new flags to enable easy use of this library will be
handled separately as an LSARC case.
.NH 2
Existing C++ Components
.LP
A member raised a concern regarding the status of existing Solaris
libraries which are built upon alternate implementations.  The
project team agreed to take an action item to file bugs against
those components to get them converted to use this library after
this library integrates.
.NH 2
Documentation
.LP
Given the not insignificant caveats about mixing implementations
of the Standard C++ library, and the new stability classification
for legacy libraries, some members were concerned that this information
might not be obvious to developers working with these libraries.
The project team agreed to document this in manual pages as specified
by the technical chagne required in Appendix A.
.NH
Minority Opinion(s)
.LP
None.
.NH
Advisory Information
.LP
None.
.NH
Appendices
.NH 2
Appendix A: Technical Changes Required
.LP
\." The formatting that works best is:
.RS
.IP 1.
The project shall provide documentation in man(1) page form detailing
the compatibility concerns for this library.  Specifically, the documentation
shall explain the incompatibility of mixing alternate implementations
in the same address space, and shall note that other implementations are
Obsolete and should not be used.
.RE
.NH 2
Appendix B: Technical Changes Advised
.LP
None.
.NH 2
Appendix C: Reference Material
.LP
Unless stated otherwise, path names are relative to the case
directory \*(aR/\*(cA.
.RS
.IP 1.
Project proposal (v2)
.br
File: proposal_v2.txt
.IP 2.
Header files
.br
File: materials/stdcxx-Appendix-1.txt
.IP 3.
Localization files
.br
File: materials/stdcxx-Appendix-2.txt
.IP 4.
Apache Standard C++ Library web site
.br
http://stdcxx.apache.org/
.IP 5.
C++ Standard
.br
http://www.open-std.org/jtc1/sc22/wg21/
.RE
