Skip to content

v0.6.0

Choose a tag to compare

@m3m0r7 m3m0r7 released this 22 Jun 13:45

Features

  • 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.