summary refs log tree commit diff
diff options
context:
space:
mode:
authorNikolay Amiantov <ab@fmap.me>2016-04-26 16:47:43 +0400
committerNikolay Amiantov <ab@fmap.me>2016-04-26 16:47:43 +0400
commitf6eb6862221bff46a143fb10b1c16a5ce1f32027 (patch)
tree22b68eb6bb5227a362b0987a3e722315d0ba15eb
parent07cad5411ef18fa2de2e500d1a78e12a2b3fda6b (diff)
parent8415fa35c79214fc2093882ed688f98f9abf7048 (diff)
downloadnixlib-f6eb6862221bff46a143fb10b1c16a5ce1f32027.tar
nixlib-f6eb6862221bff46a143fb10b1c16a5ce1f32027.tar.gz
nixlib-f6eb6862221bff46a143fb10b1c16a5ce1f32027.tar.bz2
nixlib-f6eb6862221bff46a143fb10b1c16a5ce1f32027.tar.lz
nixlib-f6eb6862221bff46a143fb10b1c16a5ce1f32027.tar.xz
nixlib-f6eb6862221bff46a143fb10b1c16a5ce1f32027.tar.zst
nixlib-f6eb6862221bff46a143fb10b1c16a5ce1f32027.zip
Merge pull request #15002 from abbradar/symlink-join-wrappers
Use symlinkJoin for wrappers
-rw-r--r--nixos/modules/services/logging/logcheck.nix5
-rw-r--r--nixos/modules/services/mail/dovecot.nix6
-rw-r--r--pkgs/applications/audio/deadbeef/wrapper.nix20
-rw-r--r--pkgs/applications/audio/puredata/wrapper.nix19
-rw-r--r--pkgs/applications/graphics/gimp/2.8.nix3
-rw-r--r--pkgs/applications/graphics/gimp/wrapper.nix19
-rw-r--r--pkgs/applications/misc/k3b/wrapper.nix12
-rw-r--r--pkgs/applications/misc/rxvt_unicode/wrapper.nix33
-rw-r--r--pkgs/applications/networking/instant-messengers/pidgin/wrapper.nix19
-rw-r--r--pkgs/applications/video/avidemux/wrapper.nix16
-rw-r--r--pkgs/build-support/trivial-builders.nix14
-rw-r--r--pkgs/desktops/kde-5/plasma-5.5/default.nix6
-rw-r--r--pkgs/games/dwarf-fortress/dwarf-therapist/default.nix6
-rw-r--r--pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix22
-rw-r--r--pkgs/tools/cd-dvd/brasero/wrapper.nix12
-rw-r--r--pkgs/tools/inputmethods/fcitx/wrapper.nix20
16 files changed, 82 insertions, 150 deletions
diff --git a/nixos/modules/services/logging/logcheck.nix b/nixos/modules/services/logging/logcheck.nix
index 6069262b4705..3a85fa60fe7a 100644
--- a/nixos/modules/services/logging/logcheck.nix
+++ b/nixos/modules/services/logging/logcheck.nix
@@ -11,7 +11,10 @@ let
                    rm $out/logcheck.*
                  '';
 
-  rulesDir = pkgs.symlinkJoin "logcheck-rules-dir" ([ defaultRules ] ++ cfg.extraRulesDirs);
+  rulesDir = pkgs.symlinkJoin
+    { name = "logcheck-rules-dir";
+      paths = ([ defaultRules ] ++ cfg.extraRulesDirs);
+    };
 
   configFile = pkgs.writeText "logcheck.conf" cfg.config;
 
diff --git a/nixos/modules/services/mail/dovecot.nix b/nixos/modules/services/mail/dovecot.nix
index 127c3da69d14..47e374d8edc3 100644
--- a/nixos/modules/services/mail/dovecot.nix
+++ b/nixos/modules/services/mail/dovecot.nix
@@ -63,8 +63,10 @@ let
     cfg.extraConfig
   ];
 
-  modulesDir = pkgs.symlinkJoin "dovecot-modules"
-    (map (pkg: "${pkg}/lib/dovecot") ([ dovecotPkg ] ++ map (module: module.override { dovecot = dovecotPkg; }) cfg.modules));
+  modulesDir = pkgs.symlinkJoin {
+    name = "dovecot-modules";
+    paths = map (pkg: "${pkg}/lib/dovecot") ([ dovecotPkg ] ++ map (module: module.override { dovecot = dovecotPkg; }) cfg.modules);
+  };
 
 in
 {
diff --git a/pkgs/applications/audio/deadbeef/wrapper.nix b/pkgs/applications/audio/deadbeef/wrapper.nix
index b612f195af3f..5b14302204e7 100644
--- a/pkgs/applications/audio/deadbeef/wrapper.nix
+++ b/pkgs/applications/audio/deadbeef/wrapper.nix
@@ -1,22 +1,14 @@
-{ stdenv, buildEnv, deadbeef, makeWrapper, plugins }:
+{ stdenv, symlinkJoin, deadbeef, makeWrapper, plugins }:
 
-let
-drv = buildEnv {
-  name = "deadbeef-with-plugins-" + (builtins.parseDrvName deadbeef.name).version;
+symlinkJoin {
+  name = "deadbeef-with-plugins-${deadbeef.version}";
 
   paths = [ deadbeef ] ++ plugins;
 
+  buildInputs = [ makeWrapper ];
+
   postBuild = ''
-    # TODO: This could be avoided if buildEnv could be forced to create all directories
-    if [ -L $out/bin ]; then
-      rm $out/bin
-      mkdir $out/bin
-      for i in ${deadbeef}/bin/*; do
-        ln -s $i $out/bin
-      done
-    fi
     wrapProgram $out/bin/deadbeef \
       --set DEADBEEF_PLUGIN_DIR "$out/lib/deadbeef"
   '';
-  };
-in stdenv.lib.overrideDerivation drv (x : { buildInputs = x.buildInputs ++ [ makeWrapper ]; })
+}
diff --git a/pkgs/applications/audio/puredata/wrapper.nix b/pkgs/applications/audio/puredata/wrapper.nix
index 0a30037b2268..9c0a48db51cc 100644
--- a/pkgs/applications/audio/puredata/wrapper.nix
+++ b/pkgs/applications/audio/puredata/wrapper.nix
@@ -1,23 +1,16 @@
-{ stdenv, buildEnv, puredata, makeWrapper, plugins }:
+{ stdenv, symlinkJoin, puredata, makeWrapper, plugins }:
 
 let
 puredataFlags = map (x: "-path ${x}/") plugins;
-drv = buildEnv {
-  name = "puredata-with-plugins-" + (builtins.parseDrvName puredata.name).version;
+in symlinkJoin {
+  name = "puredata-with-plugins-${puredata.version}";
 
   paths = [ puredata ] ++ plugins;
 
+  buildInputs = [ makeWrapper ];
+
   postBuild = ''
-    # TODO: This could be avoided if buildEnv could be forced to create all directories
-    if [ -L $out/bin ]; then
-      rm $out/bin
-      mkdir $out/bin
-      for i in ${puredata}/bin/*; do
-        ln -s $i $out/bin
-      done
-    fi
     wrapProgram $out/bin/pd \
       --add-flags "${toString puredataFlags}"
   '';
-  };
-in stdenv.lib.overrideDerivation drv (x : { buildInputs = x.buildInputs ++ [ makeWrapper ]; })
+}
diff --git a/pkgs/applications/graphics/gimp/2.8.nix b/pkgs/applications/graphics/gimp/2.8.nix
index b09838656929..5943cb9cdacf 100644
--- a/pkgs/applications/graphics/gimp/2.8.nix
+++ b/pkgs/applications/graphics/gimp/2.8.nix
@@ -4,7 +4,8 @@
 , python, pygtk, libart_lgpl, libexif, gettext, xorg, wrapPython }:
 
 stdenv.mkDerivation rec {
-  name = "gimp-2.8.16";
+  name = "gimp-${version}";
+  version = "2.8.16";
 
   # This declarations for `gimp-with-plugins` wrapper,
   # (used for determining $out/lib/gimp/${majorVersion}/ paths)
diff --git a/pkgs/applications/graphics/gimp/wrapper.nix b/pkgs/applications/graphics/gimp/wrapper.nix
index 53067dc39c9a..7455a69dde97 100644
--- a/pkgs/applications/graphics/gimp/wrapper.nix
+++ b/pkgs/applications/graphics/gimp/wrapper.nix
@@ -1,24 +1,18 @@
-{ stdenv, lib, buildEnv, gimp, makeWrapper, gimpPlugins, plugins ? null}:
+{ stdenv, lib, symlinkJoin, gimp, makeWrapper, gimpPlugins, plugins ? null}:
 
 let
 allPlugins = lib.filter (pkg: builtins.isAttrs pkg && pkg.type == "derivation") (lib.attrValues gimpPlugins);
 selectedPlugins = if plugins == null then allPlugins else plugins;
 extraArgs = map (x: x.wrapArgs or "") selectedPlugins;
 
-drv = buildEnv {
-  name = "gimp-with-plugins-" + (builtins.parseDrvName gimp.name).version;
+in symlinkJoin {
+  name = "gimp-with-plugins-${gimp.version}";
 
   paths = [ gimp ] ++ selectedPlugins;
 
+  buildInputs = [ makeWrapper ];
+
   postBuild = ''
-    # TODO: This could be avoided if buildEnv could be forced to create all directories
-    if [ -L $out/bin ]; then
-      rm $out/bin
-      mkdir $out/bin
-      for i in ${gimp}/bin/*; do
-        ln -s $i $out/bin
-      done
-    fi
     for each in gimp-2.8 gimp-console-2.8; do
       wrapProgram $out/bin/$each \
         --set GIMP2_PLUGINDIR "$out/lib/gimp/2.0" \
@@ -29,5 +23,4 @@ drv = buildEnv {
       ln -sf "$each-2.8" $out/bin/$each
     done
   '';
-  };
-in stdenv.lib.overrideDerivation drv (x : { buildInputs = x.buildInputs ++ [ makeWrapper ]; })
+}
diff --git a/pkgs/applications/misc/k3b/wrapper.nix b/pkgs/applications/misc/k3b/wrapper.nix
index d5c98a2affa7..486d3fb7ddf7 100644
--- a/pkgs/applications/misc/k3b/wrapper.nix
+++ b/pkgs/applications/misc/k3b/wrapper.nix
@@ -1,22 +1,14 @@
-{ lib, buildEnv, k3b-original, cdrtools, makeWrapper }:
+{ lib, symlinkJoin, k3b-original, cdrtools, makeWrapper }:
 
 let
   binPath = lib.makeBinPath [ cdrtools ];
-in buildEnv {
+in symlinkJoin {
   name = "k3b-${k3b-original.version}";
 
   paths = [ k3b-original ];
   buildInputs = [ makeWrapper ];
 
   postBuild = ''
-    # TODO: This could be avoided if buildEnv could be forced to create all directories
-    if [ -L $out/bin ]; then
-      rm $out/bin
-      mkdir $out/bin
-      for i in ${k3b-original}/bin/*; do
-        ln -s $i $out/bin
-      done
-    fi
     wrapProgram $out/bin/k3b \
       --prefix PATH ':' ${binPath}
   '';
diff --git a/pkgs/applications/misc/rxvt_unicode/wrapper.nix b/pkgs/applications/misc/rxvt_unicode/wrapper.nix
index 2f68e4ec5f11..c9b0823fb51f 100644
--- a/pkgs/applications/misc/rxvt_unicode/wrapper.nix
+++ b/pkgs/applications/misc/rxvt_unicode/wrapper.nix
@@ -1,28 +1,21 @@
-{ stdenv, buildEnv, rxvt_unicode, makeWrapper, plugins }:
+{ stdenv, symlinkJoin, rxvt_unicode, makeWrapper, plugins }:
 
 let
   rxvt = rxvt_unicode.override {
     perlSupport = true;
   };
 
-  drv = buildEnv {
-    name = "${rxvt.name}-with-plugins";
+in symlinkJoin {
+  name = "${rxvt.name}-with-plugins";
 
-    paths = [ rxvt ] ++ plugins;
+  paths = [ rxvt ] ++ plugins;
 
-    postBuild = ''
-      # TODO: This could be avoided if buildEnv could be forced to create all directories
-      if [ -L $out/bin ]; then
-        rm $out/bin
-        mkdir $out/bin
-        for i in ${rxvt}/bin/*; do
-          ln -s $i $out/bin
-        done
-      fi
-      wrapProgram $out/bin/urxvt \
-        --suffix-each URXVT_PERL_LIB ':' "$out/lib/urxvt/perl"
-      wrapProgram $out/bin/urxvtd \
-        --suffix-each URXVT_PERL_LIB ':' "$out/lib/urxvt/perl"
-    '';
-  };
-in stdenv.lib.overrideDerivation drv (x : { buildInputs = x.buildInputs ++ [ makeWrapper ]; })
+  buildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/urxvt \
+      --suffix-each URXVT_PERL_LIB ':' "$out/lib/urxvt/perl"
+    wrapProgram $out/bin/urxvtd \
+      --suffix-each URXVT_PERL_LIB ':' "$out/lib/urxvt/perl"
+  '';
+}
diff --git a/pkgs/applications/networking/instant-messengers/pidgin/wrapper.nix b/pkgs/applications/networking/instant-messengers/pidgin/wrapper.nix
index 7e637c767cfa..cff0f0818eeb 100644
--- a/pkgs/applications/networking/instant-messengers/pidgin/wrapper.nix
+++ b/pkgs/applications/networking/instant-messengers/pidgin/wrapper.nix
@@ -1,24 +1,17 @@
-{ stdenv, buildEnv, pidgin, makeWrapper, plugins }:
+{ stdenv, symlinkJoin, pidgin, makeWrapper, plugins }:
 
 let
 extraArgs = map (x: x.wrapArgs or "") plugins;
-drv = buildEnv {
-  name = "pidgin-with-plugins-" + (builtins.parseDrvName pidgin.name).version;
+in symlinkJoin {
+  name = "pidgin-with-plugins-${pidgin.version}";
 
   paths = [ pidgin ] ++ plugins;
 
+  buildInputs = [ makeWrapper ];
+
   postBuild = ''
-    # TODO: This could be avoided if buildEnv could be forced to create all directories
-    if [ -L $out/bin ]; then
-      rm $out/bin
-      mkdir $out/bin
-      for i in ${pidgin}/bin/*; do
-        ln -s $i $out/bin
-      done
-    fi
     wrapProgram $out/bin/pidgin \
       --suffix-each PURPLE_PLUGIN_PATH ':' "$out/lib/purple-${pidgin.majorVersion} $out/lib/pidgin" \
       ${toString extraArgs}
   '';
-  };
-in stdenv.lib.overrideDerivation drv (x : { buildInputs = x.buildInputs ++ [ makeWrapper ]; })
+}
diff --git a/pkgs/applications/video/avidemux/wrapper.nix b/pkgs/applications/video/avidemux/wrapper.nix
index 1d1c66cb9fe5..7f05b81baec7 100644
--- a/pkgs/applications/video/avidemux/wrapper.nix
+++ b/pkgs/applications/video/avidemux/wrapper.nix
@@ -1,4 +1,4 @@
-{ buildEnv, avidemux_unwrapped, makeWrapper
+{ symlinkJoin, avidemux_unwrapped, makeWrapper
 # GTK version is broken upstream, see https://bugzilla.redhat.com/show_bug.cgi?id=1244340
 , withUi ? "qt4"
 }:
@@ -7,24 +7,14 @@ let ui = builtins.getAttr "avidemux_${withUi}" avidemux_unwrapped; in
 
 assert ui.isUi;
 
-buildEnv {
-  name = "avidemux-${withUi}-" + ui.version;
+symlinkJoin {
+  name = "avidemux-${withUi}-${ui.version}";
 
   paths = [ ui avidemux_unwrapped.avidemux_common avidemux_unwrapped.avidemux_settings ];
 
-  ignoreCollisions = true;
-
   buildInputs = [ makeWrapper ];
 
   postBuild = ''
-    # TODO: This could be avoided if buildEnv could be forced to create all directories
-    if [ -L $out/bin ]; then
-      rm $out/bin
-      mkdir $out/bin
-      for i in ${ui}/bin/*; do
-        ln -s $i $out/bin
-      done
-    fi
     for i in $out/bin/*; do
       wrapProgram $i --set ADM_ROOT_DIR $out
     done
diff --git a/pkgs/build-support/trivial-builders.nix b/pkgs/build-support/trivial-builders.nix
index fef91e1d89dc..b0040cf18177 100644
--- a/pkgs/build-support/trivial-builders.nix
+++ b/pkgs/build-support/trivial-builders.nix
@@ -47,16 +47,24 @@ rec {
 
 
   # Create a forest of symlinks to the files in `paths'.
-  symlinkJoin = name: paths:
+  symlinkJoin =
+    { name
+    , paths
+    , preferLocalBuild ? true
+    , allowSubstitutes ? false
+    , postBuild ? ""
+    , buildInputs ? []
+    , meta ? {}
+    }:
     runCommand name
-      { inherit paths;
-        preferLocalBuild = true; allowSubstitutes = false;
+      { inherit paths preferLocalBuild allowSubstitutes buildInputs meta;
       }
       ''
         mkdir -p $out
         for i in $paths; do
           ${lndir}/bin/lndir $i $out
         done
+        ${postBuild}
       '';
 
 
diff --git a/pkgs/desktops/kde-5/plasma-5.5/default.nix b/pkgs/desktops/kde-5/plasma-5.5/default.nix
index a4f5c7c23204..3921f93a41d1 100644
--- a/pkgs/desktops/kde-5/plasma-5.5/default.nix
+++ b/pkgs/desktops/kde-5/plasma-5.5/default.nix
@@ -51,8 +51,10 @@ let
       let
         version = (builtins.parseDrvName breeze-qt5.name).version;
       in
-        symlinkJoin "breeze-${version}"
-        (map (pkg: pkg.out or pkg) [ breeze-gtk breeze-qt4 breeze-qt5 ]);
+        symlinkJoin {
+          name = "breeze-${version}";
+          paths = map (pkg: pkg.out or pkg) [ breeze-gtk breeze-qt4 breeze-qt5 ];
+        };
     kde-cli-tools = callPackage ./kde-cli-tools.nix {};
     kde-gtk-config = callPackage ./kde-gtk-config {};
     kdecoration = callPackage ./kdecoration.nix {};
diff --git a/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix b/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix
index 6c094ff20f81..37eab6d077a3 100644
--- a/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix
+++ b/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix
@@ -1,10 +1,8 @@
 { stdenv, fetchFromGitHub, coreutils, qtbase, qtdeclarative, qmakeHook, texlive }:
 
-let
-  version = "37.0.0";
-in
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   name = "dwarf-therapist-original-${version}";
+  version = "37.0.0";
 
   src = fetchFromGitHub {
     owner = "splintermind";
diff --git a/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix b/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix
index a16c1284a672..cbc8d31e6750 100644
--- a/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix
+++ b/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix
@@ -1,4 +1,4 @@
-{ buildEnv, lib, dwarf-therapist-original, dwarf-fortress-original, makeWrapper }:
+{ symlinkJoin, lib, dwarf-therapist-original, dwarf-fortress-original, makeWrapper }:
 
 let
   df = dwarf-fortress-original;
@@ -6,8 +6,8 @@ let
   inifile = "linux/v0${df.baseVersion}.${df.patchVersion}.ini";
   dfHashFile = "${df}/hash.md5";
 
-in buildEnv {
-  name = "dwarf-therapist-${lib.getVersion dt}";
+in symlinkJoin {
+  name = "dwarf-therapist-${dt.version}";
 
   paths = [ dt ];
 
@@ -16,22 +16,10 @@ in buildEnv {
   postBuild = ''
     # DwarfTherapist assumes it's run in $out/share/dwarftherapist and
     # therefore uses many relative paths.
-    rm $out/bin
-    mkdir $out/bin
-    makeWrapper ${dt}/bin/DwarfTherapist $out/bin/DwarfTherapist \
+    wrapProgram $out/bin/DwarfTherapist \
       --run "cd $out/share/dwarftherapist"
 
-    # Fix checksum of memory access directives. We really need #4621 fixed!
-    recreate_dir() {
-      rm "$out/$1"
-      mkdir -p "$out/$1"
-      for i in "${dt}/$1/"*; do
-        ln -s "$i" "$out/$1"
-      done
-    }
-
-    recreate_dir share
-    recreate_dir share/dwarftherapist
+    rm -rf $out/share/dwarftherapist/memory_layouts/linux
     mkdir -p $out/share/dwarftherapist/memory_layouts/linux
     origmd5=$(cat "${dfHashFile}.orig" | cut -c1-8)
     patchedmd5=$(cat "${dfHashFile}" | cut -c1-8)
diff --git a/pkgs/tools/cd-dvd/brasero/wrapper.nix b/pkgs/tools/cd-dvd/brasero/wrapper.nix
index 021e0da0e724..839cc1d604e6 100644
--- a/pkgs/tools/cd-dvd/brasero/wrapper.nix
+++ b/pkgs/tools/cd-dvd/brasero/wrapper.nix
@@ -1,22 +1,14 @@
-{ lib, buildEnv, brasero-original, cdrtools, makeWrapper }:
+{ lib, symlinkJoin, brasero-original, cdrtools, makeWrapper }:
 
 let
   binPath = lib.makeBinPath [ cdrtools ];
-in buildEnv {
+in symlinkJoin {
   name = "brasero-${brasero-original.version}";
 
   paths = [ brasero-original ];
   buildInputs = [ makeWrapper ];
 
   postBuild = ''
-    # TODO: This could be avoided if buildEnv could be forced to create all directories
-    if [ -L $out/bin ]; then
-      rm $out/bin
-      mkdir $out/bin
-      for i in ${brasero-original}/bin/*; do
-        ln -s $i $out/bin
-      done
-    fi
     wrapProgram $out/bin/brasero \
       --prefix PATH ':' ${binPath}
   '';
diff --git a/pkgs/tools/inputmethods/fcitx/wrapper.nix b/pkgs/tools/inputmethods/fcitx/wrapper.nix
index a0ae26189541..1e1a2b76a4bb 100644
--- a/pkgs/tools/inputmethods/fcitx/wrapper.nix
+++ b/pkgs/tools/inputmethods/fcitx/wrapper.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildEnv, fcitx, fcitx-configtool, makeWrapper, plugins, kde5 }:
+{ stdenv, symlinkJoin, fcitx, fcitx-configtool, makeWrapper, plugins, kde5 }:
 
 # This is based on the pidgin-with-plugins package.
 # Users should be able to configure what plugins are used
@@ -12,24 +12,16 @@
 #     (fcitx-with-plugins.override { plugins = [ fcitx-anthy ]; })
 # }
 
-let
-drv = buildEnv {
-  name = "fcitx-with-plugins-" + (builtins.parseDrvName fcitx.name).version;
+symlinkJoin {
+  name = "fcitx-with-plugins-${fcitx.version}";
 
   paths = [ fcitx fcitx-configtool kde5.fcitx-qt5 ] ++ plugins;
 
+  buildInputs = [ makeWrapper ];
+
   postBuild = ''
-    # TODO: This could be avoided if buildEnv could be forced to create all directories
-    if [ -L $out/bin ]; then
-      rm $out/bin
-      mkdir $out/bin
-      for i in ${fcitx}/bin/*; do
-        ln -s $i $out/bin
-      done
-    fi
     wrapProgram $out/bin/fcitx \
       --set FCITXDIR "$out/"
   '';
-  };
-in stdenv.lib.overrideDerivation drv (x : { buildInputs = x.buildInputs ++ [ makeWrapper ]; })
+}