From owner-freebsd-python@FreeBSD.ORG Thu Jan 26 16:59:17 2012 Return-Path: Delivered-To: python@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D54C8106568B; Thu, 26 Jan 2012 16:59:17 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from fallbackmx08.syd.optusnet.com.au (fallbackmx08.syd.optusnet.com.au [211.29.132.10]) by mx1.freebsd.org (Postfix) with ESMTP id 669788FC18; Thu, 26 Jan 2012 16:59:16 +0000 (UTC) Received: from mail08.syd.optusnet.com.au (mail08.syd.optusnet.com.au [211.29.132.189]) by fallbackmx08.syd.optusnet.com.au (8.13.1/8.13.1) with ESMTP id q0QEx0pn004440; Fri, 27 Jan 2012 01:59:02 +1100 Received: from c211-30-171-136.carlnfd1.nsw.optusnet.com.au (c211-30-171-136.carlnfd1.nsw.optusnet.com.au [211.30.171.136]) by mail08.syd.optusnet.com.au (8.13.1/8.13.1) with ESMTP id q0QEwdoj025929 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 27 Jan 2012 01:58:40 +1100 Date: Fri, 27 Jan 2012 01:58:39 +1100 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: David Schultz In-Reply-To: <20120126140021.GA18060@zim.MIT.EDU> Message-ID: <20120127012410.A1336@besplex.bde.org> References: <4F1AAA75.5050500@FreeBSD.org> <20120122192526.GA52071@zim.MIT.EDU> <9F9CC3ED-0686-4BC5-BF01-1839A30ABA9C@FreeBSD.ORG> <4F206B5D.3080302@FreeBSD.org> <3B3BEEED-D1E4-4329-BE34-5CFF5CABB52C@freebsd.org> <20120126140021.GA18060@zim.MIT.EDU> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: freebsd-standards@freebsd.org, David Chisnall , python@freebsd.org, Andriy Gapon , gogo@cs.uni-sb.de Subject: Re: pyconfig.h and freebsd10: _POSIX_C_SOURCE and _XOPEN_SOURCE X-BeenThere: freebsd-python@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: FreeBSD-specific Python issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 26 Jan 2012 16:59:18 -0000 On Thu, 26 Jan 2012, David Schultz wrote: > On Thu, Jan 26, 2012, David Chisnall wrote: >> >> On 26 Jan 2012, at 04:47, Eitan Adler wrote: >>> What about patching python to only define the POSIX macros iff glibc >>> is being used (and getting this upstreamed) ? > > That's a good strategy regardless. As long as python is doing > something bogus, it could easily break in the future. > >> Index: include/xlocale.h > [...] >> +/* >> + * 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 >> >> +#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); This file has mounds of style bugs. This change adds many more: - all tabs after #define are corrupt - all spaces around the binary operator `<<' are missing. - the prototype for newlocale() is disordered. The prototypes have mounds of namespace pollution. All their parameters have names in the application namespace. locale.h used to have only 1 corrupt tab after #define (the one, but now has the above. It also has verbose comments on the prototypes which make the actual prototypes hard to read. Normally, prototypes have no comment, as for old prototypes in locale.h. Some of the comments are not formatted normally. >> + >> +#endif /* __X_LOCALE_DEFINED */ > > It would be preferable not to have two copies of all the > definitions and declarations in the source. This is often handled > with separate headers like sys/_timeval.h and sys/_types.h. > Perhaps that's too many hoops to jump through just to cope with > buggy applications. (Incidentally, I noticed that the LC_* macros > are in a slightly different order from the LC_*_MASK macros. For > that reason, and only that reason, it's not possible to define the > latter in terms of the former.) > > Would it suffice, perhaps, to simply change the xlocale > declarations to use type `struct _xlocale' instead of locale_t? > That won't fix apps that expect the LC_*_MASK macros to be > defined, but it looks like it will at least make the header > compile in a strict POSIX environment, and it avoids the > duplication. > > By the way, struct _xlocale needs another underscore in front of > it. Names prefixed with a single underscore and a lowercase > letter are in the application's namespace. No, this is not one of the many missing underscores in the above. Identifiers that begin with a single underscore which is followed by any character that gives a valid identifier (an upper or lower case letter, or a digit) are reserved for use as identifiers with file scope in both the ordinary and tag name spaces. The above only uses _xlocale in file scope (in a typedef), so application use of it can't clobber this use. Only use of it in macros is likely to require 2 underscores, but there is no such use. Using it for only a tag name limits problems with underscores even more than usual. Bruce