[前][次][番号順一覧][スレッド一覧]

ruby-changes:46299

From: nobu <ko1@a...>
Date: Thu, 20 Apr 2017 17:13:23 +0900 (JST)
Subject: [ruby-changes:46299] nobu:r58412 (trunk): extmk.rb: fail for mandatory libraries

nobu	2017-04-20 17:13:16 +0900 (Thu, 20 Apr 2017)

  New Revision: 58412

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=58412

  Log:
    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.

  Modified files:
    trunk/ext/extmk.rb
    trunk/template/exts.mk.tmpl
Index: ext/extmk.rb
===================================================================
--- ext/extmk.rb	(revision 58411)
+++ ext/extmk.rb	(revision 58412)
@@ -473,6 +473,7 @@ default_exclude_exts = https://github.com/ruby/ruby/blob/trunk/ext/extmk.rb#L473
   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], ["- https://github.com/ruby/ruby/blob/trunk/ext/extmk.rb#L481
     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 https://github.com/ruby/ruby/blob/trunk/ext/extmk.rb#L719
 
     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 https://github.com/ruby/ruby/blob/trunk/ext/extmk.rb#L735
         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
Index: template/exts.mk.tmpl
===================================================================
--- template/exts.mk.tmpl	(revision 58411)
+++ template/exts.mk.tmpl	(revision 58412)
@@ -50,8 +50,10 @@ Dir.glob("{ext,gems}/*/exts.mk") do |e| https://github.com/ruby/ruby/blob/trunk/template/exts.mk.tmpl#L50
   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: https://github.com/ruby/ruby/blob/trunk/template/exts.mk.tmpl#L118
 distclean:
 	-$(Q)$(RM) ext/extinit.c
 
-<%= deps.join("\n") %>
+% deps.each do |d|
+<%= d %>
+% end
 
 % rubies.each do |ruby|
 <%= ruby %>:

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]