diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d45e3a0b..589e466d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,7 +8,7 @@ jobs: strategy: matrix: - os: [ubuntu-18.04, macos-10.15] + os: [ubuntu-20.04, macos-10.15] compiler: [gcc, clang] buildtool: [autotools, cmake] diff --git a/README.rst b/README.rst index 87f6ce4f..c5c2eaa7 100644 --- a/README.rst +++ b/README.rst @@ -112,7 +112,7 @@ libnghttp2_asio C++ library requires the following packages: The Python bindings require the following packages: * cython >= 0.19 -* python >= 2.7 +* python >= 3.8 * python-setuptools If you are using Ubuntu 16.04 LTS (Xenial Xerus) or Debian 8 (jessie) @@ -1422,7 +1422,7 @@ The extension module is called ``nghttp2``. determined by the ``configure`` script. If the detected Python version is not what you expect, specify a path to Python executable in a ``PYTHON`` variable as an argument to configure script (e.g., ``./configure -PYTHON=/usr/bin/python3.5``). +PYTHON=/usr/bin/python3.8``). The following example code illustrates basic usage of the HPACK compressor and decompressor in Python: @@ -1494,7 +1494,7 @@ BaseRequestHandler usage: .. code-block:: python - #!/usr/bin/env python + #!/usr/bin/env python3 import io, ssl import nghttp2 diff --git a/configure.ac b/configure.ac index 001b1abd..a26b4d81 100644 --- a/configure.ac +++ b/configure.ac @@ -151,7 +151,7 @@ AC_PROG_MKDIR_P PKG_PROG_PKG_CONFIG([0.20]) -AM_PATH_PYTHON([2.7],, [:]) +AM_PATH_PYTHON([3.8],, [:]) if [test "x$request_lib_only" = "xyes"]; then request_app=no @@ -161,7 +161,7 @@ if [test "x$request_lib_only" = "xyes"]; then fi if [test "x$request_python_bindings" != "xno"]; then - AX_PYTHON_DEVEL([>= '2.7']) + AX_PYTHON_DEVEL([>= '3.8']) fi if test "x${cython_path}" = "x"; then @@ -567,7 +567,7 @@ enable_python_bindings=no if test "x${request_python_bindings}" != "xno" && test "x${CYTHON}" != "x" && test "x${PYTHON}" != "x:" && - test "x${have_python_dev}" = "xyes"; then + test "x${PYTHON_VERSION}" != "x"; then enable_python_bindings=yes fi @@ -890,9 +890,8 @@ AC_MSG_NOTICE([summary of build options: Python: ${PYTHON} PYTHON_VERSION: ${PYTHON_VERSION} pyexecdir: ${pyexecdir} - Python-dev: ${have_python_dev} PYTHON_CPPFLAGS:${PYTHON_CPPFLAGS} - PYTHON_LDFLAGS: ${PYTHON_LDFLAGS} + PYTHON_LIBS: ${PYTHON_LIBS} Cython: ${CYTHON} Test: CUnit: ${have_cunit} (CFLAGS='${CUNIT_CFLAGS}' LIBS='${CUNIT_LIBS}') diff --git a/doc/sources/python-apiref.rst b/doc/sources/python-apiref.rst index d64b43cc..92fab33f 100644 --- a/doc/sources/python-apiref.rst +++ b/doc/sources/python-apiref.rst @@ -13,7 +13,7 @@ The extension module is called ``nghttp2``. determined by configure script. If the detected Python version is not what you expect, specify a path to Python executable in ``PYTHON`` variable as an argument to configure script (e.g., ``./configure -PYTHON=/usr/bin/python3.5``). +PYTHON=/usr/bin/python3.8``). HPACK API --------- @@ -137,14 +137,14 @@ HTTP/2 servers .. note:: We use :py:mod:`asyncio` for HTTP/2 server classes, and ALPN. - Therefore, Python 3.5 or later is required to use these objects. - To explicitly configure nghttp2 build to use Python 3.5, specify - the ``PYTHON`` variable to the path to Python 3.5 executable when + Therefore, Python 3.8 or later is required to use these objects. + To explicitly configure nghttp2 build to use Python 3.8, specify + the ``PYTHON`` variable to the path to Python 3.8 executable when invoking configure script like this: .. code-block:: text - $ ./configure PYTHON=/usr/bin/python3.5 + $ ./configure PYTHON=/usr/bin/python3.8 .. py:class:: HTTP2Server(address, RequestHandlerClass, ssl=None) @@ -336,7 +336,7 @@ The following example illustrates :py:class:`HTTP2Server` and .. code-block:: python - #!/usr/bin/env python + #!/usr/bin/env python3 import io, ssl @@ -367,7 +367,7 @@ response body generation. This is simplified reverse proxy: .. code-block:: python - #!/usr/bin/env python + #!/usr/bin/env python3 import ssl import os diff --git a/m4/ax_python_devel.m4 b/m4/ax_python_devel.m4 index 067fbcf3..44dbd83e 100644 --- a/m4/ax_python_devel.m4 +++ b/m4/ax_python_devel.m4 @@ -1,5 +1,5 @@ # =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_python_devel.html +# https://www.gnu.org/software/autoconf-archive/ax_python_devel.html # =========================================================================== # # SYNOPSIS @@ -12,8 +12,8 @@ # in your configure.ac. # # This macro checks for Python and tries to get the include path to -# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS) -# output variables. It also exports $(PYTHON_EXTRA_LIBS) and +# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LIBS) output +# variables. It also exports $(PYTHON_EXTRA_LIBS) and # $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code. # # You can search for some particular version of Python by passing a @@ -52,7 +52,7 @@ # Public License for more details. # # You should have received a copy of the GNU General Public License along -# with this program. If not, see . +# with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure @@ -67,7 +67,7 @@ # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. -#serial 16 +#serial 21 AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL]) AC_DEFUN([AX_PYTHON_DEVEL],[ @@ -81,12 +81,10 @@ AC_DEFUN([AX_PYTHON_DEVEL],[ AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]]) if test -z "$PYTHON"; then - AC_MSG_WARN([Cannot find python$PYTHON_VERSION in your system path]) + AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path]) PYTHON_VERSION="" - no_python_devel=yes fi -AS_IF([test -z "$no_python_devel"], [ # # Check for a version of Python >= 2.1.0 # @@ -97,25 +95,22 @@ AS_IF([test -z "$no_python_devel"], [ if test "$ac_supports_python_ver" != "True"; then if test -z "$PYTHON_NOVERSIONCHECK"; then AC_MSG_RESULT([no]) - AC_MSG_WARN([ + AC_MSG_FAILURE([ This version of the AC@&t@_PYTHON_DEVEL macro doesn't work properly with versions of Python before 2.1.0. You may need to re-run configure, setting the -variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG, +variables PYTHON_CPPFLAGS, PYTHON_LIBS, PYTHON_SITE_PKG, PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand. Moreover, to disable this check, set PYTHON_NOVERSIONCHECK to something else than an empty string. ]) - no_python_devel=yes else AC_MSG_RESULT([skip at user request]) fi else AC_MSG_RESULT([yes]) fi -]) # AS_IF -AS_IF([test -z "$no_python_devel"], [ # # if the macro parameter ``version'' is set, honour it # @@ -128,36 +123,30 @@ AS_IF([test -z "$no_python_devel"], [ AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) - AC_MSG_WARN([this package requires Python $1. + AC_MSG_ERROR([this package requires Python $1. If you have it installed, but it isn't the default Python interpreter in your system path, please pass the PYTHON_VERSION variable to configure. See ``configure --help'' for reference. ]) PYTHON_VERSION="" - no_python_devel=yes fi fi -]) # AS_IF -AS_IF([test -z "$no_python_devel"], [ # # Check if you have distutils, else fail # AC_MSG_CHECKING([for the distutils Python package]) ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` - if test -z "$ac_distutils_result"; then + if test $? -eq 0; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) - AC_MSG_WARN([cannot import Python module "distutils". + AC_MSG_ERROR([cannot import Python module "distutils". Please check your Python installation. The error was: $ac_distutils_result]) PYTHON_VERSION="" - no_python_devel=yes fi -]) # AS_IF -AS_IF([test -z "$no_python_devel"], [ # # Check for Python include path # @@ -183,7 +172,7 @@ AS_IF([test -z "$no_python_devel"], [ # Check for Python library path # AC_MSG_CHECKING([for Python library path]) - if test -z "$PYTHON_LDFLAGS"; then + if test -z "$PYTHON_LIBS"; then # (makes two attempts to ensure we've got a version number # from the interpreter) ac_python_version=`cat<