libstdc++-v3/ChangeLog:

        * doc/xml/faq.xml: Refresh information on _GNU_SOURCE and
        _XOPEN_SOURCE being predefined.
        * doc/xml/manual/internals.xml: Remove outdated paragraph about
        _POSIX_SOURCE in libstdc++ source files.
        * doc/html/*: Regenerate.
---

Pushed to trunk.

 libstdc++-v3/doc/html/faq.html              | 32 ++++++++++----------
 libstdc++-v3/doc/html/manual/internals.html | 14 ---------
 libstdc++-v3/doc/xml/faq.xml                | 33 +++++++++++----------
 libstdc++-v3/doc/xml/manual/internals.xml   | 16 ----------
 4 files changed, 35 insertions(+), 60 deletions(-)

diff --git a/libstdc++-v3/doc/html/faq.html b/libstdc++-v3/doc/html/faq.html
index ba887ae2061a..a0c4216f9943 100644
--- a/libstdc++-v3/doc/html/faq.html
+++ b/libstdc++-v3/doc/html/faq.html
@@ -432,26 +432,28 @@
     This has been fixed for libstdc++ releases greater than 3.0.3.
     </p></td></tr><tr class="question"><td align="left" valign="top"><a 
id="faq.predefined"></a><a 
id="q-predefined"></a><p><strong>4.3.</strong></p></td><td align="left" 
valign="top"><p>
       <code class="constant">_XOPEN_SOURCE</code> and <code 
class="constant">_GNU_SOURCE</code> are always defined?
-    </p></td></tr><tr class="answer"><td align="left" valign="top"><a 
id="a-predefined"></a></td><td align="left" valign="top"><p>On Solaris, <span 
class="command"><strong>g++</strong></span> (but not <span 
class="command"><strong>gcc</strong></span>)
+    </p></td></tr><tr class="answer"><td align="left" valign="top"><a 
id="a-predefined"></a></td><td align="left" valign="top"><p>On GNU/Linux, <span 
class="command"><strong>g++</strong></span> (but not <span 
class="command"><strong>gcc</strong></span>)
          always defines the preprocessor macro
-        <code class="constant">_XOPEN_SOURCE</code>.  On GNU/Linux, the same 
happens
-         with <code class="constant">_GNU_SOURCE</code>.  (This is not an 
exhaustive list;
+        <code class="constant">_GNU_SOURCE</code>.  On Solaris, the same 
happens
+         with <code class="constant">_XOPEN_SOURCE</code>.  (This is not an 
exhaustive list;
          other macros and other platforms are also affected.)
       </p><p>These macros are typically used in C library headers, guarding new
-         versions of functions from their older versions.  The C++98 standard
-         library includes the C standard library, but it requires the C90
-         version, which for backwards-compatibility reasons is often not the
-         default for many vendors.
-      </p><p>More to the point, the C++ standard requires behavior which is 
only
-         available on certain platforms after certain symbols are defined.
+         versions of functions from their older versions.  Historically,
+        libstdc++ needed these macros to ensure that the headers provided by
+        the C library declared all the functions that libstdc++ relies on.
+        For example, functions for working with <code class="code">long 
long</code>,
+        such as <code class="function">strtoll</code>, are needed by libstdc++ 
but
+        were not part of the C90 standard.
+      </p><p>Additionally the C++ standard requires behavior which is only
+         available on certain platforms after certain macros are defined.
          Usually the issue involves I/O-related typedefs.  In order to
-         ensure correctness, the compiler simply predefines those symbols.
-      </p><p>Note that it's not enough to <code class="literal">#define</code> 
them only when the library is
-         being built (during installation).  Since we don't have an 'export'
-         keyword, much of the library exists as headers, which means that
-         the symbols must also be defined as your programs are parsed and
+         ensure correctness, the compiler simply predefines those macros.
+      </p><p>Note that it's not enough to <code class="literal">#define</code> 
them
+        only when the library is being built (during installation).
+         Much of the library exists as headers, which means that
+         the macros must also be defined as your programs are parsed and
          compiled.
-      </p><p>To see which symbols are defined, look for
+      </p><p>To see which macros are defined, look for
          <code class="varname">CPLUSPLUS_CPP_SPEC</code> in
          the gcc config headers for your target (and try changing them to
          see what happens when building complicated code).  You can also run
diff --git a/libstdc++-v3/doc/html/manual/internals.html 
b/libstdc++-v3/doc/html/manual/internals.html
index f61b0b12b803..08c1a1829f2b 100644
--- a/libstdc++-v3/doc/html/manual/internals.html
+++ b/libstdc++-v3/doc/html/manual/internals.html
@@ -41,20 +41,6 @@ OS portion of the triplet (the default), then nothing needs 
to be changed.
    </p><p>The first file to create in this directory, should be called
 <code class="code">os_defines.h</code>.  This file contains basic macro 
definitions
 that are required to allow the C++ library to work with your C library.
-   </p><p>Several libstdc++ source files unconditionally define the macro
-<code class="code">_POSIX_SOURCE</code>.  On many systems, defining this macro 
causes
-large portions of the C library header files to be eliminated
-at preprocessing time.  Therefore, you may have to <code 
class="code">#undef</code> this
-macro, or define other macros (like <code 
class="code">_LARGEFILE_SOURCE</code> or
-<code class="code">__EXTENSIONS__</code>).  You won't know what macros to 
define or
-undefine at this point; you'll have to try compiling the library and
-seeing what goes wrong.  If you see errors about calling functions
-that have not been declared, look in your C library headers to see if
-the functions are declared there, and then figure out what macros you
-need to define.  You will need to add them to the
-<code class="code">CPLUSPLUS_CPP_SPEC</code> macro in the GCC configuration 
file for your
-target.  It will not work to simply define these macros in
-<code class="code">os_defines.h</code>.
    </p><p>At this time, there are a few libstdc++-specific macros which may be
 defined:
    </p><p><code class="code">_GLIBCXX_USE_C99_CHECK</code> may be defined to 1 
to check C99
diff --git a/libstdc++-v3/doc/xml/faq.xml b/libstdc++-v3/doc/xml/faq.xml
index 92b81f2068c4..1af41c2fbaf0 100644
--- a/libstdc++-v3/doc/xml/faq.xml
+++ b/libstdc++-v3/doc/xml/faq.xml
@@ -551,31 +551,34 @@
       <constant>_XOPEN_SOURCE</constant> and <constant>_GNU_SOURCE</constant> 
are always defined?
     </para>
   </question>
+
   <answer xml:id="a-predefined">
-      <para>On Solaris, <command>g++</command> (but not <command>gcc</command>)
+      <para>On GNU/Linux, <command>g++</command> (but not 
<command>gcc</command>)
          always defines the preprocessor macro
-        <constant>_XOPEN_SOURCE</constant>.  On GNU/Linux, the same happens
-         with <constant>_GNU_SOURCE</constant>.  (This is not an exhaustive 
list;
+        <constant>_GNU_SOURCE</constant>.  On Solaris, the same happens
+         with <constant>_XOPEN_SOURCE</constant>.  (This is not an exhaustive 
list;
          other macros and other platforms are also affected.)
       </para>
       <para>These macros are typically used in C library headers, guarding new
-         versions of functions from their older versions.  The C++98 standard
-         library includes the C standard library, but it requires the C90
-         version, which for backwards-compatibility reasons is often not the
-         default for many vendors.
+         versions of functions from their older versions.  Historically,
+        libstdc++ needed these macros to ensure that the headers provided by
+        the C library declared all the functions that libstdc++ relies on.
+        For example, functions for working with <code>long long</code>,
+        such as <function>strtoll</function>, are needed by libstdc++ but
+        were not part of the C90 standard.
       </para>
-      <para>More to the point, the C++ standard requires behavior which is only
-         available on certain platforms after certain symbols are defined.
+      <para>Additionally the C++ standard requires behavior which is only
+         available on certain platforms after certain macros are defined.
          Usually the issue involves I/O-related typedefs.  In order to
-         ensure correctness, the compiler simply predefines those symbols.
+         ensure correctness, the compiler simply predefines those macros.
       </para>
-      <para>Note that it's not enough to <literal>#define</literal> them only 
when the library is
-         being built (during installation).  Since we don't have an 'export'
-         keyword, much of the library exists as headers, which means that
-         the symbols must also be defined as your programs are parsed and
+      <para>Note that it's not enough to <literal>#define</literal> them
+        only when the library is being built (during installation).
+         Much of the library exists as headers, which means that
+         the macros must also be defined as your programs are parsed and
          compiled.
       </para>
-      <para>To see which symbols are defined, look for
+      <para>To see which macros are defined, look for
          <varname>CPLUSPLUS_CPP_SPEC</varname> in
          the gcc config headers for your target (and try changing them to
          see what happens when building complicated code).  You can also run
diff --git a/libstdc++-v3/doc/xml/manual/internals.xml 
b/libstdc++-v3/doc/xml/manual/internals.xml
index 5b3be2d1a846..699c21af6a5a 100644
--- a/libstdc++-v3/doc/xml/manual/internals.xml
+++ b/libstdc++-v3/doc/xml/manual/internals.xml
@@ -73,22 +73,6 @@ OS portion of the triplet (the default), then nothing needs 
to be changed.
 that are required to allow the C++ library to work with your C library.
    </para>
 
-   <para>Several libstdc++ source files unconditionally define the macro
-<code>_POSIX_SOURCE</code>.  On many systems, defining this macro causes
-large portions of the C library header files to be eliminated
-at preprocessing time.  Therefore, you may have to <code>#undef</code> this
-macro, or define other macros (like <code>_LARGEFILE_SOURCE</code> or
-<code>__EXTENSIONS__</code>).  You won't know what macros to define or
-undefine at this point; you'll have to try compiling the library and
-seeing what goes wrong.  If you see errors about calling functions
-that have not been declared, look in your C library headers to see if
-the functions are declared there, and then figure out what macros you
-need to define.  You will need to add them to the
-<code>CPLUSPLUS_CPP_SPEC</code> macro in the GCC configuration file for your
-target.  It will not work to simply define these macros in
-<code>os_defines.h</code>.
-   </para>
-
    <para>At this time, there are a few libstdc++-specific macros which may be
 defined:
    </para>
-- 
2.51.1

Reply via email to