summaryrefslogtreecommitdiff
path: root/source4/lib
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2006-09-24 01:52:20 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:20:16 -0500
commita90eba6316b89c3e387e0c52af22b5344a5de2f2 (patch)
tree38ac24ab2aaa9f900dd3a2a79b0193702521c9c8 /source4/lib
parent51f27dc3f19e9916155ecad64662b874d1fea229 (diff)
downloadsamba-a90eba6316b89c3e387e0c52af22b5344a5de2f2.tar.gz
samba-a90eba6316b89c3e387e0c52af22b5344a5de2f2.tar.bz2
samba-a90eba6316b89c3e387e0c52af22b5344a5de2f2.zip
r18859: finally worked out what is going wrong with immediate structures. The
problem is that the AC_PROG_CC_C99 macro ends up selecting either -std=std99 or -std=gnu99 for gcc. Ironically enough, that breaks constant structure initialisers! So, simplest solution is to not try that configure test if we know we are using gcc (This used to be commit 331435daf3275acaf282c1032c6e9f7dc3e685bb)
Diffstat (limited to 'source4/lib')
-rw-r--r--source4/lib/replace/libreplace_cc.m427
1 files changed, 27 insertions, 0 deletions
diff --git a/source4/lib/replace/libreplace_cc.m4 b/source4/lib/replace/libreplace_cc.m4
index aa0465983a..352d115547 100644
--- a/source4/lib/replace/libreplace_cc.m4
+++ b/source4/lib/replace/libreplace_cc.m4
@@ -28,7 +28,13 @@ ac_cv_prog_cc_Ae=no
savedCFLAGS=$CFLAGS
AC_PROG_CC
CFLAGS=$savedCFLAGS
+
+dnl don't try for C99 if we are using gcc, as otherwise we
+dnl lose immediate structure constants
+if test x"$GCC" = x"no" ; then
AC_PROG_CC_C99
+fi
+
if test x"$GCC" = x"yes" ; then
AC_MSG_CHECKING([for version of gcc])
GCC_VERSION=`$CC -dumpversion`
@@ -122,5 +128,26 @@ if test $ac_cv_sizeof_long_long -lt 8;then
AC_MSG_ERROR([LIBREPLACE needs sizeof(long long) >= 8])
fi
+############################################
+# check if the compiler can do immediate structures
+AC_CACHE_CHECK([for immediate structures],samba_cv_immediate_structures, [
+ AC_TRY_COMPILE([
+#include <stdio.h>],
+[
+ typedef struct {unsigned x;} FOOBAR;
+ #define X_FOOBAR(x) ((FOOBAR) { x })
+ #define FOO_ONE X_FOOBAR(1)
+ FOOBAR f = FOO_ONE;
+ static const struct {
+ FOOBAR y;
+ } f2[] = {
+ {FOO_ONE}
+ };
+],
+ samba_cv_immediate_structures=yes,samba_cv_immediate_structures=no)])
+if test x"$samba_cv_immediate_structures" = x"yes"; then
+ AC_DEFINE(HAVE_IMMEDIATE_STRUCTURES,1,[Whether the compiler supports immediate structures])
+fi
+
AC__LIBREPLACE_ONLY_CC_CHECKS_END
]) dnl end AC_LIBREPLACE_CC_CHECKS