summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Bingner <sam@bingner.com>2020-07-16 23:58:08 -1000
committerSam Bingner <sam@bingner.com>2020-07-17 00:03:56 -1000
commit999cb8e823c8448056b541943c5ee6ead7282384 (patch)
tree5c88fdbabb95bee63ffc97c18c7b71b0f2cf9c8c
parent1bce439b1aca1f34cea1947e3aab47c9ffbf1a8c (diff)
Update python3
-rw-r--r--data/_python3.7/arm-alignment.diff17
-rw-r--r--data/_python3.7/distutils-install-layout.diff262
-rw-r--r--data/_python3.7/make.sh23
-rw-r--r--data/_python3.7/python3.7_3.7.3-2+deb10u1.debian.xzbin0 -> 216340 bytes
-rw-r--r--data/_python3.7/python3.7_3.7.3.orig.tar.xz (renamed from data/_python3.7/Python-3.7.3.tar.xz)bin17108364 -> 17108364 bytes
-rw-r--r--data/_python3.7/sysconfig-debian-schemes.diff88
-rw-r--r--data/libpython3.7-dev/_metadata/in.1200.000
-rw-r--r--data/libpython3.7/_metadata/in.1200.000
-rw-r--r--data/libpython3.7/make.sh2
-rw-r--r--data/python/_metadata/depends1
-rw-r--r--data/python/_metadata/in.1200.000
-rwxr-xr-xdata/python/_metadata/preinst3
-rw-r--r--data/python3.7/_metadata/in.1200.000
-rw-r--r--data/python3/_metadata/depends1
-rw-r--r--data/python3/_metadata/description1
-rw-r--r--data/python3/_metadata/in.1200.000
-rw-r--r--data/python3/_metadata/in.1443.000
l---------data/python3/_metadata/maintainer1
-rw-r--r--data/python3/_metadata/name1
-rw-r--r--data/python3/_metadata/priority1
-rw-r--r--data/python3/_metadata/role1
-rw-r--r--data/python3/_metadata/section1
-rw-r--r--data/python3/_metadata/tags1
l---------data/python3/_metadata/version1
-rw-r--r--data/python3/make.sh1
25 files changed, 395 insertions, 11 deletions
diff --git a/data/_python3.7/arm-alignment.diff b/data/_python3.7/arm-alignment.diff
new file mode 100644
index 000000000..a7a4b394d
--- /dev/null
+++ b/data/_python3.7/arm-alignment.diff
@@ -0,0 +1,17 @@
+Author: Dave Jones <dave.jones@canonical.com>
+Description: Use aligned access for _sha3 module on ARM.
+--- a/Modules/_sha3/sha3module.c
++++ b/Modules/_sha3/sha3module.c
+@@ -64,6 +64,12 @@
+ #define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
+ #endif
+
++/* Bus error on 32-bit ARM due to un-aligned memory accesses; 64-bit ARM
++ * doesn't complain but un-aligned memory accesses are sub-optimal */
++#if defined(__arm__) || defined(__aarch64__)
++#define NO_MISALIGNED_ACCESSES
++#endif
++
+ /* mangle names */
+ #define KeccakF1600_FastLoop_Absorb _PySHA3_KeccakF1600_FastLoop_Absorb
+ #define Keccak_HashFinal _PySHA3_Keccak_HashFinal
diff --git a/data/_python3.7/distutils-install-layout.diff b/data/_python3.7/distutils-install-layout.diff
new file mode 100644
index 000000000..11c25a307
--- /dev/null
+++ b/data/_python3.7/distutils-install-layout.diff
@@ -0,0 +1,262 @@
+# DP: distutils: Add an option --install-layout=deb, which
+# DP: - installs into $prefix/dist-packages instead of $prefix/site-packages.
+# DP: - doesn't encode the python version into the egg name.
+
+--- a/Lib/distutils/command/install_egg_info.py
++++ b/Lib/distutils/command/install_egg_info.py
+@@ -14,18 +14,38 @@ class install_egg_info(Command):
+ description = "Install package's PKG-INFO metadata as an .egg-info file"
+ user_options = [
+ ('install-dir=', 'd', "directory to install to"),
++ ('install-layout', None, "custom installation layout"),
+ ]
+
+ def initialize_options(self):
+ self.install_dir = None
++ self.install_layout = None
++ self.prefix_option = None
+
+ def finalize_options(self):
+ self.set_undefined_options('install_lib',('install_dir','install_dir'))
+- basename = "%s-%s-py%d.%d.egg-info" % (
+- to_filename(safe_name(self.distribution.get_name())),
+- to_filename(safe_version(self.distribution.get_version())),
+- *sys.version_info[:2]
+- )
++ self.set_undefined_options('install',('install_layout','install_layout'))
++ self.set_undefined_options('install',('prefix_option','prefix_option'))
++ if self.install_layout:
++ if not self.install_layout.lower() in ['deb', 'unix']:
++ raise DistutilsOptionError(
++ "unknown value for --install-layout")
++ no_pyver = (self.install_layout.lower() == 'deb')
++ elif self.prefix_option:
++ no_pyver = False
++ else:
++ no_pyver = True
++ if no_pyver:
++ basename = "%s-%s.egg-info" % (
++ to_filename(safe_name(self.distribution.get_name())),
++ to_filename(safe_version(self.distribution.get_version()))
++ )
++ else:
++ basename = "%s-%s-py%d.%d.egg-info" % (
++ to_filename(safe_name(self.distribution.get_name())),
++ to_filename(safe_version(self.distribution.get_version())),
++ *sys.version_info[:2]
++ )
+ self.target = os.path.join(self.install_dir, basename)
+ self.outputs = [self.target]
+
+--- a/Lib/distutils/command/install.py
++++ b/Lib/distutils/command/install.py
+@@ -35,6 +35,20 @@ INSTALL_SCHEMES = {
+ 'scripts': '$base/bin',
+ 'data' : '$base',
+ },
++ 'unix_local': {
++ 'purelib': '$base/local/lib/python$py_version_short/dist-packages',
++ 'platlib': '$platbase/local/lib/python$py_version_short/dist-packages',
++ 'headers': '$base/local/include/python$py_version_short/$dist_name',
++ 'scripts': '$base/local/bin',
++ 'data' : '$base/local',
++ },
++ 'deb_system': {
++ 'purelib': '$base/lib/python3/dist-packages',
++ 'platlib': '$platbase/lib/python3/dist-packages',
++ 'headers': '$base/include/python$py_version_short/$dist_name',
++ 'scripts': '$base/bin',
++ 'data' : '$base',
++ },
+ 'unix_home': {
+ 'purelib': '$base/lib/python',
+ 'platlib': '$base/lib/python',
+@@ -131,6 +145,9 @@ class install(Command):
+
+ ('record=', None,
+ "filename in which to record list of installed files"),
++
++ ('install-layout=', None,
++ "installation layout to choose (known values: deb, unix)"),
+ ]
+
+ boolean_options = ['compile', 'force', 'skip-build']
+@@ -151,6 +168,7 @@ class install(Command):
+ self.exec_prefix = None
+ self.home = None
+ self.user = 0
++ self.prefix_option = None
+
+ # These select only the installation base; it's up to the user to
+ # specify the installation scheme (currently, that means supplying
+@@ -172,6 +190,9 @@ class install(Command):
+ self.install_userbase = USER_BASE
+ self.install_usersite = USER_SITE
+
++ # enable custom installation, known values: deb
++ self.install_layout = None
++
+ self.compile = None
+ self.optimize = None
+
+@@ -413,6 +434,7 @@ class install(Command):
+ self.install_base = self.install_platbase = self.home
+ self.select_scheme("unix_home")
+ else:
++ self.prefix_option = self.prefix
+ if self.prefix is None:
+ if self.exec_prefix is not None:
+ raise DistutilsOptionError(
+@@ -427,7 +449,26 @@ class install(Command):
+
+ self.install_base = self.prefix
+ self.install_platbase = self.exec_prefix
+- self.select_scheme("unix_prefix")
++ if self.install_layout:
++ if self.install_layout.lower() in ['deb']:
++ self.select_scheme("deb_system")
++ elif self.install_layout.lower() in ['unix']:
++ self.select_scheme("unix_prefix")
++ else:
++ raise DistutilsOptionError(
++ "unknown value for --install-layout")
++ elif ((self.prefix_option and
++ os.path.normpath(self.prefix) != '/usr/local')
++ or sys.base_prefix != sys.prefix
++ or 'PYTHONUSERBASE' in os.environ
++ or 'VIRTUAL_ENV' in os.environ
++ or 'real_prefix' in sys.__dict__):
++ self.select_scheme("unix_prefix")
++ else:
++ if os.path.normpath(self.prefix) == '/usr/local':
++ self.prefix = self.exec_prefix = '/usr'
++ self.install_base = self.install_platbase = '/usr'
++ self.select_scheme("unix_local")
+
+ def finalize_other(self):
+ """Finalizes options for non-posix platforms"""
+--- a/Lib/distutils/sysconfig.py
++++ b/Lib/distutils/sysconfig.py
+@@ -135,6 +135,7 @@ def get_python_lib(plat_specific=0, stan
+ If 'prefix' is supplied, use it instead of sys.base_prefix or
+ sys.base_exec_prefix -- i.e., ignore 'plat_specific'.
+ """
++ is_default_prefix = not prefix or os.path.normpath(prefix) in ('/usr', '/usr/local')
+ if prefix is None:
+ if standard_lib:
+ prefix = plat_specific and BASE_EXEC_PREFIX or BASE_PREFIX
+@@ -146,6 +147,12 @@ def get_python_lib(plat_specific=0, stan
+ "lib", "python" + get_python_version())
+ if standard_lib:
+ return libpython
++ elif (is_default_prefix and
++ 'PYTHONUSERBASE' not in os.environ and
++ 'VIRTUAL_ENV' not in os.environ and
++ 'real_prefix' not in sys.__dict__ and
++ sys.prefix == sys.base_prefix):
++ return os.path.join(prefix, "lib", "python3", "dist-packages")
+ else:
+ return os.path.join(libpython, "site-packages")
+ elif os.name == "nt":
+--- a/Lib/site.py
++++ b/Lib/site.py
+@@ -7,12 +7,18 @@
+ This will append site-specific paths to the module search path. On
+ Unix (including Mac OSX), it starts with sys.prefix and
+ sys.exec_prefix (if different) and appends
+-lib/python<version>/site-packages.
++lib/python3/dist-packages.
+ On other platforms (such as Windows), it tries each of the
+ prefixes directly, as well as with lib/site-packages appended. The
+ resulting directories, if they exist, are appended to sys.path, and
+ also inspected for path configuration files.
+
++For Debian and derivatives, this sys.path is augmented with directories
++for packages distributed within the distribution. Local addons go
++into /usr/local/lib/python<version>/dist-packages, Debian addons
++install into /usr/lib/python3/dist-packages.
++/usr/lib/python<version>/site-packages is not used.
++
+ If a file named "pyvenv.cfg" exists one directory above sys.executable,
+ sys.prefix and sys.exec_prefix are set to that directory and
+ it is also checked for site-packages (sys.base_prefix and
+@@ -334,9 +340,20 @@ def getsitepackages(prefixes=None):
+ seen.add(prefix)
+
+ if os.sep == '/':
++ if 'VIRTUAL_ENV' in os.environ or sys.base_prefix != sys.prefix:
++ sitepackages.append(os.path.join(prefix, "lib",
++ "python" + sys.version[:3],
++ "site-packages"))
++ sitepackages.append(os.path.join(prefix, "local/lib",
++ "python" + sys.version[:3],
++ "dist-packages"))
++ sitepackages.append(os.path.join(prefix, "lib",
++ "python3",
++ "dist-packages"))
++ # this one is deprecated for Debian
+ sitepackages.append(os.path.join(prefix, "lib",
+- "python%d.%d" % sys.version_info[:2],
+- "site-packages"))
++ "python" + sys.version[:3],
++ "dist-packages"))
+ else:
+ sitepackages.append(prefix)
+ sitepackages.append(os.path.join(prefix, "lib", "site-packages"))
+--- a/Lib/test/test_site.py
++++ b/Lib/test/test_site.py
+@@ -269,10 +269,10 @@ class HelperFunctionsTests(unittest.Test
+ dirs = site.getsitepackages()
+ if os.sep == '/':
+ # OS X, Linux, FreeBSD, etc
+- self.assertEqual(len(dirs), 1)
+- wanted = os.path.join('xoxo', 'lib',
++ self.assertEqual(len(dirs), 3)
++ wanted = os.path.join('xoxo', 'local', 'lib',
+ 'python%d.%d' % sys.version_info[:2],
+- 'site-packages')
++ 'dist-packages')
+ self.assertEqual(dirs[0], wanted)
+ else:
+ # other platforms
+--- a/Lib/distutils/tests/test_bdist_dumb.py
++++ b/Lib/distutils/tests/test_bdist_dumb.py
+@@ -85,7 +85,7 @@ class BuildDumbTestCase(support.TempdirM
+ fp.close()
+
+ contents = sorted(filter(None, map(os.path.basename, contents)))
+- wanted = ['foo-0.1-py%s.%s.egg-info' % sys.version_info[:2], 'foo.py']
++ wanted = ['foo-0.1.egg-info', 'foo.py']
+ if not sys.dont_write_bytecode:
+ wanted.append('foo.%s.pyc' % sys.implementation.cache_tag)
+ self.assertEqual(contents, sorted(wanted))
+--- a/Lib/distutils/tests/test_install.py
++++ b/Lib/distutils/tests/test_install.py
+@@ -193,7 +193,7 @@ class InstallTestCase(support.TempdirMan
+ found = [os.path.basename(line) for line in content.splitlines()]
+ expected = ['hello.py', 'hello.%s.pyc' % sys.implementation.cache_tag,
+ 'sayhi',
+- 'UNKNOWN-0.0.0-py%s.%s.egg-info' % sys.version_info[:2]]
++ 'UNKNOWN-0.0.0.egg-info']
+ self.assertEqual(found, expected)
+
+ def test_record_extensions(self):
+@@ -226,7 +226,7 @@ class InstallTestCase(support.TempdirMan
+
+ found = [os.path.basename(line) for line in content.splitlines()]
+ expected = [_make_ext_name('xx'),
+- 'UNKNOWN-0.0.0-py%s.%s.egg-info' % sys.version_info[:2]]
++ 'UNKNOWN-0.0.0.egg-info']
+ self.assertEqual(found, expected)
+
+ def test_debug_mode(self):
+--- a/Lib/pydoc.py
++++ b/Lib/pydoc.py
+@@ -420,6 +420,7 @@ class Doc:
+ 'marshal', 'posix', 'signal', 'sys',
+ '_thread', 'zipimport') or
+ (file.startswith(basedir) and
++ not file.startswith(os.path.join(basedir, 'dist-packages')) and
+ not file.startswith(os.path.join(basedir, 'site-packages')))) and
+ object.__name__ not in ('xml.etree', 'test.pydoc_mod')):
+ if docloc.startswith(("http://", "https://")):
diff --git a/data/_python3.7/make.sh b/data/_python3.7/make.sh
index 128f98d09..50c7d7310 100644
--- a/data/_python3.7/make.sh
+++ b/data/_python3.7/make.sh
@@ -4,18 +4,25 @@ pkg:extract
# Build for the host. Configure is picky about having python >= 3.7.
-if [ -z "$(which python3.7)" ]; then
+pushd Python*
+pkg:patch
+popd
+
+if true; then
+#if [ -z "$(which python3.7)" ]; then
SRC_DIR="$(echo *)"
- mkdir host-python
- cd host-python
- ../Python*/configure --prefix=${PWD}
+ mkdir build-python
+ cd build-python
+ ../Python*/configure --prefix=${PWD} --with-openssl=/opt/local/
make install -j16
export PATH="${PWD}/bin:$PATH"
cd ..
+#fi
+else
+ export PATH="${PWD}/build-python/bin:$PATH"
fi
cd Python*
-pkg:patch
# Feel free to use another variable for this.
# PYTHON_FOR_BUILD will break the build (don't use it).
@@ -24,7 +31,11 @@ pkg:patch
export cross_compiling=yes
autoconf
-pkg:configure CPPFLAGS="-I$(PKG_DEST_ ncurses)"/usr/include/ncursesw \
+cd ..
+mkdir host-python
+cd host-python
+PKG_CONF="$(ls ../Python*/configure)" pkg:configure \
+ CPPFLAGS="-I$(PKG_DEST_ ncurses)"/usr/include/ncursesw \
--enable-loadable-sqlite-extensions \
--with-system-ffi --with-signal-module --enable-big-digits \
--with-system-expat --enable-ipv6 --without-ensurepip \
diff --git a/data/_python3.7/python3.7_3.7.3-2+deb10u1.debian.xz b/data/_python3.7/python3.7_3.7.3-2+deb10u1.debian.xz
new file mode 100644
index 000000000..4673e228e
--- /dev/null
+++ b/data/_python3.7/python3.7_3.7.3-2+deb10u1.debian.xz
Binary files differ
diff --git a/data/_python3.7/Python-3.7.3.tar.xz b/data/_python3.7/python3.7_3.7.3.orig.tar.xz
index 9d6454c5c..9d6454c5c 100644
--- a/data/_python3.7/Python-3.7.3.tar.xz
+++ b/data/_python3.7/python3.7_3.7.3.orig.tar.xz
Binary files differ
diff --git a/data/_python3.7/sysconfig-debian-schemes.diff b/data/_python3.7/sysconfig-debian-schemes.diff
new file mode 100644
index 000000000..07eb5bf05
--- /dev/null
+++ b/data/_python3.7/sysconfig-debian-schemes.diff
@@ -0,0 +1,88 @@
+# DP: Add schemes 'deb_system' and 'posix_local', make the latter the default
+
+Index: b/Lib/sysconfig.py
+===================================================================
+--- a/Lib/sysconfig.py
++++ b/Lib/sysconfig.py
+@@ -31,6 +31,30 @@ _INSTALL_SCHEMES = {
+ 'scripts': '{base}/bin',
+ 'data': '{base}',
+ },
++ 'deb_system': {
++ 'stdlib': '{installed_base}/lib/python{py_version_short}',
++ 'platstdlib': '{platbase}/lib/python{py_version_short}',
++ 'purelib': '{base}/lib/python3/dist-packages',
++ 'platlib': '{platbase}/lib/python3/dist-packages',
++ 'include':
++ '{installed_base}/include/python{py_version_short}{abiflags}',
++ 'platinclude':
++ '{installed_platbase}/include/python{py_version_short}{abiflags}',
++ 'scripts': '{base}/bin',
++ 'data': '{base}',
++ },
++ 'posix_local': {
++ 'stdlib': '{installed_base}/lib/python{py_version_short}',
++ 'platstdlib': '{platbase}/lib/python{py_version_short}',
++ 'purelib': '{base}/local/lib/python{py_version_short}/dist-packages',
++ 'platlib': '{platbase}/local/lib/python{py_version_short}/dist-packages',
++ 'include':
++ '{installed_base}/local/include/python{py_version_short}{abiflags}',
++ 'platinclude':
++ '{installed_platbase}/local/include/python{py_version_short}{abiflags}',
++ 'scripts': '{base}/local/bin',
++ 'data': '{base}',
++ },
+ 'posix_home': {
+ 'stdlib': '{installed_base}/lib/python',
+ 'platstdlib': '{base}/lib/python',
+@@ -136,7 +160,7 @@ def is_python_build(check_home=False):
+ _PYTHON_BUILD = is_python_build(True)
+
+ if _PYTHON_BUILD:
+- for scheme in ('posix_prefix', 'posix_home'):
++ for scheme in ('posix_prefix', 'posix_home', 'posix_local', 'deb_system'):
+ _INSTALL_SCHEMES[scheme]['include'] = '{srcdir}/Include'
+ _INSTALL_SCHEMES[scheme]['platinclude'] = '{projectbase}/.'
+
+@@ -174,7 +198,16 @@ def _expand_vars(scheme, vars):
+ def _get_default_scheme():
+ if os.name == 'posix':
+ # the default scheme for posix is posix_prefix
+- return 'posix_prefix'
++ if 'real_prefix' in sys.__dict__ or 'VIRTUAL_ENV' in os.environ:
++ # virtual environments
++ return 'posix_prefix'
++ else:
++ # default to /usr for package builds, /usr/local otherwise
++ deb_build = os.environ.get('DEB_PYTHON_INSTALL_LAYOUT', 'posix_local')
++ if deb_build in ('deb', 'deb_system'):
++ return 'deb_system'
++ else:
++ return 'posix_local'
+ return os.name
+
+
+@@ -472,7 +505,7 @@ def get_config_h_filename():
+ else:
+ inc_dir = _sys_home or _PROJECT_BASE
+ else:
+- inc_dir = get_path('platinclude')
++ inc_dir = get_path('platinclude', 'posix_prefix')
+ return os.path.join(inc_dir, 'pyconfig.h')
+
+
+Index: b/Lib/test/test_sysconfig.py
+===================================================================
+--- a/Lib/test/test_sysconfig.py
++++ b/Lib/test/test_sysconfig.py
+@@ -227,8 +227,8 @@ class TestSysConfig(unittest.TestCase):
+ self.assertTrue(os.path.isfile(config_h), config_h)
+
+ def test_get_scheme_names(self):
+- wanted = ('nt', 'nt_user', 'osx_framework_user',
+- 'posix_home', 'posix_prefix', 'posix_user')
++ wanted = ('deb_system', 'nt', 'nt_user', 'osx_framework_user',
++ 'posix_home', 'posix_local', 'posix_prefix', 'posix_user')
+ self.assertEqual(get_scheme_names(), wanted)
+
+ @skip_unless_symlink
diff --git a/data/libpython3.7-dev/_metadata/in.1200.00 b/data/libpython3.7-dev/_metadata/in.1200.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libpython3.7-dev/_metadata/in.1200.00
diff --git a/data/libpython3.7/_metadata/in.1200.00 b/data/libpython3.7/_metadata/in.1200.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libpython3.7/_metadata/in.1200.00
diff --git a/data/libpython3.7/make.sh b/data/libpython3.7/make.sh
index 9516da1c9..2bb644e34 100644
--- a/data/libpython3.7/make.sh
+++ b/data/libpython3.7/make.sh
@@ -1,4 +1,4 @@
pkg: mkdir -p /usr
LIBNAME=${PKG_NAME#lib}
cp -a "$(PKG_DEST_ _${LIBNAME})"/usr/lib "${PKG_DEST}"/usr/
-pkg: rm -rf /usr/lib/pkgconfig
+rm -rf "${PKG_DEST}"/usr/lib/{pkgconfig,python*/config*/}
diff --git a/data/python/_metadata/depends b/data/python/_metadata/depends
deleted file mode 100644
index 5cd0cde8f..000000000
--- a/data/python/_metadata/depends
+++ /dev/null
@@ -1 +0,0 @@
-cydia (>= 1.0.2355-38)
diff --git a/data/python/_metadata/in.1200.00 b/data/python/_metadata/in.1200.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/python/_metadata/in.1200.00
diff --git a/data/python/_metadata/preinst b/data/python/_metadata/preinst
deleted file mode 100755
index 37b98fade..000000000
--- a/data/python/_metadata/preinst
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-/usr/libexec/cydia/move.sh /usr/lib/python2.5
-exit 0
diff --git a/data/python3.7/_metadata/in.1200.00 b/data/python3.7/_metadata/in.1200.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/python3.7/_metadata/in.1200.00
diff --git a/data/python3/_metadata/depends b/data/python3/_metadata/depends
new file mode 100644
index 000000000..a3079c597
--- /dev/null
+++ b/data/python3/_metadata/depends
@@ -0,0 +1 @@
+python3.7
diff --git a/data/python3/_metadata/description b/data/python3/_metadata/description
new file mode 100644
index 000000000..cf36e1f16
--- /dev/null
+++ b/data/python3/_metadata/description
@@ -0,0 +1 @@
+Interpreted, interactive, object-oriendted programming language.
diff --git a/data/python3/_metadata/in.1200.00 b/data/python3/_metadata/in.1200.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/python3/_metadata/in.1200.00
diff --git a/data/python3/_metadata/in.1443.00 b/data/python3/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/python3/_metadata/in.1443.00
diff --git a/data/python3/_metadata/maintainer b/data/python3/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/python3/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/python3/_metadata/name b/data/python3/_metadata/name
new file mode 100644
index 000000000..358eeddf0
--- /dev/null
+++ b/data/python3/_metadata/name
@@ -0,0 +1 @@
+Python 3
diff --git a/data/python3/_metadata/priority b/data/python3/_metadata/priority
new file mode 100644
index 000000000..134d9bc32
--- /dev/null
+++ b/data/python3/_metadata/priority
@@ -0,0 +1 @@
+optional
diff --git a/data/python3/_metadata/role b/data/python3/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/python3/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/python3/_metadata/section b/data/python3/_metadata/section
new file mode 100644
index 000000000..ddc7f1fd8
--- /dev/null
+++ b/data/python3/_metadata/section
@@ -0,0 +1 @@
+Scripting
diff --git a/data/python3/_metadata/tags b/data/python3/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/python3/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/python3/_metadata/version b/data/python3/_metadata/version
new file mode 120000
index 000000000..116ce676f
--- /dev/null
+++ b/data/python3/_metadata/version
@@ -0,0 +1 @@
+../../_python3.7/_metadata/version \ No newline at end of file
diff --git a/data/python3/make.sh b/data/python3/make.sh
new file mode 100644
index 000000000..a7bfb4f16
--- /dev/null
+++ b/data/python3/make.sh
@@ -0,0 +1 @@
+pkg: mkdir -p /