Update configure.ac (and config.mak.in) to keep up with git development by adding [compile] test whether your library has an old iconv(), where the second (input buffer pointer) parameter is declared with type (const char **) (OLD_ICONV). Test-proposed-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> Signed-off-by: Jakub Narebski <jnareb@xxxxxxxxx> --- CC-ed to all parties (in this and previous thread). I should probably used AC_LANG_PROGRAM like for NO_C99_FORMAT instead of generating whole programlet^W test program by hand (I hope that for example I haven't missed some header file which needs to be included); I have followed example for NO_ICONV / NEEDS_LIBICONV and NO_DEFLATE_BOUND test. I'm also not sure if I have put this test in the correct autoconf section, but that is probably matter of taste. On Fri, 7 Dec 2007, Linus Torvalds wrote: > > On Fri, 7 Dec 2007, Jakub Narebski wrote: >> >> The problem is that it should be check that tests for compile time >> _warnings_; my solution was to use '-Werror' flag to make warning into >> error, and AC_COMPILE_IFELSE, but this might be gcc only solution. >> >> Message-ID: <1196895948-25115-1-git-send-email-jnareb@xxxxxxxxx> >> http://permalink.gmane.org/gmane.comp.version-control.git/67209 >> >> So please send it. > > Umm. Why not just make the test be whether the following compiles cleanly? > > #include <iconv.h> > > extern size_t iconv(iconv_t cd, > char **inbuf, size_t *inbytesleft, > char **outbuf, size_t *outbytesleft); > > because if the compiler has seen a "const char **inbuf", then it should > error out with a "conflicting types for ?iconv?" style message.. [...] > Totally untested. I don't do autoconf. Thanks for a suggestion. Implemented in the patch below. It should work correctly, but could those who have old iconv(), or used to have old iconv() please check if works correctly for them? By the way, perhaps the previous idea would work using AC_LANG_WERROR instead of passing adding [temporarily] GCC `-Werror' option to `CFLAGS', or use parts of its implementation. - Macro: AC_LANG_WERROR Normally Autoconf ignores warnings generated by the compiler, linker, and preprocessor. If this macro is used, warnings will be treated as fatal errors instead for the current language. This macro is useful when the results of configuration will be used where warnings are unacceptable; for instance, if parts of a program are built with the GCC `-Werror' option. If the whole program will be built using `-Werror' it is often simpler to put `-Werror' in the compiler flags (`CFLAGS' etc.). On Fri, 7 Dec 2007, Blake Ramsdell wrote: > On Dec 6, 2007 4:41 PM, Blake Ramsdell <blaker@xxxxxxxxx> wrote: >> On Dec 6, 2007 4:30 PM, Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: >>> Umm. Why not just make the test be whether the following compiles cleanly? >>> >>> #include <iconv.h> >>> >>> extern size_t iconv(iconv_t cd, >>> char **inbuf, size_t *inbytesleft, >>> char **outbuf, size_t *outbytesleft); >>> >>> because if the compiler has seen a "const char **inbuf", then it should >>> error out with a "conflicting types for 'iconv'" style message.. >> >> Yeah, this is what I did: > > My apologies. Your suggestion is completely different, and should work > without -Werror. Let me try that. Is something like the patch below what you wanted to try? config.mak.in | 1 + configure.ac | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 0 deletions(-) diff --git a/config.mak.in b/config.mak.in index 11d256e..7d5df9b 100644 --- a/config.mak.in +++ b/config.mak.in @@ -41,4 +41,5 @@ NO_STRTOUMAX=@NO_STRTOUMAX@ NO_SETENV=@NO_SETENV@ NO_MKDTEMP=@NO_MKDTEMP@ NO_ICONV=@NO_ICONV@ +OLD_ICONV=@OLD_ICONV@ NO_DEFLATE_BOUND=@NO_DEFLATE_BOUND@ diff --git a/configure.ac b/configure.ac index 5f8a15b..86be19a 100644 --- a/configure.ac +++ b/configure.ac @@ -212,6 +212,28 @@ test -n "$NEEDS_SOCKET" && LIBS="$LIBS -lsocket" ## Checks for header files. +AC_MSG_NOTICE([CHECKS for header files]) +# +# Define OLD_ICONV if your library has an old iconv(), where the second +# (input buffer pointer) parameter is declared with type (const char **). +AC_DEFUN([OLDICONVTEST_SRC], [[ +#include <iconv.h> + +extern size_t iconv(iconv_t cd, + char **inbuf, size_t *inbytesleft, + char **outbuf, size_t *outbytesleft); + +int main(void) +{ + return 0; +} +]]) +AC_MSG_CHECKING([for old iconv()]) +AC_COMPILE_IFELSE(OLDICONVTEST_SRC, + [AC_MSG_RESULT([no])], + [AC_MSG_RESULT([yes]) + OLD_ICONV=UnfortunatelyYes]) +AC_SUBST(OLD_ICONV) ## Checks for typedefs, structures, and compiler characteristics. -- 1.5.3.7 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html