All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laszlo Ersek <lersek@redhat.com>
To: "Philippe Mathieu-Daudé" <philmd@redhat.com>,
	"qemu devel list" <qemu-devel@nongnu.org>
Cc: John Snow <jsnow@redhat.com>,
	Eduardo Habkost <ehabkost@redhat.com>,
	Cleber Rosa <crosa@redhat.com>
Subject: Re: [PATCH] edk2 build scripts: work around TianoCore#1607 without forcing Python 2
Date: Thu, 19 Sep 2019 21:08:06 +0200	[thread overview]
Message-ID: <6a5b3a61-0d52-6866-9fb9-4d71e5f01483@redhat.com> (raw)
In-Reply-To: <2d02cb02-27ce-081b-c9ec-4c4430503749@redhat.com>

On 09/19/19 18:39, Philippe Mathieu-Daudé wrote:
> On 9/18/19 7:11 PM, Laszlo Ersek wrote:
>> It turns out that forcing python2 for running the edk2 "build" utility is
>> neither necessary nor sufficient.
>>
>> Forcing python2 is not sufficient for two reasons:
>>
>> - QEMU is moving away from python2, with python2 nearing EOL,
>>
>> - according to my most recent testing, the lacking dependency information
>>   in the makefiles that are generated by edk2's "build" utility can cause
>>   parallel build failures even when "build" is executed by python2.
>>
>> And forcing python2 is not necessary because we can still return to the
>> original idea of filtering out jobserver-related options from MAKEFLAGS.
>> So do that.
> 
> FYI I tried uninstalling python2 on Fedora 29,
> 
> $ make -C roms efi -j8
> make: Entering directory '/home/phil/source/qemu/roms'
> make -C edk2/BaseTools \
>         EXTRA_OPTFLAGS='' \
>         EXTRA_LDFLAGS=''
> make[1]: Entering directory '/home/phil/source/qemu/roms/edk2/BaseTools'
> [...]
> make -C Tests
> make[2]: Entering directory
> '/home/phil/source/qemu/roms/edk2/BaseTools/Tests'
> /bin/sh: python: command not found
> make[2]: *** [GNUmakefile:11: test] Error 127
> 
> 'python' seems to be provided by python-unversioned-command which is
> wired to Python2:
> 
> $ dnf info python-unversioned-command
> Last metadata expiration check: 0:03:08 ago on Thu 19 Sep 2019 04:21:21
> PM UTC.
> Available Packages
> Name         : python-unversioned-command
> Version      : 2.7.16
> Release      : 2.fc29
> Arch         : noarch
> Size         : 13 k
> Source       : python2-2.7.16-2.fc29.src.rpm
> Repo         : updates
> Summary      : The "python" command that runs Python 2
> URL          : https://www.python.org/
> License      : Python
> Description  : This package contains /usr/bin/python - the "python"
> command that runs Python 2.
> 
> I had to manually run update-alternatives to continue:
> 
> $ sudo update-alternatives --install /usr/bin/python python
> /usr/bin/python3 69
> 
> Not sure this is the expected behavior, it is confusing.
> 

The python detection is not fool-proof in edk2. A description is given at:

https://github.com/tianocore/tianocore.github.io/wiki/BaseTools-Support-Python2-Python3

To summarize that, it works like this, on Linux:

- if you set PYTHON_COMMAND, then the binary pointed to by
PYTHON_COMMAND will be used. The edk2 build infrastructure will
determine whether the pointed-to binary is python 2 or python 3, and
branch to the corresponding implementation of the build tools.

- Otherwise, *minor* version auto-detection is attempted. With
PYTHON3_ENABLE unset, or set to "TRUE", this minor version autodetection
will aim at minor versions of python3.

- Otherwise (= PYTHON3_ENABLE set to a string different from "TRUE"),
the minor version auto-detection will focus on python2.

With this patch applied, the middle case is active. Apparently it fails,
because the edk2 build tools developers could not foresee the situations
that you've exposed the auto-detection to, on Ubuntu and Fedora. Back
when I tested the python3 enablement in edk2, I checked the patches in
the following environments:

- on RHEL-7 with the system python 2,
- on RHEL-7 with python3.4 from EPEL-7,
- on RHEL-8 with python3.6,
- on RHEL-8 with platform-python.

Everything worked fine for me. I have no clue what's going on in Ubuntu
and in Fedora.

Can we require all build host installations -- where we expect to run
"make efi" -- to provide a Python 3 binary on $PATH that is plainly
called "python3"?

Then I think this patch should work. (If necessary, I could set
"PYTHON_COMMAND=python3", too.)

Thanks!
Laszlo


  reply	other threads:[~2019-09-19 19:09 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-18 17:11 [Qemu-devel] [PATCH] edk2 build scripts: work around TianoCore#1607 without forcing Python 2 Laszlo Ersek
2019-09-18 22:29 ` John Snow
2019-09-19 13:41 ` Philippe Mathieu-Daudé
2019-09-19 18:54   ` Laszlo Ersek
2019-09-19 13:56 ` [Qemu-devel] " Philippe Mathieu-Daudé
2019-09-19 16:39 ` Philippe Mathieu-Daudé
2019-09-19 19:08   ` Laszlo Ersek [this message]
2019-09-19 19:56     ` Philippe Mathieu-Daudé
2019-09-19 21:40       ` Laszlo Ersek
2019-09-20  7:58         ` Philippe Mathieu-Daudé

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6a5b3a61-0d52-6866-9fb9-4d71e5f01483@redhat.com \
    --to=lersek@redhat.com \
    --cc=crosa@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.