uboot: (firmwareOdroidC2/C4) don't invoke patch tool, use patches = [] instead
https://github.com/NixOS/nixpkgs/blob/master/pkgs/stdenv/generic/setup.sh#L948 this can do it nicely. Signed-off-by: Anton Arapov <anton@deadbeef.mx>
This commit is contained in:
commit
56de2bcd43
30691 changed files with 3076956 additions and 0 deletions
8
pkgs/development/interpreters/ruby/config.nix
Normal file
8
pkgs/development/interpreters/ruby/config.nix
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
# Ruby >= 2.1.0 tries to download config.{guess,sub}
|
||||
{ fetchFromSavannah }:
|
||||
|
||||
fetchFromSavannah {
|
||||
repo = "config";
|
||||
rev = "576c839acca0e082e536fd27568b90a446ce5b96";
|
||||
sha256 = "11bjngchjhj0qq0ppp8c37rfw0yhp230nvhs2jvlx15i9qbf56a0";
|
||||
}
|
||||
273
pkgs/development/interpreters/ruby/default.nix
Normal file
273
pkgs/development/interpreters/ruby/default.nix
Normal file
|
|
@ -0,0 +1,273 @@
|
|||
{ stdenv, buildPackages, lib
|
||||
, fetchurl, fetchpatch, fetchFromSavannah, fetchFromGitHub
|
||||
, zlib, openssl, gdbm, ncurses, readline, groff, libyaml, libffi, jemalloc, autoreconfHook, bison
|
||||
, autoconf, libiconv, libobjc, libunwind, Foundation
|
||||
, buildEnv, bundler, bundix
|
||||
, makeWrapper, buildRubyGem, defaultGemConfig, removeReferencesTo
|
||||
} @ args:
|
||||
|
||||
let
|
||||
op = lib.optional;
|
||||
ops = lib.optionals;
|
||||
opString = lib.optionalString;
|
||||
patchSet = import ./rvm-patchsets.nix { inherit fetchFromGitHub; };
|
||||
config = import ./config.nix { inherit fetchFromSavannah; };
|
||||
rubygems = import ./rubygems { inherit stdenv lib fetchurl; };
|
||||
|
||||
# Contains the ruby version heuristics
|
||||
rubyVersion = import ./ruby-version.nix { inherit lib; };
|
||||
|
||||
generic = { version, sha256 }: let
|
||||
ver = version;
|
||||
tag = ver.gitTag;
|
||||
atLeast30 = lib.versionAtLeast ver.majMin "3.0";
|
||||
self = lib.makeOverridable (
|
||||
{ stdenv, buildPackages, lib
|
||||
, fetchurl, fetchpatch, fetchFromSavannah, fetchFromGitHub
|
||||
, useRailsExpress ? true
|
||||
, rubygemsSupport ? true
|
||||
, zlib, zlibSupport ? true
|
||||
, openssl, opensslSupport ? true
|
||||
, gdbm, gdbmSupport ? true
|
||||
, ncurses, readline, cursesSupport ? true
|
||||
, groff, docSupport ? true
|
||||
, libyaml, yamlSupport ? true
|
||||
, libffi, fiddleSupport ? true
|
||||
, jemalloc, jemallocSupport ? false
|
||||
# By default, ruby has 3 observed references to stdenv.cc:
|
||||
#
|
||||
# - If you run:
|
||||
# ruby -e "puts RbConfig::CONFIG['configure_args']"
|
||||
# - In:
|
||||
# $out/${passthru.libPath}/${stdenv.hostPlatform.system}/rbconfig.rb
|
||||
# Or (usually):
|
||||
# $(nix-build -A ruby)/lib/ruby/2.6.0/x86_64-linux/rbconfig.rb
|
||||
# - In $out/lib/libruby.so and/or $out/lib/libruby.dylib
|
||||
, removeReferencesTo, jitSupport ? false
|
||||
, autoreconfHook, bison, autoconf
|
||||
, buildEnv, bundler, bundix
|
||||
, libiconv, libobjc, libunwind, Foundation
|
||||
, makeWrapper, buildRubyGem, defaultGemConfig
|
||||
, baseRuby ? buildPackages.ruby.override {
|
||||
useRailsExpress = false;
|
||||
docSupport = false;
|
||||
rubygemsSupport = false;
|
||||
}
|
||||
, useBaseRuby ? stdenv.hostPlatform != stdenv.buildPlatform || useRailsExpress
|
||||
}:
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "ruby";
|
||||
inherit version;
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://cache.ruby-lang.org/pub/ruby/${ver.majMin}/ruby-${ver}.tar.gz";
|
||||
inherit sha256;
|
||||
};
|
||||
|
||||
# Have `configure' avoid `/usr/bin/nroff' in non-chroot builds.
|
||||
NROFF = if docSupport then "${groff}/bin/nroff" else null;
|
||||
|
||||
outputs = [ "out" ] ++ lib.optional docSupport "devdoc";
|
||||
|
||||
nativeBuildInputs = [ autoreconfHook bison ]
|
||||
++ (op docSupport groff)
|
||||
++ op useBaseRuby baseRuby;
|
||||
buildInputs = [ autoconf ]
|
||||
++ (op fiddleSupport libffi)
|
||||
++ (ops cursesSupport [ ncurses readline ])
|
||||
++ (op zlibSupport zlib)
|
||||
++ (op opensslSupport openssl)
|
||||
++ (op gdbmSupport gdbm)
|
||||
++ (op yamlSupport libyaml)
|
||||
# Looks like ruby fails to build on darwin without readline even if curses
|
||||
# support is not enabled, so add readline to the build inputs if curses
|
||||
# support is disabled (if it's enabled, we already have it) and we're
|
||||
# running on darwin
|
||||
++ op (!cursesSupport && stdenv.isDarwin) readline
|
||||
++ ops stdenv.isDarwin [ libiconv libobjc libunwind Foundation ];
|
||||
propagatedBuildInputs = op jemallocSupport jemalloc;
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
patches =
|
||||
(import ./patchsets.nix {
|
||||
inherit patchSet useRailsExpress ops fetchpatch;
|
||||
patchLevel = ver.patchLevel;
|
||||
}).${ver.majMinTiny}
|
||||
++ op (lib.versionOlder ver.majMin "3.1") ./do-not-regenerate-revision.h.patch
|
||||
++ op (atLeast30 && useBaseRuby) ./do-not-update-gems-baseruby.patch
|
||||
++ ops (!atLeast30 && rubygemsSupport) [
|
||||
# We upgrade rubygems to a version that isn't compatible with the
|
||||
# ruby 2.7 installer. Backport the upstream fix.
|
||||
./rbinstall-new-rubygems-compat.patch
|
||||
|
||||
# Ruby prior to 3.0 has a bug the installer (tools/rbinstall.rb) but
|
||||
# the resulting error was swallowed. Newer rubygems no longer swallows
|
||||
# this error. We upgrade rubygems when rubygemsSupport is enabled, so
|
||||
# we have to fix this bug to prevent the install step from failing.
|
||||
# See https://github.com/ruby/ruby/pull/2930
|
||||
(fetchpatch {
|
||||
url = "https://github.com/ruby/ruby/commit/261d8dd20afd26feb05f00a560abd99227269c1c.patch";
|
||||
sha256 = "0wrii25cxcz2v8bgkrf7ibcanjlxwclzhayin578bf0qydxdm9qy";
|
||||
})
|
||||
];
|
||||
|
||||
postUnpack = opString rubygemsSupport ''
|
||||
rm -rf $sourceRoot/{lib,test}/rubygems*
|
||||
cp -r ${rubygems}/lib/rubygems* $sourceRoot/lib
|
||||
cp -r ${rubygems}/test/rubygems $sourceRoot/test
|
||||
'';
|
||||
|
||||
postPatch = ''
|
||||
sed -i configure.ac -e '/config.guess/d'
|
||||
cp --remove-destination ${config}/config.guess tool/
|
||||
cp --remove-destination ${config}/config.sub tool/
|
||||
'' + opString (!atLeast30) ''
|
||||
# Make the build reproducible for ruby <= 2.7
|
||||
# See https://github.com/ruby/io-console/commit/679a941d05d869f5e575730f6581c027203b7b26#diff-d8422f096931c58d4463e2489f62a228b0f24f0492950ba88c8c89a0d741cfe6
|
||||
sed -i ext/io/console/io-console.gemspec -e '/s\.date/d'
|
||||
'';
|
||||
|
||||
configureFlags = [
|
||||
(lib.enableFeature (!stdenv.hostPlatform.isStatic) "shared")
|
||||
(lib.enableFeature true "pthread")
|
||||
(lib.withFeatureAs true "soname" "ruby-${version}")
|
||||
(lib.withFeatureAs useBaseRuby "baseruby" "${baseRuby}/bin/ruby")
|
||||
(lib.enableFeature jitSupport "jit-support")
|
||||
(lib.enableFeature docSupport "install-doc")
|
||||
(lib.withFeature jemallocSupport "jemalloc")
|
||||
(lib.withFeatureAs docSupport "ridir" "${placeholder "devdoc"}/share/ri")
|
||||
] ++ ops stdenv.isDarwin [
|
||||
# on darwin, we have /usr/include/tk.h -- so the configure script detects
|
||||
# that tk is installed
|
||||
"--with-out-ext=tk"
|
||||
# on yosemite, "generating encdb.h" will hang for a very long time without this flag
|
||||
"--with-setjmp-type=setjmp"
|
||||
];
|
||||
|
||||
preConfigure = opString docSupport ''
|
||||
# rdoc creates XDG_DATA_DIR (defaulting to $HOME/.local/share) even if
|
||||
# it's not going to be used.
|
||||
export HOME=$TMPDIR
|
||||
'';
|
||||
|
||||
# fails with "16993 tests, 2229489 assertions, 105 failures, 14 errors, 89 skips"
|
||||
# mostly TZ- and patch-related tests
|
||||
# TZ- failures are caused by nix sandboxing, I didn't investigate others
|
||||
doCheck = false;
|
||||
|
||||
preInstall = ''
|
||||
# Ruby installs gems here itself now.
|
||||
mkdir -pv "$out/${passthru.gemPath}"
|
||||
export GEM_HOME="$out/${passthru.gemPath}"
|
||||
'';
|
||||
|
||||
installFlags = lib.optional docSupport "install-doc";
|
||||
# Bundler tries to create this directory
|
||||
postInstall = ''
|
||||
rbConfig=$(find $out/lib/ruby -name rbconfig.rb)
|
||||
# Remove references to the build environment from the closure
|
||||
sed -i '/^ CONFIG\["\(BASERUBY\|SHELL\|GREP\|EGREP\|MKDIR_P\|MAKEDIRS\|INSTALL\)"\]/d' $rbConfig
|
||||
# Remove unnecessary groff reference from runtime closure, since it's big
|
||||
sed -i '/NROFF/d' $rbConfig
|
||||
${
|
||||
lib.optionalString (!jitSupport) ''
|
||||
# Get rid of the CC runtime dependency
|
||||
${removeReferencesTo}/bin/remove-references-to \
|
||||
-t ${stdenv.cc} \
|
||||
$out/lib/libruby*
|
||||
${removeReferencesTo}/bin/remove-references-to \
|
||||
-t ${stdenv.cc} \
|
||||
$rbConfig
|
||||
sed -i '/CC_VERSION_MESSAGE/d' $rbConfig
|
||||
''
|
||||
}
|
||||
# Remove unnecessary external intermediate files created by gems
|
||||
extMakefiles=$(find $out/lib/ruby/gems -name Makefile)
|
||||
for makefile in $extMakefiles; do
|
||||
make -C "$(dirname "$makefile")" distclean
|
||||
done
|
||||
# Bundler tries to create this directory
|
||||
mkdir -p $out/nix-support
|
||||
cat > $out/nix-support/setup-hook <<EOF
|
||||
addGemPath() {
|
||||
addToSearchPath GEM_PATH \$1/${passthru.gemPath}
|
||||
}
|
||||
addRubyLibPath() {
|
||||
addToSearchPath RUBYLIB \$1/lib/ruby/site_ruby
|
||||
addToSearchPath RUBYLIB \$1/lib/ruby/site_ruby/${ver.libDir}
|
||||
addToSearchPath RUBYLIB \$1/lib/ruby/site_ruby/${ver.libDir}/${stdenv.hostPlatform.system}
|
||||
}
|
||||
|
||||
addEnvHooks "$hostOffset" addGemPath
|
||||
addEnvHooks "$hostOffset" addRubyLibPath
|
||||
EOF
|
||||
'' + opString docSupport ''
|
||||
# Prevent the docs from being included in the closure
|
||||
sed -i "s|\$(DESTDIR)$devdoc|\$(datarootdir)/\$(RI_BASE_NAME)|" $rbConfig
|
||||
sed -i "s|'--with-ridir=$devdoc/share/ri'||" $rbConfig
|
||||
|
||||
# Add rbconfig shim so ri can find docs
|
||||
mkdir -p $devdoc/lib/ruby/site_ruby
|
||||
cp ${./rbconfig.rb} $devdoc/lib/ruby/site_ruby/rbconfig.rb
|
||||
'' + opString useBaseRuby ''
|
||||
# Prevent the baseruby from being included in the closure.
|
||||
${removeReferencesTo}/bin/remove-references-to \
|
||||
-t ${baseRuby} \
|
||||
$rbConfig $out/lib/libruby*
|
||||
'';
|
||||
|
||||
disallowedRequisites = op (!jitSupport) stdenv.cc.cc
|
||||
++ op useBaseRuby baseRuby;
|
||||
|
||||
meta = with lib; {
|
||||
description = "The Ruby language";
|
||||
homepage = "http://www.ruby-lang.org/en/";
|
||||
license = licenses.ruby;
|
||||
maintainers = with maintainers; [ vrthra manveru marsam ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
|
||||
passthru = rec {
|
||||
version = ver;
|
||||
rubyEngine = "ruby";
|
||||
libPath = "lib/${rubyEngine}/${ver.libDir}";
|
||||
gemPath = "lib/${rubyEngine}/gems/${ver.libDir}";
|
||||
devEnv = import ./dev.nix {
|
||||
inherit buildEnv bundler bundix;
|
||||
ruby = self;
|
||||
};
|
||||
|
||||
inherit (import ../../ruby-modules/with-packages {
|
||||
inherit lib stdenv makeWrapper buildRubyGem buildEnv;
|
||||
gemConfig = defaultGemConfig;
|
||||
ruby = self;
|
||||
}) withPackages gems;
|
||||
|
||||
# deprecated 2016-09-21
|
||||
majorVersion = ver.major;
|
||||
minorVersion = ver.minor;
|
||||
teenyVersion = ver.tiny;
|
||||
patchLevel = ver.patchLevel;
|
||||
} // lib.optionalAttrs useBaseRuby {
|
||||
inherit baseRuby;
|
||||
};
|
||||
}
|
||||
) args; in self;
|
||||
|
||||
in {
|
||||
ruby_2_7 = generic {
|
||||
version = rubyVersion "2" "7" "6" "";
|
||||
sha256 = "042xrdk7hsv4072bayz3f8ffqh61i8zlhvck10nfshllq063n877";
|
||||
};
|
||||
|
||||
ruby_3_0 = generic {
|
||||
version = rubyVersion "3" "0" "4" "";
|
||||
sha256 = "0avj4g3s2839b2y4m6pk8kid74r8nj7k0qm2rsdcwjzhg8h7rd3h";
|
||||
};
|
||||
|
||||
ruby_3_1 = generic {
|
||||
version = rubyVersion "3" "1" "2" "";
|
||||
sha256 = "0gm84ipk6mrfw94852w5h7xxk2lqrxjbnlwb88svf0lz70933131";
|
||||
};
|
||||
}
|
||||
23
pkgs/development/interpreters/ruby/dev.nix
Normal file
23
pkgs/development/interpreters/ruby/dev.nix
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
/* An environment for development that bundles ruby, bundler and bundix
|
||||
together. This avoids version conflicts where each is using a diferent
|
||||
version of each-other.
|
||||
*/
|
||||
{ buildEnv, ruby, bundler, bundix }:
|
||||
let
|
||||
bundler_ = bundler.override {
|
||||
ruby = ruby;
|
||||
};
|
||||
bundix_ = bundix.override {
|
||||
bundler = bundler_;
|
||||
};
|
||||
in
|
||||
buildEnv {
|
||||
name = "${ruby.rubyEngine}-dev-${ruby.version}";
|
||||
paths = [
|
||||
bundix_
|
||||
bundler_
|
||||
ruby
|
||||
];
|
||||
pathsToLink = [ "/bin" ];
|
||||
ignoreCollisions = true;
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
Do not regenerate revision.h
|
||||
|
||||
Ruby's makefile compares the shipped version with the git revision to regenerate
|
||||
revision.h [1], but since we don't include git in buildInputs, this comparison
|
||||
fails and it can't find $(REVISION_H).
|
||||
|
||||
[1] https://github.com/ruby/ruby/commit/97a5af62a318fcd93a4e5e4428d576c0280ddbae
|
||||
|
||||
diff -Naur ruby.old/defs/gmake.mk ruby.new/defs/gmake.mk
|
||||
--- ruby.old/defs/gmake.mk
|
||||
+++ ruby.new/defs/gmake.mk
|
||||
@@ -325,11 +325,9 @@
|
||||
|
||||
REVISION_IN_HEADER := $(shell sed -n 's/^\#define RUBY_FULL_REVISION "\(.*\)"/\1/p' $(srcdir)/revision.h 2>/dev/null)
|
||||
REVISION_LATEST := $(shell $(CHDIR) $(srcdir) && git log -1 --format=%H 2>/dev/null)
|
||||
-ifneq ($(REVISION_IN_HEADER),$(REVISION_LATEST))
|
||||
# GNU make treat the target as unmodified when its dependents get
|
||||
# updated but it is not updated, while others may not.
|
||||
$(srcdir)/revision.h: $(REVISION_H)
|
||||
-endif
|
||||
|
||||
# Query on the generated rdoc
|
||||
#
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
Do not update gems when building with base ruby
|
||||
|
||||
diff -Naur ruby.old/defs/gmake.mk ruby.new/defs/gmake.mk
|
||||
--- ruby.old/common.mk
|
||||
+++ ruby.new/common.mk
|
||||
@@ -1298,7 +1298,7 @@ update-config_files: PHONY
|
||||
config.guess config.sub
|
||||
|
||||
refresh-gems: update-bundled_gems prepare-gems
|
||||
-prepare-gems: $(HAVE_BASERUBY:yes=update-gems) $(HAVE_BASERUBY:yes=extract-gems)
|
||||
+prepare-gems:
|
||||
|
||||
update-gems$(gnumake:yes=-nongnumake): PHONY
|
||||
$(ECHO) Downloading bundled gem files...
|
||||
15
pkgs/development/interpreters/ruby/patchsets.nix
Normal file
15
pkgs/development/interpreters/ruby/patchsets.nix
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{ patchSet, useRailsExpress, ops, patchLevel, fetchpatch }:
|
||||
|
||||
{
|
||||
"2.7.6" = ops useRailsExpress [
|
||||
"${patchSet}/patches/ruby/2.7/head/railsexpress/01-fix-broken-tests-caused-by-ad.patch"
|
||||
"${patchSet}/patches/ruby/2.7/head/railsexpress/02-improve-gc-stats.patch"
|
||||
"${patchSet}/patches/ruby/2.7/head/railsexpress/03-more-detailed-stacktrace.patch"
|
||||
];
|
||||
"3.0.4" = ops useRailsExpress [
|
||||
"${patchSet}/patches/ruby/3.0/head/railsexpress/01-improve-gc-stats.patch"
|
||||
"${patchSet}/patches/ruby/3.0/head/railsexpress/02-malloc-trim.patch"
|
||||
];
|
||||
"3.1.2" = ops useRailsExpress [ # no patches yet (2021-12-25)
|
||||
];
|
||||
}
|
||||
25
pkgs/development/interpreters/ruby/rbconfig.rb
Normal file
25
pkgs/development/interpreters/ruby/rbconfig.rb
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
# This is a shim around whatever real rbconfig.rb is in the LOAD_PATH,
|
||||
# so that RbConfig::CONFIG["ridir"] can be overridden to point to the
|
||||
# custom location of the ri docs, without the main derivation having
|
||||
# those docs in its closure.
|
||||
|
||||
MY_PATH = File.realpath(__FILE__)
|
||||
|
||||
candidates = $LOAD_PATH.map { |dir| File.join(dir, "rbconfig.rb") }
|
||||
|
||||
# First, drop everything _before_ this file in the LOAD_PATH, just on
|
||||
# the off-chance somebody is composing shims like this for some reason.
|
||||
candidates.drop_while { |c| !File.exist?(c) || File.realpath(c) != MY_PATH }
|
||||
|
||||
# Now, the wrapped rbconfig.rb is the next rbconfig.rb in the LOAD_PATH
|
||||
# that isn't this same file. (Yes, duplicate LOAD_PATH entries are a
|
||||
# thing we have to deal with.)
|
||||
next_rbconfig = candidates.find { |c|
|
||||
File.exist?(c) && File.realpath(c) != MY_PATH
|
||||
}
|
||||
|
||||
# Load the wrapped rbconfig.rb
|
||||
require next_rbconfig
|
||||
|
||||
# Now we have RbConfig, and can modify it for our own ends.
|
||||
RbConfig::CONFIG["ridir"] = File.expand_path("../../../share/ri", __dir__)
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
From 8e85d27f9ccfe152fc1b891c19f125915a907493 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Tue, 1 Oct 2019 12:03:33 +0200
|
||||
Subject: [PATCH] Use `Gem::Package` like object instead of monkey patching.
|
||||
|
||||
1. This is similar to what RubyGems does and it is less magic [[1]].
|
||||
2. It avoids deprecated code paths in RubyGems [[2]].
|
||||
|
||||
[1]: https://github.com/rubygems/rubygems/blob/92892bbc3adba86a90756c385433835f6761b8da/lib/rubygems/installer.rb#L151
|
||||
[2]: https://github.com/rubygems/rubygems/blob/92892bbc3adba86a90756c385433835f6761b8da/lib/rubygems/installer.rb#L187
|
||||
|
||||
(cherry picked from commit e960ef6f18a25c637c54f00c75bb6c24f8ab55d0)
|
||||
---
|
||||
tool/rbinstall.rb | 47 +++++++++++++++++++++++++++--------------------
|
||||
1 file changed, 27 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
|
||||
index 060390626f..28ae8c409a 100755
|
||||
--- a/tool/rbinstall.rb
|
||||
+++ b/tool/rbinstall.rb
|
||||
@@ -710,28 +710,34 @@ def remove_prefix(prefix, string)
|
||||
end
|
||||
end
|
||||
|
||||
- class UnpackedInstaller < Gem::Installer
|
||||
- module DirPackage
|
||||
- def extract_files(destination_dir, pattern = "*")
|
||||
- path = File.dirname(@gem.path)
|
||||
- return if path == destination_dir
|
||||
- File.chmod(0700, destination_dir)
|
||||
- mode = pattern == "bin/*" ? $script_mode : $data_mode
|
||||
- spec.files.each do |f|
|
||||
- src = File.join(path, f)
|
||||
- dest = File.join(without_destdir(destination_dir), f)
|
||||
- makedirs(dest[/.*(?=\/)/m])
|
||||
- install src, dest, :mode => mode
|
||||
- end
|
||||
- File.chmod($dir_mode, destination_dir)
|
||||
+ class DirPackage
|
||||
+ attr_reader :spec
|
||||
+
|
||||
+ attr_accessor :dir_mode
|
||||
+ attr_accessor :prog_mode
|
||||
+ attr_accessor :data_mode
|
||||
+
|
||||
+ def initialize(spec)
|
||||
+ @spec = spec
|
||||
+ @src_dir = File.dirname(@spec.loaded_from)
|
||||
+ end
|
||||
+
|
||||
+ def extract_files(destination_dir, pattern = "*")
|
||||
+ path = @src_dir
|
||||
+ return if path == destination_dir
|
||||
+ File.chmod(0700, destination_dir)
|
||||
+ mode = pattern == "bin/*" ? $script_mode : $data_mode
|
||||
+ spec.files.each do |f|
|
||||
+ src = File.join(path, f)
|
||||
+ dest = File.join(without_destdir(destination_dir), f)
|
||||
+ makedirs(dest[/.*(?=\/)/m])
|
||||
+ install src, dest, :mode => mode
|
||||
end
|
||||
+ File.chmod($dir_mode, destination_dir)
|
||||
end
|
||||
+ end
|
||||
|
||||
- def initialize(spec, *options)
|
||||
- super(spec.loaded_from, *options)
|
||||
- @package.extend(DirPackage).spec = spec
|
||||
- end
|
||||
-
|
||||
+ class UnpackedInstaller < Gem::Installer
|
||||
def write_cache_file
|
||||
end
|
||||
|
||||
@@ -890,7 +896,8 @@ def install_default_gem(dir, srcdir)
|
||||
if File.directory?(ext = "#{gem_ext_dir}/#{spec.full_name}")
|
||||
spec.extensions[0] ||= "-"
|
||||
end
|
||||
- ins = RbInstall::UnpackedInstaller.new(spec, options)
|
||||
+ package = RbInstall::DirPackage.new spec
|
||||
+ ins = RbInstall::UnpackedInstaller.new(package, options)
|
||||
puts "#{INDENT}#{spec.name} #{spec.version}"
|
||||
ins.install
|
||||
File.chmod($data_mode, File.join(install_dir, "specifications", "#{spec.full_name}.gemspec"))
|
||||
--
|
||||
2.35.1
|
||||
|
||||
63
pkgs/development/interpreters/ruby/ruby-version.nix
Normal file
63
pkgs/development/interpreters/ruby/ruby-version.nix
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
# Contains the ruby version heuristics
|
||||
{ lib }:
|
||||
with lib;
|
||||
let
|
||||
# The returned set should be immutable
|
||||
rubyVersion = major: minor: tiny: tail:
|
||||
rec {
|
||||
inherit major minor tiny tail;
|
||||
|
||||
# Contains the patch number "223" if tail is "p223" or null
|
||||
patchLevel =
|
||||
let
|
||||
p = removePrefix "p" tail;
|
||||
isPosInt = num:
|
||||
0 == stringLength
|
||||
(replaceStrings
|
||||
["0" "1" "2" "3" "4" "5" "6" "7" "8" "9"]
|
||||
["" "" "" "" "" "" "" "" "" "" ]
|
||||
num);
|
||||
in
|
||||
if hasPrefix "p" tail && isPosInt p then p
|
||||
else null;
|
||||
|
||||
# Shortcuts
|
||||
majMin = "${major}.${minor}";
|
||||
majMinTiny = "${major}.${minor}.${tiny}";
|
||||
|
||||
# Ruby separates lib and gem folders by ABI version which isn't very
|
||||
# consistent.
|
||||
libDir =
|
||||
if versionAtLeast majMinTiny "2.1.0" then
|
||||
"${majMin}.0"
|
||||
else if versionAtLeast majMinTiny "2.0.0" then
|
||||
"2.0.0"
|
||||
else if versionAtLeast majMinTiny "1.9.1" then
|
||||
"1.9.1"
|
||||
else
|
||||
throw "version ${majMinTiny} is not supported";
|
||||
|
||||
# How ruby releases are tagged on github.com/ruby/ruby
|
||||
gitTag =
|
||||
let
|
||||
base = "v${major}_${minor}_${tiny}";
|
||||
in
|
||||
if patchLevel != null then
|
||||
"${base}_${patchLevel}"
|
||||
else
|
||||
if tail != "" then
|
||||
"${base}_${tail}"
|
||||
else
|
||||
base;
|
||||
|
||||
# Implements the builtins.toString interface.
|
||||
__toString = self:
|
||||
self.majMinTiny + (
|
||||
if self.patchLevel != null then
|
||||
"-p${self.patchLevel}"
|
||||
else if self.tail != "" then
|
||||
"-${self.tail}"
|
||||
else "");
|
||||
};
|
||||
in
|
||||
rubyVersion
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
From a6485cfcdf51ff8be452980f93cebfea97f34dec Mon Sep 17 00:00:00 2001
|
||||
From: zimbatm <zimbatm@zimbatm.com>
|
||||
Date: Wed, 21 Sep 2016 09:32:34 +0100
|
||||
Subject: [PATCH 1/3] add post-extract hook
|
||||
|
||||
Allows nix to execute scripts just after the gem extraction
|
||||
---
|
||||
lib/rubygems/installer.rb | 10 +++++++++-
|
||||
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb
|
||||
index d26b1e88..bf18fb7f 100644
|
||||
--- a/lib/rubygems/installer.rb
|
||||
+++ b/lib/rubygems/installer.rb
|
||||
@@ -848,7 +848,15 @@ TEXT
|
||||
# Ensures that files can't be installed outside the gem directory.
|
||||
|
||||
def extract_files
|
||||
- @package.extract_files gem_dir
|
||||
+ ret = @package.extract_files gem_dir
|
||||
+ if ENV['NIX_POST_EXTRACT_FILES_HOOK']
|
||||
+ puts
|
||||
+ puts "running NIX_POST_EXTRACT_FILES_HOOK #{ENV['NIX_POST_EXTRACT_FILES_HOOK']} #{gem_dir}"
|
||||
+ system(ENV['NIX_POST_EXTRACT_FILES_HOOK'], gem_dir.to_s)
|
||||
+ puts "running NIX_POST_EXTRACT_FILES_HOOK done"
|
||||
+ puts
|
||||
+ end
|
||||
+ ret
|
||||
end
|
||||
|
||||
##
|
||||
--
|
||||
2.21.0
|
||||
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
From 2e1328bcdddd35e557eabdff83ac07f3591dc693 Mon Sep 17 00:00:00 2001
|
||||
From: zimbatm <zimbatm@zimbatm.com>
|
||||
Date: Wed, 21 Sep 2016 19:37:05 +0100
|
||||
Subject: [PATCH 2/3] binaries with env shebang
|
||||
|
||||
By default, don't point to the absolute ruby derivation path. As a user
|
||||
installing a gem in the home, it would freeze the selected ruby version
|
||||
to the currently-installed ruby derivation.
|
||||
---
|
||||
lib/rubygems/dependency_installer.rb | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb
|
||||
index 34620860..00ab31d9 100644
|
||||
--- a/lib/rubygems/dependency_installer.rb
|
||||
+++ b/lib/rubygems/dependency_installer.rb
|
||||
@@ -18,7 +18,7 @@ class Gem::DependencyInstaller
|
||||
extend Gem::Deprecate
|
||||
|
||||
DEFAULT_OPTIONS = { # :nodoc:
|
||||
- :env_shebang => false,
|
||||
+ :env_shebang => true,
|
||||
:document => %w[ri],
|
||||
:domain => :both, # HACK dup
|
||||
:force => false,
|
||||
--
|
||||
2.21.0
|
||||
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
From d69249d0ff210316121b44d971ddd2439b1bc393 Mon Sep 17 00:00:00 2001
|
||||
From: zimbatm <zimbatm@zimbatm.com>
|
||||
Date: Wed, 21 Sep 2016 09:40:39 +0100
|
||||
Subject: [PATCH 3/3] gem install default to user
|
||||
|
||||
Default to not installing gems to the read-only system derivation.
|
||||
---
|
||||
lib/rubygems/path_support.rb | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/rubygems/path_support.rb b/lib/rubygems/path_support.rb
|
||||
index ed680d65..749b9ea6 100644
|
||||
--- a/lib/rubygems/path_support.rb
|
||||
+++ b/lib/rubygems/path_support.rb
|
||||
@@ -23,7 +23,7 @@ class Gem::PathSupport
|
||||
# hashtable, or defaults to ENV, the system environment.
|
||||
#
|
||||
def initialize(env)
|
||||
- @home = env["GEM_HOME"] || Gem.default_dir
|
||||
+ @home = env["GEM_HOME"] || Gem.user_dir
|
||||
|
||||
if File::ALT_SEPARATOR
|
||||
@home = @home.gsub(File::ALT_SEPARATOR, File::SEPARATOR)
|
||||
--
|
||||
2.21.0
|
||||
|
||||
30
pkgs/development/interpreters/ruby/rubygems/default.nix
Normal file
30
pkgs/development/interpreters/ruby/rubygems/default.nix
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{ stdenv, lib, fetchurl }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "rubygems";
|
||||
version = "3.2.26";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://rubygems.org/rubygems/rubygems-${version}.tgz";
|
||||
sha256 = "sha256-9wa6lOWnua8zBblQKRgjjiTVPYp2TW0n7XOvgW7u1e8=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
./0001-add-post-extract-hook.patch
|
||||
./0002-binaries-with-env-shebang.patch
|
||||
./0003-gem-install-default-to-user.patch
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
cp -r . $out
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Package management framework for Ruby";
|
||||
homepage = "https://rubygems.org/";
|
||||
license = with licenses; [ mit /* or */ ruby ];
|
||||
maintainers = with maintainers; [ zimbatm ];
|
||||
};
|
||||
}
|
||||
8
pkgs/development/interpreters/ruby/rvm-patchsets.nix
Normal file
8
pkgs/development/interpreters/ruby/rvm-patchsets.nix
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{ fetchFromGitHub }:
|
||||
|
||||
fetchFromGitHub {
|
||||
owner = "skaes";
|
||||
repo = "rvm-patchsets";
|
||||
rev = "0251817e2b9d5f73370bbbb12fdf7f7089bd1ac3";
|
||||
sha256 = "1biiq5xzzdfb4hr1sgmx14i2nr05xa9w21pc7dl8c5n4f2ilg8ss";
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue