Merge pull request #61022 from alyssais/ruby-devdoc

ruby: install ri docs to devdoc output
This commit is contained in:
Alyssa Ross 2019-05-08 12:18:39 +00:00 committed by GitHub
commit 6ea86b733f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 52 additions and 4 deletions

View File

@ -26,7 +26,10 @@ let
ver = version;
tag = ver.gitTag;
atLeast25 = lib.versionAtLeast ver.majMin "2.5";
baseruby = self.override { useRailsExpress = false; };
baseruby = self.override {
useRailsExpress = false;
docSupport = false;
};
self = lib.makeOverridable (
{ stdenv, buildPackages, lib
, fetchurl, fetchpatch, fetchFromSavannah, fetchFromGitHub
@ -35,7 +38,7 @@ let
, openssl, opensslSupport ? true
, gdbm, gdbmSupport ? true
, ncurses, readline, cursesSupport ? true
, groff, docSupport ? false
, groff, docSupport ? true
, libyaml, yamlSupport ? true
, libffi, fiddleSupport ? true
, autoreconfHook, bison, autoconf
@ -58,6 +61,8 @@ let
# 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 (stdenv.buildPlatform != stdenv.hostPlatform) buildPackages.ruby;
@ -112,6 +117,10 @@ let
++ op (stdenv.hostPlatform != stdenv.buildPlatform)
"--with-baseruby=${buildRuby}";
preConfigure = opString docSupport ''
configureFlagsArray+=("--with-ridir=$devdoc/share/ri")
'';
# 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
@ -141,12 +150,26 @@ let
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.targetPlatform.system}
}
addEnvHooks "$hostOffset" addGemPath
addEnvHooks "$hostOffset" addRubyLibPath
EOF
'' + opString useRailsExpress ''
rbConfig=$(find $out/lib/ruby -name rbconfig.rb)
rbConfig=$(find $out/lib/ruby -name rbconfig.rb)
'' + 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 useRailsExpress ''
# Prevent the baseruby from being included in the closure.
sed -i '/^ CONFIG\["BASERUBY"\]/d' $rbConfig
sed -i "s|'--with-baseruby=${baseruby}/bin/ruby'||" $rbConfig

View 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__)