LXR(the Linux Cross Reference),linux
下的交叉索引工具,主要用来看源代码,其生成后的页面和http://lxr.linux.no/这个站点差不多,只不过生成自己的LXR页面的话在本地浏览不受网络影响,速度会快不少。
这里说一下我的安装过程。
1,安装apache
这个就不说了,网上一大堆教程。
./configure --prefix=/usr/local/apache2
make
make
install
2,perl 模块
我在安装的时候只需要另外安装这个模块:File::MMagic
cpan
-i File::MMagic
3,安装glimpse
去这里下载glimpse:http://webglimpse.net/trial/glimpse-latest.tar.gz
下载后按下面方式安装
tar
zxvf glimpse-latest.tar.gz
cd
glimpse-4.18.6/
./configure
make
make
install
只要安装flex就行了,debian下
apt-get install flex
4,下载LXR包并配置
①下载并解压LXR包
下载地址: http://sourceforge.net/projects/lxr
下载后解压到/usr/local/lxr下。
debian:/usr/local# tar zxvf lxr-0.9.5.tgz
debian:/usr/local# mv lxr-0.9.5 lxr
#复制template文件到/usr/local/lxr下面
debian:/usr/local/lxr# cp ./templates/* ./
②配置lxr.conf
我只修改了下面的几行
#glimpse所在目录,可以用whereis glimpse查看
‘glimpsebin’ => ‘/usr/local/bin/glimpse’,
’glimpseindex’ =>
‘/usr/local/bin/glimpseindex’,
#这个不用,注释掉
#’swishbin’ =>
‘/usr/local/bin/swish-e’,
’genericconf’ =>
‘/usr/local/lxr/lib/LXR/Lang/generic.conf’,
’ectagsconf’ =>
‘/usr/local/lxr/lib/LXR/Lang/ectags.conf’,
’baseurl’ =>
‘http://IP地址/lxr’, # Put your URL here
’baseurl_aliases’ => [
'http://localhost/lxr', 'http://www.ssnail.net/lxr'
],
‘range’ => [ readfile('srcroot/versions')
],
#代码所放目录
‘sourceroot’ =>
‘/usr/local/lxr/srcroot’,
#代码根目录的名字,自己喜欢的
’sourcerootname’ => ‘LXR
FOR SSNAIL’,
#用来放glimpse生成索引文件的目录,没有的话要自己生成
’glimpsedir’ =>
‘/usr/local/lxr/glimpse/databases’,
#这个不用,注释掉
#’swishdir’ =>
‘/a/directory/here/’,
③生成mysql数据库并修改lib/LXR/Index/Mysql.pm
LXR号称只支持mysql 4.x系列的,这么老的版本我当然没有了,看了一下代码,原来是因为LXR的数据表里用了release这样的字段,而release为mysql 5.0的关键字,这样只要在release 外面加上“就可以在mysql
5.0上用了。如下修改lib/LXR/Index/Mysql.pm
81c81
{dbh}->prepare(“select * from
${prefix}releases where fileid = ? and release =
?”);
—
> $self->{dbh}->prepare(“select * from
${prefix}releases where fileid = ? and `release`
= ?”);
83c83
{dbh}->prepare(“insert into
${prefix}releases (fileid, release) values (?, ?)”);
—
> $self->{dbh}->prepare(“insert into
${prefix}releases (fileid, `release`) values (?,
?)”);
130c130
{dbh}->prepare(“delete from
${prefix}releases ” . “where release = ?”);
—
> $self->{dbh}->prepare(“delete from
${prefix}releases ” . “where `release` = ?”);
同样修改initdb-mysql
create
table lxr_releases
(fileid int not null references lxr_files,
release char(255) binary not null,
primary
key (fileid,release)
);
—->
create
table lxr_releases
(fileid int not null references lxr_files,
`release` char(255) binary not null,
primary
key (fileid,release)
);
修改后,执行mysql
④建立必要的目录
#glimplse生成的索引数据文件所放目录
mkdir
-p /usr/local/lxr/glimpse/databases/
#我的源代码所放目录
mkdir
/usr/local/lxr/srcroot/
#生成version文件,这里表示我的内核代码放在/usr/local/srcroot/linux-2.6.24目录
echo
linux-2.6.24
>/usr/local/lxr/srcroot/versions
创建/usr/share/lxr/source/versions,这里记录所有要看的版本,内容是2.6.202.6.22
要保证2.6.22 =>/usr/share/lxr/source/2.6.22
创建/usr/share/lxr/source/defversion,这里记录缺省要看的版本,内容是2.6.22
之所以是这两个文件,见/usr/share/lxr/http/lxr.conf里的相关设置
5,配置apache访问。
LXR支持mod_perl和cgi两种方式,我采用的是cgi方式。
debian:/usr/local/lxr# mv .htaccess
.htaccess_mod_perl
debian:/usr/local/lxr# cp .htaccess_cgi
.htaccess
然后在apche的http.conf中加入下面的
Alias
/lxr/ “/usr/local/lxr/”
/usr/local/lxr>
AllowOverride
All
6,生成交叉索引页面。
一切改好之后就可以生成交叉索引数据了
debian:/usr/local/lxr# ./genxref
–url=http://www.ssnail.net/lxr
#这里很花时间,可以去休息一会儿了
最后访问 http://IP地址/lxr/source就可以看到生成的页面了