Merge pull request #8584 from jefferyto/python-compileall-recursion-level
authorRosen Penev <rosenp@gmail.com>
Thu, 4 Apr 2019 07:19:55 +0000 (00:19 -0700)
committerGitHub <noreply@github.com>
Thu, 4 Apr 2019 07:19:55 +0000 (00:19 -0700)
python,python3: Increase max recursion level when generating bytecode

lang/python/python-package-install.sh
lang/python/python/patches/021-compileall-add-recursion-option.patch [new file with mode: 0644]

index 6b4fe54b1fbcaca3fb3ca935cc789ff4ec8abba1..2ca2abc16e13e77daf5b9848d2e493084a90d688 100644 (file)
@@ -43,11 +43,7 @@ process_filespec() {
 delete_empty_dirs() {
        local dst_dir="$1"
        if [ -d "$dst_dir/usr" ] ; then
-               for _ in $(seq 1 10) ; do
-                       find "$dst_dir/usr" -empty -type d -exec rmdir {} \; || continue
-                       break
-               done
-               rmdir "$dst_dir/usr" || true
+               find "$dst_dir/usr" -empty -type d -delete
        fi
 }
 
@@ -60,7 +56,7 @@ filespec="$6"
 
 SED="${SED:-sed -e}"
 
-find "$src_dir" -name "*\.exe" -exec rm -f {} \;
+find "$src_dir" -name "*.exe" -delete
 
 process_filespec "$src_dir" "$dst_dir" "$filespec" || {
        echo "process filespec error-ed"
@@ -75,7 +71,7 @@ fi
 
 if [ "$mode" == "sources" ] ; then
        # Copy only python source files
-       find "$dst_dir" -not -type d -not -name "*\.py" -exec rm -f {} \;
+       find "$dst_dir" -not -type d -not -name "*.py" -delete
 
        delete_empty_dirs "$dst_dir"
        exit 0
@@ -83,6 +79,8 @@ fi
 
 legacy=
 [ "$ver" == "3" ] && legacy="-b"
+# default max recursion is 10
+max_recursion_level=20
 
 # XXX [So that you won't goof as I did]
 # Note: Yes, I tried to use the -O & -OO flags here.
@@ -90,14 +88,14 @@ legacy=
 #       So, we just stuck to un-optimized byte-codes,
 #       which is still way better/faster than running
 #       Python sources all the time.
-$python -m compileall $legacy -d '/' "$dst_dir" || {
+$python -m compileall -r "$max_recursion_level" $legacy -d '/' "$dst_dir" || {
        echo "python -m compileall err-ed"
        exit 1
 }
 
 # Delete source files and pyc [ un-optimized bytecode files ]
 # We may want to make this optimization thing configurable later, but not sure atm
-find "$dst_dir" -type f -name "*\.py" -exec rm -f {} \;
+find "$dst_dir" -type f -name "*.py" -delete
 
 delete_empty_dirs "$dst_dir"
 
diff --git a/lang/python/python/patches/021-compileall-add-recursion-option.patch b/lang/python/python/patches/021-compileall-add-recursion-option.patch
new file mode 100644 (file)
index 0000000..fa75a42
--- /dev/null
@@ -0,0 +1,33 @@
+diff --git a/Lib/compileall.py b/Lib/compileall.py
+index 5cfa8bed3f..8716c9c0ca 100644
+--- a/Lib/compileall.py
++++ b/Lib/compileall.py
+@@ -152,10 +152,10 @@ def main():
+     """Script main program."""
+     import getopt
+     try:
+-        opts, args = getopt.getopt(sys.argv[1:], 'lfqd:x:i:')
++        opts, args = getopt.getopt(sys.argv[1:], 'lr:fqd:x:i:')
+     except getopt.error, msg:
+         print msg
+-        print "usage: python compileall.py [-l] [-f] [-q] [-d destdir] " \
++        print "usage: python compileall.py [-l] [-r recursion] [-f] [-q] [-d destdir] " \
+               "[-x regexp] [-i list] [directory|file ...]"
+         print
+         print "arguments: zero or more file and directory names to compile; " \
+@@ -164,6 +164,7 @@ def main():
+         print
+         print "options:"
+         print "-l: don't recurse into subdirectories"
++        print "-r recursion: control the maximum recursion level"
+         print "-f: force rebuild even if timestamps are up-to-date"
+         print "-q: output only error messages"
+         print "-d destdir: directory to prepend to file paths for use in " \
+@@ -187,6 +188,7 @@ def main():
+     flist = None
+     for o, a in opts:
+         if o == '-l': maxlevels = 0
++        if o == '-r': maxlevels = int(a)
+         if o == '-d': ddir = a
+         if o == '-f': force = 1
+         if o == '-q': quiet = 1