ViVa! Saborigineer.
クロスリファレンス
最終更新:
saborigineer
-
view
クロスリファレンス
ソフトウェア開発において、スペックアウトやレビュー、バグ原因追跡のために膨大な量のソースコードを追うというのは大変な労力がかかります。
「この関数どこで定義されてんだー!?」とか、「検索やgrepしてみたけど、ヒットしすぎてどれかわかんねぇ。・゜・ヽ(*゚∀゚)ノ・゜・」
なんて方に最適なクロスリファレンスのご紹介です。
なんて方に最適なクロスリファレンスのご紹介です。
LXR (Linux Cross Reference)
「クロスリファレンス」と呼ばれるツールは多々あれど、筆者的に一番しっくりきているのが「LXR」です。
このツールはソースコードをブラウジングできるようにしてくれる。
筆者もお仕事で使っていますが、プロジェクトメンバーからは概ね好評を得ています。
筆者もお仕事で使っていますが、プロジェクトメンバーからは概ね好評を得ています。
このツールはLinuxカーネルのクロスリファレンスでも使われているし、Mozillaでも使われていたりします。
英語圏ではメジャーなのかもしれませんが、日本語の説明サイトが見つからなかったので、筆者の経験をこのページに念写してみようと思ふ。
英語圏ではメジャーなのかもしれませんが、日本語の説明サイトが見つからなかったので、筆者の経験をこのページに念写してみようと思ふ。
(…README(英語)読めばいいだけなんだけどね。)
筆者が試した環境
- Linux (CentOS)
- apache
- perl
必要なもの
- lxr-0.3.1
http://sourceforge.net/projects/lxr
からダウンロード。
※開発中のver0.9xもありますが、ver0.31と利用方法が異なるため、ver0.9xを試したことはありません。
からダウンロード。
※開発中のver0.9xもありますが、ver0.31と利用方法が異なるため、ver0.9xを試したことはありません。
- glimpse
構築手順
1.LXRのディレクトリを決定する。
例:「/var/www/html/lxr」
2.apacheの設定(httpd.conf)にクロスリファレンスの設定を記述する。
以下は変更例。
以下は変更例。
--------- ここから # # DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # DocumentRoot "/var/www/html" ←★DocumentRoot 「1.~」で決めたディレクトリ # Cross Reference ←★クロスリファレンスの設定 <Directory /var/www/html/lxr> Options All AllowOverride All </Directory> --------- ここまで
3.LXRの環境構築
・lxr-0.3.1を適当な場所に展開し、Makefileの更新を行う。
・lxr-0.3.1を適当な場所に展開し、Makefileの更新を行う。
# tar zxvf lxr-0.3.1.tgz # vi Makefile --------- ここから # Makefile for installation and configuration of LXR # The location of your perl5 binary PERLBIN=/usr/bin/perl ←★perlのパスを設定 # LXR will be installed here INSTALLPREFIX=/var/www/html/lxr ←★LXRのインストールディレクトリを設定 --------- ここまで
・LXRをインストールする。(root権限)
# make # make install これにより、「/var/www/html/lxr」にLXRがインストールされます。
・glimpseのインストール
glimpse-latest.tar.gzを適当な場所に展開し、インストールします。 # tar zxvf glimpse-latest.tar.gz # cd <展開してできたディレクトリ> # ./configure # make # make install 注:環境(gccのバージョン依存?)により、glimpseをインストールできないことがあるかもしれませんが、 インストールできなくともクロスリファレンスは作成できます。 ただし、"freetext search"、"file search"の使用が制限されます。
・LXR設定ファイル(/var/www/html/lxr/http/lxr.conf)の更新
利用環境に合わせて、設定を変更します。
利用環境に合わせて、設定を変更します。
--------- ここから # Configuration file. # Define typed variable "v", read valueset from file. variable: v, Version, [/var/www/html/lxr/source/versions], [/var/www/html/lxr/source/defversion] ↑★バージョンによりソースを区別するファイルのパスの指定 # Define typed variable "a". First value is default. #variable: a, Architecture, (i386, alpha, m68k, mips, ppc, sparc, sparc64) ↑★アークテクチャでソースが変わる場合は、コメントアウト # Define the base url for the LXR files. baseurl: http:/xxx.xxx.xxc/lxr/http/source ↑★LXRのURL。環境に合わせて変更してください。 # These are the templates for the HTML heading, directory listing and # footer, respectively. htmlhead: /var/www/html/lxr/http/template-head htmltail: /var/www/html/lxr/http/template-tail htmldir: /var/www/html/lxr/http/template-dir ↑★templateファイルのディレクトリ # The source is here. sourceroot: /var/www/html/lxr/source/$v/source/ srcrootname: Source ↑★ソースのrootディレクトリとその名前。ここでは「source」としています。 ★変更したい場合は、○○の部分を変えてください。 ★「$v」はバージョン名。ここでは意識する必要ありません。 ★例:)sourceroot: /var/www/html/lxr/source/$v/○○/ ★例:)srcrootname: ○○ # "#include <foo.h>" is mapped to this directory (in the LXR source # tree) incprefix: /include # The database files go here. dbdir: /var/www/html/lxr/source/$v/ ↑★クロスリファレンスのデータベース格納ディレクトリ # Glimpse can be found here. glimpsebin: /usr/local/bin/glimpse ↑★glimpseのパス。インストールしたパスに修正してください。 # The power of regexps. This is pretty Linux-specific, but quite # useful. Tinker with it and see what it does. (How's that for # documentation?) map: /include/asm[^\/]*/ /include/asm-$a/ map: /arch/[^\/]+/ /arch/$a/ --------- ここまで
・cgiを使用するため、lxr/http/に.htaccessを作成する。
内容は以下の通り。
内容は以下の通り。
--------- ここから <Files ~ (search|source|ident|diff|find)$> SetHandler cgi-script </Files> --------- ここまで
クロスリファレンスの作成方法
・lxr/sourceにソースファイルを展開する。
このとき、lxr/source/バージョン名/sourceとなるようにする。
lxr.confで変更した場合は、変更内容に合わせてください。
このバージョン名が、LXRのWebページ上で表示されるバージョン名(※)となる。
このとき、lxr/source/バージョン名/sourceとなるようにする。
lxr.confで変更した場合は、変更内容に合わせてください。
このバージョン名が、LXRのWebページ上で表示されるバージョン名(※)となる。
※バージョン名には「_(アンダーバー)」等、使用できない文字があります。
・genxrefを使って、lxr/source/バージョン名/にデータベース(fileidx,xref)を作成する。
データベースの作成にかかる時間はソースの規模によります。
データベースの作成にかかる時間はソースの規模によります。
# cd /var/www/html/lxr/source/バージョン名/ # ../../bin/genxref ./source
・fileidx、xrefのアクセス権の変更
# chmod 644 fileidx xref
・"freetext search"、"file search"用のインデックスを作成する。
# cd /var/www/html/lxr/source/バージョン名/ # glimpseindex -H . source ←★インデックスの作成 # chmod 644 .glimpse_* ←★インデックスファイルのパーミッション変更
・versionsにバージョン名を追加する。
はじめての場合は、lxr/source/にversionsというファイルを作成する。
はじめての場合は、lxr/source/にversionsというファイルを作成する。
# cd /var/www/html/lxr/source/ # vi versions
例えば、バージョン名を「lxr-sample」とした場合が以下の内容を記述する。
--------- ここから lxr-sample ←★今回追加分 … ←★別バージョンは羅列して書いていく --------- ここまで
・デフォルトのバージョン名を変更する場合は、defversionを変更する。
はじめての場合は、lxr/source/にdefversionというファイルを作成する。
はじめての場合は、lxr/source/にdefversionというファイルを作成する。
--------- ここから lxr-sample ←★当然だが、デフォルトバージョンは1つしか指定できない --------- ここまで
以上でクロスリファレンスが作成される。
http://~/lxr/http/source(lxr.confの設定)にアクセスすると、参照できると思います。
http://~/lxr/http/source(lxr.confの設定)にアクセスすると、参照できると思います。
追伸
LXR 0.9x系に詳しい方、構築方法教えてください。