[docwriter] Drop support for Python < 3.5.

Python versions < 3.5 have reached end-of-life and as such, no
security or bug fixes will be provided for those versions.  See

  https://devguide.python.org/#status-of-python-branches

for more information.

* Jamfile (RefDoc): Add `site' parameter.

* builds/detect.mk (std_setup): Update Python version requirement.

* builds/freetype.mk (refdoc-venv): Use pip as `python -m pip'.

* builds/unix/ax_compare_version.m4,
builds/unix/ax_prog_python_version.m4: Macros to detect Python
version.  New files.

* builds/unix/configure.raw: Check for Python >= 3.5 and remove
check for `pip'.

* docs/CHANGES, docs/INSTALL.GNU, docs/README: Updated.
This commit is contained in:
Nikhil Ramakrishnan 2020-03-21 20:17:17 +05:30
parent 6a431038c9
commit 1fd3148713
10 changed files with 303 additions and 29 deletions

View File

@ -1,3 +1,29 @@
2020-03-21 Nikhil Ramakrishnan <ramakrishnan.nikhil@gmail.com>
[docwriter] Drop support for Python < 3.5.
Python versions < 3.5 have reached end-of-life and as such, no
security or bug fixes will be provided for those versions. See
https://devguide.python.org/#status-of-python-branches
for more information.
* Jamfile (RefDoc): Add `site' parameter.
* builds/detect.mk (std_setup): Update Python version requirement.
* builds/freetype.mk (refdoc-venv): Use pip as `python -m pip'.
* builds/unix/ax_compare_version.m4,
builds/unix/ax_prog_python_version.m4: Macros to detect Python
version. New files.
* builds/unix/configure.raw: Check for Python >= 3.5 and remove
check for `pip'.
* docs/CHANGES, docs/INSTALL.GNU, docs/README: Updated.
2020-03-02 Moazin Khatti <moazinkhatri@gmail.com> 2020-03-02 Moazin Khatti <moazinkhatri@gmail.com>
[gzip] Support `gzip' encoded header conditionally. [gzip] Support `gzip' encoded header conditionally.

15
Jamfile
View File

@ -208,13 +208,14 @@ rule RefDoc
actions RefDoc actions RefDoc
{ {
python -m docwriter python3 -m docwriter
--prefix=ft2 --prefix=ft2
--title=FreeType-2.10.1 --title=FreeType-2.10.1
--output=$(DOC_DIR) --site=reference
$(FT2_INCLUDE)/freetype/*.h --output=$(DOC_DIR)
$(FT2_INCLUDE)/freetype/config/*.h $(FT2_INCLUDE)/freetype/*.h
$(FT2_INCLUDE)/freetype/cache/*.h $(FT2_INCLUDE)/freetype/config/*.h
$(FT2_INCLUDE)/freetype/cache/*.h
} }
RefDoc refdoc ; RefDoc refdoc ;

View File

@ -120,7 +120,7 @@ std_setup:
$(info `$(CONFIG_MK)' from this directory then read the INSTALL file for help.) $(info `$(CONFIG_MK)' from this directory then read the INSTALL file for help.)
$(info ) $(info )
$(info Otherwise, simply type `$(MAKE)' again to build the library,) $(info Otherwise, simply type `$(MAKE)' again to build the library,)
$(info or `$(MAKE) refdoc' to build the API reference (this needs python >= 2.6).) $(info or `$(MAKE) refdoc' to build the API reference (this needs Python >= 3.5).)
$(info ) $(info )
@$(COPY) $(subst /,$(SEP),$(CONFIG_RULES) $(CONFIG_MK)) @$(COPY) $(subst /,$(SEP),$(CONFIG_RULES) $(CONFIG_MK))

View File

@ -290,11 +290,8 @@ objects: $(OBJECTS_LIST)
library: $(PROJECT_LIBRARY) library: $(PROJECT_LIBRARY)
# Run `docwriter' in the current Python environment. # Run `docwriter' in the current Python environment.
# Option `-B' disables generation of .pyc files (available since python 2.6)
# #
PYTHON ?= python PYTHON ?= python
PIP ?= pip
refdoc: refdoc:
@echo Running docwriter... @echo Running docwriter...
@ -319,13 +316,12 @@ refdoc:
VENV_NAME := env VENV_NAME := env
VENV_DIR := $(DOC_DIR)$(SEP)$(VENV_NAME) VENV_DIR := $(DOC_DIR)$(SEP)$(VENV_NAME)
ENV_PYTHON := $(VENV_DIR)$(SEP)$(BIN)$(SEP)$(PYTHON) ENV_PYTHON := $(VENV_DIR)$(SEP)$(BIN)$(SEP)$(PYTHON)
ENV_PIP := $(VENV_DIR)$(SEP)$(BIN)$(SEP)$(PIP)
refdoc-venv: refdoc-venv:
@echo Setting up virtualenv for Python... @echo Setting up virtualenv for Python...
virtualenv --python=$(PYTHON) $(VENV_DIR) virtualenv --python=$(PYTHON) $(VENV_DIR)
@echo Installing docwriter... @echo Installing docwriter...
$(ENV_PIP) install docwriter $(ENV_PYTHON) -m pip install docwriter
@echo Running docwriter... @echo Running docwriter...
$(ENV_PYTHON) -m docwriter \ $(ENV_PYTHON) -m docwriter \
--prefix=ft2 \ --prefix=ft2 \

View File

@ -0,0 +1,177 @@
# ===========================================================================
# https://www.gnu.org/software/autoconf-archive/ax_compare_version.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_COMPARE_VERSION(VERSION_A, OP, VERSION_B, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
#
# DESCRIPTION
#
# This macro compares two version strings. Due to the various number of
# minor-version numbers that can exist, and the fact that string
# comparisons are not compatible with numeric comparisons, this is not
# necessarily trivial to do in a autoconf script. This macro makes doing
# these comparisons easy.
#
# The six basic comparisons are available, as well as checking equality
# limited to a certain number of minor-version levels.
#
# The operator OP determines what type of comparison to do, and can be one
# of:
#
# eq - equal (test A == B)
# ne - not equal (test A != B)
# le - less than or equal (test A <= B)
# ge - greater than or equal (test A >= B)
# lt - less than (test A < B)
# gt - greater than (test A > B)
#
# Additionally, the eq and ne operator can have a number after it to limit
# the test to that number of minor versions.
#
# eq0 - equal up to the length of the shorter version
# ne0 - not equal up to the length of the shorter version
# eqN - equal up to N sub-version levels
# neN - not equal up to N sub-version levels
#
# When the condition is true, shell commands ACTION-IF-TRUE are run,
# otherwise shell commands ACTION-IF-FALSE are run. The environment
# variable 'ax_compare_version' is always set to either 'true' or 'false'
# as well.
#
# Examples:
#
# AX_COMPARE_VERSION([3.15.7],[lt],[3.15.8])
# AX_COMPARE_VERSION([3.15],[lt],[3.15.8])
#
# would both be true.
#
# AX_COMPARE_VERSION([3.15.7],[eq],[3.15.8])
# AX_COMPARE_VERSION([3.15],[gt],[3.15.8])
#
# would both be false.
#
# AX_COMPARE_VERSION([3.15.7],[eq2],[3.15.8])
#
# would be true because it is only comparing two minor versions.
#
# AX_COMPARE_VERSION([3.15.7],[eq0],[3.15])
#
# would be true because it is only comparing the lesser number of minor
# versions of the two values.
#
# Note: The characters that separate the version numbers do not matter. An
# empty string is the same as version 0. OP is evaluated by autoconf, not
# configure, so must be a string, not a variable.
#
# The author would like to acknowledge Guido Draheim whose advice about
# the m4_case and m4_ifvaln functions make this macro only include the
# portions necessary to perform the specific comparison specified by the
# OP argument in the final configure script.
#
# LICENSE
#
# Copyright (c) 2008 Tim Toolan <toolan@ele.uri.edu>
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved. This file is offered as-is, without any
# warranty.
#serial 13
dnl #########################################################################
AC_DEFUN([AX_COMPARE_VERSION], [
AC_REQUIRE([AC_PROG_AWK])
# Used to indicate true or false condition
ax_compare_version=false
# Convert the two version strings to be compared into a format that
# allows a simple string comparison. The end result is that a version
# string of the form 1.12.5-r617 will be converted to the form
# 0001001200050617. In other words, each number is zero padded to four
# digits, and non digits are removed.
AS_VAR_PUSHDEF([A],[ax_compare_version_A])
A=`echo "$1" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \
-e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \
-e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \
-e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \
-e 's/[[^0-9]]//g'`
AS_VAR_PUSHDEF([B],[ax_compare_version_B])
B=`echo "$3" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \
-e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \
-e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \
-e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \
-e 's/[[^0-9]]//g'`
dnl # In the case of le, ge, lt, and gt, the strings are sorted as necessary
dnl # then the first line is used to determine if the condition is true.
dnl # The sed right after the echo is to remove any indented white space.
m4_case(m4_tolower($2),
[lt],[
ax_compare_version=`echo "x$A
x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/false/;s/x${B}/true/;1q"`
],
[gt],[
ax_compare_version=`echo "x$A
x$B" | sed 's/^ *//' | sort | sed "s/x${A}/false/;s/x${B}/true/;1q"`
],
[le],[
ax_compare_version=`echo "x$A
x$B" | sed 's/^ *//' | sort | sed "s/x${A}/true/;s/x${B}/false/;1q"`
],
[ge],[
ax_compare_version=`echo "x$A
x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/true/;s/x${B}/false/;1q"`
],[
dnl Split the operator from the subversion count if present.
m4_bmatch(m4_substr($2,2),
[0],[
# A count of zero means use the length of the shorter version.
# Determine the number of characters in A and B.
ax_compare_version_len_A=`echo "$A" | $AWK '{print(length)}'`
ax_compare_version_len_B=`echo "$B" | $AWK '{print(length)}'`
# Set A to no more than B's length and B to no more than A's length.
A=`echo "$A" | sed "s/\(.\{$ax_compare_version_len_B\}\).*/\1/"`
B=`echo "$B" | sed "s/\(.\{$ax_compare_version_len_A\}\).*/\1/"`
],
[[0-9]+],[
# A count greater than zero means use only that many subversions
A=`echo "$A" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"`
B=`echo "$B" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"`
],
[.+],[
AC_WARNING(
[invalid OP numeric parameter: $2])
],[])
# Pad zeros at end of numbers to make same length.
ax_compare_version_tmp_A="$A`echo $B | sed 's/./0/g'`"
B="$B`echo $A | sed 's/./0/g'`"
A="$ax_compare_version_tmp_A"
# Check for equality or inequality as necessary.
m4_case(m4_tolower(m4_substr($2,0,2)),
[eq],[
test "x$A" = "x$B" && ax_compare_version=true
],
[ne],[
test "x$A" != "x$B" && ax_compare_version=true
],[
AC_WARNING([invalid OP parameter: $2])
])
])
AS_VAR_POPDEF([A])dnl
AS_VAR_POPDEF([B])dnl
dnl # Execute ACTION-IF-TRUE / ACTION-IF-FALSE.
if test "$ax_compare_version" = "true" ; then
m4_ifvaln([$4],[$4],[:])dnl
m4_ifvaln([$5],[else $5])dnl
fi
]) dnl AX_COMPARE_VERSION

View File

@ -0,0 +1,66 @@
# ===========================================================================
# https://www.gnu.org/software/autoconf-archive/ax_prog_python_version.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_PROG_PYTHON_VERSION([VERSION],[ACTION-IF-TRUE],[ACTION-IF-FALSE])
#
# DESCRIPTION
#
# Makes sure that python supports the version indicated. If true the shell
# commands in ACTION-IF-TRUE are executed. If not the shell commands in
# ACTION-IF-FALSE are run. Note if $PYTHON is not set (for example by
# running AC_CHECK_PROG or AC_PATH_PROG) the macro will fail.
#
# Example:
#
# AC_PATH_PROG([PYTHON],[python])
# AX_PROG_PYTHON_VERSION([2.4.4],[ ... ],[ ... ])
#
# This will check to make sure that the python you have supports at least
# version 2.4.4.
#
# NOTE: This macro uses the $PYTHON variable to perform the check.
# AX_WITH_PYTHON can be used to set that variable prior to running this
# macro. The $PYTHON_VERSION variable will be valorized with the detected
# version.
#
# LICENSE
#
# Copyright (c) 2009 Francesco Salvestrini <salvestrini@users.sourceforge.net>
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved. This file is offered as-is, without any
# warranty.
#serial 12
AC_DEFUN([AX_PROG_PYTHON_VERSION],[
AC_REQUIRE([AC_PROG_SED])
AC_REQUIRE([AC_PROG_GREP])
AS_IF([test -n "$PYTHON"],[
ax_python_version="$1"
AC_MSG_CHECKING([for python version])
changequote(<<,>>)
python_version=`$PYTHON -V 2>&1 | $GREP "^Python " | $SED -e 's/^.* \([0-9]*\.[0-9]*\.[0-9]*\)/\1/'`
changequote([,])
AC_MSG_RESULT($python_version)
AC_SUBST([PYTHON_VERSION],[$python_version])
AX_COMPARE_VERSION([$ax_python_version],[le],[$python_version],[
:
$2
],[
:
$3
])
],[
AC_MSG_WARN([could not find the python interpreter])
$3
])
])

View File

@ -1012,16 +1012,20 @@ case "$CFLAGS" in
;; ;;
esac esac
# Check for python and docwriter # Check for Python and docwriter
AC_CHECK_PROGS([PYTHON], [python3 python2 python], [missing]) have_py3=no
have_docwriter=no have_docwriter=no
if test "x$PYTHON" != "xmissing"; then PIP=pip
AC_CHECK_PROGS([PIP], [pip3 pip2 pip], [missing])
if test "x$PIP" != "xmissing"; then AC_CHECK_PROGS([PYTHON], [python3 python], [missing])
if test "x$PYTHON" != "xmissing"; then
AX_PROG_PYTHON_VERSION([3.5], [have_py3=yes], [])
if test "x$have_py3" = "xyes"; then
PIP="$PYTHON -m $PIP"
AC_MSG_CHECKING([for \`docwriter' Python module]) AC_MSG_CHECKING([for \`docwriter' Python module])
$PIP show -q docwriter $PYTHON -m docwriter -h > /dev/null 2>&1
if test "x$?" = "x0"; then if test "x$?" = "x0"; then
have_docwriter=yes have_docwriter=yes
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
@ -1191,9 +1195,9 @@ Library configuration:
if test $have_docwriter = no; then if test $have_docwriter = no; then
AC_MSG_NOTICE([ AC_MSG_NOTICE([
Warning: \`make refdoc' will fail since pip package \`docwriter' is not Warning: \`make refdoc' will fail since pip package \`docwriter' is not
installed. To install, run \`$PIP install docwriter', or to use a python installed. To install, run \`$PIP install docwriter', or to use a Python
virtual environment, run \`make refdoc-venv' (requires pip package virtual environment, run \`make refdoc-venv' (requires pip package
\`virtualenv'). \`virtualenv'). These operations require Python >= 3.5.
]) ])
fi fi

View File

@ -12,6 +12,10 @@ CHANGES BETWEEN 2.10.1 and 2.10.2
- Function `FT_Get_Var_Axis_Flags' returned random data for Type 1 - Function `FT_Get_Var_Axis_Flags' returned random data for Type 1
MM fonts. MM fonts.
- Drop support for Python 2 in Freetype's API reference generator
`docwriter' (Python >= 3.5 is required for targets `make refdoc'
and `make refdoc-venv').
====================================================================== ======================================================================

View File

@ -63,7 +63,7 @@ instructions in the file `INSTALL.UNIX' instead.
Otherwise, simply type 'make' again to build the library Otherwise, simply type 'make' again to build the library
or 'make refdoc' to build the API reference (the latter needs or 'make refdoc' to build the API reference (the latter needs
python). Python >= 3.5).
============================================================= =============================================================

View File

@ -1,6 +1,6 @@
After saying `make refdoc' or `make refdoc-venv' the `site/' directory After saying `make refdoc' or `make refdoc-venv' the `site/' directory
contains the FreeType API reference. You need python and pip to make this contains the FreeType API reference. You need Python >= 3.5 and pip to make
target. this target.
There are two ways to generate the documentation: There are two ways to generate the documentation:
@ -13,7 +13,7 @@ There are two ways to generate the documentation:
2. Using `make refdoc-venv' (requires internet access): 2. Using `make refdoc-venv' (requires internet access):
- Ensure `python', `pip' and python package `virtualenv' are available. - Ensure `python', `pip' and Python package `virtualenv' are available.
- Make target with `make refdoc-venv'. - Make target with `make refdoc-venv'.
- This may or may not require internet access every time depending on - This may or may not require internet access every time depending on
pip and system caching. pip and system caching.
@ -25,11 +25,11 @@ Some troubleshooting tips:
* Regularly run `pip install --upgrade docwriter' to check for updates which * Regularly run `pip install --upgrade docwriter' to check for updates which
may include bug fixes. may include bug fixes.
* Ensure that `docwriter' is installed in the same python target that * `Docwriter' does not support Python 2. Ensure that Python >= 3.5 is
`make refdoc' uses (python3/python2/python). installed and available as `python3'/`python'.
* `pip' and `python' may point to different versions of Python. Check using * Ensure that `docwriter' is installed in the same Python target that
`python --version' and `pip --version'. `make refdoc' uses (python3/python).
* If none of this works, send a mail to `freetype-devel@nongnu.org' or file * If none of this works, send a mail to `freetype-devel@nongnu.org' or file
an issue at `https://github.com/freetype/docwriter/issues'. an issue at `https://github.com/freetype/docwriter/issues'.