This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Fwd: fix breakage with m4_append semantics change]


I'm applying this patch to gcc and src.

Paolo
--- Begin Message ---
I noticed the following bug in m4sugar:

m4_debugmode([q])dnl quoted dumpdef is easier to read
m4_define([a],[A])
m4_append_uniq([foo],[-],[a])
m4_append_uniq([foo],[-],[a])
m4_append_uniq([bar],[-],[a])
m4_append_uniq([bar],[~],[a])
m4_append_uniq([bar],[-],[a])
m4_dumpdef([foo],[bar])
bar:    [-A~A-]
foo:    [-]

Oops - we managed to append [-] to bar twice, because m4_append_uniq was using 
[[a]] as its separator, while m4_append was using only [a].

This is now fixed in autoconf, but breaks libtool without this patch.  
Fortunately, only HEAD is affected.  This patch allows libtool to continue 
working with autoconf 2.61, without tripping on the semantic change in 2.62.  
OK to apply?  (Also, if this patch is approved, I will do a separate followon 
patch to kill the trailing whitespace in these two files).

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

	Deal with Autoconf 2.62's semantic change in m4_append.
	* libltdl/m4/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.
	* libltdl/m4/libtool.m4 (_LT_DECL): Don't overquote separator.

Index: libltdl/m4/libtool.m4
===================================================================
RCS file: /sources/libtool/libtool/libltdl/m4/libtool.m4,v
retrieving revision 1.118
diff -u -p -r1.118 libtool.m4
--- libltdl/m4/libtool.m4	11 Oct 2007 17:23:33 -0000	1.118
+++ libltdl/m4/libtool.m4	11 Oct 2007 20:25:56 -0000
@@ -318,7 +318,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])
Index: libltdl/m4/ltsugar.m4
===================================================================
RCS file: /sources/libtool/libtool/libltdl/m4/ltsugar.m4,v
retrieving revision 1.4
diff -u -p -r1.4 ltsugar.m4
--- libltdl/m4/ltsugar.m4	25 Mar 2007 12:12:43 -0000	1.4
+++ libltdl/m4/ltsugar.m4	11 Oct 2007 20:25:56 -0000
@@ -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, 2004
 #
 # 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)






--- End Message ---

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]