forked from mirrors/nixpkgs
Merge pull request #15420 from samuelrivas/emacs-wrapper
emacs: hide wrapper dependencies
This commit is contained in:
commit
21efdd8003
|
@ -32,7 +32,7 @@ in customEmacsPackages.emacsWithPackages (epkgs: [ epkgs.evil epkgs.magit ])
|
|||
|
||||
*/
|
||||
|
||||
{ lib, lndir, makeWrapper, stdenv }: self:
|
||||
{ lib, lndir, makeWrapper, runCommand, stdenv }: self:
|
||||
|
||||
with lib; let inherit (self) emacs; in
|
||||
|
||||
|
@ -49,67 +49,69 @@ stdenv.mkDerivation {
|
|||
name = (appendToName "with-packages" emacs).name;
|
||||
nativeBuildInputs = [ emacs lndir makeWrapper ];
|
||||
inherit emacs explicitRequires;
|
||||
phases = [ "installPhase" ];
|
||||
installPhase = ''
|
||||
readonly SHARE="share/emacs-with-packages"
|
||||
|
||||
mkdir -p "$out/bin"
|
||||
mkdir -p "$out/$SHARE/bin"
|
||||
mkdir -p "$out/$SHARE/site-lisp"
|
||||
# Store all paths we want to add to emacs here, so that we only need to add
|
||||
# one path to the load lists
|
||||
deps = runCommand "emacs-packages-deps"
|
||||
{ inherit explicitRequires lndir emacs; }
|
||||
''
|
||||
mkdir -p $out/bin
|
||||
mkdir -p $out/share/emacs/site-lisp
|
||||
|
||||
local requires
|
||||
for pkg in $explicitRequires; do
|
||||
findInputs $pkg requires propagated-user-env-packages
|
||||
done
|
||||
# requires now holds all requested packages and their transitive dependencies
|
||||
local requires
|
||||
for pkg in $explicitRequires; do
|
||||
findInputs $pkg requires propagated-user-env-packages
|
||||
done
|
||||
# requires now holds all requested packages and their transitive dependencies
|
||||
|
||||
siteStart="$out/$SHARE/site-lisp/site-start.el"
|
||||
linkPath() {
|
||||
local pkg=$1
|
||||
local origin_path=$2
|
||||
local dest_path=$3
|
||||
|
||||
# Begin the new site-start.el by loading the original, which sets some
|
||||
# NixOS-specific paths. Paths are searched in the reverse of the order
|
||||
# they are specified in, so user and system profile paths are searched last.
|
||||
cat >"$siteStart" <<EOF
|
||||
# Add the path to the search path list, but only if it exists
|
||||
if [[ -d "$pkg/$origin_path" ]]; then
|
||||
$lndir/bin/lndir -silent "$pkg/$origin_path" "$out/$dest_path"
|
||||
fi
|
||||
}
|
||||
|
||||
linkEmacsPackage() {
|
||||
linkPath "$1" "bin" "bin"
|
||||
linkPath "$1" "share/emacs/site-lisp" "share/emacs/site-lisp"
|
||||
}
|
||||
|
||||
for pkg in $requires; do
|
||||
linkEmacsPackage $pkg
|
||||
done
|
||||
|
||||
siteStart="$out/share/emacs/site-lisp/site-start.el"
|
||||
|
||||
# A dependency may have brought the original siteStart, delete it and
|
||||
# create our own
|
||||
# Begin the new site-start.el by loading the original, which sets some
|
||||
# NixOS-specific paths. Paths are searched in the reverse of the order
|
||||
# they are specified in, so user and system profile paths are searched last.
|
||||
rm -f $siteStart
|
||||
cat >"$siteStart" <<EOF
|
||||
(load-file "$emacs/share/emacs/site-lisp/site-start.el")
|
||||
(add-to-list 'load-path "$out/$SHARE/site-lisp")
|
||||
(add-to-list 'exec-path "$out/$SHARE/bin")
|
||||
(add-to-list 'load-path "$out/share/emacs/site-lisp")
|
||||
(add-to-list 'exec-path "$out/bin")
|
||||
EOF
|
||||
|
||||
linkPath() {
|
||||
local pkg=$1
|
||||
local origin_path=$2
|
||||
local dest_path=$3
|
||||
# Byte-compiling improves start-up time only slightly, but costs nothing.
|
||||
$emacs/bin/emacs --batch -f batch-byte-compile "$siteStart"
|
||||
'';
|
||||
|
||||
# Add the path to the search path list, but only if it exists
|
||||
if [[ -d "$pkg/$origin_path" ]]; then
|
||||
lndir -silent "$pkg/$origin_path" "$out/$dest_path"
|
||||
fi
|
||||
}
|
||||
|
||||
# Add a package's paths to site-start.el
|
||||
linkEmacsPackage() {
|
||||
linkPath "$1" "bin" "$SHARE/bin"
|
||||
linkPath "$1" "share/emacs/site-lisp" "$SHARE/site-lisp"
|
||||
}
|
||||
|
||||
# First, link all the explicitly-required packages.
|
||||
for pkg in $explicitRequires; do
|
||||
linkEmacsPackage $pkg
|
||||
done
|
||||
|
||||
# Next, link all the dependencies.
|
||||
for pkg in $requires; do
|
||||
linkEmacsPackage $pkg
|
||||
done
|
||||
|
||||
# Byte-compiling improves start-up time only slightly, but costs nothing.
|
||||
emacs --batch -f batch-byte-compile "$siteStart"
|
||||
phases = [ "installPhase" ];
|
||||
installPhase = ''
|
||||
mkdir -p "$out/bin"
|
||||
|
||||
# Wrap emacs and friends so they find our site-start.el before the original.
|
||||
for prog in $emacs/bin/*; do # */
|
||||
local progname=$(basename "$prog")
|
||||
rm -f "$out/bin/$progname"
|
||||
makeWrapper "$prog" "$out/bin/$progname" \
|
||||
--suffix EMACSLOADPATH ":" "$out/$SHARE/site-lisp:"
|
||||
--suffix EMACSLOADPATH ":" "$deps/share/emacs/site-lisp:"
|
||||
done
|
||||
|
||||
mkdir -p $out/share
|
||||
|
|
|
@ -12399,7 +12399,7 @@ in
|
|||
|
||||
inherit lib newScope stdenv;
|
||||
inherit fetchFromGitHub fetchgit fetchhg fetchurl;
|
||||
inherit emacs texinfo makeWrapper;
|
||||
inherit emacs texinfo makeWrapper runCommand;
|
||||
inherit (xorg) lndir;
|
||||
|
||||
trivialBuild = callPackage ../build-support/emacs/trivial.nix {
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
{ overrides
|
||||
|
||||
, lib, newScope, stdenv, fetchurl, fetchgit, fetchFromGitHub, fetchhg
|
||||
, lib, newScope, stdenv, fetchurl, fetchgit, fetchFromGitHub, fetchhg, runCommand
|
||||
|
||||
, emacs, texinfo, lndir, makeWrapper
|
||||
, trivialBuild
|
||||
|
@ -64,7 +64,7 @@ let
|
|||
};
|
||||
|
||||
emacsWithPackages = import ../build-support/emacs/wrapper.nix {
|
||||
inherit lib lndir makeWrapper stdenv;
|
||||
inherit lib lndir makeWrapper stdenv runCommand;
|
||||
};
|
||||
|
||||
packagesFun = self: with self; {
|
||||
|
|
Loading…
Reference in a new issue