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

Jon TURNEY jon.turney@dronecode.org.uk
Wed Jul 30 13:55:00 GMT 2014


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.

$ cat m_pi_test.c
#include <math.h>

int main()
{
   double d = M_PI;
}

before patch:

$ gcc m_pi_test.c

$ gcc -std=c99 m_pi_test.c
m_pi_test.c: In function ‘main’:
m_pi_test.c:5:14: error: ‘M_PI’ undeclared (first use in this function)

$ gcc -std=c99 m_pi_test.c -D_XOPEN_SOURCE=500
m_pi_test.c: In function ‘main’:
m_pi_test.c:5:14: error: ‘M_PI’ undeclared (first use in this function)

after patch:

$ gcc m_pi_test.c

$ gcc -std=c99 m_pi_test.c
m_pi_test.c: In function ‘main’:
m_pi_test.c:5:14: error: ‘M_PI’ undeclared (first use in this function)

$ gcc -std=c99 m_pi_test.c -D_XOPEN_SOURCE=500

2014-07-30  Jon TURNEY  <jon.turney@dronecode.org.uk>

	* libc/include/math.h: Also define M_PI etc. if _XOPEN_SOURCE is
	defined appropriately.

[1] http://pubs.opengroup.org/onlinepubs/007908799/xsh/math.h.html
-------------- next part --------------
Index: libc/include/math.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/math.h,v
retrieving revision 1.50
diff -u -u -r1.50 math.h
--- libc/include/math.h	18 Dec 2012 22:41:53 -0000	1.50
+++ libc/include/math.h	30 Jul 2014 13:45:52 -0000
@@ -542,8 +542,12 @@
 #define TLOSS 5
 #define PLOSS 6
 
+#endif /* ! defined (__STRICT_ANSI__) */
+
 /* Useful constants.  */
 
+#if !defined(__STRICT_ANSI__) || (_XOPEN_SOURCE >= 500)
+
 #define MAXFLOAT	3.40282347e+38F
 
 #define M_E		2.7182818284590452354
@@ -552,16 +556,21 @@
 #define M_LN2		_M_LN2
 #define M_LN10		2.30258509299404568402
 #define M_PI		3.14159265358979323846
-#define M_TWOPI         (M_PI * 2.0)
 #define M_PI_2		1.57079632679489661923
 #define M_PI_4		0.78539816339744830962
-#define M_3PI_4		2.3561944901923448370E0
-#define M_SQRTPI        1.77245385090551602792981
 #define M_1_PI		0.31830988618379067154
 #define M_2_PI		0.63661977236758134308
 #define M_2_SQRTPI	1.12837916709551257390
 #define M_SQRT2		1.41421356237309504880
 #define M_SQRT1_2	0.70710678118654752440
+
+#endif
+
+#ifndef __STRICT_ANSI__
+
+#define M_TWOPI         (M_PI * 2.0)
+#define M_3PI_4		2.3561944901923448370E0
+#define M_SQRTPI        1.77245385090551602792981
 #define M_LN2LO         1.9082149292705877000E-10
 #define M_LN2HI         6.9314718036912381649E-1
 #define M_SQRT3	1.73205080756887719000


More information about the Newlib mailing list