GNU bug report logs - #30335
‘make uninstall’ exceeds command-line length limit

Previous Next

Package: automake;

Reported by: Mathieu Lirzin <mthl <at> gnu.org>

Date: Sat, 3 Feb 2018 14:11:02 UTC

Severity: normal

Tags: fixed

Done: Mathieu Lirzin <mthl <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 30335 in the body.
You can then email your comments to 30335 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-automake <at> gnu.org:
bug#30335; Package automake. (Sat, 03 Feb 2018 14:11:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Mathieu Lirzin <mthl <at> gnu.org>:
New bug report received and forwarded. Copy sent to bug-automake <at> gnu.org. (Sat, 03 Feb 2018 14:11:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Mathieu Lirzin <mthl <at> gnu.org>
To: bug-automake <at> gnu.org
Subject: ‘make uninstall’ exceeds command-line
 length limit
Date: Sat, 03 Feb 2018 15:09:59 +0100
[Message part 1 (text/plain, inline)]
"t/instmany-python.sh" test fails for the ‘uninstall’ target.  Here is
the failing part which runs a 6558 characters command:

--8<---------------cut here---------------start------------->8---
( cd '/home/mthl/src/automake/t/instmany-python.dir/inst/lib/python3.5/site-packages' && rm -f __pycache__/npython1.cpython-35.opt-1.pyc __pycache__/npython1.cpython-35.pyc __pycache__/npython2.cpython-35.opt-1.pyc __pycache__/npython2.cpython-35.pyc __pycache__/npython3.cpython-35.opt-1.pyc __pycache__/npython3.cpython-35.pyc __pycache__/npython4.cpython-35.opt-1.pyc __pycache__/npython4.cpython-35.pyc __pycache__/npython5.cpython-35.opt-1.pyc __pycache__/npython5.cpython-35.pyc __pycache__/npython6.cpython-35.opt-1.pyc __pycache__/npython6.cpython-35.pyc __pycache__/npython7.cpython-35.opt-1.pyc __pycache__/npython7.cpython-35.pyc __pycache__/npython8.cpython-35.opt-1.pyc __pycache__/npython8.cpython-35.pyc __pycache__/npython9.cpython-35.opt-1.pyc __pycache__/npython9.cpython-35.pyc __pycache__/npython10.cpython-35.opt-1.pyc __pycache__/npython10.cpython-35.pyc __pycache__/npython11.cpython-35.opt-1.pyc __pycache__/npython11.cpython-35.pyc __pycache__/npython12.cpython-35.opt-1.pyc __pycache__/npython12.cpython-35.pyc __pycache__/npython13.cpython-35.opt-1.pyc __pycache__/npython13.cpython-35.pyc __pycache__/npython14.cpython-35.opt-1.pyc __pycache__/npython14.cpython-35.pyc __pycache__/npython15.cpython-35.opt-1.pyc __pycache__/npython15.cpython-35.pyc __pycache__/npython16.cpython-35.opt-1.pyc __pycache__/npython16.cpython-35.pyc __pycache__/npython17.cpython-35.opt-1.pyc __pycache__/npython17.cpython-35.pyc __pycache__/npython18.cpython-35.opt-1.pyc __pycache__/npython18.cpython-35.pyc __pycache__/npython19.cpython-35.opt-1.pyc __pycache__/npython19.cpython-35.pyc __pycache__/npython20.cpython-35.opt-1.pyc __pycache__/npython20.cpython-35.pyc __pycache__/npython21.cpython-35.opt-1.pyc __pycache__/npython21.cpython-35.pyc __pycache__/npython22.cpython-35.opt-1.pyc __pycache__/npython22.cpython-35.pyc __pycache__/npython23.cpython-35.opt-1.pyc __pycache__/npython23.cpython-35.pyc __pycache__/npython24.cpython-35.opt-1.pyc __pycache__/npython24.cpython-35.pyc __pycache__/npython25.cpython-35.opt-1.pyc __pycache__/npython25.cpython-35.pyc __pycache__/npython26.cpython-35.opt-1.pyc __pycache__/npython26.cpython-35.pyc __pycache__/npython27.cpython-35.opt-1.pyc __pycache__/npython27.cpython-35.pyc __pycache__/npython28.cpython-35.opt-1.pyc __pycache__/npython28.cpython-35.pyc __pycache__/npython29.cpython-35.opt-1.pyc __pycache__/npython29.cpython-35.pyc __pycache__/npython30.cpython-35.opt-1.pyc __pycache__/npython30.cpython-35.pyc __pycache__/npython31.cpython-35.opt-1.pyc __pycache__/npython31.cpython-35.pyc __pycache__/npython32.cpython-35.opt-1.pyc __pycache__/npython32.cpython-35.pyc __pycache__/npython33.cpython-35.opt-1.pyc __pycache__/npython33.cpython-35.pyc __pycache__/npython34.cpython-35.opt-1.pyc __pycache__/npython34.cpython-35.pyc __pycache__/npython35.cpython-35.opt-1.pyc __pycache__/npython35.cpython-35.pyc __pycache__/npython36.cpython-35.opt-1.pyc __pycache__/npython36.cpython-35.pyc __pycache__/npython37.cpython-35.opt-1.pyc __pycache__/npython37.cpython-35.pyc __pycache__/npython38.cpython-35.opt-1.pyc __pycache__/npython38.cpython-35.pyc __pycache__/npython39.cpython-35.opt-1.pyc __pycache__/npython39.cpython-35.pyc __pycache__/npython40.cpython-35.opt-1.pyc __pycache__/npython40.cpython-35.pyc __pycache__/npython41.cpython-35.opt-1.pyc __pycache__/npython41.cpython-35.pyc __pycache__/npython42.cpython-35.opt-1.pyc __pycache__/npython42.cpython-35.pyc __pycache__/npython43.cpython-35.opt-1.pyc __pycache__/npython43.cpython-35.pyc __pycache__/npython44.cpython-35.opt-1.pyc __pycache__/npython44.cpython-35.pyc __pycache__/npython45.cpython-35.opt-1.pyc __pycache__/npython45.cpython-35.pyc __pycache__/npython46.cpython-35.opt-1.pyc __pycache__/npython46.cpython-35.pyc __pycache__/npython47.cpython-35.opt-1.pyc __pycache__/npython47.cpython-35.pyc __pycache__/npython48.cpython-35.opt-1.pyc __pycache__/npython48.cpython-35.pyc __pycache__/npython49.cpython-35.opt-1.pyc __pycache__/npython49.cpython-35.pyc __pycache__/npython50.cpython-35.opt-1.pyc __pycache__/npython50.cpython-35.pyc __pycache__/npython51.cpython-35.opt-1.pyc __pycache__/npython51.cpython-35.pyc __pycache__/npython52.cpython-35.opt-1.pyc __pycache__/npython52.cpython-35.pyc __pycache__/npython53.cpython-35.opt-1.pyc __pycache__/npython53.cpython-35.pyc __pycache__/npython54.cpython-35.opt-1.pyc __pycache__/npython54.cpython-35.pyc __pycache__/npython55.cpython-35.opt-1.pyc __pycache__/npython55.cpython-35.pyc __pycache__/npython56.cpython-35.opt-1.pyc __pycache__/npython56.cpython-35.pyc __pycache__/npython57.cpython-35.opt-1.pyc __pycache__/npython57.cpython-35.pyc __pycache__/npython58.cpython-35.opt-1.pyc __pycache__/npython58.cpython-35.pyc __pycache__/npython59.cpython-35.opt-1.pyc __pycache__/npython59.cpython-35.pyc __pycache__/npython60.cpython-35.opt-1.pyc __pycache__/npython60.cpython-35.pyc __pycache__/npython61.cpython-35.opt-1.pyc __pycache__/npython61.cpython-35.pyc __pycache__/npython62.cpython-35.opt-1.pyc __pycache__/npython62.cpython-35.pyc __pycache__/npython63.cpython-35.opt-1.pyc __pycache__/npython63.cpython-35.pyc __pycache__/npython64.cpython-35.opt-1.pyc __pycache__/npython64.cpython-35.pyc __pycache__/npython65.cpython-35.opt-1.pyc __pycache__/npython65.cpython-35.pyc __pycache__/npython66.cpython-35.opt-1.pyc __pycache__/npython66.cpython-35.pyc __pycache__/npython67.cpython-35.opt-1.pyc __pycache__/npython67.cpython-35.pyc __pycache__/npython68.cpython-35.opt-1.pyc __pycache__/npython68.cpython-35.pyc __pycache__/npython69.cpython-35.opt-1.pyc __pycache__/npython69.cpython-35.pyc __pycache__/npython70.cpython-35.opt-1.pyc __pycache__/npython70.cpython-35.pyc __pycache__/npython71.cpython-35.opt-1.pyc __pycache__/npython71.cpython-35.pyc __pycache__/npython72.cpython-35.opt-1.pyc __pycache__/npython72.cpython-35.pyc __pycache__/npython73.cpython-35.opt-1.pyc __pycache__/npython73.cpython-35.pyc __pycache__/npython74.cpython-35.opt-1.pyc __pycache__/npython74.cpython-35.pyc __pycache__/npython75.cpython-35.opt-1.pyc __pycache__/npython75.cpython-35.pyc __pycache__/npython76.cpython-35.opt-1.pyc __pycache__/npython76.cpython-35.pyc __pycache__/npython77.cpython-35.opt-1.pyc __pycache__/npython77.cpython-35.pyc __pycache__/npython78.cpython-35.opt-1.pyc __pycache__/npython78.cpython-35.pyc __pycache__/npython79.cpython-35.opt-1.pyc __pycache__/npython79.cpython-35.pyc __pycache__/npython80.cpython-35.opt-1.pyc __pycache__/npython80.cpython-35.pyc __pycache__/npython81.cpython-35.opt-1.pyc __pycache__/npython81.cpython-35.pyc )
/home/mthl/src/automake/t/instmany-python.dir/x-bin/rm: safe command line limit of 2500 characters exceeded
--8<---------------cut here---------------end--------------->8---

See the attached log for more details.

[instmany-python.log (text/plain, attachment)]
[Message part 3 (text/plain, inline)]
-- 
Mathieu Lirzin
GPG: F2A3 8D7E EB2B 6640 5761  070D 0ADE E100 9460 4D37

Reply sent to Mathieu Lirzin <mthl <at> gnu.org>:
You have taken responsibility. (Sun, 18 Feb 2018 13:14:02 GMT) Full text and rfc822 format available.

Notification sent to Mathieu Lirzin <mthl <at> gnu.org>:
bug acknowledged by developer. (Sun, 18 Feb 2018 13:14:05 GMT) Full text and rfc822 format available.

Message #10 received at 30335-done <at> debbugs.gnu.org (full text, mbox):

From: Mathieu Lirzin <mthl <at> gnu.org>
To: 30335-done <at> debbugs.gnu.org
Subject: Re: bug#30335: ‘make uninstall’ exceeds
 command-line length limit
Date: Sun, 18 Feb 2018 14:13:33 +0100
[Message part 1 (text/plain, inline)]
Mathieu Lirzin <mthl <at> gnu.org> writes:

> "t/instmany-python.sh" test fails for the ‘uninstall’ target.

This is fixed by commit 006c4dfede96091f5bed622c17946cbec067347f

[0001-python-Avoid-exceeding-command-line-length-limit.patch (text/x-patch, inline)]
From 006c4dfede96091f5bed622c17946cbec067347f Mon Sep 17 00:00:00 2001
From: Mathieu Lirzin <mthl <at> gnu.org>
Date: Sun, 4 Feb 2018 00:09:31 +0100
Subject: [PATCH] python: Avoid exceeding command-line length limit
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

With Python implementations following PEP-3174, a large number of files
are installed in the ‘__pycache__’ directory.  As a consequence
“t/instmany-python.sh” test was failing due to the
‘uninstall-pythonPYTHON’ target deleting installed files in a single
‘rm’ command.  Doing that in multiple steps avoids exceeding the
command-line length limit.  This fixes bug#30335.

* lib/am/python.am (uninstall-%DIR%PYTHON): For byte-compiled files
installed in '__pycache__' directory, uninstall them by batch of 40.
[?FIRST?] (am__pep3147_tweak): Adapt.
---
 lib/am/python.am | 25 +++++++++----------------
 1 file changed, 9 insertions(+), 16 deletions(-)

diff --git a/lib/am/python.am b/lib/am/python.am
index e29ecfcd0..21e6f842c 100644
--- a/lib/am/python.am
+++ b/lib/am/python.am
@@ -97,7 +97,7 @@ endif %?INSTALL%
 if %?INSTALL%
 
 ?FIRST?am__pep3147_tweak = \
-?FIRST?  sed -e 's|\.py$$||' -e 's|[^/]*$$|__pycache__/&.*.py|'
+?FIRST?  sed -e 's|\.py$$||' -e 's|[^/]*$$|&.*.pyc\n&.*.pyo|'
 
 .PHONY uninstall-am: uninstall-%DIR%PYTHON
 uninstall-%DIR%PYTHON:
@@ -108,26 +108,19 @@ uninstall-%DIR%PYTHON:
 	test -n "$$py_files" || exit 0; \
 	dir='$(DESTDIR)$(%NDIR%dir)'; \
 ## Also remove the .pyc and .pyo byte compiled versions.
-## This is somewhat tricky, because for newer pythons we have to take
-## PEP-3147 into account.
 	pyc_files=`echo "$$py_files" | sed 's|$$|c|'`; \
 	pyo_files=`echo "$$py_files" | sed 's|$$|o|'`; \
-	py_files_pep3147=`echo "$$py_files" | $(am__pep3147_tweak)`; \
-	echo "$$py_files_pep3147";\
-	pyc_files_pep3147=`echo "$$py_files_pep3147" | sed 's|$$|c|'`; \
-	pyo_files_pep3147=`echo "$$py_files_pep3147" | sed 's|$$|o|'`; \
 	st=0; \
-	for files in \
-	  "$$py_files" \
-	  "$$pyc_files" \
-	  "$$pyo_files" \
-## Installation of '.py' files is not influenced by PEP-3147, so it
-## is correct *not* to have $pyfiles_pep3147 here.
-	  "$$pyc_files_pep3147" \
-	  "$$pyo_files_pep3147" \
-	; do \
+	for files in "$$py_files" "$$pyc_files" "$$pyo_files"; do \
 	  $(am__uninstall_files_from_dir) || st=$$?; \
 	done; \
+## This is somewhat tricky, because for newer pythons we have to take PEP-3147
+## into account.  Avoid exceeding the command-line length limit.
+	dir='$(DESTDIR)$(%NDIR%dir)/__pycache__'; \
+	echo "$$py_files" | $(am__pep3147_tweak) | $(am__base_list) | \
+	  while read files; do \
+	    $(am__uninstall_files_from_dir) || st=$$?; \
+	  done || exit $$?; \
 	exit $$st
 endif %?INSTALL%
 
-- 
2.16.1

[Message part 3 (text/plain, inline)]
-- 
Mathieu Lirzin
GPG: F2A3 8D7E EB2B 6640 5761  070D 0ADE E100 9460 4D37

Added tag(s) fixed. Request was from Mathieu Lirzin <mthl <at> gnu.org> to control <at> debbugs.gnu.org. (Thu, 08 Mar 2018 21:44:01 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Fri, 06 Apr 2018 11:24:05 GMT) Full text and rfc822 format available.

This bug report was last modified 7 years and 77 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.