tvl-depot/tools/emacs-pkgs/buildEmacsPackage.nix
Vincent Ambo 9d95751302 feat(tools/emacs-pkgs): Add new builder for internal packages
Adds a new internal builder that makes it possible to override the
`emacsPackages` passed to our Emacs packages, which in turn makes it
possible to inject them into the emacsPackages fixpoint and use them
with features like Emacs native compilation.

Change-Id: I80dad57115c83cf5693ae6ba4e4cf3105d103d5e
Reviewed-on: https://cl.tvl.fyi/c/depot/+/3003
Tested-by: BuildkiteCI
Reviewed-by: adisbladis <adisbladis@gmail.com>
Reviewed-by: grfn <grfn@gws.fyi>
2021-04-13 22:56:38 +00:00

34 lines
1.1 KiB
Nix

# Builder for depot-internal Emacs packages. Packages built using this
# builder are added into the Emacs packages fixpoint under
# `emacsPackages.tvlPackages`, which in turn makes it possible to use
# them with special Emacs features like native compilation.
#
# Arguments passed to the builder are the same as
# emacsPackages.trivialBuild, except:
#
# * packageRequires is not used
#
# * externalRequires takes a selection function for packages from
# emacsPackages
#
# * internalRequires takes other depot packages
{ pkgs, ... }:
buildArgs:
pkgs.callPackage({ emacsPackages }:
let
# Select external dependencies from the emacsPackages set
externalDeps = (buildArgs.externalRequires or (_: [])) emacsPackages;
# Override emacsPackages for depot-internal packages
internalDeps = map (p: p.override { inherit emacsPackages; })
(buildArgs.internalRequires or []);
trivialBuildArgs = builtins.removeAttrs buildArgs [
"externalRequires" "internalRequires"
] // {
packageRequires = externalDeps ++ internalDeps;
};
in emacsPackages.trivialBuild trivialBuildArgs) {}