summaryrefslogtreecommitdiffstats
path: root/package/samba4/samba4-0003-build-find-FILE_OFFSET_BITS-via-array.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/samba4/samba4-0003-build-find-FILE_OFFSET_BITS-via-array.patch')
-rw-r--r--package/samba4/samba4-0003-build-find-FILE_OFFSET_BITS-via-array.patch56
1 files changed, 56 insertions, 0 deletions
diff --git a/package/samba4/samba4-0003-build-find-FILE_OFFSET_BITS-via-array.patch b/package/samba4/samba4-0003-build-find-FILE_OFFSET_BITS-via-array.patch
new file mode 100644
index 0000000000..9187cd2b10
--- /dev/null
+++ b/package/samba4/samba4-0003-build-find-FILE_OFFSET_BITS-via-array.patch
@@ -0,0 +1,56 @@
+From 16d88e7813a7739c070a7a1cf6388fd4f236fd99 Mon Sep 17 00:00:00 2001
+From: Gustavo Zacarias <gustavo@zacarias.com.ar>
+Date: Fri, 31 Jan 2014 06:45:18 -0300
+Subject: [PATCHv2] build: find FILE_OFFSET_BITS via array
+
+This makes cross-compiling happy, use a trick similar to autoconf's
+AC_CHECK_SIZEOF macro.
+Basically we make an array:
+
+static int array[1 - 2 * !(((long int)(sizeof(off_t))) < 8)];
+
+This gives -1 multiplied by the negation of the condition
+(sizeof(off_t) < 8) cast to a long int.
+So if the condition is true it gives array[(-1 * 0)] (remember the
+condition is cast and negated) thus passing a build test with a 0-sized
+array.
+If it's false it gives array[(-1 * 1)] thus failing with a
+negative-sized array.
+
+Status: upstream for next branch.
+
+Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
+---
+ lib/ccan/wscript | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/lib/ccan/wscript b/lib/ccan/wscript
+index 59b8205..81039d0 100644
+--- a/lib/ccan/wscript
++++ b/lib/ccan/wscript
+@@ -127,15 +127,18 @@ def configure(conf):
+ # Only check for FILE_OFFSET_BITS=64 if off_t is normally small:
+ # use raw routines because wrappers include previous _GNU_SOURCE
+ # or _FILE_OFFSET_BITS defines.
++ # The math for these tests is:
++ # array[-1 * !((int)(condition)) ] (condition is true) = array[0] = builds
++ # array[-1 * !((int)(condition)) ] (condition is false) = array[-1] = fails
+ conf.check(fragment="""#include <sys/types.h>
+- int main(void) { return !(sizeof(off_t) < 8); }""",
+- execute=True, msg='Checking for small off_t',
++ int main(void) { static int test_array[1 - 2 * !(((long int)(sizeof(off_t))) < 8)]; }""",
++ msg='Checking for small off_t',
+ define_name='SMALL_OFF_T')
+ # Unreliable return value above, hence use define.
+ if conf.CONFIG_SET('SMALL_OFF_T'):
+ conf.check(fragment="""#include <sys/types.h>
+- int main(void) { return !(sizeof(off_t) >= 8); }""",
+- execute=True, msg='Checking for -D_FILE_OFFSET_BITS=64',
++ int main(void) { static int test_array[1 - 2 * !(((long int)(sizeof(off_t))) >= 8)]; }""",
++ msg='Checking for -D_FILE_OFFSET_BITS=64',
+ ccflags='-D_FILE_OFFSET_BITS=64',
+ define_name='HAVE_FILE_OFFSET_BITS')
+
+--
+1.8.3.2
+
OpenPOWER on IntegriCloud