From: Gustavo Zacarias Date: Fri, 31 Jan 2014 09:53:44 +0000 (-0300) Subject: build: find FILE_OFFSET_BITS via array X-Git-Tag: tdb-1.2.13~338 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0d9bb86293c9d39298786df095c73a6251b08b7e;p=thirdparty%2Fsamba.git 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. Signed-off-by: Gustavo Zacarias Reviewed-by: Andrew Bartlett Reviewed-by: Andreas Schneider Autobuild-User(master): Andrew Bartlett Autobuild-Date(master): Tue Feb 18 23:18:32 CET 2014 on sn-devel-104 --- diff --git a/lib/ccan/wscript b/lib/ccan/wscript index 59b82059c90..81039d006e5 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 - 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 - 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')