スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[探] GNU globalその2

ソースのtar-ballなり、zipなりを拾ってきて、昨日書いたGNU global
を使ってソースのhtmlを作るようなスクリプトを考えてみる。


■ディレクトリ/ファイル構成
あるディレクトリに以下のような構成でファイル、ディレクトリを配置。

xxxx-master → ソースを展開したもの。ここではサンプルとしてopenstackのgitリポジトリからソースの最新zipを取得し展開したものを使用してみた。
xxxx-tags → スクリプトから自動生成されるタグ用ディレクトリ
xxxx-html → スクリプトから自動生成されるhtml用ディレクトリ
makeSrcHtml.sh → ソースからxxxx-tags, xxxx-htmlを生成するスクリプト
wrapGtags.sh → ソースディレクトリに移動してからxxxx-tagsを生成するスクリプト
wrapHtags.sh → ソースディレクトリに移動してからxxxx-tagsを元にしてxxxx-htmlを生成するスクリプト



■makeSrcHtml.sh


#!/bin/bash
# makeSrcHtml.sh

#complist="ceilometer cinder glance heat horizon keystone neutron nova"
complist="ceilometer"

for comp in $complist
do
srcpath="${comp}-master"
dbpath="${comp}-tags"
destpath="${comp}-html"
title="${comp}-source"

echo "component [$comp]"

echo "gtags generate..."
./wrapGtags.sh $srcpath $dbpath

echo "htags generate..."
./wrapHtags.sh $srcpath $dbpath $title $destpath

echo "component [$comp] done."
done

echo "done."
exit 0




■wrapGtags.sh


#!/bin/bash
# wrapGtags.sh

conf=/usr/local/share/gtags/gtags.conf
label=pygments

CUR=`pwd`
srcpath=""
dbpath=""

if [ $# -eq 2 ]; then
srcpath=$CUR/$1
dbpath=$CUR/$2
else
echo "$0 [src-path] [db-path]"
exit 0
fi

gtags_opt=" --gtagsconf=$conf --gtagslabel=$label $dbpath "

if [ ! -d $dbpath ]; then
mkdir -p $dbpath
fi

cd $srcpath
gtags $gtags_opt
cd $CUR

echo "done."
exit 0




■wrapHtags.sh
オプション指定の内容
・シンボルにリンクをはる : s
・並び順はアルファベット順 : a
・行番号あり : n
・フレームあり : F

かなり絞っているが、これのほかに
・関数ごとにショートカットをつける : h
・検索フォーム(cgi, perl)をつける : f
なども好みで入れるといいだろう。


#!/bin/bash
# wrapHtags.sh

conf=/usr/local/share/gtags/gtags.conf
label=pygments

CUR=`pwd`
srcpath=""
dbpath=""
title=""
destpath=""

if [ $# -eq 4 ]; then
srcpath=$CUR/$1
dbpath=$CUR/$2
title=$3
destpath=$CUR/$4
else
echo "$0 [src-path] [db-path] [title] [dest-path]"
exit 0
fi

htags_opt=" -sanF --gtagsconf=$conf --gtagslabel=$label -d $dbpath -t $title $destpath "

if [ ! -d $destpath ]; then
mkdir -p $destpath
fi

cd $srcpath
htags $htags_opt
cd $CUR

echo "done."
exit 0


30分もあれば全部htmlになっているよ。早い。
とりあえず見れるものが出力できているみたい。



■おまけ

なお、htagsコマンドで-f, -hを追加してHTMLがどう吐き出されるかやってみた。

・-fは検索フォームが追加される。
 perlのcgiプログラムが追加され、そこから同じサーバ内のglobalコマンド
 たとえば/usr/local/bin/globalを叩いて、その実行結果を利用する
 ようなことが可能になる。

 ただしapacheなどhttpサーバを入れ連携する必要があり、また
 HTMLファイルを固めて他のところに持っていって閲覧する場合、
 移行先でもglobalコマンドを実行できないと真価が発揮できない。

・-hは、各関数、メソッドごとに前後の関数やページの先頭・末尾に
 ジャンプするためのショートカットが挿入される。
 これはあると便利だが、ちょっと冗長に見えなくもない。

検索フォームは、実際にubuntu(trusty)でapache2と連携をやってみた。
コンフィグ例を書いておけば詳しい解説はあまりいらないだろう。

最初に、以下のような感じでドキュメントルートを変更しておき、
cgidモジュールの有効化をした上で
apacheのコンフィグを書きかえてapache2を再起動している。


$ cd /var/www
$ sudo mv html html.org
$ sudo ln -s /vagrant/cinder-html/HTML html
$ sudo a2enmod cgid



#/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
ServerName 192.168.33.10
ServerAdmin werbmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Include conf-available/serve-cgi-bin.conf
</VirtualHost>



# /etc/apache2/conf-enabled/serve-cgi-bin.conf
<IfModule mod_alias.c>
<IfModule mod_cgi.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfModule mod_cgid.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfDefine ENABLE_USR_LIB_CGI_BIN>
ScriptAlias /cgi-bin/ /var/www/html/cgi-bin/
<Directory "/var/www/html/cgi-bin">
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
AddHandler cgi-script .cgi .pl
Allow from all
</Directory>
</IfDefine>
</IfModule>


なお、ここまで書いておいてなんだが、このままだとglobal.cgiは
実行可能なものの使い物にならない。ちょっと微調整がいる。

perlの中でやっていることを追うこと自体は難しくないので
上記の*-tagsというディレクトリの存在を思い出しつつ
実際に裏で動いているコマンドをやってみると、あーこれは
動かないなというのはわかると思う。

apache2の上記設定で、ドキュメントルートにあたるディレクトリに、
GTAGSROOTというファイルがあると思う。
これに記載されたディレクトリに、GTAGS、GRTAGS、GPATHの
ファイルが存在していないと、GTAGSROOTに移動したあとに
globalコマンドを実行しても検索結果が得られないので、
結果、cgiでも検索結果が得られずnot foundとなる。

これらG*のファイルをcgiから見えるところにおいてやれば、
意図した検索結果が表示できるようになる。

ということで、元のソースに余計なものを入れたくないために
タグ出力先のディレクトリを分けてたんだけども、そのために
cgi実行でうまく動かなくなるみたいなのだよね。

回避方法をglobalコマンドのオプションでなんとかなるか調べた
のだが、どうもうまい方法がなさそうなので、wrapGtags.sh
でタグ出力先を指定しているのが微妙な感じです。。




■関連エントリ

[探] GNU global (05/21)
関連記事
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

kr2

Author:kr2
ネコと音楽が好き。
CD紹介、技術ネタ
などの雑記帳。

カレンダー
10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
最近の記事
最近のコメント
最近のトラックバック
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。