summaryrefslogtreecommitdiff
path: root/enc
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-05-21 03:11:28 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-05-21 03:11:28 +0000
commitfb2e6803b0df64cadfc6b1189c25332e948e9ddd (patch)
tree275cc94c6afeb3d0c55ad6c19497bbdf38c8b33b /enc
parent52f0c6780e5abd58a68befdbf14a6a065161bf8d (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/depend3
-rwxr-xr-xenc/make_encmake.rb30
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"))