dee1cf0cdf
Samba 4.1.x uses the waf build system which isn't very cross-compile friendly, and also some tests are formulated in a way that isn't cross-build friendly either by needing to run them. For this reason the samba4 build system includes a way to define answers for many of the tests, but this support isn't complete and some tests still want to be executed. Samba 4.1.x also requires a proper answers file for each architecture, and at the moment i've only tested for ARM and PowerPC so only those architectures are supported to begin with. To add support for another architecture basically copy one of the cache files to the proper name, enable it in Config.in and adjust endianess and all of the "size of" answers. I'm in the process of automating the sizeof and endianess answers within the samba build system to make them cross friendly to simplify the answers file to just one generic linux variant. The 3.6.x branch is still security supported for the forseeable future. I'm currently working with samba upstream to solve many of these issues but this will probably happen with the yet unreleased 4.2 branch only. Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
57 lines
2.4 KiB
Diff
57 lines
2.4 KiB
Diff
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
|
|
|