Fil-C on Nix

Filnix wiki

mbrock/filnix

tests/gtk-ports.nix

Evaluate with --option allow-import-from-derivation false; builds nothing. Check the ABI boundary: Fil-C builds splice in build-platform generators that are patched for their Fil-C target.

let
5flake=
builtins.getFlaketoString../.
used by pkgs ports
6pkgs=
importflake.inputs.nixpkgs system = "x86_64-linux";
uses flake used by gtkScanner
7inherit pkgs
lib
8ports=
flake.legacyPackages.x86_64-linux.pkgsFilc
uses flake used by build gi python
9build=
ports.buildPackages
uses ports used by gtkScanner
10gi=
ports.gobject-introspection-unwrapped
uses ports
11python=
ports.python3.withPackagesps: ps.mako ps.markdown ps.setuptools
uses ports
16containsDrv=
expected: inputs: builtins.anyinput: input.drvPath or null ≡ expected.drvPath inputs

nativeBuildInputs as mkDerivation resolved them, after splicing.

20usesTool=
tool: pkg: builtins.elemlib.getDevtool.outPath mapinput: input.outPath or toStringinput pkg.drvAttrs.nativeBuildInputs
uses lib used by gtkScanner
25hasPatch=
name: pkg: builtins.anypatch: lib.hasSuffixname toStringpatch pkg.patches
uses lib
28gtkScanner=
gtk: assert usesToolbuild.gobject-introspection gtk; assert ¬usesToolpkgs.gobject-introspection gtk; gtk.drvPath
in
assert hasPatch"glib-filc-generators.patch" build.glib
assert hasPatch"gobject-introspection-filc-scanner.patch" build.gobject-introspection-unwrapped
assert hasPatch"meson-gtype.patch" build.meson
assert build.glib.version ≡ ports.glib.version
assert build.gobject-introspection-unwrapped.version ≡ gi.version
assert ¬hasPatch"glib-filc-generators.patch" pkgs.glib
assert ¬hasPatch"meson-gtype.patch" pkgs.meson
assert builtins.allname: build.${name}.drvPath ≡ pkgs.${name}.drvPath "pango" "gtk3" "glibmm" "cairo" "sdl2-compat"
assert build.python3Packages.pygobject3.drvPath ≡ pkgs.python3Packages.pygobject3.drvPath
assert usesToolbuild.glib ports.gtk3
assert usesToolbuild.meson ports.gtk4
assert containsDrvpython gi.buildInputs
assert builtins.elem"-Dpython=${python}/bin/python3" gi.mesonFlags
assert builtins.elem"-Dgi_cross_use_prebuilt_gi=false" gi.mesonFlags
assert ¬builtins.elem"-Dgi_cross_use_prebuilt_gi=true" gi.mesonFlags
assert ¬containsDrvpkgs.gobject-introspection-unwrapped gi.nativeBuildInputs
assert ¬containsDrvgi gi.nativeBuildInputs
assert builtins.allinput: ¬pkgs.lib.hasPrefix"gobject-introspection" input.pname or "" ports.glib.nativeBuildInputs
assert gi.version ≡ "1.80.1"
assert ports.gtk3.version ≡ "3.24.52"
assert ports.gtk4.version ≡ "4.14.5"
assert builtins.elem"-Dintrospection=true" ports.gtk3.mesonFlags
assert builtins.elem"-Dintrospection=enabled" ports.gtk4.mesonFlags
assert builtins.elem"-Dmedia-gstreamer=disabled" ports.gtk4.mesonFlags
assert builtins.allinput: ¬builtins.eleminput.pname or "" "gst-plugins-base" "gst-plugins-bad" ports.gtk4.buildInputs
assert containsDrvports.systemdLibs ports.at-spi2-core.buildInputs
assert ¬containsDrvports.systemd ports.at-spi2-core.buildInputs
assert builtins.allusesToolbuild.gobject-introspection ports.pango ports.harfbuzz ports.gdk-pixbuf ports.graphene ports.at-spi2-core
assert usesToolbuild.gobject-introspection ports.libproxy
assert usesToolbuild.gobject-introspection ports.python3Packages.pygobject3
assert usesToolbuild.glib ports.dconf
assert ¬containsDrvports.vala ports.dconf.buildInputs
assert ports.python3Packages.pygobject3.version ≡ "3.48.2"
assert pkgs.callPackagegobject-introspection: gobject-introspection { }.drvPath ≡ pkgs.gobject-introspection.drvPath
assert lib.hasPrefix"${ports.stdenv.cc}/bin/" ports.makeBinaryWrapper.drvAttrs.cc
assert containsDrvports.makeBinaryWrapper build.qt5.wrapQtAppsHook.propagatedBuildInputs
assert containsDrvports.qt5.qtbase.dev build.qt5.wrapQtAppsHook.propagatedBuildInputs
assert containsDrvports.qt5.qtbase.dev build.qt5.qmake.propagatedBuildInputs
assert ports.gnutls.version ≡ pkgs.gnutls.version
assert builtins.allpatch: builtins.elempatch ports.gnutls.patches pkgs.gnutls.patches

Generators must not emit APIs newer than the target GLib and GI provide.

The twins are only tools: native libraries in the Fil-C build set link the ordinary GLib and GI, so they match the native set (and cache.nixos.org).

Unported packages splice in the same generators.

Runtime wrappers must not bootstrap an ordinary LLVM cross compiler.

Keep the pinned Nixpkgs release and its security fixes when adding the port.

114gnutls=
ports.gnutls.drvPath
115introspection=
gi.drvPath
116compiler=
flake.packages.x86_64-linux.filcc.drvPath