diff options
Diffstat (limited to 'cad/oce/patches/patch-src_OSD_OSD__signal.cxx')
-rw-r--r-- | cad/oce/patches/patch-src_OSD_OSD__signal.cxx | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/cad/oce/patches/patch-src_OSD_OSD__signal.cxx b/cad/oce/patches/patch-src_OSD_OSD__signal.cxx new file mode 100644 index 00000000000..c349f81e7c4 --- /dev/null +++ b/cad/oce/patches/patch-src_OSD_OSD__signal.cxx @@ -0,0 +1,59 @@ +$NetBSD: patch-src_OSD_OSD__signal.cxx,v 1.1 2017/01/20 11:00:50 fhajny Exp $ + +Define SIGFPE macros on SunOS. +Avoid overlapping reference in case statements. +Respect the reality as CMake found it, there might not be libsunmath. + +--- src/OSD/OSD_signal.cxx.orig 2017-01-13 05:34:36.000000000 +0000 ++++ src/OSD/OSD_signal.cxx +@@ -55,6 +55,17 @@ ACT_SIGIO_HANDLER *ADR_ACT_SIGIO_HANDLER + typedef void (* SIG_PFV) (int); + #endif + ++#if defined(__sun) ++# include <sys/siginfo.h> ++# define FPE_FLTDIV_TRAP FPE_FLTDIV ++# define FPE_INTDIV_TRAP FPE_INTDIV ++# define FPE_FLTOVF_TRAP FPE_FLTOVF ++# define FPE_INTOVF_TRAP FPE_INTOVF ++# define FPE_FLTUND_TRAP FPE_FLTUND ++# define FPE_FLTRES_TRAP FPE_FLTRES ++# define FPE_FLTINV_TRAP FPE_FLTINV ++#endif ++ + #ifdef __GNUC__ + # include <stdlib.h> + # include <stdio.h> +@@ -265,6 +276,7 @@ static void Handler (const int theSignal + break; + #endif + case SIGFPE: ++ { + sigaddset(&set, SIGFPE); + sigprocmask(SIG_UNBLOCK, &set, NULL) ; + #ifdef DECOSF1 +@@ -277,6 +289,7 @@ static void Handler (const int theSignal + break; + #else + // Reste SOLARIS ++ siginfo_t * aSigInfo = NULL; + if (aSigInfo) { + switch(aSigInfo->si_code) { + case FPE_FLTDIV_TRAP : +@@ -309,6 +322,7 @@ static void Handler (const int theSignal + } + #endif + break; ++ } + #if defined (__sgi) || defined(IRIX) + case SIGTRAP: + sigaddset(&set, SIGTRAP); +@@ -380,7 +394,7 @@ void OSD::SetSignal(const Standard_Boole + + if( aFloatingSignal ) { + //==== Enable the floating point exceptions =============== +-#if defined (__sun) || defined (SOLARIS) ++#if ( defined (__sun) || defined (SOLARIS) ) && HAVE_SUNMATH + sigfpe_handler_type PHandler = (sigfpe_handler_type) Handler ; + stat = ieee_handler("set", "invalid", PHandler); + stat = ieee_handler("set", "division", PHandler) || stat; |