summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--enc/depend3
-rwxr-xr-xenc/make_encmake.rb30
3 files changed, 36 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 677ba7033a..571b18a2e1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Mon May 21 12:11:25 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/depend (ENCOBJS): add dependencies.
+
+ * enc/make_encmake.rb (target_encodings): extract dependencies.
+
Mon May 21 11:26:17 2012 NARUSE, Yui <naruse@ruby-lang.org>
* lib/net/ftp.rb (Net::FTP#transfercmd): rescue shutdown.
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"))