automake-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[automake-commit] branch master updated: py-compile: fix optimized compi


From: Mike Frysinger
Subject: [automake-commit] branch master updated: py-compile: fix optimized compiling for Python 3.5+
Date: Thu, 24 Feb 2022 00:41:17 -0500

This is an automated email from the git hooks/post-receive script.

vapier pushed a commit to branch master
in repository automake.

View the commit online:
https://git.savannah.gnu.org/gitweb/?p=automake.git;a=commitdiff;h=bde43d0481ff540418271ac37012a574a4fcf097

The following commit(s) were added to refs/heads/master by this push:
     new bde43d048 py-compile: fix optimized compiling for Python 3.5+
bde43d048 is described below

commit bde43d0481ff540418271ac37012a574a4fcf097
Author: Mike Frysinger <vapier@gentoo.org>
AuthorDate: Sun Feb 6 01:25:59 2022 -0500

    py-compile: fix optimized compiling for Python 3.5+
    
    Fixes automake bug https://bugs.gnu.org/38043.
    
    Split the optimized compilation logic into a new section.  This avoids
    trying to support multiple versions of major versions in a single script
    as it gets harder to verify new changes don't break old versions as time
    goes on.
    
    Now for Python 3.5+, compile with -O0 (which is "higher" than -O).
    
    * NEWS: Mention fix.
    * THANKS: Add Michal Górny.
    * lib/py-compile: Add new section for compiling Python 3.5+.
---
 NEWS           |  3 +++
 THANKS         |  3 ++-
 lib/py-compile | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 61 insertions(+), 2 deletions(-)

diff --git a/NEWS b/NEWS
index 665d8329d..8a1cbed49 100644
--- a/NEWS
+++ b/NEWS
@@ -10,6 +10,9 @@ New in 1.17:
   - When compiling emacs lisp files, emacs is run with --no-site-file to
     disable user config files that might hang or access the terminal.
 
+  - Compiling Python modules with Python 3.5+ will use multiple optimization
+    levels now.
+
 * New features added
 
   - RANLIB may be overridden on a per-target basis.
diff --git a/THANKS b/THANKS
index 1d64877ec..41e15eb73 100644
--- a/THANKS
+++ b/THANKS
@@ -244,7 +244,7 @@ Leonardo Boiko                  leoboiko@conectiva.com.br
 Libor Bukata                    libor.bukata@oracle.com
 Loulou Pouchet                  loulou@lrde.epita.fr
 Ludovic Courtès                 ludo@gnu.org
-Lukas Fleischer                        lfleischer@lfos.de
+Lukas Fleischer                 lfleischer@lfos.de
 Luo Yi                          luoyi.ly@gmail.com
 Maciej Stachowiak               mstachow@mit.edu
 Maciej W. Rozycki               macro@ds2.pg.gda.pl
@@ -286,6 +286,7 @@ Michael Daniels                 mdaniels@rim.com
 Michael Hofmann                 mhofma@googlemail.com
 Michael Ploujnikov              ploujj@gmail.com
 Michael Zucchi                  notzed@gmail.com
+Michał Górny                    mgorny@gentoo.org
 Michel de Ruiter                mdruiter@cs.vu.nl
 Mike Castle                     dalgoda@ix.netcom.com
 Mike Frysinger                  vapier@gentoo.org
diff --git a/lib/py-compile b/lib/py-compile
index 6295b2dac..24a8a1a54 100755
--- a/lib/py-compile
+++ b/lib/py-compile
@@ -131,6 +131,13 @@ case $python_major in
   ;;
 esac
 
+python_minor=`$PYTHON -c 'import sys; print(sys.version_info[1])'`
+
+# NB: When adding support for newer versions, prefer copying & adding new cases
+# rather than try to keep things merged with shell variables.
+
+# First byte compile (no optimization) all the modules.
+# This works for all currently known Python versions.
 $PYTHON -c "
 import sys, os, py_compile, importlib
 
@@ -149,7 +156,10 @@ for file in sys.argv[1:]:
         py_compile.compile(filepath, filepath + 'c', path)
 sys.stdout.write('\n')" "$@" || exit $?
 
-$PYTHON -O -c "
+# Then byte compile w/optimization all the modules.
+case $python_major.$python_minor in
+2.*)
+  $PYTHON -O -c "
 import sys, os, py_compile, importlib
 
 # pypy does not use .pyo optimization
@@ -170,6 +180,51 @@ for file in sys.argv[1:]:
     else:
         py_compile.compile(filepath, filepath + 'o', path)
 sys.stdout.write('\n')" "$@" 2>/dev/null || exit $?
+  ;;
+*)  # Python 3+
+  $PYTHON -O -c "
+import sys, os, py_compile, importlib
+
+print('Byte-compiling python modules (optimized versions) ...')
+for file in sys.argv[1:]:
+    $pathtrans
+    $filetrans
+    if not os.path.exists(filepath) or not (len(filepath) >= 3
+                                            and filepath[-3:] == '.py'):
+           continue
+    print(file, end=' ', flush=True)
+    if hasattr(sys.implementation, 'cache_tag'):
+        py_compile.compile(filepath, 
importlib.util.cache_from_source(filepath), path)
+    else:
+        py_compile.compile(filepath, filepath + 'o', path)
+print()" "$@" 2>/dev/null || exit $?
+  ;;
+esac
+
+# Then byte compile w/more optimization.
+case $python_major.$python_minor in
+2.*|3.[0-4])
+  ;;
+*)  # Python 3.5+
+  # See https://bugs.gnu.org/38043 for background.
+  $PYTHON -OO -c "
+import sys, os, py_compile, imp
+
+print('Byte-compiling python modules (-OO version) ...')
+for file in sys.argv[1:]:
+    $pathtrans
+    $filetrans
+    if not os.path.exists(filepath) or not (len(filepath) >= 3
+                                            and filepath[-3:] == '.py'):
+        continue
+    print(file, end=' ', flush=True)
+    if hasattr(imp, 'get_tag'):
+        py_compile.compile(filepath, imp.cache_from_source(filepath), path)
+    else:
+        py_compile.compile(filepath, filepath + 'o', path)
+print()" "$@" 2>/dev/null || exit $?
+  ;;
+esac
 
 # Local Variables:
 # mode: shell-script



reply via email to

[Prev in Thread] Current Thread [Next in Thread]