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 How to Build an XPCOM Component in Javascript | MDN)
- Gecko SDK | MDNによれば、XULRunnderをビルドすると割と簡単との事
と言う訳なので、XULRunnerのビルドをしてみます。
XULRunnerのソースコードを持って来る
XULRunner 1.8.0.4 Release Notes - Archive of obsolete content | MDNを見てソースを持って来ましょう。
$ 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
mozconfigを持って来る
ビルドオプションの設定 - Mozilla | MDNによれば、.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しか無いのかな。良く分からん。
追記
xpidl - XPIDL | MDNに割とまとまってた。。。
Mozillaの情報って氾濫しまくりんぐ。orz...
*1:もの凄い時間掛かる