Rubyでmake

Rubyにmakeがあったら面白いんじゃないかと言う発想。

make("index.html", $0, "wiki.db") do
  # HTML生成
end

文法がそっくりにできそう。

残念ながら、多重の依存関係は無い。

module Make
  module_function
  
  # makeが必要かどうか判断する
  # true 必要
  def make?(target, *prereq)
    return true unless File.exist?(target) # targetが存在しない
    return true if prereq.length.zero? # 依存ファイルが無い
    
    target_ctime = File.stat(target).ctime
    prereq.each do |req|
      return true if target_ctime < File.stat(req).ctime
    end
    return false
  end
  
  # target : prereq1 prereq2 ....
  #         {  ruby code  }
  def make(target, *prereq)
    if make?(target, *prereq)
      yield
    end
  end
end

makeでは出来ない面白いことが出来そうな気がする。

しまった。

アルゴリズムが全然わからないので、AWK本を開いてみた(makeの作り方が書いてある)

読んでみたけど、全然わからないので、サンプルコードを入手することにした。

実は、サンプルコードが凄かった。

サンプルコードがAWKで固めてある!!!!

05.awk { print $1, $3 }
06.awk { print $1, $2 * $3 }
07.awk { print NR, $0 }

固めかた。

{print FILENAME, $0}

解凍は面倒。

AWKはやっぱすげぇ。

参考
追記

id:Roccoさんからのツッコミより。