From a8a9b93d98d364e0e6258342cfeb7c516398e91e Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Mon, 27 Oct 2014 03:48:30 +0000 Subject: [PATCH] chruby: allow for specifying Rubies to use This allows the user to specify an attrset of Rubies to use with chruby by overriding the default of ~/.rubies with a path to a symlink tree. --- .../development/tools/misc/chruby/default.nix | 21 ++++++++++++++++--- pkgs/development/tools/misc/chruby/env.patch | 12 +++++++++++ pkgs/top-level/all-packages.nix | 2 +- 3 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 pkgs/development/tools/misc/chruby/env.patch diff --git a/pkgs/development/tools/misc/chruby/default.nix b/pkgs/development/tools/misc/chruby/default.nix index 2011a2c9903..0569dc2abdf 100644 --- a/pkgs/development/tools/misc/chruby/default.nix +++ b/pkgs/development/tools/misc/chruby/default.nix @@ -1,6 +1,13 @@ -{ stdenv, lib, fetchFromGitHub }: +{ stdenv, lib, fetchFromGitHub, runCommand, rubies ? null }: -stdenv.mkDerivation rec { +let + rubiesEnv = runCommand "chruby-env" { preferLocalBuild = true; } '' + mkdir $out + ${lib.concatStrings + (lib.mapAttrsToList (name: path: "ln -s ${path} $out/${name}\n") rubies)} + ''; + +in stdenv.mkDerivation rec { name = "chruby"; src = fetchFromGitHub { @@ -10,7 +17,15 @@ stdenv.mkDerivation rec { sha256 = "1iq9milnnj3189yw02hkly2pnnh4g0vn2fxq6dfx90kldjwpwxq5"; }; - phases = [ "unpackPhase" "installPhase" "fixupPhase" ]; + phases = [ "unpackPhase" "patchPhase" "installPhase" "fixupPhase" ]; + + patches = lib.optionalString (rubies != null) [ + ./env.patch + ]; + + postPatch = lib.optionalString (rubies != null) '' + substituteInPlace share/chruby/chruby.sh --replace "@rubiesEnv@" ${rubiesEnv} + ''; installPhase = '' mkdir $out diff --git a/pkgs/development/tools/misc/chruby/env.patch b/pkgs/development/tools/misc/chruby/env.patch new file mode 100644 index 00000000000..6a4ef8b7349 --- /dev/null +++ b/pkgs/development/tools/misc/chruby/env.patch @@ -0,0 +1,12 @@ +diff --git a/share/chruby/chruby.sh b/share/chruby/chruby.sh +--- a/share/chruby/chruby.sh ++++ b/share/chruby/chruby.sh +@@ -1,7 +1,7 @@ + CHRUBY_VERSION="0.3.8" + RUBIES=() + +-for dir in "$PREFIX/opt/rubies" "$HOME/.rubies"; do ++for dir in @rubiesEnv@; do + [[ -d "$dir" && -n "$(ls -A "$dir")" ]] && RUBIES+=("$dir"/*) + done + unset dir diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e835c632d63..513431f29cf 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4270,7 +4270,7 @@ let chrpath = callPackage ../development/tools/misc/chrpath { }; - chruby = callPackage ../development/tools/misc/chruby { }; + chruby = callPackage ../development/tools/misc/chruby { rubies = null; }; "cl-launch" = callPackage ../development/tools/misc/cl-launch {};