NoMorePython2: Difference between revisions

From Yocto Project
Jump to navigationJump to search
Line 30: Line 30:
=== Patches Ready ===
=== Patches Ready ===


* ca-certificates
* ca-certificates (in ross/nopy2)
* libsoup
* libsoup
* grub
* grub
* pseudo
* pseudo
* ninja
* ninja
* bmaptool (in master-next)


=== To Review ===
=== To Review ===
Line 50: Line 51:
** Extend waf class to invoke waf-native using Python 3
** Extend waf class to invoke waf-native using Python 3
** Use waf class in recipe
** Use waf class in recipe
* bmaptool (https://bugzilla.yoctoproject.org/show_bug.cgi?id=11891)


=== Needs Python 2, actively refuses to use Python 3 ===
=== Needs Python 2, actively refuses to use Python 3 ===

Revision as of 12:37, 11 September 2017

No More Python 2!

Problem Statement

Python 2 is in maintenance mode and everyone should shift to Python 3. We've made the move in OpenEmbedded Core so that core-image-sato doesn't pull in Python 2, but Python 2 is still needed during the build.

There are two ways in which Python 2 is needed:

  1. Use of /usr/bin/python on the host
  2. Explicit dependency on python-native

Goal

To be able to build first core-image-sato and then world of OpenEmbedded Core without Python 2 being present on the host, or being built via python-native.

Method

To find implicit dependencies on the build host having Python 2, one option is to just remove Python 2 from your build host. Whilst this works, unless you're building inside a container this might not be feasible. The next best thing is to make the binary not executable briefly for the test builds. Sadly you can't remove Python 2 from HOSTTOOLS as several upstreams will explicitly poke around /usr/bin looking for a Python to run.

To find recipes that depend on python-native then simply build an image/world/whatever with -g and search the resulting task-depends.dot. For example, building core-image-sato for intel-corei7-64 results in:

"core-image-sato.do_build" -> "bmap-tools-native.do_build"
"bmap-tools-native.do_prepare_recipe_sysroot" -> "python-native.do_populate_sysroot"

So, an image depends on bmap-tools-native which depends on Python 2.

Patches, from ready to submit to utter hacks, are being collected in poky-contrib:ross/nopy2.

Status

Patches Ready

  • ca-certificates (in ross/nopy2)
  • libsoup
  • grub
  • pseudo
  • ninja
  • bmaptool (in master-next)

To Review

  • xcb-proto (do all callers use py3)
  • texinfo-dummy-native (does it still work)

Broken

  • python3-pycairo (new upstream uses distutils)
  • webkitgtk
  • ovmf
  • eglinfo-x11 eglinfo-fb (waf update?)
    • Waf uses Python 2 by default
    • Add waf-native to oe-core
    • Extend waf class to invoke waf-native using Python 3
    • Use waf class in recipe

Needs Python 2, actively refuses to use Python 3