From unknown Tue Jun 17 20:21:03 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#10697 <10697@debbugs.gnu.org> To: bug#10697 <10697@debbugs.gnu.org> Subject: Status: subdir-objects "make clean" invokes one rm for each .o file Reply-To: bug#10697 <10697@debbugs.gnu.org> Date: Wed, 18 Jun 2025 03:21:03 +0000 retitle 10697 subdir-objects "make clean" invokes one rm for each .o file reassign 10697 automake submitter 10697 Jim Meyering severity 10697 minor tag 10697 patch thanks From debbugs-submit-bounces@debbugs.gnu.org Thu Feb 02 11:07:09 2012 Received: (at submit) by debbugs.gnu.org; 2 Feb 2012 16:07:09 +0000 Received: from localhost ([127.0.0.1]:51028 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1RszBk-0008Ox-Ss for submit@debbugs.gnu.org; Thu, 02 Feb 2012 11:07:09 -0500 Received: from eggs.gnu.org ([140.186.70.92]:32900) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1RszBh-0008ON-Mw for submit@debbugs.gnu.org; Thu, 02 Feb 2012 11:07:07 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RszB4-0002sE-OO for submit@debbugs.gnu.org; Thu, 02 Feb 2012 11:06:32 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_RP_MATCHES_RCVD autolearn=unavailable version=3.3.2 Received: from lists.gnu.org ([140.186.70.17]:51275) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RszB4-0002sA-Mr for submit@debbugs.gnu.org; Thu, 02 Feb 2012 11:06:26 -0500 Received: from eggs.gnu.org ([140.186.70.92]:33686) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RszB0-0001Wq-Ly for bug-automake@gnu.org; Thu, 02 Feb 2012 11:06:26 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RszAw-0002qp-9G for bug-automake@gnu.org; Thu, 02 Feb 2012 11:06:22 -0500 Received: from mx.meyering.net ([88.168.87.75]:41704) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RszAw-0002qj-0K for bug-automake@gnu.org; Thu, 02 Feb 2012 11:06:18 -0500 Received: from rho.meyering.net (localhost.localdomain [127.0.0.1]) by rho.meyering.net (Acme Bit-Twister) with ESMTP id 65DDD6015B for ; Thu, 2 Feb 2012 17:06:17 +0100 (CET) From: Jim Meyering To: bug-automake@gnu.org Subject: subdir-objects "make clean" invokes one rm for each .o file Date: Thu, 02 Feb 2012 17:06:17 +0100 Message-ID: <871uqd6wzq.fsf@rho.meyering.net> Lines: 43 MIME-Version: 1.0 Content-Type: text/plain X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 140.186.70.17 X-Spam-Score: -4.2 (----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -4.2 (----) In cppi (http://git.savannah.gnu.org/cgit/cppi.git), I am now using non- recursive make via subdir-objects, modeled after the way bison does it. I see that "make clean" is inefficient: one "rm -f" per .o file: rm -fr *.o rm -f *.o rm -f lib/calloc.o rm -f lib/close-stream.o rm -f lib/closeout.o rm -f lib/error.o rm -f lib/exitfail.o rm -f lib/fpending.o rm -f lib/getopt.o rm -f lib/getopt1.o rm -f lib/localcharset.o rm -f lib/malloc.o rm -f lib/mbrtowc.o rm -f lib/mbsinit.o rm -f lib/msvc-inval.o rm -f lib/msvc-nothrow.o rm -f lib/obstack.o rm -f lib/progname.o rm -f lib/quote.o rm -f lib/quotearg.o rm -f lib/realloc.o rm -f lib/stpcpy.o rm -f lib/strerror-override.o rm -f lib/strerror.o rm -f lib/version-etc-fsf.o rm -f lib/version-etc.o rm -f lib/xalloc-die.o rm -f lib/xmalloc.o rm -f lib/xstrtol-error.o rm -f lib/xstrtol.o rm -f lib/xstrtoul.o rm -f src/cppi.o cppi has so few .o files that it's not a problem, but with hundreds (coreutils has over 600), it could be noticeable. Contrast that with its removal of *.o above and of all tests/*.log files using just one rm invocation each, I think it must simply be an oversight. Seems like it'd be worth fixing some day. From debbugs-submit-bounces@debbugs.gnu.org Sun Jun 10 08:20:13 2012 Received: (at 10697) by debbugs.gnu.org; 10 Jun 2012 12:20:13 +0000 Received: from localhost ([127.0.0.1]:36509 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Sdh7r-0004Wp-Hk for submit@debbugs.gnu.org; Sun, 10 Jun 2012 08:20:13 -0400 Received: from mail-bk0-f44.google.com ([209.85.214.44]:40439) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Sdh7m-0004Wb-8B; Sun, 10 Jun 2012 08:20:09 -0400 Received: by bkty8 with SMTP id y8so2877300bkt.3 for ; Sun, 10 Jun 2012 05:17:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:mime-version:to:cc:subject:references :in-reply-to:content-type; bh=FT1IG5dv1NySI3PjLw5vBEjft27o3PcnjGKOkNcBIi0=; b=SQrfxNl+iOrQLe2gr4CQg3SnoXNDoVU71qs1rAvSmgDY8F527tKz5sjFe8LFONlQOL JNyns/RjUG4LF2GO7A6rELrVjhSZpdt4BeER99E4Z+15ZhcrAnY3NVULYhKpzpzqeqIP /c/NSVmAuHYdd1pJhZiObVwwsEmG8QKu2ifG+WKNTBQ9UocgOnub9kAJM4a65OabRZGK FbaMP5Sr78NwqG1iTa6j3yjrQNW9sisMxiktEy+An0xuOxKVek90cR3xWlNjGnun8Phj Pl1uCVhZeLhJlCr+bZpC9kdtXDAKyA3Rgd/ngyBkgzCQQTeWRwiiS1ADgd7WS0cyEMy1 uLZA== Received: by 10.204.132.87 with SMTP id a23mr8502080bkt.134.1339330654291; Sun, 10 Jun 2012 05:17:34 -0700 (PDT) Received: from [82.58.50.243] (host243-50-dynamic.58-82-r.retail.telecomitalia.it. [82.58.50.243]) by mx.google.com with ESMTPS id o4sm12739627bkv.15.2012.06.10.05.17.31 (version=SSLv3 cipher=OTHER); Sun, 10 Jun 2012 05:17:32 -0700 (PDT) Message-ID: <4FD49058.8020205@gmail.com> Date: Sun, 10 Jun 2012 14:17:28 +0200 From: Stefano Lattarini MIME-Version: 1.0 To: Jim Meyering Subject: Re: bug#10697: subdir-objects "make clean" invokes one rm for each .o file References: <871uqd6wzq.fsf@rho.meyering.net> In-Reply-To: <871uqd6wzq.fsf@rho.meyering.net> Content-Type: multipart/mixed; boundary="------------040205070805040204090707" X-Spam-Score: -2.6 (--) X-Debbugs-Envelope-To: 10697 Cc: 10697@debbugs.gnu.org, "automake-patches@gnu.org" X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -2.6 (--) This is a multi-part message in MIME format. --------------040205070805040204090707 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit severity 10697 minor tags 10697 + patch thanks Reference: Hi Jim, sorry for the awful delay. On 02/02/2012 05:06 PM, Jim Meyering wrote: > In cppi (http://git.savannah.gnu.org/cgit/cppi.git), I am now using non- > recursive make via subdir-objects, modeled after the way bison does it. > I see that "make clean" is inefficient: one "rm -f" per .o file: > > rm -fr *.o > rm -f *.o > rm -f lib/calloc.o > rm -f lib/close-stream.o > ... > rm -f lib/xstrtol.o > rm -f lib/xstrtoul.o > rm -f src/cppi.o > > cppi has so few .o files that it's not a problem, but with hundreds > (coreutils has over 600), it could be noticeable. > > Contrast that with its removal of *.o above and of all tests/*.log files > using just one rm invocation each, I think it must simply be an oversight. > Seems like it'd be worth fixing some day. > I agree, and today could be the day :-) See the attached patch; I will push it by tomorrow if there is no objection (and if anyone would like to give it a try on a real project, that would be much appreciated). Regards, Stefano --------------040205070805040204090707 Content-Type: text/x-diff; name="0001-subdir-objects-improve-make-mostlyclean-efficiency-a.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="0001-subdir-objects-improve-make-mostlyclean-efficiency-a.pa"; filename*1="tch" >From 06dfdbe38e78c5eedb03f688f0264ec0097a4e21 Mon Sep 17 00:00:00 2001 Message-Id: <06dfdbe38e78c5eedb03f688f0264ec0097a4e21.1339330238.git.stefano.lattarini@gmail.com> From: Stefano Lattarini Date: Sun, 10 Jun 2012 13:38:58 +0200 Subject: [PATCH] subdir-objects: improve "make mostlyclean" efficiency and flexibility Fixes automake bug#10697. Before this change, the generated Makefile issued one 'rm' invocation for each subdir object file. Not only was this very inefficient when there were several such files, but it also caused stale object files to be left behind when a source file was renamed or removed. * automake.in (handle_single_transform): When a subdir object is seen, update '%compile_clean_files' to clean all the compiled objects in its same subdirectory, and all the libtool compiled objects ('.lo') there as well is that subdir object is a libtool one. * t/subobj-clean-pr10697.sh: New test. * t/subobj-clean-lt-pr10697.sh: Likewise. * t/list-of-tests.mk: Add them. * NEWS: Update. Signed-off-by: Stefano Lattarini --- NEWS | 8 ++ automake.in | 28 ++++--- t/list-of-tests.mk | 2 + t/subobj-clean-lt-pr10697.sh | 169 ++++++++++++++++++++++++++++++++++++++++++ t/subobj-clean-pr10697.sh | 164 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 359 insertions(+), 12 deletions(-) create mode 100755 t/subobj-clean-lt-pr10697.sh create mode 100755 t/subobj-clean-pr10697.sh diff --git a/NEWS b/NEWS index cf45836..588e8ed 100644 --- a/NEWS +++ b/NEWS @@ -60,6 +60,14 @@ New in 1.12.2: input file. Such a warning will also be present in the next Autoconf version (2.70). +* Cleaning rules: + + - Cleaning rules for compiled objects (both "plain" and libtool) work + better when subdir objects are involved, not triggering a distinct + 'rm' invocation for each such object. They do so by removing *any* + compiled object file that is in the same directory of a subdir + object. See automake bug#10697. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ New in 1.12.1: diff --git a/automake.in b/automake.in index 5cf5a2c..6f8ac0c 100644 --- a/automake.in +++ b/automake.in @@ -1963,18 +1963,22 @@ sub handle_single_transform ($$$$$%) err_am "'$full' should not contain a '..' component"; } - # Make sure object is removed by 'make mostlyclean'. - $compile_clean_files{$object} = MOSTLY_CLEAN; - # If we have a libtool object then we also must remove - # the ordinary .o. - if ($object =~ /\.lo$/) - { - (my $xobj = $object) =~ s,lo$,\$(OBJEXT),; - $compile_clean_files{$xobj} = MOSTLY_CLEAN; - - # Remove any libtool object in this directory. - $libtool_clean_directories{$directory} = 1; - } + # Make sure *all* objects files in the subdirectory are + # removed by "make mostlyclean". Not only this is more + # efficient than listing the object files to be removed + # individually (which would cause an 'rm' invocation for + # each of them -- very inefficient, see bug#10697), it + # would also leave stale object files in the subdirectory + # whenever a source file there is removed or renamed. + $compile_clean_files{"$directory/*.\$(OBJEXT)"} = MOSTLY_CLEAN; + if ($object =~ /\.lo$/) + { + # If we have a libtool object, then we also must remove + # any '.lo' objects in its same subdirectory. + $compile_clean_files{"$directory/*.lo"} = MOSTLY_CLEAN; + # Remember to cleanup .libs/ in this directory. + $libtool_clean_directories{$directory} = 1; + } push (@dep_list, require_build_directory ($directory)); diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk index 446157c..76e94b3 100644 --- a/t/list-of-tests.mk +++ b/t/list-of-tests.mk @@ -1043,6 +1043,8 @@ t/subobj11a.sh \ t/subobj11b.sh \ t/subobj11c.sh \ t/subobjname.sh \ +t/subobj-clean-pr10697.sh \ +t/subobj-clean-lt-pr10697.sh \ t/subpkg.sh \ t/subpkg2.sh \ t/subpkg3.sh \ diff --git a/t/subobj-clean-lt-pr10697.sh b/t/subobj-clean-lt-pr10697.sh new file mode 100755 index 0000000..95a732c --- /dev/null +++ b/t/subobj-clean-lt-pr10697.sh @@ -0,0 +1,169 @@ +#! /bin/sh +# Copyright (C) 1998-2012 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Removing subdir objects does not cause too much 'rm' invocations. +# Also, if we rename a source file in a subdirectory, the stale +# compiled object corresponding to the old name still gets removed +# by "make mostlyclean". See automake bug#10697. +# This is the libtool case. Keep this test in sync with sister test +# 'subobj-clean-pr10697.sh', which deals with the non-libtool case. + +required='cc libtoolize' +. ./defs || Exit 1 + +cat >> configure.ac << 'END' +AM_PROG_AR +AC_PROG_LIBTOOL +AC_PROG_CC +AM_PROG_CC_C_O +AC_OUTPUT +END + +oPATH=$PATH +ocwd=`pwd` || fatal_ "getting current working directory" + +# An rm(1) wrapper that fails when invoked too many times. +mkdir rm-wrap +max_rm_invocations=6 +count_file=$ocwd/rm-wrap/count +cat > rm-wrap/rm <&2 + exit 1 +fi +echo "\$count" > '$count_file' +PATH='$oPATH'; export PATH +exec rm "\$@" +END +chmod a+x rm-wrap/rm +echo "0" > rm-wrap/count + +cat > Makefile.am <<'END' +.PHONY: sanity-check-rm +sanity-check-rm: + rm -f 1 + rm -f 2 + rm -f 3 + rm -f 4 + rm -f 5 + rm -f 6 + rm -f x && exit 1; : + echo "0" > rm-wrap/count + +AUTOMAKE_OPTIONS = subdir-objects +lib_LTLIBRARIES = libfoo.la +libfoo_la_SOURCES = \ + sub1/a.c \ + sub1/b.c \ + sub1/c.c \ + sub1/d.c \ + sub1/e.c \ + sub1/f.c \ + sub2/a.c \ + sub2/b.c \ + sub2/c.c \ + sub2/d.c \ + sub2/e.c \ + sub2/f.c \ + main.c +END + +mkdir sub1 sub2 +echo 'int libmain (void)' > main.c +echo '{' >> main.c +for i in 1 2; do + for j in a b c d e f; do + echo "void $j$i (void) { }" > sub$i/$j.c + echo " $j$i ();" >> main.c + done +done +echo ' return 0;' >> main.c +echo '}' >> main.c +cat main.c # For debugging. + +libtoolize +$ACLOCAL +$AUTOCONF +$AUTOMAKE -a + +./configure + +# The use of this variable is only meant to keep us better in sync +# with the sister test 'subobj-clean-pr10697.sh'. +OBJEXT=lo + +$MAKE + +# This must go after configure, since that will invoke rm many times. +PATH=$ocwd/rm-wrap:$PATH; export PATH +$MAKE sanity-check-rm || fatal_ "rm wrapper doesn't work as expected" + +$MAKE mostlyclean +ls -l . sub1 sub2 +for i in 1 2; do + for j in a b c d e f; do + test ! -f sub$i/$j.o + test ! -f sub$i/$j.obj + test ! -f sub$i/$j.lo + test -f sub$i/$j.c || Exit 99 # Sanity check + done +done + +PATH=$oPATH; export PATH +rm -rf rm-wrap + +$MAKE clean +$MAKE +test -f sub1/a.$OBJEXT +test -f sub2/d.$OBJEXT + +mv -f sub2/d.c sub2/x.c +rm -f sub1/a.c + +sed -e '/ a1 ()/d' main.c > t +mv -f t main.c + +sed -e '/sub1\/a\.c/d' -e 's|sub2/d\.c|sub2/x.c|' Makefile.am > t +mv -f t Makefile.am + +using_gmake || $MAKE Makefile +$MAKE +test -f sub2/x.$OBJEXT + +# The stale objects are still there after a mere "make all" ... +test -f sub1/a.$OBJEXT +test -f sub2/a.$OBJEXT + +# ... but they get removed by "make mostlyclean" ... +$MAKE mostlyclean +test ! -f sub1/a.$OBJEXT +test ! -f sub2/d.$OBJEXT + +# ... and do not get rebuilt ... +$MAKE clean +$MAKE all +test ! -f sub1/a.$OBJEXT +test ! -f sub2/d.$OBJEXT + +# ... while the non-stale files do. +test -f sub1/b.$OBJEXT +test -f sub2/x.$OBJEXT + +: diff --git a/t/subobj-clean-pr10697.sh b/t/subobj-clean-pr10697.sh new file mode 100755 index 0000000..3b51cf1 --- /dev/null +++ b/t/subobj-clean-pr10697.sh @@ -0,0 +1,164 @@ +#! /bin/sh +# Copyright (C) 1998-2012 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Removing subdir objects does not cause too much 'rm' invocations. +# Also, if we rename a source file in a subdirectory, the stale +# compiled object corresponding to the old name still gets removed by +# "make mostlyclean". See automake bug#10697. +# This is the non-libtool case. Keep this test in sync with sister test +# 'subobj-clean-lt-pr10697.sh', which deals with the libtool case. + +required=cc +. ./defs || Exit 1 + +cat >> configure.ac << 'END' +AC_PROG_CC +AM_PROG_CC_C_O +AC_CONFIG_FILES([get-objext.sh:get-objext.in]) +AC_OUTPUT +END + +echo "OBJEXT='@OBJEXT@'" > get-objext.in + +oPATH=$PATH +ocwd=`pwd` || fatal_ "getting current working directory" + +# An rm(1) wrapper that fails when invoked too many times. +mkdir rm-wrap +max_rm_invocations=3 +count_file=$ocwd/rm-wrap/count +cat > rm-wrap/rm <&2 + exit 1 +fi +echo "\$count" > '$count_file' +PATH='$oPATH'; export PATH +exec rm "\$@" +END +chmod a+x rm-wrap/rm +echo "0" > rm-wrap/count + +cat > Makefile.am <<'END' +.PHONY: sanity-check-rm +sanity-check-rm: + rm -f 1 + rm -f 2 + rm -f 3 + rm -f x && exit 1; : + echo "0" > rm-wrap/count + +AUTOMAKE_OPTIONS = subdir-objects +bin_PROGRAMS = foo +foo_SOURCES = \ + sub1/a.c \ + sub1/b.c \ + sub1/c.c \ + sub1/d.c \ + sub1/e.c \ + sub1/f.c \ + sub2/a.c \ + sub2/b.c \ + sub2/c.c \ + sub2/d.c \ + sub2/e.c \ + sub2/f.c \ + main.c +END + +mkdir sub1 sub2 +echo 'int main (void)' > main.c +echo '{' >> main.c +for i in 1 2; do + for j in a b c d e f; do + echo "void $j$i (void) { }" > sub$i/$j.c + echo " $j$i ();" >> main.c + done +done +echo ' return 0;' >> main.c +echo '}' >> main.c +cat main.c # For debugging. + +$ACLOCAL +$AUTOCONF +$AUTOMAKE -a + +./configure + +test -f get-objext.sh +. ./get-objext.sh + +$MAKE + +# This must go after configure, since that will invoke rm many times. +PATH=$ocwd/rm-wrap:$PATH; export PATH +$MAKE sanity-check-rm || fatal_ "rm wrapper doesn't work as expected" + +$MAKE mostlyclean +ls -l . sub1 sub2 +for i in 1 2; do + for j in a b c d e f; do + test ! -f sub$i/$j.o + test ! -f sub$i/$j.obj + test -f sub$i/$j.c || Exit 99 # Sanity check + done +done + +PATH=$oPATH; export PATH +rm -rf rm-wrap + +$MAKE clean +$MAKE +test -f sub1/a.$OBJEXT +test -f sub2/d.$OBJEXT + +mv -f sub2/d.c sub2/x.c +rm -f sub1/a.c + +sed -e '/ a1 ()/d' main.c > t +mv -f t main.c + +sed -e '/sub1\/a\.c/d' -e 's|sub2/d\.c|sub2/x.c|' Makefile.am > t +mv -f t Makefile.am + +using_gmake || $MAKE Makefile +$MAKE +test -f sub2/x.$OBJEXT + +# The stale objects are still there after a mere "make all" ... +test -f sub1/a.$OBJEXT +test -f sub2/a.$OBJEXT + +# ... but they get removed by "make mostlyclean" ... +$MAKE mostlyclean +test ! -f sub1/a.$OBJEXT +test ! -f sub2/d.$OBJEXT + +# ... and do not get rebuilt ... +$MAKE clean +$MAKE all +test ! -f sub1/a.$OBJEXT +test ! -f sub2/d.$OBJEXT + +# ... while the non-stale files do. +test -f sub1/b.$OBJEXT +test -f sub2/x.$OBJEXT + +: -- 1.7.9.5 --------------040205070805040204090707-- From debbugs-submit-bounces@debbugs.gnu.org Mon Jun 11 12:51:41 2012 Received: (at 10697-done) by debbugs.gnu.org; 11 Jun 2012 16:51:41 +0000 Received: from localhost ([127.0.0.1]:38092 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Se7q9-0005Hr-9z for submit@debbugs.gnu.org; Mon, 11 Jun 2012 12:51:41 -0400 Received: from mail-bk0-f44.google.com ([209.85.214.44]:63920) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Se7q6-0005Hj-V1 for 10697-done@debbugs.gnu.org; Mon, 11 Jun 2012 12:51:39 -0400 Received: by bkty8 with SMTP id y8so3727793bkt.3 for <10697-done@debbugs.gnu.org>; Mon, 11 Jun 2012 09:49:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:mime-version:to:cc:subject:references :in-reply-to:content-type:content-transfer-encoding; bh=lM9ZfTPZRHvgDgVqRw5BDN5hihw5n194CEH3MV7Snks=; b=QyLTUh73HqBSokWQGFuxgYG8zp4aXaoa0HrncEgoODRDjW7Qer6PbEzv9J1KOpytY6 8aKM7MW9L5ImSodp2nzJCd2JcV2NvZwk63/BmmmR4v9NOWDRUj1I2C8bpGSZV8z0Zcos E+V5tTMVHGZcgagrbXro4cQQ+Vwk4Dpxyw3XV3b4iV7GBCIUZyxQD4PKjQHorJd+cO8z 4viBxfreStamjrSbHiBkjAkUB1xEZxQByahhhfUY340bTPis4rUQJqMdkomsN4GzyjB4 NPWTG2tPWl/NbdLP7jn9mpsVs90zEZsPss/bCUv03lvP1WuvnAg7MnjA2Nuuoek+Uq5m SKog== Received: by 10.205.133.13 with SMTP id hw13mr10500438bkc.30.1339433340499; Mon, 11 Jun 2012 09:49:00 -0700 (PDT) Received: from [87.0.95.96] (host96-95-dynamic.0-87-r.retail.telecomitalia.it. [87.0.95.96]) by mx.google.com with ESMTPS id ie3sm17221482bkc.1.2012.06.11.09.48.58 (version=SSLv3 cipher=OTHER); Mon, 11 Jun 2012 09:48:59 -0700 (PDT) Message-ID: <4FD62177.9030807@gmail.com> Date: Mon, 11 Jun 2012 18:48:55 +0200 From: Stefano Lattarini MIME-Version: 1.0 To: Jim Meyering Subject: Re: bug#10697: subdir-objects "make clean" invokes one rm for each .o file References: <871uqd6wzq.fsf@rho.meyering.net> <4FD49058.8020205@gmail.com> In-Reply-To: <4FD49058.8020205@gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Score: -2.6 (--) X-Debbugs-Envelope-To: 10697-done Cc: 10697-done@debbugs.gnu.org, "automake-patches@gnu.org" X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -2.6 (--) On 06/10/2012 02:17 PM, Stefano Lattarini wrote: > Reference: > > See the attached patch; I will push it by tomorrow if there is no objection > (and if anyone would like to give it a try on a real project, that would be > much appreciated). > Pushed now (to maint). I'm thus closing this bug report. Regards, Stefano From debbugs-submit-bounces@debbugs.gnu.org Mon Jun 25 05:53:13 2012 Received: (at control) by debbugs.gnu.org; 25 Jun 2012 09:53:13 +0000 Received: from localhost ([127.0.0.1]:56152 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Sj5yn-0003Ty-5i for submit@debbugs.gnu.org; Mon, 25 Jun 2012 05:53:13 -0400 Received: from mail-bk0-f44.google.com ([209.85.214.44]:33876) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Sj5yb-0003TH-F2; Mon, 25 Jun 2012 05:53:02 -0400 Received: by bkty8 with SMTP id y8so2891587bkt.3 for ; Mon, 25 Jun 2012 02:49:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:mime-version:to:cc:subject:references :in-reply-to:content-type:content-transfer-encoding; bh=TOiwM3Sv6FCLtuAn5zcebyzxknmmGem3GCttn0WPReQ=; b=MJ8IfBNEH6QM/4UuTnXOgkC4lqN+DmA0UNCI8SwELn25+AZLisDG+YcRZZW/iSo9nG HEMu6he4v5RGzgp8H+8dMZ1VxX6971ey0nu8kwWgkDaxygefNyA1LrPEhNSESkBOCt4W rfCwlkxbpoYqV7qWJ4Wcl2jX2vcRlDnfOOxoVqJHn+/C7X08DmhH/0a+zGOa0agiB4b3 LS044/6+uyVPh3pi1RpSCUGb6jkd4YW2HB3X4Ysu6zibzypt7j5F2RjVBWXxBaoVmKn6 zrI5fnOmg/DFGfNewk2JcsdMHaSc3SvymmmA3oRyXwL7LZ7+3jln2lzVsnN+6Ige9GKC 1jag== Received: by 10.204.154.140 with SMTP id o12mr3811233bkw.139.1340617742238; Mon, 25 Jun 2012 02:49:02 -0700 (PDT) Received: from [87.4.96.175] (host175-96-dynamic.4-87-r.retail.telecomitalia.it. [87.4.96.175]) by mx.google.com with ESMTPS id x23sm45694864bkw.12.2012.06.25.02.49.00 (version=SSLv3 cipher=OTHER); Mon, 25 Jun 2012 02:49:01 -0700 (PDT) Message-ID: <4FE83409.8020300@gmail.com> Date: Mon, 25 Jun 2012 11:48:57 +0200 From: Stefano Lattarini MIME-Version: 1.0 To: Ralf Hemmecke Subject: Re: bug#8031: feature request: slow "make clean" References: <4D583663.6010708@gmail.com> In-Reply-To: <4D583663.6010708@gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Score: -2.6 (--) X-Debbugs-Envelope-To: control Cc: 8031@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -2.6 (--) forcemerge 10697 8031 close 8031 thanks On 02/13/2011 08:52 PM, Ralf Hemmecke wrote: > This is a copy of > http://lists.gnu.org/archive/html/automake/2011-02/msg00017.html > It's not really a bug, but rather a feature request. > > Ralf > > -------- Original Message -------- > Subject: slow "make clean" > Date: Sat, 12 Feb 2011 23:46:55 +0100 > From: Ralf Hemmecke > To: automake@gnu.org > > I've a project that must use subdir-objects, because of filename clashes in subdirectories (non-recursive build). > > AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects]) > > I just have > > lib_LTLIBRARIES = libfoo.la > check_PROGRAMS = ${TESTSUITE_TESTS} ${TESTSUITE_XFAIL_TESTS} > > but quite a lot of files. > > The generated Makefile contains a target "mostlyclean-compile" which has > about 1500 lines that look like > > -rm -f src/foo/foo.$(OBJEXT) > -rm -f src/foo/foo.lo > ... > > Of course it takes ages to say "make clean". About 10 sec. > > Wouldn't it be faster if there were just one call to rm or at least > block the number of arguments to rm so that the maximal argument lenght > is not exceeded? > > Any idea how I can speed that up? > > Ralf > This issue has been solved addressing this later bug report: I'm thus merging the present bug#8031 with that, and closing it. Regards, Stefano From unknown Tue Jun 17 20:21:03 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Mon, 23 Jul 2012 11:24:03 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator