nixpkgs/pkgs/build-support/emacs/melpa.nix
Thomas Tuegel decb5802c9 elpaBuild: factor out package installation
Building packages requires package-build.el from Melpa, but installing
packages only requires package.el. Packages from ELPA are already built,
so there is no need to involve package-build.el.
2016-01-18 15:29:19 -06:00

79 lines
1.7 KiB
Nix

# builder for Emacs packages built for packages.el
# using MELPA package-build.el
{ lib, stdenv, fetchurl, emacs, texinfo }:
with lib;
{ pname
, version
, recipeFile ? null
, files ? null
, fileSpecs ? [ "*.el" "*.el.in" "dir"
"*.info" "*.texi" "*.texinfo"
"doc/dir" "doc/*.info" "doc/*.texi" "doc/*.texinfo"
]
, meta ? {}
, ...
}@args:
let
packageBuild = fetchurl {
url = https://raw.githubusercontent.com/milkypostman/melpa/2b3eb31c077fcaff94b74b757c1ce17650333943/package-build.el;
sha256 = "1biwg2pqmmdz5iwqbjdszljazqymvgyyjcnc255nr6qz8mhnx67j";
};
targets = concatStringsSep " " (if files == null then fileSpecs else files);
defaultMeta = {
homepage = args.src.meta.homepage or "http://melpa.org/#/${pname}";
};
in
import ./generic.nix { inherit lib stdenv emacs texinfo; } ({
inherit packageBuild;
buildPhase =
if recipeFile == null
then ''
runHook preBuild
export archive=$(emacs --batch -Q -l $packageBuild -l ${./melpa2nix.el} \
-f melpa2nix-build-package \
${pname} ${version} ${targets})
runHook postBuild
''
else ''
runHook preBuild
export archive=$(emacs --batch -Q -l $packageBuild -l ${./melpa2nix.el} \
-f melpa2nix-build-package-from-recipe \
${recipeFile} ${version})
runHook postBuild
'';
installPhase = ''
runHook preInstall
emacs --batch -Q -l ${./elpa2nix.el} \
-f elpa2nix-install-package \
"$archive" "$out/share/emacs/site-lisp/elpa"
runHook postInstall
'';
meta = defaultMeta // meta;
}
// removeAttrs args [ "files" "fileSpecs"
"meta"
])