summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--aclocal.m442
-rw-r--r--configure.ac5
-rw-r--r--distrib/configure.ac.in5
-rw-r--r--includes/Stg.h4
4 files changed, 56 insertions, 0 deletions
diff --git a/aclocal.m4 b/aclocal.m4
index 5becadbbb4..6403748c7f 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -514,6 +514,48 @@ AC_DEFUN([FP_SETTINGS],
AC_SUBST(SettingsOptCommand)
])
+# Helper for cloning a shell variable's state
+AC_DEFUN([FP_COPY_SHELLVAR],
+[if test -n "${$1+set}"; then $2="$$1"; else unset $2; fi ])
+
+# FP_SET_CFLAGS_C99
+# ----------------------------------
+# figure out which CFLAGS are needed to place the compiler into C99 mode
+# $1 is name of CC variable (unmodified)
+# $2 is name of CC flags variable (augmented if needed)
+# $3 is name of CPP flags variable (augmented if needed)
+AC_DEFUN([FP_SET_CFLAGS_C99],
+[
+ dnl save current state of AC_PROG_CC_C99
+ FP_COPY_SHELLVAR([CC],[fp_save_CC])
+ FP_COPY_SHELLVAR([CFLAGS],[fp_save_CFLAGS])
+ FP_COPY_SHELLVAR([CPPFLAGS],[fp_save_CPPFLAGS])
+ FP_COPY_SHELLVAR([ac_cv_prog_cc_c99],[fp_save_cc_c99])
+ dnl set local state
+ CC="$$1"
+ CFLAGS="$$2"
+ CPPFLAGS="$$3"
+ unset ac_cv_prog_cc_c99
+ dnl perform detection
+ _AC_PROG_CC_C99
+ fp_cc_c99="$ac_cv_prog_cc_c99"
+ case "x$ac_cv_prog_cc_c99" in
+ x) ;; # noop
+ xno) AC_MSG_ERROR([C99-compatible compiler needed]) ;;
+ *) $2="$$2 $ac_cv_prog_cc_c99"
+ $3="$$3 $ac_cv_prog_cc_c99"
+ ;;
+ esac
+ dnl restore saved state
+ FP_COPY_SHELLVAR([fp_save_CC],[CC])
+ FP_COPY_SHELLVAR([fp_save_CFLAGS],[CFLAGS])
+ FP_COPY_SHELLVAR([fp_save_CPPFLAGS],[CPPFLAGS])
+ FP_COPY_SHELLVAR([fp_save_cc_c99],[ac_cv_prog_cc_c99])
+ dnl cleanup
+ unset fp_save_CC
+ unset fp_save_CFLAGS
+ unset fp_save_cc_c99
+])
# FPTOOLS_SET_C_LD_FLAGS
# ----------------------------------
diff --git a/configure.ac b/configure.ac
index 7d522b0998..ac88433821 100644
--- a/configure.ac
+++ b/configure.ac
@@ -461,6 +461,11 @@ FP_CPP_CMD_WITH_ARGS(HaskellCPPCmd, HaskellCPPArgs)
AC_SUBST([HaskellCPPCmd])
AC_SUBST([HaskellCPPArgs])
+FP_SET_CFLAGS_C99([CC],[CFLAGS],[CPPFLAGS])
+FP_SET_CFLAGS_C99([CC_STAGE0],[CONF_CC_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0])
+FP_SET_CFLAGS_C99([CC],[CONF_CC_OPTS_STAGE1],[CONF_CPP_OPTS_STAGE1])
+FP_SET_CFLAGS_C99([CC],[CONF_CC_OPTS_STAGE2],[CONF_CPP_OPTS_STAGE2])
+
dnl ** Which ld to use?
dnl --------------------------------------------------------------
FIND_LD([LdCmd])
diff --git a/distrib/configure.ac.in b/distrib/configure.ac.in
index 99b51f536b..1df58d508b 100644
--- a/distrib/configure.ac.in
+++ b/distrib/configure.ac.in
@@ -109,6 +109,11 @@ dnl ** Check gcc version and flags we need to pass it **
#
FP_GCC_EXTRA_FLAGS
+FP_SET_CFLAGS_C99([CC],[CFLAGS],[CPPFLAGS])
+dnl FP_SET_CFLAGS_C99([CC_STAGE0],[CONF_CC_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0])
+FP_SET_CFLAGS_C99([CC],[CONF_CC_OPTS_STAGE1],[CONF_CPP_OPTS_STAGE1])
+FP_SET_CFLAGS_C99([CC],[CONF_CC_OPTS_STAGE2],[CONF_CPP_OPTS_STAGE2])
+
FPTOOLS_SET_C_LD_FLAGS([target],[CFLAGS],[LDFLAGS],[IGNORE_LINKER_LD_FLAGS],[CPPFLAGS])
FPTOOLS_SET_C_LD_FLAGS([build],[CONF_CC_OPTS_STAGE0],[CONF_GCC_LINKER_OPTS_STAGE0],[CONF_LD_LINKER_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0])
FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE1],[CONF_GCC_LINKER_OPTS_STAGE1],[CONF_LD_LINKER_OPTS_STAGE1],[CONF_CPP_OPTS_STAGE1])
diff --git a/includes/Stg.h b/includes/Stg.h
index b179db6deb..f1949b1630 100644
--- a/includes/Stg.h
+++ b/includes/Stg.h
@@ -26,6 +26,10 @@
#ifndef STG_H
#define STG_H
+#if !(__STDC_VERSION__ >= 199901L)
+# error __STDC_VERSION__ does not advertise C99 or later
+#endif
+
/*
* If we are compiling a .hc file, then we want all the register
* variables. This is the what happens if you #include "Stg.h" first: