@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 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: `ctypes` (no libffi for WASIX), `_uuid`, `curses`, `dbm`, `_zstd`, `tkinter`
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.44.0 anyway, for the user ids). On older kernels a
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
 
@@ -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
- | wasix-libc | wasix-sysroot 2025.9.30-20 | Apache-2.0 WITH LLVM-exception, MIT | @ai-ecoverse/wasix-sysroot |
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
- /* #undef HAVE_FFI_CLOSURE_ALLOC */
391
+ #define HAVE_FFI_CLOSURE_ALLOC 1
392
392
 
393
393
  /* Define if you have the 'ffi_prep_cif_var' function. */
394
- /* #undef HAVE_FFI_PREP_CIF_VAR */
394
+ #define HAVE_FFI_PREP_CIF_VAR 1
395
395
 
396
396
  /* Define if you have the 'ffi_prep_closure_loc' function. */
397
- /* #undef HAVE_FFI_PREP_CLOSURE_LOC */
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
@@ -1,4 +1,4 @@
1
1
  [diffend] Oversized file quarantined before diffing.
2
2
  name: package/lib/libpython3.14.a
3
- size: 58021622 bytes
4
- sha256: 83bf115c9bdca139820be7d3d014231290c58911bd4416718fe2d5b632012e28
3
+ size: 59362746 bytes
4
+ sha256: b5320f13b4636974f7dcf92f662e9e9f488a051d092d7bff059ad787522bb0b1
@@ -1,17 +1,38 @@
1
- """slicc (homescoop wasix-python): give the interpreter a sys.executable.
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 argv[0]
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": 0,
206
- "HAVE_FFI_PREP_CIF_VAR": 0,
207
- "HAVE_FFI_PREP_CLOSURE_LOC": 0,
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": "missing",
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' 'CC=wasixcc' 'AR=wasixar' "
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': 0,
247
- 'HAVE_FFI_PREP_CIF_VAR': 0,
248
- 'HAVE_FFI_PREP_CLOSURE_LOC': 0,
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/_sqlite/blob.o '
865
- 'Modules/_sqlite/connection.o Modules/_sqlite/cursor.o '
866
- 'Modules/_sqlite/microprotocols.o Modules/_sqlite/module.o '
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': 'missing',
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-13",
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.44.0"
7
+ "slicc-kernel": ">=1.51.0"
8
8
  },
9
9
  "repository": {
10
10
  "type": "git",