[NEW] lang/tauthon: Backwards-compatible fork of Python 2.7 interpreter with Python 3.x features

------------------------------------------------------------------------------
Note this is not fully connected yet, and needs further changes to integrate
with flavors, addition to Mk/Uses/python.mk (or some equivalent USES=tauthon)
that may need discussion first, for instance, on the package name prefix.

This is committed to serve as a common test bed and for experimentation.
------------------------------------------------------------------------------

Maintainer:	olce.freebsd.ports@certner.fr (Olivier Certner)

Tauthon is a backward-compatible fork of Python's 2.7.18 interpreter with new
syntax, builtins, and libraries backported from Python 3.x.

Python code and C-extensions targeting Python 2.7 or below are expected to run
unmodified on Tauthon and produce the same output. But with Tauthon, that code
can now use some of the new features from Python 3.x.

This is not an official Python release. Because of its new features, while
preserving 2.7 compatibility, Tauthon reports 2.8 as its major/minor versions.

Non-exhaustive list of new features:
- Function Annotations
- Keyword-Only Arguments
- "async" and "await" Syntax
- Argument-less "super"
- New Metaclass Syntax
- "nonlocal"
- "yield from" Syntax
- "concurrent.futures" Module
- UTF-8 as the default source encoding

WWW: https://github.com/naftaliharris/tauthon

(Committed with minor changes over submission, particularly a few reorderings
in Makefile to appease portlint -CA.)

PR:		251019
Submitted by:	Olivier Certner (maintainer)
This commit is contained in:
Matthias Andree 2020-12-11 08:44:45 +00:00
parent 4235908981
commit 46ce70a6d4
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=557705
17 changed files with 5277 additions and 0 deletions

View File

@ -344,6 +344,7 @@
SUBDIR += squeak SUBDIR += squeak
SUBDIR += squirrel SUBDIR += squirrel
SUBDIR += swi-pl SUBDIR += swi-pl
SUBDIR += tauthon
SUBDIR += tcbasic SUBDIR += tcbasic
SUBDIR += tcc SUBDIR += tcc
SUBDIR += tcl-manual SUBDIR += tcl-manual

176
lang/tauthon/Makefile Normal file
View File

@ -0,0 +1,176 @@
# $FreeBSD$
# This Makefile was copied from lang/python27 and then gradually
# adapted/cleaned-up for Tauthon.
# As for lang/python27, some core modules with extraneous dependencies are
# disabled, and should be made available in other ports if the need arises (see
# 'pkg-message').
# -- Olivier Certner <olce.freebsd.ports@certner.fr>
PORTNAME= tauthon
DISTVERSION= 2.8.2
CATEGORIES= lang python
MAINTAINER= olce.freebsd.ports@certner.fr
COMMENT= Backward-compatible fork of Python 2.7 interpreter with Python 3.x features
LICENSE= PSFL
USES= pathfix shebangfix autoreconf ncurses pkgconfig readline:port ssl tar:xz
PATHFIX_MAKEFILEIN= Makefile.pre.in
USE_GITHUB= yes
GH_ACCOUNT= naftaliharris
GH_PROJECT= tauthon
GH_TAGNAME= v${DISTVERSION}
USE_LDCONFIG= yes
# Piggyback on Python support in shebangfix
python_CMD= ${PREFIX}/bin/${NAME_VERSION}
# Better be safe than sorry
.for _DIRS in Demo/cgi Demo/comparisons Demo/curses Demo/parser Demo/pdist \
Demo/pysvr Demo/scripts Demo/sockets Demo/tkinter/guido Demo/turtle \
Demo/zlib Doc/includes Doc/tools Lib Lib/encodings Lib/ensurepip \
Lib/idlelib Lib/lib2to3/pgen2 Lib/lib2to3/tests \
Lib/lib2to3/tests/data Lib/plat-mac Lib/test Lib/test/crashers \
Mac/BuildScript Mac/scripts Mac/Tools Modules/_ctypes/libffi \
Parser PCbuild Python Tools/compiler Tools/faqwiz Tools/freeze \
Tools/gdb Tools/i18n Tools/nuget Tools/pybench Tools/scripts \
Tools/ssl Tools/unicode Tools/webchecker
SHEBANG_FILES+= ${_DIRS}/*.py
.endfor
GNU_CONFIGURE= yes
CONFIGURE_ARGS+= --enable-shared
CONFIGURE_ENV+= ac_cv_opt_olimit_ok=no OPT="" # Null out OPT to respect user CFLAGS and remove optimizations
INSTALL_TARGET= altinstall # Don't want cloberring of unprefixed files
TEST_TARGET= buildbottest
TEST_ARGS= TESTOPTS=-j${MAKE_JOBS_NUMBER}
MAKE_ARGS+= INSTALL_SHARED="${INSTALL_LIB}" # Strip shared library
PLIST_SUB= ABI=${ABIFLAGS} \
PORTVERSION=${PORTVERSION} \
VERSION_NOMICRO=${VERSION_NOMICRO} \
OSMAJOR=${OSVERSION:C/([0-9]*)[0-9]{5}/\1/} # For plat-freebsd* in pkg-plist. https://bugs.python.org/issue19554
OPTIONS_DEFINE= DEBUG IPV6 LIBFFI LTO NLS OPTIMIZATIONS PYMALLOC THREADS
OPTIONS_DEFAULT= LIBFFI PYMALLOC THREADS UCS4
OPTIONS_SINGLE= UNICODE
OPTIONS_SINGLE_UNICODE= UCS2 UCS4
OPTIONS_SUB= yes
LIBFFI_DESC= Use libffi from ports instead of bundled version
LTO_DESC= Apply Link-Time Optimizations (needs OPTIMIZATIONS)
NLS_DESC= Enable gettext support for the locale module
OPTIMIZATIONS_DESC= Enable code optimizations and PGO (BROKEN)
UCS2_DESC= Enable UCS2 Unicode Strings
UCS4_DESC= Enable UCS4 Unicode Strings
PYMALLOC_DESC= Enable specialized mallocs
DEBUG_CONFIGURE_WITH= pydebug
IPV6_CONFIGURE_ENABLE= ipv6
LIBFFI_CONFIGURE_WITH= system-ffi
LIBFFI_LIB_DEPENDS= libffi.so:devel/libffi
LTO_IMPLIES= OPTIMIZATIONS
LTO_CONFIGURE_WITH= lto
# Use CPPFLAGS over CFLAGS due to -I ordering, causing elementtree and pyexpat
# to break in Python 2.7, or preprocessor complaints in Python >= 3.3
# Upstream Issue: https://bugs.python.org/issue6299
NLS_USES= gettext
NLS_CPPFLAGS= -I${LOCALBASE}/include
NLS_LIBS= -L${LOCALBASE}/lib -lintl
NLS_CONFIGURE_ENV_OFF= ac_cv_lib_intl_textdomain=no ac_cv_header_libintl_h=no
OPTIMIZATIONS_CONFIGURE_ENABLE= optimizations
OPTIMIZATIONS_BROKEN= Please disable OPTIMIZATIONS option for now\
(some tests fail and no PGO profile is computed)
PYMALLOC_CONFIGURE_WITH=pymalloc
THREADS_CONFIGURE_WITH= threads
THREADS_LDFLAGS= -lpthread
UCS2_CONFIGURE_ENABLE= unicode=ucs2
UCS4_CONFIGURE_ENABLE= unicode=ucs4
PYTHON_PORTVERSION= ${DISTVERSION}
VERSION_NOMICRO= ${DISTVERSION:R}
NAME_VERSION= tauthon${VERSION_NOMICRO}
.include <bsd.port.options.mk>
# https://bugs.python.org/issue22521
# https://bugs.python.org/issue23042
.if !${PORT_OPTIONS:MLIBFFI} && ${ARCH} == i386
BROKEN= You must use libffi from ports on i386. Enable the LIBFFI option
.endif
.if ${ARCH} == i386
PLIST_SUB+= X86_ONLY=""
.else
PLIST_SUB+= X86_ONLY="@comment "
.endif
.if ${ARCH:M*64*}
PLIST_SUB+= 32BIT_ONLY="@comment "
.else
PLIST_SUB+= 32BIT_ONLY=""
.endif
.if ${ARCH} == powerpc64
MAKE_ENV+= UNAME_m="powerpc64"
.endif
.if ${ARCH} == sparc64
CFLAGS+= -DPYTHON_DEFAULT_RECURSION_LIMIT=900
.endif
# See https://bugs.freebsd.org/115940 and https://bugs.freebsd.org/193650
.if !exists(/usr/bin/ypcat) || defined(WITHOUT_NIS)
PLIST_SUB+= NO_NIS="@comment "
.else
PLIST_SUB+= NO_NIS=""
.endif
post-patch:
@${REINPLACE_CMD} -e 's|/usr/local/bin/python|${python_CMD}|' \
${WRKSRC}/Lib/cgi.py
.if !exists(/usr/bin/ypcat) || defined(WITHOUT_NIS)
@${REINPLACE_CMD} -e 's/disabled_module_list =[^]]*/&, "nis"/' \
${WRKSRC}/setup.py
.endif
post-install:
# Create symlink for tauthon executable
${RLN} ${STAGEDIR}${PREFIX}/bin/${NAME_VERSION} \
${STAGEDIR}${PREFIX}/bin/tauthon
# Strip shared extensions
for i in ${STAGEDIR}${PREFIX}/lib/${NAME_VERSION}/lib-dynload/*.so; do \
${STRIP_CMD} $$i; done
# This code block exists for the qemu-user enabled cross build environment.
# When using this environment in poudriere, CC is not set to the default
# of /usr/bin/cc and a cross-compile toolchain is used. We need to hand
# edit this so that the run time configuration for python matches what the
# FreeBSD base system provides. sbruno 02Aug2017
.if ${CC} == /nxb-bin/usr/bin/cc
@${REINPLACE_CMD} -e 's=/nxb-bin==' \
${STAGEDIR}${PREFIX}/lib/${NAME_VERSION}/_sysconfigdata.py
@cd ${WRKSRC} && ${SETENV} LD_LIBRARY_PATH=${WRKSRC} \
./tauthon -E -m compileall -d ${PREFIX}/lib/${NAME_VERSION} \
${STAGEDIR}${PREFIX}/lib/${NAME_VERSION}/_sysconfigdata.py
@cd ${WRKSRC} && ${SETENV} LD_LIBRARY_PATH=${WRKSRC} \
./tauthon -E -O -m compileall -d ${PREFIX}/lib/${NAME_VERSION} \
${STAGEDIR}${PREFIX}/lib/${NAME_VERSION}/_sysconfigdata.py
@${REINPLACE_CMD} -e 's=/nxb-bin==' \
${STAGEDIR}${PREFIX}/lib/${NAME_VERSION}/config/Makefile
.endif
${INSTALL_DATA} ${WRKSRC}/Tools/gdb/libpython.py \
${STAGEDIR}${PREFIX}/lib/lib${NAME_VERSION}.so.1-gdb.py
.include <bsd.port.mk>

3
lang/tauthon/distinfo Normal file
View File

@ -0,0 +1,3 @@
TIMESTAMP = 1604584539
SHA256 (naftaliharris-tauthon-2.8.2-v2.8.2_GH0.tar.gz) = 9423756fcb0afb652ae1ce3c7f0ac195e731e3a4f535a703991cf76bcb3ce267
SIZE (naftaliharris-tauthon-2.8.2-v2.8.2_GH0.tar.gz) = 17701363

View File

@ -0,0 +1,10 @@
--- ./Doc/library/fcntl.rst.orig 2014-07-03 21:53:41.473098625 +1000
+++ ./Doc/library/fcntl.rst 2014-07-03 21:54:04.342833056 +1000
@@ -50,7 +50,6 @@ The module defines the following functio
operations are typically defined in the library module :mod:`termios` and the
argument handling is even more complicated.
- The op parameter is limited to values that can fit in 32-bits.
Additional constants of interest for use as the *op* argument can be
found in the :mod:`termios` module, under the same names as used in
the relevant C header files.

View File

@ -0,0 +1,17 @@
# Description: A non-invasive partial backport of the Python3 distutils behaviour.
# This allows Python's scripts to be properly suffixed (similar to Python 3.x) on
# installation.
# Submitted by: mva
--- Lib/distutils/command/build_scripts.py.orig 2014-07-26 09:52:20.000000000 UTC
+++ Lib/distutils/command/build_scripts.py 2014-07-26 09:52:56.000000000 UTC
@@ -126,6 +126,9 @@ class build_scripts (Command):
file, oldmode, newmode)
os.chmod(file, newmode)
+ # XXX should we modify self.outfiles?
+ return outfiles
+
# copy_scripts ()
# class build_scripts

View File

@ -0,0 +1,34 @@
From 9934ce31b8447667f71c211e559a8de71e8263db Mon Sep 17 00:00:00 2001
From: Brendan Molloy <brendan@bbqsrc.net>
Date: Mon, 4 Jan 2016 23:14:06 +1100
Subject: [PATCH] Check bytecode file actually exists and tests
Should solve issue 20397, where using the --record argument results
in files that failed to generate bytecode files are added to the
record file nonetheless.
---
Lib/distutils/command/install_lib.py | 17 +++++++++++++----
Lib/distutils/tests/test_install_lib.py | 8 ++++++--
2 files changed, 19 insertions(+), 6 deletions(-)
--- Lib/distutils/command/install_lib.py.orig 2015-12-05 19:46:56 UTC
+++ Lib/distutils/command/install_lib.py
@@ -168,10 +168,14 @@ class install_lib(Command):
ext = os.path.splitext(os.path.normcase(py_file))[1]
if ext != PYTHON_SOURCE_EXTENSION:
continue
- if self.compile:
- bytecode_files.append(py_file + "c")
- if self.optimize > 0:
- bytecode_files.append(py_file + "o")
+
+ pyc_file = py_file + "c"
+ if self.compile and os.path.isfile(pyc_file):
+ bytecode_files.append(pyc_file)
+
+ pyo_file = py_file + "o"
+ if self.optimize > 0 and os.path.isfile(pyo_file):
+ bytecode_files.append(pyo_file)
return bytecode_files

View File

@ -0,0 +1,30 @@
From 9934ce31b8447667f71c211e559a8de71e8263db Mon Sep 17 00:00:00 2001
From: Brendan Molloy <brendan@bbqsrc.net>
Date: Mon, 4 Jan 2016 23:14:06 +1100
Subject: [PATCH] Check bytecode file actually exists and tests
Should solve issue 20397, where using the --record argument results
in files that failed to generate bytecode files are added to the
record file nonetheless.
---
Lib/distutils/command/install_lib.py | 17 +++++++++++++----
Lib/distutils/tests/test_install_lib.py | 8 ++++++--
2 files changed, 19 insertions(+), 6 deletions(-)
--- Lib/distutils/tests/test_install_lib.py.orig 2015-12-05 19:46:57 UTC
+++ Lib/distutils/tests/test_install_lib.py
@@ -64,8 +64,12 @@ class InstallLibTestCase(support.Tempdir
cmd.distribution.packages = [pkg_dir]
cmd.distribution.script_name = 'setup.py'
- # get_output should return 4 elements
- self.assertGreaterEqual(len(cmd.get_outputs()), 2)
+ # Create rubbish, uncompilable file
+ f = os.path.join(pkg_dir, 'rubbish.py')
+ self.write_file(f, 'rubbish()')
+
+ # get_output should return 3 elements
+ self.assertEqual(len(cmd.get_outputs()), 3)
def test_get_inputs(self):
pkg_dir, dist = self.create_dist()

View File

@ -0,0 +1,19 @@
# Taken and adapted from lang/python27 port
# Description: Link scripts in the same way Python3 does
# Submitted by: mva
--- Makefile.pre.in.orig 2014-06-30 04:05:39.000000000 +0200
+++ Makefile.pre.in 2014-07-26 11:09:46.000000000 +0200
@@ -900,6 +900,12 @@ bininstall: altbininstall
(cd $(DESTDIR)$(LIBPC); $(LN) -s tauthon-$(VERSION).pc tauthon2.pc)
-rm -f $(DESTDIR)$(LIBPC)/tauthon.pc
(cd $(DESTDIR)$(LIBPC); $(LN) -s tauthon2.pc tauthon.pc)
+ -rm -f $(DESTDIR)$(BINDIR)/idle
+ (cd $(DESTDIR)$(BINDIR); $(LN) -s idle$(VERSION) idle2)
+ -rm -f $(DESTDIR)$(BINDIR)/pydoc
+ (cd $(DESTDIR)$(BINDIR); $(LN) -s pydoc$(VERSION) pydoc2)
+ -rm -f $(DESTDIR)$(BINDIR)/2to3
+ (cd $(DESTDIR)$(BINDIR); $(LN) -s 2to3-$(VERSION) 2to3)
# Install the interpreter with $(VERSION) affixed
# This goes into $(exec_prefix)

View File

@ -0,0 +1,21 @@
# pythonx.y-config --ldflags out of /usr and missing -L<install_lib_dir>
# https://bugs.python.org/issue7352
--- Misc/python-config.in.orig 2015-10-18 07:24:01 UTC
+++ Misc/python-config.in
@@ -21,6 +21,7 @@ except getopt.error:
if not opts:
exit_with_usage()
+libdir = sysconfig.EXEC_PREFIX + '/lib'
pyver = sysconfig.get_config_var('VERSION')
getvar = sysconfig.get_config_var
@@ -50,6 +51,7 @@ for opt in opt_flags:
# add the prefix/lib/pythonX.Y/config dir, but only if there is no
# shared library in prefix/lib/.
if opt == '--ldflags':
+ libs.insert(0, '-L' + libdir)
if not getvar('Py_ENABLE_SHARED'):
libs.insert(0, '-L' + getvar('LIBPL'))
if not getvar('PYTHONFRAMEWORK'):

View File

@ -0,0 +1,53 @@
--- ./Modules/fcntlmodule.c.orig 2014-07-03 21:57:10.429953240 +1000
+++ ./Modules/fcntlmodule.c 2014-07-03 21:59:36.517210444 +1000
@@ -98,20 +98,15 @@ fcntl_ioctl(PyObject *self, PyObject *ar
{
#define IOCTL_BUFSZ 1024
int fd;
- /* In PyArg_ParseTuple below, we use the unsigned non-checked 'I'
+ /* In PyArg_ParseTuple below, we use the unsigned non-checked 'k'
format for the 'code' parameter because Python turns 0x8000000
into either a large positive number (PyLong or PyInt on 64-bit
platforms) or a negative number on others (32-bit PyInt)
whereas the system expects it to be a 32bit bit field value
regardless of it being passed as an int or unsigned long on
- various platforms. See the termios.TIOCSWINSZ constant across
- platforms for an example of this.
-
- If any of the 64bit platforms ever decide to use more than 32bits
- in their unsigned long ioctl codes this will break and need
- special casing based on the platform being built on.
+ various platforms.
*/
- unsigned int code;
+ unsigned long code;
int arg;
int ret;
char *str;
@@ -119,7 +114,7 @@ fcntl_ioctl(PyObject *self, PyObject *ar
int mutate_arg = 1;
char buf[IOCTL_BUFSZ+1]; /* argument plus NUL byte */
- if (PyArg_ParseTuple(args, "O&Iw#|i:ioctl",
+ if (PyArg_ParseTuple(args, "O&kw#|i:ioctl",
conv_descriptor, &fd, &code,
&str, &len, &mutate_arg)) {
char *arg;
@@ -170,7 +165,7 @@ fcntl_ioctl(PyObject *self, PyObject *ar
}
PyErr_Clear();
- if (PyArg_ParseTuple(args, "O&Is#:ioctl",
+ if (PyArg_ParseTuple(args, "O&ks#:ioctl",
conv_descriptor, &fd, &code, &str, &len)) {
if (len > IOCTL_BUFSZ) {
PyErr_SetString(PyExc_ValueError,
@@ -192,7 +187,7 @@ fcntl_ioctl(PyObject *self, PyObject *ar
PyErr_Clear();
arg = 0;
if (!PyArg_ParseTuple(args,
- "O&I|i;ioctl requires a file or file descriptor,"
+ "O&k|i;ioctl requires a file or file descriptor,"
" an integer and optionally an integer or buffer argument",
conv_descriptor, &fd, &code, &arg)) {
return NULL;

View File

@ -0,0 +1,27 @@
# Add closefrom(2) support
# https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=242274
# https://bugs.python.org/issue38061
# TODO: Upstream
--- Modules/posixmodule.c.orig 2019-10-19 18:38:44 UTC
+++ Modules/posixmodule.c
@@ -6676,9 +6676,16 @@ posix_closerange(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args, "ii:closerange", &fd_from, &fd_to))
return NULL;
Py_BEGIN_ALLOW_THREADS
- for (i = fd_from; i < fd_to; i++)
- if (_PyVerify_fd(i))
- close(i);
+#ifdef __FreeBSD__
+ if (fd_to >= sysconf(_SC_OPEN_MAX)) {
+ closefrom(fd_from);
+ } else
+#endif
+ {
+ for (i = fd_from; i < fd_to; i++)
+ if (_PyVerify_fd(i))
+ close(i);
+ }
Py_END_ALLOW_THREADS
Py_RETURN_NONE;
}

View File

@ -0,0 +1,58 @@
# Description: do not define __BSD_VISIBLE/_XOPEN_SOURCE/_POSIX_C_SOURCE
# in include/python2.7/pyconfig.h
# Submitted by: antoine
--- configure.orig 2014-09-06 14:42:50 UTC
+++ configure
@@ -2919,13 +2919,6 @@
# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables
-# certain features on FreeBSD, so we need __BSD_VISIBLE to re-enable
-# them.
-
-$as_echo "#define __BSD_VISIBLE 1" >>confdefs.h
-
-
-# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables
# u_int on Irix 5.3. Defining _BSD_TYPES brings it back.
$as_echo "#define _BSD_TYPES 1" >>confdefs.h
@@ -3293,9 +3286,8 @@
# but used in struct sockaddr.sa_family. Reported by Tim Rice.
SCO_SV/3.2)
define_xopen_source=no;;
- # On FreeBSD 4, the math functions C89 does not cover are never defined
- # with _XOPEN_SOURCE and __BSD_VISIBLE does not re-enable them.
- FreeBSD/4.*)
+ # On FreeBSD, defining _XOPEN_SOURCE to 600 requests a strict environment.
+ FreeBSD/*)
define_xopen_source=no;;
# On MacOS X 10.2, a bug in ncurses.h means that it craps out if
# _XOPEN_EXTENDED_SOURCE is defined. Apparently, this is fixed in 10.3, which
--- configure.ac.orig 2014-09-06 14:42:50 UTC
+++ configure.ac
@@ -88,11 +88,6 @@
AC_DEFINE(_NETBSD_SOURCE, 1, [Define on NetBSD to activate all library features])
# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables
-# certain features on FreeBSD, so we need __BSD_VISIBLE to re-enable
-# them.
-AC_DEFINE(__BSD_VISIBLE, 1, [Define on FreeBSD to activate all library features])
-
-# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables
# u_int on Irix 5.3. Defining _BSD_TYPES brings it back.
AC_DEFINE(_BSD_TYPES, 1, [Define on Irix to enable u_int])
@@ -426,9 +421,8 @@
# but used in struct sockaddr.sa_family. Reported by Tim Rice.
SCO_SV/3.2)
define_xopen_source=no;;
- # On FreeBSD 4, the math functions C89 does not cover are never defined
- # with _XOPEN_SOURCE and __BSD_VISIBLE does not re-enable them.
- FreeBSD/4.*)
+ # On FreeBSD, defining _XOPEN_SOURCE to 600 requests a strict environment.
+ FreeBSD/*)
define_xopen_source=no;;
# On MacOS X 10.2, a bug in ncurses.h means that it craps out if
# _XOPEN_EXTENDED_SOURCE is defined. Apparently, this is fixed in 10.3, which

View File

@ -0,0 +1,93 @@
# Description: Partial script installation backport from Python3
# Submitted by: mva
# Description: Some modules are installed via other ports
# Description: ossaudiodev detection fix backport
--- setup.py.orig 2017-04-22 03:42:03 UTC
+++ setup.py
@@ -15,6 +15,7 @@ from distutils.core import Extension, se
from distutils.command.build_ext import build_ext
from distutils.command.install import install
from distutils.command.install_lib import install_lib
+from distutils.command.build_scripts import build_scripts
from distutils.spawn import find_executable
cross_compiling = "_PYTHON_HOST_PLATFORM" in os.environ
@@ -33,7 +34,7 @@ host_platform = get_platform()
COMPILED_WITH_PYDEBUG = ('--with-pydebug' in sysconfig.get_config_var("CONFIG_ARGS"))
# This global variable is used to hold the list of modules to be disabled.
-disabled_module_list = []
+disabled_module_list = ["_bsddb", "_sqlite3", "_tkinter", "gdbm", "mpz"]
def add_dir_to_list(dirlist, dir):
"""Add the directory 'dir' to the list 'dirlist' (at the front) if
@@ -1234,7 +1235,7 @@ class PyBuildExt(build_ext):
sysroot = macosx_sdk_root()
f = os.path.join(sysroot, f[1:])
- if os.path.exists(f) and not db_incs:
+ if os.path.exists(f):
data = open(f).read()
m = re.search(r"#s*define\s+HASHVERSION\s+2\s*", data)
if m is not None:
@@ -1624,9 +1625,10 @@ class PyBuildExt(build_ext):
else:
missing.append('linuxaudiodev')
- if (host_platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
- 'freebsd7', 'freebsd8')
- or host_platform.startswith("gnukfreebsd")):
+# Initial backport of https://hg.python.org/cpython/rev/50f1922bc1d5
+
+ if any(sys.platform.startswith(prefix)
+ for prefix in ("linux", "freebsd", "gnukfreebsd")):
exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
else:
missing.append('ossaudiodev')
@@ -2200,6 +2202,22 @@ class PyBuildInstallLib(install_lib):
def is_chmod_supported(self):
return hasattr(os, 'chmod')
+class PyBuildScripts(build_scripts):
+ def copy_scripts(self):
+ outfiles = build_scripts.copy_scripts(self)
+ fullversion = '{0[0]}.{0[1]}'.format(sys.version_info)
+ newoutfiles = []
+ for filename in outfiles:
+ if filename.endswith('2to3'):
+ newfilename = filename + '-' + fullversion
+ else:
+ newfilename = filename + fullversion
+ log.info('renaming {} to {}'.format(filename, newfilename))
+ os.rename(filename, newfilename)
+ newoutfiles.append(newfilename)
+ return newoutfiles
+
+
SUMMARY = """
Python is an interpreted, interactive, object-oriented programming
language. It is often compared to Tcl, Perl, Scheme or Java.
@@ -2245,7 +2263,9 @@ def main():
platforms = ["Many"],
# Build info
- cmdclass = {'build_ext':PyBuildExt, 'install':PyBuildInstall,
+ cmdclass = {'build_ext':PyBuildExt,
+ 'build_scripts':PyBuildScripts,
+ 'install':PyBuildInstall,
'install_lib':PyBuildInstallLib},
# The struct module is defined here, because build_ext won't be
# called unless there's at least one extension module defined.
@@ -2253,8 +2273,7 @@ def main():
# Scripts to install
scripts = ['Tools/scripts/pydoc', 'Tools/scripts/idle',
- 'Tools/scripts/2to3',
- 'Lib/smtpd.py']
+ 'Tools/scripts/2to3']
)
# --install-platlib

View File

@ -0,0 +1,29 @@
--- setup.py 2020-11-10 14:32:40.701965000 +0000
+++ setup.py 2020-11-10 14:53:04.048189000 +0000
@@ -2329,6 +2329,10 @@
listed here, it may still be supported, if there's a C compiler for
it. Ask around on comp.lang.python -- or just try compiling Python
yourself.
+
+This implementation, Tauthon, is a backward-compatible fork of
+Python's 2.7.18 interpreter with new syntax, builtins, and libraries
+backported from Python 3.x.
"""
CLASSIFIERS = """
@@ -2345,12 +2349,12 @@
import warnings
warnings.filterwarnings("ignore",category=DeprecationWarning)
setup(# PyPI Metadata (PEP 301)
name = "Python",
version = sys.version.split()[0],
- url = "http://www.python.org/%s" % sys.version[:3],
- maintainer = "Guido van Rossum and the Python community",
- maintainer_email = "python-dev@python.org",
+ url = "https://github.com/naftaliharris/tauthon",
+ maintainer = "Guido van Rossum, the Python community \
+and the Tauthon developers",
description = "A high-level object-oriented programming language",
long_description = SUMMARY.strip(),
license = "PSF license",
classifiers = filter(None, CLASSIFIERS.split("\n")),

22
lang/tauthon/pkg-descr Normal file
View File

@ -0,0 +1,22 @@
Tauthon is a backward-compatible fork of Python's 2.7.18 interpreter with new
syntax, builtins, and libraries backported from Python 3.x.
Python code and C-extensions targeting Python 2.7 or below are expected to run
unmodified on Tauthon and produce the same output. But with Tauthon, that code
can now use some of the new features from Python 3.x.
This is not an official Python release. Because of its new features, while
preserving 2.7 compatibility, Tauthon reports 2.8 as its major/minor versions.
Non-exhaustive list of new features:
- Function Annotations
- Keyword-Only Arguments
- "async" and "await" Syntax
- Argument-less "super"
- New Metaclass Syntax
- "nonlocal"
- "yield from" Syntax
- "concurrent.futures" Module
- UTF-8 as the default source encoding
WWW: https://github.com/naftaliharris/tauthon

13
lang/tauthon/pkg-message Normal file
View File

@ -0,0 +1,13 @@
[
{ type: install
message: <<EOM
Note that some standard Python modules are not included as they require
additional dependencies. These are:
- bsddb
- gdbm
- sqlite3
- tkinter
If needed, they should be provided in other ports. Porters welcome!
EOM
}
]

4671
lang/tauthon/pkg-plist Normal file

File diff suppressed because it is too large Load Diff