diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-05-21 03:11:28 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-05-21 03:11:28 +0000 |
commit | fb2e6803b0df64cadfc6b1189c25332e948e9ddd (patch) | |
tree | 275cc94c6afeb3d0c55ad6c19497bbdf38c8b33b /enc | |
parent | 52f0c6780e5abd58a68befdbf14a6a065161bf8d (diff) |
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
Diffstat (limited to 'enc')
-rw-r--r-- | enc/depend | 3 | ||||
-rwxr-xr-x | enc/make_encmake.rb | 30 |
2 files changed, 30 insertions, 3 deletions
diff --git a/enc/depend b/enc/depend index d600616734..544185b388 100644 --- a/enc/depend +++ b/enc/depend @@ -84,6 +84,9 @@ srcs: $(TRANSCSRCS) % unless ENCS.empty? $(ENCOBJS): regenc.h oniguruma.h config.h defines.h % end +% ENC_DEPS.each do |e, deps| +enc/<%=e%>.$(OBJEXT): <%=deps.map {|n| rule_subst % n}.join(' ')%> +% end % unless TRANS.empty? $(TRANSOBJS): ruby.h intern.h config.h defines.h missing.h encoding.h oniguruma.h st.h transcode_data.h % end 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")) |