Hi Hiroyuki Sato, On Wednesday 02 of September 2015 16:00:34 Hiroyuki Sato wrote: > This configure.ac is extreme slow on libtool-2.4.6. > But It run smoothly on libtool-2.4.2. > https://github.com/groonga/groonga/blob/master/configure.ac
thanks for reproducer! This _really_ looks like issue mentioned [1], though the thread is believed to be resolved (with existing small slowdown between libtool-2.4.5 and 2.4.2). Let me CC Robert whether this patch does not actually fix the "1 sec" slowdown of libtoolize. > Could you tell me how to fix this problem?. You can workaround/fix this by: -m4_define([nginx_version], m4_include(nginx_version)) -NGINX_VERSION=nginx_version +NGINX_VERSION=m4_include([nginx_version]) See the "recursion" in 'nginx_version' definition. Its not recursion usually (because nginx_version is not defined in the time of m4_define) -- but libtoolize script does 'm4_undefine(m4_include)' before evaluating configure.ac. > Is this libtool's Bug? I would say so, see the attached patch I'll push very soon (if there are no objections). > * OS OSX 10.10.5. and CentOS7 Should be IMO reproducible everywhere. [1] http://lists.gnu.org/archive/html/libtool/2015-02/msg00000.html Thanks, Pavel ------ > Thanks. > > libtool-2.4.6 > > time /tmp/libtool246/bin/libtoolize --verbose --copy --force > libtoolize: found 'configure.ac' > libtoolize: export M4='/usr/bin/gm4' > > It takes around 10 minutes. > > libtool-2.4.2 > > time /tmp/libtool242/bin/libtoolize --verbose --copy --force > libtoolize: rm -f './ltmain.sh' > libtoolize: putting auxiliary files in `.'. > libtoolize: copying file from > `/tmp/libtool242/share/libtool/config/ltmain.sh' > libtoolize: rm -f './libtool.m4' > libtoolize: rm -f './ltoptions.m4' > libtoolize: rm -f './ltsugar.m4' > libtoolize: rm -f './ltversion.m4' > libtoolize: rm -f './lt~obsolete.m4' > libtoolize: Not copying `./argz.m4', libltdl not used. > libtoolize: putting macros in `.'. > libtoolize: copying file from `/tmp/libtool242/share/aclocal/libtool.m4' > libtoolize: Not copying `./ltdl.m4', libltdl not used. > libtoolize: copying file from `/tmp/libtool242/share/aclocal/ltoptions.m4' > libtoolize: copying file from `/tmp/libtool242/share/aclocal/ltsugar.m4' > libtoolize: copying file from `/tmp/libtool242/share/aclocal/ltversion.m4' > libtoolize: copying file from `/tmp/libtool242/share/aclocal/lt~obsolete.m4' > libtoolize: Consider adding `AC_CONFIG_MACRO_DIR([m4])' to configure.ac and > libtoolize: rerunning libtoolize, to keep the correct libtool macros > in-tree. > > real 0m1.003s > user 0m0.364s > sys 0m0.540s > > >
>From 40d297de7502f93a546126ff69d3f687f3d3ca1a Mon Sep 17 00:00:00 2001 From: Pavel Raiskup <prais...@redhat.com> 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 n5...@comcast.net Erik van Pienbroek erik-...@vanpienbroek.nl Ethan Mallove ethan.mall...@sun.com Fred Cox sailorf...@yahoo.com +Hiroyuki Sato hiroys...@gmail.com Jakub Bogusz qbo...@pld-linux.org James Su james...@gmail.com Jay Krell jay.kr...@cornell.edu 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