]> git.ipfire.org Git - thirdparty/automake.git/commitdiff
python: Avoid exceeding command-line length limit
authorMathieu Lirzin <mthl@gnu.org>
Sat, 3 Feb 2018 23:09:31 +0000 (00:09 +0100)
committerMathieu Lirzin <mthl@gnu.org>
Sun, 18 Feb 2018 13:01:58 +0000 (14:01 +0100)
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

index e29ecfcd02ecd91737b6fa8e97d181877b4a3c8b..21e6f842cadb35ddc451da1a44fff1720d3171df 100644 (file)
@@ -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%