Hatena::ブログ(Diary)

Yet Another Hackadelic

2007-05-30

XULRunnerのビルドとxpidlのテスト

自分で拡張を作る際に、好き勝手にglobalな領域を侵すのも当然自由ではある物の、ある程度の汎用性を持たせたcomponentを開発しようと思ったらやはりXPCOM componentにしないとと言うことで、おもむろに調べて確かめてみた事のメモです。

でXPCOMはJavaScript/C++で記述出来るので、今回はJavaScriptで記述する場合の話です。

但し激しくIntelMacの話です。w

始めに

XPCOM componentって何かと言えば、Components.classesで呼び出せる奴です。

詳細については僕もまだ良く分からないので、ここらへんから情報を漁りましょう。

でXPCOM componentの開発の仕方ですが、

  • idlを定義する
  • xpidlコマンドを使ってxptと言うバイナリ形式のファイルを作る
  • idlで定義したインターフェースをjsで実装する

と言う手順になるようです。

今回はxpidlコマンドがあるsdkのビルドと、xpidlを使ってidlファイルをxptファイルに変換するまでです。

XULRunnerのビルド

で、何故XULRunnerなのかと言えば、

  • IntelMacだとsdkは自分でビルドしなきゃダメ(via no title)
  • no titleによれば、XULRunnderをビルドすると割と簡単との事

と言う訳なので、XULRunnerのビルドをしてみます。

XULRunnerのソースコードを持って来る

no titleを見てソースを持って来ましょう。

$ wget http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/1.8.0.4/source/xulrunner-1.8.0.4-source.tar.bz2
$ tar xjf xulrunner-1.8.0.4-source.tar.bz2
$ cd mozilla

解凍したらmozillaディレクトリが出来るのでそこまではとりあえず移動しておきます。

mozconfigを持って来る

no titleによれば、.mozconfigによってconfigureの結果が変わるそうなので、仕方ないので指示通りに。

$ cp xulrunner/config/mozconfig .mozconfig
ビルド
$ ./configure

ここでlibIDLが無いよって怒られる人が居るかもしれないので、MacPortで

$ sudo port install libidl

とかやってあげれば多分上手く行くかと。

あとはいつも通り、

$ make 
$ sudo make install

でインストール自体は完了。*1

試してみよう

sdk自体はビルドしたディレクトリから見て dist/sdk 以下にあります。

今回はMozLabの中のcomponentディレクトリにあるMozRepl.idlをxptに変換してみます。

$ mv MozRepl.xpt MozRepl.xpt.back
$ /usr/local/src/mozilla/dist/sdk/bin/xpidl -m typelib -w -v -I /usr/local/src/mozilla/dist/sdk/idl -e MozRepl.xpt MozRepl.idl

これで生成されているはず。

$ md5 MozRepl.xpt
MD5 (MozRepl.xpt) = 1c63dca76b1174697a0443d2439f9928
$ md5 MozRepl.xpt.back 
MD5 (MozRepl.xpt.back) = 1c63dca76b1174697a0443d2439f9928

うむ。出来たらしい。

まとめ

  • インストールはめんどい
  • IDLの書き方も覚えるの面倒だし、component化する際にjsの方も長々と記述が必要な模様。(factory作ったりとか)

とは言え、迂闊にglobal空間を汚染するのもなぁ。。。

と言うかMozilla上の汎用化されたライブラリ群ってXPCOMしか無いのかな。良く分からん。

追記

no titleに割とまとまってた。。。

Mozillaの情報って氾濫しまくりんぐ。orz...

*1:もの凄い時間掛かる

2007-05-02 赤貧再び

XULのデバッグ環境について

no titleを見てたんですが、若干Firefox2.0だと異なるようなのでメモ。

間違ってる可能性も否定出来ないので識者が居たら是非ツッコミをw

dump()を有効にする

about:configにて、extensions.logging.enabledをtrueにするとOKっぽぃ。

但し拡張のみの模様。

dump()の結果を見る。

firefox-binに--consoleオプションを付ける。(Linux)