Patchwork configure: Don't write .pyc files by default (python -B)

login
register
mail settings
Submitter Stefan Weil
Date Aug. 27, 2013, 1:12 p.m.
Message ID <1377609161-25108-1-git-send-email-sw@weilnetz.de>
Download mbox | patch
Permalink /patch/270122/
State Accepted
Headers show

Comments

Stefan Weil - Aug. 27, 2013, 1:12 p.m.
When a Python script is run, Python normally writes bytecode into a .pyc file.
QEMU's build process uses several Python scripts which are called from
configure or make.

The generated .pyc files take disk space without being of much use, because
those scripts are short, not time critical and only called a few times.

Python's option -B disables writing of .pyc files. QEMU now uses "python -B"
as default, but it is still possible to choose a different call by passing
--python=PYTHON to configure.

Signed-off-by: Stefan Weil <sw@weilnetz.de>
---

It was necessary to change from "$python" to simply $python in the
Python test. This should not matter: we already have a simple $python
in configure, and Python wants to be installed in a path without
spaces.

Stefan

 configure |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
Michael Tokarev - Sept. 1, 2013, 3:15 p.m.
27.08.2013 17:12, Stefan Weil wrote:
> When a Python script is run, Python normally writes bytecode into a .pyc file.
> QEMU's build process uses several Python scripts which are called from
> configure or make.
>
> The generated .pyc files take disk space without being of much use, because
> those scripts are short, not time critical and only called a few times.
>
> Python's option -B disables writing of .pyc files. QEMU now uses "python -B"
> as default, but it is still possible to choose a different call by passing
> --python=PYTHON to configure.

Yay, thank you for this!
Applied to the trivial-patches queue.

/mjt
Stefan Hajnoczi - Nov. 14, 2013, 2:45 p.m.
On Tue, Aug 27, 2013 at 3:12 PM, Stefan Weil <sw@weilnetz.de> wrote:
> When a Python script is run, Python normally writes bytecode into a .pyc file.
> QEMU's build process uses several Python scripts which are called from
> configure or make.
>
> The generated .pyc files take disk space without being of much use, because
> those scripts are short, not time critical and only called a few times.
>
> Python's option -B disables writing of .pyc files. QEMU now uses "python -B"
> as default, but it is still possible to choose a different call by passing
> --python=PYTHON to configure.
>
> Signed-off-by: Stefan Weil <sw@weilnetz.de>
> ---
>
> It was necessary to change from "$python" to simply $python in the
> Python test. This should not matter: we already have a simple $python
> in configure, and Python wants to be installed in a path without
> spaces.
>
> Stefan
>
>  configure |    4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/configure b/configure
> index 0a55c20..db69327 100755
> --- a/configure
> +++ b/configure
> @@ -568,7 +568,7 @@ fi
>
>  : ${make=${MAKE-make}}
>  : ${install=${INSTALL-install}}
> -: ${python=${PYTHON-python}}
> +: ${python=${PYTHON-python -B}}
>  : ${smbd=${SMBD-/usr/sbin/smbd}}
>
>  # Default objcc to clang if available, otherwise use CC
> @@ -1348,7 +1348,7 @@ fi
>
>  # Note that if the Python conditional here evaluates True we will exit
>  # with status 1 which is a shell 'false' value.
> -if ! "$python" -c 'import sys; sys.exit(sys.version_info < (2,4) or sys.version_info >= (3,))'; then
> +if ! $python -c 'import sys; sys.exit(sys.version_info < (2,4) or sys.version_info >= (3,))'; then
>    error_exit "Cannot use '$python', Python 2.4 or later is required." \
>        "Note that Python 3 or later is not yet supported." \
>        "Use --python=/path/to/python to specify a supported Python."
> --
> 1.7.10.4

This patch breaks ./configure on RHEL 5 and other older distros that
use Python 2.4.

The version test in ./configure fails because the python interpreter
does not accept the -B option:
http://buildbot.b1-systems.de/qemu/builders/default_x86_64_rhel5/builds/762/steps/configure/logs/stdio

Can you add -B after version detection, if available?  (No .pyc is
generated for statements evaluated on the command-line during version
detection.)

Stefan
Stefan Weil - Nov. 14, 2013, 5:43 p.m.
Am 14.11.2013 15:45, schrieb Stefan Hajnoczi:
> On Tue, Aug 27, 2013 at 3:12 PM, Stefan Weil <sw@weilnetz.de> wrote:
>> When a Python script is run, Python normally writes bytecode into a .pyc file.
>> QEMU's build process uses several Python scripts which are called from
>> configure or make.
>>
>> The generated .pyc files take disk space without being of much use, because
>> those scripts are short, not time critical and only called a few times.
>>
>> Python's option -B disables writing of .pyc files. QEMU now uses "python -B"
>> as default, but it is still possible to choose a different call by passing
>> --python=PYTHON to configure.
>>
>> Signed-off-by: Stefan Weil <sw@weilnetz.de>
>> ---
>>
>> It was necessary to change from "$python" to simply $python in the
>> Python test. This should not matter: we already have a simple $python
>> in configure, and Python wants to be installed in a path without
>> spaces.
>>
>> Stefan
[...]
>> This patch breaks ./configure on RHEL 5 and other older distros that
>> use Python 2.4.
>>
>> The version test in ./configure fails because the python interpreter
>> does not accept the -B option:
>> http://buildbot.b1-systems.de/qemu/builders/default_x86_64_rhel5/builds/762/steps/configure/logs/stdio
>>
>> Can you add -B after version detection, if available?  (No .pyc is
>> generated for statements evaluated on the command-line during version
>> detection.)
>>
>> Stefan

I'm sorry that I did not notice this regression in the buildbot report.

We have several possibilities how we can handle this incompatibility for
old versions of Python.

According to http://docs.python.org/2/whatsnew/2.6.html, the -B option
was introduced with
Python 2.6 which was released on October 1 2008.

Solution 1: We don't modify the current configure script because it
works with Python versions
since 5 years. For older versions there is a very simple workaround:
call configure with
--python=python. This additional parameter would also be needed for the
buildbots running
with Python 2.4.

Solution 2: I modify the configure script to set -B only if it is
supported. This makes it marginally
longer (more lines of code, one more Python execution).

Would 1 be sufficient, or do you prefer getting a patch with solution 2?
In any case, I don't think
this is a must for QEMU 1.7.

Stefan
Stefan Hajnoczi - Nov. 15, 2013, 9:31 a.m.
On Thu, Nov 14, 2013 at 06:43:48PM +0100, Stefan Weil wrote:
> Am 14.11.2013 15:45, schrieb Stefan Hajnoczi:
> > On Tue, Aug 27, 2013 at 3:12 PM, Stefan Weil <sw@weilnetz.de> wrote:
> >> When a Python script is run, Python normally writes bytecode into a .pyc file.
> >> QEMU's build process uses several Python scripts which are called from
> >> configure or make.
> >>
> >> The generated .pyc files take disk space without being of much use, because
> >> those scripts are short, not time critical and only called a few times.
> >>
> >> Python's option -B disables writing of .pyc files. QEMU now uses "python -B"
> >> as default, but it is still possible to choose a different call by passing
> >> --python=PYTHON to configure.
> >>
> >> Signed-off-by: Stefan Weil <sw@weilnetz.de>
> >> ---
> >>
> >> It was necessary to change from "$python" to simply $python in the
> >> Python test. This should not matter: we already have a simple $python
> >> in configure, and Python wants to be installed in a path without
> >> spaces.
> >>
> >> Stefan
> [...]
> >> This patch breaks ./configure on RHEL 5 and other older distros that
> >> use Python 2.4.
> >>
> >> The version test in ./configure fails because the python interpreter
> >> does not accept the -B option:
> >> http://buildbot.b1-systems.de/qemu/builders/default_x86_64_rhel5/builds/762/steps/configure/logs/stdio
> >>
> >> Can you add -B after version detection, if available?  (No .pyc is
> >> generated for statements evaluated on the command-line during version
> >> detection.)
> >>
> >> Stefan
> 
> I'm sorry that I did not notice this regression in the buildbot report.
> 
> We have several possibilities how we can handle this incompatibility for
> old versions of Python.
> 
> According to http://docs.python.org/2/whatsnew/2.6.html, the -B option
> was introduced with
> Python 2.6 which was released on October 1 2008.
> 
> Solution 1: We don't modify the current configure script because it
> works with Python versions
> since 5 years. For older versions there is a very simple workaround:
> call configure with
> --python=python. This additional parameter would also be needed for the
> buildbots running
> with Python 2.4.
> 
> Solution 2: I modify the configure script to set -B only if it is
> supported. This makes it marginally
> longer (more lines of code, one more Python execution).
> 
> Would 1 be sufficient, or do you prefer getting a patch with solution 2?
> In any case, I don't think
> this is a must for QEMU 1.7.

Thanks, the patch you sent looks good.

Stefan

Patch

diff --git a/configure b/configure
index 0a55c20..db69327 100755
--- a/configure
+++ b/configure
@@ -568,7 +568,7 @@  fi
 
 : ${make=${MAKE-make}}
 : ${install=${INSTALL-install}}
-: ${python=${PYTHON-python}}
+: ${python=${PYTHON-python -B}}
 : ${smbd=${SMBD-/usr/sbin/smbd}}
 
 # Default objcc to clang if available, otherwise use CC
@@ -1348,7 +1348,7 @@  fi
 
 # Note that if the Python conditional here evaluates True we will exit
 # with status 1 which is a shell 'false' value.
-if ! "$python" -c 'import sys; sys.exit(sys.version_info < (2,4) or sys.version_info >= (3,))'; then
+if ! $python -c 'import sys; sys.exit(sys.version_info < (2,4) or sys.version_info >= (3,))'; then
   error_exit "Cannot use '$python', Python 2.4 or later is required." \
       "Note that Python 3 or later is not yet supported." \
       "Use --python=/path/to/python to specify a supported Python."