Package: opencv
Version: 2.1.0-1
Severity: important
Tags: patch
User: debian-h...@lists.debian.org
Usertags: hurd

Hi,

currently[1] opencv fails to build on Debian GNU/Hurd.

The problem is that both GNU/Hurd and Mac OS X run the Mach kernel (although
very different versions of it), so both have the __MACH__ preprocessor symbol
defined. This makes the code that is actual for an Apple kernel being used on
Hurd, hence the failure.
The solution (attached) is to check for both __MACH__ and __APPLE__ in
Mac OS X code.

[1] 
https://buildd.debian.org/fetch.cgi?pkg=opencv&arch=hurd-i386&ver=2.1.0-1&stamp=1279480558&file=log&as=raw

Thanks,
-- 
Pino
Author: Pino Toscano <toscano.p...@tiscali.it>
Description: fix build on GNU/Hurd
 GNU/Hurd runs the gnumach kernel so there is the __MACH__ symbol defined as
 well; given the instructions are specific to the Mac OS X kernel, check for
 both __MACH__ and __APPLE__.
--- a/src/cxcore/cxsystem.cpp
+++ b/src/cxcore/cxsystem.cpp
@@ -72,7 +72,7 @@
 #include <sys/time.h>
 #include <time.h>
 
-#ifdef __MACH__
+#if (defined __MACH__ && defined __APPLE__)
 #include <mach/mach.h>
 #include <mach/mach_time.h>
 #endif
@@ -192,7 +192,7 @@
     struct timespec tp;
     clock_gettime(CLOCK_MONOTONIC, &tp);
     return (int64)tp.tv_sec*1000000000 + tp.tv_nsec;
-#elif defined __MACH__
+#elif (defined __MACH__ && defined __APPLE__)
     return (int64)mach_absolute_time();
 #else    
     struct timeval tv;
@@ -210,7 +210,7 @@
     return (double)freq.QuadPart;
 #elif defined __linux || defined __linux__
     return 1e9;
-#elif defined __MACH__
+#elif (defined __MACH__ && defined __APPLE__)
     static double freq = 0;
     if( freq == 0 )
     {

Reply via email to