From 794740b7e348d641799863df0699ec90460a1247 Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Thu, 7 Aug 2014 15:13:56 -0700 Subject: [PATCH 01/69] pleasant ruby --- pkgs/development/interpreters/ruby/gem.nix | 127 +++++++++++------- pkgs/development/interpreters/ruby/gems.nix | 70 ++++++++++ .../interpreters/ruby/rubygems.nix | 4 +- pkgs/top-level/all-packages.nix | 14 +- 4 files changed, 164 insertions(+), 51 deletions(-) create mode 100644 pkgs/development/interpreters/ruby/gems.nix diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index 22801aa5b04..f90be459c32 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -1,62 +1,93 @@ -{stdenv, fetchurl, ruby, rubygems, makeWrapper, patches, overrides}: +{ ruby, fetchurl, rake, rubygemsFun, makeWrapper, lib, git }: + +{ name +, namePrefix ? "ruby${ruby.majorVersion}" + "-" +, buildInputs ? [] +, doCheck ? true +, doGitPrecheckHack ? false +, meta ? {} +, gemPath ? [] +, testTask ? "test" +, preCheck ? "" +, postCheck ? "" +, ...} @ attrs: let - gemDefaults = { name, basename, requiredGems, sha256, meta }: - { - buildInputs = [rubygems ruby makeWrapper]; - unpackPhase = ":"; - configurePhase=":"; - bulidPhase=":"; + rubygems = rubygemsFun ruby; + depsPath = lib.concatStringsSep ":" (map (g: "${g}/${ruby.gemPath}") gemPath); - src = fetchurl { - url = "http://rubygems.org/downloads/${name}.gem"; - inherit sha256; +in ruby.stdenv.mkDerivation (attrs // { + inherit doCheck; + + buildInputs = [ rubygems makeWrapper git ] ++ buildInputs; + + name = namePrefix + name; + + src = if attrs ? src + then attrs.src + else fetchurl { + url = "http://rubygems.org/downloads/${attrs.name}.gem"; + inherit (attrs) sha256; }; - name = "ruby-${name}"; + unpackPhase = '' + gem unpack $src --target=gem-build + ''; - propagatedBuildInputs = requiredGems; - inherit meta; + dontBuild = true; - installPhase = '' - export HOME=$TMP/home; mkdir -pv "$HOME" + preCheckGit = ruby.stdenv.lib.optionalString doGitPrecheckHack '' + ${git}/bin/git init + ${git}/bin/git add . + ''; - gem install -V --ignore-dependencies \ - -i "$out/${ruby.gemPath}" -n "$out/bin" "$src" $gemFlags -- $buildFlags - rm -frv $out/${ruby.gemPath}/cache # don't keep the .gem file here + preCheck = '' + cd gem-build/* + OLD_PATH="$GEM_PATH" + export GEM_PATH="${depsPath}" + '' + preCheck; - addToSearchPath GEM_PATH $out/${ruby.gemPath} + postCheck = '' + GEM_PATH="$OLD_PATH" + '' + postCheck; - for prog in $out/bin/*; do - wrapProgram "$prog" \ - --prefix GEM_PATH : "$GEM_PATH" \ - --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 + checkPhase = + if attrs ? checkPhase then attrs.checkPhase + else '' + runHook preCheckGit + runHook preCheck + test -f Rakefile && ${rake}/bin/rake ${testTask} -v + runHook postCheck ''; - propagatedUserEnvPkgs = requiredGems; + 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 - passthru.isRubyGem = true; + 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 - }; - mb = stdenv.lib.maybeAttr; - patchedGem = a: stdenv.mkDerivation (removeAttrs (stdenv.lib.mergeAttrsByFuncDefaults - ([ (gemDefaults a) ] - ++ (stdenv.lib.concatMap (p: [(mb a.basename {} p) (mb a.name {} p)] ) - patches))) - [ "mergeAttrBy" ]); -in -aName: a@{ name, basename, requiredGems, sha256, meta }: - stdenv.lib.foldl (d: o: mb name (mb basename d o) o) (patchedGem a) overrides + 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 + ''; + + propagatedBuildInputs = gemPath; + propagatedUserEnvPkgs = gemPath; + + passthru.isRubyGem = true; + inherit meta; +}) diff --git a/pkgs/development/interpreters/ruby/gems.nix b/pkgs/development/interpreters/ruby/gems.nix new file mode 100644 index 00000000000..0b20a9206af --- /dev/null +++ b/pkgs/development/interpreters/ruby/gems.nix @@ -0,0 +1,70 @@ +{ ruby, callPackage }: + +let + buildRubyGem = callPackage ./gem.nix { inherit ruby; }; +in rec { + inherit buildRubyGem; + + builder = buildRubyGem { + name = "builder-3.2.2"; + sha256 = "14fii7ab8qszrvsvhz6z2z3i4dw0h41a62fjr2h1j8m41vbrmyv2"; + doCheck = false; + }; + + bundler = buildRubyGem { + name = "bundler-1.6.5"; + sha256 = "1s4x0f5by9xs2y24jk6krq5ky7ffkzmxgr4z1nhdykdmpsi2zd0l"; + dontPatchShebangs = 1; + checkPhase = ":"; + }; + + capistrano = buildRubyGem { + name = "capistrano-3.2.1"; + sha256 = "0jcx8jijbvl05pjd7jrzb1sf968vjzpvb190d1kfa968hfc92lm0"; + gemPath = [ colorize i18n net_scp net_ssh rake sshkit ]; + doCheck = false; + }; + + colorize = buildRubyGem { + name = "colorize-0.7.3"; + sha256 = "0hccxpn0gryhdpyymkr7fnv2khz051f5rpw4xyrp9dr53b7yv3v2"; + }; + + i18n = buildRubyGem { + name = "i18n-0.6.11"; + sha256 = "0fwjlgmgry2blf8zlxn9c555cf4a16p287l599kz5104ncjxlzdk"; + }; + + json = buildRubyGem { + name = "json-1.8.1"; + sha256 = "0002bsycvizvkmk1jyv8px1hskk6wrjfk4f7x5byi8gxm6zzn6wn"; + doCheck = false; + }; + + net_scp = buildRubyGem { + name = "net-scp-1.2.1"; + sha256 = "0b0jqrcsp4bbi4n4mzyf70cp2ysyp6x07j8k8cqgxnvb4i3a134j"; + gemPath = [ net_ssh ]; + doCheck = false; + }; + + net_ssh = buildRubyGem { + name = "net-ssh-2.9.1"; + sha256 = "1vscp4r58jisiigqc6d6752w19m1m6hmi3jkzmp3ydxai7h3jb2j"; + doCheck = false; + }; + + rake = buildRubyGem { + name = "rake-10.3.2"; + sha256 = "0nvpkjrpsk8xxnij2wd1cdn6arja9q11sxx4aq4fz18bc6fss15m"; + gemPath = [ bundler ]; + checkPhase = ":"; + }; + + sshkit = buildRubyGem { + name = "sshkit-1.5.1"; + sha256 = "0lyd77b43dh897lx8iqdm9284ara7076nahmlis33qkfjfs105dy"; + gemPath = [ bundler colorize net_scp net_ssh ]; + doGitPrecheckHack = true; + }; +} diff --git a/pkgs/development/interpreters/ruby/rubygems.nix b/pkgs/development/interpreters/ruby/rubygems.nix index 3b66464ce22..b8fe56c1a10 100644 --- a/pkgs/development/interpreters/ruby/rubygems.nix +++ b/pkgs/development/interpreters/ruby/rubygems.nix @@ -1,10 +1,10 @@ args : with args; rec { - version = "1.8.25"; + version = "2.4.1"; src = fetchurl { url = "http://production.cf.rubygems.org/rubygems/${name}.tgz"; - sha256 = "1j0wiy829nsfrpdzr9xzs39jf1lga3f5b7773vxqfs3lz3fli4v4"; + sha256 = "0cpr6cx3h74ykpb0cp4p4xg7a8j0bhz3sk271jq69l4mm4zy4h4f"; }; buildInputs = [ruby makeWrapper]; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 14e607daa40..aaa8484584c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4045,7 +4045,19 @@ let ruby_2_0 = ruby_2_0_0; ruby_2_1 = ruby_2_1_3; - rubyLibs = recurseIntoAttrs (callPackage ../development/interpreters/ruby/libs.nix { }); + ruby18Libs = callPackage ../development/interpreters/ruby/gems.nix { + ruby = ruby18; + }; + + ruby19Libs = callPackage ../development/interpreters/ruby/gems.nix { + ruby = ruby19; + }; + + ruby2Libs = callPackage ../development/interpreters/ruby/gems.nix { + ruby = ruby2; + }; + + rubyLibs = ruby19Libs; rake = rubyLibs.rake; From cfff6e8c8241ad758100d87b1ac3c6df4f28eaa9 Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Thu, 7 Aug 2014 18:35:36 -0700 Subject: [PATCH 02/69] some improvements --- pkgs/development/interpreters/ruby/gem.nix | 2 +- pkgs/development/interpreters/ruby/gems.nix | 117 +++++++++++--------- pkgs/top-level/all-packages.nix | 17 +-- 3 files changed, 74 insertions(+), 62 deletions(-) diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index f90be459c32..d8173de2ecc 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -3,7 +3,7 @@ { name , namePrefix ? "ruby${ruby.majorVersion}" + "-" , buildInputs ? [] -, doCheck ? true +, doCheck ? false , doGitPrecheckHack ? false , meta ? {} , gemPath ? [] diff --git a/pkgs/development/interpreters/ruby/gems.nix b/pkgs/development/interpreters/ruby/gems.nix index 0b20a9206af..fa573a0ce95 100644 --- a/pkgs/development/interpreters/ruby/gems.nix +++ b/pkgs/development/interpreters/ruby/gems.nix @@ -1,15 +1,28 @@ -{ ruby, callPackage }: +# is a pretty good interface for calling rubygems +# +# since there are so many rubygems, and we don't want to manage them all, +# proposed design pattern is keep your gem dependencies in a local file +# (hopefully managed with nix-bundle) +# +# use rubyLibs.importGems to call the local file, which has access to all +# the stuff in here +# +# gems here are either super common (rspec) or require patches to work +# properly (libv8) + +{ ruby, callPackage, pkgs }: let - buildRubyGem = callPackage ./gem.nix { inherit ruby; }; -in rec { + buildRubyGem = callPackage ./gem.nix {}; +self = rec { inherit buildRubyGem; - builder = buildRubyGem { - name = "builder-3.2.2"; - sha256 = "14fii7ab8qszrvsvhz6z2z3i4dw0h41a62fjr2h1j8m41vbrmyv2"; - doCheck = false; - }; + # import an attrset full of gems, then override necessary gems + importGems = file: (callPackage file { inherit buildRubyGem; rubyLibs = self; }); + + ################################################################## + # stuff EVERYONE needs + ################################################################## bundler = buildRubyGem { name = "bundler-1.6.5"; @@ -18,42 +31,6 @@ in rec { checkPhase = ":"; }; - capistrano = buildRubyGem { - name = "capistrano-3.2.1"; - sha256 = "0jcx8jijbvl05pjd7jrzb1sf968vjzpvb190d1kfa968hfc92lm0"; - gemPath = [ colorize i18n net_scp net_ssh rake sshkit ]; - doCheck = false; - }; - - colorize = buildRubyGem { - name = "colorize-0.7.3"; - sha256 = "0hccxpn0gryhdpyymkr7fnv2khz051f5rpw4xyrp9dr53b7yv3v2"; - }; - - i18n = buildRubyGem { - name = "i18n-0.6.11"; - sha256 = "0fwjlgmgry2blf8zlxn9c555cf4a16p287l599kz5104ncjxlzdk"; - }; - - json = buildRubyGem { - name = "json-1.8.1"; - sha256 = "0002bsycvizvkmk1jyv8px1hskk6wrjfk4f7x5byi8gxm6zzn6wn"; - doCheck = false; - }; - - net_scp = buildRubyGem { - name = "net-scp-1.2.1"; - sha256 = "0b0jqrcsp4bbi4n4mzyf70cp2ysyp6x07j8k8cqgxnvb4i3a134j"; - gemPath = [ net_ssh ]; - doCheck = false; - }; - - net_ssh = buildRubyGem { - name = "net-ssh-2.9.1"; - sha256 = "1vscp4r58jisiigqc6d6752w19m1m6hmi3jkzmp3ydxai7h3jb2j"; - doCheck = false; - }; - rake = buildRubyGem { name = "rake-10.3.2"; sha256 = "0nvpkjrpsk8xxnij2wd1cdn6arja9q11sxx4aq4fz18bc6fss15m"; @@ -61,10 +38,50 @@ in rec { checkPhase = ":"; }; - sshkit = buildRubyGem { - name = "sshkit-1.5.1"; - sha256 = "0lyd77b43dh897lx8iqdm9284ara7076nahmlis33qkfjfs105dy"; - gemPath = [ bundler colorize net_scp net_ssh ]; - doGitPrecheckHack = true; + + ################################################################## + # common dependencies + ################################################################## + + diff_lcs = buildRubyGem { + name = "diff-lcs-1.2.5"; + sha256 = "1vf9civd41bnqi6brr5d9jifdw73j9khc6fkhfl1f8r9cpkdvlx1"; + doCheck = false; # check depends on rspec! }; -} + + rspec = rspec_3_0; + + rspec_3_0 = buildRubyGem { + name = "rspec-3.0.0"; + sha256 = "1x94vk8dlk57clqlyb741y5bsmidp8131wyrb1vh00hi5mdb5szy"; + gemPath = [ diff_lcs rspec_core rspec_expectations rspec_mocks rspec_support ]; + }; + + rspec_2_14 = buildRubyGem { + name = "rspec-2.14.1"; + sha256 = "134y4wzk1prninb5a0bhxgm30kqfzl8dg06af4js5ylnhv2wd7sg"; + }; + + rspec_core = buildRubyGem { + name = "rspec-core-3.0.3"; + sha256 = "0395m5rfpbh87wm3mx549zvm190gikpzyld0xhlr55qwzp6ny97m"; + gemPath = [ rspec_support ]; + }; + + rspec_expectations = buildRubyGem { + name = "rspec-expectations-3.0.3"; + sha256 = "1mzp3v5r7qy28q8x6dkdib9ymwrxxz81jiq9vfr94jxbmy8rkhn0"; + gemPath = [ diff_lcs rspec_support ]; + }; + + rspec_mocks = buildRubyGem { + name = "rspec-mocks-3.0.3"; + sha256 = "0svc5wq8k4w8iamj2r7xw4xwhfczcj09s0ps9wz1mmgy9cvn1lj6"; + gemPath = [ rspec_support ]; + }; + + rspec_support = buildRubyGem { + name = "rspec-support-3.0.3"; + sha256 = "06lxzc4i3cbkm3qc5sdqcg665cyq9hnmmy0qkn355vy4s4vch94l"; + }; +}; in self diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index aaa8484584c..2fdddc9e21a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4045,19 +4045,14 @@ let ruby_2_0 = ruby_2_0_0; ruby_2_1 = ruby_2_1_3; - ruby18Libs = callPackage ../development/interpreters/ruby/gems.nix { - ruby = ruby18; + rubyLibsWith = ruby: callPackage ../development/interpreters/ruby/gems.nix { + inherit ruby; }; - ruby19Libs = callPackage ../development/interpreters/ruby/gems.nix { - ruby = ruby19; - }; - - ruby2Libs = callPackage ../development/interpreters/ruby/gems.nix { - ruby = ruby2; - }; - - rubyLibs = ruby19Libs; + ruby18Libs = rubyLibsWith ruby18; + ruby19Libs = rubyLibsWith ruby19; + ruby2Libs = rubyLibsWith ruby2; + rubyLibs = recurseIntoAttrs ruby19Libs; rake = rubyLibs.rake; From 3026d8833daf8bfe7d5c0f7cea2453ebb8fc8dbb Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Thu, 7 Aug 2014 18:46:17 -0700 Subject: [PATCH 03/69] add libs to GEM_PATH --- pkgs/development/interpreters/ruby/gem.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index d8173de2ecc..c7256954a15 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -82,6 +82,12 @@ in ruby.stdenv.mkDerivation (attrs // { rm $out/${ruby.gemPath}/doc/*/*/created.rid || true rm $out/${ruby.gemPath}/gems/*/ext/*/mkmf.log || true + mkdir -p $out/nix-support + + cat > $out/nix-support/setup-hook < Date: Thu, 7 Aug 2014 18:53:17 -0700 Subject: [PATCH 04/69] stop using gross dependency resolution --- pkgs/development/interpreters/ruby/gem.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index c7256954a15..e07ae1ac0f0 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -61,14 +61,14 @@ in ruby.stdenv.mkDerivation (attrs // { ''; installPhase = '' - GEM_PATH="${depsPath}" GEM_HOME=$out/${ruby.gemPath} \ + 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 GEM_PATH : "$out/${ruby.gemPath}" \ --prefix RUBYLIB : "${rubygems}/lib" \ --set RUBYOPT rubygems \ $extraWrapperFlags ''${extraWrapperFlagsArray[@]} From c694425a0300e200f12aa490bf32bf209117f3c0 Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Thu, 7 Aug 2014 20:06:57 -0700 Subject: [PATCH 05/69] allow importGems to override cp args --- pkgs/development/interpreters/ruby/gems.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/development/interpreters/ruby/gems.nix b/pkgs/development/interpreters/ruby/gems.nix index fa573a0ce95..cd5ba0b3213 100644 --- a/pkgs/development/interpreters/ruby/gems.nix +++ b/pkgs/development/interpreters/ruby/gems.nix @@ -17,8 +17,9 @@ let self = rec { inherit buildRubyGem; - # import an attrset full of gems, then override necessary gems - importGems = file: (callPackage file { inherit buildRubyGem; rubyLibs = self; }); + # import an attrset full of gems, then override badly behaved ones + importGems = file: args: + (callPackage file ({ inherit buildRubyGem; rubyLibs = self; } // args)); ################################################################## # stuff EVERYONE needs From 1edaff1a2a7b789ce528d5b07f091f9ce2dbceab Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Fri, 8 Aug 2014 11:20:11 -0700 Subject: [PATCH 06/69] include patches --- pkgs/development/interpreters/ruby/gems.nix | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/ruby/gems.nix b/pkgs/development/interpreters/ruby/gems.nix index cd5ba0b3213..2ef43dbd658 100644 --- a/pkgs/development/interpreters/ruby/gems.nix +++ b/pkgs/development/interpreters/ruby/gems.nix @@ -14,12 +14,21 @@ let buildRubyGem = callPackage ./gem.nix {}; + patches = callPackage ./patches.nix { gems = self; }; + lib = ruby.stdenv.lib; self = rec { inherit buildRubyGem; # import an attrset full of gems, then override badly behaved ones importGems = file: args: - (callPackage file ({ inherit buildRubyGem; rubyLibs = self; } // args)); + let + builtGems = callPackage file ({ inherit buildRubyGem; rubyLibs = self; } // args); + in lib.mapAttrs (gem: deriv: + if patches ? "${gem}" + then lib.overrideDerivation deriv (oldAttrs: + if oldAttrs ? dontPatch && oldAttrs.dontPatch == 1 then {} + else patches."${gem}") + else deriv) builtGems; ################################################################## # stuff EVERYONE needs From 2dedbe6bbe65f0032d0bcc5eb85b4a6124ae75a8 Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Fri, 8 Aug 2014 19:09:28 -0700 Subject: [PATCH 07/69] correctly implement patching --- pkgs/development/interpreters/ruby/gems.nix | 15 ++++++++------- pkgs/development/interpreters/ruby/patches.nix | 4 ++++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/pkgs/development/interpreters/ruby/gems.nix b/pkgs/development/interpreters/ruby/gems.nix index 2ef43dbd658..db1bdc357b3 100644 --- a/pkgs/development/interpreters/ruby/gems.nix +++ b/pkgs/development/interpreters/ruby/gems.nix @@ -22,13 +22,14 @@ self = rec { # import an attrset full of gems, then override badly behaved ones importGems = file: args: let - builtGems = callPackage file ({ inherit buildRubyGem; rubyLibs = self; } // args); - in lib.mapAttrs (gem: deriv: - if patches ? "${gem}" - then lib.overrideDerivation deriv (oldAttrs: - if oldAttrs ? dontPatch && oldAttrs.dontPatch == 1 then {} - else patches."${gem}") - else deriv) builtGems; + preBuilt = callPackage file ({ inherit buildRubyGem; self = builtGems; } // args); + builtGems = self // (lib.mapAttrs (gem: deriv: + if patches ? "${gem}" + then lib.overrideDerivation deriv (oldAttrs: + if oldAttrs ? dontPatch && oldAttrs.dontPatch == 1 then {} + else patches."${gem}") + else deriv) preBuilt); + in builtGems; ################################################################## # stuff EVERYONE needs diff --git a/pkgs/development/interpreters/ruby/patches.nix b/pkgs/development/interpreters/ruby/patches.nix index 438aaf7ba54..4b9f42fb989 100644 --- a/pkgs/development/interpreters/ruby/patches.nix +++ b/pkgs/development/interpreters/ruby/patches.nix @@ -20,6 +20,10 @@ in extraWrapperFlags = "--prefix RUBYLIB : ."; }; + barber = { gemFlags = "--ignore-dependencies"; }; + ember_data_source = { gemFlags = "--ignore-dependencies"; }; + ember_rails = { gemFlags = "--ignore-dependencies"; }; + fakes3 = { postInstall = '' cd $out/${ruby.gemPath}/gems/* From 289b7e5068dadc10c667c23c71fb1ab631fa0682 Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Sat, 9 Aug 2014 12:55:31 -0700 Subject: [PATCH 08/69] further improvements to patches and build process --- pkgs/development/interpreters/ruby/gem.nix | 40 +++--- pkgs/development/interpreters/ruby/gems.nix | 2 +- .../development/interpreters/ruby/patches.nix | 117 ++++-------------- pkgs/development/libraries/v8/3.16.14.nix | 69 +++++++++++ pkgs/top-level/all-packages.nix | 4 + 5 files changed, 115 insertions(+), 117 deletions(-) create mode 100644 pkgs/development/libraries/v8/3.16.14.nix diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index e07ae1ac0f0..3e5057ef1d0 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -4,12 +4,10 @@ , namePrefix ? "ruby${ruby.majorVersion}" + "-" , buildInputs ? [] , doCheck ? false -, doGitPrecheckHack ? false +, dontBuild ? true , meta ? {} , gemPath ? [] , testTask ? "test" -, preCheck ? "" -, postCheck ? "" , ...} @ attrs: let @@ -32,35 +30,23 @@ in ruby.stdenv.mkDerivation (attrs // { unpackPhase = '' gem unpack $src --target=gem-build + cd gem-build/* ''; - dontBuild = true; - - preCheckGit = ruby.stdenv.lib.optionalString doGitPrecheckHack '' + buildPhase = '' + runHook preBuild ${git}/bin/git init ${git}/bin/git add . + if gem build *.gemspec; then + export src=*.gem + else + echo >&2 "gemspec missing, not rebuilding gem" + fi + runHook postBuild ''; - preCheck = '' - cd gem-build/* - OLD_PATH="$GEM_PATH" - export GEM_PATH="${depsPath}" - '' + preCheck; - - postCheck = '' - GEM_PATH="$OLD_PATH" - '' + postCheck; - - checkPhase = - if attrs ? checkPhase then attrs.checkPhase - else '' - runHook preCheckGit - runHook preCheck - test -f Rakefile && ${rake}/bin/rake ${testTask} -v - runHook postCheck - ''; - installPhase = '' + runHook preInstall GEM_HOME=$out/${ruby.gemPath} \ gem install -p http://nodtd.invalid \ --build-root / -n "$out/bin" "$src" $gemFlags -- $buildFlags @@ -85,7 +71,9 @@ in ruby.stdenv.mkDerivation (attrs // { mkdir -p $out/nix-support cat > $out/nix-support/setup-hook < $TMPDIR/g++ <> $out/nix-support/setup-hook < Date: Sat, 9 Aug 2014 18:01:40 -0700 Subject: [PATCH 09/69] more gem improvements --- pkgs/development/interpreters/ruby/gem.nix | 2 +- pkgs/development/interpreters/ruby/patches.nix | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index 3e5057ef1d0..bb0bc2e4863 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -54,7 +54,7 @@ in ruby.stdenv.mkDerivation (attrs // { for prog in $out/bin/*; do wrapProgram "$prog" \ - --prefix GEM_PATH : "$out/${ruby.gemPath}" \ + --prefix GEM_PATH : "$out/${ruby.gemPath}:$GEM_PATH" \ --prefix RUBYLIB : "${rubygems}/lib" \ --set RUBYOPT rubygems \ $extraWrapperFlags ''${extraWrapperFlagsArray[@]} diff --git a/pkgs/development/interpreters/ruby/patches.nix b/pkgs/development/interpreters/ruby/patches.nix index 3a0a330e6d4..cff21c900f5 100644 --- a/pkgs/development/interpreters/ruby/patches.nix +++ b/pkgs/development/interpreters/ruby/patches.nix @@ -43,7 +43,7 @@ in postInstall = stdenv.lib.optionalString stdenv.isDarwin '' cat >> $out/nix-support/setup-hook < Date: Mon, 11 Aug 2014 20:09:47 -0700 Subject: [PATCH 10/69] terminal-notifier --- pkgs/development/interpreters/ruby/gems.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkgs/development/interpreters/ruby/gems.nix b/pkgs/development/interpreters/ruby/gems.nix index 76c43e53567..05b03a1237e 100644 --- a/pkgs/development/interpreters/ruby/gems.nix +++ b/pkgs/development/interpreters/ruby/gems.nix @@ -95,4 +95,9 @@ self = rec { name = "rspec-support-3.0.3"; sha256 = "06lxzc4i3cbkm3qc5sdqcg665cyq9hnmmy0qkn355vy4s4vch94l"; }; + + terminal_notifier = buildRubyGem { + name = "terminal-notifier-1.6.1"; + sha256 = "0j14sblviiypzc9vb508ldd78winba4vhnm9nhg3zpq07p3528g7"; + }; }; in self From 763975d2cf381ff878bef7c5f3fbb2a231dbdf0e Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Tue, 12 Aug 2014 08:33:43 -0700 Subject: [PATCH 11/69] ruby-dotenv --- pkgs/development/interpreters/ruby/gems.nix | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkgs/development/interpreters/ruby/gems.nix b/pkgs/development/interpreters/ruby/gems.nix index 05b03a1237e..3acf0cc6503 100644 --- a/pkgs/development/interpreters/ruby/gems.nix +++ b/pkgs/development/interpreters/ruby/gems.nix @@ -100,4 +100,15 @@ self = rec { name = "terminal-notifier-1.6.1"; sha256 = "0j14sblviiypzc9vb508ldd78winba4vhnm9nhg3zpq07p3528g7"; }; + + dotenv_deployment = buildRubyGem { + name = "dotenv-deployment-0.0.2"; + sha256 = "1ad66jq9a09qq1js8wsyil97018s7y6x0vzji0dy34gh65sbjz8c"; + }; + + dotenv = buildRubyGem { + name = "dotenv-0.11.1"; + gemPath = [ dotenv_deployment ]; + sha256 = "09z0y0d6bks7i0sqvd8szfqj9i1kkj01anzly7shi83b3gxhrq9m"; + }; }; in self From 081343f099d3efabe8ed41a9d10e4ba7319f979e Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Wed, 13 Aug 2014 12:13:27 -0700 Subject: [PATCH 12/69] gem build updates --- pkgs/development/interpreters/ruby/gem.nix | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index bb0bc2e4863..e226d5cf9e0 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -29,14 +29,21 @@ in ruby.stdenv.mkDerivation (attrs // { }; unpackPhase = '' - gem unpack $src --target=gem-build - cd gem-build/* + if test -d $src; then + cd $src + else + gem unpack $src --target=gem-build + cd gem-build/* + fi ''; buildPhase = '' runHook preBuild - ${git}/bin/git init - ${git}/bin/git add . + test -d .git || { + chmod 755 . + ${git}/bin/git init + ${git}/bin/git add . + } if gem build *.gemspec; then export src=*.gem else From f14f73da76ca4bb2b29b680012514155ef27b553 Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Wed, 13 Aug 2014 22:38:58 -0700 Subject: [PATCH 13/69] ruby updates --- pkgs/development/interpreters/ruby/gems.nix | 2 +- pkgs/top-level/all-packages.nix | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/pkgs/development/interpreters/ruby/gems.nix b/pkgs/development/interpreters/ruby/gems.nix index 3acf0cc6503..7b9122080b5 100644 --- a/pkgs/development/interpreters/ruby/gems.nix +++ b/pkgs/development/interpreters/ruby/gems.nix @@ -13,7 +13,7 @@ { ruby, callPackage, pkgs }: let - buildRubyGem = callPackage ./gem.nix {}; + buildRubyGem = callPackage ./gem.nix { inherit ruby; }; lib = ruby.stdenv.lib; self = rec { inherit buildRubyGem; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 7da37f7226d..90ce4bf6555 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4045,14 +4045,19 @@ let ruby_2_0 = ruby_2_0_0; ruby_2_1 = ruby_2_1_3; - rubyLibsWith = ruby: callPackage ../development/interpreters/ruby/gems.nix { - inherit ruby; + rubyLibsWith = myruby: callPackage ../development/interpreters/ruby/gems.nix { + ruby = myruby; }; - ruby18Libs = rubyLibsWith ruby18; - ruby19Libs = rubyLibsWith ruby19; - ruby2Libs = rubyLibsWith ruby2; - rubyLibs = recurseIntoAttrs ruby19Libs; + rubyLibs_1_8_7 = rubyLibsWith ruby_1_8_7; + rubyLibs_1_9_3 = rubyLibsWith ruby_1_9_3; + rubyLibs_2_0_0 = rubyLibsWith ruby_2_0_0; + rubyLibs_2_1_0 = rubyLibsWith ruby_2_1_0; + rubyLibs_2_1_1 = rubyLibsWith ruby_2_1_1; + rubyLibs_2_1_2 = rubyLibsWith ruby_2_1_2; + rubyLibs_2_1_3 = rubyLibsWith ruby_2_1_3; + + rubyLibs = recurseIntoAttrs rubyLibs_1_9_3; rake = rubyLibs.rake; From 05238cd353d6b48aa02bfd59bb5a90299bff2a98 Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Thu, 14 Aug 2014 17:55:10 -0700 Subject: [PATCH 14/69] call patches with the right nix --- pkgs/development/interpreters/ruby/gems.nix | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/ruby/gems.nix b/pkgs/development/interpreters/ruby/gems.nix index 7b9122080b5..59b477b505e 100644 --- a/pkgs/development/interpreters/ruby/gems.nix +++ b/pkgs/development/interpreters/ruby/gems.nix @@ -21,7 +21,7 @@ self = rec { # import an attrset full of gems, then override badly behaved ones importGems = file: args: let - patches = callPackage ./patches.nix { gems = builtGems; }; + patches = callPackage ./patches.nix { inherit ruby; gems = builtGems; }; preBuilt = callPackage file ({ inherit buildRubyGem; self = builtGems; } // args); builtGems = self // (lib.mapAttrs (gem: deriv: if patches ? "${gem}" @@ -60,6 +60,11 @@ self = rec { doCheck = false; # check depends on rspec! }; + json = buildRubyGem { + name = "json-1.8.1"; + sha256 = "0002bsycvizvkmk1jyv8px1hskk6wrjfk4f7x5byi8gxm6zzn6wn"; + }; + rspec = rspec_3_0; rspec_3_0 = buildRubyGem { From 9c8c4c8655bd005b56643ae58dcd86eab1f9e424 Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Mon, 18 Aug 2014 14:53:41 -0700 Subject: [PATCH 15/69] reorder gem phases --- pkgs/development/interpreters/ruby/gem.nix | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index e226d5cf9e0..b3b18e7bbe0 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -3,7 +3,7 @@ { name , namePrefix ? "ruby${ruby.majorVersion}" + "-" , buildInputs ? [] -, doCheck ? false +, doCheck ? false # TODO: fix this , dontBuild ? true , meta ? {} , gemPath ? [] @@ -37,19 +37,10 @@ in ruby.stdenv.mkDerivation (attrs // { fi ''; - buildPhase = '' - runHook preBuild - test -d .git || { - chmod 755 . - ${git}/bin/git init - ${git}/bin/git add . - } - if gem build *.gemspec; then - export src=*.gem - else - echo >&2 "gemspec missing, not rebuilding gem" - fi - runHook postBuild + checkPhase = '' + runHook preCheck + ${attrs.checkPhase or "${rake}/bin/rake spec"} + runHook postCheck ''; installPhase = '' From 4a5e725a00103dc326c8913ae638b81f1e72ba92 Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Mon, 18 Aug 2014 14:56:00 -0700 Subject: [PATCH 16/69] patch logic --- pkgs/development/interpreters/ruby/gems.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/ruby/gems.nix b/pkgs/development/interpreters/ruby/gems.nix index 59b477b505e..733beaa534f 100644 --- a/pkgs/development/interpreters/ruby/gems.nix +++ b/pkgs/development/interpreters/ruby/gems.nix @@ -26,7 +26,7 @@ self = rec { builtGems = self // (lib.mapAttrs (gem: deriv: if patches ? "${gem}" then lib.overrideDerivation deriv (oldAttrs: - if oldAttrs ? dontPatch && oldAttrs.dontPatch == 1 then {} + if oldAttrs ? dontPatch && !(oldAttrs.dontPatch == false || oldAttrs.dontPatch == null) then {} else patches."${gem}") else deriv) preBuilt); in builtGems; From 020b204767bb099702b5f27e263b37a2ecc16f93 Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Mon, 18 Aug 2014 14:56:34 -0700 Subject: [PATCH 17/69] remove depsPath --- pkgs/development/interpreters/ruby/gem.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index b3b18e7bbe0..dc6f7419a21 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -12,7 +12,6 @@ let rubygems = rubygemsFun ruby; - depsPath = lib.concatStringsSep ":" (map (g: "${g}/${ruby.gemPath}") gemPath); in ruby.stdenv.mkDerivation (attrs // { inherit doCheck; From 8c072a33a162405ed91839f00f1e427f62aa1309 Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Mon, 18 Aug 2014 14:58:18 -0700 Subject: [PATCH 18/69] update patch comments --- pkgs/development/interpreters/ruby/gems.nix | 3 --- pkgs/development/interpreters/ruby/patches.nix | 5 +++++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pkgs/development/interpreters/ruby/gems.nix b/pkgs/development/interpreters/ruby/gems.nix index 733beaa534f..bf37fdeb70d 100644 --- a/pkgs/development/interpreters/ruby/gems.nix +++ b/pkgs/development/interpreters/ruby/gems.nix @@ -6,9 +6,6 @@ # # use rubyLibs.importGems to call the local file, which has access to all # the stuff in here -# -# gems here are either super common (rspec) or require patches to work -# properly (libv8) { ruby, callPackage, pkgs }: diff --git a/pkgs/development/interpreters/ruby/patches.nix b/pkgs/development/interpreters/ruby/patches.nix index cff21c900f5..763c61fa55b 100644 --- a/pkgs/development/interpreters/ruby/patches.nix +++ b/pkgs/development/interpreters/ruby/patches.nix @@ -1,3 +1,8 @@ +# build-time overrides for some gems +# +# gems in here generally involve native extensions; there's no way to tell +# based on the gemfile + { fetchurl, writeScript, ruby, ncurses, sqlite, libxml2, libxslt, libffi , zlib, libuuid, gems, jdk, python, stdenv, libiconvOrEmpty, imagemagick , gnumake, pkgconfig, which, postgresql, v8_3_16_14, clang }: From 820ae58ba5d6c12b3a3be2de2ac1fa92c60ee262 Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Sat, 30 Aug 2014 22:51:53 -0700 Subject: [PATCH 19/69] inherit the correct rake in buildRubyGem this avoids accidentally depending on Ruby 1.9.3's rake for *every* gem --- pkgs/development/interpreters/ruby/gems.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkgs/development/interpreters/ruby/gems.nix b/pkgs/development/interpreters/ruby/gems.nix index bf37fdeb70d..3eed57d7d5e 100644 --- a/pkgs/development/interpreters/ruby/gems.nix +++ b/pkgs/development/interpreters/ruby/gems.nix @@ -10,10 +10,9 @@ { ruby, callPackage, pkgs }: let - buildRubyGem = callPackage ./gem.nix { inherit ruby; }; lib = ruby.stdenv.lib; self = rec { - inherit buildRubyGem; + buildRubyGem = callPackage ./gem.nix { inherit ruby rake; }; # import an attrset full of gems, then override badly behaved ones importGems = file: args: From e5783d017d2db818c970bd4affe9d121b1370123 Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Sat, 30 Aug 2014 23:07:35 -0700 Subject: [PATCH 20/69] don't forget: patch gems in gems.nix too! --- pkgs/development/interpreters/ruby/gems.nix | 24 +++++++++++++------ .../development/interpreters/ruby/patches.nix | 2 +- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/pkgs/development/interpreters/ruby/gems.nix b/pkgs/development/interpreters/ruby/gems.nix index 3eed57d7d5e..f9ebab243f0 100644 --- a/pkgs/development/interpreters/ruby/gems.nix +++ b/pkgs/development/interpreters/ruby/gems.nix @@ -11,6 +11,13 @@ let lib = ruby.stdenv.lib; + patchGemsWith = gems: patches: + lib.mapAttrs (gem: drv: + if patches ? "${gem}" + then lib.overrideDerivation drv (oldAttrs: + if oldAttrs ? dontPatch && !(oldAttrs.dontPatch == false || oldAttrs.dontPatch == null) then {} + else patches."${gem}") + else drv) gems; self = rec { buildRubyGem = callPackage ./gem.nix { inherit ruby rake; }; @@ -19,12 +26,7 @@ self = rec { let patches = callPackage ./patches.nix { inherit ruby; gems = builtGems; }; preBuilt = callPackage file ({ inherit buildRubyGem; self = builtGems; } // args); - builtGems = self // (lib.mapAttrs (gem: deriv: - if patches ? "${gem}" - then lib.overrideDerivation deriv (oldAttrs: - if oldAttrs ? dontPatch && !(oldAttrs.dontPatch == false || oldAttrs.dontPatch == null) then {} - else patches."${gem}") - else deriv) preBuilt); + builtGems = self // patchGemsWith preBuilt patches; in builtGems; ################################################################## @@ -112,4 +114,12 @@ self = rec { gemPath = [ dotenv_deployment ]; sha256 = "09z0y0d6bks7i0sqvd8szfqj9i1kkj01anzly7shi83b3gxhrq9m"; }; -}; in self + + pg = buildRubyGem { + name = "pg-0.17.1"; + sha256 = "19hhlq5cp0cgm9b8daxjn8rkk8fq7bxxv1gd43l2hk0qgy7kx4z7"; + }; +}; + boringPatches = callPackage ./patches.nix { inherit ruby; gems = self; }; + patchedSelf = patchGemsWith self boringPatches; +in patchedSelf diff --git a/pkgs/development/interpreters/ruby/patches.nix b/pkgs/development/interpreters/ruby/patches.nix index 763c61fa55b..5fb5432834f 100644 --- a/pkgs/development/interpreters/ruby/patches.nix +++ b/pkgs/development/interpreters/ruby/patches.nix @@ -27,7 +27,7 @@ in rbtrace = { dontBuild = 1; }; method_source = { dontBuild = 1; }; - pg = { buildInputs = [ postgresql ]; }; + pg = { buildFlags = ["--with-pg-config=${postgresql}/bin/pg_config"]; }; nokogiri = { buildInputs = [ libxml2 ]; From efa528a415a268fee90e1d1fae285f302b952f90 Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Sat, 30 Aug 2014 23:12:00 -0700 Subject: [PATCH 21/69] also recursively patch "self" --- pkgs/development/interpreters/ruby/gems.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/ruby/gems.nix b/pkgs/development/interpreters/ruby/gems.nix index f9ebab243f0..6350ae5e6db 100644 --- a/pkgs/development/interpreters/ruby/gems.nix +++ b/pkgs/development/interpreters/ruby/gems.nix @@ -120,6 +120,9 @@ self = rec { sha256 = "19hhlq5cp0cgm9b8daxjn8rkk8fq7bxxv1gd43l2hk0qgy7kx4z7"; }; }; - boringPatches = callPackage ./patches.nix { inherit ruby; gems = self; }; + # TODO: refactor mutual recursion here + # it looks a lot like the importGems function above, but it's too late at night + # to write a more generic version + boringPatches = callPackage ./patches.nix { inherit ruby; gems = patchedSelf; }; patchedSelf = patchGemsWith self boringPatches; in patchedSelf From 0ee5695bd46982cf5a278894617106cb135a692d Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Sat, 30 Aug 2014 23:47:59 -0700 Subject: [PATCH 22/69] properly fix patching --- pkgs/development/interpreters/ruby/gems.nix | 37 ++++++++++++++++--- .../development/interpreters/ruby/patches.nix | 12 ++---- 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/pkgs/development/interpreters/ruby/gems.nix b/pkgs/development/interpreters/ruby/gems.nix index 6350ae5e6db..68064a43279 100644 --- a/pkgs/development/interpreters/ruby/gems.nix +++ b/pkgs/development/interpreters/ruby/gems.nix @@ -18,13 +18,13 @@ let if oldAttrs ? dontPatch && !(oldAttrs.dontPatch == false || oldAttrs.dontPatch == null) then {} else patches."${gem}") else drv) gems; -self = rec { +selfPre = rec { buildRubyGem = callPackage ./gem.nix { inherit ruby rake; }; # import an attrset full of gems, then override badly behaved ones importGems = file: args: let - patches = callPackage ./patches.nix { inherit ruby; gems = builtGems; }; + patches = callPackage ./patches.nix { inherit ruby; self = builtGems; }; preBuilt = callPackage file ({ inherit buildRubyGem; self = builtGems; } // args); builtGems = self // patchGemsWith preBuilt patches; in builtGems; @@ -115,14 +115,41 @@ self = rec { sha256 = "09z0y0d6bks7i0sqvd8szfqj9i1kkj01anzly7shi83b3gxhrq9m"; }; + libv8 = buildRubyGem { + name = "libv8-3.16.14.3"; + sha256 = "1arjjbmr9zxkyv6pdrihsz1p5cadzmx8308vgfvrhm380ccgridm"; + }; + + mini_portile = buildRubyGem { + name = "mini_portile-0.6.0"; + sha256 = "09kcn4g63xrdirgwxgjikqg976rr723bkc9bxfr29pk22cj3wavn"; + }; + + nokogiri = buildRubyGem { + name = "nokogiri-1.6.3.1"; + sha256 = "11958hlfd8i3i9y0wk1b6ck9x0j95l4zdbbixmdnnh1r8ijilxli"; + gemPath = [ mini_portile ]; + }; + pg = buildRubyGem { name = "pg-0.17.1"; sha256 = "19hhlq5cp0cgm9b8daxjn8rkk8fq7bxxv1gd43l2hk0qgy7kx4z7"; }; + + ref = buildRubyGem { + name = "ref-1.0.5"; + sha256 = "19qgpsfszwc2sfh6wixgky5agn831qq8ap854i1jqqhy1zsci3la"; + }; + + therubyracer = buildRubyGem { + name = "therubyracer-0.12.1"; + sha256 = "106fqimqyaalh7p6czbl5m2j69z8gv7cm10mjb8bbb2p2vlmqmi6"; + gemPath = [ self.libv8 self.ref ]; + }; }; # TODO: refactor mutual recursion here # it looks a lot like the importGems function above, but it's too late at night # to write a more generic version - boringPatches = callPackage ./patches.nix { inherit ruby; gems = patchedSelf; }; - patchedSelf = patchGemsWith self boringPatches; -in patchedSelf + boringPatches = callPackage ./patches.nix { inherit ruby self; }; + self = patchGemsWith selfPre boringPatches; +in self diff --git a/pkgs/development/interpreters/ruby/patches.nix b/pkgs/development/interpreters/ruby/patches.nix index 5fb5432834f..ff0a9ab394c 100644 --- a/pkgs/development/interpreters/ruby/patches.nix +++ b/pkgs/development/interpreters/ruby/patches.nix @@ -3,9 +3,8 @@ # gems in here generally involve native extensions; there's no way to tell # based on the gemfile -{ fetchurl, writeScript, ruby, ncurses, sqlite, libxml2, libxslt, libffi -, zlib, libuuid, gems, jdk, python, stdenv, libiconvOrEmpty, imagemagick -, gnumake, pkgconfig, which, postgresql, v8_3_16_14, clang }: +{ libxml2, libxslt, postgresql, python, ruby, self, v8_3_16_14, which, writeScript +, stdenv }: let v8 = v8_3_16_14; @@ -39,11 +38,8 @@ in therubyracer = { preBuild = '' - addToSearchPath RUBYLIB "${gems.libv8}/${ruby.gemPath}/gems/libv8-3.16.14.3/lib" - addToSearchPath RUBYLIB "${gems.libv8}/${ruby.gemPath}/gems/libv8-3.16.14.3/ext" - ln -s ${clang}/bin/clang $TMPDIR/gcc - ln -s ${clang}/bin/clang++ $TMPDIR/g++ - export PATH=$TMPDIR:$PATH + addToSearchPath RUBYLIB "${self.libv8}/${ruby.gemPath}/gems/libv8-3.16.14.3/lib" + addToSearchPath RUBYLIB "${self.libv8}/${ruby.gemPath}/gems/libv8-3.16.14.3/ext" ''; postInstall = stdenv.lib.optionalString stdenv.isDarwin '' From c05e0602cacdfd3974ae50524964abc2b4e8a1c7 Mon Sep 17 00:00:00 2001 From: Joel Taylor Date: Sun, 31 Aug 2014 00:04:42 -0700 Subject: [PATCH 23/69] fix self refs --- pkgs/development/interpreters/ruby/gems.nix | 17 ++++++++++------- pkgs/development/libraries/v8/3.16.14.nix | 5 ++--- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/pkgs/development/interpreters/ruby/gems.nix b/pkgs/development/interpreters/ruby/gems.nix index 68064a43279..4ecfbdbc374 100644 --- a/pkgs/development/interpreters/ruby/gems.nix +++ b/pkgs/development/interpreters/ruby/gems.nix @@ -43,7 +43,7 @@ selfPre = rec { rake = buildRubyGem { name = "rake-10.3.2"; sha256 = "0nvpkjrpsk8xxnij2wd1cdn6arja9q11sxx4aq4fz18bc6fss15m"; - gemPath = [ bundler ]; + gemPath = [ self.bundler ]; checkPhase = ":"; }; @@ -68,7 +68,10 @@ selfPre = rec { rspec_3_0 = buildRubyGem { name = "rspec-3.0.0"; sha256 = "1x94vk8dlk57clqlyb741y5bsmidp8131wyrb1vh00hi5mdb5szy"; - gemPath = [ diff_lcs rspec_core rspec_expectations rspec_mocks rspec_support ]; + gemPath = [ + self.diff_lcs self.rspec_core self.rspec_expectations self.rspec_mocks + self.rspec_support + ]; }; rspec_2_14 = buildRubyGem { @@ -79,19 +82,19 @@ selfPre = rec { rspec_core = buildRubyGem { name = "rspec-core-3.0.3"; sha256 = "0395m5rfpbh87wm3mx549zvm190gikpzyld0xhlr55qwzp6ny97m"; - gemPath = [ rspec_support ]; + gemPath = [ self.rspec_support ]; }; rspec_expectations = buildRubyGem { name = "rspec-expectations-3.0.3"; sha256 = "1mzp3v5r7qy28q8x6dkdib9ymwrxxz81jiq9vfr94jxbmy8rkhn0"; - gemPath = [ diff_lcs rspec_support ]; + gemPath = [ self.diff_lcs self.rspec_support ]; }; rspec_mocks = buildRubyGem { name = "rspec-mocks-3.0.3"; sha256 = "0svc5wq8k4w8iamj2r7xw4xwhfczcj09s0ps9wz1mmgy9cvn1lj6"; - gemPath = [ rspec_support ]; + gemPath = [ self.rspec_support ]; }; rspec_support = buildRubyGem { @@ -111,7 +114,7 @@ selfPre = rec { dotenv = buildRubyGem { name = "dotenv-0.11.1"; - gemPath = [ dotenv_deployment ]; + gemPath = [ self.dotenv_deployment ]; sha256 = "09z0y0d6bks7i0sqvd8szfqj9i1kkj01anzly7shi83b3gxhrq9m"; }; @@ -128,7 +131,7 @@ selfPre = rec { nokogiri = buildRubyGem { name = "nokogiri-1.6.3.1"; sha256 = "11958hlfd8i3i9y0wk1b6ck9x0j95l4zdbbixmdnnh1r8ijilxli"; - gemPath = [ mini_portile ]; + gemPath = [ self.mini_portile ]; }; pg = buildRubyGem { diff --git a/pkgs/development/libraries/v8/3.16.14.nix b/pkgs/development/libraries/v8/3.16.14.nix index 436df768eb3..b1b8474ab25 100644 --- a/pkgs/development/libraries/v8/3.16.14.nix +++ b/pkgs/development/libraries/v8/3.16.14.nix @@ -38,7 +38,6 @@ stdenv.mkDerivation rec { buildInputs = [ readline python icu ]; buildFlags = [ - "LINK=g++" "-C out" "builddir=$(CURDIR)/Release" "BUILDTYPE=Release" @@ -57,8 +56,8 @@ stdenv.mkDerivation rec { ''; postFixup = if stdenv.isDarwin then '' - install_name_tool -change /usr/local/lib/libv8.dylib $out/lib/libv8.dylib -change /usr/lib/libgcc_s.1.dylib ${stdenv.gcc.gcc}/lib/libgcc_s.1.dylib $out/bin/d8 - install_name_tool -id $out/lib/libv8.dylib -change /usr/lib/libgcc_s.1.dylib ${stdenv.gcc.gcc}/lib/libgcc_s.1.dylib $out/lib/libv8.dylib + install_name_tool -change /usr/local/lib/libv8.dylib $out/lib/libv8.dylib $out/bin/d8 + install_name_tool -id $out/lib/libv8.dylib $out/lib/libv8.dylib '' else null; meta = with stdenv.lib; { From 11903c4c109a986b953724ee6d44226f8af84357 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Sun, 26 Oct 2014 18:59:37 +0000 Subject: [PATCH 24/69] ruby: expose RUBY_ENGINE, include teeny version in paths --- pkgs/development/interpreters/ruby/ruby-1.8.7.nix | 5 +++-- pkgs/development/interpreters/ruby/ruby-1.9.3.nix | 5 +++-- pkgs/development/interpreters/ruby/ruby-2.0.0.nix | 5 +++-- pkgs/development/interpreters/ruby/ruby-2.1.0.nix | 5 +++-- pkgs/development/interpreters/ruby/ruby-2.1.1.nix | 5 +++-- pkgs/development/interpreters/ruby/ruby-2.1.2.nix | 5 +++-- pkgs/development/interpreters/ruby/ruby-2.1.3.nix | 5 +++-- 7 files changed, 21 insertions(+), 14 deletions(-) diff --git a/pkgs/development/interpreters/ruby/ruby-1.8.7.nix b/pkgs/development/interpreters/ruby/ruby-1.8.7.nix index 9b43368c617..c4fc52279b6 100644 --- a/pkgs/development/interpreters/ruby/ruby-1.8.7.nix +++ b/pkgs/development/interpreters/ruby/ruby-1.8.7.nix @@ -88,7 +88,8 @@ stdenv.mkDerivation rec { minorVersion = "8"; teenyVersion = "7"; patchLevel = "374"; - libPath = "lib/ruby/${majorVersion}.${minorVersion}"; - gemPath = "lib/ruby/gems/${majorVersion}.${minorVersion}"; + rubyEngine = "ruby"; + libPath = "lib/${rubyEngine}/${majorVersion}.${minorVersion}.${teenyVersion}"; + gemPath = "lib/${rubyEngine}/gems/${majorVersion}.${minorVersion}.${teenyVersion}"; }; } diff --git a/pkgs/development/interpreters/ruby/ruby-1.9.3.nix b/pkgs/development/interpreters/ruby/ruby-1.9.3.nix index 77880870dd9..55c7ef6675e 100644 --- a/pkgs/development/interpreters/ruby/ruby-1.9.3.nix +++ b/pkgs/development/interpreters/ruby/ruby-1.9.3.nix @@ -112,7 +112,8 @@ stdenv.mkDerivation rec { minorVersion = "9"; teenyVersion = "3"; patchLevel = "547"; - libPath = "lib/ruby/${majorVersion}.${minorVersion}"; - gemPath = "lib/ruby/gems/${majorVersion}.${minorVersion}"; + rubyEngine = "ruby"; + libPath = "lib/${rubyEngine}/${majorVersion}.${minorVersion}.${teenyVersion}"; + gemPath = "lib/${rubyEngine}/gems/${majorVersion}.${minorVersion}.${teenyVersion}"; }; } diff --git a/pkgs/development/interpreters/ruby/ruby-2.0.0.nix b/pkgs/development/interpreters/ruby/ruby-2.0.0.nix index 4c3344f7672..ddad429cb5c 100644 --- a/pkgs/development/interpreters/ruby/ruby-2.0.0.nix +++ b/pkgs/development/interpreters/ruby/ruby-2.0.0.nix @@ -97,7 +97,8 @@ stdenv.mkDerivation rec { minorVersion = "0"; teenyVersion = "0"; patchLevel = "481"; - libPath = "lib/ruby/${majorVersion}.${minorVersion}"; - gemPath = "lib/ruby/gems/${majorVersion}.${minorVersion}"; + rubyEngine = "ruby"; + libPath = "lib/${rubyEngine}/${majorVersion}.${minorVersion}.${teenyVersion}"; + gemPath = "lib/${rubyEngine}/gems/${majorVersion}.${minorVersion}.${teenyVersion}"; }; } diff --git a/pkgs/development/interpreters/ruby/ruby-2.1.0.nix b/pkgs/development/interpreters/ruby/ruby-2.1.0.nix index afe4cbef79d..178ebdf17be 100644 --- a/pkgs/development/interpreters/ruby/ruby-2.1.0.nix +++ b/pkgs/development/interpreters/ruby/ruby-2.1.0.nix @@ -112,7 +112,8 @@ stdenv.mkDerivation rec { minorVersion = "1"; teenyVersion = "0"; patchLevel = "0"; - libPath = "lib/ruby/${majorVersion}.${minorVersion}"; - gemPath = "lib/ruby/gems/${majorVersion}.${minorVersion}"; + rubyEngine = "ruby"; + libPath = "lib/${rubyEngine}/${majorVersion}.${minorVersion}.${teenyVersion}"; + gemPath = "lib/${rubyEngine}/gems/${majorVersion}.${minorVersion}.${teenyVersion}"; }; } diff --git a/pkgs/development/interpreters/ruby/ruby-2.1.1.nix b/pkgs/development/interpreters/ruby/ruby-2.1.1.nix index d87526b1570..27628a2cd7e 100644 --- a/pkgs/development/interpreters/ruby/ruby-2.1.1.nix +++ b/pkgs/development/interpreters/ruby/ruby-2.1.1.nix @@ -111,7 +111,8 @@ stdenv.mkDerivation rec { minorVersion = "1"; teenyVersion = "1"; patchLevel = "0"; - libPath = "lib/ruby/${majorVersion}.${minorVersion}"; - gemPath = "lib/ruby/gems/${majorVersion}.${minorVersion}"; + rubyEngine = "ruby"; + libPath = "lib/${rubyEngine}/${majorVersion}.${minorVersion}.${teenyVersion}"; + gemPath = "lib/${rubyEngine}/gems/${majorVersion}.${minorVersion}.${teenyVersion}"; }; } diff --git a/pkgs/development/interpreters/ruby/ruby-2.1.2.nix b/pkgs/development/interpreters/ruby/ruby-2.1.2.nix index e2ee74fac2d..0de24a9df03 100644 --- a/pkgs/development/interpreters/ruby/ruby-2.1.2.nix +++ b/pkgs/development/interpreters/ruby/ruby-2.1.2.nix @@ -110,7 +110,8 @@ stdenv.mkDerivation rec { minorVersion = "1"; teenyVersion = "2"; patchLevel = "353"; - libPath = "lib/ruby/${majorVersion}.${minorVersion}"; - gemPath = "lib/ruby/gems/${majorVersion}.${minorVersion}"; + rubyEngine = "ruby"; + libPath = "lib/${rubyEngine}/${majorVersion}.${minorVersion}.${teenyVersion}"; + gemPath = "lib/${rubyEngine}/gems/${majorVersion}.${minorVersion}.${teenyVersion}"; }; } diff --git a/pkgs/development/interpreters/ruby/ruby-2.1.3.nix b/pkgs/development/interpreters/ruby/ruby-2.1.3.nix index 0f8b2512322..04882a58bd4 100644 --- a/pkgs/development/interpreters/ruby/ruby-2.1.3.nix +++ b/pkgs/development/interpreters/ruby/ruby-2.1.3.nix @@ -108,7 +108,8 @@ stdenv.mkDerivation rec { minorVersion = "1"; teenyVersion = "3"; patchLevel = "0"; - libPath = "lib/ruby/${majorVersion}.${minorVersion}"; - gemPath = "lib/ruby/gems/${majorVersion}.${minorVersion}"; + rubyEngine = "ruby"; + libPath = "lib/${rubyEngine}/${majorVersion}.${minorVersion}.${teenyVersion}"; + gemPath = "lib/${rubyEngine}/gems/${majorVersion}.${minorVersion}.${teenyVersion}"; }; } From 6863853879c9f8bb61ade5c0761cb7dc394f655f Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Sun, 26 Oct 2014 20:13:10 +0000 Subject: [PATCH 25/69] fixup gem install flags --- pkgs/development/interpreters/ruby/gem.nix | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index dc6f7419a21..ed898b65400 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -45,8 +45,16 @@ in ruby.stdenv.mkDerivation (attrs // { installPhase = '' runHook preInstall GEM_HOME=$out/${ruby.gemPath} \ - gem install -p http://nodtd.invalid \ - --build-root / -n "$out/bin" "$src" $gemFlags -- $buildFlags + gem install \ + --local \ + --force \ + --http-proxy "http://nodtd.invalid" \ + --ignore-dependencies \ + --build-root "/" \ + --bindir "$out/bin" \ + --backtrace \ + $src $gemFlags -- $buildFlags + rm -frv $out/${ruby.gemPath}/cache # don't keep the .gem file here for prog in $out/bin/*; do From 3e499b7b657c6063bdaa7f77bd706acefcdc0a36 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Sun, 26 Oct 2014 20:13:38 +0000 Subject: [PATCH 26/69] silence rm failures --- pkgs/development/interpreters/ruby/gem.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index ed898b65400..dcef9ab592f 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -70,8 +70,8 @@ in ruby.stdenv.mkDerivation (attrs // { 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 + rm -f $out/${ruby.gemPath}/doc/*/*/created.rid || true + rm -f $out/${ruby.gemPath}/gems/*/ext/*/mkmf.log || true mkdir -p $out/nix-support From c786da0569178100d45c03bd5e09de0d4e4199ca Mon Sep 17 00:00:00 2001 From: Alexander Flatter Date: Sun, 31 Aug 2014 19:32:34 +0200 Subject: [PATCH 27/69] importGems now reads attrsets instead of derivations --- pkgs/development/interpreters/ruby/fixes.nix | 94 +++++++++ pkgs/development/interpreters/ruby/gem.nix | 18 +- pkgs/development/interpreters/ruby/gems.nix | 183 ++++-------------- .../development/interpreters/ruby/patches.nix | 79 -------- 4 files changed, 149 insertions(+), 225 deletions(-) create mode 100644 pkgs/development/interpreters/ruby/fixes.nix delete mode 100644 pkgs/development/interpreters/ruby/patches.nix diff --git a/pkgs/development/interpreters/ruby/fixes.nix b/pkgs/development/interpreters/ruby/fixes.nix new file mode 100644 index 00000000000..a8514375c74 --- /dev/null +++ b/pkgs/development/interpreters/ruby/fixes.nix @@ -0,0 +1,94 @@ +# The standard set of gems in nixpkgs including potential fixes. +# +# The gemset is derived from two points of entry: +# - An attrset describing a gem, including version, source and dependencies +# This is just meta data, most probably automatically generated by a tool +# like Bundix (https://github.com/aflatter/bundix). +# { +# name = "bundler"; +# version = "1.6.5"; +# sha256 = "1s4x0f5by9xs2y24jk6krq5ky7ffkzmxgr4z1nhdykdmpsi2zd0l"; +# dependencies = [ "rake" ]; +# } +# - An optional derivation that may override how the gem is built. For popular +# gems that don't behave correctly, fixes are already provided in the form of +# derivations. +# +# This seperates "what to build" (the exact gem versions) from "how to build" +# (to make gems behave if necessary). + +{ lib, gemset, buildRubyGem, writeScript, ruby, libxml2, libxslt, python, stdenv +, which, postgresql, v8_3_16_14, clang }: + +let + v8 = v8_3_16_14; + + gems = lib.mapAttrs (name: config: + if (lib.isDerivation config) then config + else (instantiate name config) + ) gemset; + + instantiate = (name: attrs: + let + # Turn dependency strings into actual derivations. + gemPath = map (name: builtins.getAttr name gems) (attrs.dependencies or []); + fix = if (builtins.hasAttr name fixes) + then (builtins.getAttr name fixes) attrs + else {}; + in + buildRubyGem ({ + name = attrs.name; + sha256 = attrs.sha256; + inherit gemPath; + # Disable the checkPhase as there no single way to run tests for a given + # gem: https://github.com/rubygems/rubygems/issues/730 + checkPhase = ":"; + # Gems downloaded from rubygems.org don't need to be built again. + dontBuild = true; + } // fix) + ); + + fixes = { + bundler = attrs: { + dontPatchShebangs = 1; + }; + + libv8 = attrs: { + buildFlags = [ "--with-system-v8" ]; + buildInputs = [ which v8 python ]; + }; + + nokogiri = attrs: { + buildFlags = [ + "--with-xml2-dir=${libxml2}" + "--with-xml2-include=${libxml2}/include/libxml2" + "--with-xslt-dir=${libxslt}" + "--use-system-libraries" + ]; + }; + + therubyracer = attrs: { + dontBuild = false; + + preBuild = '' + addToSearchPath RUBYLIB "${gems.libv8}/${ruby.gemPath}/gems/libv8-3.16.14.3/lib" + addToSearchPath RUBYLIB "${gems.libv8}/${ruby.gemPath}/gems/libv8-3.16.14.3/ext" + ln -s ${clang}/bin/clang $TMPDIR/gcc + ln -s ${clang}/bin/clang++ $TMPDIR/g++ + export PATH=$TMPDIR:$PATH + ''; + + postInstall = stdenv.lib.optionalString stdenv.isDarwin '' + cat >> $out/nix-support/setup-hook <> $out/nix-support/setup-hook < Date: Mon, 8 Sep 2014 18:44:43 +0200 Subject: [PATCH 28/69] WIP --- pkgs/development/interpreters/ruby/bundix.nix | 16 ++++++++++++++++ pkgs/top-level/all-packages.nix | 8 ++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 pkgs/development/interpreters/ruby/bundix.nix diff --git a/pkgs/development/interpreters/ruby/bundix.nix b/pkgs/development/interpreters/ruby/bundix.nix new file mode 100644 index 00000000000..b4cc4bbb31f --- /dev/null +++ b/pkgs/development/interpreters/ruby/bundix.nix @@ -0,0 +1,16 @@ +{rubyLibsWith, callPackage, lib}: + +{ + loadRubyEnv = path: config: + let + expr = callPackage path {}; + ruby = config.ruby; + rubyLibs = rubyLibsWith ruby; + gems = rubyLibs.importGems expr.gemset config.gemOverrides; + in { + inherit ruby; # TODO: Set ruby using expr.rubyVersion if not given. + gemPath = map (drv: "${drv}/${ruby.gemPath}") ( + builtins.filter (value: lib.isDerivation value) (lib.attrValues gems) + ); + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 90ce4bf6555..e85d18f01ed 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4045,10 +4045,14 @@ let ruby_2_0 = ruby_2_0_0; ruby_2_1 = ruby_2_1_3; - rubyLibsWith = myruby: callPackage ../development/interpreters/ruby/gems.nix { - ruby = myruby; + rubyLibsWith = ruby: callPackage ../development/interpreters/ruby/gems.nix { + inherit ruby; }; + loadRubyEnv = (callPackage ../development/interpreters/ruby/bundix.nix { + inherit rubyLibsWith; + }).loadRubyEnv; + rubyLibs_1_8_7 = rubyLibsWith ruby_1_8_7; rubyLibs_1_9_3 = rubyLibsWith ruby_1_9_3; rubyLibs_2_0_0 = rubyLibsWith ruby_2_0_0; From f4d5fa4da6a56e0bbfebb27f1a1603bd7b73b450 Mon Sep 17 00:00:00 2001 From: Alexander Flatter Date: Wed, 17 Sep 2014 15:00:16 +0200 Subject: [PATCH 29/69] importGems doesn't crash if gemOverrides not given --- pkgs/development/interpreters/ruby/bundix.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/ruby/bundix.nix b/pkgs/development/interpreters/ruby/bundix.nix index b4cc4bbb31f..f86190005bb 100644 --- a/pkgs/development/interpreters/ruby/bundix.nix +++ b/pkgs/development/interpreters/ruby/bundix.nix @@ -6,7 +6,7 @@ expr = callPackage path {}; ruby = config.ruby; rubyLibs = rubyLibsWith ruby; - gems = rubyLibs.importGems expr.gemset config.gemOverrides; + gems = rubyLibs.importGems gemset (config.gemOverrides or (gemset: {})); in { inherit ruby; # TODO: Set ruby using expr.rubyVersion if not given. gemPath = map (drv: "${drv}/${ruby.gemPath}") ( From 2cb31d576a83861a05f2596d5a5e8d1dee661de6 Mon Sep 17 00:00:00 2001 From: Alexander Flatter Date: Wed, 17 Sep 2014 15:06:37 +0200 Subject: [PATCH 30/69] Improve buildRubyGem --- pkgs/development/interpreters/ruby/bundix.nix | 2 +- pkgs/development/interpreters/ruby/fixes.nix | 12 ++-- pkgs/development/interpreters/ruby/gem.nix | 61 +++++++++++++------ 3 files changed, 46 insertions(+), 29 deletions(-) diff --git a/pkgs/development/interpreters/ruby/bundix.nix b/pkgs/development/interpreters/ruby/bundix.nix index f86190005bb..4f745cfd62a 100644 --- a/pkgs/development/interpreters/ruby/bundix.nix +++ b/pkgs/development/interpreters/ruby/bundix.nix @@ -9,7 +9,7 @@ gems = rubyLibs.importGems gemset (config.gemOverrides or (gemset: {})); in { inherit ruby; # TODO: Set ruby using expr.rubyVersion if not given. - gemPath = map (drv: "${drv}/${ruby.gemPath}") ( + gemPath = map (drv: "${drv}") ( builtins.filter (value: lib.isDerivation value) (lib.attrValues gems) ); }; diff --git a/pkgs/development/interpreters/ruby/fixes.nix b/pkgs/development/interpreters/ruby/fixes.nix index a8514375c74..ddd673004d3 100644 --- a/pkgs/development/interpreters/ruby/fixes.nix +++ b/pkgs/development/interpreters/ruby/fixes.nix @@ -36,15 +36,11 @@ let then (builtins.getAttr name fixes) attrs else {}; in - buildRubyGem ({ - name = attrs.name; - sha256 = attrs.sha256; + buildRubyGem (attrs // { inherit gemPath; # Disable the checkPhase as there no single way to run tests for a given # gem: https://github.com/rubygems/rubygems/issues/730 checkPhase = ":"; - # Gems downloaded from rubygems.org don't need to be built again. - dontBuild = true; } // fix) ); @@ -70,9 +66,9 @@ let therubyracer = attrs: { dontBuild = false; - preBuild = '' - addToSearchPath RUBYLIB "${gems.libv8}/${ruby.gemPath}/gems/libv8-3.16.14.3/lib" - addToSearchPath RUBYLIB "${gems.libv8}/${ruby.gemPath}/gems/libv8-3.16.14.3/ext" + preInstall = '' + addToSearchPath RUBYLIB "${gems.libv8}/gems/libv8-3.16.14.3/lib" + addToSearchPath RUBYLIB "${gems.libv8}/gems/libv8-3.16.14.3/ext" ln -s ${clang}/bin/clang $TMPDIR/gcc ln -s ${clang}/bin/clang++ $TMPDIR/g++ export PATH=$TMPDIR:$PATH diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index 012c9f5013d..95246797a70 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -27,16 +27,24 @@ in ruby.stdenv.mkDerivation (attrs // { inherit (attrs) sha256; }; - unpackPhase = '' - if test -d $src; then - cd $src + # The source is expected to either be a gem package or a directory. + # + # - Gem packages are already built, so they don't even need to be unpacked. + # They will skip the buildPhase. + # - A directory containing the sources will need to go through all of the + # usual phases. + unpackPhase= '' + gemRegex="\.gem" + if [[ $src =~ $gemRegex ]] + then + runHook preUnpack + echo "Source is a gem package, won't unpack." + gempkg=$src + dontBuild=1 + runHook postUnpack else - cp $src ${attrs.name}.gem - gem unpack ${attrs.name}.gem - rm ${attrs.name}.gem - mv ${attrs.name} gem-build - cd gem-build - sourceRoot=`pwd` + # Fall back to the original thing for everything else. + unpackPhase fi ''; @@ -46,6 +54,23 @@ in ruby.stdenv.mkDerivation (attrs // { runHook postCheck ''; + buildPhase = '' + runHook preBuild + + # TODO: Investigate. The complete working tree is touched by fetchgit. + if [ -d .git ]; then + git reset + fi + + gemspec=`find . -name '*.gemspec'` + output=`gem build $gemspec` + gempkg=`echo $output|grep -oP 'File: \K(.*)'` + + echo "Gem package built: $gempkg" + + runHook postBuild + ''; + installPhase = '' runHook preInstall @@ -54,7 +79,7 @@ in ruby.stdenv.mkDerivation (attrs // { # separate buildPhase. # --ignore-dependencies is necessary as rubygems otherwise always # connects to the repository, thus breaking pure builds. - GEM_HOME=$out/${ruby.gemPath} \ + GEM_HOME=$out \ gem install \ --local \ --force \ @@ -63,30 +88,26 @@ in ruby.stdenv.mkDerivation (attrs // { --build-root "/" \ --bindir "$out/bin" \ --backtrace \ - $src $gemFlags -- $buildFlags + $gempkg $gemFlags -- $buildFlags - rm -frv $out/${ruby.gemPath}/cache # don't keep the .gem file here + rm -frv $out/cache # don't keep the .gem file here for prog in $out/bin/*; do wrapProgram "$prog" \ - --prefix GEM_PATH : "$out/${ruby.gemPath}:$GEM_PATH" \ + --prefix GEM_PATH : "$out:$GEM_PATH" \ --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 -fv $out/${ruby.gemPath}/doc/*/*/created.rid || true - rm -fv $out/${ruby.gemPath}/gems/*/ext/*/mkmf.log || true + rm -fv $out/doc/*/*/created.rid || true + rm -fv $out/gems/*/ext/*/mkmf.log || true mkdir -p $out/nix-support cat > $out/nix-support/setup-hook < Date: Wed, 17 Sep 2014 15:11:24 +0200 Subject: [PATCH 31/69] loadRubyEnv instantiates sources --- pkgs/development/interpreters/ruby/bundix.nix | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/pkgs/development/interpreters/ruby/bundix.nix b/pkgs/development/interpreters/ruby/bundix.nix index 4f745cfd62a..f662517b2de 100644 --- a/pkgs/development/interpreters/ruby/bundix.nix +++ b/pkgs/development/interpreters/ruby/bundix.nix @@ -1,9 +1,38 @@ -{rubyLibsWith, callPackage, lib}: +{rubyLibsWith, callPackage, lib, fetchurl, fetchgit}: + +let + + sourceInstantiators = { + # Many ruby people use `git ls-files` to compose their gemspecs. + git = (attrs: fetchgit { inherit (attrs) url rev sha256 leaveDotGit; }); + url = (attrs: fetchurl { inherit (attrs) url sha256; }); + }; + +in { + # Loads a set containing a ruby environment definition. The set's `gemset` + # key is expected to contain a set of gems. Optionally, the `ruby_version` + # key can be set to a string. A gem definition looks like this: + # + # rack-test = { + # name = "rack-test-0.6.2"; + # src = { + # type = "url"; + # url = "https://rubygems.org/downloads/rack-test-0.6.2.gem"; + # sha256 = "01mk715ab5qnqf6va8k3hjsvsmplrfqpz6g58qw4m3l8mim0p4ky"; + # }; + # dependencies = [ "rack" ]; + # }; loadRubyEnv = path: config: let - expr = callPackage path {}; + expr = import path; + gemset = lib.mapAttrs (name: attrs: + attrs // { + src = (builtins.getAttr attrs.src.type sourceInstantiators) attrs.src; + dontBuild = !(attrs.src.type == "git"); + } + ) expr.gemset; ruby = config.ruby; rubyLibs = rubyLibsWith ruby; gems = rubyLibs.importGems gemset (config.gemOverrides or (gemset: {})); From 5b928301c16fc515ac8149da1a6420ecc8fd221f Mon Sep 17 00:00:00 2001 From: Alexander Flatter Date: Wed, 17 Sep 2014 15:13:21 +0200 Subject: [PATCH 32/69] Expose gems when using loadRubyEnv --- pkgs/development/interpreters/ruby/bundix.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/ruby/bundix.nix b/pkgs/development/interpreters/ruby/bundix.nix index f662517b2de..691b4c5e979 100644 --- a/pkgs/development/interpreters/ruby/bundix.nix +++ b/pkgs/development/interpreters/ruby/bundix.nix @@ -37,7 +37,7 @@ in rubyLibs = rubyLibsWith ruby; gems = rubyLibs.importGems gemset (config.gemOverrides or (gemset: {})); in { - inherit ruby; # TODO: Set ruby using expr.rubyVersion if not given. + inherit ruby gems; # TODO: Set ruby using expr.rubyVersion if not given. gemPath = map (drv: "${drv}") ( builtins.filter (value: lib.isDerivation value) (lib.attrValues gems) ); From b4c81a1f15094120b612ce627600ba13e11d2b1c Mon Sep 17 00:00:00 2001 From: Alexander Flatter Date: Wed, 17 Sep 2014 15:13:47 +0200 Subject: [PATCH 33/69] importGems now accepts an attrset --- pkgs/development/interpreters/ruby/gems.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/ruby/gems.nix b/pkgs/development/interpreters/ruby/gems.nix index cb91d92c382..2dd1739d49f 100644 --- a/pkgs/development/interpreters/ruby/gems.nix +++ b/pkgs/development/interpreters/ruby/gems.nix @@ -48,7 +48,7 @@ in importGems = file: args: let # 1. Load set of gem names and versions from a bundix-created expression. - gemset = callPackage file { }; + gemset = if (builtins.isAttrs file) then file else (callPackage file { }); # 2. Allow gems to be overriden by providing a derivation yourself. config = gemset // (args gemset); # 3. From 9eedf0f2184f496cbf51a08e9fa0503c368522bd Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Mon, 27 Oct 2014 22:13:36 +0000 Subject: [PATCH 34/69] simplify expressions --- pkgs/development/interpreters/ruby/fixes.nix | 14 ++++---------- pkgs/development/interpreters/ruby/gem.nix | 6 +----- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/pkgs/development/interpreters/ruby/fixes.nix b/pkgs/development/interpreters/ruby/fixes.nix index ddd673004d3..7314bc2a008 100644 --- a/pkgs/development/interpreters/ruby/fixes.nix +++ b/pkgs/development/interpreters/ruby/fixes.nix @@ -21,6 +21,7 @@ , which, postgresql, v8_3_16_14, clang }: let + id = x: x; v8 = v8_3_16_14; gems = lib.mapAttrs (name: config: @@ -31,17 +32,10 @@ let instantiate = (name: attrs: let # Turn dependency strings into actual derivations. - gemPath = map (name: builtins.getAttr name gems) (attrs.dependencies or []); - fix = if (builtins.hasAttr name fixes) - then (builtins.getAttr name fixes) attrs - else {}; + gemPath = map (name: gems."${name}") (attrs.dependencies or []); + fixedAttrs = (fixes."${name}" or id) attrs; in - buildRubyGem (attrs // { - inherit gemPath; - # Disable the checkPhase as there no single way to run tests for a given - # gem: https://github.com/rubygems/rubygems/issues/730 - checkPhase = ":"; - } // fix) + buildRubyGem (fixedAttrs // { inherit gemPath; }) ); fixes = { diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index 95246797a70..ce0b8e15fec 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -48,11 +48,7 @@ in ruby.stdenv.mkDerivation (attrs // { fi ''; - checkPhase = '' - runHook preCheck - ${attrs.checkPhase or "${rake}/bin/rake spec"} - runHook postCheck - ''; + checkPhase = "true"; buildPhase = '' runHook preBuild From 1eb31c08388ae5197a172c4c45480d217dc48f3b Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Mon, 27 Oct 2014 22:16:00 +0000 Subject: [PATCH 35/69] remove old stuff --- .../ruby/fix-gem-nix-versions.patch | 35 - .../interpreters/ruby/generated.nix | 2501 ----------------- pkgs/development/interpreters/ruby/libs.nix | 45 - .../interpreters/ruby/overrides.nix | 5 - 4 files changed, 2586 deletions(-) delete mode 100644 pkgs/development/interpreters/ruby/fix-gem-nix-versions.patch delete mode 100644 pkgs/development/interpreters/ruby/generated.nix delete mode 100644 pkgs/development/interpreters/ruby/libs.nix delete mode 100644 pkgs/development/interpreters/ruby/overrides.nix diff --git a/pkgs/development/interpreters/ruby/fix-gem-nix-versions.patch b/pkgs/development/interpreters/ruby/fix-gem-nix-versions.patch deleted file mode 100644 index c67eaff2ac5..00000000000 --- a/pkgs/development/interpreters/ruby/fix-gem-nix-versions.patch +++ /dev/null @@ -1,35 +0,0 @@ -diff --git a/lib/nix/gem-nix-command.rb b/lib/nix/gem-nix-command.rb -index 8d3733e..ba942ff 100644 ---- a/lib/nix/gem-nix-command.rb -+++ b/lib/nix/gem-nix-command.rb -@@ -108,11 +108,12 @@ class Gem::Commands::NixCommand < Gem::Command - - # args to dep informations - args.each { |arg| -- if arg =~ /(.+)-?(.*)?/ then -+ if arg =~ /(.+)-([0-9][^-]+)/ then - gem_name = $1 -- version = $2.empty? ? Gem::Requirement.default : Gem::Version.new($2) -+ version = Gem::Version.new($2) - else -- raise Gem::CommandLineError, "couldn't parse arg. expected: name or name-version" -+ gem_name = arg -+ version = Gem::Requirement.default - end - - adddep(Gem::Dependency.new gem_name, version) -@@ -162,7 +163,13 @@ class Gem::Commands::NixCommand < Gem::Command - spec, source_uri = find_gem_with_source(dep) - full_name = spec.full_name - -- return if @gems_with_deps.key?(full_name) -+ if @gems_with_deps.key?(full_name) -+ unless @gems_with_deps[full_name].nil? -+ return @gems_with_deps[full_name][0] -+ else -+ return nil -+ end -+ end - @gems_with_deps[full_name] = nil # there maybe circular dependencies. thus mark this gem seen as early as possible - - # development deps can't be found. Some are old. Thus only add rutime dependencies diff --git a/pkgs/development/interpreters/ruby/generated.nix b/pkgs/development/interpreters/ruby/generated.nix deleted file mode 100644 index 78567b1979f..00000000000 --- a/pkgs/development/interpreters/ruby/generated.nix +++ /dev/null @@ -1,2501 +0,0 @@ -# WARNING: automatically generated file -# Generated by 'gem nix' command that comes from 'nix' gem -g: # Get dependencies from patched gems -{ - aliases = { - ZenTest = g.ZenTest_4_10_1; - actionmailer = g.actionmailer_4_1_6; - actionpack = g.actionpack_4_1_6; - actionview = g.actionview_4_1_6; - activemodel = g.activemodel_4_1_6; - activerecord = g.activerecord_4_1_6; - activesupport = g.activesupport_4_1_6; - addressable = g.addressable_2_3_6; - arel = g.arel_5_0_1_20140414130214; - atoulme_Antwrap = g.atoulme_Antwrap_0_7_4; - autotest_rails = g.autotest_rails_4_2_1; - aws_sdk = g.aws_sdk_1_53_0; - aws_sdk_v1 = g.aws_sdk_v1_1_53_0; - backports = g.backports_3_6_1; - bitbucket_backup = g.bitbucket_backup_0_3_1; - blankslate = g.blankslate_2_1_2_4; - builder = g.builder_3_2_2; - buildr = g.buildr_1_4_20; - bundler = g.bundler_1_7_3; - celluloid = g.celluloid_0_16_0; - childprocess = g.childprocess_0_5_3; - chronic = g.chronic_0_10_2; - chunky_png = g.chunky_png_1_3_1; - classifier_reborn = g.classifier_reborn_2_0_1; - coderay = g.coderay_1_1_0; - coffee_script = g.coffee_script_2_3_0; - coffee_script_source = g.coffee_script_source_1_8_0; - colorator = g.colorator_0_1; - compass = g.compass_1_0_1; - compass_core = g.compass_core_1_0_1; - compass_import_once = g.compass_import_once_1_0_5; - cucumber = g.cucumber_1_3_17; - daemons = g.daemons_1_1_9; - diff_lcs = g.diff_lcs_1_2_5; - dimensions = g.dimensions_1_2_0; - domain_name = g.domain_name_0_5_21; - dotenv = g.dotenv_0_11_1; - dotenv_deployment = g.dotenv_deployment_0_0_2; - em_resolv_replace = g.em_resolv_replace_1_1_3; - erubis = g.erubis_2_7_0; - ethon = g.ethon_0_7_1; - eventmachine = g.eventmachine_1_0_3; - eventmachine_tail = g.eventmachine_tail_0_6_4; - excon = g.excon_0_39_5; - execjs = g.execjs_2_2_1; - fakes3 = g.fakes3_0_1_5_2; - faraday = g.faraday_0_9_0; - faraday_middleware = g.faraday_middleware_0_9_1; - fast_stemmer = g.fast_stemmer_1_0_2; - ffi = g.ffi_1_9_3; - file_tail = g.file_tail_1_0_12; - foreman = g.foreman_0_75_0; - gettext = g.gettext_3_1_4; - gh = g.gh_0_13_2; - gherkin = g.gherkin_2_12_2; - heroku = g.heroku_3_10_3; - heroku_api = g.heroku_api_0_3_19; - highline = g.highline_1_6_21; - hike = g.hike_1_2_3; - hitimes = g.hitimes_1_2_2; - hoe = g.hoe_3_7_1; - http_cookie = g.http_cookie_1_0_2; - i18n = g.i18n_0_6_11; - iconv = g.iconv_1_0_4; - jekyll = g.jekyll_2_4_0; - jekyll_coffeescript = g.jekyll_coffeescript_1_0_1; - jekyll_gist = g.jekyll_gist_1_1_0; - jekyll_paginate = g.jekyll_paginate_1_0_0; - jekyll_sass_converter = g.jekyll_sass_converter_1_2_1; - jekyll_watch = g.jekyll_watch_1_1_1; - jsduck = g.jsduck_5_3_4; - json = g.json_1_8_1; - json_pure = g.json_pure_1_8_0; - kramdown = g.kramdown_1_4_2; - launchy = g.launchy_2_4_2; - liquid = g.liquid_2_6_1; - listen = g.listen_2_7_9; - locale = g.locale_2_1_0; - lockfile = g.lockfile_2_1_3; - macaddr = g.macaddr_1_7_1; - mail = g.mail_2_6_1; - mechanize = g.mechanize_2_7_3; - mercenary = g.mercenary_0_3_4; - method_source = g.method_source_0_8_2; - mime_types = g.mime_types_2_3; - mini_portile = g.mini_portile_0_6_0; - minitar = g.minitar_0_5_4; - minitest = g.minitest_5_4_1; - multi_json = g.multi_json_1_10_1; - multi_test = g.multi_test_0_1_1; - multipart_post = g.multipart_post_2_0_0; - net_http_digest_auth = g.net_http_digest_auth_1_4; - net_http_persistent = g.net_http_persistent_2_9_4; - net_http_pipeline = g.net_http_pipeline_1_0_1; - net_sftp = g.net_sftp_2_1_2; - net_ssh = g.net_ssh_2_9_1; - netrc = g.netrc_0_7_7; - nix = g.nix_0_1_1; - nokogiri = g.nokogiri_1_6_3_1; - ntlm_http = g.ntlm_http_0_1_1; - orderedhash = g.orderedhash_0_0_6; - papertrail = g.papertrail_0_9_10; - papertrail_cli = g.papertrail_cli_0_9_3; - parallel = g.parallel_0_7_1; - parslet = g.parslet_1_5_0; - posix_spawn = g.posix_spawn_0_3_9; - pry = g.pry_0_9_12_6; - pusher_client = g.pusher_client_0_6_0; - pygments_rb = g.pygments_rb_0_6_0; - rack = g.rack_1_5_2; - rack_protection = g.rack_protection_1_5_3; - rack_test = g.rack_test_0_6_2; - rails = g.rails_4_1_6; - railties = g.railties_4_1_6; - rake = g.rake_10_3_2; - rb_fsevent = g.rb_fsevent_0_9_4; - rb_inotify = g.rb_inotify_0_9_5; - rdiscount = g.rdiscount_2_1_7_1; - rdoc = g.rdoc_4_1_2; - redcarpet = g.redcarpet_3_1_2; - remote_syslog = g.remote_syslog_1_6_14; - rest_client = g.rest_client_1_6_7; - riemann_dash = g.riemann_dash_0_2_9; - right_aws = g.right_aws_3_1_0; - right_http_connection = g.right_http_connection_1_5_0; - rjb = g.rjb_1_5_0; - rkelly_remix = g.rkelly_remix_0_0_6; - rmail = g.rmail_1_0_0; - rspec = g.rspec_2_14_1; - rspec_core = g.rspec_core_2_14_8; - rspec_expectations = g.rspec_expectations_2_14_5; - rspec_mocks = g.rspec_mocks_2_14_6; - rubyzip = g.rubyzip_1_1_6; - safe_yaml = g.safe_yaml_1_0_3; - sass = g.sass_3_4_5; - selenium_webdriver = g.selenium_webdriver_2_43_0; - servolux = g.servolux_0_10_0; - sinatra = g.sinatra_1_4_5; - slop = g.slop_3_6_0; - sprockets = g.sprockets_2_12_2; - sprockets_rails = g.sprockets_rails_2_1_4; - syslog_protocol = g.syslog_protocol_0_9_2; - systemu = g.systemu_2_6_4; - taskjuggler = g.taskjuggler_3_5_0; - term_ansicolor = g.term_ansicolor_1_3_0; - terminal_notifier = g.terminal_notifier_1_6_1; - text = g.text_1_3_0; - thin = g.thin_1_6_2; - thor = g.thor_0_19_1; - thread_safe = g.thread_safe_0_3_4; - tilt = g.tilt_1_4_1; - timers = g.timers_4_0_1; - tins = g.tins_1_3_3; - toml = g.toml_0_1_1; - travis = g.travis_1_7_2; - trollop = g.trollop_2_0; - typhoeus = g.typhoeus_0_6_9; - tzinfo = g.tzinfo_1_2_2; - uglifier = g.uglifier_2_5_3; - unf = g.unf_0_1_4; - unf_ext = g.unf_ext_0_0_6; - uuid = g.uuid_2_3_7; - webrick = g.webrick_1_3_1; - webrobots = g.webrobots_0_1_1; - websocket = g.websocket_1_2_1; - xapian_full = g.xapian_full_1_2_3; - xapian_ruby = g.xapian_ruby_1_2_17; - xml_simple = g.xml_simple_1_1_2; - yajl_ruby = g.yajl_ruby_1_2_1; - }; - gem_nix_args = [ ''autotest-rails'' ''aws-sdk'' ''bitbucket-backup'' ''buildr'' ''compass'' ''cucumber'' ''erubis'' ''execjs'' ''fakes3'' ''foreman'' ''gettext'' ''heroku'' ''iconv'' ''jekyll'' ''jsduck'' ''lockfile'' ''mechanize'' ''nix'' ''papertrail-cli'' ''rails'' ''rake'' ''rb-fsevent'' ''rdoc'' ''remote_syslog'' ''riemann-dash'' ''right_aws'' ''rmail'' ''sass'' ''selenium-webdriver'' ''sinatra-1.3.2'' ''taskjuggler'' ''terminal-notifier'' ''thin'' ''travis'' ''trollop'' ''uglifier'' ''uuid'' ''xapian-full'' ''xapian-ruby'' ''yajl-ruby'' ]; - gems = { - ZenTest_4_10_1 = { - basename = ''ZenTest''; - meta = { - description = ''ZenTest provides 4 different tools: zentest, unit_diff, autotest, and multiruby''; - homepage = ''https://github.com/seattlerb/zentest''; - longDescription = ''ZenTest provides 4 different tools: zentest, unit_diff, autotest, and -multiruby. - -zentest scans your target and unit-test code and writes your missing -code based on simple naming rules, enabling XP at a much quicker pace. -zentest only works with Ruby and Minitest or Test::Unit. There is -enough evidence to show that this is still proving useful to users, so -it stays. - -unit_diff is a command-line filter to diff expected results from -actual results and allow you to quickly see exactly what is wrong. -Do note that minitest 2.2+ provides an enhanced assert_equal obviating -the need for unit_diff - -autotest is a continous testing facility meant to be used during -development. As soon as you save a file, autotest will run the -corresponding dependent tests. - -multiruby runs anything you want on multiple versions of ruby. Great -for compatibility checking! Use multiruby_setup to manage your -installed versions.''; - }; - name = ''ZenTest-4.10.1''; - requiredGems = [ ]; - sha256 = ''1jyk0lag27s71idna2h72ljskimj0snsiw7diyjx5rqxnz6fj7z1''; - }; - actionmailer_4_1_6 = { - basename = ''actionmailer''; - meta = { - description = ''Email composition, delivery, and receiving framework (part of Rails).''; - homepage = ''http://www.rubyonrails.org''; - longDescription = ''Email on Rails. Compose, deliver, receive, and test emails using the familiar controller/view pattern. First-class support for multipart email and attachments.''; - }; - name = ''actionmailer-4.1.6''; - requiredGems = [ g.actionpack_4_1_6 g.actionview_4_1_6 g.mail_2_6_1 ]; - sha256 = ''1lsw9h0wm7pwdzm9jdq3y5b8b1cf56fd4dcgx4s91qf0lc0dw0wv''; - }; - actionpack_4_1_6 = { - basename = ''actionpack''; - meta = { - description = ''Web-flow and rendering framework putting the VC in MVC (part of Rails).''; - homepage = ''http://www.rubyonrails.org''; - longDescription = ''Web apps on Rails. Simple, battle-tested conventions for building and testing MVC web applications. Works with any Rack-compatible server.''; - }; - name = ''actionpack-4.1.6''; - requiredGems = [ g.activesupport_4_1_6 g.rack_1_5_2 g.rack_test_0_6_2 g.actionview_4_1_6 ]; - sha256 = ''07a95iahv04gikk4qbgpi9is709ynkpcd4g00kqm629jaffrsyj2''; - }; - actionview_4_1_6 = { - basename = ''actionview''; - meta = { - description = ''Rendering framework putting the V in MVC (part of Rails).''; - homepage = ''http://www.rubyonrails.org''; - longDescription = ''Simple, battle-tested conventions and helpers for building web pages.''; - }; - name = ''actionview-4.1.6''; - requiredGems = [ g.activesupport_4_1_6 g.builder_3_2_2 g.erubis_2_7_0 ]; - sha256 = ''1r06r4zsaqsq1wyqy2g29nnycw50v37ab7zmnvzjhy24y53rv9w7''; - }; - activemodel_4_1_6 = { - basename = ''activemodel''; - meta = { - description = ''A toolkit for building modeling frameworks (part of Rails).''; - homepage = ''http://www.rubyonrails.org''; - longDescription = ''A toolkit for building modeling frameworks like Active Record. Rich support for attributes, callbacks, validations, serialization, internationalization, and testing.''; - }; - name = ''activemodel-4.1.6''; - requiredGems = [ g.activesupport_4_1_6 g.builder_3_2_2 ]; - sha256 = ''14mw7d0jax7sky4nc2a7rspcf2inb3m6mxhx653i00v0xjrxa3x6''; - }; - activerecord_4_1_6 = { - basename = ''activerecord''; - meta = { - description = ''Object-relational mapper framework (part of Rails).''; - homepage = ''http://www.rubyonrails.org''; - longDescription = ''Databases on Rails. Build a persistent domain model by mapping database tables to Ruby classes. Strong conventions for associations, validations, aggregations, migrations, and testing come baked-in.''; - }; - name = ''activerecord-4.1.6''; - requiredGems = [ g.activesupport_4_1_6 g.activemodel_4_1_6 g.arel_5_0_1_20140414130214 ]; - sha256 = ''15s72gawgvd7msa2i7hmjw81znif8zh1v57pmans8vmphfg2n9l7''; - }; - activesupport_4_1_6 = { - basename = ''activesupport''; - meta = { - description = ''A toolkit of support libraries and Ruby core extensions extracted from the Rails framework.''; - homepage = ''http://www.rubyonrails.org''; - longDescription = ''A toolkit of support libraries and Ruby core extensions extracted from the Rails framework. Rich support for multibyte strings, internationalization, time zones, and testing.''; - }; - name = ''activesupport-4.1.6''; - requiredGems = [ g.i18n_0_6_11 g.json_1_8_1 g.tzinfo_1_2_2 g.minitest_5_4_1 g.thread_safe_0_3_4 ]; - sha256 = ''0crwl6rlxpv5fvvnvcbrjc7iygj8nklj83v1734h5lrhjzirxc22''; - }; - addressable_2_3_6 = { - basename = ''addressable''; - meta = { - description = ''URI Implementation''; - homepage = ''http://addressable.rubyforge.org/''; - longDescription = ''Addressable is a replacement for the URI implementation that is part of -Ruby's standard library. It more closely conforms to the relevant RFCs and -adds support for IRIs and URI templates. -''; - }; - name = ''addressable-2.3.6''; - requiredGems = [ ]; - sha256 = ''137fj0whmn1kvaq8wjalp8x4qbblwzvg3g4bfx8d8lfi6f0w48p8''; - }; - arel_5_0_1_20140414130214 = { - basename = ''arel''; - meta = { - description = ''Arel is a SQL AST manager for Ruby''; - homepage = ''http://github.com/rails/arel''; - longDescription = ''Arel is a SQL AST manager for Ruby. It - -1. Simplifies the generation of complex SQL queries -2. Adapts to various RDBMSes - -It is intended to be a framework framework; that is, you can build your own ORM -with it, focusing on innovative object and collection modeling as opposed to -database compatibility and query generation.''; - }; - name = ''arel-5.0.1.20140414130214''; - requiredGems = [ ]; - sha256 = ''0dhnc20h1v8ml3nmkxq92rr7qxxpk6ixhwvwhgl2dbw9mmxz0hf9''; - }; - atoulme_Antwrap_0_7_4 = { - basename = ''atoulme_Antwrap''; - meta = { - description = ''A Ruby module that wraps the Apache Ant build tool. Antwrap can be used to invoke Ant Tasks from a Ruby or a JRuby script.''; - homepage = ''http://rubyforge.org/projects/antwrap/''; - longDescription = '' A Ruby module that wraps the Apache Ant build tool. Antwrap can be used to invoke Ant Tasks from a Ruby or a JRuby script. - -== FEATURES/PROBLEMS: - - Antwrap runs on the native Ruby interpreter via the RJB (Ruby Java Bridge gem) and on the JRuby interpreter. Antwrap is compatible with Ant versions 1.5.4, - 1.6.5 and 1.7.0. For more information, see the Project Info (http://rubyforge.org/projects/antwrap/) page. - -== SYNOPSIS: - - Antwrap is a Ruby library that can be used to invoke Ant tasks. It is being used in the Buildr (http://incubator.apache.org/buildr/) project to execute - Ant (http://ant.apache.org/) tasks in a Java project. If you are tired of fighting with Ant or Maven XML files in your Java project, take some time to - check out Buildr!''; - }; - name = ''atoulme-Antwrap-0.7.4''; - requiredGems = [ g.rjb_1_5_0 ]; - sha256 = ''0sh9capkya88qm9mvixwly32fwb2c4nzif9j9vv0f73rqw8kz4j4''; - }; - autotest_rails_4_2_1 = { - basename = ''autotest_rails''; - meta = { - description = ''This is an autotest plugin to provide rails support''; - homepage = ''https://github.com/seattlerb/autotest-rails''; - longDescription = ''This is an autotest plugin to provide rails support. It provides basic -rails support and extra plugins for migrations and fixtures.''; - }; - name = ''autotest-rails-4.2.1''; - requiredGems = [ g.ZenTest_4_10_1 ]; - sha256 = ''1v1dm9zlhdlrxvk90zs8d439ldar674ix41s7pncddgyswcfgg5l''; - }; - aws_sdk_1_53_0 = { - basename = ''aws_sdk''; - meta = { - description = ''AWS SDK for Ruby V1''; - homepage = ''http://aws.amazon.com/sdkforruby''; - longDescription = ''Version 1 of the AWS SDK for Ruby. Available as both `aws-sdk` and `aws-sdk-v1`. -Use `aws-sdk-v1` if you want to load v1 and v2 of the Ruby SDK in the same -application.''; - }; - name = ''aws-sdk-1.53.0''; - requiredGems = [ g.aws_sdk_v1_1_53_0 ]; - sha256 = ''1jwvzlpyh5hpa3qn972wmn2pmhqpzw5vjal2n5i14qplvafmj7p2''; - }; - aws_sdk_v1_1_53_0 = { - basename = ''aws_sdk_v1''; - meta = { - description = ''AWS SDK for Ruby V1''; - homepage = ''http://aws.amazon.com/sdkforruby''; - longDescription = ''Version 1 of the AWS SDK for Ruby. Available as both `aws-sdk` and `aws-sdk-v1`. -Use `aws-sdk-v1` if you want to load v1 and v2 of the Ruby SDK in the same -application.''; - }; - name = ''aws-sdk-v1-1.53.0''; - requiredGems = [ g.nokogiri_1_6_3_1 g.json_1_8_1 ]; - sha256 = ''00yagrm2d5agwkfgkv4rqbxymwmgjmv5n8hah3xhrc90q1ywr7hw''; - }; - backports_3_6_1 = { - basename = ''backports''; - meta = { - description = ''Backports of Ruby features for older Ruby.''; - homepage = ''http://github.com/marcandre/backports''; - longDescription = ''Essential backports that enable many of the nice features of Ruby 1.8.7 up to 2.1.0 for earlier versions.''; - }; - name = ''backports-3.6.1''; - requiredGems = [ ]; - sha256 = ''182fzzmzhjknnh8r6196lnws5fik86wnsn64a382w0fqb2vz98bq''; - }; - bitbucket_backup_0_3_1 = { - basename = ''bitbucket_backup''; - meta = { - description = ''A tool to backup Bitbucket repos.''; - homepage = ''https://bitbucket.org/seth/bitbucket-backup''; - longDescription = ''A tool to backup Bitbucket repos.''; - }; - name = ''bitbucket-backup-0.3.1''; - requiredGems = [ g.highline_1_6_21 g.json_1_8_1 ]; - sha256 = ''17d2pfk0z3cxcx9m90avcp5wxhdbrq23zd665263m3hh9b5qi0fj''; - }; - blankslate_2_1_2_4 = { - basename = ''blankslate''; - meta = { - description = ''BlankSlate extracted from Builder.''; - homepage = ''http://github.com/masover/blankslate''; - }; - name = ''blankslate-2.1.2.4''; - requiredGems = [ ]; - sha256 = ''0jnnq5q5dwy2rbfcl769vd9bk1yn0242f6yjlb9mnqdm9627cdcx''; - }; - builder_3_2_2 = { - basename = ''builder''; - meta = { - description = ''Builders for MarkUp.''; - homepage = ''http://onestepback.org''; - longDescription = ''Builder provides a number of builder objects that make creating structured data -simple to do. Currently the following builder objects are supported: - -* XML Markup -* XML Events -''; - }; - name = ''builder-3.2.2''; - requiredGems = [ ]; - sha256 = ''14fii7ab8qszrvsvhz6z2z3i4dw0h41a62fjr2h1j8m41vbrmyv2''; - }; - buildr_1_4_20 = { - basename = ''buildr''; - meta = { - description = ''Build like you code''; - homepage = ''http://buildr.apache.org/''; - longDescription = ''Apache Buildr is a build system for Java-based applications, including support -for Scala, Groovy and a growing number of JVM languages and tools. We wanted -something that's simple and intuitive to use, so we only need to tell it what -to do, and it takes care of the rest. But also something we can easily extend -for those one-off tasks, with a language that's a joy to use. -''; - }; - name = ''buildr-1.4.20''; - requiredGems = [ g.rake_0_9_2_2 g.builder_3_2_2 g.net_ssh_2_7_0 g.net_sftp_2_1_2 g.rubyzip_0_9_9 g.json_pure_1_8_0 g.hoe_3_7_1 g.rjb_1_4_9 g.atoulme_Antwrap_0_7_4 g.diff_lcs_1_2_4 g.rspec_expectations_2_14_3 g.rspec_mocks_2_14_3 g.rspec_core_2_14_5 g.rspec_2_14_1 g.xml_simple_1_1_2 g.minitar_0_5_4 g.bundler_1_7_3 g.orderedhash_0_0_6 ]; - sha256 = ''0x4ffblw7jg0z49ywfm5abfxgg23di3d661czndwi904cvmghrkv''; - }; - bundler_1_7_3 = { - basename = ''bundler''; - meta = { - description = ''The best way to manage your application's dependencies''; - homepage = ''http://bundler.io''; - longDescription = ''Bundler manages an application's dependencies through its entire life, across many machines, systematically and repeatably''; - }; - name = ''bundler-1.7.3''; - requiredGems = [ ]; - sha256 = ''00r3b4bchiqbd12y896hmrp5sa6n4391fygg1jmvljx1635x5kyj''; - }; - celluloid_0_16_0 = { - basename = ''celluloid''; - meta = { - description = ''Actor-based concurrent object framework for Ruby''; - homepage = ''https://github.com/celluloid/celluloid''; - longDescription = ''Celluloid enables people to build concurrent programs out of concurrent objects just as easily as they build sequential programs out of sequential objects''; - }; - name = ''celluloid-0.16.0''; - requiredGems = [ g.timers_4_0_1 ]; - sha256 = ''044xk0y7i1xjafzv7blzj5r56s7zr8nzb619arkrl390mf19jxv3''; - }; - childprocess_0_5_3 = { - basename = ''childprocess''; - meta = { - description = ''This gem aims at being a simple and reliable solution for controlling external programs running in the background on any Ruby / OS combination.''; - homepage = ''http://github.com/jarib/childprocess''; - longDescription = ''This gem aims at being a simple and reliable solution for controlling external programs running in the background on any Ruby / OS combination.''; - }; - name = ''childprocess-0.5.3''; - requiredGems = [ g.ffi_1_9_3 ]; - sha256 = ''12djpdr487fddq55sav8gw1pjglcbb0ab0s6npga0ywgsqdyvsww''; - }; - chronic_0_10_2 = { - basename = ''chronic''; - meta = { - description = ''Natural language date/time parsing.''; - homepage = ''http://github.com/mojombo/chronic''; - longDescription = ''Chronic is a natural language date/time parser written in pure Ruby.''; - }; - name = ''chronic-0.10.2''; - requiredGems = [ ]; - sha256 = ''1hrdkn4g8x7dlzxwb1rfgr8kw3bp4ywg5l4y4i9c2g5cwv62yvvn''; - }; - chunky_png_1_3_1 = { - basename = ''chunky_png''; - meta = { - description = ''Pure ruby library for read/write, chunk-level access to PNG files''; - homepage = ''http://wiki.github.com/wvanbergen/chunky_png''; - longDescription = '' This pure Ruby library can read and write PNG images without depending on an external - image library, like RMagick. It tries to be memory efficient and reasonably fast. - - It supports reading and writing all PNG variants that are defined in the specification, - with one limitation: only 8-bit color depth is supported. It supports all transparency, - interlacing and filtering options the PNG specifications allows. It can also read and - write textual metadata from PNG files. Low-level read/write access to PNG chunks is - also possible. - - This library supports simple drawing on the image canvas and simple operations like - alpha composition and cropping. Finally, it can import from and export to RMagick for - interoperability. - - Also, have a look at OilyPNG at http://github.com/wvanbergen/oily_png. OilyPNG is a - drop in mixin module that implements some of the ChunkyPNG algorithms in C, which - provides a massive speed boost to encoding and decoding. -''; - }; - name = ''chunky_png-1.3.1''; - requiredGems = [ ]; - sha256 = ''1kpcv2wrx3zyfi5jbsnd9da1wmkjwidnmpshq6vhzz0r8hp7ai8a''; - }; - classifier_reborn_2_0_1 = { - basename = ''classifier_reborn''; - meta = { - description = ''A general classifier module to allow Bayesian and other types of classifications.''; - homepage = ''https://github.com/jekyll/classifier-reborn''; - }; - name = ''classifier-reborn-2.0.1''; - requiredGems = [ g.fast_stemmer_1_0_2 ]; - sha256 = ''1p90lwn6x2akg882h597vb6fdbw6zmiw7pqlpqsc1dj243zf0pks''; - }; - coderay_1_1_0 = { - basename = ''coderay''; - meta = { - description = ''Fast syntax highlighting for selected languages.''; - homepage = ''http://coderay.rubychan.de''; - longDescription = ''Fast and easy syntax highlighting for selected languages, written in Ruby. Comes with RedCloth integration and LOC counter.''; - }; - name = ''coderay-1.1.0''; - requiredGems = [ ]; - sha256 = ''059wkzlap2jlkhg460pkwc1ay4v4clsmg1bp4vfzjzkgwdckr52s''; - }; - coffee_script_2_3_0 = { - basename = ''coffee_script''; - meta = { - description = ''Ruby CoffeeScript Compiler''; - homepage = ''http://github.com/josh/ruby-coffee-script''; - longDescription = '' Ruby CoffeeScript is a bridge to the JS CoffeeScript compiler. -''; - }; - name = ''coffee-script-2.3.0''; - requiredGems = [ g.coffee_script_source_1_8_0 g.execjs_2_2_1 ]; - sha256 = ''0i0p52f2s7hk8sq3q9342and3whjnhjhc7ldg8zmnjjcm44asm3d''; - }; - coffee_script_source_1_8_0 = { - basename = ''coffee_script_source''; - meta = { - description = ''The CoffeeScript Compiler''; - homepage = ''http://jashkenas.github.com/coffee-script/''; - longDescription = '' CoffeeScript is a little language that compiles into JavaScript. - Underneath all of those embarrassing braces and semicolons, - JavaScript has always had a gorgeous object model at its heart. - CoffeeScript is an attempt to expose the good parts of JavaScript - in a simple way. -''; - }; - name = ''coffee-script-source-1.8.0''; - requiredGems = [ ]; - sha256 = ''04998xd43z9kqs6kmzvng90s2xn3ybp8918rq7xz6ljhv8yjqm88''; - }; - colorator_0_1 = { - basename = ''colorator''; - meta = { - description = ''String core extensions for terminal coloring.''; - homepage = ''https://github.com/octopress/colorator''; - longDescription = ''Colorize your text in the terminal.''; - }; - name = ''colorator-0.1''; - requiredGems = [ ]; - sha256 = ''09zp15hyd9wlbgf1kmrf4rnry8cpvh1h9fj7afarlqcy4hrfdpvs''; - }; - compass_1_0_1 = { - basename = ''compass''; - meta = { - description = ''A Real Stylesheet Framework''; - homepage = ''http://compass-style.org''; - longDescription = ''Compass is a Sass-based Stylesheet Framework that streamlines the creation and maintenance of CSS.''; - }; - name = ''compass-1.0.1''; - requiredGems = [ g.sass_3_4_5 g.compass_core_1_0_1 g.compass_import_once_1_0_5 g.chunky_png_1_3_1 g.rb_fsevent_0_9_4 g.rb_inotify_0_9_5 ]; - sha256 = ''0cxb6nbj37wz2zwwb4pkbvg9pg0ymamxx9v400h9ibvlb5n0ri40''; - }; - compass_core_1_0_1 = { - basename = ''compass_core''; - meta = { - description = ''The Compass core stylesheet library''; - homepage = ''http://compass-style.org/reference/compass/''; - longDescription = ''The Compass core stylesheet library and minimum required ruby extensions. This library can be used stand-alone without the compass ruby configuration file or compass command line tools.''; - }; - name = ''compass-core-1.0.1''; - requiredGems = [ g.sass_3_4_5 g.multi_json_1_10_1 ]; - sha256 = ''0zhbmgjq6s9j2qdx3cz0v8s216mh8g0ymk4fzmq3c4an9rryl1zx''; - }; - compass_import_once_1_0_5 = { - basename = ''compass_import_once''; - meta = { - description = ''Speed up your Sass compilation by making @import only import each file once.''; - homepage = ''https://github.com/chriseppstein/compass/tree/master/import-once''; - longDescription = ''Changes the behavior of Sass's @import directive to only import a file once.''; - }; - name = ''compass-import-once-1.0.5''; - requiredGems = [ g.sass_3_4_5 ]; - sha256 = ''0bn7gwbfz7jvvdd0qdfqlx67fcb83gyvxqc7dr9fhcnks3z8z5rq''; - }; - cucumber_1_3_17 = { - basename = ''cucumber''; - meta = { - description = ''cucumber-1.3.17''; - homepage = ''http://cukes.info''; - longDescription = ''Behaviour Driven Development with elegance and joy''; - }; - name = ''cucumber-1.3.17''; - requiredGems = [ g.builder_3_2_2 g.diff_lcs_1_2_5 g.gherkin_2_12_2 g.multi_json_1_10_1 g.multi_test_0_1_1 ]; - sha256 = ''1gjnxxrcf43mzs5qlg1m0b61g8vwfzjkj1wwi6xbpsqlhcwjjq1x''; - }; - daemons_1_1_9 = { - basename = ''daemons''; - meta = { - description = ''A toolkit to create and control daemons in different ways''; - homepage = ''http://daemons.rubyforge.org''; - longDescription = ''Daemons provides an easy way to wrap existing ruby scripts (for example a self-written server) to be run as a daemon and to be controlled by simple start/stop/restart commands. You can also call blocks as daemons and control them from the parent or just daemonize the current process. Besides this basic functionality, daemons offers many advanced features like exception backtracing and logging (in case your ruby script crashes) and monitoring and automatic restarting of your processes if they crash.''; - }; - name = ''daemons-1.1.9''; - requiredGems = [ ]; - sha256 = ''1j1m64pirsldhic6x6sg4lcrmp1bs1ihpd49xm8m1b2rc1c3irzy''; - }; - diff_lcs_1_2_4 = { - basename = ''diff_lcs''; - meta = { - description = ''Diff::LCS computes the difference between two Enumerable sequences using the McIlroy-Hunt longest common subsequence (LCS) algorithm''; - homepage = ''http://diff-lcs.rubyforge.org/''; - longDescription = ''Diff::LCS computes the difference between two Enumerable sequences using the -McIlroy-Hunt longest common subsequence (LCS) algorithm. It includes utilities -to create a simple HTML diff output format and a standard diff-like tool. - -This is release 1.2.4, fixing a bug introduced after diff-lcs 1.1.3 that did -not properly prune common sequences at the beginning of a comparison set. -Thanks to Paul Kunysch for fixing this issue. - -Coincident with the release of diff-lcs 1.2.3, we reported an issue with -Rubinius in 1.9 mode -({rubinius/rubinius#2268}[https://github.com/rubinius/rubinius/issues/2268]). -We are happy to report that this issue has been resolved.''; - }; - name = ''diff-lcs-1.2.4''; - requiredGems = [ ]; - sha256 = ''09xbffjg639y8n43zp88ki0m489vv2c86znmfib2fg1di6svi1xd''; - }; - diff_lcs_1_2_5 = { - basename = ''diff_lcs''; - meta = { - description = ''Diff::LCS computes the difference between two Enumerable sequences using the McIlroy-Hunt longest common subsequence (LCS) algorithm''; - homepage = ''http://diff-lcs.rubyforge.org/''; - longDescription = ''Diff::LCS computes the difference between two Enumerable sequences using the -McIlroy-Hunt longest common subsequence (LCS) algorithm. It includes utilities -to create a simple HTML diff output format and a standard diff-like tool. - -This is release 1.2.4, fixing a bug introduced after diff-lcs 1.1.3 that did -not properly prune common sequences at the beginning of a comparison set. -Thanks to Paul Kunysch for fixing this issue. - -Coincident with the release of diff-lcs 1.2.3, we reported an issue with -Rubinius in 1.9 mode -({rubinius/rubinius#2268}[https://github.com/rubinius/rubinius/issues/2268]). -We are happy to report that this issue has been resolved.''; - }; - name = ''diff-lcs-1.2.5''; - requiredGems = [ ]; - sha256 = ''1vf9civd41bnqi6brr5d9jifdw73j9khc6fkhfl1f8r9cpkdvlx1''; - }; - dimensions_1_2_0 = { - basename = ''dimensions''; - meta = { - description = ''Pure Ruby dimension measurement for GIF, PNG, JPEG and TIFF images''; - homepage = ''https://github.com/sstephenson/dimensions''; - longDescription = ''A pure Ruby library for measuring the dimensions and rotation angles of GIF, PNG, JPEG and TIFF images.''; - }; - name = ''dimensions-1.2.0''; - requiredGems = [ ]; - sha256 = ''1pqb7yzjcpbgbyi196ifqbd1wy570cn12bkzcvpcha4xilhajja0''; - }; - domain_name_0_5_21 = { - basename = ''domain_name''; - meta = { - description = ''Domain Name manipulation library for Ruby''; - homepage = ''https://github.com/knu/ruby-domain_name''; - longDescription = ''This is a Domain Name manipulation library for Ruby. - -It can also be used for cookie domain validation based on the Public -Suffix List. -''; - }; - name = ''domain_name-0.5.21''; - requiredGems = [ g.unf_0_1_4 ]; - sha256 = ''1ryb2gmryzcrqm9gl19658m1kcjkjz5m0r24mzq4j0zfrs95nfnq''; - }; - dotenv_0_11_1 = { - basename = ''dotenv''; - meta = { - description = ''Loads environment variables from `.env`.''; - homepage = ''https://github.com/bkeepers/dotenv''; - longDescription = ''Loads environment variables from `.env`.''; - }; - name = ''dotenv-0.11.1''; - requiredGems = [ g.dotenv_deployment_0_0_2 ]; - sha256 = ''09z0y0d6bks7i0sqvd8szfqj9i1kkj01anzly7shi83b3gxhrq9m''; - }; - dotenv_deployment_0_0_2 = { - basename = ''dotenv_deployment''; - meta = { - description = ''Deployment concerns for dotenv''; - homepage = ''https://github.com/bkeepers/dotenv-deployment''; - }; - name = ''dotenv-deployment-0.0.2''; - requiredGems = [ ]; - sha256 = ''1ad66jq9a09qq1js8wsyil97018s7y6x0vzji0dy34gh65sbjz8c''; - }; - em_resolv_replace_1_1_3 = { - basename = ''em_resolv_replace''; - meta = { - description = ''EventMachine-aware DNS lookup for Ruby''; - homepage = ''http://github.com/mperham/em-resolv-replace''; - }; - name = ''em-resolv-replace-1.1.3''; - requiredGems = [ ]; - sha256 = ''1w5y4rzmp51ni56v05qwgay5wrs2i6i3q92pvlcrghmhxhgsbqg7''; - }; - erubis_2_7_0 = { - basename = ''erubis''; - meta = { - description = ''a fast and extensible eRuby implementation which supports multi-language''; - homepage = ''http://www.kuwata-lab.com/erubis/''; - longDescription = '' Erubis is an implementation of eRuby and has the following features: - - * Very fast, almost three times faster than ERB and about 10% faster than eruby. - * Multi-language support (Ruby/PHP/C/Java/Scheme/Perl/Javascript) - * Auto escaping support - * Auto trimming spaces around '<% %>' - * Embedded pattern changeable (default '<% %>') - * Enable to handle Processing Instructions (PI) as embedded pattern (ex. '<?rb ... ?>') - * Context object available and easy to combine eRuby template with YAML datafile - * Print statement available - * Easy to extend and customize in subclass - * Ruby on Rails support -''; - }; - name = ''erubis-2.7.0''; - requiredGems = [ ]; - sha256 = ''1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3''; - }; - ethon_0_7_1 = { - basename = ''ethon''; - meta = { - description = ''Libcurl wrapper.''; - homepage = ''https://github.com/typhoeus/ethon''; - longDescription = ''Very lightweight libcurl wrapper.''; - }; - name = ''ethon-0.7.1''; - requiredGems = [ g.ffi_1_9_3 ]; - sha256 = ''0b762cmnj20fjlrlzk5vsndzv4ac3ybdi4vikx5c11abl7x5wbg6''; - }; - eventmachine_1_0_3 = { - basename = ''eventmachine''; - meta = { - description = ''Ruby/EventMachine library''; - homepage = ''http://rubyeventmachine.com''; - longDescription = ''EventMachine implements a fast, single-threaded engine for arbitrary network -communications. It's extremely easy to use in Ruby. EventMachine wraps all -interactions with IP sockets, allowing programs to concentrate on the -implementation of network protocols. It can be used to create both network -servers and clients. To create a server or client, a Ruby program only needs -to specify the IP address and port, and provide a Module that implements the -communications protocol. Implementations of several standard network protocols -are provided with the package, primarily to serve as examples. The real goal -of EventMachine is to enable programs to easily interface with other programs -using TCP/IP, especially if custom protocols are required.''; - }; - name = ''eventmachine-1.0.3''; - requiredGems = [ ]; - sha256 = ''09sqlsb6x9ddlgfw5gsw7z0yjg5m2qfjiqkz2fx70zsizj3lqhil''; - }; - eventmachine_tail_0_6_4 = { - basename = ''eventmachine_tail''; - meta = { - description = ''eventmachine tail - a file tail implementation with glob support''; - homepage = ''http://code.google.com/p/semicomplete/wiki/EventMachineTail''; - longDescription = ''Add file 'tail' implemented with EventMachine. Also includes a 'glob watch' class for watching a directory pattern for new matches, like /var/log/*.log''; - }; - name = ''eventmachine-tail-0.6.4''; - requiredGems = [ g.eventmachine_1_0_3 ]; - sha256 = ''1pvlb34vdzd81kf9f3xyibb4f55xjqm7lqqy28dgyci5cyv50y61''; - }; - excon_0_39_5 = { - basename = ''excon''; - meta = { - description = ''speed, persistence, http(s)''; - homepage = ''https://github.com/excon/excon''; - longDescription = ''EXtended http(s) CONnections''; - }; - name = ''excon-0.39.5''; - requiredGems = [ ]; - sha256 = ''04dgrjq6b955bv2bps0g59gvn089mz8339nhlqksjf9jimgjglcq''; - }; - execjs_2_2_1 = { - basename = ''execjs''; - meta = { - description = ''Run JavaScript code from Ruby''; - homepage = ''https://github.com/sstephenson/execjs''; - longDescription = ''ExecJS lets you run JavaScript code from Ruby.''; - }; - name = ''execjs-2.2.1''; - requiredGems = [ ]; - sha256 = ''1s41g9qwq0h4452q4gp934lnkzfkxh4wrg8fd4bcynba86bf3j8b''; - }; - fakes3_0_1_5_2 = { - basename = ''fakes3''; - meta = { - description = ''FakeS3 is a server that simulates S3 commands so you can test your S3 functionality in your projects''; - longDescription = ''Use FakeS3 to test basic S3 functionality without actually connecting to S3''; - }; - name = ''fakes3-0.1.5.2''; - requiredGems = [ g.thor_0_19_1 g.builder_3_2_2 ]; - sha256 = ''1gmg428s1jpdwn7bd9pi4ikxg8440nq9yqs22wv0k355z5cqb8by''; - }; - faraday_0_9_0 = { - basename = ''faraday''; - meta = { - description = ''HTTP/REST API client library.''; - homepage = ''https://github.com/lostisland/faraday''; - }; - name = ''faraday-0.9.0''; - requiredGems = [ g.multipart_post_2_0_0 ]; - sha256 = ''13wi8y7j6mp0mszps50gqr0fyddiz45wqkvpnnrv797gklr9sh46''; - }; - faraday_middleware_0_9_1 = { - basename = ''faraday_middleware''; - meta = { - description = ''Various middleware for Faraday''; - homepage = ''https://github.com/lostisland/faraday_middleware''; - longDescription = ''Various middleware for Faraday''; - }; - name = ''faraday_middleware-0.9.1''; - requiredGems = [ g.faraday_0_9_0 ]; - sha256 = ''1kndkrww1biz9j64fnyaqgis1gdiawxfv0ncadsz06gd555fgs6q''; - }; - fast_stemmer_1_0_2 = { - basename = ''fast_stemmer''; - meta = { - description = ''Fast Porter stemmer based on a C version of algorithm''; - homepage = ''http://github.com/romanbsd/fast-stemmer''; - longDescription = ''Fast Porter stemmer based on a C version of algorithm''; - }; - name = ''fast-stemmer-1.0.2''; - requiredGems = [ ]; - sha256 = ''0688clyk4xxh3kdb18vi089k90mca8ji5fwaknh3da5wrzcrzanh''; - }; - ffi_1_9_3 = { - basename = ''ffi''; - meta = { - description = ''Ruby FFI''; - homepage = ''http://wiki.github.com/ffi/ffi''; - longDescription = ''Ruby FFI library''; - }; - name = ''ffi-1.9.3''; - requiredGems = [ ]; - sha256 = ''0873h6jp3v65mll7av9bxlzp9m9l1cc66j0krg0llchwbh4pv5sp''; - }; - file_tail_1_0_12 = { - basename = ''file_tail''; - meta = { - description = ''File::Tail for Ruby''; - homepage = ''http://github.com/flori/file-tail''; - longDescription = ''Library to tail files in Ruby''; - }; - name = ''file-tail-1.0.12''; - requiredGems = [ g.tins_0_13_2 ]; - sha256 = ''0mzxxnwj7k5pwxs0rdbmb3b41zgvzw7x40sf3qlkch4zdfx91i1j''; - }; - foreman_0_75_0 = { - basename = ''foreman''; - meta = { - description = ''Process manager for applications with multiple components''; - homepage = ''http://github.com/ddollar/foreman''; - longDescription = ''Process manager for applications with multiple components''; - }; - name = ''foreman-0.75.0''; - requiredGems = [ g.thor_0_19_1 g.dotenv_0_11_1 ]; - sha256 = ''0iicqdjwwms86nchk80ia7x4wjcd3p5c8s53bc0z0h063i0ks9ha''; - }; - gettext_3_1_4 = { - basename = ''gettext''; - meta = { - description = ''Gettext is a pure Ruby libary and tools to localize messages.''; - homepage = ''http://ruby-gettext.github.com/''; - longDescription = ''Gettext is a GNU gettext-like program for Ruby. -The catalog file(po-file) is same format with GNU gettext. -So you can use GNU gettext tools for maintaining. -''; - }; - name = ''gettext-3.1.4''; - requiredGems = [ g.locale_2_1_0 g.text_1_3_0 ]; - sha256 = ''0gfnbkj2knpq8jxplkdr18by64kcadqxjhrxr3ncldz2ghm5zhvb''; - }; - gh_0_13_2 = { - basename = ''gh''; - meta = { - description = ''layered github client''; - homepage = ''http://gh.rkh.im/''; - longDescription = ''multi-layer client for the github api v3''; - }; - name = ''gh-0.13.2''; - requiredGems = [ g.faraday_0_9_0 g.backports_3_6_1 g.multi_json_1_10_1 g.addressable_2_3_6 g.net_http_persistent_2_9_4 g.net_http_pipeline_1_0_1 ]; - sha256 = ''17scqa35j6ghpykzk986gnd6dvbrh8nn60ib04hb2gbyh9dns1dj''; - }; - gherkin_2_12_2 = { - basename = ''gherkin''; - meta = { - description = ''gherkin-2.12.2''; - homepage = ''http://github.com/cucumber/gherkin''; - longDescription = ''A fast Gherkin lexer/parser based on the Ragel State Machine Compiler.''; - }; - name = ''gherkin-2.12.2''; - requiredGems = [ g.multi_json_1_10_1 ]; - sha256 = ''1mxfgw15pii1jmq00xxbyp77v71mh3bp99ndgwzfwkxvbcisha25''; - }; - heroku_3_10_3 = { - basename = ''heroku''; - meta = { - description = ''Client library and CLI to deploy apps on Heroku.''; - homepage = ''http://heroku.com/''; - longDescription = ''Client library and command-line tool to deploy and manage apps on Heroku.''; - }; - name = ''heroku-3.10.3''; - requiredGems = [ g.heroku_api_0_3_19 g.launchy_2_4_2 g.netrc_0_7_7 g.rest_client_1_6_7 g.rubyzip_0_9_9 ]; - sha256 = ''04j9rndygkf5gkv2w5a29wvn683viskhaqyj4fsvnj02qfhfrvnr''; - }; - heroku_api_0_3_19 = { - basename = ''heroku_api''; - meta = { - description = ''Ruby Client for the Heroku API''; - homepage = ''http://github.com/heroku/heroku.rb''; - longDescription = ''Ruby Client for the Heroku API''; - }; - name = ''heroku-api-0.3.19''; - requiredGems = [ g.excon_0_39_5 g.multi_json_1_10_1 ]; - sha256 = ''08wddhsnvjyb2a1wl85gbb00rjb1xs26pjlkd068635hi6wmx2id''; - }; - highline_1_6_21 = { - basename = ''highline''; - meta = { - description = ''HighLine is a high-level command-line IO library.''; - homepage = ''http://highline.rubyforge.org''; - longDescription = ''A high-level IO library that provides validation, type conversion, and more for -command-line interfaces. HighLine also includes a complete menu system that can -crank out anything from simple list selection to complete shells with just -minutes of work. -''; - }; - name = ''highline-1.6.21''; - requiredGems = [ ]; - sha256 = ''06bml1fjsnrhd956wqq5k3w8cyd09rv1vixdpa3zzkl6xs72jdn1''; - }; - hike_1_2_3 = { - basename = ''hike''; - meta = { - description = ''Find files in a set of paths''; - homepage = ''http://github.com/sstephenson/hike''; - longDescription = ''A Ruby library for finding files in a set of paths.''; - }; - name = ''hike-1.2.3''; - requiredGems = [ ]; - sha256 = ''0i6c9hrszzg3gn2j41v3ijnwcm8cc2931fnjiv6mnpl4jcjjykhm''; - }; - hitimes_1_2_2 = { - basename = ''hitimes''; - meta = { - description = ''Hitimes is a fast, high resolution timer library for recording performance metrics. It uses the appropriate low method calls for each system to get the highest granularity time increments possible.''; - homepage = ''http://github.com/copiousfreetime/hitimes''; - longDescription = ''Hitimes is a fast, high resolution timer library for recording performance metrics. It uses the appropriate low method calls for each system to get the highest granularity time increments possible. It currently supports any of the following systems: * any system with the POSIX call `clock_gettime()` * Mac OS X * Windows * JRuby Using Hitimes can be faster than using a series of `Time.new` calls, and it will have a much higher granularity. It is definitely faster than using `Process.times`.''; - }; - name = ''hitimes-1.2.2''; - requiredGems = [ ]; - sha256 = ''17y3ggqxl3m6x9gqpgdn39z0pxpmw666d40r39bs7ngdmy680jn4''; - }; - hoe_3_7_1 = { - basename = ''hoe''; - meta = { - description = ''Hoe is a rake/rubygems helper for project Rakefiles''; - homepage = ''http://www.zenspider.com/projects/hoe.html''; - longDescription = ''Hoe is a rake/rubygems helper for project Rakefiles. It helps you -manage, maintain, and release your project and includes a dynamic -plug-in system allowing for easy extensibility. Hoe ships with -plug-ins for all your usual project tasks including rdoc generation, -testing, packaging, deployment, and announcement.. - -See class rdoc for help. Hint: `ri Hoe` or any of the plugins listed -below. - -For extra goodness, see: http://seattlerb.rubyforge.org/hoe/Hoe.pdf''; - }; - name = ''hoe-3.7.1''; - requiredGems = [ g.rake_10_3_2 ]; - sha256 = ''0lyrdbzxj4isxzyfp93w0q1g9sqw6grkjp91xirzlw1z1714qsw3''; - }; - http_cookie_1_0_2 = { - basename = ''http_cookie''; - meta = { - description = ''A Ruby library to handle HTTP Cookies based on RFC 6265''; - homepage = ''https://github.com/sparklemotion/http-cookie''; - longDescription = ''HTTP::Cookie is a Ruby library to handle HTTP Cookies based on RFC 6265. It has with security, standards compliance and compatibility in mind, to behave just the same as today's major web browsers. It has builtin support for the legacy cookies.txt and the latest cookies.sqlite formats of Mozilla Firefox, and its modular API makes it easy to add support for a new backend store.''; - }; - name = ''http-cookie-1.0.2''; - requiredGems = [ g.domain_name_0_5_21 ]; - sha256 = ''0cz2fdkngs3jc5w32a6xcl511hy03a7zdiy988jk1sf3bf5v3hdw''; - }; - i18n_0_6_11 = { - basename = ''i18n''; - meta = { - description = ''New wave Internationalization support for Ruby''; - homepage = ''http://github.com/svenfuchs/i18n''; - longDescription = ''New wave Internationalization support for Ruby.''; - }; - name = ''i18n-0.6.11''; - requiredGems = [ ]; - sha256 = ''0fwjlgmgry2blf8zlxn9c555cf4a16p287l599kz5104ncjxlzdk''; - }; - iconv_1_0_4 = { - basename = ''iconv''; - meta = { - description = ''iconv wrapper library''; - homepage = ''https://github.com/nurse/iconv''; - longDescription = ''iconv wrapper library''; - }; - name = ''iconv-1.0.4''; - requiredGems = [ ]; - sha256 = ''16sgj6gqs4bgwv6q4vv811fb43908psr33dz7sphn1z8la3y7m2v''; - }; - jekyll_2_4_0 = { - basename = ''jekyll''; - meta = { - description = ''A simple, blog aware, static site generator.''; - homepage = ''https://github.com/jekyll/jekyll''; - longDescription = ''Jekyll is a simple, blog aware, static site generator.''; - }; - name = ''jekyll-2.4.0''; - requiredGems = [ g.liquid_2_6_1 g.kramdown_1_4_2 g.mercenary_0_3_4 g.safe_yaml_1_0_3 g.colorator_0_1 g.pygments_rb_0_6_0 g.redcarpet_3_1_2 g.toml_0_1_1 g.jekyll_paginate_1_0_0 g.jekyll_gist_1_1_0 g.jekyll_coffeescript_1_0_1 g.jekyll_sass_converter_1_2_1 g.jekyll_watch_1_1_1 g.classifier_reborn_2_0_1 ]; - sha256 = ''1n8m0cw91yayvcspqi3x9y9y0nahagg0sy8r6pn0zplqg1vh7y1l''; - }; - jekyll_coffeescript_1_0_1 = { - basename = ''jekyll_coffeescript''; - meta = { - description = ''A CoffeeScript converter for Jekyll.''; - homepage = ''https://github.com/jekyll/jekyll-coffeescript''; - }; - name = ''jekyll-coffeescript-1.0.1''; - requiredGems = [ g.coffee_script_2_3_0 ]; - sha256 = ''19nkqbaxqbzqbfbi7sgshshj2krp9ap88m9fc5pa6mglb2ypk3hg''; - }; - jekyll_gist_1_1_0 = { - basename = ''jekyll_gist''; - meta = { - description = ''Liquid tag for displaying GitHub Gists in Jekyll sites.''; - homepage = ''https://github.com/jekyll/jekyll-gist''; - }; - name = ''jekyll-gist-1.1.0''; - requiredGems = [ ]; - sha256 = ''06d4jwf64fl7x3dqfimnfqzr4d3wbsdz2l4fif35j91mmh37nmq9''; - }; - jekyll_paginate_1_0_0 = { - basename = ''jekyll_paginate''; - meta = { - description = ''Built-in Pagination Generator for Jekyll''; - homepage = ''https://github.com/jekyll/jekyll-paginate''; - }; - name = ''jekyll-paginate-1.0.0''; - requiredGems = [ ]; - sha256 = ''1p01c3mncqrzyiskggdxd4cka1fl4ydlphhzbcfx9pylhrishkjk''; - }; - jekyll_sass_converter_1_2_1 = { - basename = ''jekyll_sass_converter''; - meta = { - description = ''A basic Sass converter for Jekyll.''; - homepage = ''https://github.com/jekyll/jekyll-sass-converter''; - }; - name = ''jekyll-sass-converter-1.2.1''; - requiredGems = [ g.sass_3_4_5 ]; - sha256 = ''1w221nzcpaqh2llflciwhbzw1sqxjavwwzbri9n4qkj057a73ar1''; - }; - jekyll_watch_1_1_1 = { - basename = ''jekyll_watch''; - meta = { - description = ''Rebuild your Jekyll site when a file changes with the `--watch` switch.''; - homepage = ''https://github.com/jekyll/jekyll-watch''; - }; - name = ''jekyll-watch-1.1.1''; - requiredGems = [ g.listen_2_7_9 ]; - sha256 = ''0q0skw4fjfrjaskfdvkknfy81a1pbr0mlhc2lrbpb533l5xm3gwz''; - }; - jsduck_5_3_4 = { - basename = ''jsduck''; - meta = { - description = ''Simple JavaScript Duckumentation generator''; - homepage = ''https://github.com/senchalabs/jsduck''; - longDescription = ''Documentation generator for Sencha JS frameworks''; - }; - name = ''jsduck-5.3.4''; - requiredGems = [ g.rdiscount_2_1_7_1 g.json_1_8_1 g.parallel_0_7_1 g.rkelly_remix_0_0_6 g.dimensions_1_2_0 ]; - sha256 = ''0hac7g9g6gg10bigbm8dskwwbv1dfch8ca353gh2bkwf244qq2xr''; - }; - json_1_8_1 = { - basename = ''json''; - meta = { - description = ''JSON Implementation for Ruby''; - homepage = ''http://flori.github.com/json''; - longDescription = ''This is a JSON implementation as a Ruby extension in C.''; - }; - name = ''json-1.8.1''; - requiredGems = [ ]; - sha256 = ''0002bsycvizvkmk1jyv8px1hskk6wrjfk4f7x5byi8gxm6zzn6wn''; - }; - json_pure_1_8_0 = { - basename = ''json_pure''; - meta = { - description = ''JSON Implementation for Ruby''; - homepage = ''http://flori.github.com/json''; - longDescription = ''This is a JSON implementation in pure Ruby.''; - }; - name = ''json_pure-1.8.0''; - requiredGems = [ ]; - sha256 = ''0kkn5zhiffav2cffj43wwvzj07825r4j463ilfjgik034vnbjs83''; - }; - kramdown_1_4_2 = { - basename = ''kramdown''; - meta = { - description = ''kramdown is a fast, pure-Ruby Markdown-superset converter.''; - homepage = ''http://kramdown.gettalong.org''; - longDescription = ''kramdown is yet-another-markdown-parser but fast, pure Ruby, -using a strict syntax definition and supporting several common extensions. -''; - }; - name = ''kramdown-1.4.2''; - requiredGems = [ ]; - sha256 = ''1a1y2a7aysx45qhc6dpbfnlcs1syp04ix12q62f6z84zqrb996xf''; - }; - launchy_2_4_2 = { - basename = ''launchy''; - meta = { - description = ''Launchy is helper class for launching cross-platform applications in a fire and forget manner.''; - homepage = ''http://github.com/copiousfreetime/launchy''; - longDescription = ''Launchy is helper class for launching cross-platform applications in a fire and forget manner. There are application concepts (browser, email client, etc) that are common across all platforms, and they may be launched differently on each platform. Launchy is here to make a common approach to launching external application from within ruby programs.''; - }; - name = ''launchy-2.4.2''; - requiredGems = [ g.addressable_2_3_6 ]; - sha256 = ''0i1nmlrqpnk2q6f7iq85cqaa7b8fw4bmqm57w60g92lsfmszs8iv''; - }; - liquid_2_6_1 = { - basename = ''liquid''; - meta = { - description = ''A secure, non-evaling end user template engine with aesthetic markup.''; - homepage = ''http://www.liquidmarkup.org''; - }; - name = ''liquid-2.6.1''; - requiredGems = [ ]; - sha256 = ''0fc67cx36x05hsw0cc56la4qr3939g34cdgqmqgdi8yzs72cbv7x''; - }; - listen_2_7_9 = { - basename = ''listen''; - meta = { - description = ''Listen to file modifications''; - homepage = ''https://github.com/guard/listen''; - longDescription = ''The Listen gem listens to file modifications and notifies you about the changes. Works everywhere!''; - }; - name = ''listen-2.7.9''; - requiredGems = [ g.celluloid_0_16_0 g.rb_fsevent_0_9_4 g.rb_inotify_0_9_5 ]; - sha256 = ''1i9m8fc1w8khwpjxfv9430bqbl4df128i4r8gskgvi3pd4678llf''; - }; - locale_2_1_0 = { - basename = ''locale''; - meta = { - description = ''Ruby-Locale is the pure ruby library which provides basic APIs for localization.''; - homepage = ''https://github.com/ruby-gettext/locale''; - longDescription = ''Ruby-Locale is the pure ruby library which provides basic APIs for localization. -''; - }; - name = ''locale-2.1.0''; - requiredGems = [ ]; - sha256 = ''18bb0g24flq9dr8qv4j7pm7w9i2vmvmqrbmry95ibf1r1c4s60yj''; - }; - lockfile_2_1_3 = { - basename = ''lockfile''; - meta = { - description = ''lockfile''; - homepage = ''https://github.com/ahoward/lockfile''; - longDescription = ''a ruby library for creating perfect and NFS safe lockfiles''; - }; - name = ''lockfile-2.1.3''; - requiredGems = [ ]; - sha256 = ''0dij3ijywylvfgrpi2i0k17f6w0wjhnjjw0k9030f54z56cz7jrr''; - }; - macaddr_1_7_1 = { - basename = ''macaddr''; - meta = { - description = ''macaddr''; - homepage = ''https://github.com/ahoward/macaddr''; - longDescription = ''cross platform mac address determination for ruby''; - }; - name = ''macaddr-1.7.1''; - requiredGems = [ g.systemu_2_6_4 ]; - sha256 = ''1clii8mvhmh5lmnm95ljnjygyiyhdpja85c5vy487rhxn52scn0b''; - }; - mail_2_6_1 = { - basename = ''mail''; - meta = { - description = ''Mail provides a nice Ruby DSL for making, sending and reading emails.''; - homepage = ''http://github.com/mikel/mail''; - longDescription = ''A really Ruby Mail handler.''; - }; - name = ''mail-2.6.1''; - requiredGems = [ g.mime_types_2_3 ]; - sha256 = ''17gsw57nc7ihk4xnbq9lidzv6h1ivh4l5m16hy790vs219n22mhx''; - }; - mechanize_2_7_3 = { - basename = ''mechanize''; - meta = { - description = ''The Mechanize library is used for automating interaction with websites''; - homepage = ''http://mechanize.rubyforge.org''; - longDescription = ''The Mechanize library is used for automating interaction with websites. -Mechanize automatically stores and sends cookies, follows redirects, -and can follow links and submit forms. Form fields can be populated and -submitted. Mechanize also keeps track of the sites that you have visited as -a history.''; - }; - name = ''mechanize-2.7.3''; - requiredGems = [ g.net_http_digest_auth_1_4 g.net_http_persistent_2_9_4 g.mime_types_2_3 g.http_cookie_1_0_2 g.nokogiri_1_6_3_1 g.ntlm_http_0_1_1 g.webrobots_0_1_1 g.domain_name_0_5_21 ]; - sha256 = ''00jkazj8fqnynaxca0lnwx5a084irxrnw8n8i0kppq4vg71g7rrx''; - }; - mercenary_0_3_4 = { - basename = ''mercenary''; - meta = { - description = ''Lightweight and flexible library for writing command-line apps in Ruby.''; - homepage = ''https://github.com/jekyll/mercenary''; - longDescription = ''Lightweight and flexible library for writing command-line apps in Ruby.''; - }; - name = ''mercenary-0.3.4''; - requiredGems = [ ]; - sha256 = ''0fg8pbixs68aqx6slp7cpbl0cwa8c4x8rf1s66f7icqa6i9ifcfn''; - }; - method_source_0_8_2 = { - basename = ''method_source''; - meta = { - description = ''retrieve the sourcecode for a method''; - homepage = ''http://banisterfiend.wordpress.com''; - longDescription = ''retrieve the sourcecode for a method''; - }; - name = ''method_source-0.8.2''; - requiredGems = [ ]; - sha256 = ''1g5i4w0dmlhzd18dijlqw5gk27bv6dj2kziqzrzb7mpgxgsd1sf2''; - }; - mime_types_2_3 = { - basename = ''mime_types''; - meta = { - description = ''The mime-types library provides a library and registry for information about MIME content type definitions''; - homepage = ''https://github.com/halostatue/mime-types/''; - longDescription = ''The mime-types library provides a library and registry for information about -MIME content type definitions. It can be used to determine defined filename -extensions for MIME types, or to use filename extensions to look up the likely -MIME type definitions. - -MIME content types are used in MIME-compliant communications, as in e-mail or -HTTP traffic, to indicate the type of content which is transmitted. The -mime-types library provides the ability for detailed information about MIME -entities (provided as an enumerable collection of MIME::Type objects) to be -determined and used programmatically. There are many types defined by RFCs and -vendors, so the list is long but by definition incomplete; don't hesitate to to -add additional type definitions (see Contributing.rdoc). The primary sources -for MIME type definitions found in mime-types is the IANA collection of -registrations (see below for the link), RFCs, and W3C recommendations. - -This is release 2.2, mostly changing how the MIME type registry is updated from -the IANA registry (the format of which was incompatibly changed shortly before -this release) and taking advantage of the extra data available from IANA -registry in the form of MIME::Type#xrefs. In addition, the {LTSW -list}[http://www.ltsw.se/knbase/internet/mime.htp] has been dropped as a -supported list. - -As a reminder, mime-types 2.x is no longer compatible with Ruby 1.8 and -mime-types 1.x is only being maintained for security issues. No new MIME types -or features will be added. - -mime-types (previously called MIME::Types for Ruby) was originally based on -MIME::Types for Perl by Mark Overmeer, copyright 2001 - 2009. It is built to -conform to the MIME types of RFCs 2045 and 2231. It tracks the {IANA Media -Types registry}[https://www.iana.org/assignments/media-types/media-types.xhtml] -with some types added by the users of mime-types.''; - }; - name = ''mime-types-2.3''; - requiredGems = [ ]; - sha256 = ''0j0mwzr2q9fmisp3r8rp7j95dns2gw7sd8c5sb5y6z0dfj56a4vd''; - }; - mini_portile_0_6_0 = { - basename = ''mini_portile''; - meta = { - description = ''Simplistic port-like solution for developers''; - homepage = ''http://github.com/luislavena/mini_portile''; - longDescription = ''Simplistic port-like solution for developers. It provides a standard and simplified way to compile against dependency libraries without messing up your system.''; - }; - name = ''mini_portile-0.6.0''; - requiredGems = [ ]; - sha256 = ''09kcn4g63xrdirgwxgjikqg976rr723bkc9bxfr29pk22cj3wavn''; - }; - minitar_0_5_4 = { - basename = ''minitar''; - meta = { - description = ''Provides POSIX tarchive management from Ruby programs.''; - homepage = ''http://www.github.com/atoulme/minitar''; - longDescription = ''Archive::Tar::Minitar is a pure-Ruby library and command-line utility that provides the ability to deal with POSIX tar(1) archive files. The implementation is based heavily on Mauricio Ferna'ndez's implementation in rpa-base, but has been reorganised to promote reuse in other projects. Antoine Toulme forked the original project on rubyforge to place it on github, under http://www.github.com/atoulme/minitar''; - }; - name = ''minitar-0.5.4''; - requiredGems = [ ]; - sha256 = ''1vpdjfmdq1yc4i620frfp9af02ia435dnpj8ybsd7dc3rypkvbka''; - }; - minitest_5_4_1 = { - basename = ''minitest''; - meta = { - description = ''minitest provides a complete suite of testing facilities supporting TDD, BDD, mocking, and benchmarking''; - homepage = ''https://github.com/seattlerb/minitest''; - longDescription = ''minitest provides a complete suite of testing facilities supporting -TDD, BDD, mocking, and benchmarking. - - "I had a class with Jim Weirich on testing last week and we were - allowed to choose our testing frameworks. Kirk Haines and I were - paired up and we cracked open the code for a few test - frameworks... - - I MUST say that minitest is *very* readable / understandable - compared to the 'other two' options we looked at. Nicely done and - thank you for helping us keep our mental sanity." - - -- Wayne E. Seguin - -minitest/unit is a small and incredibly fast unit testing framework. -It provides a rich set of assertions to make your tests clean and -readable. - -minitest/spec is a functionally complete spec engine. It hooks onto -minitest/unit and seamlessly bridges test assertions over to spec -expectations. - -minitest/benchmark is an awesome way to assert the performance of your -algorithms in a repeatable manner. Now you can assert that your newb -co-worker doesn't replace your linear algorithm with an exponential -one! - -minitest/mock by Steven Baker, is a beautifully tiny mock (and stub) -object framework. - -minitest/pride shows pride in testing and adds coloring to your test -output. I guess it is an example of how to write IO pipes too. :P - -minitest/unit is meant to have a clean implementation for language -implementors that need a minimal set of methods to bootstrap a working -test suite. For example, there is no magic involved for test-case -discovery. - - "Again, I can't praise enough the idea of a testing/specing - framework that I can actually read in full in one sitting!" - - -- Piotr Szotkowski - -Comparing to rspec: - - rspec is a testing DSL. minitest is ruby. - - -- Adam Hawkins, "Bow Before MiniTest" - -minitest doesn't reinvent anything that ruby already provides, like: -classes, modules, inheritance, methods. This means you only have to -learn ruby to use minitest and all of your regular OO practices like -extract-method refactorings still apply.''; - }; - name = ''minitest-5.4.1''; - requiredGems = [ ]; - sha256 = ''04iqz25v8vngw4z5pzhwnsf72fb8gf2vzhidrfcbphwsqqik5s4r''; - }; - multi_json_1_10_1 = { - basename = ''multi_json''; - meta = { - description = ''A common interface to multiple JSON libraries.''; - homepage = ''http://github.com/intridea/multi_json''; - longDescription = ''A common interface to multiple JSON libraries, including Oj, Yajl, the JSON gem (with C-extensions), the pure-Ruby JSON gem, NSJSONSerialization, gson.rb, JrJackson, and OkJson.''; - }; - name = ''multi_json-1.10.1''; - requiredGems = [ ]; - sha256 = ''1ll21dz01jjiplr846n1c8yzb45kj5hcixgb72rz0zg8fyc9g61c''; - }; - multi_json_1_3_6 = { - basename = ''multi_json''; - meta = { - description = ''A gem to provide swappable JSON backends.''; - homepage = ''http://github.com/intridea/multi_json''; - longDescription = ''A gem to provide easy switching between different JSON backends, including Oj, Yajl, the JSON gem (with C-extensions), the pure-Ruby JSON gem, and OkJson.''; - }; - name = ''multi_json-1.3.6''; - requiredGems = [ ]; - sha256 = ''0q2zjfvd2ibds9g9nzf2p1b47fc1wqliwfywv5pw85w15lmy91yr''; - }; - multi_test_0_1_1 = { - basename = ''multi_test''; - meta = { - description = ''multi-test-0.1.1''; - homepage = ''http://cukes.info''; - longDescription = ''Wafter-thin gem to help control rogue test/unit/autorun requires''; - }; - name = ''multi_test-0.1.1''; - requiredGems = [ ]; - sha256 = ''1dd810limbdc8k7ss83g83krrsjjqs79nicbdxk74l1a2sp2jhwv''; - }; - multipart_post_2_0_0 = { - basename = ''multipart_post''; - meta = { - description = ''A multipart form post accessory for Net::HTTP.''; - homepage = ''https://github.com/nicksieger/multipart-post''; - longDescription = ''Use with Net::HTTP to do multipart form posts. IO values that have #content_type, #original_filename, and #local_path will be posted as a binary file.''; - }; - name = ''multipart-post-2.0.0''; - requiredGems = [ ]; - sha256 = ''09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x''; - }; - net_http_digest_auth_1_4 = { - basename = ''net_http_digest_auth''; - meta = { - description = ''An implementation of RFC 2617 - Digest Access Authentication''; - homepage = ''http://github.com/drbrain/net-http-digest_auth''; - longDescription = ''An implementation of RFC 2617 - Digest Access Authentication. At this time -the gem does not drop in to Net::HTTP and can be used for with other HTTP -clients. - -In order to use net-http-digest_auth you'll need to perform some request -wrangling on your own. See the class documentation at Net::HTTP::DigestAuth -for an example.''; - }; - name = ''net-http-digest_auth-1.4''; - requiredGems = [ ]; - sha256 = ''14801gr34g0rmqz9pv4rkfa3crfdbyfk6r48vpg5a5407v0sixqi''; - }; - net_http_persistent_2_9_4 = { - basename = ''net_http_persistent''; - meta = { - description = ''Manages persistent connections using Net::HTTP plus a speed fix for Ruby 1.8''; - homepage = ''http://docs.seattlerb.org/net-http-persistent''; - longDescription = ''Manages persistent connections using Net::HTTP plus a speed fix for Ruby 1.8. -It's thread-safe too! - -Using persistent HTTP connections can dramatically increase the speed of HTTP. -Creating a new HTTP connection for every request involves an extra TCP -round-trip and causes TCP congestion avoidance negotiation to start over. - -Net::HTTP supports persistent connections with some API methods but does not -handle reconnection gracefully. Net::HTTP::Persistent supports reconnection -and retry according to RFC 2616.''; - }; - name = ''net-http-persistent-2.9.4''; - requiredGems = [ ]; - sha256 = ''1y9fhaax0d9kkslyiqi1zys6cvpaqx9a0y0cywp24rpygwh4s9r4''; - }; - net_http_pipeline_1_0_1 = { - basename = ''net_http_pipeline''; - meta = { - description = ''An HTTP/1.1 pipelining implementation atop Net::HTTP''; - homepage = ''http://docs.seattlerb.org/net-http-pipeline''; - longDescription = ''An HTTP/1.1 pipelining implementation atop Net::HTTP. A pipelined connection -sends multiple requests to the HTTP server without waiting for the responses. -The server will respond in-order.''; - }; - name = ''net-http-pipeline-1.0.1''; - requiredGems = [ ]; - sha256 = ''0bxjy33yhxwsbnld8xj3zv64ibgfjn9rjpiqkyd5ipmz50pww8v9''; - }; - net_sftp_2_1_2 = { - basename = ''net_sftp''; - meta = { - description = ''A pure Ruby implementation of the SFTP client protocol''; - homepage = ''https://github.com/net-ssh/net-sftp''; - longDescription = ''A pure Ruby implementation of the SFTP client protocol''; - }; - name = ''net-sftp-2.1.2''; - requiredGems = [ g.net_ssh_2_9_1 ]; - sha256 = ''04674g4n6mryjajlcd82af8g8k95la4b1bj712dh71hw1c9vhw1y''; - }; - net_ssh_2_7_0 = { - basename = ''net_ssh''; - meta = { - description = ''Net::SSH: a pure-Ruby implementation of the SSH2 client protocol.''; - homepage = ''https://github.com/net-ssh/net-ssh''; - longDescription = ''Net::SSH: a pure-Ruby implementation of the SSH2 client protocol. It allows you to write programs that invoke and interact with processes on remote servers, via SSH2.''; - }; - name = ''net-ssh-2.7.0''; - requiredGems = [ ]; - sha256 = ''14v0cq2fws54kxpgz249xmjlajynhcs4s2szl8kjxgn4c78lrkmr''; - }; - net_ssh_2_9_1 = { - basename = ''net_ssh''; - meta = { - description = ''Net::SSH: a pure-Ruby implementation of the SSH2 client protocol.''; - homepage = ''https://github.com/net-ssh/net-ssh''; - longDescription = ''Net::SSH: a pure-Ruby implementation of the SSH2 client protocol. It allows you to write programs that invoke and interact with processes on remote servers, via SSH2.''; - }; - name = ''net-ssh-2.9.1''; - requiredGems = [ ]; - sha256 = ''1vscp4r58jisiigqc6d6752w19m1m6hmi3jkzmp3ydxai7h3jb2j''; - }; - netrc_0_7_7 = { - basename = ''netrc''; - meta = { - description = ''Library to read and write netrc files.''; - homepage = ''https://github.com/geemus/netrc''; - longDescription = ''This library can read and update netrc files, preserving formatting including comments and whitespace.''; - }; - name = ''netrc-0.7.7''; - requiredGems = [ ]; - sha256 = ''1y64v93hsxdwgx3dfkyzdki3zqd1slm42dmi23v0zy3kap4vpard''; - }; - nix_0_1_1 = { - basename = ''nix''; - meta = { - description = ''Nix package manager interface''; - homepage = ''http://gitorious.org/ruby-nix''; - longDescription = ''Adds 'gem nix' command that dumps given set of gems to format suitable for Nix package manager''; - }; - name = ''nix-0.1.1''; - requiredGems = [ ]; - sha256 = ''0kwrbkkg0gxibhsz9dpd5zabcf2wqsicg28yiazyb3dc9dslk26k''; - }; - nokogiri_1_6_3_1 = { - basename = ''nokogiri''; - meta = { - description = ''Nokogiri (鋸) is an HTML, XML, SAX, and Reader parser''; - homepage = ''http://nokogiri.org''; - longDescription = ''Nokogiri (鋸) is an HTML, XML, SAX, and Reader parser. Among Nokogiri's -many features is the ability to search documents via XPath or CSS3 selectors. - -XML is like violence - if it doesn’t solve your problems, you are not using -enough of it.''; - }; - name = ''nokogiri-1.6.3.1''; - requiredGems = [ g.mini_portile_0_6_0 ]; - sha256 = ''11958hlfd8i3i9y0wk1b6ck9x0j95l4zdbbixmdnnh1r8ijilxli''; - }; - ntlm_http_0_1_1 = { - basename = ''ntlm_http''; - meta = { - description = ''Ruby/NTLM HTTP library.''; - homepage = ''http://www.mindflowsolutions.net''; - longDescription = ''Ruby/NTLM HTTP provides NTLM authentication over http.''; - }; - name = ''ntlm-http-0.1.1''; - requiredGems = [ ]; - sha256 = ''0yx01ffrw87wya1syivqzf8hz02axk7jdpw6aw221xwvib767d36''; - }; - orderedhash_0_0_6 = { - basename = ''orderedhash''; - meta = { - description = ''orderedhash''; - homepage = ''http://codeforpeople.com/lib/ruby/orderedhash/''; - }; - name = ''orderedhash-0.0.6''; - requiredGems = [ ]; - sha256 = ''0fryy7f9jbpx33jq5m402yqj01zcg563k9fsxlqbhmq638p4bzd7''; - }; - papertrail_0_9_10 = { - basename = ''papertrail''; - meta = { - description = ''Command-line client for Papertrail hosted log management service.''; - homepage = ''http://github.com/papertrail/papertrail-cli''; - longDescription = ''Command-line client for Papertrail hosted log management service. Tails and searches app server logs and system syslog. Supports Boolean search and works with grep and pipe output (Unix).''; - }; - name = ''papertrail-0.9.10''; - requiredGems = [ g.chronic_0_10_2 ]; - sha256 = ''1v2acc896w5q72m5pfxc8rx36gzih4fivyiqp0kxwypgyh0f0x58''; - }; - papertrail_cli_0_9_3 = { - basename = ''papertrail_cli''; - meta = { - description = ''Placeholder gem to point to new papertrail gem''; - homepage = ''http://github.com/papertrail/papertrail-cli-gem''; - longDescription = ''Placeholder gem to point to new papertrail gem.''; - }; - name = ''papertrail-cli-0.9.3''; - requiredGems = [ g.papertrail_0_9_10 ]; - sha256 = ''1914dcfqsmw5rl4xd1zwjrfbgwglyncxm8km06bgxaqn4wnaq5iv''; - }; - parallel_0_7_1 = { - basename = ''parallel''; - meta = { - description = ''Run any kind of code in parallel processes''; - homepage = ''https://github.com/grosser/parallel''; - }; - name = ''parallel-0.7.1''; - requiredGems = [ ]; - sha256 = ''1kzz6ydg7r23ks2b7zbpx4vz3h186n19vhgnjcwi7xwd6h2f1fsq''; - }; - parslet_1_5_0 = { - basename = ''parslet''; - meta = { - description = ''Parser construction library with great error reporting in Ruby.''; - homepage = ''http://kschiess.github.com/parslet''; - }; - name = ''parslet-1.5.0''; - requiredGems = [ g.blankslate_2_1_2_4 ]; - sha256 = ''0qp1m8n3m6k6g22nn1ivcfkvccq5jmbkw53vvcjw5xssq179l9z3''; - }; - posix_spawn_0_3_9 = { - basename = ''posix_spawn''; - meta = { - description = ''posix_spawnp(2) for ruby''; - homepage = ''http://github.com/rtomayko/posix-spawn''; - longDescription = ''posix-spawn uses posix_spawnp(2) for faster process spawning''; - }; - name = ''posix-spawn-0.3.9''; - requiredGems = [ ]; - sha256 = ''042i1afggy1sv2jmdjjjhyffas28xp2r1ylj5xfv3hchy3b4civ3''; - }; - pry_0_9_12_6 = { - basename = ''pry''; - meta = { - description = ''An IRB alternative and runtime developer console''; - homepage = ''http://pry.github.com''; - longDescription = ''An IRB alternative and runtime developer console''; - }; - name = ''pry-0.9.12.6''; - requiredGems = [ g.coderay_1_1_0 g.slop_3_6_0 g.method_source_0_8_2 ]; - sha256 = ''0wmgamn83m1zb1fbqc22hiszjf2a2xij5jd95w2gvm5x6l5p61q1''; - }; - pusher_client_0_6_0 = { - basename = ''pusher_client''; - meta = { - description = ''Client for consuming WebSockets from http://pusher.com''; - homepage = ''http://github.com/pusher/pusher-ruby-client''; - longDescription = ''Client for consuming WebSockets from http://pusher.com''; - }; - name = ''pusher-client-0.6.0''; - requiredGems = [ g.websocket_1_2_1 g.json_1_8_1 ]; - sha256 = ''0n7l630qg6wgzak45b6gfjg9a0fmpbrs7mwchqqbja9mjs95r8qy''; - }; - pygments_rb_0_6_0 = { - basename = ''pygments_rb''; - meta = { - description = ''pygments wrapper for ruby''; - homepage = ''https://github.com/tmm1/pygments.rb''; - longDescription = ''pygments.rb exposes the pygments syntax highlighter to Ruby''; - }; - name = ''pygments.rb-0.6.0''; - requiredGems = [ g.yajl_ruby_1_1_0 g.posix_spawn_0_3_9 ]; - sha256 = ''0jszj99cirbkxaqllbgnp9718v32xhvg08rfldvr10gy8i7bhy2s''; - }; - rack_1_5_2 = { - basename = ''rack''; - meta = { - description = ''a modular Ruby webserver interface''; - homepage = ''http://rack.github.com/''; - longDescription = ''Rack provides a minimal, modular and adaptable interface for developing -web applications in Ruby. By wrapping HTTP requests and responses in -the simplest way possible, it unifies and distills the API for web -servers, web frameworks, and software in between (the so-called -middleware) into a single method call. - -Also see http://rack.github.com/. -''; - }; - name = ''rack-1.5.2''; - requiredGems = [ ]; - sha256 = ''19szfw76cscrzjldvw30jp3461zl00w4xvw1x9lsmyp86h1g0jp6''; - }; - rack_protection_1_5_3 = { - basename = ''rack_protection''; - meta = { - description = ''You should use protection!''; - homepage = ''http://github.com/rkh/rack-protection''; - longDescription = ''You should use protection!''; - }; - name = ''rack-protection-1.5.3''; - requiredGems = [ g.rack_1_5_2 ]; - sha256 = ''0cvb21zz7p9wy23wdav63z5qzfn4nialik22yqp6gihkgfqqrh5r''; - }; - rack_test_0_6_2 = { - basename = ''rack_test''; - meta = { - description = ''Simple testing API built on Rack''; - homepage = ''http://github.com/brynary/rack-test''; - longDescription = ''Rack::Test is a small, simple testing API for Rack apps. It can be used on its -own or as a reusable starting point for Web frameworks and testing libraries -to build on. Most of its initial functionality is an extraction of Merb 1.0's -request helpers feature.''; - }; - name = ''rack-test-0.6.2''; - requiredGems = [ g.rack_1_5_2 ]; - sha256 = ''01mk715ab5qnqf6va8k3hjsvsmplrfqpz6g58qw4m3l8mim0p4ky''; - }; - rails_4_1_6 = { - basename = ''rails''; - meta = { - description = ''Full-stack web application framework.''; - homepage = ''http://www.rubyonrails.org''; - longDescription = ''Ruby on Rails is a full-stack web framework optimized for programmer happiness and sustainable productivity. It encourages beautiful code by favoring convention over configuration.''; - }; - name = ''rails-4.1.6''; - requiredGems = [ g.activesupport_4_1_6 g.actionpack_4_1_6 g.actionview_4_1_6 g.activemodel_4_1_6 g.activerecord_4_1_6 g.actionmailer_4_1_6 g.railties_4_1_6 g.bundler_1_7_3 g.sprockets_rails_2_1_4 ]; - sha256 = ''187g903gmni3prd5i768yfgszc4ak5kmrazavr93d0ybfdbcjlgk''; - }; - railties_4_1_6 = { - basename = ''railties''; - meta = { - description = ''Tools for creating, working with, and running Rails applications.''; - homepage = ''http://www.rubyonrails.org''; - longDescription = ''Rails internals: application bootup, plugins, generators, and rake tasks.''; - }; - name = ''railties-4.1.6''; - requiredGems = [ g.activesupport_4_1_6 g.actionpack_4_1_6 g.rake_10_3_2 g.thor_0_19_1 ]; - sha256 = ''11valflllkrrz06bsflz78h5nmxhrhm7hdpm1lwmgm8hwd4ybl0c''; - }; - rake_0_9_2_2 = { - basename = ''rake''; - meta = { - description = ''Ruby based make-like utility.''; - homepage = ''http://rake.rubyforge.org''; - longDescription = ''Rake is a Make-like program implemented in Ruby. Tasks and dependencies arespecified in standard Ruby syntax.''; - }; - name = ''rake-0.9.2.2''; - requiredGems = [ ]; - sha256 = ''19n4qp5gzbcqy9ajh56kgwqv9p9w2hnczhyvaqz0nlvk9diyng6q''; - }; - rake_10_3_2 = { - basename = ''rake''; - meta = { - description = ''Rake is a Make-like program implemented in Ruby''; - homepage = ''https://github.com/jimweirich/rake''; - longDescription = ''Rake is a Make-like program implemented in Ruby. Tasks and dependencies are -specified in standard Ruby syntax. - -Rake has the following features: - -* Rakefiles (rake's version of Makefiles) are completely defined in - standard Ruby syntax. No XML files to edit. No quirky Makefile - syntax to worry about (is that a tab or a space?) - -* Users can specify tasks with prerequisites. - -* Rake supports rule patterns to synthesize implicit tasks. - -* Flexible FileLists that act like arrays but know about manipulating - file names and paths. - -* A library of prepackaged tasks to make building rakefiles easier. For example, - tasks for building tarballs and publishing to FTP or SSH sites. (Formerly - tasks for building RDoc and Gems were included in rake but they're now - available in RDoc and RubyGems respectively.) - -* Supports parallel execution of tasks.''; - }; - name = ''rake-10.3.2''; - requiredGems = [ ]; - sha256 = ''0nvpkjrpsk8xxnij2wd1cdn6arja9q11sxx4aq4fz18bc6fss15m''; - }; - rb_fsevent_0_9_4 = { - basename = ''rb_fsevent''; - meta = { - description = ''Very simple & usable FSEvents API''; - homepage = ''http://rubygems.org/gems/rb-fsevent''; - longDescription = ''FSEvents API with Signals catching (without RubyCocoa)''; - }; - name = ''rb-fsevent-0.9.4''; - requiredGems = [ ]; - sha256 = ''12if5xsik64kihxf5awsyavlp595y47g9qz77vfp2zvkxgglaka7''; - }; - rb_inotify_0_9_5 = { - basename = ''rb_inotify''; - meta = { - description = ''A Ruby wrapper for Linux's inotify, using FFI''; - homepage = ''http://github.com/nex3/rb-inotify''; - longDescription = ''A Ruby wrapper for Linux's inotify, using FFI''; - }; - name = ''rb-inotify-0.9.5''; - requiredGems = [ g.ffi_1_9_3 ]; - sha256 = ''0kddx2ia0qylw3r52nhg83irkaclvrncgy2m1ywpbhlhsz1rymb9''; - }; - rdiscount_2_1_7_1 = { - basename = ''rdiscount''; - meta = { - description = ''Fast Implementation of Gruber's Markdown in C''; - homepage = ''http://dafoster.net/projects/rdiscount/''; - }; - name = ''rdiscount-2.1.7.1''; - requiredGems = [ ]; - sha256 = ''1g70vsgv7mdwcyk9rxja7wm4qqap67prqwkj335c460vlzs6pqii''; - }; - rdoc_4_1_2 = { - basename = ''rdoc''; - meta = { - description = ''RDoc produces HTML and command-line documentation for Ruby projects''; - homepage = ''http://docs.seattlerb.org/rdoc''; - longDescription = ''RDoc produces HTML and command-line documentation for Ruby projects. RDoc -includes the +rdoc+ and +ri+ tools for generating and displaying documentation -from the command-line.''; - }; - name = ''rdoc-4.1.2''; - requiredGems = [ g.json_1_8_1 ]; - sha256 = ''0cqhjidw657d8irkypxsrv6dr4y9r8csg9inaq40c3iz110cc8w6''; - }; - redcarpet_3_1_2 = { - basename = ''redcarpet''; - meta = { - description = ''Markdown that smells nice''; - homepage = ''http://github.com/vmg/redcarpet''; - longDescription = ''A fast, safe and extensible Markdown to (X)HTML parser''; - }; - name = ''redcarpet-3.1.2''; - requiredGems = [ ]; - sha256 = ''076p52lkns90hqs27rs4kns2bg7maz8qxr87bl34yd6in319flzz''; - }; - remote_syslog_1_6_14 = { - basename = ''remote_syslog''; - meta = { - description = ''Monitor plain text log file(s) for new entries and send to remote syslog collector''; - homepage = ''http://github.com/papertrail/remote_syslog''; - longDescription = ''Lightweight daemon to tail one or more log files and transmit UDP syslog messages to a remote syslog host (centralized log aggregation). Generates UDP packets itself instead of depending on a system syslog daemon, so it doesn't affect system-wide logging configuration.''; - }; - name = ''remote_syslog-1.6.14''; - requiredGems = [ g.servolux_0_10_0 g.file_tail_1_0_12 g.eventmachine_1_0_3 g.eventmachine_tail_0_6_4 g.syslog_protocol_0_9_2 g.em_resolv_replace_1_1_3 ]; - sha256 = ''1f2yjyqhbdc4vlx52zli1b33f6yn8qc1kd4n0dpv27zswj9qfdkr''; - }; - rest_client_1_6_7 = { - basename = ''rest_client''; - meta = { - description = ''Simple HTTP and REST client for Ruby, inspired by microframework syntax for specifying actions.''; - homepage = ''http://github.com/archiloque/rest-client''; - longDescription = ''A simple HTTP and REST client for Ruby, inspired by the Sinatra microframework style of specifying actions: get, put, post, delete.''; - }; - name = ''rest-client-1.6.7''; - requiredGems = [ g.mime_types_2_3 ]; - sha256 = ''0nn7zalgidz2yj0iqh3xvzh626krm2al79dfiij19jdhp0rk8853''; - }; - riemann_dash_0_2_9 = { - basename = ''riemann_dash''; - meta = { - description = ''HTTP dashboard for the distributed event system Riemann.''; - homepage = ''https://github.com/aphyr/riemann-dash''; - longDescription = ''HTTP dashboard for the distributed event system Riemann.''; - }; - name = ''riemann-dash-0.2.9''; - requiredGems = [ g.erubis_2_7_0 g.sinatra_1_4_5 g.sass_3_4_5 g.webrick_1_3_1 g.multi_json_1_3_6 ]; - sha256 = ''0ws5wmjbv8w9lcr3i2mdinj2qm91p6c85k6c067i67cf0p90jxq3''; - }; - right_aws_3_1_0 = { - basename = ''right_aws''; - meta = { - description = ''The RightScale AWS gems have been designed to provide a robust, fast, and secure interface to Amazon EC2, EBS, S3, SQS, SDB, and CloudFront.''; - longDescription = ''== DESCRIPTION: - -The RightScale AWS gems have been designed to provide a robust, fast, and secure interface to Amazon EC2, EBS, S3, SQS, SDB, and CloudFront. -These gems have been used in production by RightScale since late 2006 and are being maintained to track enhancements made by Amazon. -The RightScale AWS gems comprise: - -- RightAws::Ec2 -- interface to Amazon EC2 (Elastic Compute Cloud) and the - associated EBS (Elastic Block Store) -- RightAws::S3 and RightAws::S3Interface -- interface to Amazon S3 (Simple Storage Service) -- RightAws::Sqs and RightAws::SqsInterface -- interface to first-generation Amazon SQS (Simple Queue Service) (API version 2007-05-01) -- RightAws::SqsGen2 and RightAws::SqsGen2Interface -- interface to second-generation Amazon SQS (Simple Queue Service) (API version 2008-01-01) -- RightAws::SdbInterface and RightAws::ActiveSdb -- interface to Amazon SDB (SimpleDB) -- RightAws::AcfInterface -- interface to Amazon CloudFront, a content distribution service - -== FEATURES: - -- Full programmmatic access to EC2, EBS, S3, SQS, SDB, and CloudFront. -- Complete error handling: all operations check for errors and report complete - error information by raising an AwsError. -- Persistent HTTP connections with robust network-level retry layer using - RightHttpConnection). This includes socket timeouts and retries. -- Robust HTTP-level retry layer. Certain (user-adjustable) HTTP errors returned - by Amazon's services are classified as temporary errors. - These errors are automaticallly retried using exponentially increasing intervals. - The number of retries is user-configurable. -- Fast REXML-based parsing of responses (as fast as a pure Ruby solution allows). -- Uses libxml (if available) for faster response parsing. -- Support for large S3 list operations. Buckets and key subfolders containing - many (> 1000) keys are listed in entirety. Operations based on list (like - bucket clear) work on arbitrary numbers of keys. -- Support for streaming GETs from S3, and streaming PUTs to S3 if the data source is a file. -- Support for single-threaded usage, multithreaded usage, as well as usage with multiple - AWS accounts. -- Support for both first- and second-generation SQS (API versions 2007-05-01 - and 2008-01-01). These versions of SQS are not compatible. -- Support for signature versions 0 and 1 on SQS, SDB, and EC2. -- Interoperability with any cloud running Eucalyptus (http://eucalyptus.cs.ucsb.edu) -- Test suite (requires AWS account to do "live" testing). -''; - }; - name = ''right_aws-3.1.0''; - requiredGems = [ g.right_http_connection_1_5_0 ]; - sha256 = ''1a3l5vyvq078nq976rzkrd6fbj522sbgrxpdq3p9z373h0awha09''; - }; - right_http_connection_1_5_0 = { - basename = ''right_http_connection''; - meta = { - description = ''RightScale's robust HTTP/S connection module''; - homepage = ''http://rightscale.rubyforge.org/''; - longDescription = ''Rightscale::HttpConnection is a robust HTTP/S library. It implements a retry -algorithm for low-level network errors. - -== FEATURES: - -- provides put/get streaming -- does configurable retries on connect and read timeouts, DNS failures, etc. -- HTTPS certificate checking -''; - }; - name = ''right_http_connection-1.5.0''; - requiredGems = [ ]; - sha256 = ''0shd8v24aqxdvim1gdqzwxpanjhfgkhdaw0m0lzz7sybkb02j8qf''; - }; - rjb_1_4_9 = { - basename = ''rjb''; - meta = { - description = ''Ruby Java bridge''; - homepage = ''http://rjb.rubyforge.org/''; - longDescription = ''RJB is a bridge program that connect between Ruby and Java with Java Native Interface. -''; - }; - name = ''rjb-1.4.9''; - requiredGems = [ ]; - sha256 = ''062f7bjwz6iz6da49nzzbbx4xn8ahqqha2smqvqhbf0i7kd5v0yz''; - }; - rjb_1_5_0 = { - basename = ''rjb''; - meta = { - description = ''Ruby Java bridge''; - homepage = ''http://rjb.rubyforge.org/''; - longDescription = ''RJB is a bridge program that connect between Ruby and Java with Java Native Interface. -''; - }; - name = ''rjb-1.5.0''; - requiredGems = [ ]; - sha256 = ''0hjc0l3241lqrfracgb7gmsyd54v0lzplqfv9kfzk8km61pkjlfb''; - }; - rkelly_remix_0_0_6 = { - basename = ''rkelly_remix''; - meta = { - description = ''RKelly Remix is a fork of the RKelly[https://github.com/tenderlove/rkelly] JavaScript parser.''; - homepage = ''https://github.com/nene/rkelly-remix''; - longDescription = ''RKelly Remix is a fork of the -RKelly[https://github.com/tenderlove/rkelly] JavaScript parser.''; - }; - name = ''rkelly-remix-0.0.6''; - requiredGems = [ ]; - sha256 = ''1ihsns5v8nx96gvj7sqw5m8d6dsnmpfzpd07y860bldjhkjsxp1z''; - }; - rmail_1_0_0 = { - basename = ''rmail''; - meta = { - description = ''A MIME mail parsing and generation library.''; - homepage = ''http://www.rfc20.org/rubymail''; - longDescription = ''RMail is a lightweight mail library containing various utility classes and modules that allow ruby scripts to parse, modify, and generate MIME mail messages.''; - }; - name = ''rmail-1.0.0''; - requiredGems = [ ]; - sha256 = ''0nsg7yda1gdwa96j4hlrp2s0m06vrhcc4zy5mbq7gxmlmwf9yixp''; - }; - rspec_2_14_1 = { - basename = ''rspec''; - meta = { - description = ''rspec-2.14.1''; - homepage = ''http://github.com/rspec''; - longDescription = ''BDD for Ruby''; - }; - name = ''rspec-2.14.1''; - requiredGems = [ g.rspec_core_2_14_8 g.rspec_expectations_2_14_5 g.rspec_mocks_2_14_6 ]; - sha256 = ''134y4wzk1prninb5a0bhxgm30kqfzl8dg06af4js5ylnhv2wd7sg''; - }; - rspec_core_2_14_5 = { - basename = ''rspec_core''; - meta = { - description = ''rspec-core-2.14.5''; - homepage = ''http://github.com/rspec/rspec-core''; - longDescription = ''BDD for Ruby. RSpec runner and example groups.''; - }; - name = ''rspec-core-2.14.5''; - requiredGems = [ ]; - sha256 = ''18zk2y5agzj4ps16hh1jlcqmyj0bmlcr24bl0m8gyhwf0gk1xmcr''; - }; - rspec_core_2_14_8 = { - basename = ''rspec_core''; - meta = { - description = ''rspec-core-2.14.8''; - homepage = ''http://github.com/rspec/rspec-core''; - longDescription = ''BDD for Ruby. RSpec runner and example groups.''; - }; - name = ''rspec-core-2.14.8''; - requiredGems = [ ]; - sha256 = ''0psjy5kdlz3ph39br0m01w65i1ikagnqlg39f8p65jh5q7dz8hwc''; - }; - rspec_expectations_2_14_3 = { - basename = ''rspec_expectations''; - meta = { - description = ''rspec-expectations-2.14.3''; - homepage = ''http://github.com/rspec/rspec-expectations''; - longDescription = ''rspec expectations (should[_not] and matchers)''; - }; - name = ''rspec-expectations-2.14.3''; - requiredGems = [ g.diff_lcs_1_2_5 ]; - sha256 = ''0gv5sqizmw0hdj1gl57mynp5i27kj4i0gpksrwwg9gazciq898n2''; - }; - rspec_expectations_2_14_5 = { - basename = ''rspec_expectations''; - meta = { - description = ''rspec-expectations-2.14.5''; - homepage = ''http://github.com/rspec/rspec-expectations''; - longDescription = ''rspec expectations (should[_not] and matchers)''; - }; - name = ''rspec-expectations-2.14.5''; - requiredGems = [ g.diff_lcs_1_2_5 ]; - sha256 = ''1ni8kw8kjv76jvwjzi4jba00k3qzj9f8wd94vm6inz0jz3gwjqf9''; - }; - rspec_mocks_2_14_3 = { - basename = ''rspec_mocks''; - meta = { - description = ''rspec-mocks-2.14.3''; - homepage = ''http://github.com/rspec/rspec-mocks''; - longDescription = ''RSpec's 'test double' framework, with support for stubbing and mocking''; - }; - name = ''rspec-mocks-2.14.3''; - requiredGems = [ ]; - sha256 = ''1xfhjisvpmb212jhb3k4r1ji3rrlv509mphcf345ij5b75gaybzr''; - }; - rspec_mocks_2_14_6 = { - basename = ''rspec_mocks''; - meta = { - description = ''rspec-mocks-2.14.6''; - homepage = ''http://github.com/rspec/rspec-mocks''; - longDescription = ''RSpec's 'test double' framework, with support for stubbing and mocking''; - }; - name = ''rspec-mocks-2.14.6''; - requiredGems = [ ]; - sha256 = ''1fwsmijd6w6cmqyh4ky2nq89jrpzh56hzmndx9wgkmdgfhfakv30''; - }; - rubyzip_0_9_9 = { - basename = ''rubyzip''; - meta = { - description = ''rubyzip is a ruby module for reading and writing zip files''; - homepage = ''http://github.com/aussiegeek/rubyzip''; - }; - name = ''rubyzip-0.9.9''; - requiredGems = [ ]; - sha256 = ''1khf6d903agnwd8965f5f8b353rzmfvygxp53z1199rqzw8h46q2''; - }; - rubyzip_1_1_6 = { - basename = ''rubyzip''; - meta = { - description = ''rubyzip is a ruby module for reading and writing zip files''; - homepage = ''http://github.com/rubyzip/rubyzip''; - }; - name = ''rubyzip-1.1.6''; - requiredGems = [ ]; - sha256 = ''17ha7kmgcnhnxyfp9wgyrd2synp17v9g8j1pknhfd2v9x5g475m9''; - }; - safe_yaml_1_0_3 = { - basename = ''safe_yaml''; - meta = { - description = ''SameYAML provides an alternative implementation of YAML.load suitable for accepting user input in Ruby applications.''; - homepage = ''https://github.com/dtao/safe_yaml''; - longDescription = ''Parse YAML safely''; - }; - name = ''safe_yaml-1.0.3''; - requiredGems = [ ]; - sha256 = ''063bykyk40s3rhy1dxfbvl69s179n1iny418z4wqjbvhrmjn18wl''; - }; - sass_3_4_5 = { - basename = ''sass''; - meta = { - description = ''A powerful but elegant CSS compiler that makes CSS fun again.''; - homepage = ''http://sass-lang.com/''; - longDescription = '' Sass makes CSS fun again. Sass is an extension of CSS3, adding - nested rules, variables, mixins, selector inheritance, and more. - It's translated to well-formatted, standard CSS using the - command line tool or a web-framework plugin. -''; - }; - name = ''sass-3.4.5''; - requiredGems = [ ]; - sha256 = ''1rd07m2gprzgd6a4vnrlnyx5lkslfn30hcgfav86rb82a8zqmxah''; - }; - selenium_webdriver_2_43_0 = { - basename = ''selenium_webdriver''; - meta = { - description = ''The next generation developer focused tool for automated testing of webapps''; - homepage = ''http://selenium.googlecode.com''; - longDescription = ''WebDriver is a tool for writing automated tests of websites. It aims to mimic the behaviour of a real user, and as such interacts with the HTML of the application.''; - }; - name = ''selenium-webdriver-2.43.0''; - requiredGems = [ g.multi_json_1_10_1 g.rubyzip_1_1_6 g.childprocess_0_5_3 g.websocket_1_2_1 ]; - sha256 = ''06jjkb4hcyh8mwsqc8c5p6pz6ac1v313h4md0dab872ls5s47zh9''; - }; - servolux_0_10_0 = { - basename = ''servolux''; - meta = { - description = ''* {Homepage}[http://rubygems.''; - homepage = ''http://gemcutter.org/gems/servolux''; - longDescription = ''Serv-O-Lux is a collection of Ruby classes that are useful for daemon and -process management, and for writing your own Ruby services. The code is well -documented and tested. It works with Ruby and JRuby supporting both 1.8 and 1.9 -interpreters.''; - }; - name = ''servolux-0.10.0''; - requiredGems = [ ]; - sha256 = ''08jdrk35f61ab8b48ffm85p9lgfpbnzq3n4is00gqhpcrrq72dhs''; - }; - sinatra_1_3_2 = { - basename = ''sinatra''; - meta = { - description = ''Classy web-development dressed in a DSL''; - homepage = ''http://www.sinatrarb.com/''; - longDescription = ''Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort.''; - }; - name = ''sinatra-1.3.2''; - requiredGems = [ g.rack_1_5_2 g.rack_protection_1_5_3 g.tilt_1_4_1 ]; - sha256 = ''05blf915zpiwyz7agcn9rwdmddwxz0z4l3gd4qlqmrgd2vkw4sxc''; - }; - sinatra_1_4_5 = { - basename = ''sinatra''; - meta = { - description = ''Classy web-development dressed in a DSL''; - homepage = ''http://www.sinatrarb.com/''; - longDescription = ''Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort.''; - }; - name = ''sinatra-1.4.5''; - requiredGems = [ g.rack_1_5_2 g.tilt_1_4_1 g.rack_protection_1_5_3 ]; - sha256 = ''0qyna3wzlnvsz69d21lxcm3ixq7db08mi08l0a88011qi4qq701s''; - }; - slop_3_6_0 = { - basename = ''slop''; - meta = { - description = ''Simple Lightweight Option Parsing''; - homepage = ''http://github.com/leejarvis/slop''; - longDescription = ''A simple DSL for gathering options and parsing the command line''; - }; - name = ''slop-3.6.0''; - requiredGems = [ ]; - sha256 = ''00w8g3j7k7kl8ri2cf1m58ckxk8rn350gp4chfscmgv6pq1spk3n''; - }; - sprockets_2_12_2 = { - basename = ''sprockets''; - meta = { - description = ''Rack-based asset packaging system''; - homepage = ''http://getsprockets.org/''; - longDescription = ''Sprockets is a Rack-based asset packaging system that concatenates and serves JavaScript, CoffeeScript, CSS, LESS, Sass, and SCSS.''; - }; - name = ''sprockets-2.12.2''; - requiredGems = [ g.hike_1_2_3 g.multi_json_1_10_1 g.rack_1_5_2 g.tilt_1_4_1 ]; - sha256 = ''0sclb5nqs5hhr7qfp42rgpasy0f9k4c3jcr3hz89amf2bg5v7slx''; - }; - sprockets_rails_2_1_4 = { - basename = ''sprockets_rails''; - meta = { - description = ''Sprockets Rails integration''; - homepage = ''https://github.com/rails/sprockets-rails''; - }; - name = ''sprockets-rails-2.1.4''; - requiredGems = [ g.sprockets_2_12_2 g.actionpack_4_1_6 g.activesupport_4_1_6 ]; - sha256 = ''1difqidflj71qh8a84lcfdfg9vy4rw5hkgf2j0jis8bcczcq54l3''; - }; - syslog_protocol_0_9_2 = { - basename = ''syslog_protocol''; - meta = { - description = ''Syslog protocol parser and generator''; - homepage = ''https://github.com/eric/syslog_protocol''; - longDescription = ''Syslog protocol parser and generator''; - }; - name = ''syslog_protocol-0.9.2''; - requiredGems = [ ]; - sha256 = ''1yb2cmbyj0zmb2yhkgnmghcngrkhcxs4g1svcmgfj90l2hs23nmc''; - }; - systemu_2_6_4 = { - basename = ''systemu''; - meta = { - description = ''systemu''; - homepage = ''https://github.com/ahoward/systemu''; - longDescription = ''universal capture of stdout and stderr and handling of child process pid for windows, *nix, etc.''; - }; - name = ''systemu-2.6.4''; - requiredGems = [ ]; - sha256 = ''16k94azpsy1r958r6ysk4ksnpp54rqmh5hyamad9kwc3lk83i32z''; - }; - taskjuggler_3_5_0 = { - basename = ''taskjuggler''; - meta = { - description = ''A Project Management Software''; - homepage = ''http://www.taskjuggler.org''; - longDescription = ''TaskJuggler is a modern and powerful, Free and Open Source Software project -management tool. Its new approach to project planing and tracking is more -flexible and superior to the commonly used Gantt chart editing tools. - -TaskJuggler is project management software for serious project managers. It -covers the complete spectrum of project management tasks from the first idea -to the completion of the project. It assists you during project scoping, -resource assignment, cost and revenue planing, risk and communication -management. -''; - }; - name = ''taskjuggler-3.5.0''; - requiredGems = [ g.mail_2_6_1 g.term_ansicolor_1_3_0 ]; - sha256 = ''0r84rlc7a6w7p9nc9mgycbs5h0hq0kzscjq7zj3296xyf0afiwj2''; - }; - term_ansicolor_1_3_0 = { - basename = ''term_ansicolor''; - meta = { - description = ''Ruby library that colors strings using ANSI escape sequences''; - homepage = ''http://flori.github.com/term-ansicolor''; - longDescription = ''This library uses ANSI escape sequences to control the attributes of terminal output''; - }; - name = ''term-ansicolor-1.3.0''; - requiredGems = [ g.tins_1_3_3 ]; - sha256 = ''1a2gw7gmpmx57sdpyhjwl0zn4bqp7jyjz7aslpvvphd075layp4b''; - }; - terminal_notifier_1_6_1 = { - basename = ''terminal_notifier''; - meta = { - description = ''Send User Notifications on Mac OS X 10.8 or higher.''; - homepage = ''https://github.com/alloy/terminal-notifier''; - }; - name = ''terminal-notifier-1.6.1''; - requiredGems = [ ]; - sha256 = ''0j14sblviiypzc9vb508ldd78winba4vhnm9nhg3zpq07p3528g7''; - }; - text_1_3_0 = { - basename = ''text''; - meta = { - description = ''A collection of text algorithms''; - homepage = ''http://github.com/threedaymonk/text''; - longDescription = ''A collection of text algorithms: Levenshtein, Soundex, Metaphone, Double Metaphone, Porter Stemming''; - }; - name = ''text-1.3.0''; - requiredGems = [ ]; - sha256 = ''1bfn0rm2a7gpsxplx3dii3a7q16hi7idsqp54fh92b3j9sqgidj7''; - }; - thin_1_6_2 = { - basename = ''thin''; - meta = { - description = ''A thin and fast web server''; - homepage = ''http://code.macournoyer.com/thin/''; - longDescription = ''A thin and fast web server''; - }; - name = ''thin-1.6.2''; - requiredGems = [ g.rack_1_5_2 g.eventmachine_1_0_3 g.daemons_1_1_9 ]; - sha256 = ''0v90rnnai8sc40c02dxj9aawj2mi1mhjnmi4ws0rg4yrkc6fxvmq''; - }; - thor_0_19_1 = { - basename = ''thor''; - meta = { - description = ''Thor is a toolkit for building powerful command-line interfaces.''; - homepage = ''http://whatisthor.com/''; - longDescription = ''Thor is a toolkit for building powerful command-line interfaces.''; - }; - name = ''thor-0.19.1''; - requiredGems = [ ]; - sha256 = ''08p5gx18yrbnwc6xc0mxvsfaxzgy2y9i78xq7ds0qmdm67q39y4z''; - }; - thread_safe_0_3_4 = { - basename = ''thread_safe''; - meta = { - description = ''A collection of data structures and utilities to make thread-safe programming in Ruby easier''; - homepage = ''https://github.com/headius/thread_safe''; - longDescription = ''Thread-safe collections and utilities for Ruby''; - }; - name = ''thread_safe-0.3.4''; - requiredGems = [ ]; - sha256 = ''1cil2zcdzqkyr8zrwhlg7gywryg36j4mxlxw0h0x0j0wjym5nc8n''; - }; - tilt_1_4_1 = { - basename = ''tilt''; - meta = { - description = ''Generic interface to multiple Ruby template engines''; - homepage = ''http://github.com/rtomayko/tilt/''; - longDescription = ''Generic interface to multiple Ruby template engines''; - }; - name = ''tilt-1.4.1''; - requiredGems = [ ]; - sha256 = ''00sr3yy7sbqaq7cb2d2kpycajxqf1b1wr1yy33z4bnzmqii0b0ir''; - }; - timers_4_0_1 = { - basename = ''timers''; - meta = { - description = ''Schedule procs to run after a certain time, or at periodic intervals, using any API that accepts a timeout''; - homepage = ''https://github.com/celluloid/timers''; - longDescription = ''Pure Ruby one-shot and periodic timers''; - }; - name = ''timers-4.0.1''; - requiredGems = [ g.hitimes_1_2_2 ]; - sha256 = ''03ahv07wn1f2g3c5843q7sf03a81518lq5624s9f49kbrswa2p7l''; - }; - tins_0_13_2 = { - basename = ''tins''; - meta = { - description = ''Useful stuff.''; - homepage = ''http://flori.github.com/tins''; - longDescription = ''All the stuff that isn't good/big enough for a real library.''; - }; - name = ''tins-0.13.2''; - requiredGems = [ ]; - sha256 = ''1ygkm4ava7x6ap61qz6pn79193g6g29248fa04mwknsz6acfjs2y''; - }; - tins_1_3_3 = { - basename = ''tins''; - meta = { - description = ''Useful stuff.''; - homepage = ''http://flori.github.com/tins''; - longDescription = ''All the stuff that isn't good/big enough for a real library.''; - }; - name = ''tins-1.3.3''; - requiredGems = [ ]; - sha256 = ''14jnsg15wakdk1ljh2iv9yvzk8nb7gpzd2zw4yvjikmffqjyqvna''; - }; - toml_0_1_1 = { - basename = ''toml''; - meta = { - description = ''Parse your TOML.''; - homepage = ''http://github.com/jm/toml''; - longDescription = ''Parse your TOML, seriously.''; - }; - name = ''toml-0.1.1''; - requiredGems = [ g.parslet_1_5_0 ]; - sha256 = ''1m5dv66qnbbg0r2zpp45hzq2nkmc4qaq0xmqw8j1kwkrpiwihwp8''; - }; - travis_1_7_2 = { - basename = ''travis''; - meta = { - description = ''Travis CI client''; - homepage = ''https://github.com/travis-ci/travis.rb''; - longDescription = ''CLI and Ruby client library for Travis CI''; - }; - name = ''travis-1.7.2''; - requiredGems = [ g.faraday_0_9_0 g.faraday_middleware_0_9_1 g.highline_1_6_21 g.backports_3_6_1 g.gh_0_13_2 g.launchy_2_4_2 g.pry_0_9_12_6 g.typhoeus_0_6_9 g.pusher_client_0_6_0 g.addressable_2_3_6 ]; - sha256 = ''0zl9b48dv0v0gmrj6xyprhysa4g0r3yz8a6f99h0qgwiw2l2xxcc''; - }; - trollop_2_0 = { - basename = ''trollop''; - meta = { - description = ''Trollop is a commandline option parser for Ruby that just gets out of your way.''; - homepage = ''http://trollop.rubyforge.org''; - longDescription = ''Trollop is a commandline option parser for Ruby that just -gets out of your way. One line of code per option is all you need to write. -For that, you get a nice automatically-generated help page, robust option -parsing, command subcompletion, and sensible defaults for everything you don't -specify.''; - }; - name = ''trollop-2.0''; - requiredGems = [ ]; - sha256 = ''0iz5k7ax7a5jm9x6p81k6f4mgp48wxxb0j55ypnwxnznih8fsghz''; - }; - typhoeus_0_6_9 = { - basename = ''typhoeus''; - meta = { - description = ''Parallel HTTP library on top of libcurl multi.''; - homepage = ''https://github.com/typhoeus/typhoeus''; - longDescription = ''Like a modern code version of the mythical beast with 100 serpent heads, Typhoeus runs HTTP requests in parallel while cleanly encapsulating handling logic.''; - }; - name = ''typhoeus-0.6.9''; - requiredGems = [ g.ethon_0_7_1 ]; - sha256 = ''1j4l2zwx821hzsfqskcq47xpk6b7yzl30mhzmdrfrsrhsigmayar''; - }; - tzinfo_1_2_2 = { - basename = ''tzinfo''; - meta = { - description = ''Daylight savings aware timezone library''; - homepage = ''http://tzinfo.github.io''; - longDescription = ''TZInfo provides daylight savings aware transformations between times in different time zones.''; - }; - name = ''tzinfo-1.2.2''; - requiredGems = [ g.thread_safe_0_3_4 ]; - sha256 = ''1c01p3kg6xvy1cgjnzdfq45fggbwish8krd0h864jvbpybyx7cgx''; - }; - uglifier_2_5_3 = { - basename = ''uglifier''; - meta = { - description = ''Ruby wrapper for UglifyJS JavaScript compressor''; - homepage = ''http://github.com/lautis/uglifier''; - longDescription = ''Uglifier minifies JavaScript files by wrapping UglifyJS to be accessible in Ruby''; - }; - name = ''uglifier-2.5.3''; - requiredGems = [ g.execjs_2_2_1 g.json_1_8_1 ]; - sha256 = ''0rlx9nrcavpfffyacsrh7xyvz3adv7jvylz0sv0jnix1mj5rkpd9''; - }; - unf_0_1_4 = { - basename = ''unf''; - meta = { - description = ''A wrapper library to bring Unicode Normalization Form support to Ruby/JRuby''; - homepage = ''https://github.com/knu/ruby-unf''; - longDescription = ''This is a wrapper library to bring Unicode Normalization Form support -to Ruby/JRuby. -''; - }; - name = ''unf-0.1.4''; - requiredGems = [ g.unf_ext_0_0_6 ]; - sha256 = ''0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9''; - }; - unf_ext_0_0_6 = { - basename = ''unf_ext''; - meta = { - description = ''Unicode Normalization Form support library for CRuby''; - homepage = ''https://github.com/knu/ruby-unf_ext''; - longDescription = ''Unicode Normalization Form support library for CRuby''; - }; - name = ''unf_ext-0.0.6''; - requiredGems = [ ]; - sha256 = ''07zbmkzcid6pzdqgla3456ipfdka7j1v4hsx1iaa8rbnllqbmkdg''; - }; - uuid_2_3_7 = { - basename = ''uuid''; - meta = { - description = ''UUID generator''; - homepage = ''http://github.com/assaf/uuid''; - longDescription = ''UUID generator for producing universally unique identifiers based on RFC 4122 -(http://www.ietf.org/rfc/rfc4122.txt). -''; - }; - name = ''uuid-2.3.7''; - requiredGems = [ g.macaddr_1_7_1 ]; - sha256 = ''04q10an3v40zwjihvdwm23fw6vl39fbkhdiwfw78a51ym9airnlp''; - }; - webrick_1_3_1 = { - basename = ''webrick''; - meta = { - description = ''WEBrick is an HTTP server toolkit that can be configured as an HTTPS server,''; - homepage = ''http://github.com/nahi/webrick''; - }; - name = ''webrick-1.3.1''; - requiredGems = [ ]; - sha256 = ''0s42mxihcl2bx0h9q0v2syl70qndydfkl39a06h9il17p895ya8g''; - }; - webrobots_0_1_1 = { - basename = ''webrobots''; - meta = { - description = ''A Ruby library to help write robots.txt compliant web robots''; - homepage = ''https://github.com/knu/webrobots''; - longDescription = ''This library helps write robots.txt compliant web robots in Ruby. -''; - }; - name = ''webrobots-0.1.1''; - requiredGems = [ ]; - sha256 = ''1jlnhhpa1mkrgsmihs2qx13z3n6xhswjnlk5a2ypyplw2id5x32n''; - }; - websocket_1_2_1 = { - basename = ''websocket''; - meta = { - description = ''Universal Ruby library to handle WebSocket protocol''; - homepage = ''http://github.com/imanel/websocket-ruby''; - longDescription = ''Universal Ruby library to handle WebSocket protocol''; - }; - name = ''websocket-1.2.1''; - requiredGems = [ ]; - sha256 = ''17mf28xp6h4gglbn1606jjrhdz9r6kyb2pr603ckadsrx31wh9p6''; - }; - xapian_full_1_2_3 = { - basename = ''xapian_full''; - meta = { - description = ''xapian-core + Ruby xapian-bindings''; - longDescription = ''Xapian bindings for Ruby without dependency on system Xapian library''; - }; - name = ''xapian-full-1.2.3''; - requiredGems = [ ]; - sha256 = ''02z0wsir38jsp5d6sqrkgv5prk8s6sdf6g2h718j2374kpnkyrxv''; - }; - xapian_ruby_1_2_17 = { - basename = ''xapian_ruby''; - meta = { - description = ''xapian libraries and ruby bindings''; - homepage = ''https://github.com/garaio/xapian-ruby''; - }; - name = ''xapian-ruby-1.2.17''; - requiredGems = [ ]; - sha256 = ''1vhqykr0b877pb8x5n3v4fb4znm92mqhijinss7mvqzfimwfbxfg''; - }; - xml_simple_1_1_2 = { - basename = ''xml_simple''; - meta = { - description = ''A simple API for XML processing.''; - homepage = ''https://github.com/maik/xml-simple''; - }; - name = ''xml-simple-1.1.2''; - requiredGems = [ ]; - sha256 = ''0ni8cbkj7l2k5pc4fs2jzp1ymxy4xqa2jc681l4y9iy9chrayddb''; - }; - yajl_ruby_1_1_0 = { - basename = ''yajl_ruby''; - meta = { - description = ''Ruby C bindings to the excellent Yajl JSON stream-based parser library.''; - homepage = ''http://github.com/brianmario/yajl-ruby''; - }; - name = ''yajl-ruby-1.1.0''; - requiredGems = [ ]; - sha256 = ''0sj46j47icb12hdhcfh76rnvddyiic5ifqzkh3kla1vcr505kf4m''; - }; - yajl_ruby_1_2_1 = { - basename = ''yajl_ruby''; - meta = { - description = ''Ruby C bindings to the excellent Yajl JSON stream-based parser library.''; - homepage = ''http://github.com/brianmario/yajl-ruby''; - }; - name = ''yajl-ruby-1.2.1''; - requiredGems = [ ]; - sha256 = ''0zvvb7i1bl98k3zkdrnx9vasq0rp2cyy5n7p9804dqs4fz9xh9vf''; - }; - }; -} diff --git a/pkgs/development/interpreters/ruby/libs.nix b/pkgs/development/interpreters/ruby/libs.nix deleted file mode 100644 index 1b4b7aec2b1..00000000000 --- a/pkgs/development/interpreters/ruby/libs.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ stdenv, config, fetchurl, callPackage }: - -let - inherit (stdenv.lib) fold optional; - gemsMergeableFun = { generatedFuns ? [], patchFuns ? [], overrideFuns ? [] }: - let - generatedAttrs = map (f: f customGems) generatedFuns; - generatedGems = map (a: a.gems) generatedAttrs; - gem = callPackage ./gem.nix { - patches = map (f: callPackage f { inherit gems; }) patchFuns; - overrides = map (f: callPackage f { }) overrideFuns; - }; - customGems = stdenv.lib.mapAttrs gem (fold (x: y: x // y) { } generatedGems); - gems = fold (x: y: x // y) customGems (map (a: a.aliases) generatedAttrs); - in - gems // { - merge = { generated ? null, patches ? null, overrides ? null }: - gemsMergeableFun { - generatedFuns = generatedFuns ++ optional (generated != null) generated; - patchFuns = patchFuns ++ optional (patches != null) patches; - overrideFuns = overrideFuns ++ optional (overrides != null) overrides; - }; - }; -in -((gemsMergeableFun { }).merge { - generated = import ./generated.nix; - patches = import ./patches.nix; - overrides = import ./overrides.nix; -}).merge ( - let - localGemDir = (builtins.getEnv "HOME") + "/.nixpkgs/gems/"; - getLocalGemFun = name: - let - file = localGemDir + name + ".nix"; - fallback = - if builtins.pathExists file then import (builtins.toPath file) - else null; - in - stdenv.lib.attrByPath [ "gems" name ] fallback config; - in -{ - generated = getLocalGemFun "generated"; - patches = getLocalGemFun "patches"; - overrides = getLocalGemFun "overrides"; -}) diff --git a/pkgs/development/interpreters/ruby/overrides.nix b/pkgs/development/interpreters/ruby/overrides.nix deleted file mode 100644 index 01d73a19d64..00000000000 --- a/pkgs/development/interpreters/ruby/overrides.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ xapianBindings }: - -{ - xapian_full = xapianBindings.merge { cfg = { rubySupport = true; }; }; -} From 857f017a0d28a48fce37d8a71a3633b9f48e0950 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Tue, 28 Oct 2014 01:22:17 +0000 Subject: [PATCH 36/69] misc. cleanup --- pkgs/development/interpreters/ruby/bundix.nix | 45 ---------------- pkgs/development/interpreters/ruby/fixes.nix | 13 +++-- pkgs/development/interpreters/ruby/gem.nix | 10 ++-- .../ruby/{gems.nix => import-gems.nix} | 4 +- .../interpreters/ruby/load-ruby-env.nix | 51 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 6 +-- 6 files changed, 67 insertions(+), 62 deletions(-) delete mode 100644 pkgs/development/interpreters/ruby/bundix.nix rename pkgs/development/interpreters/ruby/{gems.nix => import-gems.nix} (95%) create mode 100644 pkgs/development/interpreters/ruby/load-ruby-env.nix diff --git a/pkgs/development/interpreters/ruby/bundix.nix b/pkgs/development/interpreters/ruby/bundix.nix deleted file mode 100644 index 691b4c5e979..00000000000 --- a/pkgs/development/interpreters/ruby/bundix.nix +++ /dev/null @@ -1,45 +0,0 @@ -{rubyLibsWith, callPackage, lib, fetchurl, fetchgit}: - -let - - sourceInstantiators = { - # Many ruby people use `git ls-files` to compose their gemspecs. - git = (attrs: fetchgit { inherit (attrs) url rev sha256 leaveDotGit; }); - url = (attrs: fetchurl { inherit (attrs) url sha256; }); - }; - -in - -{ - # Loads a set containing a ruby environment definition. The set's `gemset` - # key is expected to contain a set of gems. Optionally, the `ruby_version` - # key can be set to a string. A gem definition looks like this: - # - # rack-test = { - # name = "rack-test-0.6.2"; - # src = { - # type = "url"; - # url = "https://rubygems.org/downloads/rack-test-0.6.2.gem"; - # sha256 = "01mk715ab5qnqf6va8k3hjsvsmplrfqpz6g58qw4m3l8mim0p4ky"; - # }; - # dependencies = [ "rack" ]; - # }; - loadRubyEnv = path: config: - let - expr = import path; - gemset = lib.mapAttrs (name: attrs: - attrs // { - src = (builtins.getAttr attrs.src.type sourceInstantiators) attrs.src; - dontBuild = !(attrs.src.type == "git"); - } - ) expr.gemset; - ruby = config.ruby; - rubyLibs = rubyLibsWith ruby; - gems = rubyLibs.importGems gemset (config.gemOverrides or (gemset: {})); - in { - inherit ruby gems; # TODO: Set ruby using expr.rubyVersion if not given. - gemPath = map (drv: "${drv}") ( - builtins.filter (value: lib.isDerivation value) (lib.attrValues gems) - ); - }; -} diff --git a/pkgs/development/interpreters/ruby/fixes.nix b/pkgs/development/interpreters/ruby/fixes.nix index 7314bc2a008..eebda22263a 100644 --- a/pkgs/development/interpreters/ruby/fixes.nix +++ b/pkgs/development/interpreters/ruby/fixes.nix @@ -21,21 +21,20 @@ , which, postgresql, v8_3_16_14, clang }: let - id = x: x; + const = x: y: x; v8 = v8_3_16_14; - gems = lib.mapAttrs (name: config: - if (lib.isDerivation config) then config - else (instantiate name config) + gems = lib.mapAttrs (name: attrs: + if (lib.isDerivation attrs) then attrs + else (instantiate name attrs) ) gemset; instantiate = (name: attrs: let - # Turn dependency strings into actual derivations. gemPath = map (name: gems."${name}") (attrs.dependencies or []); - fixedAttrs = (fixes."${name}" or id) attrs; + fixedAttrs = attrs // (fixes."${name}" or const {}) attrs; in - buildRubyGem (fixedAttrs // { inherit gemPath; }) + buildRubyGem (fixedAttrs // { name = "${name}-${attrs.version}"; inherit gemPath; }) ); fixes = { diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index ce0b8e15fec..b136cb0de9b 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -1,13 +1,12 @@ { ruby, fetchurl, rake, rubygemsFun, makeWrapper, lib, git }: { name -, namePrefix ? "ruby${ruby.majorVersion}" + "-" +, namePrefix ? "${ruby.name}" + "-" , buildInputs ? [] , doCheck ? false # TODO: fix this , dontBuild ? true , meta ? {} , gemPath ? [] -, testTask ? "test" , ...} @ attrs: let @@ -60,7 +59,10 @@ in ruby.stdenv.mkDerivation (attrs // { gemspec=`find . -name '*.gemspec'` output=`gem build $gemspec` - gempkg=`echo $output|grep -oP 'File: \K(.*)'` + + gem build $gemspec | tee .output + gempkg=`cat .output | grep -oP 'File: \K(.*)'` + rm .output echo "Gem package built: $gempkg" @@ -103,7 +105,7 @@ in ruby.stdenv.mkDerivation (attrs // { mkdir -p $out/nix-support cat > $out/nix-support/setup-hook < Date: Tue, 28 Oct 2014 04:16:14 +0000 Subject: [PATCH 37/69] simplification / refactoring --- pkgs/development/interpreters/ruby/fixes.nix | 98 ++++++++----------- pkgs/development/interpreters/ruby/gem.nix | 2 +- .../interpreters/ruby/import-gems.nix | 57 ----------- .../interpreters/ruby/load-ruby-env.nix | 66 ++++--------- .../interpreters/ruby/rubygems.nix | 2 +- pkgs/top-level/all-packages.nix | 20 +--- 6 files changed, 67 insertions(+), 178 deletions(-) delete mode 100644 pkgs/development/interpreters/ruby/import-gems.nix diff --git a/pkgs/development/interpreters/ruby/fixes.nix b/pkgs/development/interpreters/ruby/fixes.nix index eebda22263a..6457e713387 100644 --- a/pkgs/development/interpreters/ruby/fixes.nix +++ b/pkgs/development/interpreters/ruby/fixes.nix @@ -17,67 +17,51 @@ # This seperates "what to build" (the exact gem versions) from "how to build" # (to make gems behave if necessary). -{ lib, gemset, buildRubyGem, writeScript, ruby, libxml2, libxslt, python, stdenv -, which, postgresql, v8_3_16_14, clang }: +{ lib, fetchurl, writeScript, ruby, libxml2, libxslt, python, stdenv, which +, postgresql, v8_3_16_14, clang }: let - const = x: y: x; v8 = v8_3_16_14; - gems = lib.mapAttrs (name: attrs: - if (lib.isDerivation attrs) then attrs - else (instantiate name attrs) - ) gemset; +in - instantiate = (name: attrs: - let - gemPath = map (name: gems."${name}") (attrs.dependencies or []); - fixedAttrs = attrs // (fixes."${name}" or const {}) attrs; - in - buildRubyGem (fixedAttrs // { name = "${name}-${attrs.version}"; inherit gemPath; }) - ); - - fixes = { - bundler = attrs: { - dontPatchShebangs = 1; - }; - - libv8 = attrs: { - buildFlags = [ "--with-system-v8" ]; - buildInputs = [ which v8 python ]; - }; - - nokogiri = attrs: { - buildFlags = [ - "--with-xml2-dir=${libxml2}" - "--with-xml2-include=${libxml2}/include/libxml2" - "--with-xslt-dir=${libxslt}" - "--use-system-libraries" - ]; - }; - - therubyracer = attrs: { - dontBuild = false; - - preInstall = '' - addToSearchPath RUBYLIB "${gems.libv8}/gems/libv8-3.16.14.3/lib" - addToSearchPath RUBYLIB "${gems.libv8}/gems/libv8-3.16.14.3/ext" - ln -s ${clang}/bin/clang $TMPDIR/gcc - ln -s ${clang}/bin/clang++ $TMPDIR/g++ - export PATH=$TMPDIR:$PATH - ''; - - postInstall = stdenv.lib.optionalString stdenv.isDarwin '' - cat >> $out/nix-support/setup-hook <> $out/nix-support/setup-hook < Date: Wed, 29 Oct 2014 01:16:02 +0000 Subject: [PATCH 38/69] update fixes --- pkgs/development/interpreters/ruby/fixes.nix | 32 +++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/pkgs/development/interpreters/ruby/fixes.nix b/pkgs/development/interpreters/ruby/fixes.nix index 6457e713387..5a2b105adce 100644 --- a/pkgs/development/interpreters/ruby/fixes.nix +++ b/pkgs/development/interpreters/ruby/fixes.nix @@ -18,7 +18,7 @@ # (to make gems behave if necessary). { lib, fetchurl, writeScript, ruby, libxml2, libxslt, python, stdenv, which -, postgresql, v8_3_16_14, clang }: +, libiconv, postgresql, v8_3_16_14, clang }: let v8 = v8_3_16_14; @@ -27,7 +27,7 @@ in { bundler = attrs: { - dontPatchShebangs = 1; + dontPatchShebangs = true; }; libv8 = attrs: { @@ -37,10 +37,32 @@ in nokogiri = attrs: { buildFlags = [ - "--with-xml2-dir=${libxml2}" - "--with-xml2-include=${libxml2}/include/libxml2" - "--with-xslt-dir=${libxslt}" "--use-system-libraries" + "--with-zlib-dir=${zlib}" + "--with-xml2-lib=${libxml2}/lib" + "--with-xml2-include=${libxml2}/include/libxml2" + "--with-xslt-lib=${libxslt}/lib" + "--with-xslt-include=${libxslt}/include" + "--with-exslt-lib=${libxslt}/lib" + "--with-exslt-include=${libxslt}/include" + "--with-iconv-dir=${libiconv}" + ]; + }; + + pg = attrs: { + buildFlags = [ + "--with-pg-config=${postgresql}/bin/pg_config" + ]; + }; + + rmagick = attrs: { + buildInputs = [ imagemagick pkgconfig ]; + }; + + sqlite3 = attrs: { + buildFlags = [ + "--with-sqlite3-include=${sqlite}/include" + "--with-sqlite3-lib=${sqlite}/lib" ]; }; From 845fed122a5e7eba1c4c52f23de708d3e3d88e74 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Wed, 29 Oct 2014 23:14:19 +0000 Subject: [PATCH 39/69] various fixes --- pkgs/development/interpreters/ruby/fixes.nix | 2 +- pkgs/development/interpreters/ruby/gem.nix | 2 +- .../interpreters/ruby/load-ruby-env.nix | 24 ++++++++++++++----- pkgs/top-level/all-packages.nix | 2 -- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/pkgs/development/interpreters/ruby/fixes.nix b/pkgs/development/interpreters/ruby/fixes.nix index 5a2b105adce..0b8545090c5 100644 --- a/pkgs/development/interpreters/ruby/fixes.nix +++ b/pkgs/development/interpreters/ruby/fixes.nix @@ -18,7 +18,7 @@ # (to make gems behave if necessary). { lib, fetchurl, writeScript, ruby, libxml2, libxslt, python, stdenv, which -, libiconv, postgresql, v8_3_16_14, clang }: +, libiconv, postgresql, v8_3_16_14, clang, sqlite, zlib, imagemagick, pkgconfig}: let v8 = v8_3_16_14; diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index 85fa9d10cb5..a6b5dc51057 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -1,4 +1,4 @@ -{ ruby, fetchurl, rake, rubygemsFun, makeWrapper, lib, git }: +{ ruby, fetchurl, rubygemsFun, makeWrapper, lib, git }: { name , namePrefix ? "${ruby.name}" + "-" diff --git a/pkgs/development/interpreters/ruby/load-ruby-env.nix b/pkgs/development/interpreters/ruby/load-ruby-env.nix index b73a9df9f83..9e60e574b37 100644 --- a/pkgs/development/interpreters/ruby/load-ruby-env.nix +++ b/pkgs/development/interpreters/ruby/load-ruby-env.nix @@ -1,4 +1,4 @@ -{ pkgs, lib, callPackage, gemFixes }: +{ pkgs, lib, callPackage, gemFixes, fetchurl }: { gemset, ruby ? pkgs.ruby, fixes ? gemFixes }@args: @@ -7,19 +7,31 @@ let buildRubyGem = callPackage ./gem.nix { inherit ruby; }; - instantiate = (name: attrs: + fetchers.gem = attrs: fetchurl { + url = "${attrs.src.source or "https://rubygems.org"}/downloads/${attrs.name}-${attrs.version}.gem"; + inherit (attrs.src) sha256; + }; + + instantiate = (attrs: let gemPath = map (name: gemset''."${name}") (attrs.dependencies or []); - fixedAttrs = attrs // (fixes."${name}" or (const {})) attrs; + fixedAttrs = attrs // (fixes."${attrs.name}" or (const {})) attrs; in - buildRubyGem (fixedAttrs // { name = "${name}-${attrs.version}"; inherit gemPath; }) + buildRubyGem ( + fixedAttrs // { + name = "${attrs.name}-${attrs.version}"; + src = fetchers."${attrs.src.type}" attrs; + inherit gemPath; + } + ) ); gemset' = if builtins.isAttrs gemset then gemset else callPackage gemset { }; gemset'' = lib.flip lib.mapAttrs gemset' (name: attrs: - if (lib.isDerivation attrs) then attrs - else (instantiate name attrs) + if (lib.isDerivation attrs) + then attrs + else instantiate (attrs // { inherit name; }) ); in gemset'' diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 515424a4068..3209a246f62 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4049,8 +4049,6 @@ let loadRubyEnv = callPackage ../development/interpreters/ruby/load-ruby-env.nix { }; - rake = ... # TODO - rubySqlite3 = callPackage ../development/ruby-modules/sqlite3 { }; rubygemsFun = ruby: builderDefsPackage (import ../development/interpreters/ruby/rubygems.nix) { From 3eeabc452353bdcd13d27ede98ff3612fa38924b Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Fri, 31 Oct 2014 01:44:57 +0000 Subject: [PATCH 40/69] more cleanup --- pkgs/development/interpreters/ruby/bundler.nix | 7 +++++++ pkgs/development/interpreters/ruby/gem.nix | 13 ++++++++----- .../development/interpreters/ruby/load-ruby-env.nix | 10 ++++------ pkgs/development/interpreters/ruby/rubygems.nix | 2 +- pkgs/top-level/all-packages.nix | 7 +++---- 5 files changed, 23 insertions(+), 16 deletions(-) create mode 100644 pkgs/development/interpreters/ruby/bundler.nix diff --git a/pkgs/development/interpreters/ruby/bundler.nix b/pkgs/development/interpreters/ruby/bundler.nix new file mode 100644 index 00000000000..a66aa08c1f5 --- /dev/null +++ b/pkgs/development/interpreters/ruby/bundler.nix @@ -0,0 +1,7 @@ +{ buildRubyGem }: + +buildRubyGem { + name = "bundler-1.7.4"; + sha256 = "122k07z60780mr00zfbbw04v9xlw1fhxjsx4g2rbm66hxlnlnh89"; + dontPatchShebangs = true; +} diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index a6b5dc51057..5b2a2b9c2de 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -1,6 +1,10 @@ -{ ruby, fetchurl, rubygemsFun, makeWrapper, lib, git }: +{ lib, ruby, rubygemsFun, fetchurl, makeWrapper, git } @ defs: + +lib.makeOverridable ( { name +, ruby ? defs.ruby +, rubygems ? (rubygemsFun ruby) , namePrefix ? "${ruby.name}" + "-" , buildInputs ? [] , doCheck ? false @@ -9,10 +13,7 @@ , gemPath ? [] , ...} @ attrs: -let - rubygems = rubygemsFun ruby; - -in ruby.stdenv.mkDerivation (attrs // { +ruby.stdenv.mkDerivation (attrs // { inherit doCheck; buildInputs = [ rubygems makeWrapper git ] ++ buildInputs; @@ -119,3 +120,5 @@ in ruby.stdenv.mkDerivation (attrs // { passthru.isRubyGem = true; inherit meta; }) + +) diff --git a/pkgs/development/interpreters/ruby/load-ruby-env.nix b/pkgs/development/interpreters/ruby/load-ruby-env.nix index 9e60e574b37..f1c9f71f51c 100644 --- a/pkgs/development/interpreters/ruby/load-ruby-env.nix +++ b/pkgs/development/interpreters/ruby/load-ruby-env.nix @@ -1,12 +1,10 @@ -{ pkgs, lib, callPackage, gemFixes, fetchurl }: +{ ruby, lib, callPackage, gemFixes, fetchurl, buildRubyGem }@defs: -{ gemset, ruby ? pkgs.ruby, fixes ? gemFixes }@args: +{ gemset, ruby ? defs.ruby, fixes ? gemFixes }@args: let const = x: y: x; - buildRubyGem = callPackage ./gem.nix { inherit ruby; }; - fetchers.gem = attrs: fetchurl { url = "${attrs.src.source or "https://rubygems.org"}/downloads/${attrs.name}-${attrs.version}.gem"; inherit (attrs.src) sha256; @@ -21,12 +19,12 @@ let fixedAttrs // { name = "${attrs.name}-${attrs.version}"; src = fetchers."${attrs.src.type}" attrs; - inherit gemPath; + inherit ruby gemPath; } ) ); - gemset' = if builtins.isAttrs gemset then gemset else callPackage gemset { }; + gemset' = if builtins.isAttrs gemset then gemset else import gemset; gemset'' = lib.flip lib.mapAttrs gemset' (name: attrs: if (lib.isDerivation attrs) diff --git a/pkgs/development/interpreters/ruby/rubygems.nix b/pkgs/development/interpreters/ruby/rubygems.nix index d6bc8b1daf2..773a752ffef 100644 --- a/pkgs/development/interpreters/ruby/rubygems.nix +++ b/pkgs/development/interpreters/ruby/rubygems.nix @@ -1,6 +1,6 @@ args : with args; -rec { +rec { name = "rubygems-" + version; version = "2.4.1"; src = fetchurl { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3209a246f62..52ef2292dcb 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4030,7 +4030,10 @@ let wrapPython = pythonPackages.wrapPython; }; + bundler = callPackage ../development/interpreters/ruby/bundler.nix { }; gemFixes = callPackage ../development/interpreters/ruby/fixes.nix { }; + buildRubyGem = callPackage ../development/interpreters/ruby/gem.nix { }; + loadRubyEnv = callPackage ../development/interpreters/ruby/load-ruby-env.nix { }; ruby_1_8_7 = callPackage ../development/interpreters/ruby/ruby-1.8.7.nix { }; ruby_1_9_3 = callPackage ../development/interpreters/ruby/ruby-1.9.3.nix { }; @@ -4047,10 +4050,6 @@ let ruby_2_0 = ruby_2_0_0; ruby_2_1 = ruby_2_1_3; - loadRubyEnv = callPackage ../development/interpreters/ruby/load-ruby-env.nix { }; - - rubySqlite3 = callPackage ../development/ruby-modules/sqlite3 { }; - rubygemsFun = ruby: builderDefsPackage (import ../development/interpreters/ruby/rubygems.nix) { inherit ruby makeWrapper; }; From 143698555a7927c926d5fa4180c4349bf371798b Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Fri, 31 Oct 2014 02:03:37 +0000 Subject: [PATCH 41/69] add documentation --- .../interpreters/ruby/load-ruby-env.nix | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/pkgs/development/interpreters/ruby/load-ruby-env.nix b/pkgs/development/interpreters/ruby/load-ruby-env.nix index f1c9f71f51c..1a28e1cd047 100644 --- a/pkgs/development/interpreters/ruby/load-ruby-env.nix +++ b/pkgs/development/interpreters/ruby/load-ruby-env.nix @@ -1,5 +1,31 @@ { ruby, lib, callPackage, gemFixes, fetchurl, buildRubyGem }@defs: +# This function builds a set of gems. You first convert your Gemfile to an attrset +# called a "gemset", and then use this function to build the gemset. +# +# A gemset looks like the following: +# +# { +# libv8 = { +# version = "3.16.14.7"; +# src = { +# type = "gem"; +# sha256 = "..."; +# }; +# }; +# therubyracer = { +# version = "0.12.1"; +# dependencies = [ "libv8" ]; +# src = { +# type = "gem"; +# sha256 = "..."; +# }; +# }; +# } +# +# If you use these gems as build inputs, the GEM_PATH will be updated +# appropriately, and command like `bundle exec` should work out of the box. + { gemset, ruby ? defs.ruby, fixes ? gemFixes }@args: let From e1c40a679c3398499dccd3696f7e3965cc872a1d Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Sun, 2 Nov 2014 22:05:37 +0000 Subject: [PATCH 42/69] fix gem builder --- pkgs/development/interpreters/ruby/gem.nix | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index 5b2a2b9c2de..6e83b4e611b 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -78,30 +78,30 @@ ruby.stdenv.mkDerivation (attrs // { # separate buildPhase. # --ignore-dependencies is necessary as rubygems otherwise always # connects to the repository, thus breaking pure builds. - GEM_HOME=$out \ + GEM_HOME=$out/${ruby.gemPath} \ gem install \ --local \ --force \ --http-proxy "http://nodtd.invalid" \ --ignore-dependencies \ --build-root "/" \ - --bindir "$out/bin" \ --backtrace \ $gempkg $gemFlags -- $buildFlags - rm -frv $out/cache # don't keep the .gem file here + 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:$GEM_PATH" \ + mkdir -p $out/bin + for prog in $out/${ruby.gemPath}/gems/*/bin/*; do + makeWrapper $prog $out/bin/$(basename $prog) \ + --prefix GEM_PATH : "$out/${ruby.gemPath}:$GEM_PATH" \ --prefix RUBYLIB : "${rubygems}/lib" \ --set RUBYOPT rubygems \ $extraWrapperFlags ''${extraWrapperFlagsArray[@]} done # looks like useless files which break build repeatability and consume space - rm -fv $out/doc/*/*/created.rid || true - rm -fv $out/gems/*/ext/*/mkmf.log || true + rm -fv $out/${ruby.gemPath}/doc/*/*/created.rid || true + rm -fv $out/${ruby.gemPath}/gems/*/ext/*/mkmf.log || true mkdir -p $out/nix-support From 2a3f2cfce878ba8e90dd1e656893f1312de034da Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Sat, 8 Nov 2014 23:46:34 +0000 Subject: [PATCH 43/69] add path fetcher --- pkgs/development/interpreters/ruby/load-ruby-env.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/development/interpreters/ruby/load-ruby-env.nix b/pkgs/development/interpreters/ruby/load-ruby-env.nix index 1a28e1cd047..8bf0db76d07 100644 --- a/pkgs/development/interpreters/ruby/load-ruby-env.nix +++ b/pkgs/development/interpreters/ruby/load-ruby-env.nix @@ -31,6 +31,7 @@ let const = x: y: x; + fetchers.path = attrs: attrs.src.path; fetchers.gem = attrs: fetchurl { url = "${attrs.src.source or "https://rubygems.org"}/downloads/${attrs.name}-${attrs.version}.gem"; inherit (attrs.src) sha256; From 2b0750f87a64fb582eb18d5dece6a09b5be4bf6f Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Sun, 9 Nov 2014 21:31:48 +0000 Subject: [PATCH 44/69] passthru ruby, make stdenv overridable --- pkgs/development/interpreters/ruby/gem.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index 6e83b4e611b..07cfefeae62 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -5,6 +5,7 @@ lib.makeOverridable ( { name , ruby ? defs.ruby , rubygems ? (rubygemsFun ruby) +, stdenv ? ruby.stdenv , namePrefix ? "${ruby.name}" + "-" , buildInputs ? [] , doCheck ? false @@ -13,7 +14,8 @@ lib.makeOverridable ( , gemPath ? [] , ...} @ attrs: -ruby.stdenv.mkDerivation (attrs // { +stdenv.mkDerivation (attrs // { + inherit ruby rubygems; inherit doCheck; buildInputs = [ rubygems makeWrapper git ] ++ buildInputs; From cf8f4963a7700fefdce40839ac21964a8c10f2a0 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Sun, 9 Nov 2014 22:16:58 +0000 Subject: [PATCH 45/69] rename rubyLibs to rubyPackages --- .../version-management/git-and-tools/default.nix | 2 +- .../version-management/redmine/bootstrap.nix | 2 +- .../version-management/redmine/default.nix | 4 ++-- pkgs/development/interpreters/ruby/packages.nix | 11 +++++++++++ pkgs/development/libraries/xapian/bindings/1.0.x.nix | 2 +- .../development/libraries/xapian/bindings/default.nix | 2 +- pkgs/development/tools/vagrant/default.nix | 4 ++-- pkgs/misc/misc.nix | 2 +- pkgs/servers/consul/default.nix | 6 +++--- pkgs/tools/audio/mpdcron/default.nix | 4 ++-- pkgs/tools/package-management/gem-nix/default.nix | 4 ++-- pkgs/top-level/all-packages.nix | 10 ++++++---- pkgs/top-level/python-packages.nix | 2 +- 13 files changed, 34 insertions(+), 21 deletions(-) create mode 100644 pkgs/development/interpreters/ruby/packages.nix diff --git a/pkgs/applications/version-management/git-and-tools/default.nix b/pkgs/applications/version-management/git-and-tools/default.nix index 4cabe3a4e2a..b90829c3330 100644 --- a/pkgs/applications/version-management/git-and-tools/default.nix +++ b/pkgs/applications/version-management/git-and-tools/default.nix @@ -73,7 +73,7 @@ rec { }; hub = import ./hub { - inherit (rubyLibs) rake; + inherit (rubyPackages) rake; inherit stdenv fetchurl groff makeWrapper; }; diff --git a/pkgs/applications/version-management/redmine/bootstrap.nix b/pkgs/applications/version-management/redmine/bootstrap.nix index 4b4359603c9..7bb9e268497 100644 --- a/pkgs/applications/version-management/redmine/bootstrap.nix +++ b/pkgs/applications/version-management/redmine/bootstrap.nix @@ -14,7 +14,7 @@ in stdenv.mkDerivation rec { sha256 = "0x0zwxyj4dwbk7l64s3lgny10mjf0ba8jwrbafsm4d72sncmacv0"; }; buildInputs = [ - ruby rubyLibs.bundler libiconv libxslt libxml2 pkgconfig + ruby rubyPackages.bundler libiconv libxslt libxml2 pkgconfig libffi imagemagickBig postgresql which stdenv ]; installPhase = '' diff --git a/pkgs/applications/version-management/redmine/default.nix b/pkgs/applications/version-management/redmine/default.nix index 4655a16671e..22fe6ba5be0 100644 --- a/pkgs/applications/version-management/redmine/default.nix +++ b/pkgs/applications/version-management/redmine/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, ruby, rubyLibs, libiconv, libxslt, libxml2, pkgconfig, libffi, imagemagickBig, postgresql }: +{ stdenv, fetchurl, ruby, rubyPackages, libiconv, libxslt, libxml2, pkgconfig, libffi, imagemagickBig, postgresql }: let gemspec = map (gem: fetchurl { url=gem.url; sha256=gem.hash; }) (import ./Gemfile.nix); @@ -25,7 +25,7 @@ in stdenv.mkDerivation rec { ''; buildInputs = [ - ruby rubyLibs.bundler libiconv libxslt libxml2 pkgconfig libffi + ruby rubyPackages.bundler libiconv libxslt libxml2 pkgconfig libffi imagemagickBig postgresql ]; diff --git a/pkgs/development/interpreters/ruby/packages.nix b/pkgs/development/interpreters/ruby/packages.nix new file mode 100644 index 00000000000..a35ccae6419 --- /dev/null +++ b/pkgs/development/interpreters/ruby/packages.nix @@ -0,0 +1,11 @@ +{ ruby, rubygemsFun, callPackage }: + +{ + # Nix utilities + gemFixes = callPackage ../development/interpreters/ruby/fixes.nix { }; + buildRubyGem = callPackage ../development/interpreters/ruby/gem.nix { inherit ruby; }; + loadRubyEnv = callPackage ../development/interpreters/ruby/load-ruby-env.nix { inherit ruby; }; + + # Gems + rubygems = rubygemsFun ruby; +} diff --git a/pkgs/development/libraries/xapian/bindings/1.0.x.nix b/pkgs/development/libraries/xapian/bindings/1.0.x.nix index 9ce5312f69a..2d44542e8fd 100644 --- a/pkgs/development/libraries/xapian/bindings/1.0.x.nix +++ b/pkgs/development/libraries/xapian/bindings/1.0.x.nix @@ -42,7 +42,7 @@ composableDerivation.composableDerivation {} rec { name = "ruby"; enable = { buildInputs = [ ruby ]; - # export same env vars as in rubyLibs + # export same env vars as in rubyPackages preConfigure = '' export RUBY_LIB=$out/${ruby.libPath} export RUBY_LIB_ARCH=$RUBY_LIB diff --git a/pkgs/development/libraries/xapian/bindings/default.nix b/pkgs/development/libraries/xapian/bindings/default.nix index 789d9a65308..8c1a4069748 100644 --- a/pkgs/development/libraries/xapian/bindings/default.nix +++ b/pkgs/development/libraries/xapian/bindings/default.nix @@ -42,7 +42,7 @@ composableDerivation.composableDerivation {} rec { name = "ruby"; enable = { buildInputs = [ ruby ]; - # export same env vars as in rubyLibs + # export same env vars as in rubyPackages preConfigure = '' export RUBY_LIB=$out/${ruby.libPath} export RUBY_LIB_ARCH=$RUBY_LIB diff --git a/pkgs/development/tools/vagrant/default.nix b/pkgs/development/tools/vagrant/default.nix index bd9ccf4947b..602d95076a4 100644 --- a/pkgs/development/tools/vagrant/default.nix +++ b/pkgs/development/tools/vagrant/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, dpkg, curl, libarchive, openssl, ruby, rubyLibs, libiconv +{ stdenv, fetchurl, dpkg, curl, libarchive, openssl, ruby, rubyPackages, libiconv , libxml2, libxslt }: assert stdenv.system == "x86_64-linux" || stdenv.system == "i686-linux"; @@ -58,7 +58,7 @@ stdenv.mkDerivation rec { ln -s ${ruby}/bin/erb opt/vagrant/embedded/bin ln -s ${ruby}/bin/gem opt/vagrant/embedded/bin ln -s ${ruby}/bin/irb opt/vagrant/embedded/bin - ln -s ${rubyLibs.rake}/bin/rake opt/vagrant/embedded/bin + ln -s ${rubyPackages.rake}/bin/rake opt/vagrant/embedded/bin ln -s ${ruby}/bin/rdoc opt/vagrant/embedded/bin ln -s ${ruby}/bin/ri opt/vagrant/embedded/bin ln -s ${ruby}/bin/ruby opt/vagrant/embedded/bin diff --git a/pkgs/misc/misc.nix b/pkgs/misc/misc.nix index 87be974ca96..6357c4e6f90 100644 --- a/pkgs/misc/misc.nix +++ b/pkgs/misc/misc.nix @@ -16,7 +16,7 @@ in packageOverrides = { rubyCollection = collection { name = "ruby"; - list = let l = rubyLibs; in + list = let l = rubyPackages; in [ pkgs.ruby l.chronic l.sup ]; }; } diff --git a/pkgs/servers/consul/default.nix b/pkgs/servers/consul/default.nix index 9244ee2f2cf..fdde367f7eb 100644 --- a/pkgs/servers/consul/default.nix +++ b/pkgs/servers/consul/default.nix @@ -1,5 +1,5 @@ { stdenv, lib, go, fetchgit, fetchhg, fetchbzr, fetchFromGitHub -, ruby, rubyLibs, nodejs }: +, ruby, rubyPackages, nodejs }: let version = "0.4.0"; @@ -13,10 +13,10 @@ stdenv.mkDerivation { inherit stdenv lib fetchgit fetchhg fetchbzr fetchFromGitHub; }; - buildInputs = [ go ruby rubyLibs.sass nodejs ]; + buildInputs = [ go ruby rubyPackages.sass nodejs ]; configurePhase = flip concatMapStrings - (with rubyLibs; [ execjs json minitest rake rdoc sass uglifier ]) + (with rubyPackages; [ execjs json minitest rake rdoc sass uglifier ]) (gem: '' export GEM_PATH="$GEM_PATH:${gem}/${ruby.gemPath}" ''); diff --git a/pkgs/tools/audio/mpdcron/default.nix b/pkgs/tools/audio/mpdcron/default.nix index 6a59fc49a95..785565fc38d 100644 --- a/pkgs/tools/audio/mpdcron/default.nix +++ b/pkgs/tools/audio/mpdcron/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchgit, autoconf, automake, libtool, pkgconfig, glib, libdaemon -, mpd_clientlib, curl, sqlite, ruby, rubyLibs, libnotify, haskellPackages }: +, mpd_clientlib, curl, sqlite, ruby, rubyPackages, libnotify, haskellPackages }: stdenv.mkDerivation rec { version = "20130809"; @@ -21,7 +21,7 @@ stdenv.mkDerivation rec { buildInputs = [ autoconf automake libtool pkgconfig glib libdaemon haskellPackages.pandoc - mpd_clientlib curl sqlite ruby rubyLibs.nokogiri libnotify ]; + mpd_clientlib curl sqlite ruby rubyPackages.nokogiri libnotify ]; preConfigure = '' ./autogen.sh diff --git a/pkgs/tools/package-management/gem-nix/default.nix b/pkgs/tools/package-management/gem-nix/default.nix index e048122b287..37130b69591 100644 --- a/pkgs/tools/package-management/gem-nix/default.nix +++ b/pkgs/tools/package-management/gem-nix/default.nix @@ -1,9 +1,9 @@ -{ stdenv, rubygems, rubyLibs, ruby, makeWrapper }: +{ stdenv, rubygems, rubyPackages, ruby, makeWrapper }: stdenv.mkDerivation rec { name = "gem-nix"; - buildInputs = [ ruby rubygems rubyLibs.nix makeWrapper ]; + buildInputs = [ ruby rubygems rubyPackages.nix makeWrapper ]; phases = ["installPhase"]; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 52ef2292dcb..d43effa6907 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -654,7 +654,7 @@ let ccnet = callPackage ../tools/networking/ccnet { }; consul = callPackage ../servers/consul { - inherit ruby rubyLibs; + inherit ruby rubyPackages; }; consul_ui = consul.ui; @@ -4050,6 +4050,8 @@ let ruby_2_0 = ruby_2_0_0; ruby_2_1 = ruby_2_1_3; + rubyPackages = callPackage ../development/interpreters/ruby/packages.nix { }; + rubygemsFun = ruby: builderDefsPackage (import ../development/interpreters/ruby/rubygems.nix) { inherit ruby makeWrapper; }; @@ -9968,7 +9970,7 @@ let ruby_gpgme = callPackage ../development/libraries/ruby_gpgme { ruby = ruby_1_9_3; - hoe = rubyLibs.hoe; + hoe = rubyPackages.hoe; }; ruby_ncursesw_sup = callPackage ../development/libraries/ruby_ncursesw_sup { }; @@ -9979,7 +9981,7 @@ let smtube = callPackage ../applications/video/smtube {}; - sup = with rubyLibs; callPackage ../applications/networking/mailreaders/sup { + sup = with rubyPackages; callPackage ../applications/networking/mailreaders/sup { ruby = ruby_1_9_3.override { cursesSupport = true; }; @@ -9992,7 +9994,7 @@ let # See https://github.com/NixOS/nixpkgs/issues/1804 and # https://github.com/NixOS/nixpkgs/issues/2146 - bundler = pkgs.lib.overrideDerivation pkgs.rubyLibs.bundler ( + bundler = pkgs.lib.overrideDerivation pkgs.rubyPackages.bundler ( oldAttrs: { dontPatchShebangs = 1; } diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 000ff72bd48..7238ccdf917 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -11495,7 +11495,7 @@ let propagatedBuildInputs = with self; [ dateutil ]; preInstall = stdenv.lib.optionalString stdenv.isDarwin '' - sed -i 's|^\([ ]*\)self.bin_path.*$|\1self.bin_path = "${pkgs.rubyLibs.terminal_notifier}/bin/terminal-notifier"|' build/lib/pync/TerminalNotifier.py + sed -i 's|^\([ ]*\)self.bin_path.*$|\1self.bin_path = "${pkgs.rubyPackages.terminal_notifier}/bin/terminal-notifier"|' build/lib/pync/TerminalNotifier.py ''; meta = with stdenv.lib; { From 6e6ac3502438c7e8c00eb7c16a695bbfa4def7e3 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Wed, 12 Nov 2014 22:32:32 +0000 Subject: [PATCH 46/69] more rubyLibs renaming --- doc/language-support.xml | 2 +- nixos/modules/services/misc/redmine.nix | 4 ++-- nixos/modules/services/monitoring/riemann-dash.nix | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/language-support.xml b/doc/language-support.xml index 5e49121e695..2816d7fe0b8 100644 --- a/doc/language-support.xml +++ b/doc/language-support.xml @@ -239,7 +239,7 @@ twisted = buildPythonPackage { $ nix-env -i gem-nix $ gem-nix --no-user-install --nix-file=pkgs/development/interpreters/ruby/generated.nix yajl-ruby - $ nix-build -A rubyLibs.yajl-ruby + $ nix-build -A rubyPackages.yajl-ruby diff --git a/nixos/modules/services/misc/redmine.nix b/nixos/modules/services/misc/redmine.nix index d7e64590f50..4b2f3bbb762 100644 --- a/nixos/modules/services/misc/redmine.nix +++ b/nixos/modules/services/misc/redmine.nix @@ -8,7 +8,7 @@ let cfg = config.services.redmine; ruby = pkgs.ruby; - rubyLibs = pkgs.rubyLibs; + rubyPackages = pkgs.rubyPackages; databaseYml = '' production: @@ -155,7 +155,7 @@ in { environment.HOME = "${pkgs.redmine}/share/redmine"; environment.REDMINE_LANG = "en"; environment.GEM_HOME = "${pkgs.redmine}/share/redmine/vendor/bundle/ruby/1.9.1"; - environment.GEM_PATH = "${rubyLibs.bundler}/lib/ruby/gems/1.9"; + environment.GEM_PATH = "${rubyPackages.bundler}/lib/ruby/gems/1.9"; path = with pkgs; [ imagemagickBig subversion diff --git a/nixos/modules/services/monitoring/riemann-dash.nix b/nixos/modules/services/monitoring/riemann-dash.nix index 148dc046805..32bda033467 100644 --- a/nixos/modules/services/monitoring/riemann-dash.nix +++ b/nixos/modules/services/monitoring/riemann-dash.nix @@ -15,7 +15,7 @@ let launcher = writeScriptBin "riemann-dash" '' #!/bin/sh - exec ${rubyLibs.riemann_dash}/bin/riemann-dash ${conf} + exec ${rubyPackages.riemann_dash}/bin/riemann-dash ${conf} ''; in { From e1149b71cc980ab08fd1f37ba41fedcffb74a449 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Tue, 18 Nov 2014 03:05:44 +0000 Subject: [PATCH 47/69] fix shebang patching for ruby gems --- pkgs/development/interpreters/ruby/gem.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index 07cfefeae62..084d0fdb466 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -18,7 +18,7 @@ stdenv.mkDerivation (attrs // { inherit ruby rubygems; inherit doCheck; - buildInputs = [ rubygems makeWrapper git ] ++ buildInputs; + buildInputs = [ ruby rubygems makeWrapper git ] ++ buildInputs; name = namePrefix + name; From 44cdf4eac71ce4bf2125939380d9ea6865bd64a3 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Tue, 18 Nov 2014 03:06:56 +0000 Subject: [PATCH 48/69] bundixify consul-ui --- pkgs/servers/consul/Gemfile | 6 ++++ pkgs/servers/consul/Gemfile.lock | 22 ++++++++++++ pkgs/servers/consul/default.nix | 11 ++---- pkgs/servers/consul/gemset.nix | 59 ++++++++++++++++++++++++++++++++ 4 files changed, 90 insertions(+), 8 deletions(-) create mode 100644 pkgs/servers/consul/Gemfile create mode 100644 pkgs/servers/consul/Gemfile.lock create mode 100644 pkgs/servers/consul/gemset.nix diff --git a/pkgs/servers/consul/Gemfile b/pkgs/servers/consul/Gemfile new file mode 100644 index 00000000000..77b884c352d --- /dev/null +++ b/pkgs/servers/consul/Gemfile @@ -0,0 +1,6 @@ +# A sample Gemfile +source "https://rubygems.org" + +gem "uglifier" +gem "sass" +gem "therubyracer" diff --git a/pkgs/servers/consul/Gemfile.lock b/pkgs/servers/consul/Gemfile.lock new file mode 100644 index 00000000000..8ca7428084d --- /dev/null +++ b/pkgs/servers/consul/Gemfile.lock @@ -0,0 +1,22 @@ +GEM + remote: https://rubygems.org/ + specs: + execjs (2.0.2) + json (1.8.1) + libv8 (3.16.14.3) + ref (1.0.5) + sass (3.3.6) + therubyracer (0.12.1) + libv8 (~> 3.16.14.0) + ref + uglifier (2.5.0) + execjs (>= 0.3.0) + json (>= 1.8.0) + +PLATFORMS + ruby + +DEPENDENCIES + sass + therubyracer + uglifier diff --git a/pkgs/servers/consul/default.nix b/pkgs/servers/consul/default.nix index fdde367f7eb..47e5f1189ef 100644 --- a/pkgs/servers/consul/default.nix +++ b/pkgs/servers/consul/default.nix @@ -1,8 +1,9 @@ { stdenv, lib, go, fetchgit, fetchhg, fetchbzr, fetchFromGitHub -, ruby, rubyPackages, nodejs }: +, ruby, rubyPackages, nodejs, loadRubyEnv }: let version = "0.4.0"; + rubyEnv = loadRubyEnv { gemset = ./gemset.nix; }; in with lib; @@ -13,13 +14,7 @@ stdenv.mkDerivation { inherit stdenv lib fetchgit fetchhg fetchbzr fetchFromGitHub; }; - buildInputs = [ go ruby rubyPackages.sass nodejs ]; - - configurePhase = flip concatMapStrings - (with rubyPackages; [ execjs json minitest rake rdoc sass uglifier ]) - (gem: '' - export GEM_PATH="$GEM_PATH:${gem}/${ruby.gemPath}" - ''); + buildInputs = [ go ruby rubyEnv.sass rubyEnv.uglifier nodejs ]; buildPhase = '' # Build consul binary diff --git a/pkgs/servers/consul/gemset.nix b/pkgs/servers/consul/gemset.nix new file mode 100644 index 00000000000..a31df61554f --- /dev/null +++ b/pkgs/servers/consul/gemset.nix @@ -0,0 +1,59 @@ +{ + execjs = { + version = "2.0.2"; + src = { + type = "gem"; + sha256 = "167kbkyql7nvvwjsgdw5z8j66ngq7kc59gxfwsxhqi5fl1z0jbjs"; + }; + }; + json = { + version = "1.8.1"; + src = { + type = "gem"; + sha256 = "0002bsycvizvkmk1jyv8px1hskk6wrjfk4f7x5byi8gxm6zzn6wn"; + }; + }; + libv8 = { + version = "3.16.14.3"; + src = { + type = "gem"; + sha256 = "1arjjbmr9zxkyv6pdrihsz1p5cadzmx8308vgfvrhm380ccgridm"; + }; + }; + ref = { + version = "1.0.5"; + src = { + type = "gem"; + sha256 = "19qgpsfszwc2sfh6wixgky5agn831qq8ap854i1jqqhy1zsci3la"; + }; + }; + sass = { + version = "3.3.6"; + src = { + type = "gem"; + sha256 = "0ra0kxx52cgyrq6db7a1vysk984ilshbx40bcf527k8b3fha6k5r"; + }; + }; + therubyracer = { + version = "0.12.1"; + src = { + type = "gem"; + sha256 = "106fqimqyaalh7p6czbl5m2j69z8gv7cm10mjb8bbb2p2vlmqmi6"; + }; + dependencies = [ + "libv8" + "ref" + ]; + }; + uglifier = { + version = "2.5.0"; + src = { + type = "gem"; + sha256 = "0b9kxgyg8cv3g1bp6casndfzfy71jd9xyjxwng0lj90vzqrgjp20"; + }; + dependencies = [ + "execjs" + "json" + ]; + }; +} \ No newline at end of file From 973794b24a10d3df904e5fd4ca51c1d36c3d3c9f Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Tue, 18 Nov 2014 03:31:56 +0000 Subject: [PATCH 49/69] bundixify riemann-dash --- .../services/monitoring/riemann-dash.nix | 2 +- pkgs/servers/monitoring/riemann-dash/Gemfile | 3 + .../monitoring/riemann-dash/Gemfile.lock | 27 +++++++ .../monitoring/riemann-dash/default.nix | 3 + .../monitoring/riemann-dash/gemset.nix | 80 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 1 + 6 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 pkgs/servers/monitoring/riemann-dash/Gemfile create mode 100644 pkgs/servers/monitoring/riemann-dash/Gemfile.lock create mode 100644 pkgs/servers/monitoring/riemann-dash/default.nix create mode 100644 pkgs/servers/monitoring/riemann-dash/gemset.nix diff --git a/nixos/modules/services/monitoring/riemann-dash.nix b/nixos/modules/services/monitoring/riemann-dash.nix index 32bda033467..523f74cb72b 100644 --- a/nixos/modules/services/monitoring/riemann-dash.nix +++ b/nixos/modules/services/monitoring/riemann-dash.nix @@ -15,7 +15,7 @@ let launcher = writeScriptBin "riemann-dash" '' #!/bin/sh - exec ${rubyPackages.riemann_dash}/bin/riemann-dash ${conf} + exec ${pkgs.riemann-dash}/bin/riemann-dash ${conf} ''; in { diff --git a/pkgs/servers/monitoring/riemann-dash/Gemfile b/pkgs/servers/monitoring/riemann-dash/Gemfile new file mode 100644 index 00000000000..496302e7643 --- /dev/null +++ b/pkgs/servers/monitoring/riemann-dash/Gemfile @@ -0,0 +1,3 @@ +source 'https://rubygems.org' + +gem "riemann-dash", "0.2.9" diff --git a/pkgs/servers/monitoring/riemann-dash/Gemfile.lock b/pkgs/servers/monitoring/riemann-dash/Gemfile.lock new file mode 100644 index 00000000000..cd0ace470e2 --- /dev/null +++ b/pkgs/servers/monitoring/riemann-dash/Gemfile.lock @@ -0,0 +1,27 @@ +GEM + remote: https://rubygems.org/ + specs: + erubis (2.7.0) + multi_json (1.3.6) + rack (1.5.2) + rack-protection (1.5.3) + rack + riemann-dash (0.2.9) + erubis (>= 2.7.0) + multi_json (= 1.3.6) + sass (>= 3.1.14) + sinatra (~> 1.4.5) + webrick (~> 1.3.1) + sass (3.4.8) + sinatra (1.4.5) + rack (~> 1.4) + rack-protection (~> 1.4) + tilt (~> 1.3, >= 1.3.4) + tilt (1.4.1) + webrick (1.3.1) + +PLATFORMS + ruby + +DEPENDENCIES + riemann-dash (= 0.2.9) diff --git a/pkgs/servers/monitoring/riemann-dash/default.nix b/pkgs/servers/monitoring/riemann-dash/default.nix new file mode 100644 index 00000000000..295e68770b8 --- /dev/null +++ b/pkgs/servers/monitoring/riemann-dash/default.nix @@ -0,0 +1,3 @@ +{ loadRubyEnv }: + +(loadRubyEnv { gemset = ./gemset.nix; }).riemann-dash diff --git a/pkgs/servers/monitoring/riemann-dash/gemset.nix b/pkgs/servers/monitoring/riemann-dash/gemset.nix new file mode 100644 index 00000000000..98ebdcc3059 --- /dev/null +++ b/pkgs/servers/monitoring/riemann-dash/gemset.nix @@ -0,0 +1,80 @@ +{ + erubis = { + version = "2.7.0"; + src = { + type = "gem"; + sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3"; + }; + }; + multi_json = { + version = "1.3.6"; + src = { + type = "gem"; + sha256 = "0q2zjfvd2ibds9g9nzf2p1b47fc1wqliwfywv5pw85w15lmy91yr"; + }; + }; + rack = { + version = "1.5.2"; + src = { + type = "gem"; + sha256 = "19szfw76cscrzjldvw30jp3461zl00w4xvw1x9lsmyp86h1g0jp6"; + }; + }; + rack-protection = { + version = "1.5.3"; + src = { + type = "gem"; + sha256 = "0cvb21zz7p9wy23wdav63z5qzfn4nialik22yqp6gihkgfqqrh5r"; + }; + dependencies = [ + "rack" + ]; + }; + riemann-dash = { + version = "0.2.9"; + src = { + type = "gem"; + sha256 = "0ws5wmjbv8w9lcr3i2mdinj2qm91p6c85k6c067i67cf0p90jxq3"; + }; + dependencies = [ + "erubis" + "multi_json" + "sass" + "sinatra" + "webrick" + ]; + }; + sass = { + version = "3.4.8"; + src = { + type = "gem"; + sha256 = "1ianyj2figwk314h10fkzpjql2xxi5l4njv1h0w8iyzjda85rqlp"; + }; + }; + sinatra = { + version = "1.4.5"; + src = { + type = "gem"; + sha256 = "0qyna3wzlnvsz69d21lxcm3ixq7db08mi08l0a88011qi4qq701s"; + }; + dependencies = [ + "rack" + "rack-protection" + "tilt" + ]; + }; + tilt = { + version = "1.4.1"; + src = { + type = "gem"; + sha256 = "00sr3yy7sbqaq7cb2d2kpycajxqf1b1wr1yy33z4bnzmqii0b0ir"; + }; + }; + webrick = { + version = "1.3.1"; + src = { + type = "gem"; + sha256 = "0s42mxihcl2bx0h9q0v2syl70qndydfkl39a06h9il17p895ya8g"; + }; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index d43effa6907..94de459d38d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -7454,6 +7454,7 @@ let net_snmp = callPackage ../servers/monitoring/net-snmp { }; riemann = callPackage ../servers/monitoring/riemann { }; + riemann-dash = callPackage ../servers/monitoring/riemann-dash { }; oidentd = callPackage ../servers/identd/oidentd { }; From e51afe5e7cd97d59551695bd6f4ee1aeff6a1bb6 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Tue, 18 Nov 2014 04:07:30 +0000 Subject: [PATCH 50/69] fix hub --- .../version-management/git-and-tools/default.nix | 2 +- .../version-management/git-and-tools/hub/default.nix | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/version-management/git-and-tools/default.nix b/pkgs/applications/version-management/git-and-tools/default.nix index b90829c3330..975545d3451 100644 --- a/pkgs/applications/version-management/git-and-tools/default.nix +++ b/pkgs/applications/version-management/git-and-tools/default.nix @@ -73,7 +73,7 @@ rec { }; hub = import ./hub { - inherit (rubyPackages) rake; + inherit buildRubyGem; inherit stdenv fetchurl groff makeWrapper; }; diff --git a/pkgs/applications/version-management/git-and-tools/hub/default.nix b/pkgs/applications/version-management/git-and-tools/hub/default.nix index 8d578c2b466..abb2db5f1a7 100644 --- a/pkgs/applications/version-management/git-and-tools/hub/default.nix +++ b/pkgs/applications/version-management/git-and-tools/hub/default.nix @@ -1,5 +1,9 @@ -{ stdenv, fetchurl, groff, rake, makeWrapper }: +{ stdenv, fetchurl, groff, buildRubyGem, makeWrapper }: +let rake = buildRubyGem { + name = "rake-10.3.2"; + sha256 = "0nvpkjrpsk8xxnij2wd1cdn6arja9q11sxx4aq4fz18bc6fss15m"; +}; in stdenv.mkDerivation rec { name = "hub-${version}"; version = "1.12.2"; From bc9934147f989981077534979dfb761960c5189d Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Tue, 18 Nov 2014 04:24:07 +0000 Subject: [PATCH 51/69] fix vagrant --- pkgs/development/tools/vagrant/default.nix | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pkgs/development/tools/vagrant/default.nix b/pkgs/development/tools/vagrant/default.nix index 602d95076a4..6a5359b8147 100644 --- a/pkgs/development/tools/vagrant/default.nix +++ b/pkgs/development/tools/vagrant/default.nix @@ -1,9 +1,16 @@ -{ stdenv, fetchurl, dpkg, curl, libarchive, openssl, ruby, rubyPackages, libiconv +{ stdenv, fetchurl, dpkg, curl, libarchive, openssl, ruby, buildRubyGem, libiconv , libxml2, libxslt }: assert stdenv.system == "x86_64-linux" || stdenv.system == "i686-linux"; -let version = "1.6.5"; +let + version = "1.6.5"; + rake = buildRubyGem { + inherit ruby; + name = "rake-10.3.2"; + sha256 = "0nvpkjrpsk8xxnij2wd1cdn6arja9q11sxx4aq4fz18bc6fss15m"; + }; + in stdenv.mkDerivation rec { name = "vagrant-${version}"; @@ -58,7 +65,7 @@ stdenv.mkDerivation rec { ln -s ${ruby}/bin/erb opt/vagrant/embedded/bin ln -s ${ruby}/bin/gem opt/vagrant/embedded/bin ln -s ${ruby}/bin/irb opt/vagrant/embedded/bin - ln -s ${rubyPackages.rake}/bin/rake opt/vagrant/embedded/bin + ln -s ${rake}/bin/rake opt/vagrant/embedded/bin ln -s ${ruby}/bin/rdoc opt/vagrant/embedded/bin ln -s ${ruby}/bin/ri opt/vagrant/embedded/bin ln -s ${ruby}/bin/ruby opt/vagrant/embedded/bin From 4ed847d81d1e10da91d5f8bae2f92e7af32dbe80 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Sun, 28 Dec 2014 14:22:11 -0500 Subject: [PATCH 52/69] redmine: fix use of bundler --- nixos/modules/services/misc/redmine.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/modules/services/misc/redmine.nix b/nixos/modules/services/misc/redmine.nix index 4b2f3bbb762..5d91468753b 100644 --- a/nixos/modules/services/misc/redmine.nix +++ b/nixos/modules/services/misc/redmine.nix @@ -155,7 +155,7 @@ in { environment.HOME = "${pkgs.redmine}/share/redmine"; environment.REDMINE_LANG = "en"; environment.GEM_HOME = "${pkgs.redmine}/share/redmine/vendor/bundle/ruby/1.9.1"; - environment.GEM_PATH = "${rubyPackages.bundler}/lib/ruby/gems/1.9"; + environment.GEM_PATH = "${bundler}/${bundler.ruby.gemPath}"; path = with pkgs; [ imagemagickBig subversion From 74a4f01fe4f9d0fe982181e9b2a932824b6d50b3 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Mon, 29 Dec 2014 00:48:01 -0500 Subject: [PATCH 53/69] ruby: add git fetcher --- pkgs/development/interpreters/ruby/load-ruby-env.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/ruby/load-ruby-env.nix b/pkgs/development/interpreters/ruby/load-ruby-env.nix index 8bf0db76d07..a7cdf8d0dac 100644 --- a/pkgs/development/interpreters/ruby/load-ruby-env.nix +++ b/pkgs/development/interpreters/ruby/load-ruby-env.nix @@ -1,4 +1,4 @@ -{ ruby, lib, callPackage, gemFixes, fetchurl, buildRubyGem }@defs: +{ ruby, lib, callPackage, gemFixes, fetchurl, fetchgit, buildRubyGem }@defs: # This function builds a set of gems. You first convert your Gemfile to an attrset # called a "gemset", and then use this function to build the gemset. @@ -36,6 +36,10 @@ let url = "${attrs.src.source or "https://rubygems.org"}/downloads/${attrs.name}-${attrs.version}.gem"; inherit (attrs.src) sha256; }; + fetchers.git = attrs: fetchgit { + inherit (attrs.src) url rev sha256; + leaveDotGit = true; + }; instantiate = (attrs: let From 94dd4b97211d413e80735c4f3e228187202c4564 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Tue, 30 Dec 2014 21:05:00 -0500 Subject: [PATCH 54/69] ruby: WIP --- nixos/modules/services/misc/redmine.nix | 1 - .../networking/mailreaders/sup/.bundix/cache | 4 ++++ .../networking/mailreaders/sup/.bundle/config | 2 ++ .../networking/mailreaders/sup/Gemfile | 6 +++++ .../networking/mailreaders/sup/Gemfile.lock | 12 ++++++++++ .../networking/mailreaders/sup/gemset.nix | 19 +++++++++++++++ .../version-management/redmine/default.nix | 4 ++-- .../interpreters/ruby/bundler-head.nix | 18 +++++++++++++++ .../development/interpreters/ruby/bundler.nix | 12 +++++++--- .../libraries/xapian/bindings/1.0.x.nix | 1 - .../libraries/xapian/bindings/default.nix | 1 - pkgs/servers/consul/default.nix | 2 +- pkgs/tools/audio/mpdcron/default.nix | 4 ++-- .../package-management/gem-nix/default.nix | 23 ------------------- pkgs/top-level/all-packages.nix | 1 + 15 files changed, 76 insertions(+), 34 deletions(-) create mode 100644 pkgs/applications/networking/mailreaders/sup/.bundix/cache create mode 100644 pkgs/applications/networking/mailreaders/sup/.bundle/config create mode 100644 pkgs/applications/networking/mailreaders/sup/Gemfile create mode 100644 pkgs/applications/networking/mailreaders/sup/Gemfile.lock create mode 100644 pkgs/applications/networking/mailreaders/sup/gemset.nix create mode 100644 pkgs/development/interpreters/ruby/bundler-head.nix delete mode 100644 pkgs/tools/package-management/gem-nix/default.nix diff --git a/nixos/modules/services/misc/redmine.nix b/nixos/modules/services/misc/redmine.nix index 5d91468753b..059cc18733b 100644 --- a/nixos/modules/services/misc/redmine.nix +++ b/nixos/modules/services/misc/redmine.nix @@ -8,7 +8,6 @@ let cfg = config.services.redmine; ruby = pkgs.ruby; - rubyPackages = pkgs.rubyPackages; databaseYml = '' production: diff --git a/pkgs/applications/networking/mailreaders/sup/.bundix/cache b/pkgs/applications/networking/mailreaders/sup/.bundix/cache new file mode 100644 index 00000000000..5894e96022c --- /dev/null +++ b/pkgs/applications/networking/mailreaders/sup/.bundix/cache @@ -0,0 +1,4 @@ +--- +gem: + https://rubygems.org/downloads/mini_portile-0.6.0.gem: 09kcn4g63xrdirgwxgjikqg976rr723bkc9bxfr29pk22cj3wavn + https://rubygems.org/downloads/gpgme-2.0.7.gem: 1p84zhiri2ihcld7py9mwc2kg5xs5da8fk11zhndrhmw05yvf5mr diff --git a/pkgs/applications/networking/mailreaders/sup/.bundle/config b/pkgs/applications/networking/mailreaders/sup/.bundle/config new file mode 100644 index 00000000000..88cb2d52935 --- /dev/null +++ b/pkgs/applications/networking/mailreaders/sup/.bundle/config @@ -0,0 +1,2 @@ +--- +BUNDLE_NO_INSTALL: true diff --git a/pkgs/applications/networking/mailreaders/sup/Gemfile b/pkgs/applications/networking/mailreaders/sup/Gemfile new file mode 100644 index 00000000000..f7d13a16326 --- /dev/null +++ b/pkgs/applications/networking/mailreaders/sup/Gemfile @@ -0,0 +1,6 @@ +source "https://rubygems.org" + +#gem "sup", "0.20.0" +#gem 'sup', '~> 0.20.0' +#gem 'gpgme' +gem 'gpgme', '2.0.7' diff --git a/pkgs/applications/networking/mailreaders/sup/Gemfile.lock b/pkgs/applications/networking/mailreaders/sup/Gemfile.lock new file mode 100644 index 00000000000..2f56752d9a2 --- /dev/null +++ b/pkgs/applications/networking/mailreaders/sup/Gemfile.lock @@ -0,0 +1,12 @@ +GEM + remote: https://rubygems.org/ + specs: + gpgme (2.0.7) + mini_portile (>= 0.5.0, <= 0.6.0) + mini_portile (0.6.0) + +PLATFORMS + ruby + +DEPENDENCIES + gpgme (= 2.0.7) diff --git a/pkgs/applications/networking/mailreaders/sup/gemset.nix b/pkgs/applications/networking/mailreaders/sup/gemset.nix new file mode 100644 index 00000000000..de28a5dfeb3 --- /dev/null +++ b/pkgs/applications/networking/mailreaders/sup/gemset.nix @@ -0,0 +1,19 @@ +{ + gpgme = { + version = "2.0.7"; + src = { + type = "gem"; + sha256 = "1p84zhiri2ihcld7py9mwc2kg5xs5da8fk11zhndrhmw05yvf5mr"; + }; + dependencies = [ + "mini_portile" + ]; + }; + mini_portile = { + version = "0.6.0"; + src = { + type = "gem"; + sha256 = "09kcn4g63xrdirgwxgjikqg976rr723bkc9bxfr29pk22cj3wavn"; + }; + }; +} \ No newline at end of file diff --git a/pkgs/applications/version-management/redmine/default.nix b/pkgs/applications/version-management/redmine/default.nix index ea3a07db724..544c4218e00 100644 --- a/pkgs/applications/version-management/redmine/default.nix +++ b/pkgs/applications/version-management/redmine/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, ruby, rubyPackages, libiconv, libiconvOrNull, libiconvOrLibc, libxslt, libxml2, pkgconfig, libffi, glibc, imagemagickBig, postgresql }: +{ stdenv, fetchurl, ruby, rubyPackages, bundler, libiconv, libiconvOrNull, libiconvOrLibc, libxslt, libxml2, pkgconfig, libffi, glibc, imagemagickBig, postgresql }: let gemspec = map (gem: fetchurl { url=gem.url; sha256=gem.hash; }) (import ./Gemfile.nix); @@ -25,7 +25,7 @@ in stdenv.mkDerivation rec { ''; buildInputs = [ - ruby rubyPackages.bundler + ruby bundler ] ++ (if (libiconvOrNull != null) then [libiconv] else []) ++ [ libxslt libxml2 pkgconfig libffi imagemagickBig postgresql diff --git a/pkgs/development/interpreters/ruby/bundler-head.nix b/pkgs/development/interpreters/ruby/bundler-head.nix new file mode 100644 index 00000000000..62169759bf5 --- /dev/null +++ b/pkgs/development/interpreters/ruby/bundler-head.nix @@ -0,0 +1,18 @@ +{ buildRubyGem, coreutils, fetchgit }: + +buildRubyGem { + name = "bundler-HEAD"; + src = fetchgit { + url = "https://github.com/bundler/bundler.git"; + rev = "17919e790cd8f6fb369d6afc81f0afec6fb5ad8b"; + sha256 = "10gqashaax0i18gs95pijqsnpnwfj9v3va5rpxps0v597d16px9b"; + leaveDotGit = true; + }; + dontPatchShebangs = true; + postInstall = '' + find $out -type f -perm +0100 | while read f; do + substituteInPlace $f \ + --replace "/usr/bin/env" "${coreutils}/bin/env" + done + ''; +} diff --git a/pkgs/development/interpreters/ruby/bundler.nix b/pkgs/development/interpreters/ruby/bundler.nix index a66aa08c1f5..cbec8d0ad75 100644 --- a/pkgs/development/interpreters/ruby/bundler.nix +++ b/pkgs/development/interpreters/ruby/bundler.nix @@ -1,7 +1,13 @@ -{ buildRubyGem }: +{ buildRubyGem, coreutils }: buildRubyGem { - name = "bundler-1.7.4"; - sha256 = "122k07z60780mr00zfbbw04v9xlw1fhxjsx4g2rbm66hxlnlnh89"; + name = "bundler-1.7.9"; + sha256 = "1gd201rh17xykab9pbqp0dkxfm7b9jri02llyvmrc0c5bz2vhycm"; dontPatchShebangs = true; + postInstall = '' + find $out -type f -perm +0100 | while read f; do + substituteInPlace $f \ + --replace "/usr/bin/env" "${coreutils}/bin/env" + done + ''; } diff --git a/pkgs/development/libraries/xapian/bindings/1.0.x.nix b/pkgs/development/libraries/xapian/bindings/1.0.x.nix index 2d44542e8fd..5d69f73d797 100644 --- a/pkgs/development/libraries/xapian/bindings/1.0.x.nix +++ b/pkgs/development/libraries/xapian/bindings/1.0.x.nix @@ -42,7 +42,6 @@ composableDerivation.composableDerivation {} rec { name = "ruby"; enable = { buildInputs = [ ruby ]; - # export same env vars as in rubyPackages preConfigure = '' export RUBY_LIB=$out/${ruby.libPath} export RUBY_LIB_ARCH=$RUBY_LIB diff --git a/pkgs/development/libraries/xapian/bindings/default.nix b/pkgs/development/libraries/xapian/bindings/default.nix index 8c1a4069748..740b71c59a7 100644 --- a/pkgs/development/libraries/xapian/bindings/default.nix +++ b/pkgs/development/libraries/xapian/bindings/default.nix @@ -42,7 +42,6 @@ composableDerivation.composableDerivation {} rec { name = "ruby"; enable = { buildInputs = [ ruby ]; - # export same env vars as in rubyPackages preConfigure = '' export RUBY_LIB=$out/${ruby.libPath} export RUBY_LIB_ARCH=$RUBY_LIB diff --git a/pkgs/servers/consul/default.nix b/pkgs/servers/consul/default.nix index 94eff57e7c3..f056a8d496e 100644 --- a/pkgs/servers/consul/default.nix +++ b/pkgs/servers/consul/default.nix @@ -1,5 +1,5 @@ { stdenv, lib, go, fetchgit, fetchhg, fetchbzr, fetchFromGitHub -, ruby, rubyPackages, nodejs, loadRubyEnv }: +, ruby, nodejs, loadRubyEnv }: let version = "0.4.1"; diff --git a/pkgs/tools/audio/mpdcron/default.nix b/pkgs/tools/audio/mpdcron/default.nix index f9f33d84437..a6fe1151b77 100644 --- a/pkgs/tools/audio/mpdcron/default.nix +++ b/pkgs/tools/audio/mpdcron/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchgit, autoconf, automake, libtool, pkgconfig, glib, libdaemon +{ stdenv, fetchgit, autoconf, automake, libtool, pkgconfig, glib, libdaemon, buildRubyGem , mpd_clientlib, curl, sqlite, ruby, rubyPackages, libnotify, haskellPackages }: stdenv.mkDerivation rec { @@ -21,7 +21,7 @@ stdenv.mkDerivation rec { buildInputs = [ autoconf automake libtool pkgconfig glib libdaemon haskellPackages.pandoc - mpd_clientlib curl sqlite ruby rubyPackages.nokogiri libnotify ]; + mpd_clientlib curl sqlite ruby /*nokogiri*/ libnotify ]; preConfigure = '' ./autogen.sh diff --git a/pkgs/tools/package-management/gem-nix/default.nix b/pkgs/tools/package-management/gem-nix/default.nix deleted file mode 100644 index 37130b69591..00000000000 --- a/pkgs/tools/package-management/gem-nix/default.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ stdenv, rubygems, rubyPackages, ruby, makeWrapper }: - -stdenv.mkDerivation rec { - name = "gem-nix"; - - buildInputs = [ ruby rubygems rubyPackages.nix makeWrapper ]; - - phases = ["installPhase"]; - - installPhase = '' - mkdir -p $out/bin - echo 'exec ${rubygems}/bin/gem nix "$@"' >> $out/bin/gem-nix - chmod +x $out/bin/gem-nix - wrapProgram $out/bin/gem-nix \ - --set GEM_PATH $GEM_PATH - ''; - - meta = with stdenv.lib; { - description = "gem nix command in a nice wrapper"; - platforms = platforms.unix; - maintainers = [ maintainers.iElectric ]; - }; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 69e22d161f6..9c966b0066f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4189,6 +4189,7 @@ let }; bundler = callPackage ../development/interpreters/ruby/bundler.nix { }; + bundler_HEAD = callPackage ../development/interpreters/ruby/bundler-head.nix { }; gemFixes = callPackage ../development/interpreters/ruby/fixes.nix { }; buildRubyGem = callPackage ../development/interpreters/ruby/gem.nix { }; loadRubyEnv = callPackage ../development/interpreters/ruby/load-ruby-env.nix { }; From 32bae8d09a1d5ff92143c9a749644b63f829fc32 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Wed, 14 Jan 2015 01:13:51 -0500 Subject: [PATCH 55/69] bundler: update HEAD version --- pkgs/development/interpreters/ruby/bundler-head.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/interpreters/ruby/bundler-head.nix b/pkgs/development/interpreters/ruby/bundler-head.nix index 62169759bf5..9a05547b622 100644 --- a/pkgs/development/interpreters/ruby/bundler-head.nix +++ b/pkgs/development/interpreters/ruby/bundler-head.nix @@ -4,8 +4,8 @@ buildRubyGem { name = "bundler-HEAD"; src = fetchgit { url = "https://github.com/bundler/bundler.git"; - rev = "17919e790cd8f6fb369d6afc81f0afec6fb5ad8b"; - sha256 = "10gqashaax0i18gs95pijqsnpnwfj9v3va5rpxps0v597d16px9b"; + rev = "a2343c9eabf5403d8ffcbca4dea33d18a60fc157"; + sha256 = "1f0isjrn4rwak3q6sbs6v6gqhwln32gv2dbd98r902nkg9i7y5i0"; leaveDotGit = true; }; dontPatchShebangs = true; From aaa2e9705ab1bcfebc14f598ae60237749e75033 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Wed, 14 Jan 2015 04:20:50 -0500 Subject: [PATCH 56/69] ruby: cache gem files --- pkgs/development/interpreters/ruby/gem.nix | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index 084d0fdb466..ec263d568b8 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -113,6 +113,14 @@ stdenv.mkDerivation (attrs // { fi EOF + # Copy the gem file to the cache. + # This is very important in order for many parts of Bundler to not blow up. + # See https://github.com/bundler/bundler/issues/3327 + gemname=$(basename $out/${ruby.gemPath}/gems/*).gem + echo "caching $gemname" + mkdir $out/${ruby.gemPath}/cache + cp $gempkg $out/${ruby.gemPath}/cache/$gemname + runHook postInstall ''; From 1a1e6cfc04c9123f622d6db9c7ac5ba3832dc30b Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Wed, 14 Jan 2015 21:19:53 -0500 Subject: [PATCH 57/69] ruby: various fixes --- pkgs/development/interpreters/ruby/gem.nix | 34 ++++++++++--------- .../interpreters/ruby/load-ruby-env.nix | 2 +- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index ec263d568b8..5516646f920 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -29,6 +29,8 @@ stdenv.mkDerivation (attrs // { inherit (attrs) sha256; }; + phases = [ "unpackPhase" "patchPhase" "buildPhase" "checkPhase" "installPhase" "fixupPhase" ]; + # The source is expected to either be a gem package or a directory. # # - Gem packages are already built, so they don't even need to be unpacked. @@ -40,7 +42,7 @@ stdenv.mkDerivation (attrs // { if [[ $src =~ $gemRegex ]] then runHook preUnpack - echo "Source is a gem package, won't unpack." + echo "source is a gem package, won't unpack" gempkg=$src dontBuild=1 runHook postUnpack @@ -60,14 +62,20 @@ stdenv.mkDerivation (attrs // { git reset fi - gemspec=`find . -name '*.gemspec'` - output=`gem build $gemspec` + gemspec=$(find . -name '*.gemspec') + echo "found the following gemspecs:" + echo "$gemspec" - gem build $gemspec | tee .output - gempkg=`cat .output | grep -oP 'File: \K(.*)'` - rm .output + gemspec=$(echo "$gemspec" | head -n1) + echo "building $gemspec" - echo "Gem package built: $gempkg" + exec 3>&1 + output=$(gem build $gemspec | tee >(cat - >&3)) + exec 3>&- + + gempkg=$(echo "$output" | grep -oP 'File: \K(.*)') + + echo "gem package built: $gempkg" runHook postBuild ''; @@ -90,7 +98,9 @@ stdenv.mkDerivation (attrs // { --backtrace \ $gempkg $gemFlags -- $buildFlags - rm -frv $out/${ruby.gemPath}/cache # don't keep the .gem file here + # Yes, we really do need the $out/${ruby.gemPath}/cache. + # This is very important in order for many parts of RubyGems/Bundler to not blow up. + # See https://github.com/bundler/bundler/issues/3327 mkdir -p $out/bin for prog in $out/${ruby.gemPath}/gems/*/bin/*; do @@ -113,14 +123,6 @@ stdenv.mkDerivation (attrs // { fi EOF - # Copy the gem file to the cache. - # This is very important in order for many parts of Bundler to not blow up. - # See https://github.com/bundler/bundler/issues/3327 - gemname=$(basename $out/${ruby.gemPath}/gems/*).gem - echo "caching $gemname" - mkdir $out/${ruby.gemPath}/cache - cp $gempkg $out/${ruby.gemPath}/cache/$gemname - runHook postInstall ''; diff --git a/pkgs/development/interpreters/ruby/load-ruby-env.nix b/pkgs/development/interpreters/ruby/load-ruby-env.nix index a7cdf8d0dac..913e2cb39f2 100644 --- a/pkgs/development/interpreters/ruby/load-ruby-env.nix +++ b/pkgs/development/interpreters/ruby/load-ruby-env.nix @@ -37,7 +37,7 @@ let inherit (attrs.src) sha256; }; fetchers.git = attrs: fetchgit { - inherit (attrs.src) url rev sha256; + inherit (attrs.src) url rev sha256 fetchSubmodules; leaveDotGit = true; }; From 9ad38ec3229e2b29cf54213fb7d4b8d109d3898d Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Thu, 15 Jan 2015 20:58:05 -0500 Subject: [PATCH 58/69] ruby: allow for overriding the src --- .../interpreters/ruby/load-ruby-env.nix | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/pkgs/development/interpreters/ruby/load-ruby-env.nix b/pkgs/development/interpreters/ruby/load-ruby-env.nix index 913e2cb39f2..c4356ed5f50 100644 --- a/pkgs/development/interpreters/ruby/load-ruby-env.nix +++ b/pkgs/development/interpreters/ruby/load-ruby-env.nix @@ -43,16 +43,19 @@ let instantiate = (attrs: let + defaultAttrs = { + name = "${attrs.name}-${attrs.version}"; + inherit ruby gemPath; + }; gemPath = map (name: gemset''."${name}") (attrs.dependencies or []); fixedAttrs = attrs // (fixes."${attrs.name}" or (const {})) attrs; + withSource = fixedAttrs // + (if (lib.isDerivation fixedAttrs.src || builtins.isString fixedAttrs.src) + then {} + else { src = (fetchers."${fixedAttrs.src.type}" fixedAttrs); }); + in - buildRubyGem ( - fixedAttrs // { - name = "${attrs.name}-${attrs.version}"; - src = fetchers."${attrs.src.type}" attrs; - inherit ruby gemPath; - } - ) + buildRubyGem (withSource // defaultAttrs) ); gemset' = if builtins.isAttrs gemset then gemset else import gemset; From 673fccf50576b4331a0c82ad03a2423881a3ee48 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Sun, 18 Jan 2015 18:47:28 -0500 Subject: [PATCH 59/69] ruby: new bundler approach --- .../interpreters/ruby/bundler-env.nix | 147 ++++++++++++++++++ pkgs/top-level/all-packages.nix | 1 + 2 files changed, 148 insertions(+) create mode 100644 pkgs/development/interpreters/ruby/bundler-env.nix diff --git a/pkgs/development/interpreters/ruby/bundler-env.nix b/pkgs/development/interpreters/ruby/bundler-env.nix new file mode 100644 index 00000000000..3fb02fa1ef8 --- /dev/null +++ b/pkgs/development/interpreters/ruby/bundler-env.nix @@ -0,0 +1,147 @@ +{ stdenv, runCommand, writeText, writeScriptBin, ruby, lib, callPackage +, gemFixes, fetchurl, fetchgit, buildRubyGem +}@defs: + +# This is a work-in-progress. +# The idea is that his will replace load-ruby-env.nix, +# using (a patched) bundler to handle the entirety of the installation process. + +{ name, gemset, gemfile, lockfile, ruby ? defs.ruby, fixes ? gemFixes }@args: + +let + const = x: y: x; + + fetchers.path = attrs: attrs.src.path; + fetchers.gem = attrs: fetchurl { + url = "${attrs.src.source or "https://rubygems.org"}/downloads/${attrs.name}-${attrs.version}.gem"; + inherit (attrs.src) sha256; + }; + fetchers.git = attrs: fetchgit { + inherit (attrs.src) url rev sha256 fetchSubmodules; + leaveDotGit = true; + }; + + fixSpec = attrs: + attrs // (fixes."${attrs.name}" or (const {})) attrs; + + instantiate = (attrs: + let + withFixes = fixSpec attrs; + withSource = withFixes // + (if (lib.isDerivation withFixes.src || builtins.isString withFixes.src) + then { source = attrs.src; } + else { source = attrs.src; src = (fetchers."${attrs.src.type}" attrs); }); + + in + withSource + ); + + instantiated = lib.flip lib.mapAttrs (import gemset) (name: attrs: + instantiate (attrs // { inherit name; }) + ); + + runRuby = name: env: command: + runCommand name env '' + ${ruby}/bin/ruby ${writeText name command} + ''; + + # TODO: include json_pure, so the version of ruby doesn't matter. + # not all rubies have support for JSON built-in, + # so we'll convert JSON to ruby expressions. + json2rb = writeScriptBin "json2rb" '' + #!${ruby}/bin/ruby + begin + require 'json' + rescue LoadError => ex + require 'json_pure' + end + + puts JSON.parse(STDIN.read).inspect + ''; + + # dump the instantiated gemset as a ruby expression. + serializedGemset = runCommand "gemset.rb" { json = builtins.toJSON instantiated; } '' + printf '%s' "$json" | ${json2rb}/bin/json2rb > $out + ''; + + # this is a mapping from a source type and identifier (uri/path/etc) + # to the pure store path. + # we'll use this from the patched bundler to make fetching sources pure. + sources = runRuby "sources.rb" { gemset = serializedGemset; } '' + out = ENV['out'] + gemset = eval(File.read(ENV['gemset'])) + + sources = { + "git" => { }, + "path" => { }, + "gem" => { }, + "svn" => { } + } + + gemset.each_value do |spec| + type = spec["source"]["type"] + val = spec["src"] + key = + case type + when "gem" + spec["name"] + when "git" + spec["source"]["url"] + when "path" + spec["source"]["originalPath"] + when "svn" + nil # TODO + end + + sources[type][key] = val if key + end + + File.open(out, "wb") do |f| + f.print sources.inspect + end + ''; + + # rewrite PATH sources to point into the nix store. + pureLockfile = runRuby "pureLockfile" { inherit sources; } '' + out = ENV['out'] + paths = eval(File.read(ENV['sources'])) + + lockfile = File.read("${lockfile}") + + paths.each_pair do |impure, pure| + lockfile.gsub!(/^ remote: #{Regexp.escape(impure)}/, " remote: #{pure}") + end + + File.open(out, "wb") do |f| + f.print lockfile + end + ''; + +in + +stdenv.mkDerivation { + inherit name; + outputs = [ + "out" # the installed libs/bins + "bundler" # supporting files for bundler + ]; + phases = [ "installPhase" "fixupPhase" ]; + installPhase = '' + # Copy the Gemfile and Gemfile.lock + mkdir -p $bundler + BUNDLE_GEMFILE=$bundler/Gemfile + cp ${gemfile} $BUNDLE_GEMFILE + cp ${pureLockfile} $BUNDLE_GEMFILE.lock + + export NIX_GEM_SOURCES=${sources} + + export GEM_HOME=$out/${ruby.gemPath} + export GEM_PATH=$GEM_HOME + mkdir -p $GEM_HOME + + bundler install + ''; + passthru = { + inherit ruby; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9c966b0066f..a267110a771 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4193,6 +4193,7 @@ let gemFixes = callPackage ../development/interpreters/ruby/fixes.nix { }; buildRubyGem = callPackage ../development/interpreters/ruby/gem.nix { }; loadRubyEnv = callPackage ../development/interpreters/ruby/load-ruby-env.nix { }; + bundlerEnv = callPackage ../development/interpreters/ruby/bundler-env.nix { }; ruby_1_8_7 = callPackage ../development/interpreters/ruby/ruby-1.8.7.nix { }; ruby_1_9_3 = callPackage ../development/interpreters/ruby/ruby-1.9.3.nix { }; From bf16d03075bbfbb7078f396cec6a782b57cc12ae Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Mon, 19 Jan 2015 20:02:47 -0500 Subject: [PATCH 60/69] ruby: support for proper bundler installs --- .../interpreters/ruby/bundler-env.nix | 72 ++++++--- pkgs/development/interpreters/ruby/gem.nix | 2 +- .../interpreters/ruby/monkey_patches.rb | 146 ++++++++++++++++++ pkgs/top-level/all-packages.nix | 4 +- 4 files changed, 203 insertions(+), 21 deletions(-) create mode 100644 pkgs/development/interpreters/ruby/monkey_patches.rb diff --git a/pkgs/development/interpreters/ruby/bundler-env.nix b/pkgs/development/interpreters/ruby/bundler-env.nix index 3fb02fa1ef8..bf2b4733c39 100644 --- a/pkgs/development/interpreters/ruby/bundler-env.nix +++ b/pkgs/development/interpreters/ruby/bundler-env.nix @@ -1,21 +1,34 @@ -{ stdenv, runCommand, writeText, writeScriptBin, ruby, lib, callPackage -, gemFixes, fetchurl, fetchgit, buildRubyGem +{ stdenv, runCommand, writeText, writeScript, writeScriptBin, ruby, lib +, callPackage , gemFixes, fetchurl, fetchgit, buildRubyGem +#, bundler_PATCHED +, bundler_HEAD +, git }@defs: # This is a work-in-progress. -# The idea is that his will replace load-ruby-env.nix, -# using (a patched) bundler to handle the entirety of the installation process. +# The idea is that his will replace load-ruby-env.nix. { name, gemset, gemfile, lockfile, ruby ? defs.ruby, fixes ? gemFixes }@args: let const = x: y: x; + #bundler = bundler_PATCHED; + bundler = bundler_HEAD.override { inherit ruby; }; + inherit (builtins) attrValues; fetchers.path = attrs: attrs.src.path; - fetchers.gem = attrs: fetchurl { - url = "${attrs.src.source or "https://rubygems.org"}/downloads/${attrs.name}-${attrs.version}.gem"; - inherit (attrs.src) sha256; - }; + fetchers.gem = attrs: + let fname = "${attrs.name}-${attrs.version}.gem"; + in toString (runCommand fname { + gem = fetchurl { + url = "${attrs.src.source or "https://rubygems.org"}/downloads/${fname}"; + inherit (attrs.src) sha256; + }; + } '' + mkdir $out + cp $gem $out/${fname} + '') + "/${fname}"; + fetchers.git = attrs: fetchgit { inherit (attrs.src) url rev sha256 fetchSubmodules; leaveDotGit = true; @@ -40,6 +53,13 @@ let instantiate (attrs // { inherit name; }) ); + # only the *.gem files. + gems = lib.fold (next: acc: + if next.source.type == "gem" + then acc ++ [next.src] + else acc + ) [] (attrValues instantiated); + runRuby = name: env: command: runCommand name env '' ${ruby}/bin/ruby ${writeText name command} @@ -102,44 +122,58 @@ let ''; # rewrite PATH sources to point into the nix store. - pureLockfile = runRuby "pureLockfile" { inherit sources; } '' - out = ENV['out'] - paths = eval(File.read(ENV['sources'])) + purifyLockfile = writeScript "purifyLockfile" '' + #!${ruby}/bin/ruby - lockfile = File.read("${lockfile}") + out = ENV['out'] + sources = eval(File.read("${sources}")) + paths = sources["path"] + + lockfile = STDIN.read paths.each_pair do |impure, pure| lockfile.gsub!(/^ remote: #{Regexp.escape(impure)}/, " remote: #{pure}") end - File.open(out, "wb") do |f| - f.print lockfile - end + print lockfile ''; in stdenv.mkDerivation { inherit name; + buildInputs = [ + ruby + bundler + git + ]; + phases = [ "installPhase" "fixupPhase" ]; outputs = [ "out" # the installed libs/bins "bundler" # supporting files for bundler ]; - phases = [ "installPhase" "fixupPhase" ]; installPhase = '' # Copy the Gemfile and Gemfile.lock mkdir -p $bundler - BUNDLE_GEMFILE=$bundler/Gemfile + export BUNDLE_GEMFILE=$bundler/Gemfile cp ${gemfile} $BUNDLE_GEMFILE - cp ${pureLockfile} $BUNDLE_GEMFILE.lock + cat ${lockfile} | ${purifyLockfile} > $BUNDLE_GEMFILE.lock export NIX_GEM_SOURCES=${sources} + export NIX_BUNDLER_GEMPATH=${bundler}/${ruby.gemPath} export GEM_HOME=$out/${ruby.gemPath} export GEM_PATH=$GEM_HOME mkdir -p $GEM_HOME - bundler install + mkdir gems + for gem in ${toString gems}; do + ln -s $gem gems + done + + cp ${./monkey_patches.rb} monkey_patches.rb + export RUBYOPT="-rmonkey_patches.rb -I $(pwd -P)" + bundler install --frozen ''; passthru = { inherit ruby; diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index 5516646f920..dd6338cd813 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -107,9 +107,9 @@ stdenv.mkDerivation (attrs // { makeWrapper $prog $out/bin/$(basename $prog) \ --prefix GEM_PATH : "$out/${ruby.gemPath}:$GEM_PATH" \ --prefix RUBYLIB : "${rubygems}/lib" \ - --set RUBYOPT rubygems \ $extraWrapperFlags ''${extraWrapperFlagsArray[@]} done + #--prefix RUBYOPT rubygems \ # looks like useless files which break build repeatability and consume space rm -fv $out/${ruby.gemPath}/doc/*/*/created.rid || true diff --git a/pkgs/development/interpreters/ruby/monkey_patches.rb b/pkgs/development/interpreters/ruby/monkey_patches.rb new file mode 100644 index 00000000000..694a199a610 --- /dev/null +++ b/pkgs/development/interpreters/ruby/monkey_patches.rb @@ -0,0 +1,146 @@ +require 'bundler' + +Bundler.module_eval do + class << self + # mappings from original uris to store paths. + def nix_gem_sources + @nix_gem_sources ||= + begin + src = ENV['NIX_GEM_SOURCES'] + eval(Bundler.read_file(src)) + end + end + + # extract the gemspecs from the gems pulled from Rubygems. + def nix_gemspecs + @nix_gemspecs ||= Dir.glob("gems/*.gem").map do |path| + Bundler.rubygems.spec_from_gem(path) + end + end + + # map a git uri to a fetchgit store path. + def nix_git(uri) + Pathname.new(nix_gem_sources["git"][uri]) + end + end +end + +Bundler::Source::Git::GitProxy.class_eval do + def checkout + unless path.exist? + FileUtils.mkdir_p(path.dirname) + FileUtils.cp_r(Bundler.nix_git(@uri).join(".git"), path) + system("chmod -R +w #{path}") + end + end + + def copy_to(destination, submodules=false) + unless File.exist?(destination.join(".git")) + FileUtils.mkdir_p(destination.dirname) + FileUtils.cp_r(Bundler.nix_git(@uri), destination) + system("chmod -R +w #{destination}") + end + end +end + +Bundler::Fetcher.class_eval do + def use_api + true + end + + def fetch_dependency_remote_specs(gem_names) + Bundler.ui.debug "Query Gemcutter Dependency Endpoint API: #{gem_names.join(',')}" + deps_list = [] + + spec_list = gem_names.map do |name| + spec = Bundler.nix_gemspecs.detect {|spec| spec.name == name } + dependencies = spec.dependencies. + select {|dep| dep.type != :development}. + map do |dep| + deps_list << dep.name + dep + end + + [spec.name, spec.version, spec.platform, dependencies] + end + + [spec_list, deps_list.uniq] + end +end + +Bundler::Source::Rubygems.class_eval do + # We copy all gems into $PWD/gems, and this allows RubyGems to find those + # gems during installation. + def fetchers + @fetchers ||= [ + Bundler::Fetcher.new(URI.parse("file://#{File.expand_path(Dir.pwd)}")) + ] + end + + # Look-up gems that were originally from Rubygems. + def remote_specs + @remote_specs ||= + begin + lockfile = Bundler::LockfileParser.new(Bundler.read_file(Bundler.default_lockfile)) + gem_names = lockfile.specs. + select {|spec| spec.source.is_a?(Bundler::Source::Rubygems)}. + map {|spec| spec.name} + idx = Bundler::Index.new + api_fetchers.each do |f| + Bundler.ui.info "Fetching source index from #{f.uri}" + idx.use f.specs(gem_names, self) + end + idx + end + end +end + +Gem::Installer.class_eval do + # Make the wrappers automagically use bundler. + # + # Stage 1. + # Set $BUNDLE_GEMFILE so bundler knows what gems to load. + # Set $GEM_HOME to the installed gems, because bundler looks there for + # non-Rubygems installed gems (e.g. git/svn/path sources). + # Set $GEM_PATH to include both bundler and installed gems. + # + # Stage 2. + # Setup bundler, locking down the gem versions. + # + # Stage 3. + # Reset $BUNDLE_GEMFILE, $GEM_HOME, $GEM_PATH. + # + # Stage 4. + # Run the actual executable. + def app_script_text(bin_file_name) + return <<-TEXT +#{shebang bin_file_name} +# +# This file was generated by Nix's RubyGems. +# +# The application '#{spec.name}' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +old_gemfile = ENV["BUNDLE_GEMFILE"] +old_gem_home = ENV["GEM_HOME"] +old_gem_path = ENV["GEM_PATH"] + +ENV["BUNDLE_GEMFILE"] = + "#{ENV["BUNDLE_GEMFILE"]}" +ENV["GEM_HOME"] = + "#{ENV["GEM_HOME"]}" +ENV["GEM_PATH"] = + "#{ENV["NIX_BUNDLER_GEMPATH"]}:#{ENV["GEM_HOME"]}\#{old_gem_path ? ":\#{old_gem_path}" : ""}}" + +require 'rubygems' +require 'bundler/setup' + +ENV["BUNDLE_GEMFILE"] = old_gemfile +ENV["GEM_HOME"] = old_gem_home +ENV["GEM_PATH"] = old_gem_path + +load Gem.bin_path('#{spec.name}', '#{bin_file_name}') +TEXT + end +end diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a267110a771..57d65179004 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4189,7 +4189,9 @@ let }; bundler = callPackage ../development/interpreters/ruby/bundler.nix { }; - bundler_HEAD = callPackage ../development/interpreters/ruby/bundler-head.nix { }; + bundler_HEAD = import ../development/interpreters/ruby/bundler-head.nix { + inherit buildRubyGem coreutils fetchgit; + }; gemFixes = callPackage ../development/interpreters/ruby/fixes.nix { }; buildRubyGem = callPackage ../development/interpreters/ruby/gem.nix { }; loadRubyEnv = callPackage ../development/interpreters/ruby/load-ruby-env.nix { }; From 221509b0a6bd418b14e9b2bf7c9c46646b54d6ee Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Tue, 20 Jan 2015 01:07:55 -0500 Subject: [PATCH 61/69] ruby: refactoring, and package bundix --- .../interpreters/ruby/bundix/Gemfile | 4 + .../interpreters/ruby/bundix/Gemfile.lock | 19 +++ .../interpreters/ruby/bundix/default.nix | 9 ++ .../interpreters/ruby/bundix/gemset.nix | 22 +++ .../interpreters/ruby/bundler-env.nix | 138 ++++++++++++------ .../interpreters/ruby/monkey_patches.rb | 42 +++++- pkgs/top-level/all-packages.nix | 3 + 7 files changed, 193 insertions(+), 44 deletions(-) create mode 100644 pkgs/development/interpreters/ruby/bundix/Gemfile create mode 100644 pkgs/development/interpreters/ruby/bundix/Gemfile.lock create mode 100644 pkgs/development/interpreters/ruby/bundix/default.nix create mode 100644 pkgs/development/interpreters/ruby/bundix/gemset.nix diff --git a/pkgs/development/interpreters/ruby/bundix/Gemfile b/pkgs/development/interpreters/ruby/bundix/Gemfile new file mode 100644 index 00000000000..b9ae407c4d4 --- /dev/null +++ b/pkgs/development/interpreters/ruby/bundix/Gemfile @@ -0,0 +1,4 @@ +source "http://rubygems.org" +gem "bundix", + :git => "https://github.com/cstrahan/bundix.git", + :ref => "5df25b11b5b86e636754d54c2a8859c7c6ec78c7" diff --git a/pkgs/development/interpreters/ruby/bundix/Gemfile.lock b/pkgs/development/interpreters/ruby/bundix/Gemfile.lock new file mode 100644 index 00000000000..c8869fdb1e3 --- /dev/null +++ b/pkgs/development/interpreters/ruby/bundix/Gemfile.lock @@ -0,0 +1,19 @@ +GIT + remote: https://github.com/cstrahan/bundix.git + revision: 5df25b11b5b86e636754d54c2a8859c7c6ec78c7 + ref: 5df25b11b5b86e636754d54c2a8859c7c6ec78c7 + specs: + bundix (0.1.0) + bundler (~> 1.7.9) + thor (~> 0.19.1) + +GEM + remote: http://rubygems.org/ + specs: + thor (0.19.1) + +PLATFORMS + ruby + +DEPENDENCIES + bundix! diff --git a/pkgs/development/interpreters/ruby/bundix/default.nix b/pkgs/development/interpreters/ruby/bundix/default.nix new file mode 100644 index 00000000000..0196adb8f4c --- /dev/null +++ b/pkgs/development/interpreters/ruby/bundix/default.nix @@ -0,0 +1,9 @@ +{ ruby, bundlerEnv }: + +bundlerEnv { + name = "bundix"; + inherit ruby; + gemset = ./gemset.nix; + gemfile = ./Gemfile; + lockfile = ./Gemfile.lock; +} diff --git a/pkgs/development/interpreters/ruby/bundix/gemset.nix b/pkgs/development/interpreters/ruby/bundix/gemset.nix new file mode 100644 index 00000000000..2222cc984ea --- /dev/null +++ b/pkgs/development/interpreters/ruby/bundix/gemset.nix @@ -0,0 +1,22 @@ +{ + "bundix" = { + version = "0.1.0"; + source = { + type = "git"; + url = "https://github.com/cstrahan/bundix.git"; + rev = "5df25b11b5b86e636754d54c2a8859c7c6ec78c7"; + fetchSubmodules = false; + sha256 = "0334jsavpzkikcs7wrx7a3r0ilvr5vsnqd34lhc58b8cgvgll47p"; + }; + dependencies = [ + "thor" + ]; + }; + "thor" = { + version = "0.19.1"; + source = { + type = "gem"; + sha256 = "08p5gx18yrbnwc6xc0mxvsfaxzgy2y9i78xq7ds0qmdm67q39y4z"; + }; + }; +} \ No newline at end of file diff --git a/pkgs/development/interpreters/ruby/bundler-env.nix b/pkgs/development/interpreters/ruby/bundler-env.nix index bf2b4733c39..262b925d708 100644 --- a/pkgs/development/interpreters/ruby/bundler-env.nix +++ b/pkgs/development/interpreters/ruby/bundler-env.nix @@ -12,53 +12,103 @@ let const = x: y: x; - #bundler = bundler_PATCHED; bundler = bundler_HEAD.override { inherit ruby; }; inherit (builtins) attrValues; - fetchers.path = attrs: attrs.src.path; - fetchers.gem = attrs: - let fname = "${attrs.name}-${attrs.version}.gem"; - in toString (runCommand fname { - gem = fetchurl { - url = "${attrs.src.source or "https://rubygems.org"}/downloads/${fname}"; - inherit (attrs.src) sha256; - }; - } '' - mkdir $out - cp $gem $out/${fname} - '') + "/${fname}"; + gemName = attrs: "${attrs.name}-${attrs.version}.gem"; + fetchers.path = attrs: attrs.source.path; + fetchers.gem = attrs: fetchurl { + url = "${attrs.source.source or "https://rubygems.org"}/downloads/${gemName attrs}"; + inherit (attrs.source) sha256; + }; fetchers.git = attrs: fetchgit { - inherit (attrs.src) url rev sha256 fetchSubmodules; + inherit (attrs.source) url rev sha256 fetchSubmodules; leaveDotGit = true; }; - fixSpec = attrs: - attrs // (fixes."${attrs.name}" or (const {})) attrs; + applySrc = attrs: + attrs // { + src = (fetchers."${attrs.source.type}" attrs); + }; + + applyFixes = attrs: + if fixes ? "${attrs.name}" + then attrs // fixes."${attrs.name}" attrs + else attrs; + + # patch a gem or source tree. + # for gems, the gem is unpacked, patched, and then repacked. + # see: https://github.com/fedora-ruby/gem-patch/blob/master/lib/rubygems/patcher.rb + applyPatches = { attrs }: + if (!(attrs ? patches)) + then attrs + else attrs // { src = + stdenv.mkDerivation { + name = gemName attrs; + phases = [ "unpackPhase" "patchPhase" "installPhase" ]; + buildInputs = [ ruby ]; + inherit (attrs) patches; + unpackPhase = '' + runHook preUnpack + + if [[ -f ${attrs.src} ]]; then + isGem=1 + gem unpack ${attrs.src} --target=contents + else + cp -r ${attrs.src} contents + chmod -R +w contents + fi + + cd contents + runHook postUnpack + ''; + installPhase = '' + runHook preInstall + + mkdir build + if [[ -n "$isGem" ]]; then + ${writeScript "repack.rb" '' + #!${ruby}/bin/ruby + require 'rubygems' + require 'fileutils' + + out = ENV['out'] + files = Dir['**/{.[^\.]*,*}'] + package = Gem::Package.new("${attrs.src}") + patched_package = Gem::Package.new(package.spec.file_name) + patched_package.spec = package.spec.clone + patched_package.spec.files = files + + # Change dir and build the patched gem + Dir.chdir("../build") do + patched_package.build false + end + FileUtils.cp "../build/#{package.file_name}" out + ''} + else + cp -r . out + fi + + runHook postInstall + ''; + }; + }; instantiate = (attrs: - let - withFixes = fixSpec attrs; - withSource = withFixes // - (if (lib.isDerivation withFixes.src || builtins.isString withFixes.src) - then { source = attrs.src; } - else { source = attrs.src; src = (fetchers."${attrs.src.type}" attrs); }); - - in - withSource + applyFixes (applySrc attrs) ); instantiated = lib.flip lib.mapAttrs (import gemset) (name: attrs: instantiate (attrs // { inherit name; }) ); - # only the *.gem files. - gems = lib.fold (next: acc: + # copy *.gem to ./gems + copyGems = lib.fold (next: acc: if next.source.type == "gem" - then acc ++ [next.src] + then acc + "cp ${next.src} gems/${gemName next}\n" else acc - ) [] (attrValues instantiated); + ) "" (attrValues instantiated); runRuby = name: env: command: runCommand name env '' @@ -68,7 +118,7 @@ let # TODO: include json_pure, so the version of ruby doesn't matter. # not all rubies have support for JSON built-in, # so we'll convert JSON to ruby expressions. - json2rb = writeScriptBin "json2rb" '' + json2rb = writeScript "json2rb" '' #!${ruby}/bin/ruby begin require 'json' @@ -81,7 +131,7 @@ let # dump the instantiated gemset as a ruby expression. serializedGemset = runCommand "gemset.rb" { json = builtins.toJSON instantiated; } '' - printf '%s' "$json" | ${json2rb}/bin/json2rb > $out + printf '%s' "$json" | ${json2rb} > $out ''; # this is a mapping from a source type and identifier (uri/path/etc) @@ -122,20 +172,22 @@ let ''; # rewrite PATH sources to point into the nix store. - purifyLockfile = writeScript "purifyLockfile" '' + purifiedLockfile = runRuby "purifiedLockfile" {} '' #!${ruby}/bin/ruby out = ENV['out'] sources = eval(File.read("${sources}")) paths = sources["path"] - lockfile = STDIN.read + lockfile = File.read("${lockfile}") paths.each_pair do |impure, pure| lockfile.gsub!(/^ remote: #{Regexp.escape(impure)}/, " remote: #{pure}") end - print lockfile + File.open(out, "wb") do |f| + f.print lockfile + end ''; in @@ -149,15 +201,15 @@ stdenv.mkDerivation { ]; phases = [ "installPhase" "fixupPhase" ]; outputs = [ - "out" # the installed libs/bins - "bundler" # supporting files for bundler + "out" # the installed libs/bins + "bundle" # supporting files for bundler ]; installPhase = '' # Copy the Gemfile and Gemfile.lock - mkdir -p $bundler - export BUNDLE_GEMFILE=$bundler/Gemfile + mkdir -p $bundle + export BUNDLE_GEMFILE=$bundle/Gemfile cp ${gemfile} $BUNDLE_GEMFILE - cat ${lockfile} | ${purifyLockfile} > $BUNDLE_GEMFILE.lock + cp ${purifiedLockfile} $BUNDLE_GEMFILE.lock export NIX_GEM_SOURCES=${sources} export NIX_BUNDLER_GEMPATH=${bundler}/${ruby.gemPath} @@ -167,15 +219,15 @@ stdenv.mkDerivation { mkdir -p $GEM_HOME mkdir gems - for gem in ${toString gems}; do - ln -s $gem gems - done + ${copyGems} + mkdir $out/bin cp ${./monkey_patches.rb} monkey_patches.rb export RUBYOPT="-rmonkey_patches.rb -I $(pwd -P)" - bundler install --frozen + bundler install --frozen --binstubs ''; passthru = { inherit ruby; + inherit bundler; }; } diff --git a/pkgs/development/interpreters/ruby/monkey_patches.rb b/pkgs/development/interpreters/ruby/monkey_patches.rb index 694a199a610..6c896861ca6 100644 --- a/pkgs/development/interpreters/ruby/monkey_patches.rb +++ b/pkgs/development/interpreters/ruby/monkey_patches.rb @@ -95,6 +95,46 @@ Bundler::Source::Rubygems.class_eval do end end +Bundler::Installer.class_eval do + def generate_bundler_executable_stubs(spec, options = {}) + return if spec.executables.empty? + + out = ENV['out'] + + spec.executables.each do |executable| + next if executable == "bundle" || executable == "bundler" + + binstub_path = "#{out}/bin/#{executable}" + + File.open(binstub_path, 'w', 0777 & ~File.umask) do |f| + f.print <<-TEXT +#!/usr/bin/env #{RbConfig::CONFIG['ruby_install_name']} + +old_gemfile = ENV["BUNDLE_GEMFILE"] +old_gem_home = ENV["GEM_HOME"] +old_gem_path = ENV["GEM_PATH"] + +ENV["BUNDLE_GEMFILE"] = + "#{ENV["BUNDLE_GEMFILE"]}" +ENV["GEM_HOME"] = + "#{ENV["GEM_HOME"]}" +ENV["GEM_PATH"] = + "#{ENV["NIX_BUNDLER_GEMPATH"]}:#{ENV["GEM_HOME"]}\#{old_gem_path ? ":\#{old_gem_path}" : ""}}" + +require 'rubygems' +require 'bundler/setup' + +ENV["BUNDLE_GEMFILE"] = old_gemfile +ENV["GEM_HOME"] = old_gem_home +ENV["GEM_PATH"] = old_gem_path + +load Gem.bin_path('#{spec.name}', '#{executable}') +TEXT + end + end + end +end + Gem::Installer.class_eval do # Make the wrappers automagically use bundler. # @@ -122,7 +162,7 @@ Gem::Installer.class_eval do # this file is here to facilitate running it. # -old_gemfile = ENV["BUNDLE_GEMFILE"] +old_gemfile = ENV["BUNDLE_GEMFILE"] old_gem_home = ENV["GEM_HOME"] old_gem_path = ENV["GEM_PATH"] diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 57d65179004..3a663b64495 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4188,6 +4188,9 @@ let wrapPython = pythonPackages.wrapPython; }; + bundix = callPackage ../development/interpreters/ruby/bundix { + ruby = ruby_2_1_3; + }; bundler = callPackage ../development/interpreters/ruby/bundler.nix { }; bundler_HEAD = import ../development/interpreters/ruby/bundler-head.nix { inherit buildRubyGem coreutils fetchgit; From bd5374664663bbf1c2675c100eee8cfe14c6d148 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Tue, 20 Jan 2015 19:09:02 -0500 Subject: [PATCH 62/69] ruby: patching gems works --- .../interpreters/ruby/bundix/gemset.nix | 2 +- .../interpreters/ruby/bundler-env.nix | 41 +++++++++++++------ .../interpreters/ruby/package-1.8.rb | 29 +++++++++++++ 3 files changed, 59 insertions(+), 13 deletions(-) create mode 100644 pkgs/development/interpreters/ruby/package-1.8.rb diff --git a/pkgs/development/interpreters/ruby/bundix/gemset.nix b/pkgs/development/interpreters/ruby/bundix/gemset.nix index 2222cc984ea..a2c633f903c 100644 --- a/pkgs/development/interpreters/ruby/bundix/gemset.nix +++ b/pkgs/development/interpreters/ruby/bundix/gemset.nix @@ -19,4 +19,4 @@ sha256 = "08p5gx18yrbnwc6xc0mxvsfaxzgy2y9i78xq7ds0qmdm67q39y4z"; }; }; -} \ No newline at end of file +} diff --git a/pkgs/development/interpreters/ruby/bundler-env.nix b/pkgs/development/interpreters/ruby/bundler-env.nix index 262b925d708..cb80d7c8f25 100644 --- a/pkgs/development/interpreters/ruby/bundler-env.nix +++ b/pkgs/development/interpreters/ruby/bundler-env.nix @@ -37,24 +37,33 @@ let then attrs // fixes."${attrs.name}" attrs else attrs; + needsPatch = attrs: + (attrs ? patches) || (attrs ? prePatch) || (attrs ? postPatch); + # patch a gem or source tree. # for gems, the gem is unpacked, patched, and then repacked. # see: https://github.com/fedora-ruby/gem-patch/blob/master/lib/rubygems/patcher.rb - applyPatches = { attrs }: - if (!(attrs ? patches)) + applyPatches = attrs: + if !needsPatch attrs then attrs else attrs // { src = stdenv.mkDerivation { name = gemName attrs; phases = [ "unpackPhase" "patchPhase" "installPhase" ]; - buildInputs = [ ruby ]; - inherit (attrs) patches; + buildInputs = [ ruby ] ++ attrs.buildInputs or []; + patches = attrs.patches or [ ]; + prePatch = attrs.prePatch or "true"; + postPatch = attrs.postPatch or "true"; unpackPhase = '' runHook preUnpack if [[ -f ${attrs.src} ]]; then isGem=1 - gem unpack ${attrs.src} --target=contents + # we won't know the name of the directory that RubyGems creates, + # so we'll just use a glob to find it and move it over. + gem unpack ${attrs.src} --target=container + cp -r container/* contents + rm -r container else cp -r ${attrs.src} contents chmod -R +w contents @@ -66,25 +75,33 @@ let installPhase = '' runHook preInstall - mkdir build if [[ -n "$isGem" ]]; then ${writeScript "repack.rb" '' #!${ruby}/bin/ruby require 'rubygems' + require 'rubygems/package' require 'fileutils' + if defined?(Encoding.default_internal) + Encoding.default_internal = Encoding::UTF_8 + Encoding.default_external = Encoding::UTF_8 + end + + if Gem::VERSION < '2.0' + load "${./package-1.8.rb}" + end + out = ENV['out'] files = Dir['**/{.[^\.]*,*}'] + package = Gem::Package.new("${attrs.src}") patched_package = Gem::Package.new(package.spec.file_name) patched_package.spec = package.spec.clone patched_package.spec.files = files - # Change dir and build the patched gem - Dir.chdir("../build") do - patched_package.build false - end - FileUtils.cp "../build/#{package.file_name}" out + patched_package.build(false) + + FileUtils.cp(patched_package.spec.file_name, out) ''} else cp -r . out @@ -96,7 +113,7 @@ let }; instantiate = (attrs: - applyFixes (applySrc attrs) + applyPatches (applyFixes (applySrc attrs)) ); instantiated = lib.flip lib.mapAttrs (import gemset) (name: attrs: diff --git a/pkgs/development/interpreters/ruby/package-1.8.rb b/pkgs/development/interpreters/ruby/package-1.8.rb new file mode 100644 index 00000000000..079b65f97ec --- /dev/null +++ b/pkgs/development/interpreters/ruby/package-1.8.rb @@ -0,0 +1,29 @@ +require 'rubygems/installer' +require 'rubygems/builder' + +# Simulate RubyGems 2.0 behavior. + +module Gem::Package + def self.new(gem) + @gem = gem + self + end + + def self.extract_files(dir) + installer = Gem::Installer.new @gem + installer.unpack(dir) + end + + def self.build(skip_validation=false) + builder = Gem::Builder.new(spec) + builder.build + end + + def self.spec=(spec) + @spec = spec + end + + def self.spec + @spec ||= Gem::Installer.new(@gem).spec + end +end From 7d8b2f0d60caea47b26692c94f86af70cec5bd20 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Tue, 20 Jan 2015 22:20:28 -0500 Subject: [PATCH 63/69] ruby: make buildInputs work --- .../interpreters/ruby/bundler-env.nix | 7 +++++-- .../interpreters/ruby/bundler-head.nix | 2 +- .../interpreters/ruby/monkey_patches.rb | 17 +++++++++++++++-- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/pkgs/development/interpreters/ruby/bundler-env.nix b/pkgs/development/interpreters/ruby/bundler-env.nix index a2a3628d09c..5e471d36f2d 100644 --- a/pkgs/development/interpreters/ruby/bundler-env.nix +++ b/pkgs/development/interpreters/ruby/bundler-env.nix @@ -121,7 +121,7 @@ let ); needsPreInstall = attrs: - (attrs ? preInstall) || (attrs ? buildInputs); + (attrs ? preInstall) || (attrs ? buildInputs) || (attrs ? nativeBuildInputs); createPreInstallers = lib.fold (next: acc: if !needsPreInstall next @@ -129,12 +129,15 @@ let else acc + '' cp ${writeScript "${next.name}-pre-install" '' #!/bin/sh + buildInputs="${toString (next.buildInputs or [])}" + nativeBuildInputs="${toString (next.nativeBuildInputs or [])}" + source ${stdenv}/setup ${next.preInstall or ""} - ${ruby}/bin/ruby -e 'ENV.inspect' > env/${next.name} + ${ruby}/bin/ruby -e 'print ENV.inspect' > env/${next.name} ''} pre-installers/${next.name} '' ) "" (attrValues instantiated); diff --git a/pkgs/development/interpreters/ruby/bundler-head.nix b/pkgs/development/interpreters/ruby/bundler-head.nix index 9a05547b622..2e8cfc8cbf1 100644 --- a/pkgs/development/interpreters/ruby/bundler-head.nix +++ b/pkgs/development/interpreters/ruby/bundler-head.nix @@ -5,7 +5,7 @@ buildRubyGem { src = fetchgit { url = "https://github.com/bundler/bundler.git"; rev = "a2343c9eabf5403d8ffcbca4dea33d18a60fc157"; - sha256 = "1f0isjrn4rwak3q6sbs6v6gqhwln32gv2dbd98r902nkg9i7y5i0"; + sha256 = "1l4r55n1wzr817l225l6pm97li1mxg9icd8s51cpfihh91nkdz68"; leaveDotGit = true; }; dontPatchShebangs = true; diff --git a/pkgs/development/interpreters/ruby/monkey_patches.rb b/pkgs/development/interpreters/ruby/monkey_patches.rb index 69dbf1b5ca3..8e5ab632f74 100644 --- a/pkgs/development/interpreters/ruby/monkey_patches.rb +++ b/pkgs/development/interpreters/ruby/monkey_patches.rb @@ -1,5 +1,10 @@ require 'bundler' +# Undo the RUBYOPT trickery. +opt = ENV['RUBYOPT'].dup +opt.gsub!(/-rmonkey_patches.rb -I [^ ]*/, '') +ENV['RUBYOPT'] = opt + Bundler.module_eval do class << self # mappings from original uris to store paths. @@ -21,12 +26,12 @@ Bundler.module_eval do # swap out ENV def nix_with_env(env, &block) if env + old_env = ENV.to_hash begin - old_env = ENV.to_h ENV.replace(env) block.call ensure - ENV.replace old_env + ENV.replace(old_env) end else block.call @@ -131,7 +136,15 @@ Bundler::Installer.class_eval do pre_installer = "pre-installers/#{spec.name}" if File.exist?(pre_installer) system(pre_installer) + unless $?.success? + Bundler.ui.error "The pre-installer script for #{spec.name} failed!" + exit 1 + end env = eval(Bundler.read_file("env/#{spec.name}")) + unless env + Bundler.ui.error "The environment variables for #{spec.name} could not be loaded!" + exit 1 + end Bundler.nix_with_env(env) do original_install_gem_from_spec(spec, standalone, worker) end From 5f1622e95f166cbe4738cef956eb0851d9ea0a00 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Tue, 20 Jan 2015 23:33:57 -0500 Subject: [PATCH 64/69] ruby: allow for passing build arguments --- .../interpreters/ruby/bundler-env.nix | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/pkgs/development/interpreters/ruby/bundler-env.nix b/pkgs/development/interpreters/ruby/bundler-env.nix index 5e471d36f2d..1ea982c111e 100644 --- a/pkgs/development/interpreters/ruby/bundler-env.nix +++ b/pkgs/development/interpreters/ruby/bundler-env.nix @@ -8,9 +8,13 @@ # This is a work-in-progress. # The idea is that his will replace load-ruby-env.nix. -{ name, gemset, gemfile, lockfile, ruby ? defs.ruby, fixes ? gemFixes }@args: +{ name, gemset, gemfile, lockfile, ruby ? defs.ruby, fixes ? gemFixes +, enableParallelBuilding ? false # TODO: this might not work, given the env-var shinanigans. +, documentation ? false}@args: let + + shellEscape = x: "'${lib.replaceChars ["'"] [("'\\'" + "'")] x}'"; const = x: y: x; bundler = bundler_HEAD.override { inherit ruby; }; inherit (builtins) attrValues; @@ -128,7 +132,7 @@ let then acc else acc + '' cp ${writeScript "${next.name}-pre-install" '' - #!/bin/sh + #!${stdenv.shell} buildInputs="${toString (next.buildInputs or [])}" nativeBuildInputs="${toString (next.nativeBuildInputs or [])}" @@ -227,6 +231,16 @@ let end ''; + needsBuildArgs = attrs: attrs ? buildArgs; + + mkBuildArgs = spec: + "export BUNDLE_BUILD__${lib.toUpper spec.name}='${lib.concatStringsSep " " (map shellEscape spec.buildArgs)}'"; + + allBuildArgs = + lib.concatStringsSep "\n" + (map mkBuildArgs + (lib.filter needsBuildArgs (attrValues instantiated))); + in stdenv.mkDerivation { @@ -262,10 +276,18 @@ stdenv.mkDerivation { mkdir pre-installers ${createPreInstallers} + ${allBuildArgs} + + ${lib.optionalString (!documentation) '' + mkdir home + HOME="$(pwd -P)/home" + echo "gem: --no-rdoc --no-ri" > $HOME/.gemrc + ''} + mkdir $out/bin cp ${./monkey_patches.rb} monkey_patches.rb export RUBYOPT="-rmonkey_patches.rb -I $(pwd -P)" - bundler install --frozen --binstubs + bundler install --frozen --binstubs ${lib.optionalString enableParallelBuilding "--jobs $NIX_BUILD_CORES"} ''; passthru = { inherit ruby; From f52c32fcfccbecfc52f68571a3ce866f59e91459 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Wed, 21 Jan 2015 15:20:42 -0500 Subject: [PATCH 65/69] ruby: rewrite `sup` package --- .../networking/mailreaders/sup/Gemfile | 10 +- .../networking/mailreaders/sup/Gemfile.lock | 24 +++- .../networking/mailreaders/sup/default.nix | 119 +++++++----------- .../networking/mailreaders/sup/gemset.nix | 96 +++++++++++++- .../mailreaders/sup/mkrf_conf_xapian.rb | 14 +++ .../mailreaders/sup/xapian-Rakefile | 38 ++++++ .../interpreters/ruby/bundler-env.nix | 30 +++-- .../interpreters/ruby/monkey_patches.rb | 11 +- pkgs/development/libraries/xapian/default.nix | 6 +- pkgs/top-level/all-packages.nix | 32 +---- 10 files changed, 248 insertions(+), 132 deletions(-) create mode 100644 pkgs/applications/networking/mailreaders/sup/mkrf_conf_xapian.rb create mode 100644 pkgs/applications/networking/mailreaders/sup/xapian-Rakefile diff --git a/pkgs/applications/networking/mailreaders/sup/Gemfile b/pkgs/applications/networking/mailreaders/sup/Gemfile index f7d13a16326..a57feb5d21f 100644 --- a/pkgs/applications/networking/mailreaders/sup/Gemfile +++ b/pkgs/applications/networking/mailreaders/sup/Gemfile @@ -1,6 +1,8 @@ source "https://rubygems.org" -#gem "sup", "0.20.0" -#gem 'sup', '~> 0.20.0' -#gem 'gpgme' -gem 'gpgme', '2.0.7' +gem 'sup' +gem 'gpgme' + +# Sup tries to `xapian-ruby` in its extconf instead of listing it as a +# dependency. +gem 'xapian-ruby', "~> 1.2.15" diff --git a/pkgs/applications/networking/mailreaders/sup/Gemfile.lock b/pkgs/applications/networking/mailreaders/sup/Gemfile.lock index 2f56752d9a2..fe8746b9f72 100644 --- a/pkgs/applications/networking/mailreaders/sup/Gemfile.lock +++ b/pkgs/applications/networking/mailreaders/sup/Gemfile.lock @@ -1,12 +1,34 @@ GEM remote: https://rubygems.org/ specs: + chronic (0.9.1) gpgme (2.0.7) mini_portile (>= 0.5.0, <= 0.6.0) + highline (1.6.21) + locale (2.1.0) + lockfile (2.1.3) + mime-types (1.25.1) mini_portile (0.6.0) + ncursesw (1.4.9) + rmail-sup (1.0.1) + sup (0.20.0) + chronic (~> 0.9.1) + highline + locale (~> 2.0) + lockfile + mime-types (~> 1.0) + ncursesw (~> 1.4.0) + rmail-sup (~> 1.0.1) + trollop (>= 1.12) + unicode (~> 0.4.4) + trollop (2.1.1) + unicode (0.4.4.2) + xapian-ruby (1.2.19.1) PLATFORMS ruby DEPENDENCIES - gpgme (= 2.0.7) + gpgme + sup + xapian-ruby (~> 1.2.15) diff --git a/pkgs/applications/networking/mailreaders/sup/default.nix b/pkgs/applications/networking/mailreaders/sup/default.nix index 3d537d83f43..874d662754f 100644 --- a/pkgs/applications/networking/mailreaders/sup/default.nix +++ b/pkgs/applications/networking/mailreaders/sup/default.nix @@ -1,79 +1,52 @@ -{ stdenv, fetchurl, ruby, rake, rubygems, makeWrapper, ncursesw_sup -, xapian_ruby, gpgme, libiconvOrEmpty, mime_types, chronic, trollop, lockfile -, gettext, iconv, locale, text, highline, rmail_sup, unicode, gnupg, which -, bundler, git }: +{ stdenv, lib, bundlerEnv, gpgme, ruby, ncurses, writeText, zlib, xapian, pkgconfig, which }: -stdenv.mkDerivation rec { - version = "0.18.0"; - name = "sup-${version}"; +bundlerEnv { + name = "sup-0.20.0"; - meta = { + inherit ruby; + gemfile = ./Gemfile; + lockfile = ./Gemfile.lock; + gemset = ./gemset.nix; + + fixes.gpgme = attrs: { + buildInputs = [ gpgme ]; + }; + + fixes.ncursesw = attrs: { + buildInputs = [ ncurses ]; + buildArgs = [ + "--with-cflags=-I${ncurses}/include" + "--with-ldflags=-L${ncurses}/lib" + ]; + }; + + fixes.xapian-ruby = attrs: { + # use the system xapian + buildInputs = [ xapian pkgconfig zlib ]; + postPatch = '' + cp ${./xapian-Rakefile} Rakefile + ''; + preInstall = '' + export XAPIAN_CONFIG=${xapian}/bin/xapian-config + ''; + }; + + fixes.sup = attrs: { + # prevent sup from trying to dynamically install `xapian-ruby`. + postPatch = '' + cp ${./mkrf_conf_xapian.rb} ext/mkrf_conf_xapian.rb + + substituteInPlace lib/sup/crypto.rb \ + --replace 'which gpg2' \ + '${which}/bin/which gpg2' + ''; + }; + + meta = with lib; { description = "A curses threads-with-tags style email client"; homepage = http://supmua.org; - license = stdenv.lib.licenses.gpl2; - maintainers = with stdenv.lib.maintainers; [ lovek323 ]; - platforms = stdenv.lib.platforms.unix; - broken = true; + license = with licenses; gpl2; + maintainers = with maintainers; [ cstrahan lovek323 ]; + platforms = platforms.unix; }; - - dontStrip = true; - - src = fetchurl { - url = "https://github.com/sup-heliotrope/sup/archive/release-${version}.tar.gz"; - sha256 = "1dhg0i2v0ddhwi32ih5lc56x00kbaikd2wdplgzlshq0nljr9xy0"; - }; - - buildInputs = - [ rake ruby rubygems makeWrapper gpgme ncursesw_sup xapian_ruby - libiconvOrEmpty git ]; - - phases = [ "unpackPhase" "buildPhase" "installPhase" ]; - - buildPhase = '' - # the builder uses git to get a listing of the files - export EMAIL="nobody@in.here" - git init >/dev/null - git add . - git commit -m "message" >/dev/null - gem build sup.gemspec - ''; - - installPhase = '' - export HOME=$TMP/home; mkdir -pv "$HOME" - - GEM_PATH="$GEM_PATH:$out/${ruby.gemPath}" - GEM_PATH="$GEM_PATH:${chronic}/${ruby.gemPath}" - GEM_PATH="$GEM_PATH:${gettext}/${ruby.gemPath}" - GEM_PATH="$GEM_PATH:${gpgme}/${ruby.gemPath}" - GEM_PATH="$GEM_PATH:${highline}/${ruby.gemPath}" - GEM_PATH="$GEM_PATH:${iconv}/${ruby.gemPath}" - GEM_PATH="$GEM_PATH:${locale}/${ruby.gemPath}" - GEM_PATH="$GEM_PATH:${lockfile}/${ruby.gemPath}" - GEM_PATH="$GEM_PATH:${mime_types}/${ruby.gemPath}" - GEM_PATH="$GEM_PATH:${ncursesw_sup}/${ruby.gemPath}" - GEM_PATH="$GEM_PATH:${rmail_sup}/${ruby.gemPath}" - GEM_PATH="$GEM_PATH:${text}/${ruby.gemPath}" - GEM_PATH="$GEM_PATH:${trollop}/${ruby.gemPath}" - GEM_PATH="$GEM_PATH:${unicode}/${ruby.gemPath}" - GEM_PATH="$GEM_PATH:${xapian_ruby}/${ruby.gemPath}" - - # Don't install some dependencies -- we have already installed - # the dependencies but gem doesn't acknowledge this - gem install --no-verbose --install-dir "$out/${ruby.gemPath}" \ - --bindir "$out/bin" --no-rdoc --no-ri sup-${version}.gem \ - --ignore-dependencies >/dev/null - - # specify ruby interpreter explicitly - sed -i '1 s|^.*$|#!${ruby}/bin/ruby|' bin/sup-sync-back-maildir - - cp bin/sup-sync-back-maildir "$out/bin" - - for prog in $out/bin/*; do - wrapProgram "$prog" --prefix GEM_PATH : "$GEM_PATH" --prefix PATH : "${gnupg}/bin:${which}/bin" - done - - for prog in $out/gems/*/bin/*; do - [[ -e "$out/bin/$(basename $prog)" ]] - done - ''; } diff --git a/pkgs/applications/networking/mailreaders/sup/gemset.nix b/pkgs/applications/networking/mailreaders/sup/gemset.nix index de28a5dfeb3..e39da3dac85 100644 --- a/pkgs/applications/networking/mailreaders/sup/gemset.nix +++ b/pkgs/applications/networking/mailreaders/sup/gemset.nix @@ -1,7 +1,14 @@ { - gpgme = { + "chronic" = { + version = "0.9.1"; + source = { + type = "gem"; + sha256 = "0kspaxpfy7yvyk1lvpx31w852qfj8wb9z04mcj5bzi70ljb9awqk"; + }; + }; + "gpgme" = { version = "2.0.7"; - src = { + source = { type = "gem"; sha256 = "1p84zhiri2ihcld7py9mwc2kg5xs5da8fk11zhndrhmw05yvf5mr"; }; @@ -9,11 +16,92 @@ "mini_portile" ]; }; - mini_portile = { + "highline" = { + version = "1.6.21"; + source = { + type = "gem"; + sha256 = "06bml1fjsnrhd956wqq5k3w8cyd09rv1vixdpa3zzkl6xs72jdn1"; + }; + }; + "locale" = { + version = "2.1.0"; + source = { + type = "gem"; + sha256 = "18bb0g24flq9dr8qv4j7pm7w9i2vmvmqrbmry95ibf1r1c4s60yj"; + }; + }; + "lockfile" = { + version = "2.1.3"; + source = { + type = "gem"; + sha256 = "0dij3ijywylvfgrpi2i0k17f6w0wjhnjjw0k9030f54z56cz7jrr"; + }; + }; + "mime-types" = { + version = "1.25.1"; + source = { + type = "gem"; + sha256 = "0mhzsanmnzdshaba7gmsjwnv168r1yj8y0flzw88frw1cickrvw8"; + }; + }; + "mini_portile" = { version = "0.6.0"; - src = { + source = { type = "gem"; sha256 = "09kcn4g63xrdirgwxgjikqg976rr723bkc9bxfr29pk22cj3wavn"; }; }; + "ncursesw" = { + version = "1.4.9"; + source = { + type = "gem"; + sha256 = "154cls3b237imdbhih7rni5p85nw6mpbpkzdw08jxzvqaml7q093"; + }; + }; + "rmail-sup" = { + version = "1.0.1"; + source = { + type = "gem"; + sha256 = "1xswk101s560lxqaax3plqh8vjx7jjspnggdwb3q80m358f92q9g"; + }; + }; + "sup" = { + version = "0.20.0"; + source = { + type = "gem"; + sha256 = "1lpqgrqkv29xr1h1142qsbmknlshpgys7fc3w1nkyhib8s3ikamg"; + }; + dependencies = [ + "chronic" + "highline" + "locale" + "lockfile" + "mime-types" + "ncursesw" + "rmail-sup" + "trollop" + "unicode" + ]; + }; + "trollop" = { + version = "2.1.1"; + source = { + type = "gem"; + sha256 = "0z5dvh7glwqjprlihsjx67hfzy4whsjfhqj9akyyrby9q5va1i4k"; + }; + }; + "unicode" = { + version = "0.4.4.2"; + source = { + type = "gem"; + sha256 = "15fggljzan8zvmr8h12b5m7pcj1gvskmmnx367xs4p0rrpnpil8g"; + }; + }; + "xapian-ruby" = { + version = "1.2.19.1"; + source = { + type = "gem"; + sha256 = "1crfrmc8kf6qq1xcfcmgf213zg66badpg4d86n7y9x3i1f5lxlbv"; + }; + }; } \ No newline at end of file diff --git a/pkgs/applications/networking/mailreaders/sup/mkrf_conf_xapian.rb b/pkgs/applications/networking/mailreaders/sup/mkrf_conf_xapian.rb new file mode 100644 index 00000000000..e19f06e23ac --- /dev/null +++ b/pkgs/applications/networking/mailreaders/sup/mkrf_conf_xapian.rb @@ -0,0 +1,14 @@ +require 'rubygems' +require 'rubygems/command.rb' +require 'rubygems/dependency_installer.rb' +require 'rbconfig' + +begin + Gem::Command.build_args = ARGV +rescue NoMethodError +end + +# create dummy rakefile to indicate success +f = File.open(File.join(File.dirname(__FILE__), "Rakefile"), "w") +f.write("task :default\n") +f.close diff --git a/pkgs/applications/networking/mailreaders/sup/xapian-Rakefile b/pkgs/applications/networking/mailreaders/sup/xapian-Rakefile new file mode 100644 index 00000000000..9f0b8e72f08 --- /dev/null +++ b/pkgs/applications/networking/mailreaders/sup/xapian-Rakefile @@ -0,0 +1,38 @@ +# encoding: utf-8 +# Install the xapian binaries into the lib folder of the gem +require 'rbconfig' + +c = RbConfig::CONFIG + +def system!(cmd) + puts cmd + system(cmd) or raise +end + +source_dir = 'xapian_source' +bindings = Dir["#{source_dir}/xapian-bindings-*"].first +bindings = File.basename(bindings, ".tar.xz") + +task :default do + system! "tar -xJf #{source_dir}/#{bindings}.tar.xz" + + prefix = Dir.pwd + ENV['LDFLAGS'] = "-L#{prefix}/lib" + + system! "mkdir -p lib" + + Dir.chdir bindings do + ENV['RUBY'] ||= "#{c['bindir']}/#{c['RUBY_INSTALL_NAME']}" + system! "./configure --prefix=#{prefix} --exec-prefix=#{prefix} --with-ruby" + system! "make clean all" + end + + system! "cp -r #{bindings}/ruby/.libs/_xapian.* lib" + system! "cp #{bindings}/ruby/xapian.rb lib" + + system! "rm lib/*.la" + system! "rm lib/*.lai" + + system! "rm -R #{bindings}" + system! "rm -R #{source_dir}" +end diff --git a/pkgs/development/interpreters/ruby/bundler-env.nix b/pkgs/development/interpreters/ruby/bundler-env.nix index 1ea982c111e..3ccc1b8ff91 100644 --- a/pkgs/development/interpreters/ruby/bundler-env.nix +++ b/pkgs/development/interpreters/ruby/bundler-env.nix @@ -1,6 +1,5 @@ { stdenv, runCommand, writeText, writeScript, writeScriptBin, ruby, lib , callPackage , gemFixes, fetchurl, fetchgit, buildRubyGem -#, bundler_PATCHED , bundler_HEAD , git }@defs: @@ -10,7 +9,9 @@ { name, gemset, gemfile, lockfile, ruby ? defs.ruby, fixes ? gemFixes , enableParallelBuilding ? false # TODO: this might not work, given the env-var shinanigans. -, documentation ? false}@args: +, documentation ? false +, meta ? {} +}@args: let @@ -127,22 +128,26 @@ let needsPreInstall = attrs: (attrs ? preInstall) || (attrs ? buildInputs) || (attrs ? nativeBuildInputs); - createPreInstallers = lib.fold (next: acc: + # TODO: support cross compilation? look at stdenv/generic/default.nix. + runPreInstallers = lib.fold (next: acc: if !needsPreInstall next then acc else acc + '' - cp ${writeScript "${next.name}-pre-install" '' + ${writeScript "${next.name}-pre-install" '' #!${stdenv.shell} - buildInputs="${toString (next.buildInputs or [])}" - nativeBuildInputs="${toString (next.nativeBuildInputs or [])}" + export nativeBuildInputs="${toString ((next.nativeBuildInputs or []) ++ (next.buildInputs or []))}" source ${stdenv}/setup + header "running pre-install script for ${next.name}" + ${next.preInstall or ""} ${ruby}/bin/ruby -e 'print ENV.inspect' > env/${next.name} - ''} pre-installers/${next.name} + + stopNest + ''} '' ) "" (attrValues instantiated); @@ -245,18 +250,23 @@ in stdenv.mkDerivation { inherit name; + buildInputs = [ ruby bundler git ]; + phases = [ "installPhase" "fixupPhase" ]; + outputs = [ "out" # the installed libs/bins "bundle" # supporting files for bundler ]; + installPhase = '' # Copy the Gemfile and Gemfile.lock + mkdir -p $bundle export BUNDLE_GEMFILE=$bundle/Gemfile cp ${gemfile} $BUNDLE_GEMFILE @@ -273,8 +283,7 @@ stdenv.mkDerivation { ${copyGems} mkdir env - mkdir pre-installers - ${createPreInstallers} + ${runPreInstallers} ${allBuildArgs} @@ -289,8 +298,11 @@ stdenv.mkDerivation { export RUBYOPT="-rmonkey_patches.rb -I $(pwd -P)" bundler install --frozen --binstubs ${lib.optionalString enableParallelBuilding "--jobs $NIX_BUILD_CORES"} ''; + passthru = { inherit ruby; inherit bundler; }; + + inherit meta; } diff --git a/pkgs/development/interpreters/ruby/monkey_patches.rb b/pkgs/development/interpreters/ruby/monkey_patches.rb index 8e5ab632f74..5877f2e7bfb 100644 --- a/pkgs/development/interpreters/ruby/monkey_patches.rb +++ b/pkgs/development/interpreters/ruby/monkey_patches.rb @@ -133,14 +133,9 @@ Bundler::Installer.class_eval do # and then set it back to what it was originally. alias original_install_gem_from_spec install_gem_from_spec def install_gem_from_spec(spec, standalone = false, worker = 0) - pre_installer = "pre-installers/#{spec.name}" - if File.exist?(pre_installer) - system(pre_installer) - unless $?.success? - Bundler.ui.error "The pre-installer script for #{spec.name} failed!" - exit 1 - end - env = eval(Bundler.read_file("env/#{spec.name}")) + env_dump = "env/#{spec.name}" + if File.exist?(env_dump) + env = eval(Bundler.read_file(env_dump)) unless env Bundler.ui.error "The environment variables for #{spec.name} could not be loaded!" exit 1 diff --git a/pkgs/development/libraries/xapian/default.nix b/pkgs/development/libraries/xapian/default.nix index d74a85a9162..575fb73084c 100644 --- a/pkgs/development/libraries/xapian/default.nix +++ b/pkgs/development/libraries/xapian/default.nix @@ -1,11 +1,11 @@ { stdenv, fetchurl, libuuid, zlib }: stdenv.mkDerivation { - name = "xapian-1.2.8"; + name = "xapian-1.2.19"; src = fetchurl { - url = http://oligarchy.co.uk/xapian/1.2.8/xapian-core-1.2.8.tar.gz; - sha256 = "00411ebac66a5592b87fc57ccfeb234c84b929ed23c185befb5df9929df3d4f9"; + url = http://oligarchy.co.uk/xapian/1.2.19/xapian-core-1.2.19.tar.xz; + sha256 = "11a7lm3w3pchk4rx144nc2p31994spyqmldm18ph86zzi01jcy2a"; }; buildInputs = [ libuuid zlib ]; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 72eaa407517..177fd3d657e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -10643,42 +10643,14 @@ let pcmanfm = callPackage ../applications/misc/pcmanfm { }; - ruby_gpgme = callPackage ../development/libraries/ruby_gpgme { - ruby = ruby_1_9_3; - hoe = rubyPackages.hoe; - }; - - ruby_ncursesw_sup = callPackage ../development/libraries/ruby_ncursesw_sup { }; - shotcut = callPackage ../applications/video/shotcut { mlt = mlt-qt5; }; smplayer = callPackage ../applications/video/smplayer { }; smtube = callPackage ../applications/video/smtube {}; - sup = with rubyPackages; callPackage ../applications/networking/mailreaders/sup { - ruby = ruby_1_9_3.override { - cursesSupport = true; - }; - - inherit gettext highline iconv locale lockfile - text trollop xapian_ruby which; - - rmail_sup = ""; # missing - unicode = ""; - - # See https://github.com/NixOS/nixpkgs/issues/1804 and - # https://github.com/NixOS/nixpkgs/issues/2146 - bundler = pkgs.lib.overrideDerivation pkgs.rubyPackages.bundler ( - oldAttrs: { - dontPatchShebangs = 1; - } - ); - chronic = chronic; - gpgme = ruby_gpgme; - mime_types = mime_types; - ncursesw_sup = ruby_ncursesw_sup; - rake = rake; + sup = callPackage ../applications/networking/mailreaders/sup { + ruby = ruby_1_9_3.override { cursesSupport = true; }; }; synfigstudio = callPackage ../applications/graphics/synfigstudio { From 317d78d145393932042ff7f802655dd1a934a6f8 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Wed, 21 Jan 2015 20:33:19 -0500 Subject: [PATCH 66/69] consule: use new bundlerEnv --- .../networking/mailreaders/sup/default.nix | 37 +------- .../interpreters/ruby/bundler-env.nix | 29 +++---- .../default-gem-config.nix} | 77 +++++++++++++---- .../interpreters/ruby/bundler-env/location.rb | 84 +++++++++++++++++++ .../ruby/bundler-env}/mkrf_conf_xapian.rb | 0 .../ruby/bundler-env}/xapian-Rakefile | 0 pkgs/development/libraries/v8/3.16.14.nix | 11 ++- pkgs/servers/consul/default.nix | 14 +++- pkgs/servers/consul/gemset.nix | 16 ++-- pkgs/top-level/all-packages.nix | 4 +- 10 files changed, 191 insertions(+), 81 deletions(-) rename pkgs/development/interpreters/ruby/{fixes.nix => bundler-env/default-gem-config.nix} (54%) create mode 100644 pkgs/development/interpreters/ruby/bundler-env/location.rb rename pkgs/{applications/networking/mailreaders/sup => development/interpreters/ruby/bundler-env}/mkrf_conf_xapian.rb (100%) rename pkgs/{applications/networking/mailreaders/sup => development/interpreters/ruby/bundler-env}/xapian-Rakefile (100%) diff --git a/pkgs/applications/networking/mailreaders/sup/default.nix b/pkgs/applications/networking/mailreaders/sup/default.nix index 874d662754f..19715d7b255 100644 --- a/pkgs/applications/networking/mailreaders/sup/default.nix +++ b/pkgs/applications/networking/mailreaders/sup/default.nix @@ -1,4 +1,5 @@ -{ stdenv, lib, bundlerEnv, gpgme, ruby, ncurses, writeText, zlib, xapian, pkgconfig, which }: +{ stdenv, lib, bundlerEnv, gpgme, ruby, ncurses, writeText, zlib, xapian +, pkgconfig, which }: bundlerEnv { name = "sup-0.20.0"; @@ -8,40 +9,6 @@ bundlerEnv { lockfile = ./Gemfile.lock; gemset = ./gemset.nix; - fixes.gpgme = attrs: { - buildInputs = [ gpgme ]; - }; - - fixes.ncursesw = attrs: { - buildInputs = [ ncurses ]; - buildArgs = [ - "--with-cflags=-I${ncurses}/include" - "--with-ldflags=-L${ncurses}/lib" - ]; - }; - - fixes.xapian-ruby = attrs: { - # use the system xapian - buildInputs = [ xapian pkgconfig zlib ]; - postPatch = '' - cp ${./xapian-Rakefile} Rakefile - ''; - preInstall = '' - export XAPIAN_CONFIG=${xapian}/bin/xapian-config - ''; - }; - - fixes.sup = attrs: { - # prevent sup from trying to dynamically install `xapian-ruby`. - postPatch = '' - cp ${./mkrf_conf_xapian.rb} ext/mkrf_conf_xapian.rb - - substituteInPlace lib/sup/crypto.rb \ - --replace 'which gpg2' \ - '${which}/bin/which gpg2' - ''; - }; - meta = with lib; { description = "A curses threads-with-tags style email client"; homepage = http://supmua.org; diff --git a/pkgs/development/interpreters/ruby/bundler-env.nix b/pkgs/development/interpreters/ruby/bundler-env.nix index 3ccc1b8ff91..352451c1503 100644 --- a/pkgs/development/interpreters/ruby/bundler-env.nix +++ b/pkgs/development/interpreters/ruby/bundler-env.nix @@ -1,13 +1,12 @@ { stdenv, runCommand, writeText, writeScript, writeScriptBin, ruby, lib -, callPackage , gemFixes, fetchurl, fetchgit, buildRubyGem -, bundler_HEAD +, callPackage, defaultGemConfig, fetchurl, fetchgit, buildRubyGem , bundler_HEAD , git }@defs: # This is a work-in-progress. # The idea is that his will replace load-ruby-env.nix. -{ name, gemset, gemfile, lockfile, ruby ? defs.ruby, fixes ? gemFixes +{ name, gemset, gemfile, lockfile, ruby ? defs.ruby, gemConfig ? defaultGemConfig , enableParallelBuilding ? false # TODO: this might not work, given the env-var shinanigans. , documentation ? false , meta ? {} @@ -37,9 +36,9 @@ let src = (fetchers."${attrs.source.type}" attrs); }; - applyFixes = attrs: - if fixes ? "${attrs.name}" - then attrs // fixes."${attrs.name}" attrs + applyGemConfigs = attrs: + if gemConfig ? "${attrs.name}" + then attrs // gemConfig."${attrs.name}" attrs else attrs; needsPatch = attrs: @@ -118,7 +117,7 @@ let }; instantiate = (attrs: - applyPatches (applyFixes (applySrc attrs)) + applyPatches (applyGemConfigs (applySrc attrs)) ); instantiated = lib.flip lib.mapAttrs (import gemset) (name: attrs: @@ -236,15 +235,15 @@ let end ''; - needsBuildArgs = attrs: attrs ? buildArgs; + needsBuildFlags = attrs: attrs ? buildFlags; - mkBuildArgs = spec: - "export BUNDLE_BUILD__${lib.toUpper spec.name}='${lib.concatStringsSep " " (map shellEscape spec.buildArgs)}'"; + mkBuildFlags = spec: + "export BUNDLE_BUILD__${lib.toUpper spec.name}='${lib.concatStringsSep " " (map shellEscape spec.buildFlags)}'"; - allBuildArgs = + allBuildFlags = lib.concatStringsSep "\n" - (map mkBuildArgs - (lib.filter needsBuildArgs (attrValues instantiated))); + (map mkBuildFlags + (lib.filter needsBuildFlags (attrValues instantiated))); in @@ -266,6 +265,8 @@ stdenv.mkDerivation { installPhase = '' # Copy the Gemfile and Gemfile.lock + #mkdir out + #out=$(pwd -P)/out mkdir -p $bundle export BUNDLE_GEMFILE=$bundle/Gemfile @@ -285,7 +286,7 @@ stdenv.mkDerivation { mkdir env ${runPreInstallers} - ${allBuildArgs} + ${allBuildFlags} ${lib.optionalString (!documentation) '' mkdir home diff --git a/pkgs/development/interpreters/ruby/fixes.nix b/pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix similarity index 54% rename from pkgs/development/interpreters/ruby/fixes.nix rename to pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix index 0b8545090c5..b4ae465d37e 100644 --- a/pkgs/development/interpreters/ruby/fixes.nix +++ b/pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix @@ -18,7 +18,9 @@ # (to make gems behave if necessary). { lib, fetchurl, writeScript, ruby, libxml2, libxslt, python, stdenv, which -, libiconv, postgresql, v8_3_16_14, clang, sqlite, zlib, imagemagick, pkgconfig}: +, libiconv, postgresql, v8, v8_3_16_14, clang, sqlite, zlib, imagemagick, pkgconfig +, ncurses, xapian, gpgme, utillinux +}: let v8 = v8_3_16_14; @@ -30,9 +32,34 @@ in dontPatchShebangs = true; }; + gpgme = attrs: { + buildInputs = [ gpgme ]; + }; + libv8 = attrs: { - buildFlags = [ "--with-system-v8" ]; buildInputs = [ which v8 python ]; + # The "--with-system-v8" flag doesn't seem to work... + postPatch = '' + rm -r vendor + cp ${./location.rb} ext/libv8/location.rb + cat <<-EOF > ext/libv8/extconf.rb + require 'mkmf' + create_makefile('libv8') + + require File.expand_path '../location', __FILE__ + location = Libv8::Location::System.new + + exit location.install! + EOF + ''; + }; + + ncursesw = attrs: { + buildInputs = [ ncurses ]; + buildFlags = [ + "--with-cflags=-I${ncurses}/include" + "--with-ldflags=-L${ncurses}/lib" + ]; }; nokogiri = attrs: { @@ -66,24 +93,46 @@ in ]; }; + sup = attrs: { + # prevent sup from trying to dynamically install `xapian-ruby`. + postPatch = '' + cp ${./mkrf_conf_xapian.rb} ext/mkrf_conf_xapian.rb + + substituteInPlace lib/sup/crypto.rb \ + --replace 'which gpg2' \ + '${which}/bin/which gpg2' + ''; + }; + therubyracer = attrs: { - dontBuild = false; + #preInstall = '' + # ln -s ${clang}/bin/clang $TMPDIR/gcc + # ln -s ${clang}/bin/clang++ $TMPDIR/g++ + # export PATH=$TMPDIR:$PATH + #''; - preInstall = '' - ln -s ${clang}/bin/clang $TMPDIR/gcc - ln -s ${clang}/bin/clang++ $TMPDIR/g++ - export PATH=$TMPDIR:$PATH - ''; + #buildInputs = [ + # utillinux # for `flock` + #]; - postInstall = stdenv.lib.optionalString stdenv.isDarwin '' - cat >> $out/nix-support/setup-hook < Date: Wed, 21 Jan 2015 20:37:05 -0500 Subject: [PATCH 67/69] ruby: use patch for libv8 --- .../ruby/bundler-env/default-gem-config.nix | 9 +- .../interpreters/ruby/bundler-env/location.rb | 84 ------------------- 2 files changed, 7 insertions(+), 86 deletions(-) delete mode 100644 pkgs/development/interpreters/ruby/bundler-env/location.rb diff --git a/pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix b/pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix index b4ae465d37e..71fe06f7f44 100644 --- a/pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix +++ b/pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix @@ -19,7 +19,7 @@ { lib, fetchurl, writeScript, ruby, libxml2, libxslt, python, stdenv, which , libiconv, postgresql, v8, v8_3_16_14, clang, sqlite, zlib, imagemagick, pkgconfig -, ncurses, xapian, gpgme, utillinux +, ncurses, xapian, gpgme, utillinux, fetchpatch }: let @@ -39,9 +39,14 @@ in libv8 = attrs: { buildInputs = [ which v8 python ]; # The "--with-system-v8" flag doesn't seem to work... + patches = [ + (fetchpatch { + url = https://github.com/cowboyd/libv8/pull/161.patch; + sha256 = "1l6572cmigc22g249jj8h0xlbig88mj43kdqdbimhw2pmpv3q0rs"; + }) + ]; postPatch = '' rm -r vendor - cp ${./location.rb} ext/libv8/location.rb cat <<-EOF > ext/libv8/extconf.rb require 'mkmf' create_makefile('libv8') diff --git a/pkgs/development/interpreters/ruby/bundler-env/location.rb b/pkgs/development/interpreters/ruby/bundler-env/location.rb deleted file mode 100644 index bea759d6a0c..00000000000 --- a/pkgs/development/interpreters/ruby/bundler-env/location.rb +++ /dev/null @@ -1,84 +0,0 @@ -# See: https://github.com/cowboyd/libv8/pull/161 - -require 'yaml' -require 'pathname' -require File.expand_path '../paths', __FILE__ - -module Libv8 - class Location - def install! - File.open(Pathname(__FILE__).dirname.join('.location.yml'), "w") do |f| - f.write self.to_yaml - end - return 0 - end - - def self.load! - File.open(Pathname(__FILE__).dirname.join('.location.yml')) do |f| - YAML.load f - end - end - - class Vendor < Location - def install! - require File.expand_path '../builder', __FILE__ - builder = Libv8::Builder.new - exit_status = builder.build_libv8! - super if exit_status == 0 - verify_installation! - return exit_status - end - def configure(context = MkmfContext.new) - context.incflags.insert 0, Libv8::Paths.include_paths.map{|p| "-I#{p}"}.join(" ") + " " - context.ldflags.insert 0, Libv8::Paths.object_paths.join(" ") + " " - end - - def verify_installation! - Libv8::Paths.object_paths.each do |p| - fail ArchiveNotFound, p unless File.exist? p - end - end - - class ArchiveNotFound < StandardError - def initialize(filename) - super "libv8 did not install properly, expected binary v8 archive '#{filename}'to exist, but it was not found" - end - end - end - - class System < Location - def configure(context = MkmfContext.new) - context.send(:dir_config, 'v8') - context.send(:find_header, 'v8.h') or fail NotFoundError - context.send(:have_library, 'v8') or fail NotFoundError - end - - class NotFoundError < StandardError - def initialize(*args) - super(<<-EOS) -You have chosen to use the version of V8 found on your system -and *not* the one that is bundle with the libv8 rubygem. However, -it could not be located. please make sure you have a version of -v8 that is compatible with #{Libv8::VERSION} installed. You may -need to special --with-v8-dir options if it is in a non-standard -location - -thanks, -The Mgmt - -EOS - end - end - end - - class MkmfContext - def incflags - $INCFLAGS - end - - def ldflags - $LDFLAGS - end - end - end -end From 8085f088cbd10d62e35870068873dc0e746e1830 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Wed, 21 Jan 2015 20:46:50 -0500 Subject: [PATCH 68/69] ruby: exorcise the last few remaining rubyPackages --- .../version-management/redmine/bootstrap.nix | 2 +- .../version-management/redmine/default.nix | 2 +- .../ruby/bundler-env/default-gem-config.nix | 33 +- .../default.nix} | 15 +- .../ruby/{ => bundler-env}/monkey_patches.rb | 0 .../ruby/{ => bundler-env}/package-1.8.rb | 0 .../interpreters/ruby/generated.nix | 2615 ----------------- .../interpreters/ruby/packages.nix | 11 - pkgs/development/libraries/v8/3.16.14.nix | 1 - .../monitoring/riemann-dash/default.nix | 9 +- .../monitoring/riemann-dash/gemset.nix | 18 +- pkgs/top-level/all-packages.nix | 4 +- 12 files changed, 28 insertions(+), 2682 deletions(-) rename pkgs/development/interpreters/ruby/{bundler-env.nix => bundler-env/default.nix} (99%) rename pkgs/development/interpreters/ruby/{ => bundler-env}/monkey_patches.rb (100%) rename pkgs/development/interpreters/ruby/{ => bundler-env}/package-1.8.rb (100%) delete mode 100644 pkgs/development/interpreters/ruby/generated.nix delete mode 100644 pkgs/development/interpreters/ruby/packages.nix diff --git a/pkgs/applications/version-management/redmine/bootstrap.nix b/pkgs/applications/version-management/redmine/bootstrap.nix index 7bb9e268497..5971f2e9cdd 100644 --- a/pkgs/applications/version-management/redmine/bootstrap.nix +++ b/pkgs/applications/version-management/redmine/bootstrap.nix @@ -14,7 +14,7 @@ in stdenv.mkDerivation rec { sha256 = "0x0zwxyj4dwbk7l64s3lgny10mjf0ba8jwrbafsm4d72sncmacv0"; }; buildInputs = [ - ruby rubyPackages.bundler libiconv libxslt libxml2 pkgconfig + ruby bundler libiconv libxslt libxml2 pkgconfig libffi imagemagickBig postgresql which stdenv ]; installPhase = '' diff --git a/pkgs/applications/version-management/redmine/default.nix b/pkgs/applications/version-management/redmine/default.nix index 544c4218e00..b1ef5ee757c 100644 --- a/pkgs/applications/version-management/redmine/default.nix +++ b/pkgs/applications/version-management/redmine/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, ruby, rubyPackages, bundler, libiconv, libiconvOrNull, libiconvOrLibc, libxslt, libxml2, pkgconfig, libffi, glibc, imagemagickBig, postgresql }: +{ stdenv, fetchurl, ruby, bundler, libiconv, libiconvOrNull, libiconvOrLibc, libxslt, libxml2, pkgconfig, libffi, glibc, imagemagickBig, postgresql }: let gemspec = map (gem: fetchurl { url=gem.url; sha256=gem.hash; }) (import ./Gemfile.nix); diff --git a/pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix b/pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix index 71fe06f7f44..9b9bf5d85db 100644 --- a/pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix +++ b/pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix @@ -28,35 +28,21 @@ let in { - bundler = attrs: { - dontPatchShebangs = true; - }; - gpgme = attrs: { buildInputs = [ gpgme ]; }; libv8 = attrs: { buildInputs = [ which v8 python ]; - # The "--with-system-v8" flag doesn't seem to work... + buildFlags = [ + "--with-system-v8=true" + ]; patches = [ (fetchpatch { url = https://github.com/cowboyd/libv8/pull/161.patch; sha256 = "1l6572cmigc22g249jj8h0xlbig88mj43kdqdbimhw2pmpv3q0rs"; }) ]; - postPatch = '' - rm -r vendor - cat <<-EOF > ext/libv8/extconf.rb - require 'mkmf' - create_makefile('libv8') - - require File.expand_path '../location', __FILE__ - location = Libv8::Location::System.new - - exit location.install! - EOF - ''; }; ncursesw = attrs: { @@ -110,19 +96,6 @@ in }; therubyracer = attrs: { - #preInstall = '' - # ln -s ${clang}/bin/clang $TMPDIR/gcc - # ln -s ${clang}/bin/clang++ $TMPDIR/g++ - # export PATH=$TMPDIR:$PATH - #''; - - #buildInputs = [ - # utillinux # for `flock` - #]; - - #postInstall = '' - #''; - buildFlags = [ "--with-v8-dir=${v8}" "--with-v8-include=${v8}/include" diff --git a/pkgs/development/interpreters/ruby/bundler-env.nix b/pkgs/development/interpreters/ruby/bundler-env/default.nix similarity index 99% rename from pkgs/development/interpreters/ruby/bundler-env.nix rename to pkgs/development/interpreters/ruby/bundler-env/default.nix index 352451c1503..fc23e3547b6 100644 --- a/pkgs/development/interpreters/ruby/bundler-env.nix +++ b/pkgs/development/interpreters/ruby/bundler-env/default.nix @@ -264,10 +264,6 @@ stdenv.mkDerivation { ]; installPhase = '' - # Copy the Gemfile and Gemfile.lock - #mkdir out - #out=$(pwd -P)/out - mkdir -p $bundle export BUNDLE_GEMFILE=$bundle/Gemfile cp ${gemfile} $BUNDLE_GEMFILE @@ -280,20 +276,21 @@ stdenv.mkDerivation { export GEM_PATH=$GEM_HOME mkdir -p $GEM_HOME + ${allBuildFlags} + #export + mkdir gems ${copyGems} - mkdir env - ${runPreInstallers} - - ${allBuildFlags} - ${lib.optionalString (!documentation) '' mkdir home HOME="$(pwd -P)/home" echo "gem: --no-rdoc --no-ri" > $HOME/.gemrc ''} + mkdir env + ${runPreInstallers} + mkdir $out/bin cp ${./monkey_patches.rb} monkey_patches.rb export RUBYOPT="-rmonkey_patches.rb -I $(pwd -P)" diff --git a/pkgs/development/interpreters/ruby/monkey_patches.rb b/pkgs/development/interpreters/ruby/bundler-env/monkey_patches.rb similarity index 100% rename from pkgs/development/interpreters/ruby/monkey_patches.rb rename to pkgs/development/interpreters/ruby/bundler-env/monkey_patches.rb diff --git a/pkgs/development/interpreters/ruby/package-1.8.rb b/pkgs/development/interpreters/ruby/bundler-env/package-1.8.rb similarity index 100% rename from pkgs/development/interpreters/ruby/package-1.8.rb rename to pkgs/development/interpreters/ruby/bundler-env/package-1.8.rb diff --git a/pkgs/development/interpreters/ruby/generated.nix b/pkgs/development/interpreters/ruby/generated.nix deleted file mode 100644 index 85e66dc4faa..00000000000 --- a/pkgs/development/interpreters/ruby/generated.nix +++ /dev/null @@ -1,2615 +0,0 @@ -# WARNING: automatically generated file -# Generated by 'gem nix' command that comes from 'nix' gem -g: # Get dependencies from patched gems -{ - aliases = { - ZenTest = g.ZenTest_4_11_0; - actionmailer = g.actionmailer_4_1_8; - actionpack = g.actionpack_4_1_8; - actionview = g.actionview_4_1_8; - activemodel = g.activemodel_4_1_8; - activerecord = g.activerecord_4_1_8; - activesupport = g.activesupport_4_1_8; - addressable = g.addressable_2_3_6; - arel = g.arel_5_0_1_20140414130214; - atoulme_Antwrap = g.atoulme_Antwrap_0_7_5; - autotest_rails = g.autotest_rails_4_2_1; - aws_sdk = g.aws_sdk_1_59_1; - aws_sdk_v1 = g.aws_sdk_v1_1_59_1; - backports = g.backports_3_6_4; - bitbucket_backup = g.bitbucket_backup_0_3_1; - blankslate = g.blankslate_2_1_2_4; - builder = g.builder_3_2_2; - buildr = g.buildr_1_4_21; - bundler = g.bundler_1_7_9; - celluloid = g.celluloid_0_16_0; - childprocess = g.childprocess_0_5_5; - chronic = g.chronic_0_10_2; - chunky_png = g.chunky_png_1_3_3; - classifier_reborn = g.classifier_reborn_2_0_2; - coderay = g.coderay_1_1_0; - coffee_script = g.coffee_script_2_3_0; - coffee_script_source = g.coffee_script_source_1_8_0; - colorator = g.colorator_0_1; - compass = g.compass_1_0_1; - compass_core = g.compass_core_1_0_1; - compass_import_once = g.compass_import_once_1_0_5; - cucumber = g.cucumber_1_3_17; - daemons = g.daemons_1_1_9; - diff_lcs = g.diff_lcs_1_2_5; - dimensions = g.dimensions_1_2_0; - domain_name = g.domain_name_0_5_22; - dotenv = g.dotenv_1_0_2; - em_resolv_replace = g.em_resolv_replace_1_1_3; - erubis = g.erubis_2_7_0; - ethon = g.ethon_0_7_1; - eventmachine = g.eventmachine_1_0_3; - eventmachine_tail = g.eventmachine_tail_0_6_4; - excon = g.excon_0_42_1; - execjs = g.execjs_2_2_2; - fakes3 = g.fakes3_0_1_6_1; - faraday = g.faraday_0_9_0; - faraday_middleware = g.faraday_middleware_0_9_1; - fast_stemmer = g.fast_stemmer_1_0_2; - ffi = g.ffi_1_9_6; - file_tail = g.file_tail_1_1_0; - foreman = g.foreman_0_76_0; - gettext = g.gettext_3_1_4; - gh = g.gh_0_13_2; - gherkin = g.gherkin_2_12_2; - heroku = g.heroku_3_20_0; - heroku_api = g.heroku_api_0_3_21; - highline = g.highline_1_6_21; - hike = g.hike_1_2_3; - hitimes = g.hitimes_1_2_2; - hoe = g.hoe_3_7_1; - http_cookie = g.http_cookie_1_0_2; - i18n = g.i18n_0_6_11; - iconv = g.iconv_1_0_4; - jekyll = g.jekyll_2_5_2; - jekyll_coffeescript = g.jekyll_coffeescript_1_0_1; - jekyll_gist = g.jekyll_gist_1_1_0; - jekyll_paginate = g.jekyll_paginate_1_1_0; - jekyll_sass_converter = g.jekyll_sass_converter_1_3_0; - jekyll_watch = g.jekyll_watch_1_2_0; - jsduck = g.jsduck_5_3_4; - json = g.json_1_8_1; - json_pure = g.json_pure_1_8_0; - kitchen_ansible = g.kitchen_ansible_0_0_4; - kitchen_vagrant = g.kitchen_vagrant_0_15_0; - kramdown = g.kramdown_1_5_0; - launchy = g.launchy_2_4_3; - liquid = g.liquid_2_6_1; - listen = g.listen_2_8_3; - locale = g.locale_2_1_0; - lockfile = g.lockfile_2_1_3; - macaddr = g.macaddr_1_7_1; - mail = g.mail_2_6_3; - mechanize = g.mechanize_2_7_3; - mercenary = g.mercenary_0_3_5; - method_source = g.method_source_0_8_2; - mime_types = g.mime_types_2_4_3; - mini_portile = g.mini_portile_0_6_1; - minitar = g.minitar_0_5_4; - minitest = g.minitest_5_5_0; - mixlib_shellout = g.mixlib_shellout_1_6_1; - multi_json = g.multi_json_1_10_1; - multi_test = g.multi_test_0_1_1; - multipart_post = g.multipart_post_2_0_0; - net_http_digest_auth = g.net_http_digest_auth_1_4; - net_http_persistent = g.net_http_persistent_2_9_4; - net_http_pipeline = g.net_http_pipeline_1_0_1; - net_scp = g.net_scp_1_2_1; - net_sftp = g.net_sftp_2_1_2; - net_ssh = g.net_ssh_2_9_1; - netrc = g.netrc_0_10_1; - newrelic_plugin = g.newrelic_plugin_1_3_1; - nix = g.nix_0_1_1; - nokogiri = g.nokogiri_1_6_5; - ntlm_http = g.ntlm_http_0_1_1; - orderedhash = g.orderedhash_0_0_6; - papertrail = g.papertrail_0_9_11; - papertrail_cli = g.papertrail_cli_0_9_3; - parallel = g.parallel_0_7_1; - parslet = g.parslet_1_5_0; - posix_spawn = g.posix_spawn_0_3_9; - pry = g.pry_0_9_12_6; - pusher_client = g.pusher_client_0_6_0; - pygments_rb = g.pygments_rb_0_6_0; - rabbitmq_manager = g.rabbitmq_manager_0_1_0; - rack = g.rack_1_5_2; - rack_protection = g.rack_protection_1_5_3; - rack_test = g.rack_test_0_6_2; - rails = g.rails_4_1_8; - railties = g.railties_4_1_8; - rake = g.rake_10_4_2; - rb_fsevent = g.rb_fsevent_0_9_4; - rb_inotify = g.rb_inotify_0_9_5; - rdiscount = g.rdiscount_2_1_7_1; - rdoc = g.rdoc_4_2_0; - redcarpet = g.redcarpet_3_2_2; - redis = g.redis_3_2_0; - remote_syslog = g.remote_syslog_1_6_14; - rest_client = g.rest_client_1_6_7; - riemann_dash = g.riemann_dash_0_2_9; - right_aws = g.right_aws_3_1_0; - right_http_connection = g.right_http_connection_1_5_0; - rjb = g.rjb_1_5_2; - rkelly_remix = g.rkelly_remix_0_0_6; - rmail = g.rmail_1_0_0; - rspec = g.rspec_2_14_1; - rspec_core = g.rspec_core_2_14_8; - rspec_expectations = g.rspec_expectations_2_14_5; - rspec_mocks = g.rspec_mocks_2_14_6; - rubyzip = g.rubyzip_1_1_6; - safe_yaml = g.safe_yaml_1_0_4; - sass = g.sass_3_4_9; - selenium_webdriver = g.selenium_webdriver_2_44_0; - servolux = g.servolux_0_10_0; - sinatra = g.sinatra_1_4_5; - slop = g.slop_3_6_0; - sprockets = g.sprockets_2_12_3; - sprockets_rails = g.sprockets_rails_2_2_2; - syslog_protocol = g.syslog_protocol_0_9_2; - systemu = g.systemu_2_6_4; - taskjuggler = g.taskjuggler_3_5_0; - term_ansicolor = g.term_ansicolor_1_3_0; - terminal_notifier = g.terminal_notifier_1_6_2; - test_kitchen = g.test_kitchen_1_2_1; - text = g.text_1_3_0; - thin = g.thin_1_6_3; - thor = g.thor_0_19_1; - thread_safe = g.thread_safe_0_3_4; - tilt = g.tilt_1_4_1; - timers = g.timers_4_0_1; - tins = g.tins_1_3_3; - tmuxinator = g.tmuxinator_0_6_9; - toml = g.toml_0_1_2; - travis = g.travis_1_7_4; - trollop = g.trollop_2_0; - typhoeus = g.typhoeus_0_6_9; - tzinfo = g.tzinfo_1_2_2; - uglifier = g.uglifier_2_6_0; - unf = g.unf_0_1_4; - unf_ext = g.unf_ext_0_0_6; - uuid = g.uuid_2_3_7; - webrick = g.webrick_1_3_1; - webrobots = g.webrobots_0_1_1; - websocket = g.websocket_1_2_1; - xapian_full = g.xapian_full_1_2_3; - xapian_ruby = g.xapian_ruby_1_2_17; - xml_simple = g.xml_simple_1_1_2; - yajl_ruby = g.yajl_ruby_1_2_1; - }; - gem_nix_args = [ ''autotest-rails'' ''aws-sdk'' ''bitbucket-backup'' ''buildr'' ''compass'' ''cucumber'' ''erubis'' ''execjs'' ''fakes3'' ''foreman'' ''gettext'' ''heroku'' ''iconv'' ''jekyll'' ''jsduck'' ''kitchen-ansible'' ''kitchen-vagrant'' ''lockfile'' ''mechanize'' ''newrelic_plugin'' ''nix'' ''papertrail-cli'' ''rabbitmq_manager-0.1.0'' ''rails'' ''rake'' ''rb-fsevent'' ''rdoc'' ''redis'' ''remote_syslog'' ''riemann-dash'' ''right_aws'' ''rmail'' ''sass'' ''selenium-webdriver'' ''sinatra-1.3.2'' ''taskjuggler'' ''terminal-notifier'' ''test-kitchen'' ''thin'' ''tmuxinator'' ''travis'' ''trollop'' ''uglifier'' ''uuid'' ''xapian-full'' ''xapian-ruby'' ''yajl-ruby'' ]; - gems = { - ZenTest_4_11_0 = { - basename = ''ZenTest''; - meta = { - description = ''ZenTest provides 4 different tools: zentest, unit_diff, autotest, and multiruby''; - homepage = ''https://github.com/seattlerb/zentest''; - longDescription = ''ZenTest provides 4 different tools: zentest, unit_diff, autotest, and -multiruby. - -zentest scans your target and unit-test code and writes your missing -code based on simple naming rules, enabling XP at a much quicker pace. -zentest only works with Ruby and Minitest or Test::Unit. There is -enough evidence to show that this is still proving useful to users, so -it stays. - -unit_diff is a command-line filter to diff expected results from -actual results and allow you to quickly see exactly what is wrong. -Do note that minitest 2.2+ provides an enhanced assert_equal obviating -the need for unit_diff - -autotest is a continous testing facility meant to be used during -development. As soon as you save a file, autotest will run the -corresponding dependent tests. - -multiruby runs anything you want on multiple versions of ruby. Great -for compatibility checking! Use multiruby_setup to manage your -installed versions.''; - }; - name = ''ZenTest-4.11.0''; - requiredGems = [ ]; - sha256 = ''0pm0kxrcbcg787jgd9z6cq0p0mg1v2m27n6sgs3pj0v219f526y8''; - }; - actionmailer_4_1_8 = { - basename = ''actionmailer''; - meta = { - description = ''Email composition, delivery, and receiving framework (part of Rails).''; - homepage = ''http://www.rubyonrails.org''; - longDescription = ''Email on Rails. Compose, deliver, receive, and test emails using the familiar controller/view pattern. First-class support for multipart email and attachments.''; - }; - name = ''actionmailer-4.1.8''; - requiredGems = [ g.actionpack_4_1_8 g.actionview_4_1_8 g.mail_2_6_3 ]; - sha256 = ''1x2jd4vbymkvikdaribgi12mbhbxnfvy54bi4wcilh2a0222m46s''; - }; - actionpack_4_1_8 = { - basename = ''actionpack''; - meta = { - description = ''Web-flow and rendering framework putting the VC in MVC (part of Rails).''; - homepage = ''http://www.rubyonrails.org''; - longDescription = ''Web apps on Rails. Simple, battle-tested conventions for building and testing MVC web applications. Works with any Rack-compatible server.''; - }; - name = ''actionpack-4.1.8''; - requiredGems = [ g.activesupport_4_1_8 g.rack_1_5_2 g.rack_test_0_6_2 g.actionview_4_1_8 ]; - sha256 = ''19q0z7rkc7mrqapikyi4qzcxkl8bzy8dxipqq19gskrk2aqyrbsg''; - }; - actionview_4_1_8 = { - basename = ''actionview''; - meta = { - description = ''Rendering framework putting the V in MVC (part of Rails).''; - homepage = ''http://www.rubyonrails.org''; - longDescription = ''Simple, battle-tested conventions and helpers for building web pages.''; - }; - name = ''actionview-4.1.8''; - requiredGems = [ g.activesupport_4_1_8 g.builder_3_2_2 g.erubis_2_7_0 ]; - sha256 = ''1a870vq2r6q4rxand0nwvq52rwakp9l4p6a834i2rjz5rildmigk''; - }; - activemodel_4_1_8 = { - basename = ''activemodel''; - meta = { - description = ''A toolkit for building modeling frameworks (part of Rails).''; - homepage = ''http://www.rubyonrails.org''; - longDescription = ''A toolkit for building modeling frameworks like Active Record. Rich support for attributes, callbacks, validations, serialization, internationalization, and testing.''; - }; - name = ''activemodel-4.1.8''; - requiredGems = [ g.activesupport_4_1_8 g.builder_3_2_2 ]; - sha256 = ''1zvj66715rmfzf2zwwc8jyk4s21gggxvykvb6fqsny3hlhc1axq5''; - }; - activerecord_4_1_8 = { - basename = ''activerecord''; - meta = { - description = ''Object-relational mapper framework (part of Rails).''; - homepage = ''http://www.rubyonrails.org''; - longDescription = ''Databases on Rails. Build a persistent domain model by mapping database tables to Ruby classes. Strong conventions for associations, validations, aggregations, migrations, and testing come baked-in.''; - }; - name = ''activerecord-4.1.8''; - requiredGems = [ g.activesupport_4_1_8 g.activemodel_4_1_8 g.arel_5_0_1_20140414130214 ]; - sha256 = ''0nmgyskdpp59jpq51bc5jnahxs30ik08qld57p1hmy0arh39yc2g''; - }; - activesupport_4_1_8 = { - basename = ''activesupport''; - meta = { - description = ''A toolkit of support libraries and Ruby core extensions extracted from the Rails framework.''; - homepage = ''http://www.rubyonrails.org''; - longDescription = ''A toolkit of support libraries and Ruby core extensions extracted from the Rails framework. Rich support for multibyte strings, internationalization, time zones, and testing.''; - }; - name = ''activesupport-4.1.8''; - requiredGems = [ g.i18n_0_6_11 g.json_1_8_1 g.tzinfo_1_2_2 g.minitest_5_5_0 g.thread_safe_0_3_4 ]; - sha256 = ''012w64jqmkkhcah4rzmcmmd53ihrxdn81nifi6dgrg8i40cxqb8r''; - }; - addressable_2_3_6 = { - basename = ''addressable''; - meta = { - description = ''URI Implementation''; - homepage = ''http://addressable.rubyforge.org/''; - longDescription = ''Addressable is a replacement for the URI implementation that is part of -Ruby's standard library. It more closely conforms to the relevant RFCs and -adds support for IRIs and URI templates. -''; - }; - name = ''addressable-2.3.6''; - requiredGems = [ ]; - sha256 = ''137fj0whmn1kvaq8wjalp8x4qbblwzvg3g4bfx8d8lfi6f0w48p8''; - }; - arel_5_0_1_20140414130214 = { - basename = ''arel''; - meta = { - description = ''Arel is a SQL AST manager for Ruby''; - homepage = ''http://github.com/rails/arel''; - longDescription = ''Arel is a SQL AST manager for Ruby. It - -1. Simplifies the generation of complex SQL queries -2. Adapts to various RDBMSes - -It is intended to be a framework framework; that is, you can build your own ORM -with it, focusing on innovative object and collection modeling as opposed to -database compatibility and query generation.''; - }; - name = ''arel-5.0.1.20140414130214''; - requiredGems = [ ]; - sha256 = ''0dhnc20h1v8ml3nmkxq92rr7qxxpk6ixhwvwhgl2dbw9mmxz0hf9''; - }; - atoulme_Antwrap_0_7_5 = { - basename = ''atoulme_Antwrap''; - meta = { - description = ''A Ruby module that wraps the Apache Ant build tool. Antwrap can be used to invoke Ant Tasks from a Ruby or a JRuby script.''; - homepage = ''http://rubyforge.org/projects/antwrap/''; - longDescription = '' A Ruby module that wraps the Apache Ant build tool. Antwrap can be used to invoke Ant Tasks from a Ruby or a JRuby script. - -== FEATURES/PROBLEMS: - - Antwrap runs on the native Ruby interpreter via the RJB (Ruby Java Bridge gem) and on the JRuby interpreter. Antwrap is compatible with Ant versions 1.5.4, - 1.6.5 and 1.7.0. For more information, see the Project Info (http://rubyforge.org/projects/antwrap/) page. - -== SYNOPSIS: - - Antwrap is a Ruby library that can be used to invoke Ant tasks. It is being used in the Buildr (http://incubator.apache.org/buildr/) project to execute - Ant (http://ant.apache.org/) tasks in a Java project. If you are tired of fighting with Ant or Maven XML files in your Java project, take some time to - check out Buildr!''; - }; - name = ''atoulme-Antwrap-0.7.5''; - requiredGems = [ g.rjb_1_5_2 ]; - sha256 = ''05s3iw44lqa81f8nfy5f0xjj808600h82zb9bsh46b9kcq2w2kmz''; - }; - autotest_rails_4_2_1 = { - basename = ''autotest_rails''; - meta = { - description = ''This is an autotest plugin to provide rails support''; - homepage = ''https://github.com/seattlerb/autotest-rails''; - longDescription = ''This is an autotest plugin to provide rails support. It provides basic -rails support and extra plugins for migrations and fixtures.''; - }; - name = ''autotest-rails-4.2.1''; - requiredGems = [ g.ZenTest_4_11_0 ]; - sha256 = ''1v1dm9zlhdlrxvk90zs8d439ldar674ix41s7pncddgyswcfgg5l''; - }; - aws_sdk_1_59_1 = { - basename = ''aws_sdk''; - meta = { - description = ''AWS SDK for Ruby V1''; - homepage = ''http://aws.amazon.com/sdkforruby''; - longDescription = ''Version 1 of the AWS SDK for Ruby. Available as both `aws-sdk` and `aws-sdk-v1`. -Use `aws-sdk-v1` if you want to load v1 and v2 of the Ruby SDK in the same -application.''; - }; - name = ''aws-sdk-1.59.1''; - requiredGems = [ g.aws_sdk_v1_1_59_1 ]; - sha256 = ''1g20jj507l98x8nijfy3dwzmagr201rv1wy949bnh1y3hzs83dh4''; - }; - aws_sdk_v1_1_59_1 = { - basename = ''aws_sdk_v1''; - meta = { - description = ''AWS SDK for Ruby V1''; - homepage = ''http://aws.amazon.com/sdkforruby''; - longDescription = ''Version 1 of the AWS SDK for Ruby. Available as both `aws-sdk` and `aws-sdk-v1`. -Use `aws-sdk-v1` if you want to load v1 and v2 of the Ruby SDK in the same -application.''; - }; - name = ''aws-sdk-v1-1.59.1''; - requiredGems = [ g.nokogiri_1_6_5 g.json_1_8_1 ]; - sha256 = ''0wxmzxaly1jkp694wshkyh7rg9lf6ai1amn6mj9ib8azxw7mgcsg''; - }; - backports_3_6_4 = { - basename = ''backports''; - meta = { - description = ''Backports of Ruby features for older Ruby.''; - homepage = ''http://github.com/marcandre/backports''; - longDescription = ''Essential backports that enable many of the nice features of Ruby 1.8.7 up to 2.1.0 for earlier versions.''; - }; - name = ''backports-3.6.4''; - requiredGems = [ ]; - sha256 = ''0x2i84g14v5k63i1i2hwzpc2i8h1vkcjz7gr6gicdwsxbvnszwsc''; - }; - bitbucket_backup_0_3_1 = { - basename = ''bitbucket_backup''; - meta = { - description = ''A tool to backup Bitbucket repos.''; - homepage = ''https://bitbucket.org/seth/bitbucket-backup''; - longDescription = ''A tool to backup Bitbucket repos.''; - }; - name = ''bitbucket-backup-0.3.1''; - requiredGems = [ g.highline_1_6_21 g.json_1_8_1 ]; - sha256 = ''17d2pfk0z3cxcx9m90avcp5wxhdbrq23zd665263m3hh9b5qi0fj''; - }; - blankslate_2_1_2_4 = { - basename = ''blankslate''; - meta = { - description = ''BlankSlate extracted from Builder.''; - homepage = ''http://github.com/masover/blankslate''; - }; - name = ''blankslate-2.1.2.4''; - requiredGems = [ ]; - sha256 = ''0jnnq5q5dwy2rbfcl769vd9bk1yn0242f6yjlb9mnqdm9627cdcx''; - }; - builder_3_2_2 = { - basename = ''builder''; - meta = { - description = ''Builders for MarkUp.''; - homepage = ''http://onestepback.org''; - longDescription = ''Builder provides a number of builder objects that make creating structured data -simple to do. Currently the following builder objects are supported: - -* XML Markup -* XML Events -''; - }; - name = ''builder-3.2.2''; - requiredGems = [ ]; - sha256 = ''14fii7ab8qszrvsvhz6z2z3i4dw0h41a62fjr2h1j8m41vbrmyv2''; - }; - buildr_1_4_21 = { - basename = ''buildr''; - meta = { - description = ''Build like you code''; - homepage = ''http://buildr.apache.org/''; - longDescription = ''Apache Buildr is a build system for Java-based applications, including support -for Scala, Groovy and a growing number of JVM languages and tools. We wanted -something that's simple and intuitive to use, so we only need to tell it what -to do, and it takes care of the rest. But also something we can easily extend -for those one-off tasks, with a language that's a joy to use. -''; - }; - name = ''buildr-1.4.21''; - requiredGems = [ g.rake_0_9_2_2 g.builder_3_2_2 g.net_ssh_2_7_0 g.net_sftp_2_1_2 g.rubyzip_0_9_9 g.json_pure_1_8_0 g.hoe_3_7_1 g.rjb_1_5_1 g.atoulme_Antwrap_0_7_5 g.diff_lcs_1_2_4 g.rspec_expectations_2_14_3 g.rspec_mocks_2_14_3 g.rspec_core_2_14_5 g.rspec_2_14_1 g.xml_simple_1_1_2 g.minitar_0_5_4 g.bundler_1_7_9 g.orderedhash_0_0_6 ]; - sha256 = ''0a7x5vckpy9f8fdvb1w4swl095g8pw1zim2a19f3bfz9g2nd37i2''; - }; - bundler_1_7_9 = { - basename = ''bundler''; - meta = { - description = ''The best way to manage your application's dependencies''; - homepage = ''http://bundler.io''; - longDescription = ''Bundler manages an application's dependencies through its entire life, across many machines, systematically and repeatably''; - }; - name = ''bundler-1.7.9''; - requiredGems = [ ]; - sha256 = ''1gd201rh17xykab9pbqp0dkxfm7b9jri02llyvmrc0c5bz2vhycm''; - }; - celluloid_0_16_0 = { - basename = ''celluloid''; - meta = { - description = ''Actor-based concurrent object framework for Ruby''; - homepage = ''https://github.com/celluloid/celluloid''; - longDescription = ''Celluloid enables people to build concurrent programs out of concurrent objects just as easily as they build sequential programs out of sequential objects''; - }; - name = ''celluloid-0.16.0''; - requiredGems = [ g.timers_4_0_1 ]; - sha256 = ''044xk0y7i1xjafzv7blzj5r56s7zr8nzb619arkrl390mf19jxv3''; - }; - childprocess_0_5_5 = { - basename = ''childprocess''; - meta = { - description = ''This gem aims at being a simple and reliable solution for controlling external programs running in the background on any Ruby / OS combination.''; - homepage = ''http://github.com/jarib/childprocess''; - longDescription = ''This gem aims at being a simple and reliable solution for controlling external programs running in the background on any Ruby / OS combination.''; - }; - name = ''childprocess-0.5.5''; - requiredGems = [ g.ffi_1_9_6 ]; - sha256 = ''0cxzh17vjlmpqfcas4815x50dc1gzfwgbs51zzpd4chrl6ak4n4v''; - }; - chronic_0_10_2 = { - basename = ''chronic''; - meta = { - description = ''Natural language date/time parsing.''; - homepage = ''http://github.com/mojombo/chronic''; - longDescription = ''Chronic is a natural language date/time parser written in pure Ruby.''; - }; - name = ''chronic-0.10.2''; - requiredGems = [ ]; - sha256 = ''1hrdkn4g8x7dlzxwb1rfgr8kw3bp4ywg5l4y4i9c2g5cwv62yvvn''; - }; - chunky_png_1_3_3 = { - basename = ''chunky_png''; - meta = { - description = ''Pure ruby library for read/write, chunk-level access to PNG files''; - homepage = ''http://wiki.github.com/wvanbergen/chunky_png''; - longDescription = '' This pure Ruby library can read and write PNG images without depending on an external - image library, like RMagick. It tries to be memory efficient and reasonably fast. - - It supports reading and writing all PNG variants that are defined in the specification, - with one limitation: only 8-bit color depth is supported. It supports all transparency, - interlacing and filtering options the PNG specifications allows. It can also read and - write textual metadata from PNG files. Low-level read/write access to PNG chunks is - also possible. - - This library supports simple drawing on the image canvas and simple operations like - alpha composition and cropping. Finally, it can import from and export to RMagick for - interoperability. - - Also, have a look at OilyPNG at http://github.com/wvanbergen/oily_png. OilyPNG is a - drop in mixin module that implements some of the ChunkyPNG algorithms in C, which - provides a massive speed boost to encoding and decoding. -''; - }; - name = ''chunky_png-1.3.3''; - requiredGems = [ ]; - sha256 = ''1lc25p87ljn9r62wps32bq88d8i292kda9fs2m05x15zjm3r6y20''; - }; - classifier_reborn_2_0_2 = { - basename = ''classifier_reborn''; - meta = { - description = ''A general classifier module to allow Bayesian and other types of classifications.''; - homepage = ''https://github.com/jekyll/classifier-reborn''; - }; - name = ''classifier-reborn-2.0.2''; - requiredGems = [ g.fast_stemmer_1_0_2 ]; - sha256 = ''0adp6hchmlhzjkai9z482cyfnbv4ywks4dlly5hhiaxrn1aybpzh''; - }; - coderay_1_1_0 = { - basename = ''coderay''; - meta = { - description = ''Fast syntax highlighting for selected languages.''; - homepage = ''http://coderay.rubychan.de''; - longDescription = ''Fast and easy syntax highlighting for selected languages, written in Ruby. Comes with RedCloth integration and LOC counter.''; - }; - name = ''coderay-1.1.0''; - requiredGems = [ ]; - sha256 = ''059wkzlap2jlkhg460pkwc1ay4v4clsmg1bp4vfzjzkgwdckr52s''; - }; - coffee_script_2_3_0 = { - basename = ''coffee_script''; - meta = { - description = ''Ruby CoffeeScript Compiler''; - homepage = ''http://github.com/josh/ruby-coffee-script''; - longDescription = '' Ruby CoffeeScript is a bridge to the JS CoffeeScript compiler. -''; - }; - name = ''coffee-script-2.3.0''; - requiredGems = [ g.coffee_script_source_1_8_0 g.execjs_2_2_2 ]; - sha256 = ''0i0p52f2s7hk8sq3q9342and3whjnhjhc7ldg8zmnjjcm44asm3d''; - }; - coffee_script_source_1_8_0 = { - basename = ''coffee_script_source''; - meta = { - description = ''The CoffeeScript Compiler''; - homepage = ''http://jashkenas.github.com/coffee-script/''; - longDescription = '' CoffeeScript is a little language that compiles into JavaScript. - Underneath all of those embarrassing braces and semicolons, - JavaScript has always had a gorgeous object model at its heart. - CoffeeScript is an attempt to expose the good parts of JavaScript - in a simple way. -''; - }; - name = ''coffee-script-source-1.8.0''; - requiredGems = [ ]; - sha256 = ''04998xd43z9kqs6kmzvng90s2xn3ybp8918rq7xz6ljhv8yjqm88''; - }; - colorator_0_1 = { - basename = ''colorator''; - meta = { - description = ''String core extensions for terminal coloring.''; - homepage = ''https://github.com/octopress/colorator''; - longDescription = ''Colorize your text in the terminal.''; - }; - name = ''colorator-0.1''; - requiredGems = [ ]; - sha256 = ''09zp15hyd9wlbgf1kmrf4rnry8cpvh1h9fj7afarlqcy4hrfdpvs''; - }; - compass_1_0_1 = { - basename = ''compass''; - meta = { - description = ''A Real Stylesheet Framework''; - homepage = ''http://compass-style.org''; - longDescription = ''Compass is a Sass-based Stylesheet Framework that streamlines the creation and maintenance of CSS.''; - }; - name = ''compass-1.0.1''; - requiredGems = [ g.sass_3_4_9 g.compass_core_1_0_1 g.compass_import_once_1_0_5 g.chunky_png_1_3_3 g.rb_fsevent_0_9_4 g.rb_inotify_0_9_5 ]; - sha256 = ''0cxb6nbj37wz2zwwb4pkbvg9pg0ymamxx9v400h9ibvlb5n0ri40''; - }; - compass_core_1_0_1 = { - basename = ''compass_core''; - meta = { - description = ''The Compass core stylesheet library''; - homepage = ''http://compass-style.org/reference/compass/''; - longDescription = ''The Compass core stylesheet library and minimum required ruby extensions. This library can be used stand-alone without the compass ruby configuration file or compass command line tools.''; - }; - name = ''compass-core-1.0.1''; - requiredGems = [ g.sass_3_4_9 g.multi_json_1_10_1 ]; - sha256 = ''0zhbmgjq6s9j2qdx3cz0v8s216mh8g0ymk4fzmq3c4an9rryl1zx''; - }; - compass_import_once_1_0_5 = { - basename = ''compass_import_once''; - meta = { - description = ''Speed up your Sass compilation by making @import only import each file once.''; - homepage = ''https://github.com/chriseppstein/compass/tree/master/import-once''; - longDescription = ''Changes the behavior of Sass's @import directive to only import a file once.''; - }; - name = ''compass-import-once-1.0.5''; - requiredGems = [ g.sass_3_4_9 ]; - sha256 = ''0bn7gwbfz7jvvdd0qdfqlx67fcb83gyvxqc7dr9fhcnks3z8z5rq''; - }; - cucumber_1_3_17 = { - basename = ''cucumber''; - meta = { - description = ''cucumber-1.3.17''; - homepage = ''http://cukes.info''; - longDescription = ''Behaviour Driven Development with elegance and joy''; - }; - name = ''cucumber-1.3.17''; - requiredGems = [ g.builder_3_2_2 g.diff_lcs_1_2_5 g.gherkin_2_12_2 g.multi_json_1_10_1 g.multi_test_0_1_1 ]; - sha256 = ''1gjnxxrcf43mzs5qlg1m0b61g8vwfzjkj1wwi6xbpsqlhcwjjq1x''; - }; - daemons_1_1_9 = { - basename = ''daemons''; - meta = { - description = ''A toolkit to create and control daemons in different ways''; - homepage = ''http://daemons.rubyforge.org''; - longDescription = ''Daemons provides an easy way to wrap existing ruby scripts (for example a self-written server) to be run as a daemon and to be controlled by simple start/stop/restart commands. You can also call blocks as daemons and control them from the parent or just daemonize the current process. Besides this basic functionality, daemons offers many advanced features like exception backtracing and logging (in case your ruby script crashes) and monitoring and automatic restarting of your processes if they crash.''; - }; - name = ''daemons-1.1.9''; - requiredGems = [ ]; - sha256 = ''1j1m64pirsldhic6x6sg4lcrmp1bs1ihpd49xm8m1b2rc1c3irzy''; - }; - diff_lcs_1_2_4 = { - basename = ''diff_lcs''; - meta = { - description = ''Diff::LCS computes the difference between two Enumerable sequences using the McIlroy-Hunt longest common subsequence (LCS) algorithm''; - homepage = ''http://diff-lcs.rubyforge.org/''; - longDescription = ''Diff::LCS computes the difference between two Enumerable sequences using the -McIlroy-Hunt longest common subsequence (LCS) algorithm. It includes utilities -to create a simple HTML diff output format and a standard diff-like tool. - -This is release 1.2.4, fixing a bug introduced after diff-lcs 1.1.3 that did -not properly prune common sequences at the beginning of a comparison set. -Thanks to Paul Kunysch for fixing this issue. - -Coincident with the release of diff-lcs 1.2.3, we reported an issue with -Rubinius in 1.9 mode -({rubinius/rubinius#2268}[https://github.com/rubinius/rubinius/issues/2268]). -We are happy to report that this issue has been resolved.''; - }; - name = ''diff-lcs-1.2.4''; - requiredGems = [ ]; - sha256 = ''09xbffjg639y8n43zp88ki0m489vv2c86znmfib2fg1di6svi1xd''; - }; - diff_lcs_1_2_5 = { - basename = ''diff_lcs''; - meta = { - description = ''Diff::LCS computes the difference between two Enumerable sequences using the McIlroy-Hunt longest common subsequence (LCS) algorithm''; - homepage = ''http://diff-lcs.rubyforge.org/''; - longDescription = ''Diff::LCS computes the difference between two Enumerable sequences using the -McIlroy-Hunt longest common subsequence (LCS) algorithm. It includes utilities -to create a simple HTML diff output format and a standard diff-like tool. - -This is release 1.2.4, fixing a bug introduced after diff-lcs 1.1.3 that did -not properly prune common sequences at the beginning of a comparison set. -Thanks to Paul Kunysch for fixing this issue. - -Coincident with the release of diff-lcs 1.2.3, we reported an issue with -Rubinius in 1.9 mode -({rubinius/rubinius#2268}[https://github.com/rubinius/rubinius/issues/2268]). -We are happy to report that this issue has been resolved.''; - }; - name = ''diff-lcs-1.2.5''; - requiredGems = [ ]; - sha256 = ''1vf9civd41bnqi6brr5d9jifdw73j9khc6fkhfl1f8r9cpkdvlx1''; - }; - dimensions_1_2_0 = { - basename = ''dimensions''; - meta = { - description = ''Pure Ruby dimension measurement for GIF, PNG, JPEG and TIFF images''; - homepage = ''https://github.com/sstephenson/dimensions''; - longDescription = ''A pure Ruby library for measuring the dimensions and rotation angles of GIF, PNG, JPEG and TIFF images.''; - }; - name = ''dimensions-1.2.0''; - requiredGems = [ ]; - sha256 = ''1pqb7yzjcpbgbyi196ifqbd1wy570cn12bkzcvpcha4xilhajja0''; - }; - domain_name_0_5_22 = { - basename = ''domain_name''; - meta = { - description = ''Domain Name manipulation library for Ruby''; - homepage = ''https://github.com/knu/ruby-domain_name''; - longDescription = ''This is a Domain Name manipulation library for Ruby. - -It can also be used for cookie domain validation based on the Public -Suffix List. -''; - }; - name = ''domain_name-0.5.22''; - requiredGems = [ g.unf_0_1_4 ]; - sha256 = ''0r3kj0hjibv5y7z3m46xdjrc19pkhnkhzr4xmvq9gypr2h7vz2yb''; - }; - dotenv_1_0_2 = { - basename = ''dotenv''; - meta = { - description = ''Loads environment variables from `.env`.''; - homepage = ''https://github.com/bkeepers/dotenv''; - longDescription = ''Loads environment variables from `.env`.''; - }; - name = ''dotenv-1.0.2''; - requiredGems = [ ]; - sha256 = ''1g6sdv55842a7iv11wawrbfrx8x5k7gl598nl6my55jb2nbynkmw''; - }; - em_resolv_replace_1_1_3 = { - basename = ''em_resolv_replace''; - meta = { - description = ''EventMachine-aware DNS lookup for Ruby''; - homepage = ''http://github.com/mperham/em-resolv-replace''; - }; - name = ''em-resolv-replace-1.1.3''; - requiredGems = [ ]; - sha256 = ''1w5y4rzmp51ni56v05qwgay5wrs2i6i3q92pvlcrghmhxhgsbqg7''; - }; - erubis_2_7_0 = { - basename = ''erubis''; - meta = { - description = ''a fast and extensible eRuby implementation which supports multi-language''; - homepage = ''http://www.kuwata-lab.com/erubis/''; - longDescription = '' Erubis is an implementation of eRuby and has the following features: - - * Very fast, almost three times faster than ERB and about 10% faster than eruby. - * Multi-language support (Ruby/PHP/C/Java/Scheme/Perl/Javascript) - * Auto escaping support - * Auto trimming spaces around '<% %>' - * Embedded pattern changeable (default '<% %>') - * Enable to handle Processing Instructions (PI) as embedded pattern (ex. '<?rb ... ?>') - * Context object available and easy to combine eRuby template with YAML datafile - * Print statement available - * Easy to extend and customize in subclass - * Ruby on Rails support -''; - }; - name = ''erubis-2.7.0''; - requiredGems = [ ]; - sha256 = ''1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3''; - }; - ethon_0_7_1 = { - basename = ''ethon''; - meta = { - description = ''Libcurl wrapper.''; - homepage = ''https://github.com/typhoeus/ethon''; - longDescription = ''Very lightweight libcurl wrapper.''; - }; - name = ''ethon-0.7.1''; - requiredGems = [ g.ffi_1_9_6 ]; - sha256 = ''0b762cmnj20fjlrlzk5vsndzv4ac3ybdi4vikx5c11abl7x5wbg6''; - }; - eventmachine_1_0_3 = { - basename = ''eventmachine''; - meta = { - description = ''Ruby/EventMachine library''; - homepage = ''http://rubyeventmachine.com''; - longDescription = ''EventMachine implements a fast, single-threaded engine for arbitrary network -communications. It's extremely easy to use in Ruby. EventMachine wraps all -interactions with IP sockets, allowing programs to concentrate on the -implementation of network protocols. It can be used to create both network -servers and clients. To create a server or client, a Ruby program only needs -to specify the IP address and port, and provide a Module that implements the -communications protocol. Implementations of several standard network protocols -are provided with the package, primarily to serve as examples. The real goal -of EventMachine is to enable programs to easily interface with other programs -using TCP/IP, especially if custom protocols are required.''; - }; - name = ''eventmachine-1.0.3''; - requiredGems = [ ]; - sha256 = ''09sqlsb6x9ddlgfw5gsw7z0yjg5m2qfjiqkz2fx70zsizj3lqhil''; - }; - eventmachine_tail_0_6_4 = { - basename = ''eventmachine_tail''; - meta = { - description = ''eventmachine tail - a file tail implementation with glob support''; - homepage = ''http://code.google.com/p/semicomplete/wiki/EventMachineTail''; - longDescription = ''Add file 'tail' implemented with EventMachine. Also includes a 'glob watch' class for watching a directory pattern for new matches, like /var/log/*.log''; - }; - name = ''eventmachine-tail-0.6.4''; - requiredGems = [ g.eventmachine_1_0_3 ]; - sha256 = ''1pvlb34vdzd81kf9f3xyibb4f55xjqm7lqqy28dgyci5cyv50y61''; - }; - excon_0_42_1 = { - basename = ''excon''; - meta = { - description = ''speed, persistence, http(s)''; - homepage = ''https://github.com/excon/excon''; - longDescription = ''EXtended http(s) CONnections''; - }; - name = ''excon-0.42.1''; - requiredGems = [ ]; - sha256 = ''1za1jmp83149qmykih2bfgxlwyyz3hrpaq4kxww7467fvgwh58xj''; - }; - execjs_2_2_2 = { - basename = ''execjs''; - meta = { - description = ''Run JavaScript code from Ruby''; - homepage = ''https://github.com/sstephenson/execjs''; - longDescription = ''ExecJS lets you run JavaScript code from Ruby.''; - }; - name = ''execjs-2.2.2''; - requiredGems = [ ]; - sha256 = ''05m41mnxn4b2p133qzbz5cy9cc5rn57aa0pp2943hxmzbk379z1f''; - }; - fakes3_0_1_6_1 = { - basename = ''fakes3''; - meta = { - description = ''FakeS3 is a server that simulates S3 commands so you can test your S3 functionality in your projects''; - homepage = ''https://github.com/jubos/fake-s3''; - longDescription = ''Use FakeS3 to test basic S3 functionality without actually connecting to S3''; - }; - name = ''fakes3-0.1.6.1''; - requiredGems = [ g.thor_0_19_1 g.builder_3_2_2 ]; - sha256 = ''1s2w06lgwlhsr3q7b58qnjdqqi6x3ksl3hjqq54d57gb0y65s0p3''; - }; - faraday_0_9_0 = { - basename = ''faraday''; - meta = { - description = ''HTTP/REST API client library.''; - homepage = ''https://github.com/lostisland/faraday''; - }; - name = ''faraday-0.9.0''; - requiredGems = [ g.multipart_post_2_0_0 ]; - sha256 = ''13wi8y7j6mp0mszps50gqr0fyddiz45wqkvpnnrv797gklr9sh46''; - }; - faraday_middleware_0_9_1 = { - basename = ''faraday_middleware''; - meta = { - description = ''Various middleware for Faraday''; - homepage = ''https://github.com/lostisland/faraday_middleware''; - longDescription = ''Various middleware for Faraday''; - }; - name = ''faraday_middleware-0.9.1''; - requiredGems = [ g.faraday_0_9_0 ]; - sha256 = ''1kndkrww1biz9j64fnyaqgis1gdiawxfv0ncadsz06gd555fgs6q''; - }; - fast_stemmer_1_0_2 = { - basename = ''fast_stemmer''; - meta = { - description = ''Fast Porter stemmer based on a C version of algorithm''; - homepage = ''http://github.com/romanbsd/fast-stemmer''; - longDescription = ''Fast Porter stemmer based on a C version of algorithm''; - }; - name = ''fast-stemmer-1.0.2''; - requiredGems = [ ]; - sha256 = ''0688clyk4xxh3kdb18vi089k90mca8ji5fwaknh3da5wrzcrzanh''; - }; - ffi_1_9_6 = { - basename = ''ffi''; - meta = { - description = ''Ruby FFI''; - homepage = ''http://wiki.github.com/ffi/ffi''; - longDescription = ''Ruby FFI library''; - }; - name = ''ffi-1.9.6''; - requiredGems = [ ]; - sha256 = ''1ckw1336rnyv9yvvl614qgkqqi477g4hljv6xsws2vz14ynlvzhj''; - }; - file_tail_1_1_0 = { - basename = ''file_tail''; - meta = { - description = ''File::Tail for Ruby''; - homepage = ''http://github.com/flori/file-tail''; - longDescription = ''Library to tail files in Ruby''; - }; - name = ''file-tail-1.1.0''; - requiredGems = [ g.tins_1_3_3 ]; - sha256 = ''0idypaigk7l8kzhhnjfhz84mrvqd905njyycgqdq6v23jgif9n64''; - }; - foreman_0_76_0 = { - basename = ''foreman''; - meta = { - description = ''Process manager for applications with multiple components''; - homepage = ''http://github.com/ddollar/foreman''; - longDescription = ''Process manager for applications with multiple components''; - }; - name = ''foreman-0.76.0''; - requiredGems = [ g.thor_0_19_1 g.dotenv_1_0_2 ]; - sha256 = ''1akr7gjnzbjpp71gf4hw6hd7hrl9fnm9ggazkkvnz84l9l36cgm2''; - }; - gettext_3_1_4 = { - basename = ''gettext''; - meta = { - description = ''Gettext is a pure Ruby libary and tools to localize messages.''; - homepage = ''http://ruby-gettext.github.com/''; - longDescription = ''Gettext is a GNU gettext-like program for Ruby. -The catalog file(po-file) is same format with GNU gettext. -So you can use GNU gettext tools for maintaining. -''; - }; - name = ''gettext-3.1.4''; - requiredGems = [ g.locale_2_1_0 g.text_1_3_0 ]; - sha256 = ''0gfnbkj2knpq8jxplkdr18by64kcadqxjhrxr3ncldz2ghm5zhvb''; - }; - gh_0_13_2 = { - basename = ''gh''; - meta = { - description = ''layered github client''; - homepage = ''http://gh.rkh.im/''; - longDescription = ''multi-layer client for the github api v3''; - }; - name = ''gh-0.13.2''; - requiredGems = [ g.faraday_0_9_0 g.backports_3_6_4 g.multi_json_1_10_1 g.addressable_2_3_6 g.net_http_persistent_2_9_4 g.net_http_pipeline_1_0_1 ]; - sha256 = ''17scqa35j6ghpykzk986gnd6dvbrh8nn60ib04hb2gbyh9dns1dj''; - }; - gherkin_2_12_2 = { - basename = ''gherkin''; - meta = { - description = ''gherkin-2.12.2''; - homepage = ''http://github.com/cucumber/gherkin''; - longDescription = ''A fast Gherkin lexer/parser based on the Ragel State Machine Compiler.''; - }; - name = ''gherkin-2.12.2''; - requiredGems = [ g.multi_json_1_10_1 ]; - sha256 = ''1mxfgw15pii1jmq00xxbyp77v71mh3bp99ndgwzfwkxvbcisha25''; - }; - heroku_3_20_0 = { - basename = ''heroku''; - meta = { - description = ''Client library and CLI to deploy apps on Heroku.''; - homepage = ''http://heroku.com/''; - longDescription = ''Client library and command-line tool to deploy and manage apps on Heroku.''; - }; - name = ''heroku-3.20.0''; - requiredGems = [ g.heroku_api_0_3_21 g.launchy_2_4_3 g.netrc_0_10_1 g.rest_client_1_6_7 g.rubyzip_0_9_9 g.multi_json_1_10_1 ]; - sha256 = ''0iw3x413sbc5a5f2r3aicdprghw3vnmj5lrbd9gdh9pm4v7saf8b''; - }; - heroku_api_0_3_21 = { - basename = ''heroku_api''; - meta = { - description = ''Ruby Client for the Heroku API''; - homepage = ''http://github.com/heroku/heroku.rb''; - longDescription = ''Ruby Client for the Heroku API''; - }; - name = ''heroku-api-0.3.21''; - requiredGems = [ g.excon_0_42_1 g.multi_json_1_10_1 ]; - sha256 = ''0f41zzx4sshpba5p013hmjmk7lxkk5dfasb292zvx1cfi4l60lwd''; - }; - highline_1_6_21 = { - basename = ''highline''; - meta = { - description = ''HighLine is a high-level command-line IO library.''; - homepage = ''http://highline.rubyforge.org''; - longDescription = ''A high-level IO library that provides validation, type conversion, and more for -command-line interfaces. HighLine also includes a complete menu system that can -crank out anything from simple list selection to complete shells with just -minutes of work. -''; - }; - name = ''highline-1.6.21''; - requiredGems = [ ]; - sha256 = ''06bml1fjsnrhd956wqq5k3w8cyd09rv1vixdpa3zzkl6xs72jdn1''; - }; - hike_1_2_3 = { - basename = ''hike''; - meta = { - description = ''Find files in a set of paths''; - homepage = ''http://github.com/sstephenson/hike''; - longDescription = ''A Ruby library for finding files in a set of paths.''; - }; - name = ''hike-1.2.3''; - requiredGems = [ ]; - sha256 = ''0i6c9hrszzg3gn2j41v3ijnwcm8cc2931fnjiv6mnpl4jcjjykhm''; - }; - hitimes_1_2_2 = { - basename = ''hitimes''; - meta = { - description = ''Hitimes is a fast, high resolution timer library for recording performance metrics. It uses the appropriate low method calls for each system to get the highest granularity time increments possible.''; - homepage = ''http://github.com/copiousfreetime/hitimes''; - longDescription = ''Hitimes is a fast, high resolution timer library for recording performance metrics. It uses the appropriate low method calls for each system to get the highest granularity time increments possible. It currently supports any of the following systems: * any system with the POSIX call `clock_gettime()` * Mac OS X * Windows * JRuby Using Hitimes can be faster than using a series of `Time.new` calls, and it will have a much higher granularity. It is definitely faster than using `Process.times`.''; - }; - name = ''hitimes-1.2.2''; - requiredGems = [ ]; - sha256 = ''17y3ggqxl3m6x9gqpgdn39z0pxpmw666d40r39bs7ngdmy680jn4''; - }; - hoe_3_7_1 = { - basename = ''hoe''; - meta = { - description = ''Hoe is a rake/rubygems helper for project Rakefiles''; - homepage = ''http://www.zenspider.com/projects/hoe.html''; - longDescription = ''Hoe is a rake/rubygems helper for project Rakefiles. It helps you -manage, maintain, and release your project and includes a dynamic -plug-in system allowing for easy extensibility. Hoe ships with -plug-ins for all your usual project tasks including rdoc generation, -testing, packaging, deployment, and announcement.. - -See class rdoc for help. Hint: `ri Hoe` or any of the plugins listed -below. - -For extra goodness, see: http://seattlerb.rubyforge.org/hoe/Hoe.pdf''; - }; - name = ''hoe-3.7.1''; - requiredGems = [ g.rake_10_4_2 ]; - sha256 = ''0lyrdbzxj4isxzyfp93w0q1g9sqw6grkjp91xirzlw1z1714qsw3''; - }; - http_cookie_1_0_2 = { - basename = ''http_cookie''; - meta = { - description = ''A Ruby library to handle HTTP Cookies based on RFC 6265''; - homepage = ''https://github.com/sparklemotion/http-cookie''; - longDescription = ''HTTP::Cookie is a Ruby library to handle HTTP Cookies based on RFC 6265. It has with security, standards compliance and compatibility in mind, to behave just the same as today's major web browsers. It has builtin support for the legacy cookies.txt and the latest cookies.sqlite formats of Mozilla Firefox, and its modular API makes it easy to add support for a new backend store.''; - }; - name = ''http-cookie-1.0.2''; - requiredGems = [ g.domain_name_0_5_22 ]; - sha256 = ''0cz2fdkngs3jc5w32a6xcl511hy03a7zdiy988jk1sf3bf5v3hdw''; - }; - i18n_0_6_11 = { - basename = ''i18n''; - meta = { - description = ''New wave Internationalization support for Ruby''; - homepage = ''http://github.com/svenfuchs/i18n''; - longDescription = ''New wave Internationalization support for Ruby.''; - }; - name = ''i18n-0.6.11''; - requiredGems = [ ]; - sha256 = ''0fwjlgmgry2blf8zlxn9c555cf4a16p287l599kz5104ncjxlzdk''; - }; - iconv_1_0_4 = { - basename = ''iconv''; - meta = { - description = ''iconv wrapper library''; - homepage = ''https://github.com/nurse/iconv''; - longDescription = ''iconv wrapper library''; - }; - name = ''iconv-1.0.4''; - requiredGems = [ ]; - sha256 = ''16sgj6gqs4bgwv6q4vv811fb43908psr33dz7sphn1z8la3y7m2v''; - }; - jekyll_2_5_2 = { - basename = ''jekyll''; - meta = { - description = ''A simple, blog aware, static site generator.''; - homepage = ''https://github.com/jekyll/jekyll''; - longDescription = ''Jekyll is a simple, blog aware, static site generator.''; - }; - name = ''jekyll-2.5.2''; - requiredGems = [ g.liquid_2_6_1 g.kramdown_1_5_0 g.mercenary_0_3_5 g.safe_yaml_1_0_4 g.colorator_0_1 g.pygments_rb_0_6_0 g.redcarpet_3_2_2 g.toml_0_1_2 g.jekyll_paginate_1_1_0 g.jekyll_gist_1_1_0 g.jekyll_coffeescript_1_0_1 g.jekyll_sass_converter_1_3_0 g.jekyll_watch_1_2_0 g.classifier_reborn_2_0_2 ]; - sha256 = ''03ka7jcfk5byvphy5ks35w75i78ahshrrgm3zbnsxj8xvbxg9bgi''; - }; - jekyll_coffeescript_1_0_1 = { - basename = ''jekyll_coffeescript''; - meta = { - description = ''A CoffeeScript converter for Jekyll.''; - homepage = ''https://github.com/jekyll/jekyll-coffeescript''; - }; - name = ''jekyll-coffeescript-1.0.1''; - requiredGems = [ g.coffee_script_2_3_0 ]; - sha256 = ''19nkqbaxqbzqbfbi7sgshshj2krp9ap88m9fc5pa6mglb2ypk3hg''; - }; - jekyll_gist_1_1_0 = { - basename = ''jekyll_gist''; - meta = { - description = ''Liquid tag for displaying GitHub Gists in Jekyll sites.''; - homepage = ''https://github.com/jekyll/jekyll-gist''; - }; - name = ''jekyll-gist-1.1.0''; - requiredGems = [ ]; - sha256 = ''06d4jwf64fl7x3dqfimnfqzr4d3wbsdz2l4fif35j91mmh37nmq9''; - }; - jekyll_paginate_1_1_0 = { - basename = ''jekyll_paginate''; - meta = { - description = ''Built-in Pagination Generator for Jekyll''; - homepage = ''https://github.com/jekyll/jekyll-paginate''; - }; - name = ''jekyll-paginate-1.1.0''; - requiredGems = [ ]; - sha256 = ''0r7bcs8fq98zldih4787zk5i9w24nz5wa26m84ssja95n3sas2l8''; - }; - jekyll_sass_converter_1_3_0 = { - basename = ''jekyll_sass_converter''; - meta = { - description = ''A basic Sass converter for Jekyll.''; - homepage = ''https://github.com/jekyll/jekyll-sass-converter''; - }; - name = ''jekyll-sass-converter-1.3.0''; - requiredGems = [ g.sass_3_4_9 ]; - sha256 = ''1xqmlr87xmzpalf846gybkbfqkj48y3fva81r7c7175my9p4ykl1''; - }; - jekyll_watch_1_2_0 = { - basename = ''jekyll_watch''; - meta = { - description = ''Rebuild your Jekyll site when a file changes with the `--watch` switch.''; - homepage = ''https://github.com/jekyll/jekyll-watch''; - }; - name = ''jekyll-watch-1.2.0''; - requiredGems = [ g.listen_2_8_3 ]; - sha256 = ''0ivw66jww4wlw067pspapgd8ibw781xfwdi6r5mzswjz4nvyf056''; - }; - jsduck_5_3_4 = { - basename = ''jsduck''; - meta = { - description = ''Simple JavaScript Duckumentation generator''; - homepage = ''https://github.com/senchalabs/jsduck''; - longDescription = ''Documentation generator for Sencha JS frameworks''; - }; - name = ''jsduck-5.3.4''; - requiredGems = [ g.rdiscount_2_1_7_1 g.json_1_8_1 g.parallel_0_7_1 g.rkelly_remix_0_0_6 g.dimensions_1_2_0 ]; - sha256 = ''0hac7g9g6gg10bigbm8dskwwbv1dfch8ca353gh2bkwf244qq2xr''; - }; - json_1_8_1 = { - basename = ''json''; - meta = { - description = ''JSON Implementation for Ruby''; - homepage = ''http://flori.github.com/json''; - longDescription = ''This is a JSON implementation as a Ruby extension in C.''; - }; - name = ''json-1.8.1''; - requiredGems = [ ]; - sha256 = ''0002bsycvizvkmk1jyv8px1hskk6wrjfk4f7x5byi8gxm6zzn6wn''; - }; - json_pure_1_8_0 = { - basename = ''json_pure''; - meta = { - description = ''JSON Implementation for Ruby''; - homepage = ''http://flori.github.com/json''; - longDescription = ''This is a JSON implementation in pure Ruby.''; - }; - name = ''json_pure-1.8.0''; - requiredGems = [ ]; - sha256 = ''0kkn5zhiffav2cffj43wwvzj07825r4j463ilfjgik034vnbjs83''; - }; - kitchen_ansible_0_0_4 = { - basename = ''kitchen_ansible''; - meta = { - description = ''ansible provisioner for test-kitchen''; - homepage = ''https://github.com/neillturner/kitchen-ansible''; - longDescription = ''== DESCRIPTION: - -Ansible Provisioner for Test Kitchen - -== FEATURES: - -Supports running ansible-playbook - -''; - }; - name = ''kitchen-ansible-0.0.4''; - requiredGems = [ ]; - sha256 = ''0wwp7yq2n1jjisy00yiahzpxjdjvk40ry0m9a1rzd56fr9yvck2y''; - }; - kitchen_vagrant_0_15_0 = { - basename = ''kitchen_vagrant''; - meta = { - description = ''Kitchen::Driver::Vagrant - A Vagrant Driver for Test Kitchen.''; - homepage = ''https://github.com/test-kitchen/kitchen-vagrant/''; - longDescription = ''Kitchen::Driver::Vagrant - A Vagrant Driver for Test Kitchen.''; - }; - name = ''kitchen-vagrant-0.15.0''; - requiredGems = [ g.test_kitchen_1_2_1 ]; - sha256 = ''1blf6qr0j9ab9ajrkb9fx67wnns3hgi9gda2l83hd3zfrjp6vc9w''; - }; - kramdown_1_5_0 = { - basename = ''kramdown''; - meta = { - description = ''kramdown is a fast, pure-Ruby Markdown-superset converter.''; - homepage = ''http://kramdown.gettalong.org''; - longDescription = ''kramdown is yet-another-markdown-parser but fast, pure Ruby, -using a strict syntax definition and supporting several common extensions. -''; - }; - name = ''kramdown-1.5.0''; - requiredGems = [ ]; - sha256 = ''1max2dyap3lwi6ssaqi5gbzpmb0nlx1qy47bwc1bpls3y18hd6hm''; - }; - launchy_2_4_3 = { - basename = ''launchy''; - meta = { - description = ''Launchy is helper class for launching cross-platform applications in a fire and forget manner.''; - homepage = ''http://github.com/copiousfreetime/launchy''; - longDescription = ''Launchy is helper class for launching cross-platform applications in a fire and forget manner. There are application concepts (browser, email client, etc) that are common across all platforms, and they may be launched differently on each platform. Launchy is here to make a common approach to launching external application from within ruby programs.''; - }; - name = ''launchy-2.4.3''; - requiredGems = [ g.addressable_2_3_6 ]; - sha256 = ''190lfbiy1vwxhbgn4nl4dcbzxvm049jwc158r2x7kq3g5khjrxa2''; - }; - liquid_2_6_1 = { - basename = ''liquid''; - meta = { - description = ''A secure, non-evaling end user template engine with aesthetic markup.''; - homepage = ''http://www.liquidmarkup.org''; - }; - name = ''liquid-2.6.1''; - requiredGems = [ ]; - sha256 = ''0fc67cx36x05hsw0cc56la4qr3939g34cdgqmqgdi8yzs72cbv7x''; - }; - listen_2_8_3 = { - basename = ''listen''; - meta = { - description = ''Listen to file modifications''; - homepage = ''https://github.com/guard/listen''; - longDescription = ''The Listen gem listens to file modifications and notifies you about the changes. Works everywhere!''; - }; - name = ''listen-2.8.3''; - requiredGems = [ g.celluloid_0_16_0 g.rb_fsevent_0_9_4 g.rb_inotify_0_9_5 ]; - sha256 = ''1cvnr8p6kq7z63a32lwcx24ama6rsyh501pzmlpd2gvi891jxbgw''; - }; - locale_2_1_0 = { - basename = ''locale''; - meta = { - description = ''Ruby-Locale is the pure ruby library which provides basic APIs for localization.''; - homepage = ''https://github.com/ruby-gettext/locale''; - longDescription = ''Ruby-Locale is the pure ruby library which provides basic APIs for localization. -''; - }; - name = ''locale-2.1.0''; - requiredGems = [ ]; - sha256 = ''18bb0g24flq9dr8qv4j7pm7w9i2vmvmqrbmry95ibf1r1c4s60yj''; - }; - lockfile_2_1_3 = { - basename = ''lockfile''; - meta = { - description = ''lockfile''; - homepage = ''https://github.com/ahoward/lockfile''; - longDescription = ''a ruby library for creating perfect and NFS safe lockfiles''; - }; - name = ''lockfile-2.1.3''; - requiredGems = [ ]; - sha256 = ''0dij3ijywylvfgrpi2i0k17f6w0wjhnjjw0k9030f54z56cz7jrr''; - }; - macaddr_1_7_1 = { - basename = ''macaddr''; - meta = { - description = ''macaddr''; - homepage = ''https://github.com/ahoward/macaddr''; - longDescription = ''cross platform mac address determination for ruby''; - }; - name = ''macaddr-1.7.1''; - requiredGems = [ g.systemu_2_6_4 ]; - sha256 = ''1clii8mvhmh5lmnm95ljnjygyiyhdpja85c5vy487rhxn52scn0b''; - }; - mail_2_6_3 = { - basename = ''mail''; - meta = { - description = ''Mail provides a nice Ruby DSL for making, sending and reading emails.''; - homepage = ''https://github.com/mikel/mail''; - longDescription = ''A really Ruby Mail handler.''; - }; - name = ''mail-2.6.3''; - requiredGems = [ g.mime_types_2_4_3 ]; - sha256 = ''1nbg60h3cpnys45h7zydxwrl200p7ksvmrbxnwwbpaaf9vnf3znp''; - }; - mechanize_2_7_3 = { - basename = ''mechanize''; - meta = { - description = ''The Mechanize library is used for automating interaction with websites''; - homepage = ''http://mechanize.rubyforge.org''; - longDescription = ''The Mechanize library is used for automating interaction with websites. -Mechanize automatically stores and sends cookies, follows redirects, -and can follow links and submit forms. Form fields can be populated and -submitted. Mechanize also keeps track of the sites that you have visited as -a history.''; - }; - name = ''mechanize-2.7.3''; - requiredGems = [ g.net_http_digest_auth_1_4 g.net_http_persistent_2_9_4 g.mime_types_2_4_3 g.http_cookie_1_0_2 g.nokogiri_1_6_5 g.ntlm_http_0_1_1 g.webrobots_0_1_1 g.domain_name_0_5_22 ]; - sha256 = ''00jkazj8fqnynaxca0lnwx5a084irxrnw8n8i0kppq4vg71g7rrx''; - }; - mercenary_0_3_5 = { - basename = ''mercenary''; - meta = { - description = ''Lightweight and flexible library for writing command-line apps in Ruby.''; - homepage = ''https://github.com/jekyll/mercenary''; - longDescription = ''Lightweight and flexible library for writing command-line apps in Ruby.''; - }; - name = ''mercenary-0.3.5''; - requiredGems = [ ]; - sha256 = ''0ls7z086v4xl02g4ia5jhl9s76d22crgmplpmj0c383liwbqi9pb''; - }; - method_source_0_8_2 = { - basename = ''method_source''; - meta = { - description = ''retrieve the sourcecode for a method''; - homepage = ''http://banisterfiend.wordpress.com''; - longDescription = ''retrieve the sourcecode for a method''; - }; - name = ''method_source-0.8.2''; - requiredGems = [ ]; - sha256 = ''1g5i4w0dmlhzd18dijlqw5gk27bv6dj2kziqzrzb7mpgxgsd1sf2''; - }; - mime_types_2_4_3 = { - basename = ''mime_types''; - meta = { - description = ''The mime-types library provides a library and registry for information about MIME content type definitions''; - homepage = ''https://github.com/halostatue/mime-types/''; - longDescription = ''The mime-types library provides a library and registry for information about -MIME content type definitions. It can be used to determine defined filename -extensions for MIME types, or to use filename extensions to look up the likely -MIME type definitions. - -MIME content types are used in MIME-compliant communications, as in e-mail or -HTTP traffic, to indicate the type of content which is transmitted. The -mime-types library provides the ability for detailed information about MIME -entities (provided as an enumerable collection of MIME::Type objects) to be -determined and used programmatically. There are many types defined by RFCs and -vendors, so the list is long but by definition incomplete; don't hesitate to to -add additional type definitions (see Contributing.rdoc). The primary sources -for MIME type definitions found in mime-types is the IANA collection of -registrations (see below for the link), RFCs, and W3C recommendations. - -This is release 2.4.3, restoring full compatibility with Ruby 1.9.2 (which will -be dropped in mime-types 3.0). It also includes the performance improvements -from mime-types 2.4.2 (since yanked because of the broken Ruby 1.9.2 support) -and the 2.4.1 fix of a bug in observed use of the mime-types library where -extensions were not previously sorted, such that - - MIME::Types.of('image.jpg').first.extensions.first - -returned a value of +jpeg+ in mime-types 1, but +jpe+ in mime-types 2. This was -introduced because extensions were sorted during assignment -(MIME::Type#extensions=). This behaviour has been reverted to protect clients -that work as noted above. The preferred way to express this is the new method: - - MIME::Type.of('image.jpg').first.preferred_extension - -Łukasz Śliwa created the -{friendly_mime}[https://github.com/lukaszsliwa/friendly_mime] gem, which offers -friendly descriptive names for MIME types. This functionality and -English-language data has been added to mime-types as MIME::Type#friendly. To -make it easy for internationalization, MIME::Type#i18n_key has been added, -which will return a key suitable for use with the -{I18n}[https://github.com/svenfuchs/i18n] library. - -As a reminder, mime-types 2.x is no longer compatible with Ruby 1.8 and -mime-types 1.x is only being maintained for security issues. No new MIME types -or features will be added. - -mime-types (previously called MIME::Types for Ruby) was originally based on -MIME::Types for Perl by Mark Overmeer, copyright 2001 - 2009. It is built to -conform to the MIME types of RFCs 2045 and 2231. It tracks the {IANA Media -Types registry}[https://www.iana.org/assignments/media-types/media-types.xhtml] -with some types added by the users of mime-types.''; - }; - name = ''mime-types-2.4.3''; - requiredGems = [ ]; - sha256 = ''16nissnb31wj7kpcaynx4gr67i7pbkzccfg8k7xmplbkla4rmwiq''; - }; - mini_portile_0_6_1 = { - basename = ''mini_portile''; - meta = { - description = ''Simplistic port-like solution for developers''; - homepage = ''http://github.com/luislavena/mini_portile''; - longDescription = ''Simplistic port-like solution for developers. It provides a standard and simplified way to compile against dependency libraries without messing up your system.''; - }; - name = ''mini_portile-0.6.1''; - requiredGems = [ ]; - sha256 = ''07gah4k84sar9d850v9gip9b323pw74vwwndh3bbzxpw5iiwsd3l''; - }; - minitar_0_5_4 = { - basename = ''minitar''; - meta = { - description = ''Provides POSIX tarchive management from Ruby programs.''; - homepage = ''http://www.github.com/atoulme/minitar''; - longDescription = ''Archive::Tar::Minitar is a pure-Ruby library and command-line utility that provides the ability to deal with POSIX tar(1) archive files. The implementation is based heavily on Mauricio Ferna'ndez's implementation in rpa-base, but has been reorganised to promote reuse in other projects. Antoine Toulme forked the original project on rubyforge to place it on github, under http://www.github.com/atoulme/minitar''; - }; - name = ''minitar-0.5.4''; - requiredGems = [ ]; - sha256 = ''1vpdjfmdq1yc4i620frfp9af02ia435dnpj8ybsd7dc3rypkvbka''; - }; - minitest_5_5_0 = { - basename = ''minitest''; - meta = { - description = ''minitest provides a complete suite of testing facilities supporting TDD, BDD, mocking, and benchmarking''; - homepage = ''https://github.com/seattlerb/minitest''; - longDescription = ''minitest provides a complete suite of testing facilities supporting -TDD, BDD, mocking, and benchmarking. - - "I had a class with Jim Weirich on testing last week and we were - allowed to choose our testing frameworks. Kirk Haines and I were - paired up and we cracked open the code for a few test - frameworks... - - I MUST say that minitest is *very* readable / understandable - compared to the 'other two' options we looked at. Nicely done and - thank you for helping us keep our mental sanity." - - -- Wayne E. Seguin - -minitest/unit is a small and incredibly fast unit testing framework. -It provides a rich set of assertions to make your tests clean and -readable. - -minitest/spec is a functionally complete spec engine. It hooks onto -minitest/unit and seamlessly bridges test assertions over to spec -expectations. - -minitest/benchmark is an awesome way to assert the performance of your -algorithms in a repeatable manner. Now you can assert that your newb -co-worker doesn't replace your linear algorithm with an exponential -one! - -minitest/mock by Steven Baker, is a beautifully tiny mock (and stub) -object framework. - -minitest/pride shows pride in testing and adds coloring to your test -output. I guess it is an example of how to write IO pipes too. :P - -minitest/unit is meant to have a clean implementation for language -implementors that need a minimal set of methods to bootstrap a working -test suite. For example, there is no magic involved for test-case -discovery. - - "Again, I can't praise enough the idea of a testing/specing - framework that I can actually read in full in one sitting!" - - -- Piotr Szotkowski - -Comparing to rspec: - - rspec is a testing DSL. minitest is ruby. - - -- Adam Hawkins, "Bow Before MiniTest" - -minitest doesn't reinvent anything that ruby already provides, like: -classes, modules, inheritance, methods. This means you only have to -learn ruby to use minitest and all of your regular OO practices like -extract-method refactorings still apply.''; - }; - name = ''minitest-5.5.0''; - requiredGems = [ ]; - sha256 = ''1kzq25l8fh2ngshlwy7k535ncb15n2piqmha86272frh71vw0xq2''; - }; - mixlib_shellout_1_6_1 = { - basename = ''mixlib_shellout''; - meta = { - description = ''Run external commands on Unix or Windows''; - homepage = ''http://wiki.opscode.com/''; - longDescription = ''Run external commands on Unix or Windows''; - }; - name = ''mixlib-shellout-1.6.1''; - requiredGems = [ ]; - sha256 = ''0awwll2gbsvsz7g6j473f0xrjzyxq755vl260lmki6p937d33f7a''; - }; - multi_json_1_10_1 = { - basename = ''multi_json''; - meta = { - description = ''A common interface to multiple JSON libraries.''; - homepage = ''http://github.com/intridea/multi_json''; - longDescription = ''A common interface to multiple JSON libraries, including Oj, Yajl, the JSON gem (with C-extensions), the pure-Ruby JSON gem, NSJSONSerialization, gson.rb, JrJackson, and OkJson.''; - }; - name = ''multi_json-1.10.1''; - requiredGems = [ ]; - sha256 = ''1ll21dz01jjiplr846n1c8yzb45kj5hcixgb72rz0zg8fyc9g61c''; - }; - multi_json_1_3_6 = { - basename = ''multi_json''; - meta = { - description = ''A gem to provide swappable JSON backends.''; - homepage = ''http://github.com/intridea/multi_json''; - longDescription = ''A gem to provide easy switching between different JSON backends, including Oj, Yajl, the JSON gem (with C-extensions), the pure-Ruby JSON gem, and OkJson.''; - }; - name = ''multi_json-1.3.6''; - requiredGems = [ ]; - sha256 = ''0q2zjfvd2ibds9g9nzf2p1b47fc1wqliwfywv5pw85w15lmy91yr''; - }; - multi_test_0_1_1 = { - basename = ''multi_test''; - meta = { - description = ''multi-test-0.1.1''; - homepage = ''http://cukes.info''; - longDescription = ''Wafter-thin gem to help control rogue test/unit/autorun requires''; - }; - name = ''multi_test-0.1.1''; - requiredGems = [ ]; - sha256 = ''1dd810limbdc8k7ss83g83krrsjjqs79nicbdxk74l1a2sp2jhwv''; - }; - multipart_post_2_0_0 = { - basename = ''multipart_post''; - meta = { - description = ''A multipart form post accessory for Net::HTTP.''; - homepage = ''https://github.com/nicksieger/multipart-post''; - longDescription = ''Use with Net::HTTP to do multipart form posts. IO values that have #content_type, #original_filename, and #local_path will be posted as a binary file.''; - }; - name = ''multipart-post-2.0.0''; - requiredGems = [ ]; - sha256 = ''09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x''; - }; - net_http_digest_auth_1_4 = { - basename = ''net_http_digest_auth''; - meta = { - description = ''An implementation of RFC 2617 - Digest Access Authentication''; - homepage = ''http://github.com/drbrain/net-http-digest_auth''; - longDescription = ''An implementation of RFC 2617 - Digest Access Authentication. At this time -the gem does not drop in to Net::HTTP and can be used for with other HTTP -clients. - -In order to use net-http-digest_auth you'll need to perform some request -wrangling on your own. See the class documentation at Net::HTTP::DigestAuth -for an example.''; - }; - name = ''net-http-digest_auth-1.4''; - requiredGems = [ ]; - sha256 = ''14801gr34g0rmqz9pv4rkfa3crfdbyfk6r48vpg5a5407v0sixqi''; - }; - net_http_persistent_2_9_4 = { - basename = ''net_http_persistent''; - meta = { - description = ''Manages persistent connections using Net::HTTP plus a speed fix for Ruby 1.8''; - homepage = ''http://docs.seattlerb.org/net-http-persistent''; - longDescription = ''Manages persistent connections using Net::HTTP plus a speed fix for Ruby 1.8. -It's thread-safe too! - -Using persistent HTTP connections can dramatically increase the speed of HTTP. -Creating a new HTTP connection for every request involves an extra TCP -round-trip and causes TCP congestion avoidance negotiation to start over. - -Net::HTTP supports persistent connections with some API methods but does not -handle reconnection gracefully. Net::HTTP::Persistent supports reconnection -and retry according to RFC 2616.''; - }; - name = ''net-http-persistent-2.9.4''; - requiredGems = [ ]; - sha256 = ''1y9fhaax0d9kkslyiqi1zys6cvpaqx9a0y0cywp24rpygwh4s9r4''; - }; - net_http_pipeline_1_0_1 = { - basename = ''net_http_pipeline''; - meta = { - description = ''An HTTP/1.1 pipelining implementation atop Net::HTTP''; - homepage = ''http://docs.seattlerb.org/net-http-pipeline''; - longDescription = ''An HTTP/1.1 pipelining implementation atop Net::HTTP. A pipelined connection -sends multiple requests to the HTTP server without waiting for the responses. -The server will respond in-order.''; - }; - name = ''net-http-pipeline-1.0.1''; - requiredGems = [ ]; - sha256 = ''0bxjy33yhxwsbnld8xj3zv64ibgfjn9rjpiqkyd5ipmz50pww8v9''; - }; - net_scp_1_2_1 = { - basename = ''net_scp''; - meta = { - description = ''A pure Ruby implementation of the SCP client protocol''; - homepage = ''https://github.com/net-ssh/net-scp''; - longDescription = ''A pure Ruby implementation of the SCP client protocol''; - }; - name = ''net-scp-1.2.1''; - requiredGems = [ g.net_ssh_2_9_1 ]; - sha256 = ''0b0jqrcsp4bbi4n4mzyf70cp2ysyp6x07j8k8cqgxnvb4i3a134j''; - }; - net_sftp_2_1_2 = { - basename = ''net_sftp''; - meta = { - description = ''A pure Ruby implementation of the SFTP client protocol''; - homepage = ''https://github.com/net-ssh/net-sftp''; - longDescription = ''A pure Ruby implementation of the SFTP client protocol''; - }; - name = ''net-sftp-2.1.2''; - requiredGems = [ g.net_ssh_2_9_1 ]; - sha256 = ''04674g4n6mryjajlcd82af8g8k95la4b1bj712dh71hw1c9vhw1y''; - }; - net_ssh_2_7_0 = { - basename = ''net_ssh''; - meta = { - description = ''Net::SSH: a pure-Ruby implementation of the SSH2 client protocol.''; - homepage = ''https://github.com/net-ssh/net-ssh''; - longDescription = ''Net::SSH: a pure-Ruby implementation of the SSH2 client protocol. It allows you to write programs that invoke and interact with processes on remote servers, via SSH2.''; - }; - name = ''net-ssh-2.7.0''; - requiredGems = [ ]; - sha256 = ''14v0cq2fws54kxpgz249xmjlajynhcs4s2szl8kjxgn4c78lrkmr''; - }; - net_ssh_2_9_1 = { - basename = ''net_ssh''; - meta = { - description = ''Net::SSH: a pure-Ruby implementation of the SSH2 client protocol.''; - homepage = ''https://github.com/net-ssh/net-ssh''; - longDescription = ''Net::SSH: a pure-Ruby implementation of the SSH2 client protocol. It allows you to write programs that invoke and interact with processes on remote servers, via SSH2.''; - }; - name = ''net-ssh-2.9.1''; - requiredGems = [ ]; - sha256 = ''1vscp4r58jisiigqc6d6752w19m1m6hmi3jkzmp3ydxai7h3jb2j''; - }; - netrc_0_10_1 = { - basename = ''netrc''; - meta = { - description = ''Library to read and write netrc files.''; - homepage = ''https://github.com/geemus/netrc''; - longDescription = ''This library can read and update netrc files, preserving formatting including comments and whitespace.''; - }; - name = ''netrc-0.10.1''; - requiredGems = [ ]; - sha256 = ''1f7ba1zadvydjh0vs16b0spsxpqq2y9jim4h38wahd3sqygiwifc''; - }; - newrelic_plugin_1_3_1 = { - basename = ''newrelic_plugin''; - meta = { - description = ''New Relic Ruby Plugin SDK''; - homepage = ''http://newrelic.com''; - longDescription = ''The New Relic Plugin Gem is used to send plugin data to New Relic from non-application sources.''; - }; - name = ''newrelic_plugin-1.3.1''; - requiredGems = [ g.json_1_8_1 ]; - sha256 = ''0vmm82mjb9spbs6sb9b94yk8b58dzhflzvgzpyhv7jb3rfdng7ak''; - }; - nix_0_1_1 = { - basename = ''nix''; - meta = { - description = ''Nix package manager interface''; - homepage = ''http://gitorious.org/ruby-nix''; - longDescription = ''Adds 'gem nix' command that dumps given set of gems to format suitable for Nix package manager''; - }; - name = ''nix-0.1.1''; - requiredGems = [ ]; - sha256 = ''0kwrbkkg0gxibhsz9dpd5zabcf2wqsicg28yiazyb3dc9dslk26k''; - }; - nokogiri_1_6_5 = { - basename = ''nokogiri''; - meta = { - description = ''Nokogiri (鋸) is an HTML, XML, SAX, and Reader parser''; - homepage = ''http://nokogiri.org''; - longDescription = ''Nokogiri (鋸) is an HTML, XML, SAX, and Reader parser. Among Nokogiri's -many features is the ability to search documents via XPath or CSS3 selectors. - -XML is like violence - if it doesn’t solve your problems, you are not using -enough of it.''; - }; - name = ''nokogiri-1.6.5''; - requiredGems = [ g.mini_portile_0_6_1 ]; - sha256 = ''1xmxz6fa0m4p7c7ngpgz6gjgv65lzz63dsf0b6vh7gs2fkiw8j7l''; - }; - ntlm_http_0_1_1 = { - basename = ''ntlm_http''; - meta = { - description = ''Ruby/NTLM HTTP library.''; - homepage = ''http://www.mindflowsolutions.net''; - longDescription = ''Ruby/NTLM HTTP provides NTLM authentication over http.''; - }; - name = ''ntlm-http-0.1.1''; - requiredGems = [ ]; - sha256 = ''0yx01ffrw87wya1syivqzf8hz02axk7jdpw6aw221xwvib767d36''; - }; - orderedhash_0_0_6 = { - basename = ''orderedhash''; - meta = { - description = ''orderedhash''; - homepage = ''http://codeforpeople.com/lib/ruby/orderedhash/''; - }; - name = ''orderedhash-0.0.6''; - requiredGems = [ ]; - sha256 = ''0fryy7f9jbpx33jq5m402yqj01zcg563k9fsxlqbhmq638p4bzd7''; - }; - papertrail_0_9_11 = { - basename = ''papertrail''; - meta = { - description = ''Command-line client for Papertrail hosted log management service.''; - homepage = ''http://github.com/papertrail/papertrail-cli''; - longDescription = ''Command-line client for Papertrail hosted log management service. Tails and searches app server logs and system syslog. Supports Boolean search and works with grep and pipe output (Unix).''; - }; - name = ''papertrail-0.9.11''; - requiredGems = [ g.chronic_0_10_2 ]; - sha256 = ''15wbj0yik5j853r1cap8s9f08z5slvx83lxaq6bsvh5kb47hbb0i''; - }; - papertrail_cli_0_9_3 = { - basename = ''papertrail_cli''; - meta = { - description = ''Placeholder gem to point to new papertrail gem''; - homepage = ''http://github.com/papertrail/papertrail-cli-gem''; - longDescription = ''Placeholder gem to point to new papertrail gem.''; - }; - name = ''papertrail-cli-0.9.3''; - requiredGems = [ g.papertrail_0_9_11 ]; - sha256 = ''1914dcfqsmw5rl4xd1zwjrfbgwglyncxm8km06bgxaqn4wnaq5iv''; - }; - parallel_0_7_1 = { - basename = ''parallel''; - meta = { - description = ''Run any kind of code in parallel processes''; - homepage = ''https://github.com/grosser/parallel''; - }; - name = ''parallel-0.7.1''; - requiredGems = [ ]; - sha256 = ''1kzz6ydg7r23ks2b7zbpx4vz3h186n19vhgnjcwi7xwd6h2f1fsq''; - }; - parslet_1_5_0 = { - basename = ''parslet''; - meta = { - description = ''Parser construction library with great error reporting in Ruby.''; - homepage = ''http://kschiess.github.com/parslet''; - }; - name = ''parslet-1.5.0''; - requiredGems = [ g.blankslate_2_1_2_4 ]; - sha256 = ''0qp1m8n3m6k6g22nn1ivcfkvccq5jmbkw53vvcjw5xssq179l9z3''; - }; - posix_spawn_0_3_9 = { - basename = ''posix_spawn''; - meta = { - description = ''posix_spawnp(2) for ruby''; - homepage = ''http://github.com/rtomayko/posix-spawn''; - longDescription = ''posix-spawn uses posix_spawnp(2) for faster process spawning''; - }; - name = ''posix-spawn-0.3.9''; - requiredGems = [ ]; - sha256 = ''042i1afggy1sv2jmdjjjhyffas28xp2r1ylj5xfv3hchy3b4civ3''; - }; - pry_0_9_12_6 = { - basename = ''pry''; - meta = { - description = ''An IRB alternative and runtime developer console''; - homepage = ''http://pry.github.com''; - longDescription = ''An IRB alternative and runtime developer console''; - }; - name = ''pry-0.9.12.6''; - requiredGems = [ g.coderay_1_1_0 g.slop_3_6_0 g.method_source_0_8_2 ]; - sha256 = ''0wmgamn83m1zb1fbqc22hiszjf2a2xij5jd95w2gvm5x6l5p61q1''; - }; - pusher_client_0_6_0 = { - basename = ''pusher_client''; - meta = { - description = ''Client for consuming WebSockets from http://pusher.com''; - homepage = ''http://github.com/pusher/pusher-ruby-client''; - longDescription = ''Client for consuming WebSockets from http://pusher.com''; - }; - name = ''pusher-client-0.6.0''; - requiredGems = [ g.websocket_1_2_1 g.json_1_8_1 ]; - sha256 = ''0n7l630qg6wgzak45b6gfjg9a0fmpbrs7mwchqqbja9mjs95r8qy''; - }; - pygments_rb_0_6_0 = { - basename = ''pygments_rb''; - meta = { - description = ''pygments wrapper for ruby''; - homepage = ''https://github.com/tmm1/pygments.rb''; - longDescription = ''pygments.rb exposes the pygments syntax highlighter to Ruby''; - }; - name = ''pygments.rb-0.6.0''; - requiredGems = [ g.yajl_ruby_1_1_0 g.posix_spawn_0_3_9 ]; - sha256 = ''0jszj99cirbkxaqllbgnp9718v32xhvg08rfldvr10gy8i7bhy2s''; - }; - rabbitmq_manager_0_1_0 = { - basename = ''rabbitmq_manager''; - meta = { - description = ''Ruby wrapper for RabbitMQ management HTTP API''; - homepage = ''https://github.com/carlhoerberg/rabbitmq_manager''; - longDescription = ''Ruby wrapper for RabbitMQ management HTTP API''; - }; - name = ''rabbitmq_manager-0.1.0''; - requiredGems = [ g.faraday_0_9_0 g.faraday_middleware_0_9_1 ]; - sha256 = ''0364ljnk9y13b7lj0i2mks62g6c9ywv4py4v17p6fzrfx693mmbc''; - }; - rack_1_5_2 = { - basename = ''rack''; - meta = { - description = ''a modular Ruby webserver interface''; - homepage = ''http://rack.github.com/''; - longDescription = ''Rack provides a minimal, modular and adaptable interface for developing -web applications in Ruby. By wrapping HTTP requests and responses in -the simplest way possible, it unifies and distills the API for web -servers, web frameworks, and software in between (the so-called -middleware) into a single method call. - -Also see http://rack.github.com/. -''; - }; - name = ''rack-1.5.2''; - requiredGems = [ ]; - sha256 = ''19szfw76cscrzjldvw30jp3461zl00w4xvw1x9lsmyp86h1g0jp6''; - }; - rack_protection_1_5_3 = { - basename = ''rack_protection''; - meta = { - description = ''You should use protection!''; - homepage = ''http://github.com/rkh/rack-protection''; - longDescription = ''You should use protection!''; - }; - name = ''rack-protection-1.5.3''; - requiredGems = [ g.rack_1_5_2 ]; - sha256 = ''0cvb21zz7p9wy23wdav63z5qzfn4nialik22yqp6gihkgfqqrh5r''; - }; - rack_test_0_6_2 = { - basename = ''rack_test''; - meta = { - description = ''Simple testing API built on Rack''; - homepage = ''http://github.com/brynary/rack-test''; - longDescription = ''Rack::Test is a small, simple testing API for Rack apps. It can be used on its -own or as a reusable starting point for Web frameworks and testing libraries -to build on. Most of its initial functionality is an extraction of Merb 1.0's -request helpers feature.''; - }; - name = ''rack-test-0.6.2''; - requiredGems = [ g.rack_1_5_2 ]; - sha256 = ''01mk715ab5qnqf6va8k3hjsvsmplrfqpz6g58qw4m3l8mim0p4ky''; - }; - rails_4_1_8 = { - basename = ''rails''; - meta = { - description = ''Full-stack web application framework.''; - homepage = ''http://www.rubyonrails.org''; - longDescription = ''Ruby on Rails is a full-stack web framework optimized for programmer happiness and sustainable productivity. It encourages beautiful code by favoring convention over configuration.''; - }; - name = ''rails-4.1.8''; - requiredGems = [ g.activesupport_4_1_8 g.actionpack_4_1_8 g.actionview_4_1_8 g.activemodel_4_1_8 g.activerecord_4_1_8 g.actionmailer_4_1_8 g.railties_4_1_8 g.bundler_1_7_9 g.sprockets_rails_2_2_2 ]; - sha256 = ''17ar4gvnvkcw233cn77x4ps3q6ln3i5kpbqwfa2hbi6s61na9x10''; - }; - railties_4_1_8 = { - basename = ''railties''; - meta = { - description = ''Tools for creating, working with, and running Rails applications.''; - homepage = ''http://www.rubyonrails.org''; - longDescription = ''Rails internals: application bootup, plugins, generators, and rake tasks.''; - }; - name = ''railties-4.1.8''; - requiredGems = [ g.activesupport_4_1_8 g.actionpack_4_1_8 g.rake_10_4_2 g.thor_0_19_1 ]; - sha256 = ''171h23zr4135qynz74n61zly2pr0pzvspdi48dwxvc9xrzgzhznm''; - }; - rake_0_9_2_2 = { - basename = ''rake''; - meta = { - description = ''Ruby based make-like utility.''; - homepage = ''http://rake.rubyforge.org''; - longDescription = ''Rake is a Make-like program implemented in Ruby. Tasks and dependencies arespecified in standard Ruby syntax.''; - }; - name = ''rake-0.9.2.2''; - requiredGems = [ ]; - sha256 = ''19n4qp5gzbcqy9ajh56kgwqv9p9w2hnczhyvaqz0nlvk9diyng6q''; - }; - rake_10_4_2 = { - basename = ''rake''; - meta = { - description = ''Rake is a Make-like program implemented in Ruby''; - homepage = ''https://github.com/ruby/rake''; - longDescription = ''Rake is a Make-like program implemented in Ruby. Tasks and dependencies are -specified in standard Ruby syntax. - -Rake has the following features: - -* Rakefiles (rake's version of Makefiles) are completely defined in - standard Ruby syntax. No XML files to edit. No quirky Makefile - syntax to worry about (is that a tab or a space?) - -* Users can specify tasks with prerequisites. - -* Rake supports rule patterns to synthesize implicit tasks. - -* Flexible FileLists that act like arrays but know about manipulating - file names and paths. - -* A library of prepackaged tasks to make building rakefiles easier. For example, - tasks for building tarballs and publishing to FTP or SSH sites. (Formerly - tasks for building RDoc and Gems were included in rake but they're now - available in RDoc and RubyGems respectively.) - -* Supports parallel execution of tasks.''; - }; - name = ''rake-10.4.2''; - requiredGems = [ ]; - sha256 = ''1rn03rqlf1iv6n87a78hkda2yqparhhaivfjpizblmxvlw2hk5r8''; - }; - rb_fsevent_0_9_4 = { - basename = ''rb_fsevent''; - meta = { - description = ''Very simple & usable FSEvents API''; - homepage = ''http://rubygems.org/gems/rb-fsevent''; - longDescription = ''FSEvents API with Signals catching (without RubyCocoa)''; - }; - name = ''rb-fsevent-0.9.4''; - requiredGems = [ ]; - sha256 = ''12if5xsik64kihxf5awsyavlp595y47g9qz77vfp2zvkxgglaka7''; - }; - rb_inotify_0_9_5 = { - basename = ''rb_inotify''; - meta = { - description = ''A Ruby wrapper for Linux's inotify, using FFI''; - homepage = ''http://github.com/nex3/rb-inotify''; - longDescription = ''A Ruby wrapper for Linux's inotify, using FFI''; - }; - name = ''rb-inotify-0.9.5''; - requiredGems = [ g.ffi_1_9_6 ]; - sha256 = ''0kddx2ia0qylw3r52nhg83irkaclvrncgy2m1ywpbhlhsz1rymb9''; - }; - rdiscount_2_1_7_1 = { - basename = ''rdiscount''; - meta = { - description = ''Fast Implementation of Gruber's Markdown in C''; - homepage = ''http://dafoster.net/projects/rdiscount/''; - }; - name = ''rdiscount-2.1.7.1''; - requiredGems = [ ]; - sha256 = ''1g70vsgv7mdwcyk9rxja7wm4qqap67prqwkj335c460vlzs6pqii''; - }; - rdoc_4_2_0 = { - basename = ''rdoc''; - meta = { - description = ''RDoc produces HTML and command-line documentation for Ruby projects''; - homepage = ''http://docs.seattlerb.org/rdoc''; - longDescription = ''RDoc produces HTML and command-line documentation for Ruby projects. RDoc -includes the +rdoc+ and +ri+ tools for generating and displaying documentation -from the command-line.''; - }; - name = ''rdoc-4.2.0''; - requiredGems = [ g.json_1_8_1 ]; - sha256 = ''1k4hfa26r06ib1sxcig67arphy0a07cywcpsl37v57d6hhsgw6rr''; - }; - redcarpet_3_2_2 = { - basename = ''redcarpet''; - meta = { - description = ''Markdown that smells nice''; - homepage = ''http://github.com/vmg/redcarpet''; - longDescription = ''A fast, safe and extensible Markdown to (X)HTML parser''; - }; - name = ''redcarpet-3.2.2''; - requiredGems = [ ]; - sha256 = ''1yf93kxnyk8dy3cdzq1lbdv8f47svns0k042w81kn8ilj1w88zhg''; - }; - redis_3_2_0 = { - basename = ''redis''; - meta = { - description = ''A Ruby client library for Redis''; - homepage = ''https://github.com/redis/redis-rb''; - longDescription = '' A Ruby client that tries to match Redis' API one-to-one, while still - providing an idiomatic interface. It features thread-safety, - client-side sharding, pipelining, and an obsession for performance. -''; - }; - name = ''redis-3.2.0''; - requiredGems = [ ]; - sha256 = ''10h6a0dsh7yk1x6q6g75z5dlpbn8qg8z3wk9ymwqm3zv0r3himh6''; - }; - remote_syslog_1_6_14 = { - basename = ''remote_syslog''; - meta = { - description = ''Monitor plain text log file(s) for new entries and send to remote syslog collector''; - homepage = ''http://github.com/papertrail/remote_syslog''; - longDescription = ''Lightweight daemon to tail one or more log files and transmit UDP syslog messages to a remote syslog host (centralized log aggregation). Generates UDP packets itself instead of depending on a system syslog daemon, so it doesn't affect system-wide logging configuration.''; - }; - name = ''remote_syslog-1.6.14''; - requiredGems = [ g.servolux_0_10_0 g.file_tail_1_1_0 g.eventmachine_1_0_3 g.eventmachine_tail_0_6_4 g.syslog_protocol_0_9_2 g.em_resolv_replace_1_1_3 ]; - sha256 = ''1f2yjyqhbdc4vlx52zli1b33f6yn8qc1kd4n0dpv27zswj9qfdkr''; - }; - rest_client_1_6_7 = { - basename = ''rest_client''; - meta = { - description = ''Simple HTTP and REST client for Ruby, inspired by microframework syntax for specifying actions.''; - homepage = ''http://github.com/archiloque/rest-client''; - longDescription = ''A simple HTTP and REST client for Ruby, inspired by the Sinatra microframework style of specifying actions: get, put, post, delete.''; - }; - name = ''rest-client-1.6.7''; - requiredGems = [ g.mime_types_2_4_3 ]; - sha256 = ''0nn7zalgidz2yj0iqh3xvzh626krm2al79dfiij19jdhp0rk8853''; - }; - riemann_dash_0_2_9 = { - basename = ''riemann_dash''; - meta = { - description = ''HTTP dashboard for the distributed event system Riemann.''; - homepage = ''https://github.com/aphyr/riemann-dash''; - longDescription = ''HTTP dashboard for the distributed event system Riemann.''; - }; - name = ''riemann-dash-0.2.9''; - requiredGems = [ g.erubis_2_7_0 g.sinatra_1_4_5 g.sass_3_4_9 g.webrick_1_3_1 g.multi_json_1_3_6 ]; - sha256 = ''0ws5wmjbv8w9lcr3i2mdinj2qm91p6c85k6c067i67cf0p90jxq3''; - }; - right_aws_3_1_0 = { - basename = ''right_aws''; - meta = { - description = ''The RightScale AWS gems have been designed to provide a robust, fast, and secure interface to Amazon EC2, EBS, S3, SQS, SDB, and CloudFront.''; - longDescription = ''== DESCRIPTION: - -The RightScale AWS gems have been designed to provide a robust, fast, and secure interface to Amazon EC2, EBS, S3, SQS, SDB, and CloudFront. -These gems have been used in production by RightScale since late 2006 and are being maintained to track enhancements made by Amazon. -The RightScale AWS gems comprise: - -- RightAws::Ec2 -- interface to Amazon EC2 (Elastic Compute Cloud) and the - associated EBS (Elastic Block Store) -- RightAws::S3 and RightAws::S3Interface -- interface to Amazon S3 (Simple Storage Service) -- RightAws::Sqs and RightAws::SqsInterface -- interface to first-generation Amazon SQS (Simple Queue Service) (API version 2007-05-01) -- RightAws::SqsGen2 and RightAws::SqsGen2Interface -- interface to second-generation Amazon SQS (Simple Queue Service) (API version 2008-01-01) -- RightAws::SdbInterface and RightAws::ActiveSdb -- interface to Amazon SDB (SimpleDB) -- RightAws::AcfInterface -- interface to Amazon CloudFront, a content distribution service - -== FEATURES: - -- Full programmmatic access to EC2, EBS, S3, SQS, SDB, and CloudFront. -- Complete error handling: all operations check for errors and report complete - error information by raising an AwsError. -- Persistent HTTP connections with robust network-level retry layer using - RightHttpConnection). This includes socket timeouts and retries. -- Robust HTTP-level retry layer. Certain (user-adjustable) HTTP errors returned - by Amazon's services are classified as temporary errors. - These errors are automaticallly retried using exponentially increasing intervals. - The number of retries is user-configurable. -- Fast REXML-based parsing of responses (as fast as a pure Ruby solution allows). -- Uses libxml (if available) for faster response parsing. -- Support for large S3 list operations. Buckets and key subfolders containing - many (> 1000) keys are listed in entirety. Operations based on list (like - bucket clear) work on arbitrary numbers of keys. -- Support for streaming GETs from S3, and streaming PUTs to S3 if the data source is a file. -- Support for single-threaded usage, multithreaded usage, as well as usage with multiple - AWS accounts. -- Support for both first- and second-generation SQS (API versions 2007-05-01 - and 2008-01-01). These versions of SQS are not compatible. -- Support for signature versions 0 and 1 on SQS, SDB, and EC2. -- Interoperability with any cloud running Eucalyptus (http://eucalyptus.cs.ucsb.edu) -- Test suite (requires AWS account to do "live" testing). -''; - }; - name = ''right_aws-3.1.0''; - requiredGems = [ g.right_http_connection_1_5_0 ]; - sha256 = ''1a3l5vyvq078nq976rzkrd6fbj522sbgrxpdq3p9z373h0awha09''; - }; - right_http_connection_1_5_0 = { - basename = ''right_http_connection''; - meta = { - description = ''RightScale's robust HTTP/S connection module''; - homepage = ''http://rightscale.rubyforge.org/''; - longDescription = ''Rightscale::HttpConnection is a robust HTTP/S library. It implements a retry -algorithm for low-level network errors. - -== FEATURES: - -- provides put/get streaming -- does configurable retries on connect and read timeouts, DNS failures, etc. -- HTTPS certificate checking -''; - }; - name = ''right_http_connection-1.5.0''; - requiredGems = [ ]; - sha256 = ''0shd8v24aqxdvim1gdqzwxpanjhfgkhdaw0m0lzz7sybkb02j8qf''; - }; - rjb_1_5_1 = { - basename = ''rjb''; - meta = { - description = ''Ruby Java bridge''; - homepage = ''http://rjb.rubyforge.org/''; - longDescription = ''RJB is a bridge program that connect between Ruby and Java with Java Native Interface. -''; - }; - name = ''rjb-1.5.1''; - requiredGems = [ ]; - sha256 = ''1mfmx80r00ka5zn4qa3bnwsvapsnn4g0xr13g1kf95f2fgymy0yv''; - }; - rjb_1_5_2 = { - basename = ''rjb''; - meta = { - description = ''Ruby Java bridge''; - homepage = ''http://rjb.rubyforge.org/''; - longDescription = ''RJB is a bridge program that connect between Ruby and Java with Java Native Interface. -''; - }; - name = ''rjb-1.5.2''; - requiredGems = [ ]; - sha256 = ''1adg5bxdb7f95cw3mazj596d9zn2laz7l0wygcabkzrxbkbfif3r''; - }; - rkelly_remix_0_0_6 = { - basename = ''rkelly_remix''; - meta = { - description = ''RKelly Remix is a fork of the RKelly[https://github.com/tenderlove/rkelly] JavaScript parser.''; - homepage = ''https://github.com/nene/rkelly-remix''; - longDescription = ''RKelly Remix is a fork of the -RKelly[https://github.com/tenderlove/rkelly] JavaScript parser.''; - }; - name = ''rkelly-remix-0.0.6''; - requiredGems = [ ]; - sha256 = ''1ihsns5v8nx96gvj7sqw5m8d6dsnmpfzpd07y860bldjhkjsxp1z''; - }; - rmail_1_0_0 = { - basename = ''rmail''; - meta = { - description = ''A MIME mail parsing and generation library.''; - homepage = ''http://www.rfc20.org/rubymail''; - longDescription = ''RMail is a lightweight mail library containing various utility classes and modules that allow ruby scripts to parse, modify, and generate MIME mail messages.''; - }; - name = ''rmail-1.0.0''; - requiredGems = [ ]; - sha256 = ''0nsg7yda1gdwa96j4hlrp2s0m06vrhcc4zy5mbq7gxmlmwf9yixp''; - }; - rspec_2_14_1 = { - basename = ''rspec''; - meta = { - description = ''rspec-2.14.1''; - homepage = ''http://github.com/rspec''; - longDescription = ''BDD for Ruby''; - }; - name = ''rspec-2.14.1''; - requiredGems = [ g.rspec_core_2_14_8 g.rspec_expectations_2_14_5 g.rspec_mocks_2_14_6 ]; - sha256 = ''134y4wzk1prninb5a0bhxgm30kqfzl8dg06af4js5ylnhv2wd7sg''; - }; - rspec_core_2_14_5 = { - basename = ''rspec_core''; - meta = { - description = ''rspec-core-2.14.5''; - homepage = ''http://github.com/rspec/rspec-core''; - longDescription = ''BDD for Ruby. RSpec runner and example groups.''; - }; - name = ''rspec-core-2.14.5''; - requiredGems = [ ]; - sha256 = ''18zk2y5agzj4ps16hh1jlcqmyj0bmlcr24bl0m8gyhwf0gk1xmcr''; - }; - rspec_core_2_14_8 = { - basename = ''rspec_core''; - meta = { - description = ''rspec-core-2.14.8''; - homepage = ''http://github.com/rspec/rspec-core''; - longDescription = ''BDD for Ruby. RSpec runner and example groups.''; - }; - name = ''rspec-core-2.14.8''; - requiredGems = [ ]; - sha256 = ''0psjy5kdlz3ph39br0m01w65i1ikagnqlg39f8p65jh5q7dz8hwc''; - }; - rspec_expectations_2_14_3 = { - basename = ''rspec_expectations''; - meta = { - description = ''rspec-expectations-2.14.3''; - homepage = ''http://github.com/rspec/rspec-expectations''; - longDescription = ''rspec expectations (should[_not] and matchers)''; - }; - name = ''rspec-expectations-2.14.3''; - requiredGems = [ g.diff_lcs_1_2_5 ]; - sha256 = ''0gv5sqizmw0hdj1gl57mynp5i27kj4i0gpksrwwg9gazciq898n2''; - }; - rspec_expectations_2_14_5 = { - basename = ''rspec_expectations''; - meta = { - description = ''rspec-expectations-2.14.5''; - homepage = ''http://github.com/rspec/rspec-expectations''; - longDescription = ''rspec expectations (should[_not] and matchers)''; - }; - name = ''rspec-expectations-2.14.5''; - requiredGems = [ g.diff_lcs_1_2_5 ]; - sha256 = ''1ni8kw8kjv76jvwjzi4jba00k3qzj9f8wd94vm6inz0jz3gwjqf9''; - }; - rspec_mocks_2_14_3 = { - basename = ''rspec_mocks''; - meta = { - description = ''rspec-mocks-2.14.3''; - homepage = ''http://github.com/rspec/rspec-mocks''; - longDescription = ''RSpec's 'test double' framework, with support for stubbing and mocking''; - }; - name = ''rspec-mocks-2.14.3''; - requiredGems = [ ]; - sha256 = ''1xfhjisvpmb212jhb3k4r1ji3rrlv509mphcf345ij5b75gaybzr''; - }; - rspec_mocks_2_14_6 = { - basename = ''rspec_mocks''; - meta = { - description = ''rspec-mocks-2.14.6''; - homepage = ''http://github.com/rspec/rspec-mocks''; - longDescription = ''RSpec's 'test double' framework, with support for stubbing and mocking''; - }; - name = ''rspec-mocks-2.14.6''; - requiredGems = [ ]; - sha256 = ''1fwsmijd6w6cmqyh4ky2nq89jrpzh56hzmndx9wgkmdgfhfakv30''; - }; - rubyzip_0_9_9 = { - basename = ''rubyzip''; - meta = { - description = ''rubyzip is a ruby module for reading and writing zip files''; - homepage = ''http://github.com/aussiegeek/rubyzip''; - }; - name = ''rubyzip-0.9.9''; - requiredGems = [ ]; - sha256 = ''1khf6d903agnwd8965f5f8b353rzmfvygxp53z1199rqzw8h46q2''; - }; - rubyzip_1_1_6 = { - basename = ''rubyzip''; - meta = { - description = ''rubyzip is a ruby module for reading and writing zip files''; - homepage = ''http://github.com/rubyzip/rubyzip''; - }; - name = ''rubyzip-1.1.6''; - requiredGems = [ ]; - sha256 = ''17ha7kmgcnhnxyfp9wgyrd2synp17v9g8j1pknhfd2v9x5g475m9''; - }; - safe_yaml_1_0_4 = { - basename = ''safe_yaml''; - meta = { - description = ''SameYAML provides an alternative implementation of YAML.load suitable for accepting user input in Ruby applications.''; - homepage = ''https://github.com/dtao/safe_yaml''; - longDescription = ''Parse YAML safely''; - }; - name = ''safe_yaml-1.0.4''; - requiredGems = [ ]; - sha256 = ''1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094''; - }; - sass_3_4_9 = { - basename = ''sass''; - meta = { - description = ''A powerful but elegant CSS compiler that makes CSS fun again.''; - homepage = ''http://sass-lang.com/''; - longDescription = '' Sass makes CSS fun again. Sass is an extension of CSS3, adding - nested rules, variables, mixins, selector inheritance, and more. - It's translated to well-formatted, standard CSS using the - command line tool or a web-framework plugin. -''; - }; - name = ''sass-3.4.9''; - requiredGems = [ ]; - sha256 = ''0vg81irnrlgsgf1xl2cvh7nx7qbq6wbi8qq7avqzzfh9bx8mp7ff''; - }; - selenium_webdriver_2_44_0 = { - basename = ''selenium_webdriver''; - meta = { - description = ''The next generation developer focused tool for automated testing of webapps''; - homepage = ''http://selenium.googlecode.com''; - longDescription = ''WebDriver is a tool for writing automated tests of websites. It aims to mimic the behaviour of a real user, and as such interacts with the HTML of the application.''; - }; - name = ''selenium-webdriver-2.44.0''; - requiredGems = [ g.multi_json_1_10_1 g.rubyzip_1_1_6 g.childprocess_0_5_5 g.websocket_1_2_1 ]; - sha256 = ''06bm0c5cdskbcv27j60ff4cgxa5jwdvw2ys2sca9ycvyd4a5s44w''; - }; - servolux_0_10_0 = { - basename = ''servolux''; - meta = { - description = ''* {Homepage}[http://rubygems.''; - homepage = ''http://gemcutter.org/gems/servolux''; - longDescription = ''Serv-O-Lux is a collection of Ruby classes that are useful for daemon and -process management, and for writing your own Ruby services. The code is well -documented and tested. It works with Ruby and JRuby supporting both 1.8 and 1.9 -interpreters.''; - }; - name = ''servolux-0.10.0''; - requiredGems = [ ]; - sha256 = ''08jdrk35f61ab8b48ffm85p9lgfpbnzq3n4is00gqhpcrrq72dhs''; - }; - sinatra_1_3_2 = { - basename = ''sinatra''; - meta = { - description = ''Classy web-development dressed in a DSL''; - homepage = ''http://www.sinatrarb.com/''; - longDescription = ''Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort.''; - }; - name = ''sinatra-1.3.2''; - requiredGems = [ g.rack_1_5_2 g.rack_protection_1_5_3 g.tilt_1_4_1 ]; - sha256 = ''05blf915zpiwyz7agcn9rwdmddwxz0z4l3gd4qlqmrgd2vkw4sxc''; - }; - sinatra_1_4_5 = { - basename = ''sinatra''; - meta = { - description = ''Classy web-development dressed in a DSL''; - homepage = ''http://www.sinatrarb.com/''; - longDescription = ''Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort.''; - }; - name = ''sinatra-1.4.5''; - requiredGems = [ g.rack_1_5_2 g.tilt_1_4_1 g.rack_protection_1_5_3 ]; - sha256 = ''0qyna3wzlnvsz69d21lxcm3ixq7db08mi08l0a88011qi4qq701s''; - }; - slop_3_6_0 = { - basename = ''slop''; - meta = { - description = ''Simple Lightweight Option Parsing''; - homepage = ''http://github.com/leejarvis/slop''; - longDescription = ''A simple DSL for gathering options and parsing the command line''; - }; - name = ''slop-3.6.0''; - requiredGems = [ ]; - sha256 = ''00w8g3j7k7kl8ri2cf1m58ckxk8rn350gp4chfscmgv6pq1spk3n''; - }; - sprockets_2_12_3 = { - basename = ''sprockets''; - meta = { - description = ''Rack-based asset packaging system''; - homepage = ''http://getsprockets.org/''; - longDescription = ''Sprockets is a Rack-based asset packaging system that concatenates and serves JavaScript, CoffeeScript, CSS, LESS, Sass, and SCSS.''; - }; - name = ''sprockets-2.12.3''; - requiredGems = [ g.hike_1_2_3 g.multi_json_1_10_1 g.rack_1_5_2 g.tilt_1_4_1 ]; - sha256 = ''1bn2drr8bc2af359dkfraq0nm0p1pib634kvhwn5lvj3r4vllnn2''; - }; - sprockets_rails_2_2_2 = { - basename = ''sprockets_rails''; - meta = { - description = ''Sprockets Rails integration''; - homepage = ''https://github.com/rails/sprockets-rails''; - }; - name = ''sprockets-rails-2.2.2''; - requiredGems = [ g.sprockets_2_12_3 g.actionpack_4_1_8 g.activesupport_4_1_8 ]; - sha256 = ''192d4vfl1gjz6phli6sqk98364x6v4jkpl5imajvimsinvgyv81b''; - }; - syslog_protocol_0_9_2 = { - basename = ''syslog_protocol''; - meta = { - description = ''Syslog protocol parser and generator''; - homepage = ''https://github.com/eric/syslog_protocol''; - longDescription = ''Syslog protocol parser and generator''; - }; - name = ''syslog_protocol-0.9.2''; - requiredGems = [ ]; - sha256 = ''1yb2cmbyj0zmb2yhkgnmghcngrkhcxs4g1svcmgfj90l2hs23nmc''; - }; - systemu_2_6_4 = { - basename = ''systemu''; - meta = { - description = ''systemu''; - homepage = ''https://github.com/ahoward/systemu''; - longDescription = ''universal capture of stdout and stderr and handling of child process pid for windows, *nix, etc.''; - }; - name = ''systemu-2.6.4''; - requiredGems = [ ]; - sha256 = ''16k94azpsy1r958r6ysk4ksnpp54rqmh5hyamad9kwc3lk83i32z''; - }; - taskjuggler_3_5_0 = { - basename = ''taskjuggler''; - meta = { - description = ''A Project Management Software''; - homepage = ''http://www.taskjuggler.org''; - longDescription = ''TaskJuggler is a modern and powerful, Free and Open Source Software project -management tool. Its new approach to project planing and tracking is more -flexible and superior to the commonly used Gantt chart editing tools. - -TaskJuggler is project management software for serious project managers. It -covers the complete spectrum of project management tasks from the first idea -to the completion of the project. It assists you during project scoping, -resource assignment, cost and revenue planing, risk and communication -management. -''; - }; - name = ''taskjuggler-3.5.0''; - requiredGems = [ g.mail_2_6_3 g.term_ansicolor_1_3_0 ]; - sha256 = ''0r84rlc7a6w7p9nc9mgycbs5h0hq0kzscjq7zj3296xyf0afiwj2''; - }; - term_ansicolor_1_3_0 = { - basename = ''term_ansicolor''; - meta = { - description = ''Ruby library that colors strings using ANSI escape sequences''; - homepage = ''http://flori.github.com/term-ansicolor''; - longDescription = ''This library uses ANSI escape sequences to control the attributes of terminal output''; - }; - name = ''term-ansicolor-1.3.0''; - requiredGems = [ g.tins_1_3_3 ]; - sha256 = ''1a2gw7gmpmx57sdpyhjwl0zn4bqp7jyjz7aslpvvphd075layp4b''; - }; - terminal_notifier_1_6_2 = { - basename = ''terminal_notifier''; - meta = { - description = ''Send User Notifications on Mac OS X 10.8 or higher.''; - homepage = ''https://github.com/alloy/terminal-notifier''; - }; - name = ''terminal-notifier-1.6.2''; - requiredGems = [ ]; - sha256 = ''0v0bqpmnyivn0dqqkbzq0xcmas2l1msbwlpp2iclkninkmcqg9sf''; - }; - test_kitchen_1_2_1 = { - basename = ''test_kitchen''; - meta = { - description = ''Test Kitchen is an integration tool for developing and testing infrastructure code and software on isolated target platforms.''; - homepage = ''http://kitchen.ci''; - longDescription = ''Test Kitchen is an integration tool for developing and testing infrastructure code and software on isolated target platforms.''; - }; - name = ''test-kitchen-1.2.1''; - requiredGems = [ g.mixlib_shellout_1_6_1 g.net_scp_1_2_1 g.net_ssh_2_9_1 g.safe_yaml_1_0_4 g.thor_0_19_1 ]; - sha256 = ''1pmjzvmcvlfhk6l8p665dvx7qw6kypcbhwshkq999wjhbwmjq1nk''; - }; - text_1_3_0 = { - basename = ''text''; - meta = { - description = ''A collection of text algorithms''; - homepage = ''http://github.com/threedaymonk/text''; - longDescription = ''A collection of text algorithms: Levenshtein, Soundex, Metaphone, Double Metaphone, Porter Stemming''; - }; - name = ''text-1.3.0''; - requiredGems = [ ]; - sha256 = ''1bfn0rm2a7gpsxplx3dii3a7q16hi7idsqp54fh92b3j9sqgidj7''; - }; - thin_1_6_3 = { - basename = ''thin''; - meta = { - description = ''A thin and fast web server''; - homepage = ''http://code.macournoyer.com/thin/''; - longDescription = ''A thin and fast web server''; - }; - name = ''thin-1.6.3''; - requiredGems = [ g.rack_1_5_2 g.eventmachine_1_0_3 g.daemons_1_1_9 ]; - sha256 = ''1m56aygh5rh8ncp3s2gnn8ghn5ibkk0bg6s3clmh1vzaasw2lj4i''; - }; - thor_0_19_1 = { - basename = ''thor''; - meta = { - description = ''Thor is a toolkit for building powerful command-line interfaces.''; - homepage = ''http://whatisthor.com/''; - longDescription = ''Thor is a toolkit for building powerful command-line interfaces.''; - }; - name = ''thor-0.19.1''; - requiredGems = [ ]; - sha256 = ''08p5gx18yrbnwc6xc0mxvsfaxzgy2y9i78xq7ds0qmdm67q39y4z''; - }; - thread_safe_0_3_4 = { - basename = ''thread_safe''; - meta = { - description = ''A collection of data structures and utilities to make thread-safe programming in Ruby easier''; - homepage = ''https://github.com/headius/thread_safe''; - longDescription = ''Thread-safe collections and utilities for Ruby''; - }; - name = ''thread_safe-0.3.4''; - requiredGems = [ ]; - sha256 = ''1cil2zcdzqkyr8zrwhlg7gywryg36j4mxlxw0h0x0j0wjym5nc8n''; - }; - tilt_1_4_1 = { - basename = ''tilt''; - meta = { - description = ''Generic interface to multiple Ruby template engines''; - homepage = ''http://github.com/rtomayko/tilt/''; - longDescription = ''Generic interface to multiple Ruby template engines''; - }; - name = ''tilt-1.4.1''; - requiredGems = [ ]; - sha256 = ''00sr3yy7sbqaq7cb2d2kpycajxqf1b1wr1yy33z4bnzmqii0b0ir''; - }; - timers_4_0_1 = { - basename = ''timers''; - meta = { - description = ''Schedule procs to run after a certain time, or at periodic intervals, using any API that accepts a timeout''; - homepage = ''https://github.com/celluloid/timers''; - longDescription = ''Pure Ruby one-shot and periodic timers''; - }; - name = ''timers-4.0.1''; - requiredGems = [ g.hitimes_1_2_2 ]; - sha256 = ''03ahv07wn1f2g3c5843q7sf03a81518lq5624s9f49kbrswa2p7l''; - }; - tins_1_3_3 = { - basename = ''tins''; - meta = { - description = ''Useful stuff.''; - homepage = ''http://flori.github.com/tins''; - longDescription = ''All the stuff that isn't good/big enough for a real library.''; - }; - name = ''tins-1.3.3''; - requiredGems = [ ]; - sha256 = ''14jnsg15wakdk1ljh2iv9yvzk8nb7gpzd2zw4yvjikmffqjyqvna''; - }; - tmuxinator_0_6_9 = { - basename = ''tmuxinator''; - meta = { - description = ''Create and manage complex tmux sessions easily.''; - homepage = ''https://github.com/aziz/tmuxinator''; - longDescription = ''Create and manage complex tmux sessions easily.''; - }; - name = ''tmuxinator-0.6.9''; - requiredGems = [ g.thor_0_19_1 g.erubis_2_7_0 ]; - sha256 = ''0q0ld82dznjsan7ciblfsxz59brcc16fwmvr9n3c7vdcndj8rd27''; - }; - toml_0_1_2 = { - basename = ''toml''; - meta = { - description = ''Parse your TOML.''; - homepage = ''http://github.com/jm/toml''; - longDescription = ''Parse your TOML, seriously.''; - }; - name = ''toml-0.1.2''; - requiredGems = [ g.parslet_1_5_0 ]; - sha256 = ''1wnvi1g8id1sg6776fvzf98lhfbscchgiy1fp5pvd58a8ds2fq9v''; - }; - travis_1_7_4 = { - basename = ''travis''; - meta = { - description = ''Travis CI client''; - homepage = ''https://github.com/travis-ci/travis.rb''; - longDescription = ''CLI and Ruby client library for Travis CI''; - }; - name = ''travis-1.7.4''; - requiredGems = [ g.faraday_0_9_0 g.faraday_middleware_0_9_1 g.highline_1_6_21 g.backports_3_6_4 g.gh_0_13_2 g.launchy_2_4_3 g.pry_0_9_12_6 g.typhoeus_0_6_9 g.pusher_client_0_6_0 g.addressable_2_3_6 ]; - sha256 = ''12c1ghki28qs45j1aw5ihcblh5s45wkzayfv6zjpj282z3q0ygnz''; - }; - trollop_2_0 = { - basename = ''trollop''; - meta = { - description = ''Trollop is a commandline option parser for Ruby that just gets out of your way.''; - homepage = ''http://trollop.rubyforge.org''; - longDescription = ''Trollop is a commandline option parser for Ruby that just -gets out of your way. One line of code per option is all you need to write. -For that, you get a nice automatically-generated help page, robust option -parsing, command subcompletion, and sensible defaults for everything you don't -specify.''; - }; - name = ''trollop-2.0''; - requiredGems = [ ]; - sha256 = ''0iz5k7ax7a5jm9x6p81k6f4mgp48wxxb0j55ypnwxnznih8fsghz''; - }; - typhoeus_0_6_9 = { - basename = ''typhoeus''; - meta = { - description = ''Parallel HTTP library on top of libcurl multi.''; - homepage = ''https://github.com/typhoeus/typhoeus''; - longDescription = ''Like a modern code version of the mythical beast with 100 serpent heads, Typhoeus runs HTTP requests in parallel while cleanly encapsulating handling logic.''; - }; - name = ''typhoeus-0.6.9''; - requiredGems = [ g.ethon_0_7_1 ]; - sha256 = ''1j4l2zwx821hzsfqskcq47xpk6b7yzl30mhzmdrfrsrhsigmayar''; - }; - tzinfo_1_2_2 = { - basename = ''tzinfo''; - meta = { - description = ''Daylight savings aware timezone library''; - homepage = ''http://tzinfo.github.io''; - longDescription = ''TZInfo provides daylight savings aware transformations between times in different time zones.''; - }; - name = ''tzinfo-1.2.2''; - requiredGems = [ g.thread_safe_0_3_4 ]; - sha256 = ''1c01p3kg6xvy1cgjnzdfq45fggbwish8krd0h864jvbpybyx7cgx''; - }; - uglifier_2_6_0 = { - basename = ''uglifier''; - meta = { - description = ''Ruby wrapper for UglifyJS JavaScript compressor''; - homepage = ''http://github.com/lautis/uglifier''; - longDescription = ''Uglifier minifies JavaScript files by wrapping UglifyJS to be accessible in Ruby''; - }; - name = ''uglifier-2.6.0''; - requiredGems = [ g.execjs_2_2_2 g.json_1_8_1 ]; - sha256 = ''1lih36zfw8bclsbgrh2ai0b923716lv12qzpfd27i3889gfsq2xb''; - }; - unf_0_1_4 = { - basename = ''unf''; - meta = { - description = ''A wrapper library to bring Unicode Normalization Form support to Ruby/JRuby''; - homepage = ''https://github.com/knu/ruby-unf''; - longDescription = ''This is a wrapper library to bring Unicode Normalization Form support -to Ruby/JRuby. -''; - }; - name = ''unf-0.1.4''; - requiredGems = [ g.unf_ext_0_0_6 ]; - sha256 = ''0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9''; - }; - unf_ext_0_0_6 = { - basename = ''unf_ext''; - meta = { - description = ''Unicode Normalization Form support library for CRuby''; - homepage = ''https://github.com/knu/ruby-unf_ext''; - longDescription = ''Unicode Normalization Form support library for CRuby''; - }; - name = ''unf_ext-0.0.6''; - requiredGems = [ ]; - sha256 = ''07zbmkzcid6pzdqgla3456ipfdka7j1v4hsx1iaa8rbnllqbmkdg''; - }; - uuid_2_3_7 = { - basename = ''uuid''; - meta = { - description = ''UUID generator''; - homepage = ''http://github.com/assaf/uuid''; - longDescription = ''UUID generator for producing universally unique identifiers based on RFC 4122 -(http://www.ietf.org/rfc/rfc4122.txt). -''; - }; - name = ''uuid-2.3.7''; - requiredGems = [ g.macaddr_1_7_1 ]; - sha256 = ''04q10an3v40zwjihvdwm23fw6vl39fbkhdiwfw78a51ym9airnlp''; - }; - webrick_1_3_1 = { - basename = ''webrick''; - meta = { - description = ''WEBrick is an HTTP server toolkit that can be configured as an HTTPS server,''; - homepage = ''http://github.com/nahi/webrick''; - }; - name = ''webrick-1.3.1''; - requiredGems = [ ]; - sha256 = ''0s42mxihcl2bx0h9q0v2syl70qndydfkl39a06h9il17p895ya8g''; - }; - webrobots_0_1_1 = { - basename = ''webrobots''; - meta = { - description = ''A Ruby library to help write robots.txt compliant web robots''; - homepage = ''https://github.com/knu/webrobots''; - longDescription = ''This library helps write robots.txt compliant web robots in Ruby. -''; - }; - name = ''webrobots-0.1.1''; - requiredGems = [ ]; - sha256 = ''1jlnhhpa1mkrgsmihs2qx13z3n6xhswjnlk5a2ypyplw2id5x32n''; - }; - websocket_1_2_1 = { - basename = ''websocket''; - meta = { - description = ''Universal Ruby library to handle WebSocket protocol''; - homepage = ''http://github.com/imanel/websocket-ruby''; - longDescription = ''Universal Ruby library to handle WebSocket protocol''; - }; - name = ''websocket-1.2.1''; - requiredGems = [ ]; - sha256 = ''17mf28xp6h4gglbn1606jjrhdz9r6kyb2pr603ckadsrx31wh9p6''; - }; - xapian_full_1_2_3 = { - basename = ''xapian_full''; - meta = { - description = ''xapian-core + Ruby xapian-bindings''; - longDescription = ''Xapian bindings for Ruby without dependency on system Xapian library''; - }; - name = ''xapian-full-1.2.3''; - requiredGems = [ ]; - sha256 = ''02z0wsir38jsp5d6sqrkgv5prk8s6sdf6g2h718j2374kpnkyrxv''; - }; - xapian_ruby_1_2_17 = { - basename = ''xapian_ruby''; - meta = { - description = ''xapian libraries and ruby bindings''; - homepage = ''https://github.com/garaio/xapian-ruby''; - }; - name = ''xapian-ruby-1.2.17''; - requiredGems = [ ]; - sha256 = ''1vhqykr0b877pb8x5n3v4fb4znm92mqhijinss7mvqzfimwfbxfg''; - }; - xml_simple_1_1_2 = { - basename = ''xml_simple''; - meta = { - description = ''A simple API for XML processing.''; - homepage = ''https://github.com/maik/xml-simple''; - }; - name = ''xml-simple-1.1.2''; - requiredGems = [ ]; - sha256 = ''0ni8cbkj7l2k5pc4fs2jzp1ymxy4xqa2jc681l4y9iy9chrayddb''; - }; - yajl_ruby_1_1_0 = { - basename = ''yajl_ruby''; - meta = { - description = ''Ruby C bindings to the excellent Yajl JSON stream-based parser library.''; - homepage = ''http://github.com/brianmario/yajl-ruby''; - }; - name = ''yajl-ruby-1.1.0''; - requiredGems = [ ]; - sha256 = ''0sj46j47icb12hdhcfh76rnvddyiic5ifqzkh3kla1vcr505kf4m''; - }; - yajl_ruby_1_2_1 = { - basename = ''yajl_ruby''; - meta = { - description = ''Ruby C bindings to the excellent Yajl JSON stream-based parser library.''; - homepage = ''http://github.com/brianmario/yajl-ruby''; - }; - name = ''yajl-ruby-1.2.1''; - requiredGems = [ ]; - sha256 = ''0zvvb7i1bl98k3zkdrnx9vasq0rp2cyy5n7p9804dqs4fz9xh9vf''; - }; - }; -} diff --git a/pkgs/development/interpreters/ruby/packages.nix b/pkgs/development/interpreters/ruby/packages.nix deleted file mode 100644 index a35ccae6419..00000000000 --- a/pkgs/development/interpreters/ruby/packages.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ ruby, rubygemsFun, callPackage }: - -{ - # Nix utilities - gemFixes = callPackage ../development/interpreters/ruby/fixes.nix { }; - buildRubyGem = callPackage ../development/interpreters/ruby/gem.nix { inherit ruby; }; - loadRubyEnv = callPackage ../development/interpreters/ruby/load-ruby-env.nix { inherit ruby; }; - - # Gems - rubygems = rubygemsFun ruby; -} diff --git a/pkgs/development/libraries/v8/3.16.14.nix b/pkgs/development/libraries/v8/3.16.14.nix index 3594bd3404b..b5e1b159321 100644 --- a/pkgs/development/libraries/v8/3.16.14.nix +++ b/pkgs/development/libraries/v8/3.16.14.nix @@ -40,7 +40,6 @@ stdenv.mkDerivation rec { NIX_CFLAGS_COMPILE = "-Wno-error"; buildFlags = [ - #"LINK=g++" "-C out" "builddir=$(CURDIR)/Release" "BUILDTYPE=Release" diff --git a/pkgs/servers/monitoring/riemann-dash/default.nix b/pkgs/servers/monitoring/riemann-dash/default.nix index 295e68770b8..1afcd81d9be 100644 --- a/pkgs/servers/monitoring/riemann-dash/default.nix +++ b/pkgs/servers/monitoring/riemann-dash/default.nix @@ -1,3 +1,8 @@ -{ loadRubyEnv }: +{ bundlerEnv }: -(loadRubyEnv { gemset = ./gemset.nix; }).riemann-dash +bundlerEnv { + name = "riemann-dash-0.2.9"; + gemfile = ./Gemfile; + lockfile = ./Gemfile.lock; + gemset = ./gemset.nix; +} diff --git a/pkgs/servers/monitoring/riemann-dash/gemset.nix b/pkgs/servers/monitoring/riemann-dash/gemset.nix index 98ebdcc3059..f2e80e9aca4 100644 --- a/pkgs/servers/monitoring/riemann-dash/gemset.nix +++ b/pkgs/servers/monitoring/riemann-dash/gemset.nix @@ -1,28 +1,28 @@ { erubis = { version = "2.7.0"; - src = { + source = { type = "gem"; sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3"; }; }; multi_json = { version = "1.3.6"; - src = { + source = { type = "gem"; sha256 = "0q2zjfvd2ibds9g9nzf2p1b47fc1wqliwfywv5pw85w15lmy91yr"; }; }; rack = { version = "1.5.2"; - src = { + source = { type = "gem"; sha256 = "19szfw76cscrzjldvw30jp3461zl00w4xvw1x9lsmyp86h1g0jp6"; }; }; rack-protection = { version = "1.5.3"; - src = { + source = { type = "gem"; sha256 = "0cvb21zz7p9wy23wdav63z5qzfn4nialik22yqp6gihkgfqqrh5r"; }; @@ -32,7 +32,7 @@ }; riemann-dash = { version = "0.2.9"; - src = { + source = { type = "gem"; sha256 = "0ws5wmjbv8w9lcr3i2mdinj2qm91p6c85k6c067i67cf0p90jxq3"; }; @@ -46,14 +46,14 @@ }; sass = { version = "3.4.8"; - src = { + source = { type = "gem"; sha256 = "1ianyj2figwk314h10fkzpjql2xxi5l4njv1h0w8iyzjda85rqlp"; }; }; sinatra = { version = "1.4.5"; - src = { + source = { type = "gem"; sha256 = "0qyna3wzlnvsz69d21lxcm3ixq7db08mi08l0a88011qi4qq701s"; }; @@ -65,14 +65,14 @@ }; tilt = { version = "1.4.1"; - src = { + source = { type = "gem"; sha256 = "00sr3yy7sbqaq7cb2d2kpycajxqf1b1wr1yy33z4bnzmqii0b0ir"; }; }; webrick = { version = "1.3.1"; - src = { + source = { type = "gem"; sha256 = "0s42mxihcl2bx0h9q0v2syl70qndydfkl39a06h9il17p895ya8g"; }; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 7f526fc3e84..7a8b5c47189 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4307,7 +4307,7 @@ let defaultGemConfig = callPackage ../development/interpreters/ruby/bundler-env/default-gem-config.nix { }; buildRubyGem = callPackage ../development/interpreters/ruby/gem.nix { }; loadRubyEnv = callPackage ../development/interpreters/ruby/load-ruby-env.nix { }; - bundlerEnv = callPackage ../development/interpreters/ruby/bundler-env.nix { }; + bundlerEnv = callPackage ../development/interpreters/ruby/bundler-env { }; ruby_1_8_7 = callPackage ../development/interpreters/ruby/ruby-1.8.7.nix { }; ruby_1_9_3 = callPackage ../development/interpreters/ruby/ruby-1.9.3.nix { }; @@ -4326,8 +4326,6 @@ let ruby_2_1 = ruby_2_1_3; ruby_2_2 = ruby_2_2_0; - rubyPackages = callPackage ../development/interpreters/ruby/packages.nix { }; - rubygemsFun = ruby: builderDefsPackage (import ../development/interpreters/ruby/rubygems.nix) { inherit ruby makeWrapper; }; From 034488ec80bb5efd5e2945fed660a2e3003099f3 Mon Sep 17 00:00:00 2001 From: Charles Strahan Date: Wed, 21 Jan 2015 22:38:29 -0500 Subject: [PATCH 69/69] ruby: fixup mpdcron --- .../networking/mailreaders/sup/.bundle/config | 2 -- .../ruby/bundler-env/default-gem-config.nix | 3 +-- pkgs/tools/audio/mpdcron/Gemfile | 2 ++ pkgs/tools/audio/mpdcron/Gemfile.lock | 12 ++++++++++++ pkgs/tools/audio/mpdcron/default.nix | 15 +++++++++++---- pkgs/tools/audio/mpdcron/gemset.nix | 19 +++++++++++++++++++ 6 files changed, 45 insertions(+), 8 deletions(-) delete mode 100644 pkgs/applications/networking/mailreaders/sup/.bundle/config create mode 100644 pkgs/tools/audio/mpdcron/Gemfile create mode 100644 pkgs/tools/audio/mpdcron/Gemfile.lock create mode 100644 pkgs/tools/audio/mpdcron/gemset.nix diff --git a/pkgs/applications/networking/mailreaders/sup/.bundle/config b/pkgs/applications/networking/mailreaders/sup/.bundle/config deleted file mode 100644 index 88cb2d52935..00000000000 --- a/pkgs/applications/networking/mailreaders/sup/.bundle/config +++ /dev/null @@ -1,2 +0,0 @@ ---- -BUNDLE_NO_INSTALL: true diff --git a/pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix b/pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix index 9b9bf5d85db..7b10cd152e5 100644 --- a/pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix +++ b/pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix @@ -63,8 +63,7 @@ in "--with-xslt-include=${libxslt}/include" "--with-exslt-lib=${libxslt}/lib" "--with-exslt-include=${libxslt}/include" - "--with-iconv-dir=${libiconv}" - ]; + ] ++ lib.optional stdenv.isDarwin "--with-iconv-dir=${libiconv}"; }; pg = attrs: { diff --git a/pkgs/tools/audio/mpdcron/Gemfile b/pkgs/tools/audio/mpdcron/Gemfile new file mode 100644 index 00000000000..e0814bc4dda --- /dev/null +++ b/pkgs/tools/audio/mpdcron/Gemfile @@ -0,0 +1,2 @@ +source "https://rubygems.org" +gem "nokogiri" diff --git a/pkgs/tools/audio/mpdcron/Gemfile.lock b/pkgs/tools/audio/mpdcron/Gemfile.lock new file mode 100644 index 00000000000..e97aaf669f7 --- /dev/null +++ b/pkgs/tools/audio/mpdcron/Gemfile.lock @@ -0,0 +1,12 @@ +GEM + remote: https://rubygems.org/ + specs: + mini_portile (0.6.2) + nokogiri (1.6.5) + mini_portile (~> 0.6.0) + +PLATFORMS + ruby + +DEPENDENCIES + nokogiri diff --git a/pkgs/tools/audio/mpdcron/default.nix b/pkgs/tools/audio/mpdcron/default.nix index 535ac5378fc..d368ee321af 100644 --- a/pkgs/tools/audio/mpdcron/default.nix +++ b/pkgs/tools/audio/mpdcron/default.nix @@ -1,7 +1,14 @@ { stdenv, fetchgit, autoconf, automake, libtool, pkgconfig, glib, libdaemon, buildRubyGem -, mpd_clientlib, curl, sqlite, ruby, rubyPackages, libnotify, pandoc }: +, mpd_clientlib, curl, sqlite, ruby, bundlerEnv, libnotify, pandoc }: -stdenv.mkDerivation rec { +let + gemEnv = bundlerEnv { + name = "mpdcron-bundle"; + gemfile = ./Gemfile; + lockfile = ./Gemfile.lock; + gemset = ./gemset.nix; + }; +in stdenv.mkDerivation rec { version = "20130809"; name = "mpdcron-${version}"; @@ -20,8 +27,8 @@ stdenv.mkDerivation rec { }; buildInputs = - [ autoconf automake libtool pkgconfig glib libdaemon haskellPackages.pandoc - mpd_clientlib curl sqlite ruby /*nokogiri*/ libnotify ]; + [ autoconf automake libtool pkgconfig glib libdaemon pandoc + mpd_clientlib curl sqlite ruby gemEnv libnotify ]; preConfigure = '' ./autogen.sh diff --git a/pkgs/tools/audio/mpdcron/gemset.nix b/pkgs/tools/audio/mpdcron/gemset.nix new file mode 100644 index 00000000000..6587603fb5b --- /dev/null +++ b/pkgs/tools/audio/mpdcron/gemset.nix @@ -0,0 +1,19 @@ +{ + "mini_portile" = { + version = "0.6.2"; + source = { + type = "gem"; + sha256 = "0h3xinmacscrnkczq44s6pnhrp4nqma7k056x5wv5xixvf2wsq2w"; + }; + }; + "nokogiri" = { + version = "1.6.5"; + source = { + type = "gem"; + sha256 = "1xmxz6fa0m4p7c7ngpgz6gjgv65lzz63dsf0b6vh7gs2fkiw8j7l"; + }; + dependencies = [ + "mini_portile" + ]; + }; +} \ No newline at end of file