From b58a30e1c14e971adba4096104274d5d692492e9 Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 20 Apr 2017 08:13:16 +0000 Subject: extmk.rb: fail for mandatory libraries * ext/extmk.rb: fail if a mandatory extension library failed to configure. [ruby-core:80759] [Feature #13302] * template/exts.mk.tmpl: move `exit` at the end. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58412 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/extmk.rb | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'ext/extmk.rb') diff --git a/ext/extmk.rb b/ext/extmk.rb index 3b19b05309..9839017b45 100755 --- a/ext/extmk.rb +++ b/ext/extmk.rb @@ -473,6 +473,7 @@ default_exclude_exts = else %w'*win32*' end +mandatory_exts = {} withes, withouts = [["--with", nil], ["--without", default_exclude_exts]].collect {|w, d| if !(w = %w[-extensions -ext].collect {|o|arg_config(w+o)}).any? d ? proc {|c1| d.any?(&c1)} : proc {true} @@ -480,13 +481,15 @@ withes, withouts = [["--with", nil], ["--without", default_exclude_exts]].collec proc {true} else w = w.collect {|o| o.split(/,/)}.flatten - w.collect! {|o| o == '+' ? d : o}.flatten! if d + w.collect! {|o| o == '+' ? d : o}.flatten! proc {|c1| w.any?(&c1)} end } cond = proc {|ext, *| - cond1 = proc {|n| File.fnmatch(n, ext)} - withes.call(cond1) and !withouts.call(cond1) + withes.call(proc {|n| + !n or (mandatory_exts[ext] = true if File.fnmatch(n, ext)) + }) and + !withouts.call(proc {|n| File.fnmatch(n, ext)}) } ($extension || %w[*]).each do |e| e = e.sub(/\A(?:\.\/)+/, '') @@ -716,12 +719,14 @@ begin mf.puts "\n""note:\n" unless fails.empty? + abandon = false mf.puts %Q<\t@echo "*** Following extensions are not compiled:"> fails.each do |ext, (parent, err)| + abandon ||= mandatory_exts[ext] mf.puts %Q<\t@echo "#{ext}:"> if parent mf.puts %Q<\t@echo "\tCould not be configured. It will not be installed."> - err&.scan(/.+/) do |ee| + err and err.scan(/.+/) do |ee| mf.puts %Q<\t@echo "\t#{ee.gsub(/["`$^]/, '\\\\\\&')}"> end mf.puts %Q<\t@echo "\tCheck #{ext_prefix}/#{ext}/mkmf.log for more details."> @@ -730,6 +735,9 @@ begin end end mf.puts %Q<\t@echo "*** Fix the problems, then remove these directories and try again if you want."> + if abandon + mf.puts "\t""@exit 1" + end end end end -- cgit v1.2.1