[PATCH] define M_PI etc. if _XOPEN_SOURCE is defined appropriately

Jon TURNEY jon.turney@dronecode.org.uk
Mon Aug 4 16:56:00 GMT 2014


On 01/08/2014 10:16, Corinna Vinschen wrote:
> On Jul 31 14:41, Jon TURNEY wrote:
>> On 30/07/2014 15:19, Corinna Vinschen wrote:
>>> On Jul 30 15:12, Jon TURNEY wrote:
>>>> On 30/07/2014 14:54, Jon TURNEY wrote:
>>>>> math.h only defines M_PI and similar constants if __STRICT_ANSI__ is not
>>>>> defined.
>>>>>
>>>>> SUSv2 specifies that math.h should define some of these constants [1].
>>>>>
>>>>> Attached is a patch to also define these constants if _XOPEN_SOURCE is
>>>>> defined appropriately.
>>>>
>>>> So bad :-(
>>>>
>>>> This patch doesn't correctly handle the case where _XOPEN_SOURCE is defined
>>>> as the empty string.  Amended patch attached.
>>>
>>> You can workaround that by using the definition of __XSI_VISIBLE
>> >from <sys/cdefs.h>.  It's always defined and non-empty.
>>
>> Yes, that seems a much better way of doing things.
>>
>> However, in my testing, __XSI_VISIBLE seems to be defined by line 704 in
>> cdefs.h with just -std=c99, which doesn't seem right.
>
> You're right.  You have to #define _C99_SOURCE explicitely in your
> source code to make the definitions in cdefs.h work.  This is identical
> to upstream FreeBSD.
>
> And, no, I'm not entirely sure if that's wrong or working as expected.
>
> Maybe we should add code like this?
>
>    #if __STDC_VERSION__ == 199901L
>    #define _C99_SOURCE
>    #elif __STDC_VERSION__ == 201112L
>    #define _C11_SOURCE
>    #endif
>
> Anyway, please go ahead and apply your patch.

Sorry, I don't think I have commit access to newlib.



More information about the Newlib mailing list