nixpkgs/pkgs/development/interpreters/ruby/gem.nix

94 lines
2.2 KiB
Nix
Raw Normal View History

2014-08-07 15:13:56 -07:00
{ ruby, fetchurl, rake, rubygemsFun, makeWrapper, lib, git }:
{ name
, namePrefix ? "ruby${ruby.majorVersion}" + "-"
, buildInputs ? []
2014-08-07 18:35:36 -07:00
, doCheck ? false
2014-08-07 15:13:56 -07:00
, doGitPrecheckHack ? false
, meta ? {}
, gemPath ? []
, testTask ? "test"
, preCheck ? ""
, postCheck ? ""
, ...} @ attrs:
let
2014-08-07 15:13:56 -07:00
rubygems = rubygemsFun ruby;
depsPath = lib.concatStringsSep ":" (map (g: "${g}/${ruby.gemPath}") gemPath);
2014-08-07 15:13:56 -07:00
in ruby.stdenv.mkDerivation (attrs // {
inherit doCheck;
2014-08-07 15:13:56 -07:00
buildInputs = [ rubygems makeWrapper git ] ++ buildInputs;
2014-08-07 15:13:56 -07:00
name = namePrefix + name;
src = if attrs ? src
then attrs.src
else fetchurl {
url = "http://rubygems.org/downloads/${attrs.name}.gem";
inherit (attrs) sha256;
};
2014-08-07 15:13:56 -07:00
unpackPhase = ''
gem unpack $src --target=gem-build
'';
2014-08-07 15:13:56 -07:00
dontBuild = true;
2014-08-07 15:13:56 -07:00
preCheckGit = ruby.stdenv.lib.optionalString doGitPrecheckHack ''
${git}/bin/git init
${git}/bin/git add .
'';
2014-08-07 15:13:56 -07:00
preCheck = ''
cd gem-build/*
OLD_PATH="$GEM_PATH"
export GEM_PATH="${depsPath}"
'' + preCheck;
2014-08-07 15:13:56 -07:00
postCheck = ''
GEM_PATH="$OLD_PATH"
'' + postCheck;
2014-08-07 15:13:56 -07:00
checkPhase =
if attrs ? checkPhase then attrs.checkPhase
else ''
runHook preCheckGit
runHook preCheck
test -f Rakefile && ${rake}/bin/rake ${testTask} -v
runHook postCheck
'';
2014-08-07 15:13:56 -07:00
installPhase = ''
GEM_PATH="${depsPath}" GEM_HOME=$out/${ruby.gemPath} \
gem install -p http://nodtd.invalid \
--build-root / -n "$out/bin" "$src" $gemFlags -- $buildFlags
rm -frv $out/${ruby.gemPath}/cache # don't keep the .gem file here
for prog in $out/bin/*; do
wrapProgram "$prog" \
--prefix GEM_PATH : "$out/${ruby.gemPath}:${depsPath}" \
--prefix RUBYLIB : "${rubygems}/lib" \
--set RUBYOPT rubygems \
$extraWrapperFlags ''${extraWrapperFlagsArray[@]}
done
for prog in $out/gems/*/bin/*; do
[[ -e "$out/bin/$(basename $prog)" ]]
done
# looks like useless files which break build repeatability and consume space
rm $out/${ruby.gemPath}/doc/*/*/created.rid || true
rm $out/${ruby.gemPath}/gems/*/ext/*/mkmf.log || true
runHook postInstall
'';
2014-08-07 15:13:56 -07:00
propagatedBuildInputs = gemPath;
propagatedUserEnvPkgs = gemPath;
2013-02-05 16:08:04 -08:00
2014-08-07 15:13:56 -07:00
passthru.isRubyGem = true;
inherit meta;
})