Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Jan 2012 11:34:00 +0000
From:      David Chisnall <theraven@freebsd.org>
To:        Eitan Adler <lists@eitanadler.com>
Cc:        David Schultz <das@freebsd.org>, freebsd-standards@freebsd.org, python@freebsd.org, Andriy Gapon <avg@freebsd.org>, gogo@cs.uni-sb.de
Subject:   Re: pyconfig.h and freebsd10: _POSIX_C_SOURCE and _XOPEN_SOURCE
Message-ID:  <3B3BEEED-D1E4-4329-BE34-5CFF5CABB52C@freebsd.org>
In-Reply-To: <CAF6rxgn81hxBwwx9Y6%2Bg1PFcaQjoLfQMfb5QGgycryR4PLoboA@mail.gmail.com>
References:  <4F1AAA75.5050500@FreeBSD.org> <20120122192526.GA52071@zim.MIT.EDU> <9F9CC3ED-0686-4BC5-BF01-1839A30ABA9C@FreeBSD.ORG> <4F206B5D.3080302@FreeBSD.org> <CAF6rxgn81hxBwwx9Y6%2Bg1PFcaQjoLfQMfb5QGgycryR4PLoboA@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

On 26 Jan 2012, at 04:47, Eitan Adler wrote:

> On Wed, Jan 25, 2012 at 3:51 PM, Andriy Gapon <avg@freebsd.org> wrote:
>> on 25/01/2012 15:23 David Chisnall said the following:
>>> On 22 Jan 2012, at 19:25, David Schultz wrote:
>>>> Technically it's a problem with python.  If you ask for a strict
>>>> POSIX environment (doesn't matter what version) and also #include
>>>> a non-POSIX header, there's no guarantee about what you'll get.
>>>> I've CC'd the xlocale author in case he wants to comment or
>>>> voluntarily make xlocale work in an otherwise strict POSIX
>>>> environment, but that's not officially supported.
>>>=20
>>> The problem is really with glibc, which uses these macros in the =
opposite way to everyone else (glibc thinks defining these macros means =
expose functionality from this standard, don't expose it otherwise, =
everyone else thinks they mean expose only the things defined by this =
standard).  This makes writing portable code a pain and, while I'd =
usually be keen to blame Python for everything, in this case I =
sympathise with their problem.
>>=20
>> Thank you for the insights.
>>=20
>>> Would defining locale_t and the related functions in xlocale.h if we =
are in a mode where they are not normally exposed fix the problem?
>>=20
>> I think that this should work.
>=20
> What about patching python to only define the POSIX macros iff glibc
> is being used (and getting this upstreamed) ?

That would be ideal, but I'd prefer that we did anything that we can =
within the standard to ensure that people who do silly thing that work =
on other platforms don't end up saying 'FreeBSD sucks!' because of their =
code.  Please can you someone verify that this patch fixes the problem? =20=


David

Index: include/locale.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- include/locale.h	(revision 230510)
+++ include/locale.h	(working copy)
@@ -79,7 +79,8 @@
 char		*setlocale(int, const char *);
 __END_DECLS
=20
-#if __POSIX_VISIBLE >=3D 200809
+#if __POSIX_VISIBLE >=3D 200809 && !defined(__X_LOCALE_DEFINED)
+#define __X_LOCALE_DEFINED
=20
 #define LC_COLLATE_MASK  (1<<0)
 #define LC_CTYPE_MASK    (1<<1)
Index: include/xlocale.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- include/xlocale.h	(revision 230510)
+++ include/xlocale.h	(working copy)
@@ -35,7 +35,33 @@
 #include <locale.h>
=20
 __BEGIN_DECLS
+/*
+ * If people turned off POSIX2008 stuff, but still explicitly included =
the
+ * xlocale.h header, then assume that they actually do want these =
functions and
+ * define them.
+ */
+#ifndef __X_LOCALE_DEFINED
+#define __X_LOCALE_DEFINED
=20
+#define LC_COLLATE_MASK  (1<<0)
+#define LC_CTYPE_MASK    (1<<1)
+#define LC_MESSAGES_MASK (1<<2)
+#define LC_MONETARY_MASK (1<<3)
+#define LC_NUMERIC_MASK  (1<<4)
+#define LC_TIME_MASK     (1<<5)
+#define LC_ALL_MASK      (LC_COLLATE_MASK | LC_CTYPE_MASK | =
LC_MESSAGES_MASK | \
+		LC_MONETARY_MASK | LC_NUMERIC_MASK | LC_TIME_MASK)
+#define LC_GLOBAL_LOCALE ((locale_t)-1)
+
+typedef struct	_xlocale *locale_t;
+locale_t	newlocale(int mask, const char *locale, locale_t base);
+locale_t	duplocale(locale_t base);
+int		freelocale(locale_t loc);
+const char	*querylocale(int mask, locale_t loc);
+locale_t	uselocale(locale_t loc);
+
+#endif /* __X_LOCALE_DEFINED */
+
 /*
  * Extended locale versions of the locale-aware functions from =
string.h.
  *




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3B3BEEED-D1E4-4329-BE34-5CFF5CABB52C>