HTML::Tidy のインストールではまった・・・

久々に Plagger のバージョンをアップグレードしようと思い立ち、cpan force install Plagger してみたらいろんなところでいっぱいエラーがでました。中でも一番つまずいたのが HTML::Tidy のインストール。そもそも libtidy がインストール済みでないと HTML::Tidy がインストールできないわけですが、cpan でのインストールってぬぼぉ〜っとしてキーボード叩いている多いので全然気がつきませんでした。

と言うことで一応いつものように備忘録としてメモを残しておきます。

- スポンサーリンク -

インストールエラー情報

今回はこんなエラーがでていました。初めの方のエラーを良く読めば、tidy.h が無いっていっている時点で libtidy が無いって気がつかないといけないんだけど。。。まだまだ未熟者で御座います。

gcc -c  -I. -I/usr/include/tidy -I/usr/local/include/tidy -I/sw/include/tidy -D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_
OFFSET_BITS=64 -I/usr/include/gdbm -O2   -DVERSION=\"1.08\" -DXS_VERSION=\"1.08\" -fpic "-I/usr/local/lib/perl5/5.8.7/x86_64-linux-thread-multi/CORE"   Tidy.c
Tidy.xs:5:18: tidy.h: そのようなファイルやディレクトリはありません
Tidy.xs:6:20: buffio.h: そのようなファイルやディレクトリはありません
Tidy.xs: In function `XS_HTML__Tidy__tidy_messages':
Tidy.xs:53: error: `TidyBuffer' が宣言されていません (この関数内で最初に利用)
Tidy.xs:53: error: (未宣言の各変数については、それが最初に現われたそれぞれの関数
Tidy.xs:53: error:  に対して一度だけ報告されます。)
Tidy.xs:53: error: 文法エラー が "errbuf" の前にあります
Tidy.xs:54: error: `TidyDoc' が宣言されていません (この関数内で最初に利用)
Tidy.xs:54: error: 文法エラー が "tdoc" の前にあります

〜中略〜

Tidy.xs:188: error: 文法エラー が "if" の前にあります
Tidy.xs:189: error: 文法エラー が '(' トークンの前にあります
Tidy.c:234: error: 文法エラー が '(' トークンの前にあります
Tidy.xs: In function `XS_HTML__Tidy__tidy_release_date':
Tidy.xs:198: 警告: 代入により、キャストなしで整数からポインタを作りました
make: *** [Tidy.o] エラー 1

インストール失敗。とりあえずサーバ環境として libtidy のインストール状況を見る。

rpm -qa|grep libtidy
パッケージ libtidy はインストールされていません

やっぱり libtidy が入っていないので、HTML Tidy Library Project からソースをとってきてコンパイルするも、どうにもコンパイルエラーがとれず。強引にインストールしたり挑戦するもこんなエラーが結局でたりする。

t/wordwrap...........
#   Failed test 'use HTML::Tidy;'
#   in t/wordwrap.t at line 8.
#     Tried to use 'HTML::Tidy'.
#     Error:  Can't load '/root/.cpan/build/HTML-Tidy-1.08/blib/arch/auto/HTML/Tidy/Tidy.so' for module HTML::Tidy: /root/.cpan/build/HTML-Tidy-1.08/blib/arch/auto/HTML/Tidy/Tidy.so: undefined symbol:
 tidyOptSetValue at /usr/local/lib/perl5/5.8.7/x86_64-linux-thread-multi/DynaLoader.pm line 230.
#  at (eval 3) line 2
# Compilation failed in require at (eval 3) line 2.
# BEGIN failed--compilation aborted at t/wordwrap.t line 8.
Undefined subroutine &HTML::Tidy::_tidy_clean called at /root/.cpan/build/HTML-Tidy-1.08/blib/lib/HTML/Tidy.pm line 306.
# Looks like you planned 2 tests but only ran 1.
# Looks like you failed 1 test of 1 run.
# Looks like your test died just after 1.
t/wordwrap...........dubious
        Test returned status 255 (wstat 65280, 0xff00)
DIED. FAILED tests 1-2
        Failed 2/2 tests, 0.00% okay
Failed Test         Stat Wstat Total Fail  Failed  List of Failed
-------------------------------------------------------------------------------
t/00-load.t            1   256     2    1  50.00%  1

〜中略〜

Failed 18/20 test scripts, 10.00% okay. 61/80 subtests failed, 23.75% okay.
make: *** [test_dynamic] エラー 255

う〜ん・・・だめだこりゃ。コンパイルでこれ以上悩むのはもう面倒くさいので、rpm を探す。google で検索すれば意外と簡単に見つかるものです。

取りあえず僕は CentOS 4 なのでここらへんから rpm をとってきました。i386 と x86_64 共にありますのでお手元の環境に合わせてどうぞ。

wget http://dev.centos.org/centos/4/testing/x86_64/RPMS/libtidy-0.99.0-9.20051025.el4.centos.3.x86_64.rpm
wget http://dev.centos.org/centos/4/testing/x86_64/RPMS/libtidy-devel-0.99.0-9.20051025.el4.centos.3.x86_64.rpm
wget http://dev.centos.org/centos/4/testing/i386/RPMS/libtidy-0.99.0-9.20051025.el4.centos.3.i386.rpm
wget http://dev.centos.org/centos/4/testing/i386/RPMS/libtidy-devel-0.99.0-9.20051025.el4.centos.3.i386.rpm

rpm -ivh libtidy-0.99.0-9.20051025.el4.centos.3.x86_64.rpm
rpm -ivh libtidy-devel-0.99.0-9.20051025.el4.centos.3.x86_64.rpm
rpm -ivh libtidy-0.99.0-9.20051025.el4.centos.3.i386.rpm
rpm -ivh libtidy-devel-0.99.0-9.20051025.el4.centos.3.i386.rpm

とりあえず libtidy も libtidy-devel もどちらも rpm でぶち込んでおく。再度インストールにチャレンジ。cpan でインストールした残骸の /root/.cpan/build/HTML-Tidy-1.06 からインストールしてみる。


[root@dev01 HTML-Tidy-1.06]# make
[root@dev01 HTML-Tidy-1.06]# make test
PERL_DL_NONLAZY=1 /usr/local/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00-load............ok
t/extra-quote........ok
t/ignore-text........ok
t/ignore.............ok
t/levels.............ok
t/message............ok
t/perfect............ok
t/pod-coverage.......ok
t/pod................ok
t/segfault-form......ok
t/simple.............ok
t/too-many-titles....ok
t/venus..............
#   Failed test 'Cooked stuff looks like what we expected'
#   at t/venus.t line 34.
#     Structures begin differing at:
#          $got->[47] = '    <center>'
#     $expected->[47] = '    <address>'
# Looks like you failed 1 test of 3.
t/venus..............dubious
        Test returned status 1 (wstat 256, 0x100)
DIED. FAILED test 3
        Failed 1/3 tests, 66.67% okay
Failed Test Stat Wstat Total Fail  List of Failed
-------------------------------------------------------------------------------
t/venus.t      1   256     3    1  3
Failed 1/13 test scripts. 1/56 subtests failed.
Files=13, Tests=56,  1 wallclock secs ( 0.40 cusr +  0.15 csys =  0.55 CPU)
Failed 1/13 test programs. 1/56 subtests failed.
make: *** [test_dynamic] エラー 1
[root@dev01 HTML-Tidy-1.06]# pwd
/root/.cpan/build/HTML-Tidy-1.06

なんだかまだちょっぴりテストのエラーがでてるけど気にしない。とりあえずモジュールとしてインストールはできる状況になったので解決ステータスということで。


と言うわけで、無事に Plagger version 0.7.17 にアップグレードできました。いや、plagger 使ったアプリまだ書いてないんだけどね・・・(^^ゞ

- スポンサーリンク -