From fb2e6803b0df64cadfc6b1189c25332e948e9ddd Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 21 May 2012 03:11:28 +0000 Subject: enc: fix dependencies * enc/depend (ENCOBJS): add dependencies. * enc/make_encmake.rb (target_encodings): extract dependencies. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35734 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- enc/make_encmake.rb | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) (limited to 'enc/make_encmake.rb') diff --git a/enc/make_encmake.rb b/enc/make_encmake.rb index 291774e60c..b917eca0bd 100755 --- a/enc/make_encmake.rb +++ b/enc/make_encmake.rb @@ -48,8 +48,32 @@ def target_encodings encs.reject! {|e| !ENC_PATTERNS.any? {|p| File.fnmatch?(p, e)}} if !ENC_PATTERNS.empty? encs.reject! {|e| NOENC_PATTERNS.any? {|p| File.fnmatch?(p, e)}} encs = encs.sort_by(&ALPHANUMERIC_ORDER) - encs.unshift(encs.delete("encdb")) - return encs + deps = Hash.new {[]} + inc_srcs = Hash.new {[]} + default_deps = %w[regenc.h oniguruma.h config.h defines.h] + db = encs.delete("encdb") + encs.each do |e| + File.foreach("#$srcdir/#{e}.c") do |l| + if /^\s*#\s*include\s+(?:"([^\"]+)"|<(ruby\/\sw+.h)>)/ =~ l + n = $1 || $2 + if /\.c$/ =~ n + inc_srcs[e] <<= $` + n = "enc/#{n}" + end + deps[e] <<= n unless default_deps.include?(n) + end + end + end + class << inc_srcs; self; end.class_eval do + define_method(:expand) do |d| + d.map {|n| deps[n] | self.expand(self[n])}.flatten + end + end + inc_srcs.each do |e, d| + deps[e].concat(inc_srcs.expand(d)) + end + encs.unshift(db) + return encs, deps end def target_transcoders @@ -79,7 +103,7 @@ end # Constants that "depend" needs. MODULE_TYPE = module_type -ENCS = target_encodings +ENCS, ENC_DEPS = target_encodings ATRANS, TRANS = target_transcoders if File.exist?(depend = File.join($srcdir, "depend")) -- cgit v1.2.3