2008年4月15日火曜日

(FreeBSD) portsでインストールしたphpDocumentorが動かない ~ PHP Parse error: syntax error, unexpected T_DNUMBER in /usr/local/share/pear/PhpDocumentor/phpDocumentor/Setup.inc.php on line 193

あまりよく知らないんですが、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 ; \



の間違いなのかな?



0 件のコメント:

コメントを投稿