freeze: include FreeBSD fix from Python's main()
authorMark Lodato <lodatom@gmail.com>
Sat, 24 Oct 2009 18:40:41 +0000 (14:40 -0400)
committerMark Lodato <lodatom@gmail.com>
Sat, 24 Oct 2009 18:40:41 +0000 (14:40 -0400)
Copy the fix for floating point exceptions on FreeBSD from Python's
Module/python.c.

bin/cython_freeze

index 0709ee53d10c6dd01502ddf6c265ff41b79505b5..631c39249fdb2add118413aaa97e2fa2efd2afd0 100755 (executable)
@@ -41,6 +41,10 @@ print """\
 #include <stdio.h>
 #include <stdlib.h>
 
+#ifdef __FreeBSD__
+#include <floatingpoint.h>
+#endif
+
 #if PY_MAJOR_VERSION < 3
 # define MODINIT(name)  init ## name
 #else
@@ -77,6 +81,17 @@ if not options.pymain:
     int r = 0;
 """,
 print """\
+    /* 754 requires that FP exceptions run in "no stop" mode by default,
+     * and until C vendors implement C99's ways to control FP exceptions,
+     * Python requires non-stop mode.  Alas, some platforms enable FP
+     * exceptions by default.  Here we disable them.
+     */
+#ifdef __FreeBSD__
+    fp_except_t m;
+
+    m = fpgetmask();
+    fpsetmask(m & ~FP_X_OFL);
+#endif
     if (PyImport_ExtendInittab(inittab)) {
         fprintf(stderr, "No memory\\n");
         exit(1);