mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[ruby/psych] Fix libyaml download failure rescue under miniruby
I tried to build Ruby on a system without libyaml today and realized that my attempt from <https://github.com/ruby/psych/pull/557> doesn't fix the error in <https://github.com/ruby/psych/issues/552>. I still got the same `LoadError` from `digest` which stopped the build. Since `LoadError` is not a `StandardError`, a plain `rescue` doesn't catch it. Catch `LoadError` explicitly instead and reduce the scope of the `begin` block. I tested this change in a Ruby build on macOS without libyaml installed and confirmed that `make` continues with a warning instead of aborting: *** Following extensions are not compiled: psych: Could not be configured. It will not be installed. ... This should address <https://bugs.ruby-lang.org/issues/18790>. https://github.com/ruby/psych/commit/251289ba83
This commit is contained in:
parent
9f09397bfe
commit
9357e310fb
1 changed files with 9 additions and 7 deletions
|
@ -19,15 +19,17 @@ if yaml_source == true
|
|||
# search the latest libyaml source under $srcdir
|
||||
yaml_source = Dir.glob("#{$srcdir}/yaml{,-*}/").max_by {|n| File.basename(n).scan(/\d+/).map(&:to_i)}
|
||||
unless yaml_source
|
||||
download_failure = "failed to download libyaml source"
|
||||
download_failure = "failed to download libyaml source. Try manually installing libyaml?"
|
||||
begin
|
||||
require_relative '../../tool/extlibs.rb'
|
||||
extlibs = ExtLibs.new(cache_dir: File.expand_path("../../tmp/download_cache", $srcdir))
|
||||
unless extlibs.process_under($srcdir)
|
||||
raise download_failure
|
||||
end
|
||||
rescue
|
||||
# Implicitly captures Exception#cause. Newer rubies show it in the backtrace.
|
||||
rescue LoadError
|
||||
# When running in ruby/ruby, we use miniruby and don't have stdlib.
|
||||
# Avoid LoadError because it aborts the whole build. Usually when
|
||||
# stdlib extension fail to configure we skip it and continue.
|
||||
raise download_failure
|
||||
end
|
||||
extlibs = ExtLibs.new(cache_dir: File.expand_path("../../tmp/download_cache", $srcdir))
|
||||
unless extlibs.process_under($srcdir)
|
||||
raise download_failure
|
||||
end
|
||||
yaml_source, = Dir.glob("#{$srcdir}/yaml-*/")
|
||||
|
|
Loading…
Reference in a new issue