]> diplodocus.org Git - nmh/blobdiff - m4/cppflags.m4
Simplified m_strn() per Ralph's suggestions.
[nmh] / m4 / cppflags.m4
old mode 100755 (executable)
new mode 100644 (file)
index 8b5615a..1e2401c
@@ -1,4 +1,8 @@
 dnl
+dnl This is intended to be extensible, by just adding candidate C preprocessor
+dnl options to be checked in the for loop.  The first candidate is empty, in
+dnl case none are needed.  Also, the test program can be readily augmented.
+dnl
 dnl On glibc we need to define at least the '_XOPEN_SOURCE' level of features,
 dnl or wchar.h doesn't declare a prototype for wcwidth(). But if we only define
 dnl that level then db.h won't compile. So we define _GNU_SOURCE which turns
@@ -9,20 +13,24 @@ dnl in config.h, because it must be set before any system header is included
 dnl and there's no portable way to make sure that files generated by lex
 dnl include config.h before system header files.
 dnl
-dnl Setting CPPFLAGS directly is like DEFS, but doesn't get stomped on by
+dnl Setting AM_CPPFLAGS directly is like DEFS, but doesn't get stomped on by
 dnl configure when using config.h.
-dnl
-dnl This is intended to be extensible, by just adding candidate C preprocessor
-dnl options to be checked in the for loop.  The first candidate is empty, in
-dnl case none are needed.  Also, the test program can be readily augmented.
 
 AC_DEFUN([NMH_ADDL_CPPFLAGS],
     [AC_CACHE_CHECK([platform-specific additional CPPFLAGS],
                     [nmh_cv_addl_cppflags], [
     dnl Turn warnings into errors.
     AC_LANG_WERROR
+
+    nmh_saved_cppflags="$CPPFLAGS"
+    dnl autoconf doesn't look at AM_CFLAGS, so merge it into CFLAGS.
+    nmh_saved_cflags="$CFLAGS"
+    CFLAGS="$AM_CFLAGS $CFLAGS"
+    dnl On successful compilation, break out of loop with the AM_CPPFLAGS.
     for nmh_cv_addl_cppflags in "" "-D_GNU_SOURCE"; do
-        nmh_saved_cppflags="$CPPFLAGS"
+        dnl Reload initial CPPFLAGS so candidates aren't accumulated.
+        CPPFLAGS="$nmh_saved_cppflags"
+        dnl Only add non-empty nmh_cv_addl_cppflags to CPPFLAGS.
         AS_IF([test x"${nmh_cv_addl_cppflags}" != x],
               [CPPFLAGS="${CPPFLAGS:+$CPPFLAGS }$nmh_cv_addl_cppflags"])
         AS_IF([test ${MULTIBYTE_ENABLED} = 1],
@@ -30,15 +38,18 @@ AC_DEFUN([NMH_ADDL_CPPFLAGS],
                   [AC_LANG_PROGRAM([#include <string.h>
                                     #include <wchar.h>],
                                    [return wcwidth(0) + strdup("x") == 0])],
-                  [break;])],
+                  [AM_CPPFLAGS="${nmh_cv_addl_cppflags}"; break;])],
               [AC_COMPILE_IFELSE(
                   [AC_LANG_PROGRAM([#include <string.h>],
                                    [return strdup("x") == 0])],
-                  [break;])])
-        CPPFLAGS="$nmh_saved_cppflags"
+                  [AM_CPPFLAGS="${nmh_cv_addl_cppflags}"; break;])])
     done])
+    CFLAGS="$nmh_saved_cflags"
+    CPPFLAGS="$nmh_saved_cppflags"
 
     dnl autoconf doesn't currently provide a macro to disable AC_LANG_WERROR,
     dnl so do it this way:
-    ac_c_werror_flag=
+    AS_UNSET(ac_c_werror_flag)
+
+    AC_SUBST([AM_CPPFLAGS])
 ])