[PATCH] Libtool/Autoconf incompatibility issue

Ralf Wildenhues Ralf.Wildenhues@gmx.de
Sun Mar 2 22:32:00 GMT 2008


This is a mere defensive patch.  If (parts of) GCC or binutils happen to
use the next Autoconf, 2.62, by error or intention, without previously
updating Libtool, there is one incompatibility due to how Libtool uses
an Autoconf macro with wrong M4 quoting.  The patch below (which has of
course long made it into upstream CVS Libtool) fixes this issue, and
yes, it is backward compatible to Autoconf 2.59.

JFTR, the impact of the bug is that the variable initialization parts of
the libtool script are missing, which results in "interesting" errors
such as
  ./libtool: line 154: CDPATH: command not found
  libtool: Version mismatch error.  This is libtool 2.1a, but the
  libtool: definition of this LT_INIT comes from an older release.
  libtool: You should recreate aclocal.m4 with macros from libtool 2.1a
  libtool: and run autoconf again.

OK for trunk?  I have confirmed that regenerating all configure scripts
in GCC leads to no related changes, which is as it should be.

Cheers,
Ralf

2008-03-02  Ralf Wildenhues <Ralf.Wildenhues@gmx.de>

	Backport from upstream Libtool:

	2007-10-12  Eric Blake  <ebb9@byu.net>

	Deal with Autoconf 2.62's semantic change in m4_append.
	* ltsugar.m4 (lt_append): Replace broken versions of
	m4_append.
	(lt_if_append_uniq): Don't require separator to be overquoted, and
	avoid broken m4_append.
	(lt_dict_add): Fix typo.
	* libtool.m4 (_LT_DECL): Don't overquote separator.

diff --git a/libtool.m4 b/libtool.m4
index e86cd02..26a039a 100644
--- a/libtool.m4
+++ b/libtool.m4
@@ -319,7 +319,7 @@ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
 # VALUE may be 0, 1 or 2 for a computed quote escaped value based on
 # VARNAME.  Any other value will be used directly.
 m4_define([_LT_DECL],
-[lt_if_append_uniq([lt_decl_varnames], [$2], [[, ]],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
     [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
 	[m4_ifval([$1], [$1], [$2])])
     lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
diff --git a/ltsugar.m4 b/ltsugar.m4
index fc51dc7..dd4f871 100644
--- a/ltsugar.m4
+++ b/ltsugar.m4
@@ -1,13 +1,13 @@
 # ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
 #
-# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
 # Written by Gary V. Vaughan.
 #
 # This file is free software; the Free Software Foundation gives
 # unlimited permission to copy and/or distribute it, with or without
 # modifications, as long as this notice is preserved.
 
-# serial 3 ltsugar.m4
+# serial 4 ltsugar.m4
 
 # This is to help aclocal find these macros, as it can't see m4_define.
 AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
@@ -46,6 +46,20 @@ m4_define([lt_cdr],
 m4_define([lt_unquote], $1)
 
 
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded.  No SEPARATOR is
+# output if MACRO-NAME was previously undefined (different than defined
+# and empty).
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4 mistakenly expanded SEPARATOR.
+m4_define([lt_append],
+[m4_define([$1],
+	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
 # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
 # ----------------------------------------------------------
 # Produce a SEP delimited list of all paired combinations of elements of
@@ -67,10 +81,10 @@ m4_define([lt_combine],
 # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
 m4_define([lt_if_append_uniq],
 [m4_ifdef([$1],
-	[m4_bmatch($3[]m4_defn([$1])$3, $3[]m4_re_escape([$2])$3,
-		[$5],
-	    [m4_append([$1], [$2], [$3])$4])],
-    [m4_append([$1], [$2], [$3])$4])])
+	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+		 [lt_append([$1], [$2], [$3])$4],
+		 [$5])],
+    [lt_append([$1], [$2], [$3])$4])])
 
 
 # lt_dict_add(DICT, KEY, VALUE)



More information about the Gcc-patches mailing list