summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Lirzin <mthl@gnu.org>2018-02-04 00:09:31 +0100
committerMathieu Lirzin <mthl@gnu.org>2018-02-18 14:01:58 +0100
commit006c4dfede96091f5bed622c17946cbec067347f (patch)
tree02cef7933624146ab2a25b50fd952f5c28562f1c
parent903a80e0def90b88c1e4eead353af126a31a5422 (diff)
downloadautomake-006c4dfede96091f5bed622c17946cbec067347f.tar.gz
python: Avoid exceeding command-line length limit
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.
-rw-r--r--lib/am/python.am25
1 files 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%