r18864: merge lib/replace changes from samba4
[jra/samba/.git] / source3 / lib / replace / libreplace_cc.m4
index aa0465983afef05334e5fa96b6aee2ad67f07b5d..352d115547376b22378d7600ad193b16f31e2d68 100644 (file)
@@ -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