[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
subtle bug in close, fclose, open, strstr modules
From: |
Bruno Haible |
Subject: |
subtle bug in close, fclose, open, strstr modules |
Date: |
Tue, 11 Aug 2009 00:02:16 +0200 |
User-agent: |
KMail/1.9.9 |
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 <address@hidden>
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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- subtle bug in close, fclose, open, strstr modules,
Bruno Haible <=