diff options
Diffstat (limited to 'package/samba4/samba4-0006-build-unify-and-fix-endian-tests.patch')
-rw-r--r-- | package/samba4/samba4-0006-build-unify-and-fix-endian-tests.patch | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/package/samba4/samba4-0006-build-unify-and-fix-endian-tests.patch b/package/samba4/samba4-0006-build-unify-and-fix-endian-tests.patch new file mode 100644 index 0000000000..3fdfe6e742 --- /dev/null +++ b/package/samba4/samba4-0006-build-unify-and-fix-endian-tests.patch @@ -0,0 +1,165 @@ +From ee4e06b7223fb2925bc887c89216a66029d44862 Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias <gustavo@zacarias.com.ar> +Date: Tue, 1 Apr 2014 06:41:47 -0300 +Subject: [PATCH 2/5] build: unify and fix endian tests + +Unify the endian tests out of lib/ccan/wscript into wafsamba since +they're almost cross-compile friendly. +While at it fix them to be so by moving the preprocessor directives out +of main scope since that will fail. +And keep the WORDS_BIGENDIAN, HAVE_LITTLE_ENDIAN and HAVE_BIG_ENDIAN +defines separate because of different codebases. + +Status: Upstream. + +Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> +--- + buildtools/wafsamba/wscript | 65 ++++++++++++++++++++++++++++++++++++++++++--- + lib/ccan/wscript | 55 -------------------------------------- + 2 files changed, 62 insertions(+), 58 deletions(-) + +diff --git a/buildtools/wafsamba/wscript b/buildtools/wafsamba/wscript +index 7984227..1a2cfe6 100755 +--- a/buildtools/wafsamba/wscript ++++ b/buildtools/wafsamba/wscript +@@ -390,9 +390,68 @@ def configure(conf): + else: + conf.define('SHLIBEXT', "so", quote=True) + +- conf.CHECK_CODE('long one = 1; return ((char *)(&one))[0]', +- execute=True, +- define='WORDS_BIGENDIAN') ++ # First try a header check for cross-compile friendlyness ++ conf.CHECK_CODE(code = """#ifdef __BYTE_ORDER ++ #define B __BYTE_ORDER ++ #elif defined(BYTE_ORDER) ++ #define B BYTE_ORDER ++ #endif ++ ++ #ifdef __LITTLE_ENDIAN ++ #define LITTLE __LITTLE_ENDIAN ++ #elif defined(LITTLE_ENDIAN) ++ #define LITTLE LITTLE_ENDIAN ++ #endif ++ ++ #if !defined(LITTLE) || !defined(B) || LITTLE != B ++ #error Not little endian. ++ #endif ++ int main(void) { return 0; }""", ++ addmain=False, ++ headers="endian.h sys/endian.h", ++ define="HAVE_LITTLE_ENDIAN") ++ conf.CHECK_CODE(code = """#ifdef __BYTE_ORDER ++ #define B __BYTE_ORDER ++ #elif defined(BYTE_ORDER) ++ #define B BYTE_ORDER ++ #endif ++ ++ #ifdef __BIG_ENDIAN ++ #define BIG __BIG_ENDIAN ++ #elif defined(BIG_ENDIAN) ++ #define BIG BIG_ENDIAN ++ #endif ++ ++ #if !defined(BIG) || !defined(B) || BIG != B ++ #error Not big endian. ++ #endif ++ int main(void) { return 0; }""", ++ addmain=False, ++ headers="endian.h sys/endian.h", ++ define="HAVE_BIG_ENDIAN") ++ ++ if not conf.CONFIG_SET("HAVE_BIG_ENDIAN") and not conf.CONFIG_SET("HAVE_LITTLE_ENDIAN"): ++ # That didn't work! Do runtime test. ++ conf.CHECK_CODE("""union { int i; char c[sizeof(int)]; } u; ++ u.i = 0x01020304; ++ return u.c[0] == 0x04 && u.c[1] == 0x03 && u.c[2] == 0x02 && u.c[3] == 0x01 ? 0 : 1;""", ++ addmain=True, execute=True, ++ define='HAVE_LITTLE_ENDIAN', ++ msg="Checking for HAVE_LITTLE_ENDIAN - runtime") ++ conf.CHECK_CODE("""union { int i; char c[sizeof(int)]; } u; ++ u.i = 0x01020304; ++ return u.c[0] == 0x01 && u.c[1] == 0x02 && u.c[2] == 0x03 && u.c[3] == 0x04 ? 0 : 1;""", ++ addmain=True, execute=True, ++ define='HAVE_BIG_ENDIAN', ++ msg="Checking for HAVE_BIG_ENDIAN - runtime") ++ ++ # Extra sanity check. ++ if conf.CONFIG_SET("HAVE_BIG_ENDIAN") == conf.CONFIG_SET("HAVE_LITTLE_ENDIAN"): ++ Logs.error("Failed endian determination. The PDP-11 is back?") ++ sys.exit(1) ++ else: ++ if conf.CONFIG_SET("HAVE_BIG_ENDIAN"): ++ conf.DEFINE('WORDS_BIGENDIAN', 1) + + # check if signal() takes a void function + if conf.CHECK_CODE('return *(signal (0, 0)) (0) == 1', +diff --git a/lib/ccan/wscript b/lib/ccan/wscript +index 1c5f337..0e540db 100644 +--- a/lib/ccan/wscript ++++ b/lib/ccan/wscript +@@ -25,61 +25,6 @@ def configure(conf): + conf.CHECK_CODE('int __attribute__((used)) func(int x) { return x; }', + addmain=False, link=False, cflags=conf.env['WERROR_CFLAGS'], + define='HAVE_ATTRIBUTE_USED') +- # We try to use headers for a compile-time test. +- conf.CHECK_CODE(code = """#ifdef __BYTE_ORDER +- #define B __BYTE_ORDER +- #elif defined(BYTE_ORDER) +- #define B BYTE_ORDER +- #endif +- +- #ifdef __LITTLE_ENDIAN +- #define LITTLE __LITTLE_ENDIAN +- #elif defined(LITTLE_ENDIAN) +- #define LITTLE LITTLE_ENDIAN +- #endif +- +- #if !defined(LITTLE) || !defined(B) || LITTLE != B +- #error Not little endian. +- #endif""", +- headers="endian.h sys/endian.h", +- define="HAVE_LITTLE_ENDIAN") +- conf.CHECK_CODE(code = """#ifdef __BYTE_ORDER +- #define B __BYTE_ORDER +- #elif defined(BYTE_ORDER) +- #define B BYTE_ORDER +- #endif +- +- #ifdef __BIG_ENDIAN +- #define BIG __BIG_ENDIAN +- #elif defined(BIG_ENDIAN) +- #define BIG BIG_ENDIAN +- #endif +- +- #if !defined(BIG) || !defined(B) || BIG != B +- #error Not big endian. +- #endif""", +- headers="endian.h sys/endian.h", +- define="HAVE_BIG_ENDIAN") +- +- if not conf.CONFIG_SET("HAVE_BIG_ENDIAN") and not conf.CONFIG_SET("HAVE_LITTLE_ENDIAN"): +- # That didn't work! Do runtime test. +- conf.CHECK_CODE("""union { int i; char c[sizeof(int)]; } u; +- u.i = 0x01020304; +- return u.c[0] == 0x04 && u.c[1] == 0x03 && u.c[2] == 0x02 && u.c[3] == 0x01 ? 0 : 1;""", +- addmain=True, execute=True, +- define='HAVE_LITTLE_ENDIAN', +- msg="Checking for HAVE_LITTLE_ENDIAN - runtime") +- conf.CHECK_CODE("""union { int i; char c[sizeof(int)]; } u; +- u.i = 0x01020304; +- return u.c[0] == 0x01 && u.c[1] == 0x02 && u.c[2] == 0x03 && u.c[3] == 0x04 ? 0 : 1;""", +- addmain=True, execute=True, +- define='HAVE_BIG_ENDIAN', +- msg="Checking for HAVE_BIG_ENDIAN - runtime") +- +- # Extra sanity check. +- if conf.CONFIG_SET("HAVE_BIG_ENDIAN") == conf.CONFIG_SET("HAVE_LITTLE_ENDIAN"): +- Logs.error("Failed endian determination. The PDP-11 is back?") +- sys.exit(1) + + conf.CHECK_CODE('return __builtin_choose_expr(1, 0, "garbage");', + link=True, +-- +1.8.3.2 + |