configure: Require Python >= 3.5
diff mbox series

Message ID 20191016224237.26180-1-ehabkost@redhat.com
State New
Headers show
Series
  • configure: Require Python >= 3.5
Related show

Commit Message

Eduardo Habkost Oct. 16, 2019, 10:42 p.m. UTC
Python 3.5 is the oldest Python version available on our
supported build platforms, and Python 2 end of life will be 3
weeks after the planned release date of QEMU 4.2.0.  Drop Python
2 support from configure completely, and require Python 3.5 or
newer.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 configure              | 18 ++++--------------
 tests/Makefile.include |  5 -----
 2 files changed, 4 insertions(+), 19 deletions(-)

Comments

John Snow Oct. 16, 2019, 10:48 p.m. UTC | #1
On 10/16/19 6:42 PM, Eduardo Habkost wrote:
> Python 3.5 is the oldest Python version available on our
> supported build platforms, and Python 2 end of life will be 3
> weeks after the planned release date of QEMU 4.2.0.  Drop Python
> 2 support from configure completely, and require Python 3.5 or
> newer.
> 
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>

Seems like a good time and place to mention this. Kevin, you require
3.6+ for iotests, which are -- at present -- invoked as part of "make
check".

Do we care? Basically, this just means that iotests won't run for
systems that don't have 3.6+, which would be platforms like Debian 9 --
which is why ehabkost is choosing 3.5 here.

--js

> ---
>  configure              | 18 ++++--------------
>  tests/Makefile.include |  5 -----
>  2 files changed, 4 insertions(+), 19 deletions(-)
> 
> diff --git a/configure b/configure
> index 08ca4bcb46..870657ec7b 100755
> --- a/configure
> +++ b/configure
> @@ -895,9 +895,9 @@ fi
>  : ${install=${INSTALL-install}}
>  # We prefer python 3.x. A bare 'python' is traditionally
>  # python 2.x, but some distros have it as python 3.x, so
> -# we check that before python2
> +# we check that too
>  python=
> -for binary in "${PYTHON-python3}" python python2
> +for binary in "${PYTHON-python3}" python
>  do
>      if has "$binary"
>      then
> @@ -1824,8 +1824,8 @@ 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,7))'; then
> -  error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
> +if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
> +  error_exit "Cannot use '$python', Python >= 3.5 is required." \
>        "Use --python=/path/to/python to specify a supported Python."
>  fi
>  
> @@ -6456,15 +6456,6 @@ if test "$supported_os" = "no"; then
>      echo "us upstream at qemu-devel@nongnu.org."
>  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 < (3,0))'; then
> -  echo
> -  echo "warning: Python 2 support is deprecated" >&2
> -  echo "warning: Python 3 will be required for building future versions of QEMU" >&2
> -  python2="y"
> -fi
> -
>  config_host_mak="config-host.mak"
>  
>  echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
> @@ -7282,7 +7273,6 @@ echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
>  echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
>  echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
>  echo "PYTHON=$python" >> $config_host_mak
> -echo "PYTHON2=$python2" >> $config_host_mak
>  echo "CC=$cc" >> $config_host_mak
>  if $iasl -h > /dev/null 2>&1; then
>    echo "IASL=$iasl" >> $config_host_mak
> diff --git a/tests/Makefile.include b/tests/Makefile.include
> index 3543451ed3..54ee1f0a2f 100644
> --- a/tests/Makefile.include
> +++ b/tests/Makefile.include
> @@ -1137,7 +1137,6 @@ TESTS_RESULTS_DIR=$(BUILD_DIR)/tests/results
>  AVOCADO_SHOW=app
>  AVOCADO_TAGS=$(patsubst %-softmmu,-t arch:%, $(filter %-softmmu,$(TARGET_DIRS)))
>  
> -ifneq ($(PYTHON2),y)
>  $(TESTS_VENV_DIR): $(TESTS_VENV_REQ)
>  	$(call quiet-command, \
>              $(PYTHON) -m venv --system-site-packages $@, \
> @@ -1146,10 +1145,6 @@ $(TESTS_VENV_DIR): $(TESTS_VENV_REQ)
>              $(TESTS_VENV_DIR)/bin/python -m pip -q install -r $(TESTS_VENV_REQ), \
>              PIP, $(TESTS_VENV_REQ))
>  	$(call quiet-command, touch $@)
> -else
> -$(TESTS_VENV_DIR):
> -	$(error "venv directory for tests requires Python 3")
> -endif
>  
>  $(TESTS_RESULTS_DIR):
>  	$(call quiet-command, mkdir -p $@, \
>
Thomas Huth Oct. 17, 2019, 7:56 a.m. UTC | #2
On 17/10/2019 00.48, John Snow wrote:
> 
> 
> On 10/16/19 6:42 PM, Eduardo Habkost wrote:
>> Python 3.5 is the oldest Python version available on our
>> supported build platforms, and Python 2 end of life will be 3
>> weeks after the planned release date of QEMU 4.2.0.  Drop Python
>> 2 support from configure completely, and require Python 3.5 or
>> newer.
>>
>> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> 
> Seems like a good time and place to mention this. Kevin, you require
> 3.6+ for iotests, which are -- at present -- invoked as part of "make
> check".
> 
> Do we care? Basically, this just means that iotests won't run for
> systems that don't have 3.6+, which would be platforms like Debian 9 --
> which is why ehabkost is choosing 3.5 here.

I think it's ok to simply skip the iotests in case we run on a Python
3.5 system.

 Thomas
Daniel P. Berrangé Oct. 17, 2019, 8:55 a.m. UTC | #3
On Wed, Oct 16, 2019 at 06:48:34PM -0400, John Snow wrote:
> 
> 
> On 10/16/19 6:42 PM, Eduardo Habkost wrote:
> > Python 3.5 is the oldest Python version available on our
> > supported build platforms, and Python 2 end of life will be 3
> > weeks after the planned release date of QEMU 4.2.0.  Drop Python
> > 2 support from configure completely, and require Python 3.5 or
> > newer.
> > 
> > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> 
> Seems like a good time and place to mention this. Kevin, you require
> 3.6+ for iotests, which are -- at present -- invoked as part of "make
> check".
> 
> Do we care? Basically, this just means that iotests won't run for
> systems that don't have 3.6+, which would be platforms like Debian 9 --
> which is why ehabkost is choosing 3.5 here.

Depends what the reason for pickin 3.6 was ?  Is it really compelling
for iotests to require 3.6, or is it easy to support 3.5.  I think in
general it is desirable to have a consistent story across the codebase
for min versions


Regards,
Daniel
Kevin Wolf Oct. 17, 2019, 11:21 a.m. UTC | #4
Am 17.10.2019 um 00:48 hat John Snow geschrieben:
> 
> 
> On 10/16/19 6:42 PM, Eduardo Habkost wrote:
> > Python 3.5 is the oldest Python version available on our
> > supported build platforms, and Python 2 end of life will be 3
> > weeks after the planned release date of QEMU 4.2.0.  Drop Python
> > 2 support from configure completely, and require Python 3.5 or
> > newer.
> > 
> > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> 
> Seems like a good time and place to mention this. Kevin, you require
> 3.6+ for iotests, which are -- at present -- invoked as part of "make
> check".
> 
> Do we care? Basically, this just means that iotests won't run for
> systems that don't have 3.6+, which would be platforms like Debian 9 --
> which is why ehabkost is choosing 3.5 here.

I think we were aware of this when we made the change to iotests. That
all tests of the current upstream QEMU version are run on Debian
oldstable (with the distro Python version) is, to say the least, not a
priority for me. They must not fail, but I'd say skipping is fine.

And actually, we should still have a reasonable coverage there with the
shell-based test cases.

Kevin
John Snow Oct. 17, 2019, 7:39 p.m. UTC | #5
On 10/17/19 7:21 AM, Kevin Wolf wrote:
> Am 17.10.2019 um 00:48 hat John Snow geschrieben:
>>
>>
>> On 10/16/19 6:42 PM, Eduardo Habkost wrote:
>>> Python 3.5 is the oldest Python version available on our
>>> supported build platforms, and Python 2 end of life will be 3
>>> weeks after the planned release date of QEMU 4.2.0.  Drop Python
>>> 2 support from configure completely, and require Python 3.5 or
>>> newer.
>>>
>>> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
>>
>> Seems like a good time and place to mention this. Kevin, you require
>> 3.6+ for iotests, which are -- at present -- invoked as part of "make
>> check".
>>
>> Do we care? Basically, this just means that iotests won't run for
>> systems that don't have 3.6+, which would be platforms like Debian 9 --
>> which is why ehabkost is choosing 3.5 here.
> 
> I think we were aware of this when we made the change to iotests. That
> all tests of the current upstream QEMU version are run on Debian
> oldstable (with the distro Python version) is, to say the least, not a
> priority for me. They must not fail, but I'd say skipping is fine.
> 
> And actually, we should still have a reasonable coverage there with the
> shell-based test cases.
> 
> Kevin
> 

This seems like a weirdly arbitrary decision for a benefit that's not
clear to me. Is it because you want variable annotations?

(Well, regardless, you're the ranger in charge of this forest.)
Kevin Wolf Oct. 18, 2019, 8:15 a.m. UTC | #6
Am 17.10.2019 um 21:39 hat John Snow geschrieben:
> On 10/17/19 7:21 AM, Kevin Wolf wrote:
> > Am 17.10.2019 um 00:48 hat John Snow geschrieben:
> >> On 10/16/19 6:42 PM, Eduardo Habkost wrote:
> >>> Python 3.5 is the oldest Python version available on our
> >>> supported build platforms, and Python 2 end of life will be 3
> >>> weeks after the planned release date of QEMU 4.2.0.  Drop Python
> >>> 2 support from configure completely, and require Python 3.5 or
> >>> newer.
> >>>
> >>> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> >>
> >> Seems like a good time and place to mention this. Kevin, you require
> >> 3.6+ for iotests, which are -- at present -- invoked as part of "make
> >> check".
> >>
> >> Do we care? Basically, this just means that iotests won't run for
> >> systems that don't have 3.6+, which would be platforms like Debian 9 --
> >> which is why ehabkost is choosing 3.5 here.
> > 
> > I think we were aware of this when we made the change to iotests. That
> > all tests of the current upstream QEMU version are run on Debian
> > oldstable (with the distro Python version) is, to say the least, not a
> > priority for me. They must not fail, but I'd say skipping is fine.
> > 
> > And actually, we should still have a reasonable coverage there with the
> > shell-based test cases.
> 
> This seems like a weirdly arbitrary decision for a benefit that's not
> clear to me. Is it because you want variable annotations?

Yes, the discussion about type annotations is what made me check whether
we could do 3.6, because if we want to make use of type checking, we'll
need it for both functions and variables to get reasonable results.

And actually, we currently don't have any Python tests in the auto
group, so the only effect is for people manually running ./check on
Debian oldstable. I'm not sure, but I suspect this might be the empty
set.

Kevin
John Snow Oct. 18, 2019, 9:05 p.m. UTC | #7
On 10/18/19 4:15 AM, Kevin Wolf wrote:
> Am 17.10.2019 um 21:39 hat John Snow geschrieben:
>> On 10/17/19 7:21 AM, Kevin Wolf wrote:
>>> Am 17.10.2019 um 00:48 hat John Snow geschrieben:
>>>> On 10/16/19 6:42 PM, Eduardo Habkost wrote:
>>>>> Python 3.5 is the oldest Python version available on our
>>>>> supported build platforms, and Python 2 end of life will be 3
>>>>> weeks after the planned release date of QEMU 4.2.0.  Drop Python
>>>>> 2 support from configure completely, and require Python 3.5 or
>>>>> newer.
>>>>>
>>>>> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
>>>>
>>>> Seems like a good time and place to mention this. Kevin, you require
>>>> 3.6+ for iotests, which are -- at present -- invoked as part of "make
>>>> check".
>>>>
>>>> Do we care? Basically, this just means that iotests won't run for
>>>> systems that don't have 3.6+, which would be platforms like Debian 9 --
>>>> which is why ehabkost is choosing 3.5 here.
>>>
>>> I think we were aware of this when we made the change to iotests. That
>>> all tests of the current upstream QEMU version are run on Debian
>>> oldstable (with the distro Python version) is, to say the least, not a
>>> priority for me. They must not fail, but I'd say skipping is fine.
>>>
>>> And actually, we should still have a reasonable coverage there with the
>>> shell-based test cases.
>>
>> This seems like a weirdly arbitrary decision for a benefit that's not
>> clear to me. Is it because you want variable annotations?
> 
> Yes, the discussion about type annotations is what made me check whether
> we could do 3.6, because if we want to make use of type checking, we'll
> need it for both functions and variables to get reasonable results.
> 
> And actually, we currently don't have any Python tests in the auto
> group, so the only effect is for people manually running ./check on
> Debian oldstable. I'm not sure, but I suspect this might be the empty
> set.
> 
> Kevin
> 

It would have an effect on `make docker-test-block@debian-amd64" I
think, but I guess nobody runs that right now.

Well, alright.

--js
John Snow Oct. 18, 2019, 9:07 p.m. UTC | #8
On 10/16/19 6:42 PM, Eduardo Habkost wrote:
> Python 3.5 is the oldest Python version available on our
> supported build platforms, and Python 2 end of life will be 3
> weeks after the planned release date of QEMU 4.2.0.  Drop Python
> 2 support from configure completely, and require Python 3.5 or
> newer.
> 

Which distributions constrain us to 3.5 right now? I know Debian9 is one
of them, but I'm not sure what others exist.

I know I went through and checked a month ago, but I'm very smart and
didn't write it down.

It might be nice to document (somewhere) so we know when we can require
something newer than 3.5 at the next major deprecation event.

> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>


Reviewed-by: John Snow <jsnow@redhat.com>

Thanks!

> ---
>  configure              | 18 ++++--------------
>  tests/Makefile.include |  5 -----
>  2 files changed, 4 insertions(+), 19 deletions(-)
> 
> diff --git a/configure b/configure
> index 08ca4bcb46..870657ec7b 100755
> --- a/configure
> +++ b/configure
> @@ -895,9 +895,9 @@ fi
>  : ${install=${INSTALL-install}}
>  # We prefer python 3.x. A bare 'python' is traditionally
>  # python 2.x, but some distros have it as python 3.x, so
> -# we check that before python2
> +# we check that too
>  python=
> -for binary in "${PYTHON-python3}" python python2
> +for binary in "${PYTHON-python3}" python
>  do
>      if has "$binary"
>      then
> @@ -1824,8 +1824,8 @@ 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,7))'; then
> -  error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
> +if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
> +  error_exit "Cannot use '$python', Python >= 3.5 is required." \
>        "Use --python=/path/to/python to specify a supported Python."
>  fi
>  
> @@ -6456,15 +6456,6 @@ if test "$supported_os" = "no"; then
>      echo "us upstream at qemu-devel@nongnu.org."
>  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 < (3,0))'; then
> -  echo
> -  echo "warning: Python 2 support is deprecated" >&2
> -  echo "warning: Python 3 will be required for building future versions of QEMU" >&2
> -  python2="y"
> -fi
> -
>  config_host_mak="config-host.mak"
>  
>  echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
> @@ -7282,7 +7273,6 @@ echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
>  echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
>  echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
>  echo "PYTHON=$python" >> $config_host_mak
> -echo "PYTHON2=$python2" >> $config_host_mak
>  echo "CC=$cc" >> $config_host_mak
>  if $iasl -h > /dev/null 2>&1; then
>    echo "IASL=$iasl" >> $config_host_mak
> diff --git a/tests/Makefile.include b/tests/Makefile.include
> index 3543451ed3..54ee1f0a2f 100644
> --- a/tests/Makefile.include
> +++ b/tests/Makefile.include
> @@ -1137,7 +1137,6 @@ TESTS_RESULTS_DIR=$(BUILD_DIR)/tests/results
>  AVOCADO_SHOW=app
>  AVOCADO_TAGS=$(patsubst %-softmmu,-t arch:%, $(filter %-softmmu,$(TARGET_DIRS)))
>  
> -ifneq ($(PYTHON2),y)
>  $(TESTS_VENV_DIR): $(TESTS_VENV_REQ)
>  	$(call quiet-command, \
>              $(PYTHON) -m venv --system-site-packages $@, \
> @@ -1146,10 +1145,6 @@ $(TESTS_VENV_DIR): $(TESTS_VENV_REQ)
>              $(TESTS_VENV_DIR)/bin/python -m pip -q install -r $(TESTS_VENV_REQ), \
>              PIP, $(TESTS_VENV_REQ))
>  	$(call quiet-command, touch $@)
> -else
> -$(TESTS_VENV_DIR):
> -	$(error "venv directory for tests requires Python 3")
> -endif
>  
>  $(TESTS_RESULTS_DIR):
>  	$(call quiet-command, mkdir -p $@, \
>
Eduardo Habkost Oct. 18, 2019, 9:14 p.m. UTC | #9
On Fri, Oct 18, 2019 at 05:07:36PM -0400, John Snow wrote:
> 
> 
> On 10/16/19 6:42 PM, Eduardo Habkost wrote:
> > Python 3.5 is the oldest Python version available on our
> > supported build platforms, and Python 2 end of life will be 3
> > weeks after the planned release date of QEMU 4.2.0.  Drop Python
> > 2 support from configure completely, and require Python 3.5 or
> > newer.
> > 
> 
> Which distributions constrain us to 3.5 right now? I know Debian9 is one
> of them, but I'm not sure what others exist.
> 
> I know I went through and checked a month ago, but I'm very smart and
> didn't write it down.
> 
> It might be nice to document (somewhere) so we know when we can require
> something newer than 3.5 at the next major deprecation event.

I've summarized the release dates and Python version information I
could find here: https://wiki.qemu.org/Supported_Build_Platforms

> 
> > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> 
> 
> Reviewed-by: John Snow <jsnow@redhat.com>

Thanks!
John Snow Oct. 18, 2019, 9:18 p.m. UTC | #10
On 10/18/19 5:14 PM, Eduardo Habkost wrote:
> On Fri, Oct 18, 2019 at 05:07:36PM -0400, John Snow wrote:
>>
>>
>> On 10/16/19 6:42 PM, Eduardo Habkost wrote:
>>> Python 3.5 is the oldest Python version available on our
>>> supported build platforms, and Python 2 end of life will be 3
>>> weeks after the planned release date of QEMU 4.2.0.  Drop Python
>>> 2 support from configure completely, and require Python 3.5 or
>>> newer.
>>>
>>
>> Which distributions constrain us to 3.5 right now? I know Debian9 is one
>> of them, but I'm not sure what others exist.
>>
>> I know I went through and checked a month ago, but I'm very smart and
>> didn't write it down.
>>
>> It might be nice to document (somewhere) so we know when we can require
>> something newer than 3.5 at the next major deprecation event.
> 
> I've summarized the release dates and Python version information I
> could find here: https://wiki.qemu.org/Supported_Build_Platforms
> 

You are an ABSOLUTE CHAMPION. Thank you so much!

Patch
diff mbox series

diff --git a/configure b/configure
index 08ca4bcb46..870657ec7b 100755
--- a/configure
+++ b/configure
@@ -895,9 +895,9 @@  fi
 : ${install=${INSTALL-install}}
 # We prefer python 3.x. A bare 'python' is traditionally
 # python 2.x, but some distros have it as python 3.x, so
-# we check that before python2
+# we check that too
 python=
-for binary in "${PYTHON-python3}" python python2
+for binary in "${PYTHON-python3}" python
 do
     if has "$binary"
     then
@@ -1824,8 +1824,8 @@  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,7))'; then
-  error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
+if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
+  error_exit "Cannot use '$python', Python >= 3.5 is required." \
       "Use --python=/path/to/python to specify a supported Python."
 fi
 
@@ -6456,15 +6456,6 @@  if test "$supported_os" = "no"; then
     echo "us upstream at qemu-devel@nongnu.org."
 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 < (3,0))'; then
-  echo
-  echo "warning: Python 2 support is deprecated" >&2
-  echo "warning: Python 3 will be required for building future versions of QEMU" >&2
-  python2="y"
-fi
-
 config_host_mak="config-host.mak"
 
 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
@@ -7282,7 +7273,6 @@  echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
 echo "PYTHON=$python" >> $config_host_mak
-echo "PYTHON2=$python2" >> $config_host_mak
 echo "CC=$cc" >> $config_host_mak
 if $iasl -h > /dev/null 2>&1; then
   echo "IASL=$iasl" >> $config_host_mak
diff --git a/tests/Makefile.include b/tests/Makefile.include
index 3543451ed3..54ee1f0a2f 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -1137,7 +1137,6 @@  TESTS_RESULTS_DIR=$(BUILD_DIR)/tests/results
 AVOCADO_SHOW=app
 AVOCADO_TAGS=$(patsubst %-softmmu,-t arch:%, $(filter %-softmmu,$(TARGET_DIRS)))
 
-ifneq ($(PYTHON2),y)
 $(TESTS_VENV_DIR): $(TESTS_VENV_REQ)
 	$(call quiet-command, \
             $(PYTHON) -m venv --system-site-packages $@, \
@@ -1146,10 +1145,6 @@  $(TESTS_VENV_DIR): $(TESTS_VENV_REQ)
             $(TESTS_VENV_DIR)/bin/python -m pip -q install -r $(TESTS_VENV_REQ), \
             PIP, $(TESTS_VENV_REQ))
 	$(call quiet-command, touch $@)
-else
-$(TESTS_VENV_DIR):
-	$(error "venv directory for tests requires Python 3")
-endif
 
 $(TESTS_RESULTS_DIR):
 	$(call quiet-command, mkdir -p $@, \