>From 40d297de7502f93a546126ff69d3f687f3d3ca1a Mon Sep 17 00:00:00 2001 From: Pavel Raiskup Date: Fri, 18 Sep 2015 23:17:07 +0200 Subject: [PATCH] libtoolize: fix infinite recursion in m4 Some projects use this construct in configure.ac: m4_define([version], m4_include([version]) pkg_version=version When the m4_include builtin is undefined (as is done in libtoolize and extract-trace scripts), the call to 'version' macro goes to infinite recursion (until ENOMEM). Due to theirs usual semantics/evaluation, other undefined macros/builtins should not cause troubles here. References: http://lists.gnu.org/archive/html/libtool/2015-09/msg00000.html * gl/build-aux/extract-trace (_G_mini): Redefine m4_include to empty string rather than undefine it completely. * NEWS: Document. * NO-THANKS: Mention Hiroyuki Sato. --- NEWS | 4 ++++ NO-THANKS | 1 + gl/build-aux/extract-trace | 5 ++++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index c5c9023..e68c38c 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,10 @@ NEWS - list of user-visible changes between releases of GNU Libtool * Noteworthy changes in release ?.? (????-??-??) [?] +** Bug fixes: + + - Fix significant slowdown of libtoolize for certain projects (regression + introduced in 2.4.3 release). * Noteworthy changes in release 2.4.6 (2015-02-15) [stable] diff --git a/NO-THANKS b/NO-THANKS index 10de16b..51ec8eb 100644 --- a/NO-THANKS +++ b/NO-THANKS @@ -82,6 +82,7 @@ Donn Washburn address@hidden Erik van Pienbroek address@hidden Ethan Mallove address@hidden Fred Cox address@hidden +Hiroyuki Sato address@hidden Jakub Bogusz address@hidden James Su address@hidden Jay Krell address@hidden diff --git a/gl/build-aux/extract-trace b/gl/build-aux/extract-trace index 315a32a..ebbf42a 100755 --- a/gl/build-aux/extract-trace +++ b/gl/build-aux/extract-trace @@ -336,10 +336,13 @@ func_extract_trace () # Disable these macros. m4_undefine([m4_dnl]) - m4_undefine([m4_include]) m4_undefine([m4_m4exit]) m4_undefine([m4_m4wrap]) m4_undefine([m4_maketemp]) + # Rather do not use undefine here because people tend to define + # macros of the same name as file included in their bodies - which + # results in infinite recursion. + m4_define([m4_include], []) # Copy and rename macros not handled by "m4 --prefix". m4_define([dnl], [m4_builtin([dnl])]) -- 2.1.0