In some autoconf macros, we tried to optimize invocations to AC_LIBOBJ. The idiom, such as found in strstr.m4, is that the default value of REPLACE_STRSTR is 0, and when REPLACE_STRSTR is 1, we need to organize to compile strstr.c. Some "clever" optimization was to execute the AC_LIBOBJ only the first time. i.e. only when REPLACE_STRSTR was 0. Bug!
In gettext, I use two gnulib-tool invocations under the roof of the same configure.ac. So it has two gnulib-tool generated macros AC_DEFUN([gl_INIT], [ ... prepare for AC_LIBOBJ to append to gl_LIBOBJS ... gl_FUNC_STRSTR ... ]) AC_DEFUN([gtpo_INIT], [ ... prepare for AC_LIBOBJ to append to gtpo_LIBOBJS ... gl_FUNC_STRSTR ... ]) The optimization causes strstr.o to be added to gl_LIBOBJS but not to gtpo_LIBOBJS, leading to a link error (because other modules in gtpo really need to call strstr, and the string.h replacement has a #define strstr rpl_strstr). I'm applying this fix. 2009-08-10 Bruno Haible <br...@clisp.org> Don't optimize AC_LIBOBJs, as they may appear in different contexts. * m4/close.m4 (gl_REPLACE_CLOSE): Execute AC_LIBOBJ unconditionally, not only the first time. * m4/fclose.m4 (gl_REPLACE_FCLOSE): Likewise. * m4/open.m4 (gl_REPLACE_OPEN): Likewise. * m4/strstr.m4 (gl_FUNC_STRSTR): Execute AC_LIBOBJ when REPLACE_STRSTR is 1, not only the the first time. --- m4/close.m4.orig 2009-08-10 23:49:22.000000000 +0200 +++ m4/close.m4 2009-08-10 23:40:05.000000000 +0200 @@ -1,4 +1,4 @@ -# close.m4 serial 4 +# close.m4 serial 5 dnl Copyright (C) 2008-2009 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -20,9 +20,7 @@ AC_DEFUN([gl_REPLACE_CLOSE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) - if test $REPLACE_CLOSE != 1; then - AC_LIBOBJ([close]) - fi REPLACE_CLOSE=1 + AC_LIBOBJ([close]) gl_REPLACE_FCLOSE ]) --- m4/fclose.m4.orig 2009-08-10 23:49:22.000000000 +0200 +++ m4/fclose.m4 2009-08-10 23:40:25.000000000 +0200 @@ -1,5 +1,5 @@ -# fclose.m4 serial 1 -dnl Copyright (C) 2008 Free Software Foundation, Inc. +# fclose.m4 serial 2 +dnl Copyright (C) 2008-2009 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -11,8 +11,6 @@ AC_DEFUN([gl_REPLACE_FCLOSE], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - if test $REPLACE_FCLOSE != 1; then - AC_LIBOBJ([fclose]) - fi REPLACE_FCLOSE=1 + AC_LIBOBJ([fclose]) ]) --- m4/open.m4.orig 2009-08-10 23:49:22.000000000 +0200 +++ m4/open.m4 2009-08-10 23:39:35.000000000 +0200 @@ -1,4 +1,4 @@ -# open.m4 serial 6 +# open.m4 serial 7 dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -51,11 +51,9 @@ AC_DEFUN([gl_REPLACE_OPEN], [ AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) - if test $REPLACE_OPEN != 1; then - AC_LIBOBJ([open]) - gl_PREREQ_OPEN - fi REPLACE_OPEN=1 + AC_LIBOBJ([open]) + gl_PREREQ_OPEN ]) # Prerequisites of lib/open.c. --- m4/strstr.m4.orig 2009-08-10 23:49:22.000000000 +0200 +++ m4/strstr.m4 2009-08-10 23:42:51.000000000 +0200 @@ -1,4 +1,4 @@ -# strstr.m4 serial 6 +# strstr.m4 serial 7 dnl Copyright (C) 2008, 2009 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -71,7 +71,9 @@ ]) if test "$gl_cv_func_strstr_linear" != yes; then REPLACE_STRSTR=1 - AC_LIBOBJ([strstr]) fi fi + if test $REPLACE_STRSTR = 1; then + AC_LIBOBJ([strstr]) + fi ]) # gl_FUNC_STRSTR