ttt

getttyent

(FreeBSD) portsでインストールしたphpDocumentorが動かない ~ PHP P

2008-04-14 23:16:18 | デジタル・インターネット

あまりよく知らないんですが、javadocみたいに、PHPでソースコードからドキュメントを生成できるphpDocumentorというツールがあります。

FreeBSDでは、portsになっていて、ports/devel/pear-PhpDocumentorです。

さっそく使ってみようと思ったら、

PHP Parse error:  syntax error, unexpected T_DNUMBER in /usr/local/share/pear/PhpDocumentor/phpDocumentor/Setup.inc.php on line 193

というエラー。

ファイル
/usr/local/share/pear/PhpDocumentor/phpDocumentor/Setup.inc.php
の193行目を見てみると…

192    $phpver = phpversion();
193    $phpdocver = PHPDOCUMENTOR_1.4.1;
194    if (isset($_GET['interface'])) {
195        $phpver = "<b>$phpver</b>";
196        $phpdocver = "<b>$phpdocver</b>";
197    }
198    phpDocumentor_out("PHP Version $phpver\n");
199    phpDocumentor_out("phpDocumentor version $phpdocver\n\n");

「PHPDOCUMENTOR_1.4.1」というのが、定数っぽいけど、なんとなく文法的におかしい。
そこで、その部分を適当に書き換えてみて、もう一度実行してみると、今度はべつのところで、似たようなエラー。

910    {
911        $this->render->addConverter('HTML','frames','default/');
912    }
913    if (empty($this->render->converters)) addErrorDie(PDERROR_NO_CON1.4.1TERS);

今度のは、「PDERROR_NO_CON1.4.1TERS」・・・って何これ?!

ports/devel/pear-PhpDocumentor/Makefileを見ると、こんなのがあります。

post-patch:
.for file in ${SUBFILES}
        @${REINPLACE_CMD} -e 's|VER|${PORTVERSION}|g ; \
                 s|@PEAR-DIR@|${PEARDIR}|g ; \
                 s|@DATA-DIR@|${DATADIR:S,/${PORTNAME}$,,}|g ; \
                 s|@WEB-DIR@|${DATADIR:S,/${PORTNAME}$,,}|g ; \
                 s|@DOC-DIR@|${DOCSDIR:S,/${PORTNAME}$,,}|g' ${WRKSRC}/${file}
.endfor

どうも、sedの置換コマンド、s|VER|${PORTVERSION}|g で、VERというところを、手当たりしだいに置換しているらしく、たとえば、

PHPDOCUMENTOR_VER  が  PHPDOCUMENTOR_1.4.1  へ

PDERROR_NO_CONVERTERS   が   PDERROR_NO_CON1.4.1TERS  へ

という具合に、勢いあまって、余計なところまで書き換えてしまっているようです。

とりあえず、portsのMakefileを、こんな風に書き換えて、VERを置換しないようにして、動作を確かめてみました。

post-patch:
.for file in ${SUBFILES}
        @${REINPLACE_CMD} -e '\
                 s|@PEAR-DIR@|${PEARDIR}|g ; \
                 s|@DATA-DIR@|${DATADIR:S,/${PORTNAME}$,,}|g ; \
                 s|@WEB-DIR@|${DATADIR:S,/${PORTNAME}$,,}|g ; \
                 s|@DOC-DIR@|${DOCSDIR:S,/${PORTNAME}$,,}|g' ${WRKSRC}/${file}
.endfor

これでmake installしてから、phpdocを実行。

% phpdoc -d ./html -t ./html_doc
PHP Version 5.2.5
phpDocumentor version @VER@

Parsing configuration file phpDocumentor.ini...
   (found in /usr/local/share/pear/data/PhpDocumentor/)...

done
Maximum memory usage set at 256M after considering php.ini...
using tokenizer Parser
(以下略)

@VER@というのが変ですが、とりあえず動きました。

ということは

        @${REINPLACE_CMD} -e 's|@VER@|${PORTVERSION}|g ; \

の間違いなのかな?