From: Markus Scherer Date: Mon, 25 Jul 2011 21:02:32 +0000 (+0000) Subject: ICU-8452 consolidate definition of _XOPEN_SOURCE for access to POSIX functions; do... X-Git-Tag: milestone-59-0-1~4626 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3bf88cd71126dcabcc461f9f60d792af5786c502;p=icu 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 --- diff --git a/icu4c/source/common/common.vcxproj b/icu4c/source/common/common.vcxproj index ec679931911..2ccddef0062 100644 --- a/icu4c/source/common/common.vcxproj +++ b/icu4c/source/common/common.vcxproj @@ -768,6 +768,7 @@ ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) + copy "%(FullPath)" ..\..\include\unicode diff --git a/icu4c/source/common/common.vcxproj.filters b/icu4c/source/common/common.vcxproj.filters index 1e4ae39601f..1a6e6f4d04c 100644 --- a/icu4c/source/common/common.vcxproj.filters +++ b/icu4c/source/common/common.vcxproj.filters @@ -633,6 +633,9 @@ configuration + + configuration + configuration diff --git a/icu4c/source/common/putil.cpp b/icu4c/source/common/putil.cpp index 10eeb0b89d7..82a397df4dc 100644 --- a/icu4c/source/common/putil.cpp +++ b/icu4c/source/common/putil.cpp @@ -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" diff --git a/icu4c/source/common/uposixdefs.h b/icu4c/source/common/uposixdefs.h new file mode 100644 index 00000000000..c1ab8991ed6 --- /dev/null +++ b/icu4c/source/common/uposixdefs.h @@ -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__ */ diff --git a/icu4c/source/io/ufile.c b/icu4c/source/io/ufile.c index 125bbfe4c62..62d9551234c 100644 --- a/icu4c/source/io/ufile.c +++ b/icu4c/source/io/ufile.c @@ -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" diff --git a/icu4c/source/test/intltest/simplethread.cpp b/icu4c/source/test/intltest/simplethread.cpp index 2817ab2cf85..380b3404774 100644 --- a/icu4c/source/test/intltest/simplethread.cpp +++ b/icu4c/source/test/intltest/simplethread.cpp @@ -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 -/*#include "platform_xopen_source_extended.h"*/ #endif #if defined(POSIX) diff --git a/icu4c/source/test/intltest/tsmthred.cpp b/icu4c/source/test/intltest/tsmthred.cpp index 4074bcaee81..8edeafd853e 100644 --- a/icu4c/source/test/intltest/tsmthred.cpp +++ b/icu4c/source/test/intltest/tsmthred.cpp @@ -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 -/*#include "platform_xopen_source_extended.h"*/ #endif #if defined(POSIX) diff --git a/icu4c/source/tools/ctestfw/uperf.cpp b/icu4c/source/tools/ctestfw/uperf.cpp index 5fb25b15514..31dd8e7990a 100644 --- a/icu4c/source/tools/ctestfw/uperf.cpp +++ b/icu4c/source/tools/ctestfw/uperf.cpp @@ -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" diff --git a/icu4c/source/tools/pkgdata/pkgdata.cpp b/icu4c/source/tools/pkgdata/pkgdata.cpp index 444248d925c..3cb8c92124b 100644 --- a/icu4c/source/tools/pkgdata/pkgdata.cpp +++ b/icu4c/source/tools/pkgdata/pkgdata.cpp @@ -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" diff --git a/icu4c/source/tools/toolutil/platform_xopen_source_extended.h b/icu4c/source/tools/toolutil/platform_xopen_source_extended.h deleted file mode 100644 index 711d7e679d5..00000000000 --- a/icu4c/source/tools/toolutil/platform_xopen_source_extended.h +++ /dev/null @@ -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 */ diff --git a/icu4c/source/tools/toolutil/toolutil.vcxproj b/icu4c/source/tools/toolutil/toolutil.vcxproj index e565bdfb76b..ffb8c790f3d 100644 --- a/icu4c/source/tools/toolutil/toolutil.vcxproj +++ b/icu4c/source/tools/toolutil/toolutil.vcxproj @@ -299,7 +299,6 @@ -