--- a/components/python/python27/Makefile Fri Dec 09 17:25:56 2016 +0100
+++ b/components/python/python27/Makefile Tue Dec 20 13:25:44 2016 -0800
@@ -27,17 +27,17 @@
PATH=/usr/bin:/usr/gnu/bin:/usr/sbin
COMPONENT_NAME= Python
-COMPONENT_VERSION= 2.7.12
-COMPONENT_PROJECT_URL= http://python.org/
+COMPONENT_VERSION= 2.7.13
+COMPONENT_PROJECT_URL= https://python.org/
COMPONENT_SRC= $(COMPONENT_NAME)-$(COMPONENT_VERSION)
COMPONENT_ARCHIVE= $(COMPONENT_SRC).tar.xz
COMPONENT_ARCHIVE_HASH= \
- sha256:d7837121dd5652a05fef807c361909d255d173280c4e1a4ded94d73d80a1f978
+ sha256:35d543986882f78261f97787fd3e06274bfa6df29fac9b4a94f73930ff98f731
COMPONENT_ARCHIVE_URL= $(COMPONENT_PROJECT_URL)ftp/python/$(COMPONENT_VERSION)/$(COMPONENT_ARCHIVE)
COMPONENT_SIG_URL= $(COMPONENT_ARCHIVE_URL).asc
COMPONENT_BUGDB= utility/python
-TPNO= 29996
+TPNO= 33100
include $(WS_MAKE_RULES)/prep.mk
include $(WS_MAKE_RULES)/configure.mk
--- a/components/python/python27/patches/00-bits.patch Fri Dec 09 17:25:56 2016 +0100
+++ b/components/python/python27/patches/00-bits.patch Tue Dec 20 13:25:44 2016 -0800
@@ -2,8 +2,8 @@
# This patch makes the pyconfig.h header file 32/64 bit friendly.
# As it is Solaris-specific, it is not suitable for upstream.
#
---- Python-2.7.10/configure.ac.~1~ 2015-05-10 10:17:06 -0800
-+++ Python-2.7.10/configure.ac 2015-05-18 14:25:00 -0800
+--- Python-2.7.13/configure.ac.~1~ 2016-12-17 12:05:07.000000000 +0000
++++ Python-2.7.13/configure.ac 2016-12-19 08:14:37.701742813 +0000
@@ -5,7 +5,7 @@
# Set VERSION so we only need to edit in one place (i.e., here)
m4_define(PYTHON_VERSION, 2.7)
@@ -12,8 +12,8 @@
+AC_PREREQ(2.68)
AC_REVISION($Revision$)
- AC_INIT(python, PYTHON_VERSION, http://bugs.python.org/)
[email protected]@ -2207,12 +2207,6 @@
+ AC_INIT(python, PYTHON_VERSION, https://bugs.python.org/)
[email protected]@ -2273,12 +2273,6 @@
if test -z "$CCSHARED"
then
case $ac_sys_system/$ac_sys_release in
--- a/components/python/python27/patches/04-solaris-64-bit.patch Fri Dec 09 17:25:56 2016 +0100
+++ b/components/python/python27/patches/04-solaris-64-bit.patch Tue Dec 20 13:25:44 2016 -0800
@@ -5,7 +5,7 @@
--- Python-2.7.6/Lib/distutils/command/build_ext.py.~1~ 2013-11-09 23:36:40.000000000 -0800
+++ Python-2.7.6/Lib/distutils/command/build_ext.py 2014-05-14 12:47:04.342901439 -0700
[email protected]@ -636,6 +636,10 @@
[email protected]@ -637,6 +637,10 @@
filename = self.get_ext_filename(ext_name)
filename = os.path.split(filename)[-1]
@@ -16,7 +16,7 @@
if not self.inplace:
# no further work needed
# returning :
[email protected]@ -676,7 +680,14 @@
[email protected]@ -677,7 +681,14 @@
so_ext = get_config_var('SO')
if os.name == 'nt' and self.debug:
return os.path.join(*ext_path) + '_d' + so_ext
--- a/components/python/python27/patches/05-dtrace.patch Fri Dec 09 17:25:56 2016 +0100
+++ b/components/python/python27/patches/05-dtrace.patch Tue Dec 20 13:25:44 2016 -0800
@@ -9,7 +9,7 @@
--- Python-2.7.12/Makefile.pre.in.~1~ 2016-06-25 14:49:31.000000000 -0700
+++ Python-2.7.12/Makefile.pre.in 2016-07-07 13:45:26.859336399 -0700
[email protected]@ -233,6 +233,7 @@
[email protected]@ -232,6 +232,7 @@
# Used of signalmodule.o is not available
SIGNAL_OBJS= @[email protected]
@@ -17,7 +17,7 @@
##########################################################################
# Grammar
[email protected]@ -366,6 +367,7 @@
[email protected]@ -365,6 +366,7 @@
Python/formatter_unicode.o \
Python/formatter_string.o \
Python/$(DYNLOADFILE) \
@@ -25,7 +25,7 @@
$(LIBOBJS) \
$(MACHDEP_OBJS) \
$(THREADOBJ)
[email protected]@ -763,6 +765,18 @@
[email protected]@ -751,6 +753,18 @@
Python/formatter_string.o: $(srcdir)/Python/formatter_string.c \
$(STRINGLIB_HEADERS)
@@ -231,7 +231,7 @@
co = f->f_code;
names = co->co_names;
consts = co->co_consts;
[email protected]@ -2981,6 +3115,9 @@
[email protected]@ -2983,6 +3117,9 @@
PyObject **sp;
PCALL(PCALL_ALL);
sp = stack_pointer;
@@ -241,7 +241,7 @@
#ifdef WITH_TSC
x = call_function(&sp, oparg, &intr0, &intr1);
#else
[email protected]@ -3022,6 +3159,9 @@
[email protected]@ -3024,6 +3161,9 @@
} else
Py_INCREF(func);
sp = stack_pointer;
@@ -251,7 +251,7 @@
READ_TIMESTAMP(intr0);
x = ext_do_call(func, &sp, flags, na, nk);
READ_TIMESTAMP(intr1);
[email protected]@ -3331,6 +3471,10 @@
[email protected]@ -3333,6 +3473,10 @@
/* pop frame */
exit_eval_frame:
--- a/components/python/python27/patches/10-cflags.patch Fri Dec 09 17:25:56 2016 +0100
+++ b/components/python/python27/patches/10-cflags.patch Tue Dec 20 13:25:44 2016 -0800
@@ -2,7 +2,7 @@
--- Python-2.7.10/configure.ac.~2~ 2015-05-10 10:17:06 -0800
+++ Python-2.7.10/configure.ac 2015-05-18 14:42:30 -0800
[email protected]@ -1106,7 +1106,7 @@
[email protected]@ -1095,7 +1095,7 @@
;;
*)
--- a/components/python/python27/patches/11-closerange.patch Fri Dec 09 17:25:56 2016 +0100
+++ b/components/python/python27/patches/11-closerange.patch Tue Dec 20 13:25:44 2016 -0800
@@ -3,7 +3,7 @@
--- Python-2.7.10/Modules/posixmodule.c.~1~ 2015-05-10 10:17:06 -0700
+++ Python-2.7.10/Modules/posixmodule.c 2015-05-18 14:43:36 -0700
[email protected]@ -6661,16 +6661,34 @@
[email protected]@ -6642,16 +6642,34 @@
"closerange(fd_low, fd_high)\n\n\
Closes all file descriptors in [fd_low, fd_high), ignoring errors.");
--- a/components/python/python27/patches/12-studio-profile.patch Fri Dec 09 17:25:56 2016 +0100
+++ b/components/python/python27/patches/12-studio-profile.patch Tue Dec 20 13:25:44 2016 -0800
@@ -4,9 +4,9 @@
that the profiling options be used at all steps of the build -- not just
compilation. As it is Solaris-specific, it is not suitable for upstream.
---- Python-2.7.12/Makefile.pre.in.~2~ 2016-07-07 13:54:04.997344705 -0700
-+++ Python-2.7.12/Makefile.pre.in 2016-07-07 14:06:13.325835947 -0700
[email protected]@ -212,7 +212,7 @@
+--- Python-2.7.13/Makefile.pre.in.~2~ 2016-12-19 08:31:05.720179529 +0000
++++ Python-2.7.13/Makefile.pre.in 2016-12-19 08:31:05.804725502 +0000
[email protected]@ -211,7 +211,7 @@
# The task to run while instrument when building the profile-opt target
# We exclude unittests with -x that take a rediculious amount of time to
# run in the instrumented training build or do not provide much value.
@@ -15,12 +15,12 @@
# report files for gcov / lcov coverage report
COVERAGE_INFO= $(abs_builddir)/coverage.info
[email protected]@ -455,24 +455,33 @@
[email protected]@ -454,24 +454,33 @@
$(MAKE) profile-removal
build_all_generate_profile:
-- $(MAKE) all CFLAGS="$(CFLAGS) $(PGO_PROF_GEN_FLAG) @[email protected]" LDFLAGS="$(LDFLAGS) $(PGO_PROF_GEN_FLAG) @[email protected]" LIBS="$(LIBS)"
-+ $(MAKE) all CC="$(CC) -xprofile=collect:$(XPROFILE_DIR)" \
+- $(MAKE) @[email protected] CFLAGS="$(CFLAGS) $(PGO_PROF_GEN_FLAG) @[email protected]" LDFLAGS="$(LDFLAGS) $(PGO_PROF_GEN_FLAG) @[email protected]" LIBS="$(LIBS)"
++ $(MAKE) @[email protected] CC="$(CC) -xprofile=collect:$(XPROFILE_DIR)" \
+ CFLAGS="$(CFLAGS) -xprofile=collect:$(XPROFILE_DIR)" \
+ LDFLAGS="$(LDFLAGS) -xprofile=collect:$(XPROFILE_DIR)" \
+ BLDSHARED="$(BLDSHARED) -xprofile=collect:$(XPROFILE_DIR)"
@@ -34,8 +34,8 @@
$(LLVM_PROF_MERGER)
build_all_use_profile:
-- $(MAKE) all CFLAGS="$(CFLAGS) $(PGO_PROF_USE_FLAG) @[email protected]" LDFLAGS="$(LDFLAGS) @[email protected]"
-+ $(MAKE) all CC="$(CC) -xprofile=use:$(XPROFILE_DIR)" \
+- $(MAKE) @[email protected] CFLAGS="$(CFLAGS) $(PGO_PROF_USE_FLAG) @[email protected]" LDFLAGS="$(LDFLAGS) @[email protected]"
++ $(MAKE) @[email protected] CC="$(CC) -xprofile=use:$(XPROFILE_DIR)" \
+ CFLAGS="$(CFLAGS) -xprofile=use:$(XPROFILE_DIR)" \
+ LDFLAGS="$(LDFLAGS) -xprofile=use:$(XPROFILE_DIR)" \
+ BLDSHARED="$(BLDSHARED) -xprofile=use:$(XPROFILE_DIR)"
@@ -45,16 +45,16 @@
coverage:
@echo "Building with support for coverage checking:"
$(MAKE) clean profile-removal
-- $(MAKE) all CFLAGS="$(CFLAGS) -O0 -pg -fprofile-arcs -ftest-coverage" LIBS="$(LIBS) -lgcov"
-+ $(MAKE) all CC="$(CC) -xprofile=tcov" \
+- $(MAKE) @[email protected] CFLAGS="$(CFLAGS) -O0 -pg -fprofile-arcs -ftest-coverage" LIBS="$(LIBS) -lgcov"
++ $(MAKE) @[email protected] CC="$(CC) -xprofile=tcov" \
+ CFLAGS="$(CFLAGS) -xO1 -xprofile=tcov" \
+ LDFLAGS="$(LDFLAGS) -xprofile=tcov" \
+ BLDSHARED="$(BLDSHARED) -xprofile=tcov"
coverage-lcov:
@echo "Creating Coverage HTML report with LCOV:"
[email protected]@ -1422,9 +1431,7 @@
- -rm -rf build
[email protected]@ -1410,9 +1419,7 @@
+ -find build -type f -a ! -name '*.gc??' -exec rm -f {} ';'
profile-removal:
- find . -name '*.gc??' -exec rm -f {} ';'
--- a/components/python/python27/patches/14-py_db.patch Fri Dec 09 17:25:56 2016 +0100
+++ b/components/python/python27/patches/14-py_db.patch Tue Dec 20 13:25:44 2016 -0800
@@ -3,16 +3,16 @@
--- Python-2.7.12/Makefile.pre.in.~3~ 2016-07-07 14:07:55.545052752 -0700
+++ Python-2.7.12/Makefile.pre.in 2016-07-07 14:07:55.569639679 -0700
[email protected]@ -432,7 +432,7 @@
[email protected]@ -431,7 +431,7 @@
# Default target
- all: build_all
+ all: @[email protected]
-build_all: $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks
+build_all: $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks build-py_db
# Compile a binary with profile guided optimization.
profile-opt:
[email protected]@ -877,6 +877,15 @@
[email protected]@ -865,6 +865,15 @@
$(LIBRARY_OBJS) $(MODOBJS) Modules/python.o: $(PYTHON_HEADERS)
@@ -28,7 +28,7 @@
######################################################################
[email protected]@ -941,7 +950,7 @@
[email protected]@ -929,7 +938,7 @@
$(TESTPYTHON) $(TESTPROG) $(MEMTESTOPTS)
# Install everything
--- a/components/python/python27/patches/15-get_wch.patch Fri Dec 09 17:25:56 2016 +0100
+++ b/components/python/python27/patches/15-get_wch.patch Tue Dec 20 13:25:44 2016 -0800
@@ -42,7 +42,7 @@
PyCursesWindow_GetKey(PyCursesWindowObject *self, PyObject *args)
{
int x, y;
[email protected]@ -1572,6 +1603,7 @@
[email protected]@ -1588,6 +1619,7 @@
{"getbegyx", (PyCFunction)PyCursesWindow_getbegyx, METH_NOARGS},
{"getbkgd", (PyCFunction)PyCursesWindow_GetBkgd, METH_NOARGS},
{"getch", (PyCFunction)PyCursesWindow_GetCh, METH_VARARGS},
--- a/components/python/python27/patches/18-osconf-long.patch Fri Dec 09 17:25:56 2016 +0100
+++ b/components/python/python27/patches/18-osconf-long.patch Tue Dec 20 13:25:44 2016 -0800
@@ -3,7 +3,7 @@
--- Python-2.7.10/Modules/posixmodule.c.~2~ 2015-05-10 10:17:06 -0700
+++ Python-2.7.10/Modules/posixmodule.c 2015-05-18 14:47:21 -0700
[email protected]@ -8555,7 +8555,7 @@
[email protected]@ -8538,7 +8538,7 @@
int name;
if (PyArg_ParseTuple(args, "O&:sysconf", conv_sysconf_confname, &name)) {
--- a/components/python/python27/patches/20-bsddb-harmful.patch Fri Dec 09 17:25:56 2016 +0100
+++ b/components/python/python27/patches/20-bsddb-harmful.patch Tue Dec 20 13:25:44 2016 -0800
@@ -5,7 +5,7 @@
--- Python-2.7.9/Makefile.pre.in.~4~ 2014-12-11 09:33:27.006970089 -0800
+++ Python-2.7.9/Makefile.pre.in 2014-12-11 09:33:27.077073582 -0800
[email protected]@ -1094,7 +1094,7 @@
[email protected]@ -1082,7 +1082,7 @@
ensurepip ensurepip/_bundled \
json json/tests \
sqlite3 sqlite3/test \
--- a/components/python/python27/patches/21-disable-sslv3.patch Fri Dec 09 17:25:56 2016 +0100
+++ b/components/python/python27/patches/21-disable-sslv3.patch Tue Dec 20 13:25:44 2016 -0800
@@ -3,7 +3,7 @@
--- Python-2.7.10/Lib/test/test_ssl.py.~1~ 2015-05-10 10:17:04 -0800
+++ Python-2.7.10/Lib/test/test_ssl.py 2015-05-18 14:53:04 -0800
[email protected]@ -2290,7 +2290,7 @@
[email protected]@ -2315,7 +2315,7 @@
sys.stdout.write("\n")
if hasattr(ssl, 'PROTOCOL_SSLv2'):
try:
--- a/components/python/python27/patches/22-default-lib-path.patch Fri Dec 09 17:25:56 2016 +0100
+++ b/components/python/python27/patches/22-default-lib-path.patch Tue Dec 20 13:25:44 2016 -0800
@@ -1,28 +1,44 @@
This patch was developed in-house. It has been submitted upstream:
http://bugs.python.org/issue23287
---- Python-2.7.12/Lib/ctypes/util.py.~1~ 2016-06-25 14:49:30.000000000 -0700
-+++ Python-2.7.12/Lib/ctypes/util.py 2016-07-07 14:25:48.212744320 -0700
[email protected]@ -176,23 +176,11 @@
+--- Python-2.7.13/Lib/ctypes/util.py.~1~ 2016-12-17 12:05:05.000000000 +0000
++++ Python-2.7.13/Lib/ctypes/util.py 2016-12-19 08:44:16.426321564 +0000
[email protected]@ -188,39 +188,15 @@
elif sys.platform == "sunos5":
- def _findLib_crle(name, is64):
- if not os.path.exists('/usr/bin/crle'):
- return None
--
+ def _findLib_path(name, is64):
+
+ env = dict(os.environ)
+ env['LC_ALL'] = 'C'
+
if is64:
-- cmd = 'env LC_ALL=C /usr/bin/crle -64 2>/dev/null'
+- args = ('/usr/bin/crle', '-64')
+ paths = "/lib/64:/usr/lib/64"
else:
-- cmd = 'env LC_ALL=C /usr/bin/crle 2>/dev/null'
+- args = ('/usr/bin/crle',)
-
- paths = None
-- for line in os.popen(cmd).readlines():
-- line = line.strip()
-- if line.startswith('Default Library Path (ELF):'):
-- paths = line.split()[4]
+- null = open(os.devnull, 'wb')
+- try:
+- with null:
+- proc = subprocess.Popen(args,
+- stdout=subprocess.PIPE,
+- stderr=null,
+- env=env)
+- except OSError: # E.g. bad executable
+- return None
+- try:
+- for line in proc.stdout:
+- line = line.strip()
+- if line.startswith(b'Default Library Path (ELF):'):
+- paths = line.split()[4]
+- finally:
+- proc.stdout.close()
+- proc.wait()
-
- if not paths:
- return None
@@ -30,7 +46,7 @@
for dir in paths.split(":"):
libfile = os.path.join(dir, "lib%s.so" % name)
[email protected]@ -202,7 +190,7 @@
[email protected]@ -230,7 +206,7 @@
return None
def find_library(name, is64 = False):
--- a/components/python/python27/patches/26-sslv2.patch Fri Dec 09 17:25:56 2016 +0100
+++ b/components/python/python27/patches/26-sslv2.patch Tue Dec 20 13:25:44 2016 -0800
@@ -1,8 +1,8 @@
This patch comes from in-house, to deal with SSLv2 no longer being supported.
As it is Solaris-specific, it will not be passed upstream.
---- Python-2.7.10/Lib/test/test_ssl.py.orig 2015-07-24 14:34:42.067600359 -0700
-+++ Python-2.7.10/Lib/test/test_ssl.py 2015-08-03 11:48:02.934532909 -0700
+--- Python-2.7.13/Lib/test/test_ssl.py.~2~ 2016-12-19 08:44:58.900357184 +0000
++++ Python-2.7.13/Lib/test/test_ssl.py 2016-12-19 08:44:58.942536627 +0000
@@ -25,6 +25,9 @@
ssl = support.import_module("ssl")
@@ -11,5 +11,5 @@
+ delattr(ssl, 'PROTOCOL_SSLv2')
+ PROTOCOLS.remove(0)
HOST = support.HOST
-
- def data_file(*name):
+ IS_LIBRESSL = ssl.OPENSSL_VERSION.startswith('LibreSSL')
+ IS_OPENSSL_1_1 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 0)
--- a/components/python/python27/patches/30-expat.patch Fri Dec 09 17:25:56 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-This patch comes from upstream:
-
-http://bugs.python.org/issue27369
-
---- a/Lib/test/test_pyexpat.py
-+++ b/Lib/test/test_pyexpat.py
[email protected]@ -610,11 +610,9 @@ class MalformedInputText(unittest.TestCa
- def test2(self):
- xml = "<?xml version\xc2\x85='1.0'?>\r\n"
- parser = expat.ParserCreate()
-- try:
-+ err_pattern = r'XML declaration not well-formed: line 1, column \d+'
-+ with self.assertRaisesRegexp(expat.ExpatError, err_pattern):
- parser.Parse(xml, True)
-- self.fail()
-- except expat.ExpatError as e:
-- self.assertEqual(str(e), 'XML declaration not well-formed: line 1, column 14')
-
- class ForeignDTDTests(unittest.TestCase):
- """
--- a/components/python/python27/python-27-tests.p5m Fri Dec 09 17:25:56 2016 +0100
+++ b/components/python/python27/python-27-tests.p5m Tue Dec 20 13:25:44 2016 -0800
@@ -305,6 +305,7 @@
file path=usr/lib/python2.7/test/Sine-1000Hz-300ms.aif
file path=usr/lib/python2.7/test/__init__.py
file path=usr/lib/python2.7/test/_mock_backport.py
+file path=usr/lib/python2.7/test/allsans.pem
file path=usr/lib/python2.7/test/audiodata/pluck-pcm16.aiff
file path=usr/lib/python2.7/test/audiodata/pluck-pcm16.au
file path=usr/lib/python2.7/test/audiodata/pluck-pcm16.wav
@@ -341,7 +342,6 @@
file path=usr/lib/python2.7/test/capath/99d0fa06.0
file path=usr/lib/python2.7/test/capath/ce7b8643.0
file path=usr/lib/python2.7/test/cfgparser.1
-file path=usr/lib/python2.7/test/check_soundcard.vbs
file path=usr/lib/python2.7/test/cjkencodings/big5-utf8.txt
file path=usr/lib/python2.7/test/cjkencodings/big5.txt
file path=usr/lib/python2.7/test/cjkencodings/big5hkscs-utf8.txt
@@ -588,6 +588,7 @@
file path=usr/lib/python2.7/test/ssl_key.passwd.pem
file path=usr/lib/python2.7/test/ssl_key.pem
file path=usr/lib/python2.7/test/ssl_servers.py
+file path=usr/lib/python2.7/test/ssltests.py
file path=usr/lib/python2.7/test/string_tests.py
file path=usr/lib/python2.7/test/subprocessdata/sigchild_ignore.py
file path=usr/lib/python2.7/test/symlink_support.py
--- a/components/python/python27/python-27.p5m Fri Dec 09 17:25:56 2016 +0100
+++ b/components/python/python27/python-27.p5m Tue Dec 20 13:25:44 2016 -0800
@@ -493,8 +493,8 @@
file path=usr/lib/python2.7/encodings/zlib_codec.py
file path=usr/lib/python2.7/ensurepip/__init__.py
file path=usr/lib/python2.7/ensurepip/__main__.py
-file path=usr/lib/python2.7/ensurepip/_bundled/pip-8.1.1-py2.py3-none-any.whl
-file path=usr/lib/python2.7/ensurepip/_bundled/setuptools-20.10.1-py2.py3-none-any.whl
+file path=usr/lib/python2.7/ensurepip/_bundled/pip-9.0.1-py2.py3-none-any.whl
+file path=usr/lib/python2.7/ensurepip/_bundled/setuptools-28.8.0-py2.py3-none-any.whl
file path=usr/lib/python2.7/ensurepip/_uninstall.py
file path=usr/lib/python2.7/filecmp.py
file path=usr/lib/python2.7/fileinput.py
@@ -771,7 +771,6 @@
file path=usr/lib/python2.7/lib2to3/fixes/fix_asserts.py
file path=usr/lib/python2.7/lib2to3/fixes/fix_basestring.py
file path=usr/lib/python2.7/lib2to3/fixes/fix_buffer.py
-file path=usr/lib/python2.7/lib2to3/fixes/fix_callable.py
file path=usr/lib/python2.7/lib2to3/fixes/fix_dict.py
file path=usr/lib/python2.7/lib2to3/fixes/fix_except.py
file path=usr/lib/python2.7/lib2to3/fixes/fix_exec.py
--- a/components/python/python27/python27.license Fri Dec 09 17:25:56 2016 +0100
+++ b/components/python/python27/python27.license Tue Dec 20 13:25:44 2016 -0800
@@ -17,8 +17,9 @@
distribute, and otherwise use Python alone or in any derivative version,
provided, however, that PSF's License Agreement and PSF's notice of copyright,
i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-2011, 2012, 2013, 2014, 2015 Python Software Foundation; All Rights Reserved"
-are retained in Python alone or in any derivative version prepared by Licensee.
+2011, 2012, 2013, 2014, 2015, 2016 Python Software Foundation; All Rights
+Reserved" are retained in Python alone or in any derivative version prepared by
+Licensee.
3. In the event Licensee prepares a derivative work that is based on
or incorporates Python or any part thereof, and wants to make