2017-10-29 20:51:16 +01:00
{ stdenv , buildPackages , lib
2019-09-07 15:02:40 +02:00
, fetchurl , fetchpatch , fetchFromSavannah , fetchFromGitHub
2021-02-12 21:29:10 +01:00
, zlib , openssl , gdbm , ncurses , readline , groff , libyaml , libffi , jemalloc , autoreconfHook , bison
2018-05-04 19:56:38 +02:00
, autoconf , libiconv , libobjc , libunwind , Foundation
, buildEnv , bundler , bundix
2019-12-12 16:38:55 +01:00
, makeWrapper , buildRubyGem , defaultGemConfig , removeReferencesTo
2015-09-26 15:25:01 +02:00
} @ args :
let
2016-09-20 18:41:16 +02:00
op = lib . optional ;
ops = lib . optionals ;
opString = lib . optionalString ;
2015-09-26 15:25:01 +02:00
patchSet = import ./rvm-patchsets.nix { inherit fetchFromGitHub ; } ;
config = import ./config.nix { inherit fetchFromSavannah ; } ;
2021-07-16 06:20:00 +02:00
rubygems = import ./rubygems { inherit stdenv lib fetchurl ; } ;
2015-09-26 15:25:01 +02:00
2016-09-20 18:41:16 +02:00
# Contains the ruby version heuristics
rubyVersion = import ./ruby-version.nix { inherit lib ; } ;
2017-10-29 20:51:16 +01:00
# Needed during postInstall
buildRuby =
if stdenv . hostPlatform == stdenv . buildPlatform
then " $ o u t / b i n / r u b y "
else " ${ buildPackages . ruby } / b i n / r u b y " ;
2016-09-20 18:41:16 +02:00
generic = { version , sha256 }: let
ver = version ;
tag = ver . gitTag ;
2019-12-25 10:20:00 +01:00
atLeast27 = lib . versionAtLeast ver . majMin " 2 . 7 " ;
2020-12-29 05:20:00 +01:00
atLeast30 = lib . versionAtLeast ver . majMin " 3 . 0 " ;
2019-05-06 00:37:43 +02:00
baseruby = self . override {
useRailsExpress = false ;
docSupport = false ;
2019-05-18 19:45:38 +02:00
rubygemsSupport = false ;
2019-05-06 00:37:43 +02:00
} ;
2015-09-26 15:25:01 +02:00
self = lib . makeOverridable (
2018-05-04 19:56:38 +02:00
{ stdenv , buildPackages , lib
2019-09-07 15:02:40 +02:00
, fetchurl , fetchpatch , fetchFromSavannah , fetchFromGitHub
2015-09-26 15:25:01 +02:00
, useRailsExpress ? true
2019-05-18 19:45:38 +02:00
, rubygemsSupport ? true
2015-09-26 15:25:01 +02:00
, zlib , zlibSupport ? true
, openssl , opensslSupport ? true
, gdbm , gdbmSupport ? true
, ncurses , readline , cursesSupport ? true
2019-05-06 00:39:16 +02:00
, groff , docSupport ? true
2015-09-26 15:25:01 +02:00
, libyaml , yamlSupport ? true
, libffi , fiddleSupport ? true
2021-02-12 21:29:10 +01:00
, jemalloc , jemallocSupport ? false
2020-06-07 09:19:16 +02:00
# By default, ruby has 3 observed references to stdenv.cc:
#
# - If you run:
# ruby -e "puts RbConfig::CONFIG['configure_args']"
# - In:
2021-03-06 23:24:04 +01:00
# $out/${passthru.libPath}/${stdenv.hostPlatform.system}/rbconfig.rb
2020-06-07 09:19:16 +02:00
# 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
2021-04-01 06:20:00 +02:00
, removeReferencesTo , jitSupport ? false
2015-09-26 15:25:01 +02:00
, autoreconfHook , bison , autoconf
2018-05-04 19:56:38 +02:00
, buildEnv , bundler , bundix
, libiconv , libobjc , libunwind , Foundation
2019-05-18 19:45:38 +02:00
, makeWrapper , buildRubyGem , defaultGemConfig
2015-09-26 15:25:01 +02:00
} :
2019-04-28 14:30:52 +02:00
stdenv . mkDerivation rec {
2019-08-13 23:52:01 +02:00
pname = " r u b y " ;
inherit version ;
2019-04-28 14:30:52 +02:00
src = if useRailsExpress then fetchFromGitHub {
2015-09-26 15:25:01 +02:00
owner = " r u b y " ;
repo = " r u b y " ;
rev = tag ;
sha256 = sha256 . git ;
} else fetchurl {
2018-12-25 20:25:45 +01:00
url = " h t t p s : / / c a c h e . r u b y - l a n g . o r g / p u b / r u b y / ${ ver . majMin } / r u b y - ${ ver } . t a r . g z " ;
2015-09-26 15:25:01 +02:00
sha256 = sha256 . src ;
} ;
# Have `configure' avoid `/usr/bin/nroff' in non-chroot builds.
2018-02-13 21:11:17 +01:00
NROFF = if docSupport then " ${ groff } / b i n / n r o f f " else null ;
2015-09-26 15:25:01 +02:00
2019-05-06 00:38:52 +02:00
outputs = [ " o u t " ] ++ lib . optional docSupport " d e v d o c " ;
2018-12-11 09:01:58 +01:00
nativeBuildInputs = [ autoreconfHook bison ]
++ ( op docSupport groff )
++ op ( stdenv . buildPlatform != stdenv . hostPlatform ) buildPackages . ruby ;
2019-12-28 12:29:24 +01:00
buildInputs = [ autoconf ]
++ ( op fiddleSupport libffi )
2015-09-26 15:25:01 +02:00
++ ( ops cursesSupport [ ncurses readline ] )
++ ( op zlibSupport zlib )
++ ( op opensslSupport openssl )
++ ( op gdbmSupport gdbm )
++ ( op yamlSupport libyaml )
2021-02-12 21:29:10 +01:00
++ ( op jemallocSupport jemalloc )
2015-09-26 15:25:01 +02:00
# 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
2018-05-04 19:56:38 +02:00
++ op ( ! cursesSupport && stdenv . isDarwin ) readline
++ ops stdenv . isDarwin [ libiconv libobjc libunwind Foundation ] ;
2015-09-26 15:25:01 +02:00
enableParallelBuilding = true ;
2016-03-02 11:05:01 +01:00
patches =
( import ./patchsets.nix {
2019-09-07 15:02:40 +02:00
inherit patchSet useRailsExpress ops fetchpatch ;
2016-09-20 18:41:16 +02:00
patchLevel = ver . patchLevel ;
2020-12-29 05:20:00 +01:00
} ) . ${ ver . majMinTiny }
++ op atLeast27 ./do-not-regenerate-revision.h.patch
2021-04-20 11:12:37 +02:00
++ op ( atLeast30 && useRailsExpress ) ./do-not-update-gems-baseruby.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
++ op ( ! atLeast30 && rubygemsSupport )
( fetchpatch {
url = " h t t p s : / / g i t h u b . c o m / r u b y / r u b y / c o m m i t / 2 6 1 d 8 d d 2 0 a f d 2 6 f e b 0 5 f 0 0 a 5 6 0 a b d 9 9 2 2 7 2 6 9 c 1 c . p a t c h " ;
sha256 = " 0 w r i i 2 5 c x c z 2 v 8 b g k r f 7 i b c a n j l x w c l z h a y i n 5 7 8 b f 0 q y d x d m 9 q y " ;
} ) ;
2015-09-26 15:25:01 +02:00
2019-05-18 19:45:38 +02:00
postUnpack = opString rubygemsSupport ''
2019-05-19 17:15:07 +02:00
rm - rf $ sourceRoot / { lib , test } /rubygems *
cp - r $ { rubygems } /lib/rubygems * $ sourceRoot/lib
cp - r $ { rubygems } /test/rubygems $ sourceRoot/test
2015-09-26 15:25:01 +02:00
'' ;
2019-12-28 12:29:24 +01:00
postPatch = ''
2018-01-02 10:50:37 +01:00
sed - i configure . ac - e ' /config.guess/d '
2018-10-18 03:05:14 +02:00
cp - - remove-destination $ { config } /config.guess tool /
cp - - remove-destination $ { config } /config.sub tool /
2020-12-29 05:20:00 +01:00
'' + o p S t r i n g ( ! a t L e a s t 3 0 ) ''
2020-10-25 15:48:37 +01:00
# 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 '
2015-11-16 18:10:20 +01:00
'' ;
2015-09-26 15:25:01 +02:00
2020-05-08 08:36:01 +02:00
configureFlags = [ " - - e n a b l e - s h a r e d " " - - e n a b l e - p t h r e a d " " - - w i t h - s o n a m e = r u b y - ${ version } " ]
2015-09-26 15:25:01 +02:00
++ op useRailsExpress " - - w i t h - b a s e r u b y = ${ baseruby } / b i n / r u b y "
2020-06-07 09:19:16 +02:00
++ op ( ! jitSupport ) " - - d i s a b l e - j i t - s u p p o r t "
2016-12-27 18:55:10 +01:00
++ op ( ! docSupport ) " - - d i s a b l e - i n s t a l l - d o c "
2021-02-12 21:29:10 +01:00
++ op ( jemallocSupport ) " - - w i t h - j e m a l l o c "
2015-09-26 15:25:01 +02:00
++ ops stdenv . isDarwin [
# on darwin, we have /usr/include/tk.h -- so the configure script detects
# that tk is installed
" - - w i t h - o u t - e x t = t k "
# on yosemite, "generating encdb.h" will hang for a very long time without this flag
" - - w i t h - s e t j m p - t y p e = s e t j m p "
2017-10-29 20:51:16 +01:00
]
++ op ( stdenv . hostPlatform != stdenv . buildPlatform )
" - - w i t h - b a s e r u b y = ${ buildRuby } " ;
2015-09-26 15:25:01 +02:00
2019-05-06 00:38:52 +02:00
preConfigure = opString docSupport ''
configureFlagsArray + = ( " - - w i t h - r i d i r = $ d e v d o c / s h a r e / r i " )
2020-12-29 05:20:00 +01:00
# rdoc creates XDG_DATA_DIR (defaulting to $HOME/.local/share) even if
# it's not going to be used.
export HOME = $ TMPDIR
2019-05-06 00:38:52 +02:00
'' ;
Merge staging-next into master (#44009)
* substitute(): --subst-var was silently coercing to "" if the variable does not exist.
* libffi: simplify using `checkInputs`
* pythonPackges.hypothesis, pythonPackages.pytest: simpify dependency cycle fix
* utillinux: 2.32 -> 2.32.1
https://lkml.org/lkml/2018/7/16/532
* busybox: 1.29.0 -> 1.29.1
* bind: 9.12.1-P2 -> 9.12.2
https://ftp.isc.org/isc/bind9/9.12.2/RELEASE-NOTES-bind-9.12.2.html
* curl: 7.60.0 -> 7.61.0
* gvfs: make tests run, but disable
* ilmbase: disable tests on i686. Spooky!
* mdds: fix tests
* git: disable checks as tests are run in installcheck
* ruby: disable tests
* libcommuni: disable checks as tests are run in installcheck
* librdf: make tests run, but disable
* neon, neon_0_29: make tests run, but disable
* pciutils: 3.6.0 -> 3.6.1
Semi-automatic update generated by https://github.com/ryantm/nixpkgs-update tools. This update was made based on information from https://repology.org/metapackage/pciutils/versions.
* mesa: more include fixes
mostly from void-linux (thanks!)
* npth: 1.5 -> 1.6
minor bump
* boost167: Add lockfree next_prior patch
* stdenv: cleanup darwin bootstrapping
Also gets rid of the full python and some of it's dependencies in the
stdenv build closure.
* Revert "pciutils: use standardized equivalent for canonicalize_file_name"
This reverts commit f8db20fb3ae382eba1ba2b160fe24739f43c0bd7.
Patching should no longer be needed with 3.6.1.
* binutils-wrapper: Try to avoid adding unnecessary -L flags
(cherry picked from commit f3758258b8895508475caf83e92bfb236a27ceb9)
Signed-off-by: Domen Kožar <domen@dev.si>
* libffi: don't check on darwin
libffi usages in stdenv broken darwin. We need to disable doCheck for that case.
* "rm $out/share/icons/hicolor/icon-theme.cache" -> hicolor-icon-theme setup-hook
* python.pkgs.pytest: setupHook to prevent creation of .pytest-cache folder, fixes #40273
When `py.test` was run with a folder as argument, it would not only
search for tests in that folder, but also create a .pytest-cache folder.
Not only is this state we don't want, but it was also causing
collisions.
* parity-ui: fix after merge
* python.pkgs.pytest-flake8: disable test, fix build
* Revert "meson: 0.46.1 -> 0.47.0"
With meson 0.47.0 (or 0.47.1, or git)
things are very wrong re:rpath handling
resulting in at best missing libs but
even corrupt binaries :(.
When we run patchelf it masks the problem
by removing obviously busted paths.
Which is probably why this wasn't noticed immediately.
Unfortunately the binary already
has a long series of paths scribbled
in a space intended for a much smaller string;
in my testing it was something like
lengths were 67 with 300+ written to it.
I think we've reported the relevant issues upstream,
but unfortunately it appears our patches
are what introduces the overwrite/corruption
(by no longer being correct in what they assume)
This doesn't look so bad to fix but it's
not something I can spend more time on
at the moment.
--
Interestingly the overwritten string data
(because it is scribbled past the bounds)
remains in the binary and is why we're suddenly
seeing unexpected references in various builds
-- notably this is is the reason we're
seeing the "extra-utils" breakage
that entirely crippled NixOS on master
(and probably on staging before?).
Fixes #43650.
This reverts commit 305ac4dade5758c58e8ab1666ad0197fd305828d.
(cherry picked from commit 273d68eff8f7b6cd4ebed3718e5078a0f43cb55d)
Signed-off-by: Domen Kožar <domen@dev.si>
2018-07-24 16:04:48 +02:00
# 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 ;
2018-02-20 17:16:16 +01:00
preInstall = ''
# Ruby installs gems here itself now.
mkdir - pv " $ o u t / ${ passthru . gemPath } "
export GEM_HOME = " $ o u t / ${ passthru . gemPath } "
'' ;
2021-01-23 14:15:07 +01:00
installFlags = lib . optional docSupport " i n s t a l l - d o c " ;
2015-09-26 15:25:01 +02:00
# Bundler tries to create this directory
postInstall = ''
2021-04-01 06:20:00 +02:00
rbConfig = $ ( find $ out/lib/ruby - name rbconfig . rb )
2016-10-31 22:39:44 +01:00
# Remove unnecessary groff reference from runtime closure, since it's big
2021-04-01 06:20:00 +02:00
sed - i ' /NROFF/d ' $ rbConfig
2019-12-12 16:46:04 +01:00
$ {
2020-06-07 09:19:16 +02:00
lib . optionalString ( ! jitSupport ) ''
2019-12-12 16:38:55 +01:00
# Get rid of the CC runtime dependency
$ { removeReferencesTo } /bin/remove-references-to \
- t $ { stdenv . cc } \
2019-12-12 16:46:04 +01:00
$ out/lib/libruby *
2020-06-07 09:19:16 +02:00
$ { removeReferencesTo } /bin/remove-references-to \
- t $ { stdenv . cc } \
2021-04-01 06:20:00 +02:00
$ rbConfig
sed - i ' /CC_VERSION_MESSAGE/d ' $ rbConfig
2019-12-12 16:46:04 +01:00
''
}
2015-09-26 15:25:01 +02:00
# 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 }
}
2019-05-06 00:38:52 +02:00
addRubyLibPath ( ) {
addToSearchPath RUBYLIB \ $ 1/lib/ruby/site_ruby
addToSearchPath RUBYLIB \ $ 1/lib/ruby/site_ruby / $ { ver . libDir }
2021-03-06 23:24:04 +01:00
addToSearchPath RUBYLIB \ $ 1/lib/ruby/site_ruby / $ { ver . libDir } / $ { stdenv . hostPlatform . system }
2019-05-06 00:38:52 +02:00
}
2015-09-26 15:25:01 +02:00
2017-08-11 00:22:07 +02:00
addEnvHooks " $ h o s t O f f s e t " addGemPath
2019-05-06 00:38:52 +02:00
addEnvHooks " $ h o s t O f f s e t " addRubyLibPath
2015-09-26 15:25:01 +02:00
EOF
2019-05-06 00:38:52 +02:00
'' + o p S t r i n g d o c S u p p o r t ''
# Prevent the docs from being included in the closure
sed - i " s | \$ ( D E S T D I R ) $ d e v d o c | \$ ( d a t a r o o t d i r ) / \$ ( R I _ B A S E _ N A M E ) | " $ rbConfig
sed - i " s | ' - - w i t h - r i d i r = $ d e v d o c / s h a r e / r i ' | | " $ 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
'' + o p S t r i n g u s e R a i l s E x p r e s s ''
2015-09-26 15:25:01 +02:00
# Prevent the baseruby from being included in the closure.
sed - i ' / ^ CONFIG \ [ " B A S E R U B Y " \ ] /d ' $ rbConfig
sed - i " s | ' - - w i t h - b a s e r u b y = ${ baseruby } / b i n / r u b y ' | | " $ rbConfig
'' ;
2020-11-12 11:29:22 +01:00
disallowedRequisites = op ( ! jitSupport ) stdenv . cc . cc ;
2021-01-23 14:15:07 +01:00
meta = with lib ; {
2015-09-26 15:25:01 +02:00
description = " T h e R u b y l a n g u a g e " ;
2020-04-01 03:11:51 +02:00
homepage = " h t t p : / / w w w . r u b y - l a n g . o r g / e n / " ;
2017-09-08 06:07:39 +02:00
license = licenses . ruby ;
2020-10-03 06:20:00 +02:00
maintainers = with maintainers ; [ vrthra manveru marsam ] ;
2017-09-08 06:07:39 +02:00
platforms = platforms . all ;
2015-09-26 15:25:01 +02:00
} ;
passthru = rec {
2016-09-20 18:41:16 +02:00
version = ver ;
2015-09-26 15:25:01 +02:00
rubyEngine = " r u b y " ;
baseRuby = baseruby ;
2016-09-20 18:41:16 +02:00
libPath = " l i b / ${ rubyEngine } / ${ ver . libDir } " ;
gemPath = " l i b / ${ rubyEngine } / g e m s / ${ ver . libDir } " ;
2016-04-17 03:52:43 +02:00
devEnv = import ./dev.nix {
2016-03-01 21:00:54 +01:00
inherit buildEnv bundler bundix ;
ruby = self ;
} ;
2016-09-20 18:41:16 +02:00
2019-05-18 19:45:38 +02:00
inherit ( import ../../ruby-modules/with-packages {
inherit lib stdenv makeWrapper buildRubyGem buildEnv ;
gemConfig = defaultGemConfig ;
ruby = self ;
} ) withPackages gems ;
2016-09-20 18:41:16 +02:00
# deprecated 2016-09-21
majorVersion = ver . major ;
minorVersion = ver . minor ;
teenyVersion = ver . tiny ;
patchLevel = ver . patchLevel ;
2015-09-26 15:25:01 +02:00
} ;
}
) args ; in self ;
in {
2018-12-25 20:25:45 +01:00
ruby_2_6 = generic {
2021-07-07 06:20:00 +02:00
version = rubyVersion " 2 " " 6 " " 8 " " " ;
2018-12-25 20:25:45 +01:00
sha256 = {
2021-07-07 06:20:00 +02:00
src = " 0 v f a m 2 8 i f l 6 h 2 w x i 6 p 7 0 j 0 h m 3 f 1 p v s p 4 3 2 h f 7 5 m 5 j 2 5 w f y 2 v f 1 q q " ;
git = " 0 r c 3 n 6 s k 8 6 3 2 r 0 l i b p v 8 j w s l c 7 8 5 2 h g k 6 4 r v b d r s p c 9 r a z j w x 2 1 c " ;
2018-12-25 20:25:45 +01:00
} ;
} ;
2019-12-25 10:20:00 +01:00
ruby_2_7 = generic {
2021-07-07 06:20:00 +02:00
version = rubyVersion " 2 " " 7 " " 4 " " " ;
2019-12-25 10:20:00 +01:00
sha256 = {
2021-07-07 06:20:00 +02:00
src = " 0 n x w k x h 7 s n m j q f 7 8 7 q s p 4 i 3 3 m x d 1 r b f 9 y z y f i k y 5 k 2 3 0 i 6 8 0 j h r h " ;
git = " 1 p r s r q w k l a 4 k 5 j a p l m 5 4 k 0 j 7 0 0 j 4 8 2 4 r g 8 z 8 k p s w r 9 r 3 s w r m r f 5 p " ;
2019-12-25 10:20:00 +01:00
} ;
} ;
2020-12-29 05:20:00 +01:00
ruby_3_0 = generic {
2021-07-07 06:20:00 +02:00
version = rubyVersion " 3 " " 0 " " 2 " " " ;
2020-12-29 05:20:00 +01:00
sha256 = {
2021-07-07 06:20:00 +02:00
src = " 1 w g 6 y y z c 6 a r z i k c y 4 8 i g q b x f c d c 7 9 b m f p i y f i 9 m 9 j 1 l z m p h d x 1 a h " ;
git = " 1 k b k x q i c h i 1 1 v l i 0 8 0 j g y v j f 2 x g n l b l 9 l 2 f 2 n 1 h v 4 s 8 b 3 1 g j i b 3 r " ;
2020-12-29 05:20:00 +01:00
} ;
} ;
2015-09-26 15:25:01 +02:00
}