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.
View this message in rfc822 format
From: help-debbugs <at> gnu.org (GNU bug Tracking System) To: Mathieu Lirzin <mthl <at> gnu.org> Cc: tracker <at> debbugs.gnu.org Subject: bug#30335: closed (‘make uninstall’ exceeds command-line length limit) Date: Sun, 18 Feb 2018 13:14:02 +0000
[Message part 1 (text/plain, inline)]
Your message dated Sun, 18 Feb 2018 14:13:33 +0100 with message-id <87po521lvm.fsf <at> gnu.org> and subject line Re: bug#30335: ‘make uninstall’ exceeds command-line length limit has caused the debbugs.gnu.org bug report #30335, regarding ‘make uninstall’ exceeds command-line length limit to be marked as done. (If you believe you have received this mail in error, please contact help-debbugs <at> gnu.org.) -- 30335: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=30335 GNU Bug Tracking System Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
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 3 (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 5 (text/plain, inline)]-- Mathieu Lirzin GPG: F2A3 8D7E EB2B 6640 5761 070D 0ADE E100 9460 4D37
[Message part 6 (message/rfc822, inline)]
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 7 (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 9 (text/plain, inline)]-- Mathieu Lirzin GPG: F2A3 8D7E EB2B 6640 5761 070D 0ADE E100 9460 4D37
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.