diff options
author | Alyssa Ross <hi@alyssa.is> | 2019-05-06 00:38:52 +0200 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2019-06-18 16:09:28 +0000 |
commit | b81026455e228038631eeaf4e9c1ecc792f54c5c (patch) | |
tree | d0fc6982279fb62b06c97143ba87daa22254646b | |
parent | ee0c3e4f167715c3d3a5073523711252a6f1426f (diff) | |
download | nixlib-b81026455e228038631eeaf4e9c1ecc792f54c5c.tar nixlib-b81026455e228038631eeaf4e9c1ecc792f54c5c.tar.gz nixlib-b81026455e228038631eeaf4e9c1ecc792f54c5c.tar.bz2 nixlib-b81026455e228038631eeaf4e9c1ecc792f54c5c.tar.lz nixlib-b81026455e228038631eeaf4e9c1ecc792f54c5c.tar.xz nixlib-b81026455e228038631eeaf4e9c1ecc792f54c5c.tar.zst nixlib-b81026455e228038631eeaf4e9c1ecc792f54c5c.zip |
ruby: install ri docs to devdoc output
This allows getting access to Ruby documentation through ri by doing nix-shell -p ruby ruby.devdoc or by installing the ruby.devdoc package. A setup hook will add a shim to LOAD_PATH to point ri to the devdoc output instead of out.
-rw-r--r-- | nixpkgs/pkgs/development/interpreters/ruby/default.nix | 22 | ||||
-rw-r--r-- | nixpkgs/pkgs/development/interpreters/ruby/rbconfig.rb | 25 |
2 files changed, 46 insertions, 1 deletions
diff --git a/nixpkgs/pkgs/development/interpreters/ruby/default.nix b/nixpkgs/pkgs/development/interpreters/ruby/default.nix index ad117054632a..10b7ea7d8a90 100644 --- a/nixpkgs/pkgs/development/interpreters/ruby/default.nix +++ b/nixpkgs/pkgs/development/interpreters/ruby/default.nix @@ -63,6 +63,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; @@ -126,6 +128,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 @@ -155,12 +161,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) + '' + 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 diff --git a/nixpkgs/pkgs/development/interpreters/ruby/rbconfig.rb b/nixpkgs/pkgs/development/interpreters/ruby/rbconfig.rb new file mode 100644 index 000000000000..eeba930b54b7 --- /dev/null +++ b/nixpkgs/pkgs/development/interpreters/ruby/rbconfig.rb @@ -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__) |