[PATCH] libstdc++: implement locale support for AIX

Jonathan Wakely jwakely@redhat.com
Fri Jan 22 11:12:41 GMT 2021


On 22/01/21 09:57 +0000, CHIGOT, CLEMENT via Libstdc++ wrote:
>Hi Rainer
>
>> > 3) POSIX 2017 and non-POSIX functions
>> > Many of the *_l functions being used in GNU or dragonfly models aren't
>> > POSIX 2008, but mainly POSIX 2017 or like strtof_l not POSIX at all.
>> > However, there are really useful in the code, thus I've made a double
>> > implementation based on "#ifdef HAVE_". Is it ok for you ? It's not really
>> > POSIX 2008 but more POSIX 2008 with 2017 compatibility.
>> > For the configure, I didn't find any better way to check each syscall, as
>> > they all depend on different includes. Tell me if you have a better idea.
>>
>> First a general observation: there are two groups of functions you're
>> testing for:
>>
>> * Pure BSD additions, not available in either POSIX.1, ISO C, or glibc:
>>
>>  localeconv_l
>>  mbstowcs_l
>>  strtod_l
>>  strtof_l
>>  strtold_l
>>  wcsftime_l
>>
>> * Part of XPG7:
>>
>>   iswctype_l
>>   strcoll_l
>>   strftime_l
>>   strxfrm_l
>>   towlower_l
>>   towupper_l
>>   wcscoll_l
>>   wcsxfrm_l
>>   wctype_l
>>
>> My suggestion would be not to have configure tests _GLIBCXX_HAVE_<FUNC>
>> for any of the second group at all: this is ieee_1003.1-2008, after all,
>> so if some OS selects that clocale variant, it better implement all of
>> those.  If really need be, one could a configure check for those and
>> error out if any is missing.  This makes the code way more readable than
>> trying to handle some hypothetical partial implementation.
>
>In this case, it would be better to call it ieee_1003.1-2017 but I agree
>it would be better to avoid all these #ifdef.

Yes, 2017 is the current standard (equivalent to 2008 plus
corrigenda), but we could also use a shorter, easier to remember name,
like posix.1-2017, xpg7, or susv4 (or even accept all four and make
them mean the same thing, though that will probably cause confusion).

>Some are still needed as for example only the last version of AIX have
>strftime_l.
>
>> As for the BSD group, I suggest to have one representative configure
>>  test (for localeconv_l perhaps) and then use an appropriate name for the
>> group as a whole.  Again, this will most likely be an all-or-nothing
>> thing.
>
>I'm not sure this is really all-or-nothing for these. Maybe strtof_l and cie
>can be grouped by. But the 3 others are really different. Linux have wcsftime_l
>but not the others. AIX avec none. BSD have all.

Glibc has strto{f,d,ld,l,ul,ll,ull}_l too:

See https://sourceware.org/git/?p=glibc.git;a=blob;f=stdlib/stdlib.h;h=6360845d98e6e1c3f42821def14312dc2279d74c;hb=HEAD#l268




More information about the Libstdc++ mailing list