You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Compiled static-inline shims (compile_options.static_inline). A C static inline function is defined in a header and exports no symbol, so PHP FFI cannot bind it — by default the generated method throws. Opt in (consumer-side, in your pnl.json) and pnl install now emits a tiny extern "C" trampoline for each such function, compiles it to a small shared library next to the package, and co-loads it, so the function becomes an ordinary callable method. pnl never reimplements C; the real compiler does the work.
A C compiler is discovered at install time ($CC, then cc/clang/gcc, honouring $CFLAGS/$LDFLAGS). The C compile is retried as C++ when it fails, so C-API libraries whose headers only compile as C++ (e.g. assimp) are handled.
Opt-in, with graceful degradation. A missing compiler errors only when a package actually has static inline functions to shim; a shim that fails to compile falls back to throwing stubs (the install still succeeds). Default installs continue to require only libclang.
pnl config <key> [value]. A git-config-style getter/setter for pnl.json, schema-validated (pnl config compile_options.static_inline true, --unset to reset). After a change it offers to reinstall so generated output reflects it. pnl install --enable-static-inline is the per-install equivalent.
wchar_t * wide strings. A wchar_t * struct field (e.g. hidapi's manufacturer_string/product_string/serial_number) now generates a ?string getter that decodes the wide string (UTF-32 → UTF-8) via Util::wcStringOrNull, instead of exposing an int pointer.
Notes
An integrity-digest mismatch now prompts before overwriting when run interactively (default: no), instead of only aborting.
Verified across the 181-package corpus: 16 libraries build shims (libnotcurses 215 functions, libvips 90, libjasper 86, libpango 72, libhwloc 59, …) with no regressions; the remaining hard cases (transitive includes libclang itself drops, or C++ typeof macros) fall back to stubs and still install. Documentation (EN + JA) updated.