読者です 読者をやめる 読者になる 読者になる

WebKit について (ツール)

WebKit の開発をサポートするツール群について。 WebKitTools/Scripts に色々入っています。例えば、私がよく使うものだと、

  • bugzilla に patch を投稿したり bugzilla の patch をコミットしたりする (bugzilla-tool)
  • patch を apply しつつ必要なら (svn|git) (add|rm) を呼んでくれる (svn-apply)
  • test を走らせるスクリプト (run-webkit-tests, run-webkit-unittests, run-javascriptcore-tests など)
  • 環境にあわせた方法でビルドする (build-webkit, build-dumprendertree, build-jsc など)
  • WebCore を手元のものに差し替えて Safari を走らせてくれる (run-safari, gdb-safari, あれ debug-safari ってなにが違うんだっけこれ…)
  • C++ のスタイルが WebKit のものにあっているかをチェックする (check-webkit-style)
  • ChangeLog を生成してくれる (prepare-ChangeLog)
  • ChangeLog の conflict を解決してくれる (resolve-ChangeLog)

なんかがあります。

WebKit は色々な環境をサポートしているので、環境ごとのビルド方法の違いを吸収してくれる build-webkit はありがたいものです。 Mac だと xcodebuild 、 Windows だと nmake (たぶん) 、 Qt だと qmake など、 WebKit は環境ごとのビルドシステムを尊重するような感じになっています。

これは実は結構やっかいなことで、新しいファイルを追加する時は全ての環境用にビルドシステム用のファイルを書き変えないといけないことになってしまいます。 Chrome は gyp という仕組みで各環境ごとのビルドファイルを生成してくれるので書き換えるのは一箇所ですむので、まぁそういうアプローチの方が良かっただろうなぁと思います。

上のリストに ChangeLog 関係のツールが二つあります。 WebKitChangeLog を手動でメンテナンスしていて、毎回似たような変更を作るのは面倒なので、変更点から自動的に ChangeLog entry の基本を作ってくれたり、よく conflict するファイルなので自動的に conflict を解決してくれるスクリプトが用意されています。

しかしまぁ、 ChangeLog なんていうものは (svn|git) log があれば基本いらないもので、みんながいじってるもんだからコミットする前にほとんど必ず conflict の解決をしなければならないし、コミット前に念のためと test を走らせてる間にまた conflict したり…とこれはとてもうざいものだったりします。 WebKit のえらい人も They need to die とか言ってるにも関わらず、残念ながらまだ死んでくれてないようです。

で、これらのスクリプト群ですが、恐ろしいことに書く言語が統一されていなくて、かつ組み合わせられています。例えば bugzilla-tool は Python で書かれているのですが、内部で Perl で書かれている svn-apply を中で呼んでいたり、 Perl で書かれている bugzilla から Ruby で書かれた patch を綺麗にフォーマットするスクリプトを呼んでいたりします。余談ですが LayoutTests の中では JavaScript が多用されていますし、動的なコンテンツに対してテストを行なう時は PHP も使われます。つまり WebKit は 5大スクリプト言語を全てソースツリーの中に持っているという…

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h