@ai-ecoverse/wasix-python 3.14.2-13 → 3.14.2-15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -3
- package/THIRD-PARTY-NOTICES.md +2 -1
- package/bin/python.wasm +0 -0
- package/include/python3.14/pyconfig.h +3 -3
- package/lib/libpython3.14.a +2 -2
- package/lib/python3.14/__pycache__/_slicc_site.cpython-314.pyc +0 -0
- package/lib/python3.14/__pycache__/_sysconfigdata__wasi_wasm32-wasix.cpython-314.pyc +0 -0
- package/lib/python3.14/_slicc_site.py +259 -3
- package/lib/python3.14/_sysconfig_vars__wasi_wasm32-wasix.json +11 -9
- package/lib/python3.14/_sysconfigdata__wasi_wasm32-wasix.py +15 -12
- package/lib/python3.14/site-packages/slicc-executable.pth +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -6,18 +6,54 @@ CPython 3.14 for slicc WASIX (`commands` `python` / `python3`).
|
|
|
6
6
|
|
|
7
7
|
- PIE dynamic-main (`dylink.0`) on wasix-sysroot 2025.9.30-18's `sysroot-ehpic` (legacy wasm EH), SOABI `cpython-314-wasm32-wasix`; native side modules (py-numpy, py-scipy, py-pandas, …) load by `dlopen`
|
|
8
8
|
- **File modes** (3.14.2-12, on slicc-kernel ≥ 1.35.1; older kernels keep the no-op modes): `os.umask`, `open()`/`os.mkdir` create modes, `os.chmod`, `tempfile.mkstemp` 600 / `mkdtemp` 700, pip console scripts 755
|
|
9
|
-
- Built in: `ssl`/`hashlib` (OpenSSL 3.5.9, `@ai-ecoverse/wasix-openssl`), `zlib` 1.3.1, `bz2`, `lzma` (xz 5.8.4), `sqlite3` (3.53.4; FTS5, JSON, math, R*Tree; no WAL, no extensions), `readline` 8.3 (ncurses 6.5 terminfo compiled in: xterm, screen, tmux, vt100, linux), `mmap`, `fcntl`, `termios`, `resource`, `pwd`, `grp`, `select`
|
|
9
|
+
- Built in: `ssl`/`hashlib` (OpenSSL 3.5.9, `@ai-ecoverse/wasix-openssl`), `zlib` 1.3.1, `bz2`, `lzma` (xz 5.8.4), `sqlite3` (3.53.4; FTS5, JSON, math, R*Tree; no WAL, no extensions), `readline` 8.3 (ncurses 6.5 terminfo compiled in: xterm, screen, tmux, vt100, linux), `ctypes` / `_ctypes` (wasix-org/libffi; needs slicc-kernel#306 step 1 for `call_dynamic` + `closure_{allocate,free}`), `mmap`, `fcntl`, `termios`, `resource`, `pwd`, `grp`, `select`
|
|
10
10
|
- No `fork`/`vfork`; `subprocess` via `os.posix_spawn` (`proc_spawn2`/`3`)
|
|
11
11
|
- `os.getuid()`/`getgid()`/`getgroups()` and `pwd`/`grp` come from slicc-kernel's process credentials and its `/etc/passwd`/`/etc/group` (3.14.2-13, wasix-sysroot -20; slicc-kernel ≥ 1.44.0, no fallback: ids are -1 on older kernels). Root is uid 0 with home `/root`.
|
|
12
12
|
- Advisory file locks (`flock`, `fcntl` F_SETLK*, `lockf`) are no-ops (Emscripten parity)
|
|
13
13
|
- stdout is line-buffered unless it is a regular file, so output streams and survives crashes
|
|
14
14
|
- `signal.alarm`/`setitimer` and `time.sleep` resuming after a signal (the sysroot's libc patches, `patches/`)
|
|
15
15
|
- Bundled `pip` 25.3; `.pyc` are unchecked-hash
|
|
16
|
-
- Not built: `
|
|
16
|
+
- Not built: `_uuid`, `curses`, `dbm`, `_zstd`, `tkinter`
|
|
17
17
|
- `TZ` POSIX rules work (`EST5EDT,M3.2.0,M11.1.0`; wasix-sysroot -18, homescoop#193); `zoneinfo` works with the `tzdata` package
|
|
18
18
|
|
|
19
19
|
Since 3.14.2-12 the package is cross-built from source in CI (`build.sh`); see `THIRD-PARTY-NOTICES.md` for the statically linked libraries.
|
|
20
20
|
|
|
21
|
+
Since 3.14.2-15:
|
|
22
|
+
- `ctypes` / `_ctypes` (wasix-org/libffi) — needs slicc-kernel ≥ 1.51.0 (#306 /
|
|
23
|
+
#316: `call_dynamic`, `closure_{allocate,prepare,free}`, POSIX `dlopen(NULL)` /
|
|
24
|
+
own path / symlink = running main). On 1.49.0, `import ctypes` raises
|
|
25
|
+
`OSError` (not `ImportError`), so **numpy fails** — see `cert/NEGATIVE.md`.
|
|
26
|
+
`cert/sidemods.mjs` (no PYTHONPATH; discovery) gates the py-* re-pin wave.
|
|
27
|
+
Catalog move to -15 rides with the kernel bump (engines are advisory).
|
|
28
|
+
- **py-* packages are found without `PYTHONPATH`.** A package that declares
|
|
29
|
+
`slicc.python.sitePackages` in its `package.json` (py-numpy, py-pandas, …) is
|
|
30
|
+
put on `sys.path` when it is installed in python's own project (npm's
|
|
31
|
+
`node_modules`, or pnpm's, including its `.pnpm` store: a local `pnpm add`)
|
|
32
|
+
or, for pnpm ≥ 11 global installs (`pnpm add -g`, one project per package
|
|
33
|
+
under `$PNPM_HOME/global/v<N>/`), in a sibling global project. It is taken
|
|
34
|
+
only if its `slicc.python.requires` abi/platform match (none: pure Python),
|
|
35
|
+
and if the `wasix-python` it resolves to (Node's lookup from its real
|
|
36
|
+
directory) is this python's exact version, so side modules never mix
|
|
37
|
+
interpreter builds; the first package of a name wins. `python -v` reports
|
|
38
|
+
what was skipped and why. The scan is cached in `.slicc-site-cache` in
|
|
39
|
+
python's directory (keyed on the package directories and their
|
|
40
|
+
`package.json` stamps; `-v` always rescans); with the cache, a start costs
|
|
41
|
+
about 2 ms more than with discovery off, and less than the same directories
|
|
42
|
+
on `PYTHONPATH`. As with `PYTHONPATH`, `.pth` files in those directories are
|
|
43
|
+
not run. It runs from `site-packages/slicc-executable.pth`, so a venv sees
|
|
44
|
+
py-* packages only with `--system-site-packages`; `SLICC_PYTHON_DISCOVER=0`
|
|
45
|
+
turns it off. A py-* built for another wasix-python (an exact pin with its
|
|
46
|
+
own nested copy, e.g. py-numpy 2.3.2-7 for 3.14.2-13) is refused until it is
|
|
47
|
+
re-pinned; `python -v` names it.
|
|
48
|
+
|
|
49
|
+
Since 3.14.2-14 (wasix-sysroot -21):
|
|
50
|
+
- `asyncio` subprocess pipes work: `os.fstat` gives a pipe its kernel type,
|
|
51
|
+
`S_ISFIFO` on slicc-kernel with pipe types (#307) and a socket on
|
|
52
|
+
1.47.3-1.48.x, either of which asyncio's pipe transports accept;
|
|
53
|
+
- `termios`/`tty.setraw` really switch the terminal to raw mode (^C arrives as
|
|
54
|
+
a byte), and `os.get_terminal_size` and `isatty` answer per descriptor
|
|
55
|
+
(slicc-kernel ≥ 1.48.0; older kernels keep the previous behaviour).
|
|
56
|
+
|
|
21
57
|
The license is `PSF-2.0 AND GPL-3.0-or-later`, because GNU Readline is linked
|
|
22
58
|
statically. Since 3.14.2-13, `time.tzset()` exists and honours POSIX `TZ` rules.
|
|
23
59
|
The sysconfig records (`_sysconfigdata*`, `_sysconfig_vars*.json`) carry no
|
|
@@ -61,7 +97,7 @@ On plain Wasmer without `_ssl`, use a local wheel (`--no-index --find-links`) un
|
|
|
61
97
|
python -m venv v && v/bin/pip install requests && v/bin/python -c "import requests"
|
|
62
98
|
```
|
|
63
99
|
|
|
64
|
-
**Venvs need slicc-kernel ≥ 1.29.0** (`engines` asks for ≥ 1.
|
|
100
|
+
**Venvs need slicc-kernel ≥ 1.29.0** (`engines` asks for ≥ 1.51.0 for `_ctypes`). On older kernels a
|
|
65
101
|
venv's `bin/python` and `bin/pip` run as the base interpreter: `v/bin/pip
|
|
66
102
|
install` then installs into the **base** package directory, not the venv.
|
|
67
103
|
|
package/THIRD-PARTY-NOTICES.md
CHANGED
|
@@ -12,7 +12,8 @@ bin/python.wasm statically links:
|
|
|
12
12
|
| SQLite | 3.53.4 | public domain | sqlite.org |
|
|
13
13
|
| GNU Readline | 8.3 | GPL-3.0-or-later | gnu.org/software/readline |
|
|
14
14
|
| ncurses (tinfo) | 6.5 | X11 | invisible-island.net/ncurses |
|
|
15
|
-
|
|
|
15
|
+
| libffi | 3.5.1 | MIT | github.com/wasix-org/libffi |
|
|
16
|
+
| wasix-libc | wasix-sysroot 2025.9.30-21 | Apache-2.0 WITH LLVM-exception, MIT | @ai-ecoverse/wasix-sysroot |
|
|
16
17
|
| libc++, libc++abi, libunwind | wasix-libc v2026-07-03.1 sysroot-ehpic | Apache-2.0 WITH LLVM-exception | github.com/wasix-org/wasix-libc |
|
|
17
18
|
|
|
18
19
|
lib/python3.14/site-packages/pip is pip (MIT), from CPython's ensurepip bundle.
|
package/bin/python.wasm
CHANGED
|
Binary file
|
|
@@ -388,13 +388,13 @@
|
|
|
388
388
|
#define HAVE_FEXECVE 1
|
|
389
389
|
|
|
390
390
|
/* Define if you have the 'ffi_closure_alloc' function. */
|
|
391
|
-
|
|
391
|
+
#define HAVE_FFI_CLOSURE_ALLOC 1
|
|
392
392
|
|
|
393
393
|
/* Define if you have the 'ffi_prep_cif_var' function. */
|
|
394
|
-
|
|
394
|
+
#define HAVE_FFI_PREP_CIF_VAR 1
|
|
395
395
|
|
|
396
396
|
/* Define if you have the 'ffi_prep_closure_loc' function. */
|
|
397
|
-
|
|
397
|
+
#define HAVE_FFI_PREP_CLOSURE_LOC 1
|
|
398
398
|
|
|
399
399
|
/* Define to 1 if you have the 'flock' function. */
|
|
400
400
|
#define HAVE_FLOCK 1
|
package/lib/libpython3.14.a
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
[diffend] Oversized file quarantined before diffing.
|
|
2
2
|
name: package/lib/libpython3.14.a
|
|
3
|
-
size:
|
|
4
|
-
sha256:
|
|
3
|
+
size: 59362746 bytes
|
|
4
|
+
sha256: b5320f13b4636974f7dcf92f662e9e9f488a051d092d7bff059ad787522bb0b1
|
|
Binary file
|
|
Binary file
|
|
@@ -1,17 +1,38 @@
|
|
|
1
|
-
"""slicc (homescoop wasix-python):
|
|
1
|
+
"""slicc (homescoop wasix-python): sys.executable, and py-* packages on sys.path.
|
|
2
2
|
|
|
3
|
-
WASI stat() has no permission bits, so CPython's PATH search for
|
|
4
|
-
(getpath's isxfile) never matches the kernel's /usr/bin commands and
|
|
3
|
+
fix(): WASI stat() has no permission bits, so CPython's PATH search for
|
|
4
|
+
argv[0] (getpath's isxfile) never matches the kernel's /usr/bin commands and
|
|
5
5
|
sys.executable stays '' (python -m venv then refuses to run). fix() fills
|
|
6
6
|
it in from PATH. It runs twice per start, idempotently: from
|
|
7
7
|
site-packages/slicc-executable.pth (base interpreter; a sitecustomize on
|
|
8
8
|
PYTHONPATH cannot shadow it) and from the stdlib sitecustomize.py (venvs
|
|
9
9
|
without system site-packages, which skip the base .pth files). A venv's own
|
|
10
10
|
bin/python gets its path from argv[0] on slicc-kernel >= 1.29.0.
|
|
11
|
+
|
|
12
|
+
discover() (3.14.2-15): npm packages that carry Python code (py-numpy, …)
|
|
13
|
+
declare `slicc.python.sitePackages` in package.json. discover() appends those
|
|
14
|
+
directories to sys.path (as PYTHONPATH would: .pth files there are not run), so no PYTHONPATH is needed. It runs from
|
|
15
|
+
the .pth only (the base interpreter, or a venv with system site-packages).
|
|
16
|
+
It looks at:
|
|
17
|
+
A. this python's own project: the node_modules above sys.base_prefix
|
|
18
|
+
(npm, or pnpm's node_modules/.pnpm/<entry>/node_modules/... layout);
|
|
19
|
+
B. pnpm >= 11 global installs, where every `pnpm add -g` package is its own
|
|
20
|
+
project under $PNPM_HOME/global/v<N>/: the sibling projects.
|
|
21
|
+
A package is accepted if its `slicc.python.requires` (abi, platform) match
|
|
22
|
+
this python's, or it has none (pure Python), and the wasix-python it
|
|
23
|
+
resolves to (Node-style lookup from its real directory), if any, has the
|
|
24
|
+
same exact version as this python: the same version is the same build, so
|
|
25
|
+
native side modules never mix interpreter builds. The first package of a
|
|
26
|
+
name wins; others are skipped (reported under -v).
|
|
27
|
+
The result is cached in <python>/.slicc-site-cache, keyed on the package
|
|
28
|
+
directories and their package.json stamps, plus the stamps of the
|
|
29
|
+
wasix-python copies they resolved to; -v always rescans.
|
|
11
30
|
"""
|
|
12
31
|
import os
|
|
13
32
|
import sys
|
|
14
33
|
|
|
34
|
+
_PY_PKG = "@ai-ecoverse/wasix-python"
|
|
35
|
+
|
|
15
36
|
|
|
16
37
|
def fix():
|
|
17
38
|
if sys.executable:
|
|
@@ -25,3 +46,238 @@ def fix():
|
|
|
25
46
|
if not getattr(sys, "_base_executable", ""):
|
|
26
47
|
sys._base_executable = p
|
|
27
48
|
return
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _say(msg):
|
|
52
|
+
if sys.flags.verbose:
|
|
53
|
+
print(f"slicc discover: {msg}", file=sys.stderr)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class _JsonContext: # what _json.make_scanner reads from a JSONDecoder
|
|
57
|
+
strict = True
|
|
58
|
+
object_hook = None
|
|
59
|
+
object_pairs_hook = None
|
|
60
|
+
parse_float = float
|
|
61
|
+
parse_int = int
|
|
62
|
+
parse_constant = None
|
|
63
|
+
memo = None
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
_json_scan = None
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _manifest(pkgdir):
|
|
70
|
+
"""package.json as a dict; the C scanner directly, so startup skips json/re."""
|
|
71
|
+
global _json_scan
|
|
72
|
+
try:
|
|
73
|
+
with open(os.path.join(pkgdir, "package.json"), "rb") as f:
|
|
74
|
+
text = f.read().decode("utf-8-sig")
|
|
75
|
+
except (OSError, UnicodeDecodeError):
|
|
76
|
+
return None
|
|
77
|
+
try:
|
|
78
|
+
if _json_scan is None:
|
|
79
|
+
import _json
|
|
80
|
+
|
|
81
|
+
_json_scan = _json.make_scanner(_JsonContext())
|
|
82
|
+
obj, _ = _json_scan(text, text.index("{"))
|
|
83
|
+
except Exception:
|
|
84
|
+
try:
|
|
85
|
+
import json
|
|
86
|
+
|
|
87
|
+
obj = json.loads(text)
|
|
88
|
+
except ValueError:
|
|
89
|
+
return None
|
|
90
|
+
return obj if isinstance(obj, dict) else None
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def _project_node_modules(path):
|
|
94
|
+
"""The node_modules of the project that `path` is installed in."""
|
|
95
|
+
parts = path.split(os.sep)
|
|
96
|
+
for i in range(len(parts) - 1, 0, -1):
|
|
97
|
+
if parts[i] == ".pnpm" and parts[i - 1] == "node_modules":
|
|
98
|
+
return os.sep.join(parts[:i])
|
|
99
|
+
for i in range(len(parts) - 1, 0, -1):
|
|
100
|
+
if parts[i] == "node_modules":
|
|
101
|
+
return os.sep.join(parts[: i + 1])
|
|
102
|
+
return None
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def _global_siblings(nm):
|
|
106
|
+
"""pnpm >= 11: <PNPM_HOME>/global/v<N>/<project>/node_modules -> the other projects'."""
|
|
107
|
+
project = os.path.dirname(nm)
|
|
108
|
+
gdir = os.path.dirname(project)
|
|
109
|
+
v = os.path.basename(gdir)
|
|
110
|
+
if not (v[:1] == "v" and v[1:].isdigit() and os.path.basename(os.path.dirname(gdir)) == "global"):
|
|
111
|
+
return []
|
|
112
|
+
out = []
|
|
113
|
+
try:
|
|
114
|
+
entries = sorted(os.listdir(gdir))
|
|
115
|
+
except OSError:
|
|
116
|
+
return []
|
|
117
|
+
for e in entries:
|
|
118
|
+
d = os.path.join(gdir, e)
|
|
119
|
+
if d == project or os.path.islink(d): # hash-named aliases point at the real projects
|
|
120
|
+
continue
|
|
121
|
+
n = os.path.join(d, "node_modules")
|
|
122
|
+
if os.path.isdir(n):
|
|
123
|
+
out.append(n)
|
|
124
|
+
return out
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def _packages(nm):
|
|
128
|
+
"""Package directories in one project's node_modules (top level, then pnpm's store)."""
|
|
129
|
+
def scoped(base):
|
|
130
|
+
try:
|
|
131
|
+
names = os.listdir(base)
|
|
132
|
+
except OSError:
|
|
133
|
+
return
|
|
134
|
+
for n in names:
|
|
135
|
+
if n.startswith("@"):
|
|
136
|
+
try:
|
|
137
|
+
subs = os.listdir(os.path.join(base, n))
|
|
138
|
+
except OSError:
|
|
139
|
+
continue
|
|
140
|
+
for s in subs:
|
|
141
|
+
yield os.path.join(base, n, s)
|
|
142
|
+
elif not n.startswith("."):
|
|
143
|
+
yield os.path.join(base, n)
|
|
144
|
+
|
|
145
|
+
yield from scoped(nm)
|
|
146
|
+
store = os.path.join(nm, ".pnpm")
|
|
147
|
+
try:
|
|
148
|
+
entries = os.listdir(store)
|
|
149
|
+
except OSError:
|
|
150
|
+
return
|
|
151
|
+
for e in entries:
|
|
152
|
+
# <name with / as +>@<version>[_<peers>]; the package itself is
|
|
153
|
+
# node_modules/<name> inside the entry.
|
|
154
|
+
at = e.find("@", 1)
|
|
155
|
+
if at <= 0:
|
|
156
|
+
continue
|
|
157
|
+
name = e[:at].replace("+", "/", 1) if e.startswith("@") else e[:at]
|
|
158
|
+
yield os.path.join(store, e, "node_modules", name)
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def _resolve(pkgdir, dep, memo):
|
|
162
|
+
"""Node's lookup of `dep` from the real directory `pkgdir` (memo: dir -> result)."""
|
|
163
|
+
seen = []
|
|
164
|
+
d = pkgdir
|
|
165
|
+
while True:
|
|
166
|
+
if d in memo:
|
|
167
|
+
found = memo[d]
|
|
168
|
+
break
|
|
169
|
+
seen.append(d)
|
|
170
|
+
if os.path.basename(d) != "node_modules":
|
|
171
|
+
cand = os.path.join(d, "node_modules", dep)
|
|
172
|
+
if os.path.isfile(os.path.join(cand, "package.json")):
|
|
173
|
+
found = cand
|
|
174
|
+
break
|
|
175
|
+
parent = os.path.dirname(d)
|
|
176
|
+
if parent == d:
|
|
177
|
+
found = None
|
|
178
|
+
break
|
|
179
|
+
d = parent
|
|
180
|
+
for s in seen:
|
|
181
|
+
memo[s] = found
|
|
182
|
+
return found
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def _stamp(pkgdir):
|
|
186
|
+
try:
|
|
187
|
+
st = os.stat(os.path.join(pkgdir, "package.json"))
|
|
188
|
+
except OSError:
|
|
189
|
+
return None
|
|
190
|
+
return f"{pkgdir}\t{st.st_mtime_ns}\t{st.st_size}"
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def discover():
|
|
194
|
+
if os.environ.get("SLICC_PYTHON_DISCOVER", "1") == "0":
|
|
195
|
+
return
|
|
196
|
+
base = os.path.abspath(sys.base_prefix)
|
|
197
|
+
real = os.path.realpath(base)
|
|
198
|
+
roots = []
|
|
199
|
+
for p in (base, real):
|
|
200
|
+
nm = _project_node_modules(p)
|
|
201
|
+
if nm and nm not in roots:
|
|
202
|
+
roots.append(nm)
|
|
203
|
+
if not roots:
|
|
204
|
+
return
|
|
205
|
+
for nm in list(roots):
|
|
206
|
+
for s in _global_siblings(nm):
|
|
207
|
+
if s not in roots:
|
|
208
|
+
roots.append(s)
|
|
209
|
+
found = [p for nm in roots for p in _packages(nm)]
|
|
210
|
+
# The cache is keyed on what a scan would look at: the package
|
|
211
|
+
# directories and their package.json stamps (file mtimes are reliable on
|
|
212
|
+
# slicc's OPFS; directory mtimes are not). A hit costs one stat per
|
|
213
|
+
# package instead of realpath + read + parse + lookup.
|
|
214
|
+
key = "\n".join(filter(None, [base, _stamp(real), *map(_stamp, found)]))
|
|
215
|
+
cache = os.path.join(real, ".slicc-site-cache")
|
|
216
|
+
if not sys.flags.verbose:
|
|
217
|
+
try:
|
|
218
|
+
with open(cache, encoding="utf-8") as f:
|
|
219
|
+
head, _, rest = f.read().partition("\n\n")
|
|
220
|
+
used, _, dirs = rest.partition("\n\n")
|
|
221
|
+
# The pythons the py-* resolved to decide what was skipped: their
|
|
222
|
+
# stamps must be unchanged too (a nested copy moved or replaced).
|
|
223
|
+
if head == key and all(_stamp(u.split("\t", 1)[0]) == u for u in used.split("\n") if u):
|
|
224
|
+
for d in dirs.split("\n"):
|
|
225
|
+
if d and d not in sys.path:
|
|
226
|
+
sys.path.append(d)
|
|
227
|
+
return
|
|
228
|
+
except OSError:
|
|
229
|
+
pass
|
|
230
|
+
dirs, used = _scan(real, found)
|
|
231
|
+
for d in dirs:
|
|
232
|
+
if d not in sys.path: # as PYTHONPATH would: .pth files there are not run
|
|
233
|
+
sys.path.append(d)
|
|
234
|
+
try:
|
|
235
|
+
tmp = f"{cache}.{os.getpid()}"
|
|
236
|
+
with open(tmp, "w", encoding="utf-8") as f:
|
|
237
|
+
f.write(key + "\n\n" + "\n".join(filter(None, map(_stamp, sorted(used)))) + "\n\n" + "\n".join(dirs))
|
|
238
|
+
os.replace(tmp, cache)
|
|
239
|
+
except OSError: # read-only install: no cache, scan every start
|
|
240
|
+
pass
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
def _scan(real, found):
|
|
244
|
+
me = _manifest(real)
|
|
245
|
+
if not me or me.get("name") != _PY_PKG:
|
|
246
|
+
return [], set()
|
|
247
|
+
version = me.get("version")
|
|
248
|
+
want = (me.get("slicc") or {}).get("python") or {}
|
|
249
|
+
seen_dirs = {real}
|
|
250
|
+
memo = {}
|
|
251
|
+
by_name = {}
|
|
252
|
+
dirs = []
|
|
253
|
+
used = set()
|
|
254
|
+
for pkgdir in found:
|
|
255
|
+
rdir = os.path.realpath(pkgdir)
|
|
256
|
+
if rdir in seen_dirs:
|
|
257
|
+
continue
|
|
258
|
+
seen_dirs.add(rdir)
|
|
259
|
+
m = _manifest(rdir)
|
|
260
|
+
py = ((m or {}).get("slicc") or {}).get("python")
|
|
261
|
+
if not isinstance(py, dict) or not py.get("sitePackages"):
|
|
262
|
+
continue
|
|
263
|
+
name = m.get("name") or rdir
|
|
264
|
+
req = py.get("requires") or {}
|
|
265
|
+
if any(req.get(k) not in (None, want.get(k)) for k in ("abi", "platform")):
|
|
266
|
+
_say(f"skip {name} {m.get('version')}: requires {req}, this python is {want.get('abi')}/{want.get('platform')}")
|
|
267
|
+
continue
|
|
268
|
+
deps = {**(m.get("peerDependencies") or {}), **(m.get("dependencies") or {})}
|
|
269
|
+
if _PY_PKG in deps:
|
|
270
|
+
dep = _resolve(rdir, _PY_PKG, memo)
|
|
271
|
+
if dep:
|
|
272
|
+
used.add(dep)
|
|
273
|
+
got = (_manifest(dep) or {}).get("version") if dep else deps[_PY_PKG]
|
|
274
|
+
if got != version:
|
|
275
|
+
_say(f"skip {name} {m.get('version')}: built for wasix-python {got}, this is {version}")
|
|
276
|
+
continue
|
|
277
|
+
if name in by_name:
|
|
278
|
+
if by_name[name] != m.get("version"):
|
|
279
|
+
_say(f"skip {name} {m.get('version')} in {rdir}: {by_name[name]} is already on sys.path")
|
|
280
|
+
continue
|
|
281
|
+
by_name[name] = m.get("version")
|
|
282
|
+
dirs.append(os.path.join(rdir, py["sitePackages"]))
|
|
283
|
+
return dirs, used
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"CONFIGURE_LDFLAGS": "-O3 -flto -fPIC -pthread -Wl,-pie -Wl,--export-dynamic -Wl,--shared-memory -Wl,--import-memory -Wl,--max-memory=4294967296 -Wl,--stack-first -z stack-size=16777216 -Wl,--initial-memory=41943040 -ldl -lwasi-emulated-getpid -lwasi-emulated-process-clocks -lwasi-emulated-mman",
|
|
41
41
|
"CONFIGURE_LDFLAGS_NODIST": "-target wasm32-wasix -pthread -Wl,--import-memory -Wl,--max-memory=4294967296 -z stack-size=16777216 -Wl,--stack-first -Wl,--initial-memory=41943040",
|
|
42
42
|
"CONFIGURE_LDFLAGS_NOLTO": "",
|
|
43
|
-
"CONFIG_ARGS": "'--host=wasm32-unknown-wasix' '--build=x86_64-pc-linux-gnux32' '--prefix=/tmp/homescoop-wasix-python/prefix' '--with-build-python=/tmp/homescoop-wasix-python/host/bin/python3.14' '--disable-shared' '--with-ensurepip=no' '--disable-test-modules' '--enable-wasm-pthreads' '--with-pkg-config=yes' 'CC=wasixcc' 'AR=wasixar' 'RANLIB=wasixranlib' 'CFLAGS=-O3 -flto -fPIC -matomics -mbulk-memory -mmutable-globals -pthread -mthread-model posix -D_WASI_EMULATED_PROCESS_CLOCKS -D_WASI_EMULATED_GETPID -D_WASI_EMULATED_MMAN -ffile-prefix-map=/tmp/homescoop-wasix-python=.' 'LDFLAGS=-O3 -flto -fPIC -pthread -Wl,-pie -Wl,--export-dynamic -Wl,--shared-memory -Wl,--import-memory -Wl,--max-memory=4294967296 -Wl,--stack-first -z stack-size=16777216 -Wl,--initial-memory=41943040 -ldl -lwasi-emulated-getpid -lwasi-emulated-process-clocks -lwasi-emulated-mman' 'LIBS= -Wl,-u,_ZTH5errno -Wl,--export=_ZTH5errno -Wl,-u,__cxa_thread_atexit_impl -Wl,--export=__cxa_thread_atexit_impl' 'build_alias=x86_64-pc-linux-gnux32' 'host_alias=wasm32-unknown-wasix' 'PKG_CONFIG_PATH=/tmp/homescoop-wasix-python/deps/wasix-zlib/package/lib-pic/pkgconfig:/tmp/homescoop-wasix-python/deps/wasix-openssl/package/lib-pic/pkgconfig:/tmp/homescoop-wasix-python/deps/lib/pkgconfig' 'PKG_CONFIG_LIBDIR=/tmp/homescoop-wasix-python/deps/wasix-zlib/package/lib-pic/pkgconfig:/tmp/homescoop-wasix-python/deps/wasix-openssl/package/lib-pic/pkgconfig:/tmp/homescoop-wasix-python/deps/lib/pkgconfig'",
|
|
43
|
+
"CONFIG_ARGS": "'--host=wasm32-unknown-wasix' '--build=x86_64-pc-linux-gnux32' '--prefix=/tmp/homescoop-wasix-python/prefix' '--with-build-python=/tmp/homescoop-wasix-python/host/bin/python3.14' '--disable-shared' '--with-ensurepip=no' '--disable-test-modules' '--enable-wasm-pthreads' '--with-pkg-config=yes' '--with-system-ffi' 'CC=wasixcc' 'AR=wasixar' 'RANLIB=wasixranlib' 'CFLAGS=-O3 -flto -fPIC -matomics -mbulk-memory -mmutable-globals -pthread -mthread-model posix -D_WASI_EMULATED_PROCESS_CLOCKS -D_WASI_EMULATED_GETPID -D_WASI_EMULATED_MMAN -ffile-prefix-map=/tmp/homescoop-wasix-python=.' 'LDFLAGS=-O3 -flto -fPIC -pthread -Wl,-pie -Wl,--export-dynamic -Wl,--shared-memory -Wl,--import-memory -Wl,--max-memory=4294967296 -Wl,--stack-first -z stack-size=16777216 -Wl,--initial-memory=41943040 -ldl -lwasi-emulated-getpid -lwasi-emulated-process-clocks -lwasi-emulated-mman' 'LIBS= -Wl,-u,_ZTH5errno -Wl,--export=_ZTH5errno -Wl,-u,__cxa_thread_atexit_impl -Wl,--export=__cxa_thread_atexit_impl' 'build_alias=x86_64-pc-linux-gnux32' 'host_alias=wasm32-unknown-wasix' 'PKG_CONFIG_PATH=/tmp/homescoop-wasix-python/deps/wasix-zlib/package/lib-pic/pkgconfig:/tmp/homescoop-wasix-python/deps/wasix-openssl/package/lib-pic/pkgconfig:/tmp/homescoop-wasix-python/deps/lib/pkgconfig' 'PKG_CONFIG_LIBDIR=/tmp/homescoop-wasix-python/deps/wasix-zlib/package/lib-pic/pkgconfig:/tmp/homescoop-wasix-python/deps/wasix-openssl/package/lib-pic/pkgconfig:/tmp/homescoop-wasix-python/deps/lib/pkgconfig'",
|
|
44
44
|
"CONFINCLUDEDIR": "/tmp/homescoop-wasix-python/prefix/include",
|
|
45
45
|
"CONFINCLUDEPY": "/tmp/homescoop-wasix-python/prefix/include/python3.14",
|
|
46
46
|
"COREPYTHONPATH": "",
|
|
@@ -202,9 +202,9 @@
|
|
|
202
202
|
"HAVE_FDOPENDIR": 1,
|
|
203
203
|
"HAVE_FDWALK": 0,
|
|
204
204
|
"HAVE_FEXECVE": 1,
|
|
205
|
-
"HAVE_FFI_CLOSURE_ALLOC":
|
|
206
|
-
"HAVE_FFI_PREP_CIF_VAR":
|
|
207
|
-
"HAVE_FFI_PREP_CLOSURE_LOC":
|
|
205
|
+
"HAVE_FFI_CLOSURE_ALLOC": 1,
|
|
206
|
+
"HAVE_FFI_PREP_CIF_VAR": 1,
|
|
207
|
+
"HAVE_FFI_PREP_CLOSURE_LOC": 1,
|
|
208
208
|
"HAVE_FLOCK": 1,
|
|
209
209
|
"HAVE_FORK": 0,
|
|
210
210
|
"HAVE_FORK1": 0,
|
|
@@ -708,7 +708,7 @@
|
|
|
708
708
|
"LLVM_PROF_FILE": "LLVM_PROFILE_FILE=\"$(shell pwd)/code-%p.profclangr\"",
|
|
709
709
|
"LLVM_PROF_MERGER": "",
|
|
710
710
|
"LN": "ln",
|
|
711
|
-
"LOCALMODLIBS": "-lm -lm -lm -lm Modules/_decimal/libmpdec/libmpdec.a -L/tmp/homescoop-wasix-python/deps/wasix-zlib/package/lib-pic/pkgconfig/../../lib-pic -lz -L/tmp/homescoop-wasix-python/deps/lib -lbz2 -L/tmp/homescoop-wasix-python/deps/lib -llzma -L/tmp/homescoop-wasix-python/deps/wasix-zlib/package/lib-pic/pkgconfig/../../lib-pic -lz -L/tmp/homescoop-wasix-python/deps/lib -lreadline -ltinfo Modules/_hacl/libHacl_Hash_MD5.a Modules/_hacl/libHacl_Hash_SHA1.a Modules/_hacl/libHacl_Hash_SHA2.a Modules/_hacl/libHacl_Hash_SHA3.a Modules/_hacl/libHacl_Hash_BLAKE2.a Modules/_hacl/libHacl_HMAC.a -lm Modules/expat/libexpat.a -L/tmp/homescoop-wasix-python/deps/lib -lsqlite3 -L/tmp/homescoop-wasix-python/deps/wasix-openssl/package/lib-pic/pkgconfig/../../lib-pic -lssl -lcrypto -L/tmp/homescoop-wasix-python/deps/wasix-openssl/package/lib-pic/pkgconfig/../../lib-pic -lcrypto -lm",
|
|
711
|
+
"LOCALMODLIBS": "-lm -lm -lm -lm Modules/_decimal/libmpdec/libmpdec.a -L/tmp/homescoop-wasix-python/deps/wasix-zlib/package/lib-pic/pkgconfig/../../lib-pic -lz -L/tmp/homescoop-wasix-python/deps/lib -lbz2 -L/tmp/homescoop-wasix-python/deps/lib -llzma -L/tmp/homescoop-wasix-python/deps/wasix-zlib/package/lib-pic/pkgconfig/../../lib-pic -lz -L/tmp/homescoop-wasix-python/deps/lib -lreadline -ltinfo Modules/_hacl/libHacl_Hash_MD5.a Modules/_hacl/libHacl_Hash_SHA1.a Modules/_hacl/libHacl_Hash_SHA2.a Modules/_hacl/libHacl_Hash_SHA3.a Modules/_hacl/libHacl_Hash_BLAKE2.a Modules/_hacl/libHacl_HMAC.a -lm Modules/expat/libexpat.a -L/tmp/homescoop-wasix-python/deps/lib -lffi -ldl -L/tmp/homescoop-wasix-python/deps/lib -lsqlite3 -L/tmp/homescoop-wasix-python/deps/wasix-openssl/package/lib-pic/pkgconfig/../../lib-pic -lssl -lcrypto -L/tmp/homescoop-wasix-python/deps/wasix-openssl/package/lib-pic/pkgconfig/../../lib-pic -lcrypto -lm",
|
|
712
712
|
"MACHDEP": "wasi",
|
|
713
713
|
"MACHDEP_OBJS": "",
|
|
714
714
|
"MACHDESTLIB": "/tmp/homescoop-wasix-python/prefix/lib/python3.14",
|
|
@@ -719,10 +719,10 @@
|
|
|
719
719
|
"MANDIR": "/tmp/homescoop-wasix-python/prefix/share/man",
|
|
720
720
|
"MIMALLOC_HEADERS": "\\",
|
|
721
721
|
"MKDIR_P": "/usr/bin/mkdir -p",
|
|
722
|
-
"MODBUILT_NAMES": "array _asyncio _bisect _csv _heapq _json _lsprof _pickle _queue _random _struct _zoneinfo math cmath _statistics _decimal binascii _bz2 _lzma zlib readline _md5 _sha1 _sha2 _sha3 _blake2 _hmac pyexpat _elementtree _codecs_cn _codecs_hk _codecs_iso2022 _codecs_jp _codecs_kr _codecs_tw _multibytecodec unicodedata fcntl grp mmap resource select _socket termios _sqlite3 _ssl _hashlib atexit faulthandler posix _signal _tracemalloc _suggestions _datetime _codecs _collections errno _io itertools _sre _sysconfig _thread time _types _typing _weakref _abc _functools _locale _opcode _operator _stat _symtable pwd",
|
|
722
|
+
"MODBUILT_NAMES": "array _asyncio _bisect _csv _heapq _json _lsprof _pickle _queue _random _struct _zoneinfo math cmath _statistics _decimal binascii _bz2 _lzma zlib readline _md5 _sha1 _sha2 _sha3 _blake2 _hmac pyexpat _elementtree _codecs_cn _codecs_hk _codecs_iso2022 _codecs_jp _codecs_kr _codecs_tw _multibytecodec unicodedata fcntl grp mmap resource select _socket termios _ctypes _sqlite3 _ssl _hashlib atexit faulthandler posix _signal _tracemalloc _suggestions _datetime _codecs _collections errno _io itertools _sre _sysconfig _thread time _types _typing _weakref _abc _functools _locale _opcode _operator _stat _symtable pwd",
|
|
723
723
|
"MODDISABLED_NAMES": "",
|
|
724
|
-
"MODLIBS": "-lm -lm -lm -lm Modules/_decimal/libmpdec/libmpdec.a -L/tmp/homescoop-wasix-python/deps/wasix-zlib/package/lib-pic/pkgconfig/../../lib-pic -lz -L/tmp/homescoop-wasix-python/deps/lib -lbz2 -L/tmp/homescoop-wasix-python/deps/lib -llzma -L/tmp/homescoop-wasix-python/deps/wasix-zlib/package/lib-pic/pkgconfig/../../lib-pic -lz -L/tmp/homescoop-wasix-python/deps/lib -lreadline -ltinfo Modules/_hacl/libHacl_Hash_MD5.a Modules/_hacl/libHacl_Hash_SHA1.a Modules/_hacl/libHacl_Hash_SHA2.a Modules/_hacl/libHacl_Hash_SHA3.a Modules/_hacl/libHacl_Hash_BLAKE2.a Modules/_hacl/libHacl_HMAC.a -lm Modules/expat/libexpat.a -L/tmp/homescoop-wasix-python/deps/lib -lsqlite3 -L/tmp/homescoop-wasix-python/deps/wasix-openssl/package/lib-pic/pkgconfig/../../lib-pic -lssl -lcrypto -L/tmp/homescoop-wasix-python/deps/wasix-openssl/package/lib-pic/pkgconfig/../../lib-pic -lcrypto -lm",
|
|
725
|
-
"MODOBJS": "Modules/arraymodule.o Modules/_asynciomodule.o Modules/_bisectmodule.o Modules/_csv.o Modules/_heapqmodule.o Modules/_json.o Modules/_lsprof.o Modules/rotatingtree.o Modules/_pickle.o Modules/_queuemodule.o Modules/_randommodule.o Modules/_struct.o Modules/_zoneinfo.o Modules/mathmodule.o Modules/cmathmodule.o Modules/_statisticsmodule.o Modules/_decimal/_decimal.o Modules/binascii.o Modules/_bz2module.o Modules/_lzmamodule.o Modules/zlibmodule.o Modules/readline.o Modules/md5module.o Modules/sha1module.o Modules/sha2module.o Modules/sha3module.o Modules/blake2module.o Modules/hmacmodule.o Modules/pyexpat.o Modules/_elementtree.o Modules/cjkcodecs/_codecs_cn.o Modules/cjkcodecs/_codecs_hk.o Modules/cjkcodecs/_codecs_iso2022.o Modules/cjkcodecs/_codecs_jp.o Modules/cjkcodecs/_codecs_kr.o Modules/cjkcodecs/_codecs_tw.o Modules/cjkcodecs/multibytecodec.o Modules/unicodedata.o Modules/fcntlmodule.o Modules/grpmodule.o Modules/mmapmodule.o Modules/resource.o Modules/selectmodule.o Modules/socketmodule.o Modules/termios.o Modules/_sqlite/blob.o Modules/_sqlite/connection.o Modules/_sqlite/cursor.o Modules/_sqlite/microprotocols.o Modules/_sqlite/module.o Modules/_sqlite/prepare_protocol.o Modules/_sqlite/row.o Modules/_sqlite/statement.o Modules/_sqlite/util.o Modules/_ssl.o Modules/_hashopenssl.o Modules/atexitmodule.o Modules/faulthandler.o Modules/posixmodule.o Modules/signalmodule.o Modules/_tracemalloc.o Modules/_suggestions.o Modules/_datetimemodule.o Modules/_codecsmodule.o Modules/_collectionsmodule.o Modules/errnomodule.o Modules/_io/_iomodule.o Modules/_io/iobase.o Modules/_io/fileio.o Modules/_io/bytesio.o Modules/_io/bufferedio.o Modules/_io/textio.o Modules/_io/stringio.o Modules/itertoolsmodule.o Modules/_sre/sre.o Modules/_sysconfig.o Modules/_threadmodule.o Modules/timemodule.o Modules/_typesmodule.o Modules/_typingmodule.o Modules/_weakref.o Modules/_abc.o Modules/_functoolsmodule.o Modules/_localemodule.o Modules/_opcode.o Modules/_operator.o Modules/_stat.o Modules/symtablemodule.o Modules/pwdmodule.o",
|
|
724
|
+
"MODLIBS": "-lm -lm -lm -lm Modules/_decimal/libmpdec/libmpdec.a -L/tmp/homescoop-wasix-python/deps/wasix-zlib/package/lib-pic/pkgconfig/../../lib-pic -lz -L/tmp/homescoop-wasix-python/deps/lib -lbz2 -L/tmp/homescoop-wasix-python/deps/lib -llzma -L/tmp/homescoop-wasix-python/deps/wasix-zlib/package/lib-pic/pkgconfig/../../lib-pic -lz -L/tmp/homescoop-wasix-python/deps/lib -lreadline -ltinfo Modules/_hacl/libHacl_Hash_MD5.a Modules/_hacl/libHacl_Hash_SHA1.a Modules/_hacl/libHacl_Hash_SHA2.a Modules/_hacl/libHacl_Hash_SHA3.a Modules/_hacl/libHacl_Hash_BLAKE2.a Modules/_hacl/libHacl_HMAC.a -lm Modules/expat/libexpat.a -L/tmp/homescoop-wasix-python/deps/lib -lffi -ldl -L/tmp/homescoop-wasix-python/deps/lib -lsqlite3 -L/tmp/homescoop-wasix-python/deps/wasix-openssl/package/lib-pic/pkgconfig/../../lib-pic -lssl -lcrypto -L/tmp/homescoop-wasix-python/deps/wasix-openssl/package/lib-pic/pkgconfig/../../lib-pic -lcrypto -lm",
|
|
725
|
+
"MODOBJS": "Modules/arraymodule.o Modules/_asynciomodule.o Modules/_bisectmodule.o Modules/_csv.o Modules/_heapqmodule.o Modules/_json.o Modules/_lsprof.o Modules/rotatingtree.o Modules/_pickle.o Modules/_queuemodule.o Modules/_randommodule.o Modules/_struct.o Modules/_zoneinfo.o Modules/mathmodule.o Modules/cmathmodule.o Modules/_statisticsmodule.o Modules/_decimal/_decimal.o Modules/binascii.o Modules/_bz2module.o Modules/_lzmamodule.o Modules/zlibmodule.o Modules/readline.o Modules/md5module.o Modules/sha1module.o Modules/sha2module.o Modules/sha3module.o Modules/blake2module.o Modules/hmacmodule.o Modules/pyexpat.o Modules/_elementtree.o Modules/cjkcodecs/_codecs_cn.o Modules/cjkcodecs/_codecs_hk.o Modules/cjkcodecs/_codecs_iso2022.o Modules/cjkcodecs/_codecs_jp.o Modules/cjkcodecs/_codecs_kr.o Modules/cjkcodecs/_codecs_tw.o Modules/cjkcodecs/multibytecodec.o Modules/unicodedata.o Modules/fcntlmodule.o Modules/grpmodule.o Modules/mmapmodule.o Modules/resource.o Modules/selectmodule.o Modules/socketmodule.o Modules/termios.o Modules/_ctypes/_ctypes.o Modules/_ctypes/callbacks.o Modules/_ctypes/callproc.o Modules/_ctypes/stgdict.o Modules/_ctypes/cfield.o Modules/_sqlite/blob.o Modules/_sqlite/connection.o Modules/_sqlite/cursor.o Modules/_sqlite/microprotocols.o Modules/_sqlite/module.o Modules/_sqlite/prepare_protocol.o Modules/_sqlite/row.o Modules/_sqlite/statement.o Modules/_sqlite/util.o Modules/_ssl.o Modules/_hashopenssl.o Modules/atexitmodule.o Modules/faulthandler.o Modules/posixmodule.o Modules/signalmodule.o Modules/_tracemalloc.o Modules/_suggestions.o Modules/_datetimemodule.o Modules/_codecsmodule.o Modules/_collectionsmodule.o Modules/errnomodule.o Modules/_io/_iomodule.o Modules/_io/iobase.o Modules/_io/fileio.o Modules/_io/bytesio.o Modules/_io/bufferedio.o Modules/_io/textio.o Modules/_io/stringio.o Modules/itertoolsmodule.o Modules/_sre/sre.o Modules/_sysconfig.o Modules/_threadmodule.o Modules/timemodule.o Modules/_typesmodule.o Modules/_typingmodule.o Modules/_weakref.o Modules/_abc.o Modules/_functoolsmodule.o Modules/_localemodule.o Modules/_opcode.o Modules/_operator.o Modules/_stat.o Modules/symtablemodule.o Modules/pwdmodule.o",
|
|
726
726
|
"MODSHARED_NAMES": "",
|
|
727
727
|
"MODULE_ARRAY_LDFLAGS": "",
|
|
728
728
|
"MODULE_ARRAY_STATE": "yes",
|
|
@@ -811,9 +811,11 @@
|
|
|
811
811
|
"MODULE__COLLECTIONS_LDFLAGS": "",
|
|
812
812
|
"MODULE__CSV_LDFLAGS": "",
|
|
813
813
|
"MODULE__CSV_STATE": "yes",
|
|
814
|
+
"MODULE__CTYPES_CFLAGS": "-fno-strict-overflow -I/tmp/homescoop-wasix-python/deps/include",
|
|
814
815
|
"MODULE__CTYPES_DEPS": "../../Modules/_ctypes/ctypes.h",
|
|
816
|
+
"MODULE__CTYPES_LDFLAGS": "-L/tmp/homescoop-wasix-python/deps/lib -lffi -ldl",
|
|
815
817
|
"MODULE__CTYPES_MALLOC_CLOSURE": "",
|
|
816
|
-
"MODULE__CTYPES_STATE": "
|
|
818
|
+
"MODULE__CTYPES_STATE": "yes",
|
|
817
819
|
"MODULE__CTYPES_TEST_DEPS": "../../Modules/_ctypes/_ctypes_test_generated.c.h",
|
|
818
820
|
"MODULE__CTYPES_TEST_STATE": "n/a",
|
|
819
821
|
"MODULE__CURSES_DEPS": "../../Include/py_curses.h",
|
|
@@ -61,8 +61,8 @@ build_time_vars = {'ABIFLAGS': '',
|
|
|
61
61
|
"'--prefix=/tmp/homescoop-wasix-python/prefix' "
|
|
62
62
|
"'--with-build-python=/tmp/homescoop-wasix-python/host/bin/python3.14' "
|
|
63
63
|
"'--disable-shared' '--with-ensurepip=no' '--disable-test-modules' "
|
|
64
|
-
"'--enable-wasm-pthreads' '--with-pkg-config=yes' '
|
|
65
|
-
"'RANLIB=wasixranlib' 'CFLAGS=-O3 -flto -fPIC -matomics -mbulk-memory "
|
|
64
|
+
"'--enable-wasm-pthreads' '--with-pkg-config=yes' '--with-system-ffi' 'CC=wasixcc' "
|
|
65
|
+
"'AR=wasixar' 'RANLIB=wasixranlib' 'CFLAGS=-O3 -flto -fPIC -matomics -mbulk-memory "
|
|
66
66
|
'-mmutable-globals -pthread -mthread-model posix -D_WASI_EMULATED_PROCESS_CLOCKS '
|
|
67
67
|
'-D_WASI_EMULATED_GETPID -D_WASI_EMULATED_MMAN '
|
|
68
68
|
"-ffile-prefix-map=/tmp/homescoop-wasix-python=.' 'LDFLAGS=-O3 -flto -fPIC "
|
|
@@ -243,9 +243,9 @@ build_time_vars = {'ABIFLAGS': '',
|
|
|
243
243
|
'HAVE_FDOPENDIR': 1,
|
|
244
244
|
'HAVE_FDWALK': 0,
|
|
245
245
|
'HAVE_FEXECVE': 1,
|
|
246
|
-
'HAVE_FFI_CLOSURE_ALLOC':
|
|
247
|
-
'HAVE_FFI_PREP_CIF_VAR':
|
|
248
|
-
'HAVE_FFI_PREP_CLOSURE_LOC':
|
|
246
|
+
'HAVE_FFI_CLOSURE_ALLOC': 1,
|
|
247
|
+
'HAVE_FFI_PREP_CIF_VAR': 1,
|
|
248
|
+
'HAVE_FFI_PREP_CLOSURE_LOC': 1,
|
|
249
249
|
'HAVE_FLOCK': 1,
|
|
250
250
|
'HAVE_FORK': 0,
|
|
251
251
|
'HAVE_FORK1': 0,
|
|
@@ -805,7 +805,7 @@ build_time_vars = {'ABIFLAGS': '',
|
|
|
805
805
|
'Modules/_hacl/libHacl_Hash_SHA2.a Modules/_hacl/libHacl_Hash_SHA3.a '
|
|
806
806
|
'Modules/_hacl/libHacl_Hash_BLAKE2.a Modules/_hacl/libHacl_HMAC.a -lm '
|
|
807
807
|
'Modules/expat/libexpat.a -L/tmp/homescoop-wasix-python/deps/lib '
|
|
808
|
-
'-lsqlite3 '
|
|
808
|
+
'-lffi -ldl -L/tmp/homescoop-wasix-python/deps/lib -lsqlite3 '
|
|
809
809
|
'-L/tmp/homescoop-wasix-python/deps/wasix-openssl/package/lib-pic/pkgconfig/../../lib-pic '
|
|
810
810
|
'-lssl -lcrypto '
|
|
811
811
|
'-L/tmp/homescoop-wasix-python/deps/wasix-openssl/package/lib-pic/pkgconfig/../../lib-pic '
|
|
@@ -825,7 +825,7 @@ build_time_vars = {'ABIFLAGS': '',
|
|
|
825
825
|
'_bz2 _lzma zlib readline _md5 _sha1 _sha2 _sha3 _blake2 _hmac '
|
|
826
826
|
'pyexpat _elementtree _codecs_cn _codecs_hk _codecs_iso2022 _codecs_jp '
|
|
827
827
|
'_codecs_kr _codecs_tw _multibytecodec unicodedata fcntl grp mmap '
|
|
828
|
-
'resource select _socket termios _sqlite3 _ssl _hashlib atexit '
|
|
828
|
+
'resource select _socket termios _ctypes _sqlite3 _ssl _hashlib atexit '
|
|
829
829
|
'faulthandler posix _signal _tracemalloc _suggestions _datetime _codecs '
|
|
830
830
|
'_collections errno _io itertools _sre _sysconfig _thread time _types '
|
|
831
831
|
'_typing _weakref _abc _functools _locale _opcode _operator _stat '
|
|
@@ -841,7 +841,7 @@ build_time_vars = {'ABIFLAGS': '',
|
|
|
841
841
|
'Modules/_hacl/libHacl_Hash_SHA2.a Modules/_hacl/libHacl_Hash_SHA3.a '
|
|
842
842
|
'Modules/_hacl/libHacl_Hash_BLAKE2.a Modules/_hacl/libHacl_HMAC.a -lm '
|
|
843
843
|
'Modules/expat/libexpat.a -L/tmp/homescoop-wasix-python/deps/lib '
|
|
844
|
-
'-lsqlite3 '
|
|
844
|
+
'-lffi -ldl -L/tmp/homescoop-wasix-python/deps/lib -lsqlite3 '
|
|
845
845
|
'-L/tmp/homescoop-wasix-python/deps/wasix-openssl/package/lib-pic/pkgconfig/../../lib-pic '
|
|
846
846
|
'-lssl -lcrypto '
|
|
847
847
|
'-L/tmp/homescoop-wasix-python/deps/wasix-openssl/package/lib-pic/pkgconfig/../../lib-pic '
|
|
@@ -861,9 +861,10 @@ build_time_vars = {'ABIFLAGS': '',
|
|
|
861
861
|
'Modules/cjkcodecs/_codecs_tw.o Modules/cjkcodecs/multibytecodec.o '
|
|
862
862
|
'Modules/unicodedata.o Modules/fcntlmodule.o Modules/grpmodule.o '
|
|
863
863
|
'Modules/mmapmodule.o Modules/resource.o Modules/selectmodule.o '
|
|
864
|
-
'Modules/socketmodule.o Modules/termios.o Modules/
|
|
865
|
-
'Modules/
|
|
866
|
-
'Modules/_sqlite/
|
|
864
|
+
'Modules/socketmodule.o Modules/termios.o Modules/_ctypes/_ctypes.o '
|
|
865
|
+
'Modules/_ctypes/callbacks.o Modules/_ctypes/callproc.o Modules/_ctypes/stgdict.o '
|
|
866
|
+
'Modules/_ctypes/cfield.o Modules/_sqlite/blob.o Modules/_sqlite/connection.o '
|
|
867
|
+
'Modules/_sqlite/cursor.o Modules/_sqlite/microprotocols.o Modules/_sqlite/module.o '
|
|
867
868
|
'Modules/_sqlite/prepare_protocol.o Modules/_sqlite/row.o Modules/_sqlite/statement.o '
|
|
868
869
|
'Modules/_sqlite/util.o Modules/_ssl.o Modules/_hashopenssl.o '
|
|
869
870
|
'Modules/atexitmodule.o Modules/faulthandler.o Modules/posixmodule.o '
|
|
@@ -996,9 +997,11 @@ build_time_vars = {'ABIFLAGS': '',
|
|
|
996
997
|
'MODULE__COLLECTIONS_LDFLAGS': '',
|
|
997
998
|
'MODULE__CSV_LDFLAGS': '',
|
|
998
999
|
'MODULE__CSV_STATE': 'yes',
|
|
1000
|
+
'MODULE__CTYPES_CFLAGS': '-fno-strict-overflow -I/tmp/homescoop-wasix-python/deps/include',
|
|
999
1001
|
'MODULE__CTYPES_DEPS': '../../Modules/_ctypes/ctypes.h',
|
|
1002
|
+
'MODULE__CTYPES_LDFLAGS': '-L/tmp/homescoop-wasix-python/deps/lib -lffi -ldl',
|
|
1000
1003
|
'MODULE__CTYPES_MALLOC_CLOSURE': '',
|
|
1001
|
-
'MODULE__CTYPES_STATE': '
|
|
1004
|
+
'MODULE__CTYPES_STATE': 'yes',
|
|
1002
1005
|
'MODULE__CTYPES_TEST_DEPS': '../../Modules/_ctypes/_ctypes_test_generated.c.h',
|
|
1003
1006
|
'MODULE__CTYPES_TEST_STATE': 'n/a',
|
|
1004
1007
|
'MODULE__CURSES_DEPS': '../../Include/py_curses.h',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import _slicc_site; _slicc_site.fix()
|
|
1
|
+
import _slicc_site; _slicc_site.fix(); _slicc_site.discover()
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-ecoverse/wasix-python",
|
|
3
|
-
"version": "3.14.2-
|
|
3
|
+
"version": "3.14.2-15",
|
|
4
4
|
"description": "CPython 3.14 for slicc WASIX (commands python, python3; cross-built in CI on wasix-sysroot)",
|
|
5
5
|
"license": "PSF-2.0 AND GPL-3.0-or-later",
|
|
6
6
|
"engines": {
|
|
7
|
-
"slicc-kernel": ">=1.
|
|
7
|
+
"slicc-kernel": ">=1.51.0"
|
|
8
8
|
},
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|