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

93 lines
2.1 KiB
Nix
Raw Normal View History

2014-08-08 00:13:56 +02:00
{ ruby, fetchurl, rake, rubygemsFun, makeWrapper, lib, git }:
{ name
, namePrefix ? "ruby${ruby.majorVersion}" + "-"
, buildInputs ? []
2014-08-18 23:53:41 +02:00
, doCheck ? false # TODO: fix this
, dontBuild ? true
2014-08-08 00:13:56 +02:00
, meta ? {}
, gemPath ? []
, testTask ? "test"
, ...} @ attrs:
let
2014-08-08 00:13:56 +02:00
rubygems = rubygemsFun ruby;
2014-08-08 00:13:56 +02:00
in ruby.stdenv.mkDerivation (attrs // {
inherit doCheck;
2014-08-08 00:13:56 +02:00
buildInputs = [ rubygems makeWrapper git ] ++ buildInputs;
2014-08-08 00:13:56 +02: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-08 00:13:56 +02:00
unpackPhase = ''
2014-08-13 21:13:27 +02:00
if test -d $src; then
cd $src
else
gem unpack $src --target=gem-build
cd gem-build/*
fi
2014-08-08 00:13:56 +02:00
'';
2014-08-18 23:53:41 +02:00
checkPhase = ''
runHook preCheck
${attrs.checkPhase or "${rake}/bin/rake spec"}
runHook postCheck
2014-08-08 00:13:56 +02:00
'';
2014-08-08 00:13:56 +02:00
installPhase = ''
runHook preInstall
2014-08-08 03:53:17 +02:00
GEM_HOME=$out/${ruby.gemPath} \
2014-10-26 21:13:10 +01:00
gem install \
--local \
--force \
--http-proxy "http://nodtd.invalid" \
--ignore-dependencies \
--build-root "/" \
--bindir "$out/bin" \
--backtrace \
$src $gemFlags -- $buildFlags
2014-08-08 00:13:56 +02:00
rm -frv $out/${ruby.gemPath}/cache # don't keep the .gem file here
for prog in $out/bin/*; do
wrapProgram "$prog" \
2014-08-10 03:01:40 +02:00
--prefix GEM_PATH : "$out/${ruby.gemPath}:$GEM_PATH" \
2014-08-08 00:13:56 +02:00
--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
2014-08-08 03:46:17 +02:00
mkdir -p $out/nix-support
cat > $out/nix-support/setup-hook <<EOF
if [[ "$GEM_PATH" != *$out/${ruby.gemPath}* ]]; then
addToSearchPath GEM_PATH $out/${ruby.gemPath}
fi
2014-08-08 03:46:17 +02:00
EOF
2014-08-08 00:13:56 +02:00
runHook postInstall
'';
2014-08-08 00:13:56 +02:00
propagatedBuildInputs = gemPath;
propagatedUserEnvPkgs = gemPath;
2013-02-06 01:08:04 +01:00
2014-08-08 00:13:56 +02:00
passthru.isRubyGem = true;
inherit meta;
})