commit: eadc92cf388dcfd77ec8e1ef7c91a2f8d0574219
parent a94c8dbdce36dab9d80967e1c22581c343f0b7e9
Author: fosslinux <fosslinux@aussies.space>
Date: Mon, 10 Oct 2022 22:20:19 +1100
Add Python-2.5.6
Diffstat:
9 files changed, 229 insertions(+), 0 deletions(-)
diff --git a/sysa/SHA256SUMS.pkgs b/sysa/SHA256SUMS.pkgs
@@ -2,6 +2,7 @@ dd761c6ab360b9ae66816b10fae38c3d547a146028188083295130f25dd03f5d Python-2.0.1_0
d64800e5da112f1cbdc3d2799ebd264d07fe8f111dd41edc37ed2276b3acda41 Python-2.0.1_1.tar.bz2
bc392178f552280ba1063123257bcf549fdea088e1f78f60c93e19c9e05fa3f6 Python-2.3.7_0.tar.bz2
97acf5c85ebfb47192fc310805ab3c80cb56f9d614027d6bdee11ae5934c2ab9 Python-2.3.7_1.tar.bz2
+e3e79771785905e169a19d8b0d784e74e5acf75889ebba2e18fcfb3ac01012f2 Python-2.5.6_0.tar.bz2
2fde9f584a275efc5c8bf23adaa690e06ab6922ecbc35108731e87f565ddb2b6 autoconf-2.12_0.tar.bz2
40d88d4b1048ab70eaecf753fb77713dfcaa9c9c72252cd36459236034cdcdfd autoconf-2.13_0.tar.bz2
38f0de4c816088c514dbfb1536779f2204426a95bd6f57fa87b83bffefcaa390 autoconf-2.52_0.tar.bz2
diff --git a/sysc/Python-2.5.6/Python-2.5.6.sh b/sysc/Python-2.5.6/Python-2.5.6.sh
@@ -0,0 +1,78 @@
+# SPDX-FileCopyrightText: 2022 fosslinux <fosslinux@aussies.space>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+src_prepare() {
+ default
+
+ # Remove broken file
+ rm Lib/test/test_pep263.py
+
+ # Delete generated files
+ rm Modules/glmodule.c
+ rm Include/Python-ast.h Python/Python-ast.c
+ rm Lib/stringprep.py
+ rm Misc/Vim/python.vim
+ mv Lib/plat-generic .
+ rm -r Lib/plat-*
+ mv plat-generic Lib/
+ grep generated -r . -l | grep encodings | xargs rm
+
+ # Regenerate unicode
+ rm Modules/unicodedata_db.h Modules/unicodename_db.h Objects/unicodetype_db.h
+ for f in UnicodeData CompositionExclusions EastAsianWidth; do
+ mv "../${f}-3.2.0.txt" .
+ mv "../${f}-4.1.0.txt" "${f}.txt"
+ done
+ python Tools/unicode/makeunicodedata.py
+
+ # Regenerate sre_constants.h
+ rm Modules/sre_constants.h
+ python Lib/sre_constants.py
+
+ # Regen ast module
+ rm Lib/compiler/ast.py
+ pushd Tools/compiler
+ python astgen.py > ../../Lib/compiler/ast.py
+ popd
+
+ # Regenerate autoconf
+ autoreconf-2.71 -fi
+}
+
+src_configure() {
+ CFLAGS="-U__DATE__ -U__TIME__" \
+ ./configure \
+ --prefix="${PREFIX}" \
+ --libdir="${PREFIX}/lib/musl"
+}
+
+src_compile() {
+ # Temporarily break include cycle
+ patch -Np0 -i graminit-regen.patch
+ # Build pgen
+ make Parser/pgen
+ # Regen graminit.c and graminit.h
+ make Include/graminit.h
+
+ # Regenerate some Python scripts using the other regenerated files
+ # Must move them out to avoid using Lib/ module files which are
+ # incompatible with running version of Python
+ cp Lib/{symbol,keyword,token}.py .
+ python symbol.py
+ python keyword.py
+ python token.py
+
+ # Undo change
+ patch -Np0 -R -i graminit-regen.patch
+ # Now build the main program
+ make CFLAGS="-U__DATE__ -U__TIME__"
+}
+
+src_install() {
+ default
+
+ # Remove non-reproducible .pyc/o files
+ find "${DESTDIR}" -name "*.pyc" -delete
+ find "${DESTDIR}" -name "*.pyo" -delete
+}
diff --git a/sysc/Python-2.5.6/files/graminit-regen.patch b/sysc/Python-2.5.6/files/graminit-regen.patch
@@ -0,0 +1,31 @@
+SPDX-FileCopyrightText: 2022 fosslinux <fosslinux@aussies.space>
+
+SPDX-License-Identifier: PSF-2.0
+
+There is a cycle in the build process. graminit.h requires
+parsetok.c to be built, but graminit.h is included in parsetok.c.
+Luckily the cycle can be broken by just NOP-ing the logic from
+graminit.h.
+
+We apply this patch before regen-ing graminit.h and revert it
+afterward.
+
+--- Parser/parsetok.c 2022-10-09 20:22:15.431229996 +1100
++++ Parser/parsetok.c 2022-10-09 20:22:57.981822483 +1100
+@@ -8,7 +8,6 @@
+ #include "parser.h"
+ #include "parsetok.h"
+ #include "errcode.h"
+-#include "graminit.h"
+
+ int Py_TabcheckFlag;
+
+@@ -239,7 +238,7 @@
+ err_ret->text = text;
+ }
+ } else if (tok->encoding != NULL) {
+- node* r = PyNode_New(encoding_decl);
++ node* r = NULL;
+ if (!r) {
+ err_ret->error = E_NOMEM;
+ n = NULL;
diff --git a/sysc/Python-2.5.6/patches/keyword.patch b/sysc/Python-2.5.6/patches/keyword.patch
@@ -0,0 +1,28 @@
+SPDX-FileCopyrightText: 2022 fosslinux <fosslinux@aussies.space>
+
+SPDX-License-Identifier: PSF-2.0
+
+frozenset() is a feature only added in Python 2.5, but we are
+building Python 2.5, so we must bypass this logic. (It is not
+critical, so we can just remove it).
+
+--- Lib/keyword.py 2022-10-11 12:51:13.050744758 +1100
++++ Lib/keyword.py 2022-10-11 12:52:05.946372559 +1100
+@@ -10,7 +10,7 @@
+ python Lib/keyword.py
+ """
+
+-__all__ = ["iskeyword", "kwlist"]
++__all__ = ["kwlist"]
+
+ kwlist = [
+ #--start keywords--
+@@ -48,8 +48,6 @@
+ #--end keywords--
+ ]
+
+-iskeyword = frozenset(kwlist).__contains__
+-
+ def main():
+ import sys, re
+
diff --git a/sysc/Python-2.5.6/patches/posixmodule.patch b/sysc/Python-2.5.6/patches/posixmodule.patch
@@ -0,0 +1,33 @@
+SPDX-FileCopyrightText: 2022 fosslinux <fosslinux@aussies.space>
+
+SPDX-License-Identifier: PSF-2.0
+
+musl (correctly) implements the POSIX posix_close function, however
+this was added after Python 2.5.6 was released.
+
+--- Modules/posixmodule.c 2022-10-05 18:38:46.718131893 +1100
++++ Modules/posixmodule.c 2022-10-05 18:39:07.049250312 +1100
+@@ -5208,12 +5208,12 @@
+ }
+
+
+-PyDoc_STRVAR(posix_close__doc__,
++PyDoc_STRVAR(py_posix_close__doc__,
+ "close(fd)\n\n\
+ Close a file descriptor (for low level IO).");
+
+ static PyObject *
+-posix_close(PyObject *self, PyObject *args)
++py_posix_close(PyObject *self, PyObject *args)
+ {
+ int fd, res;
+ if (!PyArg_ParseTuple(args, "i:close", &fd))
+@@ -7371,7 +7371,7 @@
+ {"tcsetpgrp", posix_tcsetpgrp, METH_VARARGS, posix_tcsetpgrp__doc__},
+ #endif /* HAVE_TCSETPGRP */
+ {"open", posix_open, METH_VARARGS, posix_open__doc__},
+- {"close", posix_close, METH_VARARGS, posix_close__doc__},
++ {"close", py_posix_close, METH_VARARGS, py_posix_close__doc__},
+ {"dup", posix_dup, METH_VARARGS, posix_dup__doc__},
+ {"dup2", posix_dup2, METH_VARARGS, posix_dup2__doc__},
+ {"lseek", posix_lseek, METH_VARARGS, posix_lseek__doc__},
diff --git a/sysc/Python-2.5.6/patches/sorted.patch b/sysc/Python-2.5.6/patches/sorted.patch
@@ -0,0 +1,29 @@
+SPDX-FileCopyrightText: 2022 fosslinux <fosslinux@aussies.space>
+
+SPDX-License-Identifier: PSF-2.0
+
+sorted() was only added in Python 2.5. But we are building Python 2.5.
+
+We cannot use .sort(), as it doesn't support the key= parameter.
+Instead we just use a basic custom selection sort to sort it ourselves
+using a custom key.
+
+--- Tools/compiler/astgen.py.bak 2022-07-11 09:24:59.600238862 +1000
++++ Tools/compiler/astgen.py 2022-07-11 09:32:25.814974174 +1000
+@@ -215,7 +215,15 @@
+ # some extra code for a Node's __init__ method
+ name = mo.group(1)
+ cur = classes[name]
+- return sorted(classes.values(), key=lambda n: n.name)
++ ret = classes.values()
++ # basic custom selection sort
++ for i in range(len(ret)):
++ min_i = i
++ for j in range(i + 1, len(ret)):
++ if ret[min_i].name > ret[j].name:
++ min_i = j
++ ret[i], ret[min_i] = ret[min_i], ret[i]
++ return ret
+
+ def main():
+ prologue, epilogue = load_boilerplate(sys.argv[-1])
diff --git a/sysc/Python-2.5.6/patches/sre_constants.patch b/sysc/Python-2.5.6/patches/sre_constants.patch
@@ -0,0 +1,20 @@
+SPDX-FileCopyrightText: 2022 fosslinux <fosslinux@aussies.space>
+
+SPDX-License-Identifier: PSF-2.0
+
+Again, Python 2.5 added the key= argument for sorting functions,
+which is not available when we are building Python 2.5.
+
+Sorting is absolutely unnessecary when generating defines for a
+header file so we can just remove it.
+
+--- Lib/sre_constants.py 2004-08-25 12:22:30.000000000 +1000
++++ Lib/sre_constants.py 2022-10-09 20:18:40.332233858 +1100
+@@ -219,7 +219,6 @@
+ if __name__ == "__main__":
+ def dump(f, d, prefix):
+ items = d.items()
+- items.sort(key=lambda a: a[1])
+ for k, v in items:
+ f.write("#define %s_%s %s\n" % (prefix, k.upper(), v))
+ f = open("sre_constants.h", "w")
diff --git a/sysc/Python-2.5.6/sources b/sysc/Python-2.5.6/sources
@@ -0,0 +1,7 @@
+https://www.python.org/ftp/python/2.5.6/Python-2.5.6.tar.bz2 57e04484de051decd4741fb4a4a3f543becc9a219af8b8063b5541e270f26dcc
+http://ftp.unicode.org/Public/3.2-Update/UnicodeData-3.2.0.txt 5e444028b6e76d96f9dc509609c5e3222bf609056f35e5fcde7e6fb8a58cd446
+http://ftp.unicode.org/Public/3.2-Update/CompositionExclusions-3.2.0.txt 1d3a450d0f39902710df4972ac4a60ec31fbcb54ffd4d53cd812fc1200c732cb
+http://ftp.unicode.org/Public/3.2-Update/EastAsianWidth-3.2.0.txt ce19f35ffca911bf492aab6c0d3f6af3d1932f35d2064cf2fe14e10be29534cb
+http://ftp.unicode.org/Public/4.1.0/ucd/UnicodeData.txt a9f03f6a061ee210c53e33782288a208bed48c65c70d307b2b214989cedfdab0 UnicodeData-4.1.0.txt
+http://ftp.unicode.org/Public/4.1.0/ucd/CompositionExclusions.txt 1003a6896078e77532a017b135762501ff0a540ba33694e32b6177f093ebe6b2 CompositionExclusions-4.1.0.txt
+http://ftp.unicode.org/Public/4.1.0/ucd/EastAsianWidth.txt 089ed5b2becd3196e61124d36e968474d3b7152cb5a3fb56594c34ab1e698e92 EastAsianWidth-4.1.0.txt
diff --git a/sysc/run2.sh b/sysc/run2.sh
@@ -111,6 +111,8 @@ build Python-2.3.7 stage1.sh
build Python-2.3.7 stage2.sh
+build Python-2.5.6
+
if [ "$FORCE_TIMESTAMPS" = True ] ; then
echo 'Forcing all files timestamps to be 0 unix time.'
canonicalise_all_files_timestamp