SSブログ

GNU Global によるソースコードの閲覧(lighttpdを使って) [ぱそ関係]

GNU Global というのがあります。 ソースコードからすばやく目的の関数が定義されてるところを表示したりするツールですな。 最近は HTML ベースでクリックするとその関数の定義の場所に飛べたりしてハイパーテキストの恩恵を享受しまくりなのもあります(本家サイドにもサンプルがある)が、それを自分でもやってみたいなと思って導入してみた記録。

ということで、導入してみよう。



●ツールのインストール
Host OS は Fedora Core 5。 FC4 でも FC3 でも同じようなもんだったと思います。

まずは GNU Global のインストール。 ひょっとしたら,リポジトリが extra だったかも。

# yum install global

実は,単なるソースの色つき閲覧だけではく関数の検索というのもできて,それには CGI が必要=HTTP サーバーが必要っていうことらしい. 最近はやりの lighttpd というのが簡単そうなので,これをインストール. ちなみに lighttpd というネーミングは本家サイトに曰く Light footprint + httpd = LightTPD ということだそうで。
下記コマンドラインで \* がくっついてますが、テキトーにあるもん入れとけっていうだけです。

# yum install lighttpd\*


------------------------------
●コンテンツの準備
肝心のソースは何でもOK. とりあえず /usr/src/redhat/BUILD/rhbg-0.16.5 ぐらいを用意.
そしてソースのルートでおもむろに gtags 起動.

# cd /usr/src/redhat/BUILD/rhgb-0.15.6
# gtags -v


-v オプションは verbose なだけなので必須ではないけど,途中経過がわからないと心配なのでやっぱりつけよう. ちなみに gtags の実行時間はソースコードの量に比例するので,いきなり Linux Kernel とかをやると,なかなか終わらずひやひやします.

すると、GTAGS, GPATH, GSYMS, GR何とかっていうファイルが作成される. CUI な人は global コマンドを使っていろいろやるらしい。 私はコマンドをチマチマ打ってソースを眺めるくらいなら grep -r と less、せいぜい emacs で十分です。

ということでハイパーテキスト化をすすめよう. HTML 化には htags というコマンドを使う. コマンド実行は gtags を実行したのと同じ場所で.

# htags -fFnvao -t "RHGB-0.16.5 page"


いろいろオプションありますが,意味は man 見ればわかるでしょう.
オススメは -f と -F と -v と -n と -a と -o,つまり上記のオプション. フレームを使ったページで検索CGIと行番号つけてアルファベット順のインデックスも作成し,ソース以外の README なんかもHTML にするってことです. Linux Kernel なら -m start_kernel もつけたほうがいいでしょう。 デフォルトページが main() ではなく start_kernel の検索結果になります。
設定ファイルを書くと,HTML のタグを変えたり色を変えたり tab インデントの文字数を変更できたり...といろいろ遊べそうですが,めんどくさいのでやりません.

htags の実行時間は gtags よりはるかに長く,10000ファイルを超えるような奴(Linux kernel ソースとか)は数年前の非力なマシンだと数時間かかったような気がします. Pen4 3GHz HT対応クラスだと数十分かな。

htags が終わると HTML というフォルダが出来ます. この中に index.html というファイルがあってそれがメインページです. これをブラウザで表示してやれば,とりあえず関数をクリックして定義を表示とかはできます.

------------------------------
●HTTPサーバー
さて、firefox index.html とかやってファイルを直接ブラウザで開いてもいいけど、やっぱCGI使って検索もしたいでしょ。 ということでHTTPDの設定。

/etc/lighttpd/lighttpd.conf の編集。 mod_cgi の enable。 # を外すと機能が使えるようになります。

-#                               "mod_cgi",
+                               "mod_cgi",

あと、CGI の設定も

cgi.assign   = ( ".pl" => "/usr/bin/perl",
                    ".chi" => "/usr/bin/perl" )


そのほか server.document-root とかログ置場、は環境によってテキトーに変える。 ちなみに、FC5 だとデフォルトのサーバールートが /srv/www/lighttpd/ に設定されていて、Powered by lighttpd っていうサンプルページもおいてある。

すでにサーバーが起動している場合は再起動

# /etc/init.d/lighttpd restart


------------------------------
●Firewall の設定。 他のマシンでもブラウズしたい場合はメニュー → System Settings → Security Level を選択するか、以下のコマンドを実行。

# system-config-securitylevel

そして Firewall Options の WWW(HTTP)にチェックを入れOKボタン。 たぶん 80:tcp がオープンになる。 ポートを変更している場合は Other ports: と言う欄に 8080:tcp などと>port<:>tcp/udp< という形式で記述する。 複数ポートの設定はカンマで区切る。 ちなみに、Global IP なマシンだとこれで全世界に公開される気がする。

自分のマシンだけなら、http://localhost を使えばポートを閉じててもOKみたい。

------------------------------
●サーバーデーモンのスタート

# /etc/init.d/lighttpd start

ついでに、起動時に自動で起動するようにサービスの設定。
メニュー → System Settings → Server Settings → Services を選択するか、以下のコマンドを実行。

# system-config-services

Edit Runlevel で All を選択し、lighttpd にチェックを付ける。 もちろん、Runlevel 5 のときだけサーバー起動とか好みで勝手にやってください。

そういえば、肝心のコンテンツをコピー。 server.document-root の下に名前をつけて HTML フォルダを移動する。

# mv /usr/src/redhat/BUILD/rhgb-0.15.6/HTML /srv/www/lighttpd/rhgb


URL は http://localhost/rhgb/ に見える。 サイトのトップページはテキトーに作って下さい。



●CGI 使えてる?

最近気が付いたけど、CGI を使って検索をする場合、Global のバージョンによっては HTML フォルダだけじゃなくて GTAGS とかもコピーしておかないといけないらしい。

で、単に HTML フォルダをリネームして配置だと、相対パスの関係で複数のフォルダを配置しようとしたときに GTAGS ファイルがコンフリクトする。 くどく書くと http://localhost/rhgb/../GTAGS とか http://localhost/linux-2.6.16/../GTAGS を期待されてるわけですが、rhbg 用 GTAGS と linux-2.6.16 用 GTAGS のファイルパスがみんな同じで住み分けできないんですな。

ということで回避方法。 要は gtags のファイルをHTML フォルダに入れて cgi を調節すればいいだけです。

# cd /usr/src/redhat/BUILD/rhgb-0.15.6/
# emacs HTML/cgi-bin/global.cgi
→ 真ん中ぐらいに chdir("../.."); という行が1ヶ所あるので  chdir(".."); に書き換える。
# mv G*  HTML
# mv HTML /srv/www/lighttpd/rhgb



------------------------------
●さらなる設定 -- RSS フィードによる更新の通知

firefox なんかだと、ライブブックマークと言う機能があって RSS の情報を使って動的にブックマーク(お気に入り)を再構築する機能があります。 それもつかえるようにしてみよう。

まずは RSS の情報(XMLファイル)をつくる。 とりあえずファイルの場所は /srv/www/lighttpd/rss.xml ということにする。

。。。といっても、手作業です。 いや、本気で RSS フィードをやってるサイトはページの構成管理と連動して自動更新プログラムかなにかを動かしてるんでしょうけど、わたしはそこまでやりません。 中身は以下のような感じ。

# cat rss.xml
<rss version="2.0">
        <channel>
                <item>
                        <title>updated web page 1</title>
                        <link>http://localhost/some_page.html </link>
                </item>
                <item>
                        <title>updated web page 2</title>
                        <link>http://localhost/some_page2.html </link>
                </item>
        </channel>
</rss>

item の中に title と link を書く。 複数の item を書けば書いただけライブブックマークとして登録(更新)される。

見てる人がライブブックマークを更新するタイミングは、ブラウザ起動時および命じてきに右クリックで再読み込みをしたとき。 ひょっとしたら、日付とかを入れておけばもうちょっと賢く更新されていくのかもしれない。
item の中にかけるエレメントとかについては http://www.xml.com/pub/a/2002/12/18/dive-into-xml.html あたりから手繰ってください。

そしたら、 index.html の <head> と </head> のところに以下の行を追加

<link href="http://localhost/rss.xml" rel="alternate" type="application/rss+xml" title="my site's RSS" />


href はファイルの URL、title はテキトー、あとの2つはおまじない。

これで、firefox で http://localhost/index.html を表示したときにアドレスバーの右端にオレンジ色のライブブックマーク登録アイコンが燦然と輝くことでしょう。 ライブブックマークでは上から順番に title に書いた文字列がお気に入りのメニューアイテムとして表示され、選ぶと link の URL にジャンプできる。 サイトに更新があったら、item を先頭に追加したり好きにいじって遊ぼう。

ちなみに、RSS 情報を納めるファイル名に rss.xml のような名前を使う流派と index.rdf を使う流派があるみたいですな。 RSS のバージョンに遠因があるようですが、わたしには違いがわかりません。

以下 TDB
------------------------------
●さらなる設定 -- お気に入りのアイコン

IE でも firefox でもブックマーク(お気に入り)にサイトを登録すると洒落たアイコンが付いてくるサイトがある。 firefox だと、かってに favicon.ico というアイコンファイル(通称ファビコン)を探しにいくようだが、 IE だとページに仕込みを入れておかないといけない。

<link rel="shortcut icon" href="favicon.ico" />


------------------------------
●さらなる設定 -- ユーザー・パスワードによるアクセス認証
------------------------------
●さらなる設定 -- SSL による通信経路の暗号化


nice!(0) 
共通テーマ:パソコン・インターネット

nice! 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。