npruntimeのサンプルをビルド、実行してみる

npruntimeとは:
https://developer.mozilla.org/En/Gecko_Plugin_API_Reference:Scripting_plugins(英語)をみるべし。
要はFirefoxGoogle ChromeとかOperaで使われている外部プラグインであるNPAPIの機能の一つ。
これができると何が嬉しいかというと「Javascriptからプラグインを叩ける」ということ。
例えば、ブラウザを経由せずにファイルをダウンロードしたい、とかそういうときに使う。

プラグインの拡張子はWindowsだったら.dllファイル、Linuxだったら.so、Macは・・・しらん。
このプラグインのサンプルがFirefoxソースコードにあるので、それを実際にmakeして動かしてみる。
環境はUbuntu 10.04でやります。Linux

以下のページを参考にやりました。
http://www.cmiss.org/cmgui/wiki/BuildingSampleNpruntimePlugins(英語)

ソース、SDKのダウンロード

まずはFirefoxのソースファイル
ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/
をDL。
適当なバージョンを選んで、sourceディレクトリを見つけてOSに併せてDL。
自分はバージョン3.6.20を選びました。

また、SDKもDLしておく。(いるのか不明)
Gecko SDK - Mozilla | MDN
これもOSにあわせて。自分はGecko 1.9.2 (Firefox 3.6)のLinux i686を選択。

下準備

ビルドの前に以下をインストールしておく。(不要かも)

sudo apt-get install auto-make
sudo apt-get install libdbus-glib-1-dev
sudo apt-get install libcurl4-gnutls-dev

ビルドの準備

ソースとSDKを適当なディレクトリに解凍。とりあえずホームが無難。

次に解凍したmozillaディレクトリに行き、
toolkit/toolkit-makefiles.shを編集。
MAKEFILES_pluginのグループを見つけて以下の行を追加。

modules/plugin/sdk/samples/npruntime/Makefile

mozillaディレクトリに戻って、以下を実行。

$ cp browser/config/mozconfig .

http://d.hatena.ne.jp/uniker/20070427/1177654300

んで、SDKディレクトリを指定してconfigureする。

$ ./configure --with-libxul-sdk=解凍したSDKディレクト
$ ./configure

これを実行すると、さっきの設定で指定したディレクトリにMakefileが生成される。

ビルドする

config/
modules/plugin/base/public/
modules/plugin/sdk/samples/npruntime/

上から順番に移動してmakeする。
二番目のディレクトリのmakeでエラーが出ても先に進んで大丈夫。

これで、npruntimeのディレクトリにlibnprt.soができる。

使ってみる

Firefoxを利用してこのプラグインが正しく動いているか確認する。
まず、生成されたプラグインを~/.mozilla/plugins/にコピー。ディレクトリがなければ作る。

そして、npruntimeと同じディレクトリにある「test.html」をFirefoxで開くと、
プラグインが動く様子を見ることができる。

コンソールで、

$ firefox test.html

と起動したほうが、コンソールにデバッグメッセージが表示されるので、
動いている様子がわかりやすい。
改造するならば、「plugin.cpp」と「nprt.def」をいじっていけばいいと思われ。