diff --git a/flake.nix b/flake.nix index 43363cf..824d143 100644 --- a/flake.nix +++ b/flake.nix @@ -26,7 +26,7 @@ versionedPackageFnWithOverrides = { version, versionSource }: let pkg = pkgs.callPackage packageFn { - inherit version versionSource; + inherit version versionSource versionComparison; }; in applyOverrides { @@ -191,6 +191,24 @@ ruby -e 'require "foobar"; say' > $out ''; }; + }) // (lib.optionalAttrs (with versionComparison rubyVersion; greaterOrEqualTo "3.4") { + "${rubyName}-docSupport" = { + nativeBuildInputs = [ + (ruby.override { docSupport = true; }) + ]; + command = '' + HOME=$TMPDIR ri Array > $out + ''; + }; + }) // (lib.optionalAttrs (with versionComparison rubyVersion; lessThan "3.4") { + "${rubyName}-docSupport-noParallel" = { + nativeBuildInputs = [ + (ruby.override { docSupport = true; parallelBuild = false; }) + ]; + command = '' + HOME=$TMPDIR ri Array > $out + ''; + }; }) ) rubyPackages; diff --git a/ruby/package-fn.nix b/ruby/package-fn.nix index c91cd46..cee84ec 100644 --- a/ruby/package-fn.nix +++ b/ruby/package-fn.nix @@ -1,5 +1,6 @@ { version , versionSource +, versionComparison , libDir ? "${(import ./parse-version.nix version).majMin}.0" , rubygems ? null , stdenv @@ -25,6 +26,7 @@ , bundler , bundix , removeReferencesTo +, parallelBuild ? true , useRailsExpress ? true , zlibSupport ? true , opensslSupport ? true @@ -87,7 +89,7 @@ let propagatedBuildInputs = (op jemallocSupport jemalloc); - enableParallelBuilding = true; + enableParallelBuilding = parallelBuild; postPatch = '' ${opString (rubygems != null) '' @@ -107,6 +109,11 @@ let preConfigure = '' sed -i configure -e 's/;; #(/\n;;/g' + ${opString docSupport '' + # rdoc creates XDG_DATA_DIR (defaulting to $HOME/.local/share) even if + # it's not going to be used. + export HOME=$TMPDIR + ''} ''; configureFlags = @@ -195,4 +202,7 @@ let }; }; in +# There's a known race condition when building with docs enabled before Ruby 3.4.0 +# Building documents requires parallelBuild to be false in those versions +assert docSupport -> (with versionComparison version; greaterOrEqualTo "3.4.0" || !parallelBuild); self diff --git a/rubygems/package-fn.nix b/rubygems/package-fn.nix index 97d46c6..a7fea1d 100644 --- a/rubygems/package-fn.nix +++ b/rubygems/package-fn.nix @@ -3,6 +3,7 @@ , stdenv , fetchurl , fetchpatch +, ... }: stdenv.mkDerivation { pname = "rubygems";