ICU-8452 consolidate definition of _XOPEN_SOURCE for access to POSIX functions; do not use __STDC_VERSION__ in C++ code where it is not defined

X-SVN-Rev: 30418
This commit is contained in:
Markus Scherer 2011-07-25 21:02:32 +00:00
parent bb8a3bb609
commit 3bf88cd711
11 changed files with 96 additions and 83 deletions

View file

@ -768,6 +768,7 @@
</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
</CustomBuild>
<ClInclude Include="uposixdefs.h" />
<CustomBuild Include="unicode\urename.h">
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
</Command>

View file

@ -633,6 +633,9 @@
<ClInclude Include="umutex.h">
<Filter>configuration</Filter>
</ClInclude>
<ClInclude Include="uposixdefs.h">
<Filter>configuration</Filter>
</ClInclude>
<ClInclude Include="utracimp.h">
<Filter>configuration</Filter>
</ClInclude>

View file

@ -37,24 +37,9 @@
******************************************************************************
*/
/* Define _XOPEN_SOURCE for Solaris and friends. */
/* NetBSD needs it to be >= 4 */
#if !defined(_XOPEN_SOURCE)
#if __STDC_VERSION__ >= 199901L
/* It is invalid to compile an XPG3, XPG4, XPG4v2 or XPG5 application using c99 on Solaris */
#define _XOPEN_SOURCE 600
#else
#define _XOPEN_SOURCE 4
#endif
#endif
/* Make sure things like readlink and such functions work.
Poorly upgraded Solaris machines can't have this defined.
Cleanly installed Solaris can use this #define.
*/
#if !defined(_XOPEN_SOURCE_EXTENDED) && ((!defined(__STDC_VERSION__) || __STDC_VERSION__ >= 199901L) || defined(__xlc__))
#define _XOPEN_SOURCE_EXTENDED 1
#endif
// Defines _XOPEN_SOURCE for access to POSIX functions.
// Must be before any other #includes.
#include "uposixdefs.h"
/* include ICU headers */
#include "unicode/utypes.h"

View file

@ -0,0 +1,73 @@
/*
*******************************************************************************
* Copyright (C) 2011, International Business Machines
* Corporation and others. All Rights Reserved.
*******************************************************************************
* file name: uposixdefs.h
* encoding: US-ASCII
* tab size: 8 (not used)
* indentation:4
*
* created on: 2011jul25
* created by: Markus W. Scherer
*
* Common definitions for implementation files working with POSIX functions.
* *Important*: #include this file before any other header files!
*/
#ifndef __UPOSIXDEFS_H__
#define __UPOSIXDEFS_H__
/*
* Define _XOPEN_SOURCE for access to POSIX functions.
*
* We cannot use U_PLATFORM from platform.h/utypes.h because
* "The Open Group Base Specifications"
* chapter "2.2 The Compilation Environment" says:
* "In the compilation of an application that #defines a feature test macro
* specified by IEEE Std 1003.1-2001,
* no header defined by IEEE Std 1003.1-2001 shall be included prior to
* the definition of the feature test macro."
*/
#ifdef _XOPEN_SOURCE
/* Use the predefined value. */
#else
/*
* Version 6.0:
* The Open Group Base Specifications Issue 6 (IEEE Std 1003.1, 2004 Edition)
* also known as
* SUSv3 = Open Group Single UNIX Specification, Version 3 (UNIX03)
*
* Note: This definition used to be in C source code (e.g., putil.c)
* and define _XOPEN_SOURCE to different values depending on __STDC_VERSION__.
* In C++ source code (e.g., putil.cpp), __STDC_VERSION__ is not defined at all.
*/
# define _XOPEN_SOURCE 600
#endif
/*
* Make sure things like readlink and such functions work.
* Poorly upgraded Solaris machines can't have this defined.
* Cleanly installed Solaris can use this #define.
*
* z/OS needs this definition for timeval and to get usleep.
*/
#if !defined(_XOPEN_SOURCE_EXTENDED)
# define _XOPEN_SOURCE_EXTENDED 1
#endif
/*
* There is an issue with turning on _XOPEN_SOURCE_EXTENDED on certain platforms.
* A compatibility issue exists between turning on _XOPEN_SOURCE_EXTENDED and using
* standard C++ string class. As a result, standard C++ string class needs to be
* turned off for the follwing platforms:
* -AIX/VACPP
* -Solaris/GCC
*/
#if (U_PLATFORM == U_PF_AIX && !defined(__GNUC__)) || (U_PLATFORM == U_PF_SOLARIS && defined(__GNUC__))
# if _XOPEN_SOURCE_EXTENDED && !defined(U_HAVE_STD_STRING)
# define U_HAVE_STD_STRING 0
# endif
#endif
#endif /* __UPOSIXDEFS_H__ */

View file

@ -18,15 +18,11 @@
******************************************************************************
*/
/* define for fileno. */
#ifndef _XOPEN_SOURCE
#if __STDC_VERSION__ >= 199901L
/* It is invalid to compile an XPG3, XPG4, XPG4v2 or XPG5 application using c99 */
#define _XOPEN_SOURCE 600
#else
#define _XOPEN_SOURCE 4
#endif
#endif
/*
* Defines _XOPEN_SOURCE for access to POSIX functions.
* Must be before any other #includes.
*/
#include "uposixdefs.h"
#include "locmap.h"
#include "unicode/ustdio.h"

View file

@ -10,6 +10,10 @@
# endif
#endif
// Defines _XOPEN_SOURCE for access to POSIX functions.
// Must be before any other #includes.
#include "uposixdefs.h"
#include "simplethread.h"
#include "unicode/utypes.h"
@ -41,12 +45,10 @@
#if U_PLATFORM == U_PF_OS390
#define __DOT1 1
#define __UU
#define _XOPEN_SOURCE_EXTENDED 1
#ifndef _XPG4_2
#define _XPG4_2
#endif
#include <unistd.h>
/*#include "platform_xopen_source_extended.h"*/
#endif
#if defined(POSIX)

View file

@ -38,12 +38,10 @@
#if U_PLATFORM == U_PF_OS390
#define __DOT1 1
#define __UU
#define _XOPEN_SOURCE_EXTENDED 1
#ifndef _XPG4_2
#define _XPG4_2
#endif
#include <unistd.h>
/*#include "platform_xopen_source_extended.h"*/
#endif
#if defined(POSIX)

View file

@ -4,8 +4,9 @@
* others. All Rights Reserved.
********************************************************************/
/* z/OS needs this definition for timeval */
#include "platform_xopen_source_extended.h"
// Defines _XOPEN_SOURCE for access to POSIX functions.
// Must be before any other #includes.
#include "uposixdefs.h"
#include "unicode/uperf.h"
#include "uoptions.h"

View file

@ -2,7 +2,7 @@
* Copyright (C) 2000-2011, International Business Machines
* Corporation and others. All Rights Reserved.
*******************************************************************************
* file name: pkgdata.c
* file name: pkgdata.cpp
* encoding: ANSI X3.4 (1968)
* tab size: 8 (not used)
* indentation:4
@ -14,18 +14,9 @@
* (DLL, common data, etc.)
*/
/*
* We define _XOPEN_SOURCE so that we can get popen and pclose.
*/
#if !defined(_XOPEN_SOURCE)
#if __STDC_VERSION__ >= 199901L
/* It is invalid to compile an XPG3, XPG4, XPG4v2 or XPG5 application using c99 on Solaris */
#define _XOPEN_SOURCE 600
#else
#define _XOPEN_SOURCE 4
#endif
#endif
// Defines _XOPEN_SOURCE for access to POSIX functions.
// Must be before any other #includes.
#include "uposixdefs.h"
#include "unicode/utypes.h"

View file

@ -1,36 +0,0 @@
/*
**********************************************************************
* Copyright (c) 2009-2011, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*/
#ifndef _PLATFORM_XOPEN_SOURCE_EXTENDED_H
#define _PLATFORM_XOPEN_SOURCE_EXTENDED_H
#include "unicode/utypes.h"
/*
* z/OS needs this definition for timeval and to get usleep.
* We move this definition out of the various source files because
* there might be some platform issues when this is defined.
* See below.
*/
#if !defined(_XOPEN_SOURCE_EXTENDED)
#define _XOPEN_SOURCE_EXTENDED 1
#endif
/*
* There is an issue with turning on _XOPEN_SOURCE_EXTENDED on certain platforms.
* A compatibility issue exists between turning on _XOPEN_SOURCE_EXTENDED and using
* standard C++ string class. As a result, standard C++ string class needs to be
* turned off for the follwing platforms:
* -AIX/VACPP
* -Solaris/GCC
*/
#if (U_PLATFORM == U_PF_AIX && !defined(__GNUC__)) || (U_PLATFORM == U_PF_SOLARIS && defined(__GNUC__))
# if _XOPEN_SOURCE_EXTENDED && !defined(U_HAVE_STD_STRING)
# define U_HAVE_STD_STRING 0
# endif
#endif
#endif /* _PLATFORM_XOPEN_SOURCE_EXTENDED_H */

View file

@ -299,7 +299,6 @@
<ClInclude Include="pkg_gencmn.h" />
<ClInclude Include="pkg_icu.h" />
<ClInclude Include="pkg_imp.h" />
<ClInclude Include="platform_xopen_source_extended.h" />
<ClInclude Include="swapimpl.h" />
<ClInclude Include="toolutil.h" />
<ClInclude Include="ucbuf.h" />