From b58a30e1c14e971adba4096104274d5d692492e9 Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 20 Apr 2017 08:13:16 +0000 Subject: [PATCH] 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 ++++++++++++---- template/exts.mk.tmpl | 6 +++++- 2 files changed, 17 insertions(+), 5 deletions(-) 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 diff --git a/template/exts.mk.tmpl b/template/exts.mk.tmpl index 4d7dc0f2a5..1b2308c4f0 100644 --- a/template/exts.mk.tmpl +++ b/template/exts.mk.tmpl @@ -50,8 +50,10 @@ Dir.glob("{ext,gems}/*/exts.mk") do |e| end s.scan(%r"^note:\n((?:\t.+\n)+)") do |(n)| n = n.split(/^/) + e = (note.pop if /@exit/ =~ note[-1]) note.pop if n[-1] == note[-1] note |= n + note << e if e end end deps.uniq! @@ -116,7 +118,9 @@ clean: distclean: -$(Q)$(RM) ext/extinit.c -<%= deps.join("\n") %> +% deps.each do |d| +<%= d %> +% end % rubies.each do |ruby| <%= ruby %>: