Ruby初心者スレッドPart7

このエントリーをはてなブックマークに追加
429デフォルトの名無しさん
ここのrakeの例を見ると
http://www.kuwata-lab.com/kwartz/kwartz3-users-guide.03.html
できそうではあるのですが・・・
430427:2006/08/20(日) 19:18:13
rakeのソース見てました。
def make_sources(task_name, extensions)
このあたりを見るに、ソースに対応した拡張子しか対応してなさそうです。

しかし、procを渡すと、その返却値のファイルで見てくれるので、
無理やり、

file 'hoge.o' => ['hoge.c', lambda{'Rakefile'}] do
 p "hoge.o hoge.c Rakefile"
end

とやるとうまくいきました。

普通のファイルも扱えるように、
要望だそうかな・・・って、どこに出せばいいんだろ。
431427:2006/08/20(日) 19:19:03
fileじゃなかった・・・

rule '.c' => ['.o', lambda{'Rakefile'}] do
 p "#{t.name} #{t.source} Rakefile"
end

です。すみません。
432デフォルトの名無しさん:2006/08/20(日) 22:38:47
>>430
rake-devl ML http://rubyforge.org/pipermail/rake-devel/
ruby-core あたりじゃまいか。

あとruleの順序が逆のような。

# Rakefile

task :default => 'hoge.o'

file '.foo'

rule '.o' => %w[.c Rakefile .foo] do |t|
p "#{t.name} #{t.sources.join(' ')}"
end
433patch:2006/08/20(日) 22:41:32
Index: lib/rake.rb
===================================================================
--- lib/rake.rb (リビジョン 568)
+++ lib/rake.rb (作業コピー)
@@ -1552,12 +1552,11 @@
     # Attempt to create a rule given the list of prerequisites.
     def attempt_rule(task_name, extensions, block, level)
-      sources = make_sources(task_name, extensions)
-      prereqs = sources.collect { |source|
+      prereqs = make_sources(task_name, extensions) { |source|
         if File.exist?(source) || Rake::Task.task_defined?(source)
           source
-        elsif parent = enhance_with_matching_rule(sources.first, level+1)
+        elsif parent = enhance_with_matching_rule(source, level+1)
           parent.name
         else
-          return nil
+          nil
         end
       }
@@ -1573,7 +1572,8 @@
         case ext
         when String
-          task_name.sub(/\.[^.]*$/, ext)
+          yield ext.sub(/\A(?=\.)/) {task_name.sub(/\.[^.]*$/, '')} or
+            yield ext or ext
         when Proc
-          ext.call(task_name)
+          yield ext.call(task_name)
         else
           fail "Don't know how to handle rule dependent: #{ext.inspect}"