ruby-changes:28188
From: akr <ko1@a...>
Date: Thu, 11 Apr 2013 21:03:36 +0900 (JST)
Subject: [ruby-changes:28188] akr:r40240 (trunk): * common.mk: Dependency updated.
akr 2013-04-11 21:03:23 +0900 (Thu, 11 Apr 2013) New Revision: 40240 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=40240 Log: * common.mk: Dependency updated. * tool/update-deps: Rewritten. Modified files: trunk/ChangeLog trunk/common.mk trunk/tool/update-deps Index: ChangeLog =================================================================== --- ChangeLog (revision 40239) +++ ChangeLog (revision 40240) @@ -1,3 +1,9 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1 +Thu Apr 11 21:02:19 2013 Tanaka Akira <akr@f...> + + * common.mk: Dependency updated. + + * tool/update-deps: Rewritten. + Thu Apr 11 19:59:48 2013 NARUSE, Yui <naruse@r...> * common.mk: partially revert r40183, which breaks building on Index: common.mk =================================================================== --- common.mk (revision 40239) +++ common.mk (revision 40240) @@ -589,6 +589,23 @@ PHONY: https://github.com/ruby/ruby/blob/trunk/common.mk#L589 $(Q)sed -e "/^#line.*y\.tab\.h/d;/^#line.*parse.*\.y/d" y.tab.h > $(@:.c=.h) $(Q)$(RM) y.tab.c y.tab.h +$(PLATFORM_D): + $(Q) $(MAKEDIRS) $(PLATFORM_DIR) + @exit > $@ + +### + +RUBY_H_INCLUDES = {$(VPATH)}ruby.h {$(VPATH)}config.h {$(VPATH)}defines.h \ + {$(VPATH)}intern.h {$(VPATH)}missing.h {$(VPATH)}st.h \ + {$(VPATH)}subst.h +ENCODING_H_INCLUDES= {$(VPATH)}encoding.h {$(VPATH)}oniguruma.h +PROBES_H_INCLUDES = {$(VPATH)}probes.h +VM_CORE_H_INCLUDES = {$(VPATH)}vm_core.h {$(VPATH)}thread_$(THREAD_MODEL).h \ + {$(VPATH)}node.h {$(VPATH)}method.h {$(VPATH)}ruby_atomic.h \ + {$(VPATH)}vm_debug.h {$(VPATH)}id.h + +### + acosh.$(OBJEXT): {$(VPATH)}acosh.c alloca.$(OBJEXT): {$(VPATH)}alloca.c {$(VPATH)}config.h crypt.$(OBJEXT): {$(VPATH)}crypt.c @@ -614,28 +631,15 @@ dl_os2.$(OBJEXT): {$(VPATH)}dl_os2.c https://github.com/ruby/ruby/blob/trunk/common.mk#L631 ia64.$(OBJEXT): {$(VPATH)}ia64.s $(CC) $(CFLAGS) -c $< -$(PLATFORM_D): - $(Q) $(MAKEDIRS) $(PLATFORM_DIR) - @exit > $@ - ### -RUBY_H_INCLUDES = {$(VPATH)}ruby.h {$(VPATH)}config.h {$(VPATH)}defines.h \ - {$(VPATH)}intern.h {$(VPATH)}missing.h {$(VPATH)}st.h \ - {$(VPATH)}subst.h -ENCODING_H_INCLUDES= {$(VPATH)}encoding.h {$(VPATH)}oniguruma.h -PROBES_H_INCLUDES = {$(VPATH)}probes.h -VM_CORE_H_INCLUDES = {$(VPATH)}vm_core.h {$(VPATH)}thread_$(THREAD_MODEL).h \ - {$(VPATH)}node.h {$(VPATH)}method.h {$(VPATH)}ruby_atomic.h \ - {$(VPATH)}vm_debug.h {$(VPATH)}id.h - addr2line.$(OBJEXT): {$(VPATH)}addr2line.c {$(VPATH)}addr2line.h {$(VPATH)}config.h array.$(OBJEXT): {$(VPATH)}array.c $(RUBY_H_INCLUDES) {$(VPATH)}util.h \ - $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h $(PROBES_H_INCLUDES) {$(VPATH)}id.h + $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h $(PROBES_H_INCLUDES) {$(VPATH)}id.h {$(VPATH)}vm_opts.h bignum.$(OBJEXT): {$(VPATH)}bignum.c $(RUBY_H_INCLUDES) {$(VPATH)}util.h \ {$(VPATH)}thread.h {$(VPATH)}internal.h class.$(OBJEXT): {$(VPATH)}class.c $(RUBY_H_INCLUDES) \ - $(VM_CORE_H_INCLUDES) {$(VPATH)}internal.h {$(VPATH)}constant.h + $(VM_CORE_H_INCLUDES) {$(VPATH)}internal.h {$(VPATH)}constant.h {$(VPATH)}vm_opts.h compar.$(OBJEXT): {$(VPATH)}compar.c $(RUBY_H_INCLUDES) complex.$(OBJEXT): {$(VPATH)}complex.c $(RUBY_H_INCLUDES) \ {$(VPATH)}internal.h @@ -653,19 +657,19 @@ encoding.$(OBJEXT): {$(VPATH)}encoding.c https://github.com/ruby/ruby/blob/trunk/common.mk#L657 $(ENCODING_H_INCLUDES) {$(VPATH)}regenc.h {$(VPATH)}util.h \ {$(VPATH)}internal.h enum.$(OBJEXT): {$(VPATH)}enum.c $(RUBY_H_INCLUDES) {$(VPATH)}node.h \ - {$(VPATH)}util.h {$(VPATH)}id.h + {$(VPATH)}util.h {$(VPATH)}id.h {$(VPATH)}internal.h enumerator.$(OBJEXT): {$(VPATH)}enumerator.c $(RUBY_H_INCLUDES) \ - {$(VPATH)}internal.h + {$(VPATH)}internal.h {$(VPATH)}node.h error.$(OBJEXT): {$(VPATH)}error.c {$(VPATH)}known_errors.inc \ $(RUBY_H_INCLUDES) $(VM_CORE_H_INCLUDES) $(ENCODING_H_INCLUDES) \ - {$(VPATH)}internal.h + {$(VPATH)}internal.h {$(VPATH)}vm_opts.h eval.$(OBJEXT): {$(VPATH)}eval.c {$(VPATH)}eval_intern.h {$(VPATH)}vm.h \ $(RUBY_H_INCLUDES) $(VM_CORE_H_INCLUDES) {$(VPATH)}eval_error.c \ {$(VPATH)}eval_jump.c {$(VPATH)}gc.h {$(VPATH)}iseq.h \ - $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h $(PROBES_H_INCLUDES) + $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h $(PROBES_H_INCLUDES) {$(VPATH)}vm_opts.h {$(VPATH)}probes_helper.h load.$(OBJEXT): {$(VPATH)}load.c {$(VPATH)}eval_intern.h \ {$(VPATH)}util.h $(RUBY_H_INCLUDES) $(VM_CORE_H_INCLUDES) \ - {$(VPATH)}dln.h {$(VPATH)}internal.h $(PROBES_H_INCLUDES) + {$(VPATH)}dln.h {$(VPATH)}internal.h $(PROBES_H_INCLUDES) {$(VPATH)}vm_opts.h file.$(OBJEXT): {$(VPATH)}file.c $(RUBY_H_INCLUDES) {$(VPATH)}io.h \ $(ENCODING_H_INCLUDES) {$(VPATH)}util.h {$(VPATH)}dln.h \ {$(VPATH)}internal.h @@ -673,39 +677,39 @@ gc.$(OBJEXT): {$(VPATH)}gc.c $(RUBY_H_IN https://github.com/ruby/ruby/blob/trunk/common.mk#L677 {$(VPATH)}regex.h $(ENCODING_H_INCLUDES) $(VM_CORE_H_INCLUDES) \ {$(VPATH)}gc.h {$(VPATH)}io.h {$(VPATH)}eval_intern.h {$(VPATH)}util.h \ {$(VPATH)}internal.h {$(VPATH)}constant.h \ - {$(VPATH)}thread.h $(PROBES_H_INCLUDES) + {$(VPATH)}thread.h $(PROBES_H_INCLUDES) {$(VPATH)}vm_opts.h hash.$(OBJEXT): {$(VPATH)}hash.c $(RUBY_H_INCLUDES) {$(VPATH)}util.h \ - $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h $(PROBES_H_INCLUDES) + $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h $(PROBES_H_INCLUDES) {$(VPATH)}vm_opts.h inits.$(OBJEXT): {$(VPATH)}inits.c $(RUBY_H_INCLUDES) \ {$(VPATH)}internal.h io.$(OBJEXT): {$(VPATH)}io.c $(RUBY_H_INCLUDES) {$(VPATH)}io.h \ {$(VPATH)}util.h $(ENCODING_H_INCLUDES) {$(VPATH)}dln.h \ - {$(VPATH)}internal.h {$(VPATH)}thread.h {$(VPATH)}id.h -main.$(OBJEXT): {$(VPATH)}main.c $(RUBY_H_INCLUDES) {$(VPATH)}node.h {$(VPATH)}vm_debug.h + {$(VPATH)}internal.h {$(VPATH)}thread.h {$(VPATH)}id.h {$(VPATH)}ruby_atomic.h +main.$(OBJEXT): {$(VPATH)}main.c $(RUBY_H_INCLUDES) {$(VPATH)}node.h {$(VPATH)}vm_debug.h {$(VPATH)}vm_opts.h marshal.$(OBJEXT): {$(VPATH)}marshal.c $(RUBY_H_INCLUDES) {$(VPATH)}io.h \ $(ENCODING_H_INCLUDES) {$(VPATH)}util.h {$(VPATH)}internal.h math.$(OBJEXT): {$(VPATH)}math.c $(RUBY_H_INCLUDES) \ {$(VPATH)}internal.h node.$(OBJEXT): {$(VPATH)}node.c $(RUBY_H_INCLUDES) \ - $(VM_CORE_H_INCLUDES) + $(VM_CORE_H_INCLUDES) {$(VPATH)}vm_opts.h numeric.$(OBJEXT): {$(VPATH)}numeric.c $(RUBY_H_INCLUDES) \ {$(VPATH)}util.h $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h {$(VPATH)}id.h object.$(OBJEXT): {$(VPATH)}object.c $(RUBY_H_INCLUDES) {$(VPATH)}util.h \ - {$(VPATH)}internal.h {$(VPATH)}constant.h $(ENCODING_H_INCLUDES) $(PROBES_H_INCLUDES) + {$(VPATH)}internal.h {$(VPATH)}constant.h $(ENCODING_H_INCLUDES) $(PROBES_H_INCLUDES) {$(VPATH)}vm_opts.h pack.$(OBJEXT): {$(VPATH)}pack.c $(RUBY_H_INCLUDES) {$(VPATH)}encoding.h \ {$(VPATH)}oniguruma.h parse.$(OBJEXT): {$(VPATH)}parse.c $(RUBY_H_INCLUDES) {$(VPATH)}node.h \ $(ENCODING_H_INCLUDES) {$(VPATH)}id.h {$(VPATH)}regenc.h \ {$(VPATH)}regex.h {$(VPATH)}util.h {$(VPATH)}lex.c \ {$(VPATH)}defs/keywords {$(VPATH)}id.c {$(VPATH)}parse.y \ - {$(VPATH)}parse.h {$(VPATH)}internal.h $(PROBES_H_INCLUDES) + {$(VPATH)}parse.h {$(VPATH)}internal.h $(PROBES_H_INCLUDES) {$(VPATH)}vm_opts.h proc.$(OBJEXT): {$(VPATH)}proc.c {$(VPATH)}eval_intern.h \ $(RUBY_H_INCLUDES) {$(VPATH)}gc.h $(VM_CORE_H_INCLUDES) \ - {$(VPATH)}internal.h {$(VPATH)}iseq.h + {$(VPATH)}internal.h {$(VPATH)}iseq.h {$(VPATH)}vm_opts.h process.$(OBJEXT): {$(VPATH)}process.c $(RUBY_H_INCLUDES) \ {$(VPATH)}util.h {$(VPATH)}io.h $(ENCODING_H_INCLUDES) {$(VPATH)}dln.h \ $(VM_CORE_H_INCLUDES) {$(VPATH)}internal.h \ - {$(VPATH)}thread.h + {$(VPATH)}thread.h {$(VPATH)}vm_opts.h random.$(OBJEXT): {$(VPATH)}random.c $(RUBY_H_INCLUDES) \ {$(VPATH)}siphash.c {$(VPATH)}siphash.h range.$(OBJEXT): {$(VPATH)}range.c $(RUBY_H_INCLUDES) \ @@ -730,27 +734,27 @@ regsyntax.$(OBJEXT): {$(VPATH)}regsyntax https://github.com/ruby/ruby/blob/trunk/common.mk#L734 {$(VPATH)}regenc.h {$(VPATH)}oniguruma.h $(RUBY_H_INCLUDES) ruby.$(OBJEXT): {$(VPATH)}ruby.c $(RUBY_H_INCLUDES) {$(VPATH)}util.h \ $(ENCODING_H_INCLUDES) {$(VPATH)}eval_intern.h $(VM_CORE_H_INCLUDES) \ - {$(VPATH)}dln.h {$(VPATH)}internal.h -safe.$(OBJEXT): {$(VPATH)}safe.c $(RUBY_H_INCLUDES) $(VM_CORE_H_INCLUDES) + {$(VPATH)}dln.h {$(VPATH)}internal.h {$(VPATH)}vm_opts.h +safe.$(OBJEXT): {$(VPATH)}safe.c $(RUBY_H_INCLUDES) $(VM_CORE_H_INCLUDES) {$(VPATH)}vm_opts.h signal.$(OBJEXT): {$(VPATH)}signal.c $(RUBY_H_INCLUDES) \ - $(VM_CORE_H_INCLUDES) + $(VM_CORE_H_INCLUDES) {$(VPATH)}vm_opts.h {$(VPATH)}internal.h {$(VPATH)}ruby_atomic.h {$(VPATH)}eval_intern.h sprintf.$(OBJEXT): {$(VPATH)}sprintf.c $(RUBY_H_INCLUDES) {$(VPATH)}re.h \ - {$(VPATH)}regex.h {$(VPATH)}vsnprintf.c $(ENCODING_H_INCLUDES) + {$(VPATH)}regex.h {$(VPATH)}vsnprintf.c $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h st.$(OBJEXT): {$(VPATH)}st.c $(RUBY_H_INCLUDES) strftime.$(OBJEXT): {$(VPATH)}strftime.c $(RUBY_H_INCLUDES) \ {$(VPATH)}timev.h $(ENCODING_H_INCLUDES) string.$(OBJEXT): {$(VPATH)}string.c $(RUBY_H_INCLUDES) {$(VPATH)}re.h \ - {$(VPATH)}regex.h $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h $(PROBES_H_INCLUDES) + {$(VPATH)}regex.h $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h $(PROBES_H_INCLUDES) {$(VPATH)}vm_opts.h {$(VPATH)}node.h {$(VPATH)}ruby_atomic.h {$(VPATH)}vm_core.h {$(VPATH)}vm_debug.h {$(VPATH)}id.h {$(VPATH)}method.h {$(VPATH)}thread_$(THREAD_MODEL).h struct.$(OBJEXT): {$(VPATH)}struct.c $(RUBY_H_INCLUDES) {$(VPATH)}internal.h thread.$(OBJEXT): {$(VPATH)}thread.c {$(VPATH)}eval_intern.h \ $(RUBY_H_INCLUDES) {$(VPATH)}gc.h $(VM_CORE_H_INCLUDES) \ {$(VPATH)}thread_$(THREAD_MODEL).c $(ENCODING_H_INCLUDES) \ - {$(VPATH)}internal.h {$(VPATH)}io.h {$(VPATH)}thread.h {$(VPATH)}timev.h + {$(VPATH)}internal.h {$(VPATH)}io.h {$(VPATH)}thread.h {$(VPATH)}timev.h {$(VPATH)}vm_opts.h transcode.$(OBJEXT): {$(VPATH)}transcode.c $(RUBY_H_INCLUDES) \ $(ENCODING_H_INCLUDES) {$(VPATH)}transcode_data.h {$(VPATH)}internal.h cont.$(OBJEXT): {$(VPATH)}cont.c $(RUBY_H_INCLUDES) \ $(VM_CORE_H_INCLUDES) {$(VPATH)}gc.h {$(VPATH)}eval_intern.h \ - {$(VPATH)}internal.h + {$(VPATH)}internal.h {$(VPATH)}vm_opts.h time.$(OBJEXT): {$(VPATH)}time.c $(RUBY_H_INCLUDES) \ $(ENCODING_H_INCLUDES) {$(VPATH)}timev.h {$(VPATH)}internal.h util.$(OBJEXT): {$(VPATH)}util.c $(RUBY_H_INCLUDES) {$(VPATH)}util.h \ @@ -767,10 +771,10 @@ compile.$(OBJEXT): {$(VPATH)}compile.c { https://github.com/ruby/ruby/blob/trunk/common.mk#L771 $(RUBY_H_INCLUDES) $(VM_CORE_H_INCLUDES) {$(VPATH)}insns.inc \ {$(VPATH)}insns_info.inc {$(VPATH)}optinsn.inc \ {$(VPATH)}optunifs.inc {$(VPATH)}opt_sc.inc {$(VPATH)}insns.inc \ - {$(VPATH)}internal.h + {$(VPATH)}internal.h {$(VPATH)}vm_opts.h iseq.$(OBJEXT): {$(VPATH)}iseq.c {$(VPATH)}gc.h {$(VPATH)}iseq.h \ $(RUBY_H_INCLUDES) $(VM_CORE_H_INCLUDES) {$(VPATH)}insns.inc \ - {$(VPATH)}insns_info.inc {$(VPATH)}node_name.inc {$(VPATH)}internal.h + {$(VPATH)}insns_info.inc {$(VPATH)}node_name.inc {$(VPATH)}internal.h {$(VPATH)}vm_opts.h {$(VPATH)}ruby_atomic.h {$(VPATH)}eval_intern.h vm.$(OBJEXT): {$(VPATH)}vm.c {$(VPATH)}gc.h {$(VPATH)}iseq.h \ {$(VPATH)}eval_intern.h $(RUBY_H_INCLUDES) $(ENCODING_H_INCLUDES) \ $(VM_CORE_H_INCLUDES) {$(VPATH)}vm_method.c {$(VPATH)}vm_eval.c \ @@ -778,26 +782,26 @@ vm.$(OBJEXT): {$(VPATH)}vm.c {$(VPATH)}g https://github.com/ruby/ruby/blob/trunk/common.mk#L782 {$(VPATH)}vm_exec.h {$(VPATH)}insns.def {$(VPATH)}vmtc.inc \ {$(VPATH)}vm.inc {$(VPATH)}insns.inc \ {$(VPATH)}internal.h {$(VPATH)}vm.h {$(VPATH)}constant.h \ - $(PROBES_H_INCLUDES) {$(VPATH)}probes_helper.h + $(PROBES_H_INCLUDES) {$(VPATH)}probes_helper.h {$(VPATH)}vm_opts.h vm_dump.$(OBJEXT): {$(VPATH)}vm_dump.c $(RUBY_H_INCLUDES) \ $(VM_CORE_H_INCLUDES) {$(VPATH)}addr2line.h \ - {$(VPATH)}internal.h + {$(VPATH)}internal.h {$(VPATH)}vm_opts.h debug.$(OBJEXT): {$(VPATH)}debug.c $(RUBY_H_INCLUDES) \ $(ENCODING_H_INCLUDES) $(VM_CORE_H_INCLUDES) {$(VPATH)}eval_intern.h \ - {$(VPATH)}util.h + {$(VPATH)}util.h {$(VPATH)}vm_opts.h id.$(OBJEXT): {$(VPATH)}id.c $(RUBY_H_INCLUDES) {$(VPATH)}id.h {$(VPATH)}vm_opts.h vm_backtrace.$(OBJEXT): {$(VPATH)}vm_backtrace.c \ $(VM_CORE_H_INCLUDES) $(RUBY_H_INCLUDES) $(ENCODING_H_INCLUDES) \ - {$(VPATH)}internal.h {$(VPATH)}iseq.h {$(VPATH)}debug.h + {$(VPATH)}internal.h {$(VPATH)}iseq.h {$(VPATH)}debug.h {$(VPATH)}vm_opts.h {$(VPATH)}ruby_atomic.h {$(VPATH)}eval_intern.h vm_trace.$(OBJEXT): {$(VPATH)}vm_trace.c $(ENCODING_H_INCLUDES) \ $(VM_CORE_H_INCLUDES) $(RUBY_H_INCLUDES) {$(VPATH)}debug.h \ - {$(VPATH)}internal.h + {$(VPATH)}internal.h {$(VPATH)}vm_opts.h {$(VPATH)}ruby_atomic.h {$(VPATH)}eval_intern.h miniprelude.$(OBJEXT): {$(VPATH)}miniprelude.c $(RUBY_H_INCLUDES) \ - $(VM_CORE_H_INCLUDES) {$(VPATH)}internal.h + $(VM_CORE_H_INCLUDES) {$(VPATH)}internal.h {$(VPATH)}vm_opts.h prelude.$(OBJEXT): {$(VPATH)}prelude.c $(RUBY_H_INCLUDES) \ - $(VM_CORE_H_INCLUDES) {$(VPATH)}internal.h + $(VM_CORE_H_INCLUDES) {$(VPATH)}internal.h {$(VPATH)}vm_opts.h golf_prelude.$(OBJEXT): {$(VPATH)}golf_prelude.c $(RUBY_H_INCLUDES) \ - $(VM_CORE_H_INCLUDES) {$(VPATH)}internal.h + $(VM_CORE_H_INCLUDES) {$(VPATH)}internal.h {$(VPATH)}vm_opts.h goruby.$(OBJEXT): {$(VPATH)}goruby.c {$(VPATH)}main.c $(RUBY_H_INCLUDES) \ {$(VPATH)}vm_debug.h {$(VPATH)}node.h Index: tool/update-deps =================================================================== --- tool/update-deps (revision 40239) +++ tool/update-deps (revision 40240) @@ -1,139 +1,157 @@ https://github.com/ruby/ruby/blob/trunk/tool/update-deps#L1 #!/usr/bin/ruby -# tool/update-deps assists you to update dependencies in common.mk. +# tool/update-deps verify makefile dependencies. -# This script uses preprocessed source files (*.i) to extract -# dependencies. -# It is possible to generate *.i using gcc with -save-temps option as: +# Requirements: +# gcc 4.5 (for -save-temps=obj option) +# GNU make (for -p option) # -# ./configure CFLAGS='-save-temps' -# make all golf -# -# After that, tool/update-deps generate common.mk with up-to-date dependencies. -# Currently, the result is not perfect around version.o, compile.o, etc. -# So you must see each changes and incorporate right changes. -# -# ./tool/update-deps > z -# wdiff =(sed -e 's/\\$//' common.mk ) =(sed -e 's/\\$//' z) |less -j 5 -p '\{\+|\+\}|\[-|-\]' -# vi common.mk - -src = File.read("common.mk") - -includes_macro = {} -src.scan(/^([A-Z_]+_H_INCLUDES)[ \t]*=(([^\\\n]|\\(.|\n))*)\n/) { - name = $1 - vals = $2 - #STDERR.puts vals.inspect - vals.gsub!(/\\\n/, ' ') - vals.gsub!(/\{\$\(VPATH\)\}/, '') - vals.gsub!(/thread_\$\(THREAD_MODEL\)/, 'thread_pthread') - vals = vals.strip.split(/\s+/) - includes_macro[name] = vals - #STDERR.puts [name, vals].inspect -} - -begin - again = false - includes_macro.each {|name, vals| - vals.map! {|val| - if /\A\$\((.*_H_INCLUDES)\)\z/ =~ val - again = true - includes_macro.fetch($1) - else - val +# Usage: +# 1. Compile ruby with -save-temps=obj option. +# Ex. ./configure debugflags='-save-temps=obj -g' && make all golf +# 2. Run tool/update-deps to show dependency problems. +# Ex. ruby tool/update-deps + +require 'pathname' +require 'pp' + +ENV['LC_ALL'] = 'C' + +def read_make_deps(cwd) + dependencies = {} + make_p = `make -p 2> /dev/null` + dirstack = [cwd] + make_p.scan(%r{Entering directory `(.*)'|Leaving directory `(.*)'|^([/0-9a-zA-Z._-]+):(.*)}) { + if $1 + enter_dir = Pathname($1) + #p [:enter, enter_dir] + dirstack.push enter_dir + elsif $2 + leave_dir = Pathname($2) + #p [:leave, leave_dir] + if leave_dir != dirstack.last + warn "unexpected leave_dir : #{dirstack.last.inspect} != #{leave_dir.inspect}" end - } - vals.flatten! + dirstack.pop + else + target = $3 + deps = $4 + deps = deps.scan(%r{[/0-9a-zA-Z._-]+}) + next if /\.o\z/ !~ target.to_s + next if /\A\./ =~ target.to_s # skip rules such as ".c.o" + dependencies[dirstack.last + target] ||= [] + dependencies[dirstack.last + target] |= deps.map {|dep| dirstack.last + dep } + end } -end while again + dependencies +end -src.gsub!(/^([0-9a-z._]+)\.\$\(OBJEXT\):(.*\n(?:[ ].*\n)*)/) { - #STDERR.puts $&.inspect - matched = $& - basename = $1 - deps = $2 - dd = deps.dup - dd.gsub!(/\{\$\(VPATH\)\}/, '') - dd.gsub!(/\\\n/, ' ') - dd.gsub!(/thread_\$\(THREAD_MODEL\)/, 'thread_pthread') - used_imacro = {} - includes_macro.each {|k, v| - if dd.sub!(/\$\(#{Regexp.escape k}\)/) { v.join(' ') } - used_imacro[k] = true - end +#def guess_compiler_wd(filename, hint0) +# hint = hint0 +# begin +# guess = hint + filename +# if guess.file? +# return hint +# end +# hint = hint.parent +# end while hint.to_s != '.' +# raise ArgumentError, "can not find #{filename} (hint: #{hint0})" +#end + +def read_single_actual_deps(path_i, cwd) + files = {} + path_i.each_line.with_index {|line, lineindex| + next if /\A\# \d+ "(.*)"/ !~ line + files[$1] = lineindex } - dd = dd.strip.split(/\s+/) - if !File.file?("#{basename}.o") - warn "#{basename}.o not found." + # gcc emits {# 1 "/absolute/directory/of/the/source/file//"} at 2nd line. + compiler_wd = files.keys.find {|f| %r{\A/.*//\z} =~ f } + if compiler_wd + files.delete compiler_wd + compiler_wd = Pathname(compiler_wd.sub(%r{//\z}, '')) else - unless File.file? "#{basename}.i" - puts "#{basename}.i not found." + raise "compiler working directory not found" + end + deps = [] + files.each_key {|dep| + next if %r{\A<.*>\z} =~ dep # omit <command-line>, etc. + dep = Pathname(dep) + if dep.relative? + dep = compiler_wd + dep + end + if !dep.file? + warn "file not found: #{dep}" next end - incs = [] - File.foreach("#{basename}.i") {|line| - next unless /^# \d+ "([^"]*)"/ =~ line - inc = $1 - next if %r{\A[/<]} =~ inc - inc.sub!(%r{\A\./}, '') - inc.sub!(%r{\Ainclude/ruby/}, '') or - inc.sub!(%r{\Ainclude/}, '') or - inc.sub!(%r{\A\.ext/include/[^/]+/ruby/}, '') or - inc.sub!(%r{\Aenc/}, '') or - inc.sub!(%r{\Amissing/}, '') - #p inc - incs << inc - } - incs.uniq! - incs = incs.sort_by {|inc| [(dd.index(inc) || dd.length), incs.index(inc)] } - add = incs - dd - if !add.empty? || true - if incs[0] != dd[0] - raise "first file not matched: #{incs[0].inspect} v.s. #{dd[0].inspect}" - end - depline = "#{basename}.$(OBJEXT):" - used_imacro.each_key {|k| - if includes_macro[k].all? {|v| incs.include? v } - im = "$(#{k})" - incs.map! {|inc| - if includes_macro[k].include? inc - im0 = im - im = nil - im0 - else - inc - end - } - incs.compact! - else - needless = includes_macro[k].reject {|v| incs.include? v } - STDERR.puts "#{basename}.$(OBJEXT) can't use #{k}. #{needless.join(' ')} is not used." - end - } - - incs.each {|inc| - inc = inc.sub(/\Athread_pthread/, 'thread_$(THREAD_MODEL)') - if /_INCLUDES\)\z/ =~ inc - # use $(RUBY_H_INCLUDES) as is. - elsif inc == 'revision.h' - inc = '$(srcdir)/revision.h' - else - inc = "{$(VPATH)}#{inc}" - end - depline << " #{inc}" - } - lines = [] - while 72 < depline.length && depline.sub!(/\A(.{0,72}|.{72}.*?) /, '') - lines << $& + next if !dep.to_s.start_with?(cwd.to_s) # omit system headers. + deps << dep + } + deps +end + +def read_actual_deps(cwd) + deps = {} + Pathname.glob('**/*.o').sort.each {|fn_o| + fn_i = fn_o.sub_ext('.i') + next if !fn_i.exist? + path_o = cwd + fn_o + path_i = cwd + fn_i + deps[path_o] = read_single_actual_deps(path_i, cwd) + } + deps +end + +def concentrate(dependencies, cwd) + deps = {} + dependencies.keys.sort.each {|target| + sources = dependencies[target] + t (... truncated) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/