Source: opencv
Version: 2.4.5+dfsg-0exp1
Severity: serious
Tags: patch
Justification: fails to build from source (but built successfully in the past)

Hi,

opencv 2.4.5+dfsg-0exp1 fails to build on non-Linux archs [1][2][3].

Attached there are two patches fixing the issues:

* non-linux.diff: upstream changes
- include some Linux headers (and use sysconf to get the active
  processors count) also when using GNU libc
- do not include sys/sysctl.h on Hurd, since this non-standard include
  does not exist there

* non-linux-debian.diff: Debian-only changes
- build 1394 and v4l support only on Linux; the v4l support would be
  detected and enabled on kFreeBSD, but the actual implementation seems
  Linux-specific

[1] 
https://buildd.debian.org/status/fetch.php?pkg=opencv&arch=kfreebsd-i386&ver=2.4.5%2Bdfsg-0exp1&stamp=1375854567
[2] 
https://buildd.debian.org/status/fetch.php?pkg=opencv&arch=kfreebsd-amd64&ver=2.4.5%2Bdfsg-0exp1&stamp=1375849913
[3] 
https://buildd.debian.org/status/fetch.php?pkg=opencv&arch=hurd-i386&ver=2.4.5%2Bdfsg-0exp1&stamp=1376429030

Thanks,
-- 
Pino
--- a/modules/core/src/system.cpp
+++ b/modules/core/src/system.cpp
@@ -93,13 +93,13 @@
 
 #include <stdarg.h>
 
-#if defined __linux__ || defined __APPLE__
+#if defined __linux__ || defined __APPLE__ || defined __GLIBC__
 #include <unistd.h>
 #include <stdio.h>
 #include <sys/types.h>
 #if defined ANDROID
 #include <sys/sysconf.h>
-#else
+#elif !defined __GNU__
 #include <sys/sysctl.h>
 #endif
 #endif
--- a/modules/core/src/parallel.cpp
+++ b/modules/core/src/parallel.cpp
@@ -50,13 +50,13 @@
     #undef abs
 #endif
 
-#if defined __linux__ || defined __APPLE__
+#if defined __linux__ || defined __APPLE__ || defined __GLIBC__
     #include <unistd.h>
     #include <stdio.h>
     #include <sys/types.h>
     #if defined ANDROID
         #include <sys/sysconf.h>
-    #else
+    #elif !defined __GNU__
         #include <sys/sysctl.h>
     #endif
 #endif
@@ -451,7 +451,7 @@ int cv::getNumberOfCPUs(void)
 #elif defined ANDROID
     static int ncpus = getNumberOfCPUsImpl();
     return ncpus;
-#elif defined __linux__
+#elif defined __linux__ || defined __GLIBC__
     return (int)sysconf( _SC_NPROCESSORS_ONLN );
 #elif defined __APPLE__
     int numCPU=0;
--- a/debian/rules
+++ b/debian/rules
@@ -2,6 +2,7 @@
 
 export DEB_BUILD_MAINT_OPTIONS=hardening=+all,-pie,+fortify
 DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
+DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS)
 DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
 
 # SSE options
@@ -18,6 +19,13 @@
 CMAKE_ARCH_FLAGS += -DWITH_TBB=OFF
 endif
 
+# Linux-specific stuff
+ifeq ($(DEB_HOST_ARCH_OS),linux)
+CMAKE_ARCH_FLAGS += -DWITH_1394=ON -DWITH_V4L=ON
+else
+CMAKE_ARCH_FLAGS += -DWITH_1394=OFF -DWITH_V4L=OFF
+endif
+
 CMAKE_FLAGS = \
 	-DCMAKE_INSTALL_PREFIX=/usr \
 	-DCMAKE_INSTALL_LIBDIR="lib/$(DEB_HOST_MULTIARCH)" \
@@ -41,8 +49,6 @@
 	-DWITH_OPENEXR=ON \
 	-DWITH_PVAPI=ON	\
 	-DWITH_UNICAP=OFF	\
-	-DWITH_1394=ON	\
-	-DWITH_V4L=ON	\
 	-DWITH_EIGEN=ON \
 	-DWITH_XINE=OFF	\
 	-DBUILD_TESTS=OFF \

Reply via email to