From 783ac3513030b6006d117f156cfc068148757bcf Mon Sep 17 00:00:00 2001 From: ng0 Date: Thu, 14 Feb 2019 16:41:09 +0000 Subject: [PATCH] Switch to python3.7 (integration-tests incomplete), continue using python2.7 for gnunet-qr with an incredible annoying workaround for autotools inability to deal with 2 major python versions at the same time Signed-off-by: ng0 --- bootstrap | 40 ++++++++++++++++++++++++++++++++++++++++ configure.ac | 13 ++++++++----- src/util/.gitignore | 1 + src/util/Makefile.am | 4 +++- src/util/gnunet-qr.py.in | 2 +- 5 files changed, 53 insertions(+), 7 deletions(-) diff --git a/bootstrap b/bootstrap index 3155cff61..8fb025599 100755 --- a/bootstrap +++ b/bootstrap @@ -19,3 +19,43 @@ else echo "*** No libtoolize (libtool) or libtool found, please install it ***" >&2; exit 1 fi + +# autotools is being incredible stupid with multiple python versions +# what we do here is check for a functional python 2.7 which reports +# back to be a real python 2.7, then later on sed the location in +# the only python 2.7 file we keep around +# the rest of the build system can then be happy detecting 3.7 or +# higher +# this checks a range of names which is as annoying as what autotools +# is doing +# Since everything we could try is do too much work, we will assume +# that python2 OR python2.7 are the names for python 2.7. +# If your system diverges, please sed it accordingly! +echo "save python 2.7 location into src/util/python27_location" +#if existence python2 || existence python2.7; then +# echo command -v +python_version() +{ + "$1" -c "print(__import__('sys').version)" | grep -Z "2.7" | cut -c1-3 +} + +if existence python; then + if [ ! -z "${python_version} python" ]; then + loc1=$(command -v python) + echo "$loc1" >./src/util/python27_location + fi +elif existence python2; then + if [ ! -z "${python_version} python2" ]; then + loc2=$(command -v python2) + echo "$loc2" >./src/util/python27_location + fi +elif existence python2.7; then + if [ ! -z "${python_version} python2.7" ]; then + loc3=$(command -v python2.7) + echo "$loc3" >./src/util/python27_location + fi +else + echo "*** No python 2.7 binary found, please install it" >&2 + echo "*** for the optional gnunet-qr to work." >&2 + echo "*** Make sure to install a matching python future module." >&2 +fi diff --git a/configure.ac b/configure.ac index f53d65006..5f10599be 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ # This file is part of GNUnet. -# (C) 2001--2018 GNUnet e.V. +# (C) 2001--2019 GNUnet e.V. # # GNUnet is free software: you can redistribute it and/or modify it # under the terms of the GNU Affero General Public License as published @@ -206,6 +206,13 @@ AM_CONDITIONAL(HAVE_SSH_BINARY, $VAR_SSH_BINARY) AM_CONDITIONAL(HAVE_SSH_KEY, ssh -D 12345 -o "BatchMode yes" -o "UserKnownHostsFile /tmp/gnunet_test_cosks_ssh_garbage" -o "StrictHostKeyChecking no" 127.0.0.1 echo -n) rm -f /tmp/gnunet_test_cosks_ssh_garbage +# autotools' m4 for python has no maximum version! +# python3.7 for tests +m4_define_default([_AM_PYTHON_INTERPRETER_LIST],[python3 python3.7 python]) +AM_PATH_PYTHON([3.7],, [:]) +AC_SUBST([PYTHON]) +AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :]) + # iptables is a soft requirement to run tests AC_PATH_TARGET_TOOL(VAR_IPTABLES_BINARY, iptables, false) @@ -1208,10 +1215,6 @@ AM_CONDITIONAL(HAVE_JSON, [test x$jansson = x1]) # restore LIBS LIBS=$SAVE_LIBS -# check for python & pexpect (used for some testcases only) -AM_PATH_PYTHON([2.6],, [:]) -AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :]) - # check for gettext AM_GNU_GETTEXT([external]) AM_GNU_GETTEXT_VERSION([0.18.1]) diff --git a/src/util/.gitignore b/src/util/.gitignore index 7b190ca76..dfa6c7947 100644 --- a/src/util/.gitignore +++ b/src/util/.gitignore @@ -73,3 +73,4 @@ test_hexcoder test_regex test_tun gnunet-timeout +python27_location diff --git a/src/util/Makefile.am b/src/util/Makefile.am index fd00b077d..1e82ec73a 100644 --- a/src/util/Makefile.am +++ b/src/util/Makefile.am @@ -226,7 +226,9 @@ gnunet_timeout_SOURCES = \ endif -do_subst = $(SED) -e 's,[@]PYTHON[@],$(PYTHON),g' +mypython27=$(shell cat $(top_srcdir)/src/util/python27_location) + +do_subst = $(SED) -e 's,[@]PYTHON2[@],${mypython27},g' gnunet-qr: gnunet-qr.py.in Makefile $(do_subst) < $(top_srcdir)/src/util/gnunet-qr.py.in > gnunet-qr diff --git a/src/util/gnunet-qr.py.in b/src/util/gnunet-qr.py.in index 6c9d208f7..0d52bed53 100755 --- a/src/util/gnunet-qr.py.in +++ b/src/util/gnunet-qr.py.in @@ -1,4 +1,4 @@ -#!@PYTHON@ +#!@PYTHON2@ from __future__ import print_function from builtins import str import sys -- 2.25.1