Python3 progress

Noel Power nopower at
Mon Nov 26 10:47:35 UTC 2018

Hi Andrew
On 26/11/2018 04:54, Andrew Bartlett wrote:
> G'Day Noel,
> I notice some branches with improvements for the python3 effort passing
> CI.  Well done!
> One thing I think we do need is to have the PYTHON set during provision
> stick.  That is, if you run:
> PYTHON=python3 ./configure
> That should be enough, we shouldn't have to set it for a subsequent
> make or make test.
That is something certainly we can look at in the next steps
> The 'make test' code should pull it from waf in the same way perl is,
> and to get waf itself run under the correct python, perhaps we could
> revert to the autoconf style and have configure substitute
> -> Makefile.
yep that's possible I guess
> That would allow us to move to python3 by default simply by changing
> the ./configure wrapper.

My current plan is to get everything to work with the current wrappers 
e.g. the transition the  default setting of PYTHON:=python => 
PYTHON:=python3 (in configure & Makefile) This is kindof necessary 
otherwise autobuild gets kindof full of PYTHON=python3 (and you need to 
remember to do this *everywhere* otherwise you will have mismatches of 
the build resulting in at least some parts still building under python2 
or worse some strange errors with some of the more complicated build 
jobs (e.g. samba-libs)..... already been there :-)

This means that by default we will move to python3 on master and to run 
the python2 build you would need to do the reverse of what we do at the 
moment e.g. (PYTHON=python ./configure && PYTHON=python make)

My intention was to get to this point and provide patches with and 
without the final step of switching Makefile, configure, gitlab-* & 
autobuild to build/run/test under python3 as default. Additionally to 
have CIs with 2 branches, 1 with patches up to the py3 switch (showing 
the current python2 build is working) and the second branch & CI with 
the additional patches that provide the final switch to python3 to show 
the pure python3 is working. This would allow us to be confident about 
the remaining porting patches and be able to merge those and also give 
us the option to merge the remainder to 'flick the switch' or discuss 
that part further.

Also worth noting that I have not being issuing any new merge requests 
recently because we really are close to this point above now, 
additionally adding the separate py3 temporary CI tasks for the 
remaining samba_ad_dc , build_samba etc. will just add too much time 
onto the CI. To properly test these patches (and run the tests) we need 
to run from python3 so at least in my private builds at the moment, it's 
kindof all or nothing, I have to get pure py3 fully working for all 
configure/build/test (and it's close)

> Finally, we should use the hook in the build system currently employed
> to change os.path during the install to also change:
> #!/usr/bin/env python
> to eg
> #!/usr/bin/env python3
> (or the full path if a full path was set)

Yes, for any script that is a build product we should make sure that the 
shebang is correct, I presume since you mention it we aren't doing this, 
thanks for mentioning 'cause I didn't even think about it.

> What do you think?

Well I still think I need to get to the point where everything runs 
under python3 + python2 (all build artefacts & tests) Then... we need to 
have a discussion as to how we proceed. If we want to retain python2 
(which I suppose we do for a period of time at least)  then we need to 
think about how we test that, it's clear to me at least from the last 
weeks that the python3 tests we currently run are only a partial tests, 
in fact it is a bit worse than that because the python3 tests (in our 
python2 build) are a kindof hybrid where some parts of the tests can be 
running python2 and others python3 :-) (clearly not ideal, but better 
than nothing)

Right now I would lean to (when possible)

   1) transition to python3 as default, make the current tests reverse 
sense, e.g. we run what are currently the py3 tests (as python2)

   2) We should additionally add additional duplicate autobuild tasks 
(and CI jobs) to build talloc, tevent, ldb, ctdb, samba-libs, samba-xc 
etc as pure python2 (to make sure we don't break the basic py2 build 
support... these shouldn't add too much extra time, they are just 

   3) We maybe should add extra (but optional) autobuild tasks for those 
remaining  tasks that don't have purepython2 duplicates e.g. 
build_samba, build_ad_dc (etc) and run these on master maybe once or 
twice a week ?

This would give up a good mix of fairly good py2 coverage for normal CI 
and the opportunity for full py2 CI coverage occasionally (on a 
frequency that makes sense) But... yes this will for sure cause issues 
if/when py2 specific problems occur that are detected after the fact :/ 
they will be harder to track down. Anyway it's just a thought


More information about the samba-technical mailing list