なかだです。

At Fri, 8 Jul 2005 09:34:07 +0900,
U.Nakamura wrote in [ruby-dev:26473]:
> で、ripperの場合はそれで解決するような気がしなくもないんです
> けど、根本的にソースがあるべきディレクトリになんかファイルを
> 作るという作法が嫌なんですが、抜本的な解決法はないものでしょ
> うかねえ。

ちょっと難しいですねぇ。まだ全然ですがとりあえず試行錯誤中のもの。


Index: ext/extmk.rb =================================================================== RCS file: /cvs/ruby/src/ruby/ext/extmk.rb,v retrieving revision 1.79 diff -U2 -p -r1.79 extmk.rb --- ext/extmk.rb 13 May 2005 14:44:42 -0000 1.79 +++ ext/extmk.rb 8 Jul 2005 09:15:44 -0000 @@ -53,7 +53,8 @@ def extract_makefile(makefile, keep = tr end installrb = {} - m.scan(/^install-rb-default:[ \t]*(\S+)\n\1:[ \t]*(\S+)/) {installrb[$2] = $1} + m.scan(/^install-rb-default:[ \t]*(\S+)\s+(\S+)$/) {installrb[$2] = $1} oldrb = installrb.keys.sort newrb = install_rb(nil, "").collect {|d, *f| f}.flatten.sort + newrb.collect! {|f| File.join("$(srcdir)", f)} if target_prefix = m[/^target_prefix[ \t]*=[ \t]*\/(.*)/, 1] target = "#{target_prefix}/#{target}" Index: ext/ripper/depend =================================================================== RCS file: /cvs/ruby/src/ruby/ext/ripper/depend,v retrieving revision 1.9 diff -U2 -p -r1.9 depend --- ext/ripper/depend 6 Jun 2005 07:37:07 -0000 1.9 +++ ext/ripper/depend 8 Jul 2005 08:47:29 -0000 @@ -1,6 +1,5 @@ -.SUFFIXES: .y common: src rb src: ripper.c eventids1.c -rb: $(srcdir)/lib/ripper/core.rb +rb: lib/ripper/core.rb ripper.o: ripper.c $(hdrdir)/lex.c eventids1.c $(srcdir)/eventids2.c @@ -10,8 +9,8 @@ ripper.o: ripper.c $(hdrdir)/lex.c event ripper.y: $(hdrdir)/parse.y $(srcdir)/tools/preproc.rb - $(RUBY) $(srcdir)/tools/preproc.rb $(hdrdir)/parse.y > $@ + $(RUBY) $(srcdir)/tools/preproc.rb $(hdrdir)/parse.y > ripper.y -eventids1.c: $(hdrdir)/parse.y $(srcdir)/tools/generate-eventids1.rb ids1 - $(RUBY) $(srcdir)/tools/generate-eventids1.rb ids1 > $@ +eventids1.c: $(srcdir)/tools/generate-eventids1.rb ids1 + $(RUBY) $^ > eventids1.c ids1: $(srcdir)/tools/list-parse-event-ids.rb $(hdrdir)/parse.y @@ -21,6 +20,6 @@ ids2: $(srcdir)/tools/list-scan-event-id $(RUBY) $(srcdir)/tools/list-scan-event-ids.rb -a $(srcdir)/eventids2.c > $@ -$(srcdir)/lib/ripper/core.rb: $(srcdir)/lib/ripper/core.rb.in ids1 ids2 $(srcdir)/tools/generate-ripper_rb.rb - $(RUBY) $(srcdir)/tools/generate-ripper_rb.rb $@.in ids1 ids2 > $@ +lib/ripper/core.rb: $(srcdir)/tools/generate-ripper_rb.rb lib/ripper/core.rb.in ids1 ids2 + $(RUBY) $^ > lib/ripper/core.rb # Index: ext/ripper/tools/generate-ripper_rb.rb =================================================================== RCS file: /cvs/ruby/src/ruby/ext/ripper/tools/generate-ripper_rb.rb,v retrieving revision 1.6 diff -U2 -p -r1.6 generate-ripper_rb.rb --- ext/ripper/tools/generate-ripper_rb.rb 23 Sep 2004 10:49:11 -0000 1.6 +++ ext/ripper/tools/generate-ripper_rb.rb 7 Jul 2005 03:37:26 -0000 @@ -1,4 +1,6 @@ # $Id: generate-ripper_rb.rb,v 1.6 2004/09/23 10:49:11 aamine Exp $ +STDOUT.binmode + def main template, ids1, ids2 = *ARGV Index: lib/mkmf.rb =================================================================== RCS file: /cvs/ruby/src/ruby/lib/mkmf.rb,v retrieving revision 1.223 diff -U2 -p -r1.223 mkmf.rb --- lib/mkmf.rb 7 Jun 2005 09:30:15 -0000 1.223 +++ lib/mkmf.rb 8 Jul 2005 09:18:01 -0000 @@ -506,5 +506,5 @@ def install_files(mfile, ifiles, map = n d.sub!(prefix, "") if prefix d = (d.empty? || d == ".") ? dir : File.join(dir, d) - f = File.join(srcprefix, f) if len + #f = File.join(srcprefix, f) if len path[d] << f end @@ -1042,16 +1042,18 @@ static: $(STATIC_LIB)#{$extout ? " inst files.each do |f| dest = "#{dir}/#{File.basename(f)}" - mfile.print("install-rb#{sfx}: #{dest}\n") - mfile.print("#{dest}: #{f}\n\t$(#{$extout ? 'COPY' : 'INSTALL_DATA'}) ") + src = RULE_SUBST && $nmake != ?b ? RULE_SUBST % [f] : File.join(srcprefix, f) + mfile.print("install-rb#{sfx}: #{dest} #{File.join(srcprefix, f)}\n") + mfile.print("#{dest}: #{src}\n\t$(#{$extout ? 'COPY' : 'INSTALL_DATA'}) ") sep = config_string('BUILD_FILE_SEPARATOR') if sep - f = f.gsub("/", sep) + #f = f.gsub("/", sep) sep = ":/="+sep - f = f.gsub(/(\$\(\w+)(\))/) {$1+sep+$2} - f = f.gsub(/(\$\{\w+)(\})/) {$1+sep+$2} + #f = f.gsub(/(\$\(\w+)(\))/) {$1+sep+$2} + #f = f.gsub(/(\$\{\w+)(\})/) {$1+sep+$2} else sep = "" end - mfile.print("#{f} $(@D#{sep})\n") + f = $nmake ? "**" : "^" + mfile.print("$(#{f}#{sep}) $(@D#{sep})\n") end end @@ -1070,5 +1072,5 @@ site-install-rb: install-rb return unless target - mfile.puts SRC_EXT.collect {|ext| ".path.#{ext} = $(VPATH)"} if $nmake == ?b + mfile.puts((SRC_EXT + [".rb"]).collect {|ext| ".path.#{ext} = $(VPATH)"}) if $nmake == ?b mfile.print ".SUFFIXES: .#{SRC_EXT.join(' .')} .#{$OBJEXT}\n" mfile.print "\n" @@ -1133,6 +1135,15 @@ site-install-rb: install-rb implicit = [[m[1], m[2]], [m.post_match]] next - elsif RULE_SUBST and /\A[$\w][^#]*:/ =~ line - line.gsub!(%r"(?<=\s)(?!\.)([^$(){}+=:\s\/\\,]+)(?=\s|\z)") {|*m| RULE_SUBST % m} + elsif /\A[$\w][^#]*:/ =~ line + if RULE_SUBST + line.gsub!(%r"(?<=\s)(?!\.)([^$(){}+=:\s\/\\,][^$(){}+=:\s,]*)(?=\s|\z)") {|*m| + RULE_SUBST % m + } + end + else + if $nmake + line.gsub!(/(?<!\$)((?:\$\$)*)\$[+^]/, '\1$**') + line.gsub!(/(?<!\$)((?:\$\$)*)\$\([+^]:/, '\1$(**:') + end end depout << line
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦