Bug#739118: blender: FTBFS on s390x (and other non-official 64-bit architectures)

Aurelien Jarno aurel32 at debian.org
Sat Feb 15 22:27:51 UTC 2014


Package: blender
Version: 2.69-3
Severity: serious
Tags: upstream patch
Justification: fails to build from source (but built successfully in the past)

Since the default gcc has been upgraded to gcc-4.8, blender fails to
build on s390x, and on a few non-official architectures like ppc64 and
sparc64. This is due to a hardcoded list of architectures with 64-bit
pointers which has to be updated. The patch below fixes the issue:

--- blender-2.69.orig/intern/atomic/atomic_ops.h
+++ blender-2.69/intern/atomic/atomic_ops.h
@@ -61,7 +61,7 @@
 #  endif
 #endif
 
-#if defined(_M_X64) || defined(__amd64__) || defined(__x86_64__)
+#if defined(_M_X64) || defined(__amd64__) || defined(__x86_64__) || defined(__s390x__) || defined(__powerpc64__) || (defined(__sparc__) && defined(__arch64__))
 #  define LG_SIZEOF_PTR 3
 #  define LG_SIZEOF_INT 2
 #else

On the other hand, it might be a good idea to actually detect the size
of a pointer instead of having an hardcoded list. The following code
can be used for that:

| #include <stdint.h>
| #include <limits.h>
| 
| #if (UINTPTR_MAX == UINT64_MAX)
| #  define LG_SIZEOF_PTR 3
| #elif (UINTPTR_MAX == UINT32_MAX)
| #  define LG_SIZEOF_PTR 2
| #else
| #  error Can not determine size of a pointer
| #endif
| 
| #if (UINT_MAX == UINT64_MAX)
| #  define LG_SIZEOF_INT 3
| #elif (UINT_MAX == UINT32_MAX)
| #  define LG_SIZEOF_INT 2
| #else
| #  error Can not determine size of a int
| #endif

Or it can probably also be done directly with cmake.

-- System Information:
Debian Release: jessie/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: s390x

Kernel: Linux 3.2.0-4-s390x (SMP w/2 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash



More information about the pkg-multimedia-maintainers mailing list