зеркало из https://github.com/github/ruby.git
* common.mk: Dependency updated.
* tool/update-deps: Rewritten. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40240 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
c0c86b55a8
Коммит
28c8e57ca4
|
@ -1,3 +1,9 @@
|
|||
Thu Apr 11 21:02:19 2013 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* common.mk: Dependency updated.
|
||||
|
||||
* tool/update-deps: Rewritten.
|
||||
|
||||
Thu Apr 11 19:59:48 2013 NARUSE, Yui <naruse@ruby-lang.org>
|
||||
|
||||
* common.mk: partially revert r40183, which breaks building on
|
||||
|
|
96
common.mk
96
common.mk
|
@ -589,6 +589,23 @@ PHONY:
|
|||
$(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
|
|||
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 $(RUBY_H_INCLUDES) \
|
|||
$(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_INCLUDES) {$(VPATH)}re.h \
|
|||
{$(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.c {$(VPATH)}regint.h \
|
|||
{$(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 {$(VPATH)}iseq.h \
|
|||
$(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)}gc.h {$(VPATH)}iseq.h \
|
|||
{$(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
|
||||
|
||||
|
|
262
tool/update-deps
262
tool/update-deps
|
@ -1,139 +1,157 @@
|
|||
#!/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
|
||||
# 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
|
||||
|
||||
src = File.read("common.mk")
|
||||
require 'pathname'
|
||||
require 'pp'
|
||||
|
||||
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
|
||||
}
|
||||
ENV['LC_ALL'] = 'C'
|
||||
|
||||
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
|
||||
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!
|
||||
}
|
||||
end while again
|
||||
|
||||
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
|
||||
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
|
||||
}
|
||||
dd = dd.strip.split(/\s+/)
|
||||
if !File.file?("#{basename}.o")
|
||||
warn "#{basename}.o not found."
|
||||
dependencies
|
||||
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
|
||||
}
|
||||
# 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
|
||||
}
|
||||
next if !dep.to_s.start_with?(cwd.to_s) # omit system headers.
|
||||
deps << dep
|
||||
}
|
||||
deps
|
||||
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 << $&
|
||||
end
|
||||
lines << depline
|
||||
matched = lines.join("\\\n ")
|
||||
matched << "\n"
|
||||
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]
|
||||
target = target.relative_path_from(cwd)
|
||||
sources = sources.map {|s| s.relative_path_from(cwd) }
|
||||
if %r{\A\.\.(/|\z)} =~ target.to_s
|
||||
warn "out of tree target: #{target}"
|
||||
next
|
||||
end
|
||||
end
|
||||
#STDERR.puts matched.inspect
|
||||
matched
|
||||
}
|
||||
sources = sources.reject {|s|
|
||||
if %r{\A\.\.(/|\z)} =~ s.to_s
|
||||
warn "out of tree source: #{s}"
|
||||
true
|
||||
else
|
||||
false
|
||||
end
|
||||
}
|
||||
deps[target] = sources
|
||||
}
|
||||
deps
|
||||
end
|
||||
|
||||
puts src
|
||||
def compare_deps(make_deps, actual_deps)
|
||||
targets = actual_deps.keys.sort_by {|t|
|
||||
ary = t.to_s.split(%r{/})
|
||||
ary.map.with_index {|e, i| i == ary.length-1 ? [0, e] : [1, e] } # regular file first, directories last.
|
||||
}
|
||||
targets.each {|target|
|
||||
actual_sources = actual_deps[target]
|
||||
if !make_deps.has_key?(target)
|
||||
warn "no makefile dependency for #{target}"
|
||||
else
|
||||
make_sources = make_deps[target]
|
||||
lacks = actual_sources - make_sources
|
||||
puts "#{target} lacks: #{lacks.join(" ")}" if !lacks.empty?
|
||||
unused = make_sources - actual_sources
|
||||
puts "#{target} unuse: #{unused.join(" ")}" if !unused.empty?
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
def main
|
||||
cwd = Pathname.pwd
|
||||
make_deps = read_make_deps(cwd)
|
||||
make_deps = concentrate(make_deps, cwd)
|
||||
#pp make_deps
|
||||
actual_deps = read_actual_deps(cwd)
|
||||
actual_deps = concentrate(actual_deps, cwd)
|
||||
#pp actual_deps
|
||||
compare_deps(make_deps, actual_deps)
|
||||
end
|
||||
|
||||
main
|
||||
|
|
Загрузка…
Ссылка в новой задаче