------- Comment #28 from craig dot lawson at centrify dot com  2007-03-22 23:44 
-------
For HP-UX, SunOS, and Irix:

  #if !defined(_POSIX_C_SOURCE)
  # define _POSIX_C_SOURCE 199506L
  #elif _POSIX_C_SOURCE<199506L
  # error "Conflict"
  #endif

  (why would anyone compile C++ with POSIX < 1995.06?)

For AIX, either:

  #define _THREAD_SAFE
  or
  #define _THREAD_SAFE_ERRNO



Details:

HP-UX 11.00, 11.11, 11.22, 11.23:
  errno.h:
    #ifdef _REENTRANT
    # ifdef _PROTOTYPES
       extern int *__errno(void);
    # else 
       extern int *__errno();
    # endif
    ...

  However, errno.h includes <sys/stdsyms.h> which contains:
    /* _REENTRANT selects Posix 1c threads unless draft4 selected.
     * This usage is obsolescent, "-D_POSIX_C_SOURCE=199506" is preferred */
    ...
    #if (_POSIX_C_SOURCE >= 199506) && !defined(_REENTRANT)
    # define _REENTRANT
    #endif /* _POSIX_C_SOURCE >= 199506 && !_REENTRANT */

  It appears _POSIX_C_SOURCE=199506 is the desired symbol and value, but
  there will be a conflict if intentionally set to something lower (higher
  is OK).

  Confirm using test program:
    #include <cerrno>
    int main() {
        return errno;
    }

  Confirmed: -D_POSIX_C_SOURCE=199506 works.


SunOS 2.6, 7, 5.8, 5.9, 5.10:
  errno.h:
    #if (defined(_REENTRANT) || defined(_TS_ERRNO) || \
        _POSIX_C_SOURCE - 0 >= 199506L) && !(defined(lint) || defined(__lint))

  Confirmed: -D_POSIX_C_SOURCE=199506 works.


AIX 4.3.3, 5.1:
  errno.h:
    #include <standards.h>
    #ifdef _ANSI_C_SOURCE
    # if defined(_THREAD_SAFE) || defined(_THREAD_SAFE_ERRNO)
    #  define errno   (*_Errno())

  standards.h:
    defines _ANSI_C_SOURCE unless overridden by some other model.

  Confirmed: -D_THREAD_SAFE works.
  Confirmed: -D_THREAD_SAFE_ERRNO works.


AIX 5.2:
  errno.h: similar to 4.3.3
  standards.h:
    #if defined(_UNIX03)
    #  define _THREAD_SAFE
    ...
    #if _XOPEN_SOURCE==600
    #  define _THREAD_SAFE
    ...
    Due to statement ordering in this file, if _POSIX_C_SOURCE==200112L before
    including this file, then _THREAD_SAFE will be set. Otherwise, this file
    sets _POSIX_C_SOURCE==200112L and does not set _THREAD_SAFE.

  Confirmed: -D_THREAD_SAFE works.
  Confirmed: -D_THREAD_SAFE_ERRNO works.
  Confirmed: -D_UNIX03 works. Size effect: sets _POSIX_C_SOURCE==200112L


Irix 6.5:
  errno.h:
    #if defined(_SGI_MP_SOURCE) || (_POSIX_C_SOURCE >= 199506L) \
        || (_XOPEN_SOURCE+0 >= 500)
      extern int *__oserror(void);
    ...

  Confirmed: -D_POSIX_C_SOURCE=199506 works.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31117

Reply via email to