2022-08-02 14:03:17 +03:00
|
|
|
|
distributable:
|
|
|
|
|
url: https://www.python.org/ftp/python/{{ version }}/Python-{{ version }}.tar.xz
|
|
|
|
|
strip-components: 1
|
|
|
|
|
|
|
|
|
|
versions:
|
|
|
|
|
github: python/cpython/tags
|
|
|
|
|
|
2022-09-08 23:40:35 +03:00
|
|
|
|
provides:
|
|
|
|
|
- bin/python
|
|
|
|
|
- bin/python3
|
|
|
|
|
- bin/pip
|
|
|
|
|
- bin/pip3
|
|
|
|
|
|
2022-08-02 14:03:17 +03:00
|
|
|
|
dependencies:
|
2022-08-05 04:19:01 +03:00
|
|
|
|
# recommended but none are actually required
|
2022-08-03 21:27:08 +03:00
|
|
|
|
zlib.net: 1
|
2022-08-05 04:19:01 +03:00
|
|
|
|
sourceware.org/bzip2: 1
|
|
|
|
|
openssl.org: ^1.1
|
|
|
|
|
sourceware.org/libffi: 3
|
|
|
|
|
libexpat.github.io: 2
|
|
|
|
|
bytereef.org/mpdecimal: 2
|
|
|
|
|
tukaani.org/xz: 5
|
|
|
|
|
sqlite.org: 3
|
|
|
|
|
gnu.org/readline: 8
|
|
|
|
|
invisible-island.net/ncurses: 6
|
2022-08-02 14:03:17 +03:00
|
|
|
|
|
2022-08-05 23:22:53 +03:00
|
|
|
|
#TODO pip should be python.org/pip and installed by default (as a recommended dependent) with python
|
|
|
|
|
#RATIONALE it is independently versioned
|
|
|
|
|
|
2022-08-02 14:03:17 +03:00
|
|
|
|
build:
|
|
|
|
|
dependencies:
|
|
|
|
|
tea.xyz/gx/cc: c99
|
|
|
|
|
tea.xyz/gx/make: '*'
|
2022-08-05 04:19:01 +03:00
|
|
|
|
freedesktop.org/pkg-config: ^0.29
|
|
|
|
|
|
|
|
|
|
#TODO use the diff
|
2022-09-08 23:40:35 +03:00
|
|
|
|
#TODO $libdir/_sysconfigdata__darwin_darwin.py contains non-relocatable paths
|
2022-08-02 14:03:17 +03:00
|
|
|
|
script: |
|
2022-08-03 21:27:08 +03:00
|
|
|
|
sed -i.bak -e 's|system_lib_dirs = .*|system_lib_dirs = os.getenv("LIBRARY_PATH").split(":")|' ./setup.py
|
|
|
|
|
sed -i.bak -e 's|system_include_dirs = .*|system_include_dirs = os.getenv("CPATH").split(":")|' ./setup.py
|
|
|
|
|
|
2022-08-02 14:03:17 +03:00
|
|
|
|
./configure $ARGS
|
|
|
|
|
make --jobs {{ hw.concurrency }}
|
|
|
|
|
make install
|
2022-08-05 23:22:53 +03:00
|
|
|
|
|
2022-09-08 23:40:35 +03:00
|
|
|
|
# provide unversioned symlinks
|
|
|
|
|
cd {{prefix}}/bin
|
|
|
|
|
for x in python pip idle pydoc; do
|
|
|
|
|
ln -sf ${x}{{ version.marketing }} $x
|
|
|
|
|
done
|
2022-08-05 23:22:53 +03:00
|
|
|
|
ln -sf python{{ version.marketing }}-config python-config
|
2022-09-08 23:40:35 +03:00
|
|
|
|
|
|
|
|
|
# strangely pip3 is a copy of pip3.10
|
|
|
|
|
if test ! -L pip{{version.major}}; then
|
|
|
|
|
rm pip{{version.major}}
|
|
|
|
|
ln -s pip{{version.marketing}} pip{{version.major}}
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# make relocatable
|
|
|
|
|
cd {{prefix}}
|
|
|
|
|
for binfile in $shebangs $confdir/python-config.py; do
|
|
|
|
|
sed -i.bak -e 's|#!{{ prefix }}/bin/|#!/usr/bin/env |g' $binfile
|
|
|
|
|
rm $binfile.bak
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
sed -i.bak -e 's|{{ prefix }}|\\$(shell tea --prefix)|g' $confdir/Makefile
|
|
|
|
|
rm $confdir/Makefile.bak
|
2022-08-02 14:03:17 +03:00
|
|
|
|
|
|
|
|
|
env:
|
|
|
|
|
ARGS:
|
|
|
|
|
- --prefix="{{ prefix }}"
|
|
|
|
|
# it’s 202x
|
|
|
|
|
- --enable-ipv6
|
|
|
|
|
# prevent auto updates -> we control that
|
2022-08-05 23:22:53 +03:00
|
|
|
|
# - --without-ensurepip
|
2022-08-02 14:03:17 +03:00
|
|
|
|
- --disable-loadable-sqlite-extensions
|
|
|
|
|
# use our libraries not the bundled ones
|
|
|
|
|
- --with-system-expat
|
|
|
|
|
- --with-system-ffi
|
|
|
|
|
- --with-system-libmpdec
|
|
|
|
|
# these two make our binary not portable
|
|
|
|
|
#- --enable-optimizations
|
|
|
|
|
#- --with-lto
|
2022-08-31 21:05:21 +03:00
|
|
|
|
# on macOS we want an option that is instead --enable-framework
|
2022-08-02 14:03:17 +03:00
|
|
|
|
- --enable-shared
|
2022-09-08 23:40:35 +03:00
|
|
|
|
libdir:
|
|
|
|
|
lib/python{{version.marketing}}
|
|
|
|
|
darwin:
|
|
|
|
|
confdir:
|
|
|
|
|
$libdir/config-{{version.marketing}}-darwin
|
|
|
|
|
linux:
|
|
|
|
|
ARCH: ${{hw.arch}}
|
|
|
|
|
confdir:
|
|
|
|
|
$libdir/config-{{version.marketing}}-${ARCH/-/_}-linux-gnu
|
|
|
|
|
shebangs:
|
|
|
|
|
- bin/2to3-{{version.marketing}}
|
|
|
|
|
- bin/idle{{version.marketing}}
|
|
|
|
|
- bin/pip{{version.marketing}}
|
|
|
|
|
- bin/pydoc{{version.marketing}}
|
|
|
|
|
- bin/python{{version.marketing}}-config
|
2022-08-10 21:58:22 +03:00
|
|
|
|
|
|
|
|
|
#FIXME get rid of these v*
|
|
|
|
|
OPENSSL_INCLUDES: /opt/openssl.org/v*/include
|
|
|
|
|
OPENSSL_LDFLAGS: -L/opt/openssl.org/v*/lib'
|
|
|
|
|
|
|
|
|
|
#FIXME we should get the include path from the ncurses `.pc` files
|
|
|
|
|
CPATH: /opt/invisible-island.net/ncurses/v*/include/ncursesw:$CPATH
|
|
|
|
|
|
|
|
|
|
# required for `setup.py` which is used to detect the libs for python’s modules
|
2022-08-05 04:19:01 +03:00
|
|
|
|
diff: |
|
|
|
|
|
diff --git a/setup.py b/setup.py
|
|
|
|
|
index 85a2b26..4f2f742 100644
|
|
|
|
|
--- a/setup.py
|
|
|
|
|
+++ b/setup.py
|
|
|
|
|
@@ -847,8 +847,8 @@ class PyBuildExt(build_ext):
|
|
|
|
|
add_dir_to_list(self.compiler.include_dirs,
|
|
|
|
|
sysconfig.get_config_var("INCLUDEDIR"))
|
|
|
|
|
|
|
|
|
|
- system_lib_dirs = ['/lib64', '/usr/lib64', '/lib', '/usr/lib']
|
|
|
|
|
- system_include_dirs = ['/usr/include']
|
|
|
|
|
+ system_lib_dirs = os.getenv("LIBRARY_PATH").split(":")
|
|
|
|
|
+ system_include_dirs = os.getenv("CPATH").split(":")
|
|
|
|
|
# lib_dirs and inc_dirs are used to search for files;
|
|
|
|
|
# if a file is found in one of those directories, it can
|
|
|
|
|
# be assumed that no additional -I,-L directives are needed.
|
2022-08-02 14:03:17 +03:00
|
|
|
|
|
|
|
|
|
test:
|
2022-08-03 21:27:08 +03:00
|
|
|
|
#TODO test all modules eg zlib module
|
2022-08-05 23:22:53 +03:00
|
|
|
|
script: |
|
2022-08-02 14:03:17 +03:00
|
|
|
|
python --version
|
2022-08-05 23:22:53 +03:00
|
|
|
|
pip --version
|