[XviD-devel] [PATCH] xvid-1.2.2 compilation patch for Darwin

Fabian Groffen grobian at gentoo.org
Sun May 31 11:22:58 CEST 2009


Compilation fails this way:

>>> Compiling source in /Library/Gentoo/var/tmp/portage/media-libs/xvid-1.2.2-r1/work/xvidcore/build/generic ...
make -j2
  D: =build
  C: ./decoder.c
  C: ./encoder.c
  C: ./xvid.c
../../src/xvid.c: In function ‘xvid_gbl_info’:
../../src/xvid.c:682: error: ‘_SC_NPROCESSORS_CONF’ undeclared (first use in this function)
../../src/xvid.c:682: error: (Each undeclared identifier is reported only once 
../../src/xvid.c:682: error: for each function it appears in.)
make: *** [xvid.o] Error 1
make: *** Waiting for unfinished jobs....
 * ERROR: media-libs/xvid-1.2.2-r1 failed:
 *   emake failed

The attached patch fixes the issue for Darwin to retrieve the number of
CPUs via sysctl.  This should also work for BSD, but I couldn't try
that.  Additionally, the patch avoids failing during compilation by
assuming a single CPU in case there is no known way to retrieve the
number of CPUs.

Patch tested on OSX 10.4/ppc and 10.5/x86.


-- 
Fabian Groffen
Gentoo on a different level
-------------- next part --------------
http://archives.gentoo.org/gentoo-alt/msg_a2a7a3392b8ebca0207ca06ca755a38f.xml

--- src/xvid.c.orig	2009-02-28 00:13:41 -0600
+++ src/xvid.c	2009-02-28 00:13:45 -0600
@@ -32,6 +32,17 @@
   #include <unistd.h>
 #endif
 
+#if defined(__APPLE__) && defined(__MACH__)
+#  include <sys/types.h>
+#  include <sys/sysctl.h>
+#  ifdef MAX
+#    undef MAX
+#  endif
+#  ifdef MIN
+#    undef MIN
+#  endif
+#endif
+
 #include "xvid.h"
 #include "decoder.h"
 #include "encoder.h"
@@ -677,10 +682,29 @@
 	info->num_threads = siSysInfo.dwNumberOfProcessors; /* number of _logical_ cores */
   }
 
-#else
+#elif defined(__APPLE__) && defined(__MACH__)
+
+  {
+    size_t len;
+    int    mib[2], ncpu;
+
+    mib[0] = CTL_HW;
+    mib[1] = HW_NCPU;
+    len    = sizeof(ncpu);
+    if (sysctl(mib, 2, &ncpu, &len, NULL, 0) == 0)
+      info -> num_threads = ncpu;
+    else
+      info -> num_threads = 1;
+  }
+
+#elif defined(_SC_NPROCESSORS_CONF)
 
   info->num_threads = sysconf(_SC_NPROCESSORS_CONF);	
 
+#else
+
+  info->num_threads = 1;
+
 #endif
 
 	return 0;


More information about the Xvid-devel mailing list