summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--m4/const.m466
1 files changed, 66 insertions, 0 deletions
diff --git a/m4/const.m4 b/m4/const.m4
new file mode 100644
index 000000000..ebe59596c
--- /dev/null
+++ b/m4/const.m4
@@ -0,0 +1,66 @@
+#serial 1
+
+dnl Just like AC_C_CONST from autoconf-2.12, but with an initializer
+dnl for `charset x' and with
+dnl AC_DEFINE(const, )
+dnl changed to
+dnl AC_DEFINE_UNQUOTED(const, [/* empty */])
+dnl to avoid this warning:
+dnl [...]/m4: Warning: Excess arguments to built-in `define' ignored
+
+undefine([AC_C_CONST])
+AC_DEFUN(AC_C_CONST,
+[dnl This message is consistent in form with the other checking messages,
+dnl and with the result message.
+AC_CACHE_CHECK([for working const], ac_cv_c_const,
+[AC_TRY_COMPILE(,
+changequote(<<, >>)dnl
+<<
+/* Ultrix mips cc rejects this. */
+typedef int charset[2]; const charset x = {0, 0};
+/* SunOS 4.1.1 cc rejects this. */
+char const *const *ccp;
+char **p;
+/* NEC SVR4.0.2 mips cc rejects this. */
+struct point {int x, y;};
+static struct point const zero = {0,0};
+/* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in an arm
+ of an if-expression whose if-part is not a constant expression */
+const char *g = "string";
+ccp = &g + (g ? g-g : 0);
+/* HPUX 7.0 cc rejects these. */
+++ccp;
+p = (char**) ccp;
+ccp = (char const *const *) p;
+{ /* SCO 3.2v4 cc rejects this. */
+ char *t;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+}
+{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+}
+{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+}
+{ /* AIX XL C 1.02.0.0 rejects this saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; };
+ struct s *b; b->j = 5;
+}
+{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+}
+>>,
+changequote([, ])dnl
+ac_cv_c_const=yes, ac_cv_c_const=no)])
+if test $ac_cv_c_const = no; then
+ AC_DEFINE_UNQUOTED(const, [/* empty */])
+fi
+])