build-support/emacs: refactor

- Remove superflous `let` with `defaultMeta`

These can just be assigned to meta directly instead.

- Hoist internal intermediate derivation

- Remove top-level `with lib`

- Inherit `lib`/`builtins` into scopes

+70 -73
+10 -14
pkgs/build-support/emacs/elpa.nix
··· 2 2 3 3 { lib, stdenv, emacs, texinfo, writeText, gcc }: 4 4 5 - with lib; 5 + let 6 + handledArgs = [ "files" "fileSpecs" "meta" ]; 7 + genericBuild = import ./generic.nix { inherit lib stdenv emacs texinfo writeText gcc; }; 8 + 9 + in 6 10 7 11 { pname 8 12 , version ··· 11 15 , ... 12 16 }@args: 13 17 14 - let 15 - 16 - defaultMeta = { 17 - homepage = args.src.meta.homepage or "https://elpa.gnu.org/packages/${pname}.html"; 18 - }; 19 - 20 - in 21 - 22 - import ./generic.nix { inherit lib stdenv emacs texinfo writeText gcc; } ({ 18 + genericBuild ({ 23 19 24 20 dontUnpack = true; 25 21 ··· 33 29 runHook postInstall 34 30 ''; 35 31 36 - meta = defaultMeta // meta; 32 + meta = { 33 + homepage = args.src.meta.homepage or "https://elpa.gnu.org/packages/${pname}.html"; 34 + } // meta; 37 35 } 38 36 39 - // removeAttrs args [ "files" "fileSpecs" 40 - "meta" 41 - ]) 37 + // removeAttrs args handledArgs)
+30 -26
pkgs/build-support/emacs/generic.nix
··· 2 2 3 3 { lib, stdenv, emacs, texinfo, writeText, gcc, ... }: 4 4 5 + let 6 + inherit (lib) optionalAttrs getLib; 7 + handledArgs = [ "buildInputs" "packageRequires" "meta" ]; 8 + 9 + setupHook = writeText "setup-hook.sh" '' 10 + source ${./emacs-funcs.sh} 11 + 12 + if [[ ! -v emacsHookDone ]]; then 13 + emacsHookDone=1 14 + 15 + # If this is for a wrapper derivation, emacs and the dependencies are all 16 + # run-time dependencies. If this is for precompiling packages into bytecode, 17 + # emacs is a compile-time dependency of the package. 18 + addEnvHooks "$hostOffset" addEmacsVars 19 + addEnvHooks "$targetOffset" addEmacsVars 20 + fi 21 + ''; 22 + 23 + in 24 + 5 25 { pname 6 26 , version 7 27 , buildInputs ? [] ··· 10 30 , ... 11 31 }@args: 12 32 13 - let 14 - defaultMeta = { 15 - broken = false; 16 - platforms = emacs.meta.platforms; 17 - } // lib.optionalAttrs ((args.src.meta.homepage or "") != "") { 18 - homepage = args.src.meta.homepage; 19 - }; 20 - in 21 - 22 33 stdenv.mkDerivation (finalAttrs: ({ 23 34 name = "emacs-${pname}-${finalAttrs.version}"; 24 35 ··· 42 53 propagatedBuildInputs = packageRequires; 43 54 propagatedUserEnvPkgs = packageRequires; 44 55 45 - setupHook = writeText "setup-hook.sh" '' 46 - source ${./emacs-funcs.sh} 47 - 48 - if [[ ! -v emacsHookDone ]]; then 49 - emacsHookDone=1 50 - 51 - # If this is for a wrapper derivation, emacs and the dependencies are all 52 - # run-time dependencies. If this is for precompiling packages into bytecode, 53 - # emacs is a compile-time dependency of the package. 54 - addEnvHooks "$hostOffset" addEmacsVars 55 - addEnvHooks "$targetOffset" addEmacsVars 56 - fi 57 - ''; 56 + inherit setupHook; 58 57 59 58 doCheck = false; 60 59 61 - meta = defaultMeta // meta; 60 + meta = { 61 + broken = false; 62 + platforms = emacs.meta.platforms; 63 + } // optionalAttrs ((args.src.meta.homepage or "") != "") { 64 + homepage = args.src.meta.homepage; 65 + } // meta; 62 66 } 63 67 64 - // lib.optionalAttrs (emacs.withNativeCompilation or false) { 68 + // optionalAttrs (emacs.withNativeCompilation or false) { 65 69 66 - LIBRARY_PATH = "${lib.getLib stdenv.cc.libc}/lib"; 70 + LIBRARY_PATH = "${getLib stdenv.cc.libc}/lib"; 67 71 68 72 nativeBuildInputs = [ gcc ]; 69 73 ··· 83 87 ''; 84 88 } 85 89 86 - // removeAttrs args [ "buildInputs" "packageRequires" "meta" ])) 90 + // removeAttrs args handledArgs))
+30 -31
pkgs/build-support/emacs/melpa.nix
··· 3 3 4 4 { lib, stdenv, fetchFromGitHub, emacs, texinfo, writeText, gcc }: 5 5 6 - with lib; 6 + let 7 + genericBuild = import ./generic.nix { inherit lib stdenv emacs texinfo writeText gcc; }; 8 + 9 + packageBuild = stdenv.mkDerivation { 10 + name = "package-build"; 11 + src = fetchFromGitHub { 12 + owner = "melpa"; 13 + repo = "package-build"; 14 + rev = "c48aa078c01b4f07b804270c4583a0a58ffea1c0"; 15 + sha256 = "sha256-MzPj375upIiYXdQR+wWXv3A1zMqbSrZlH0taLuxx/1M="; 16 + }; 17 + 18 + patches = [ ./package-build-dont-use-mtime.patch ]; 19 + 20 + dontConfigure = true; 21 + dontBuild = true; 22 + 23 + installPhase = " 24 + mkdir -p $out 25 + cp -r * $out 26 + "; 27 + }; 28 + 29 + in 7 30 8 31 { /* 9 32 pname: Nix package name without special symbols and without version or ··· 20 43 , ... 21 44 }@args: 22 45 23 - let 24 - 25 - defaultMeta = { 26 - homepage = args.src.meta.homepage or "https://melpa.org/#/${pname}"; 27 - }; 28 - 29 - in 30 - 31 - import ./generic.nix { inherit lib stdenv emacs texinfo writeText gcc; } ({ 46 + genericBuild ({ 32 47 33 48 ename = 34 49 if ename == null 35 50 then pname 36 51 else ename; 37 52 38 - packageBuild = stdenv.mkDerivation { 39 - name = "package-build"; 40 - src = fetchFromGitHub { 41 - owner = "melpa"; 42 - repo = "package-build"; 43 - rev = "c48aa078c01b4f07b804270c4583a0a58ffea1c0"; 44 - sha256 = "sha256-MzPj375upIiYXdQR+wWXv3A1zMqbSrZlH0taLuxx/1M="; 45 - }; 46 - 47 - patches = [ ./package-build-dont-use-mtime.patch ]; 48 - 49 - dontConfigure = true; 50 - dontBuild = true; 51 - 52 - installPhase = " 53 - mkdir -p $out 54 - cp -r * $out 55 - "; 56 - }; 57 - 58 53 elpa2nix = ./elpa2nix.el; 59 54 melpa2nix = ./melpa2nix.el; 55 + 56 + inherit packageBuild; 60 57 61 58 preUnpack = '' 62 59 mkdir -p "$NIX_BUILD_TOP/recipes" ··· 104 101 runHook postInstall 105 102 ''; 106 103 107 - meta = defaultMeta // meta; 104 + meta = { 105 + homepage = args.src.meta.homepage or "https://melpa.org/#/${pname}"; 106 + } // meta; 108 107 } 109 108 110 109 // removeAttrs args [ "meta" ])
-2
pkgs/build-support/emacs/trivial.nix
··· 2 2 3 3 { callPackage, lib, ... }@envargs: 4 4 5 - with lib; 6 - 7 5 args: 8 6 9 7 callPackage ./generic.nix envargs ({