Encode::Detect のコンパイルエラー
今(今?)ちまたで絶賛のPlaggerインストールプレイですが、手ごわい相手としてよく挙げられているものにEncode::Detectってのがあります。
なんかTemplateが中ボスでEncode::Detectがラスボスっぽい
http://mono.kmc.gr.jp/~yhara/d/?date=20061015
でまあ、このあたりとかを見てそのままモジュールを順に入れたりするわけですが。
http://www.emaillab.org/spamassassin/patch/spamassassin-3.1.5-normalize-test6.txt
どうもgccが古いとコケるらしい。
http://d.hatena.ne.jp/nipotan/20060821/1156142353
Encode::Detect 1.00になっても同じ。
parse error before `__attribute__'
などが大量に出て、
error building lib/Encode/Detect/Detector.o from 'lib/Encode/Detect/Detector.c' at /usr/local/lib/perl5/site_perl/5.8.8/ExtUtils/CBuilder/Base.pm line 108. make: *** [all] Error 2
というコンパイルエラー。
GCCのバージョンを上げればよさそうなんだけど、私の環境はFedora RegacyだったりしてGCC 3.2、それ以降のRPMがなさげ。
もう少し調べると、これについては
http://rt.perl.org/rt3//Public/Bug/Display.html?id=39634
あたりで議論されていました。perl.hにパッチが、とか言ってますがとりあえずの対処として、
Encode::Detect を落としてきて Detector.xs に以下のパッチを当てると解消します。
--- Detector.xs.orig 2006-10-28 05:48:59.000000000 +0900 +++ Detector.xs 2007-01-07 01:26:42.000000000 +0900 @@ -38,6 +38,7 @@ #define PERL_NO_GET_CONTEXT /* we want efficiency */ #include "EXTERN.h" #include "perl.h" +#undef HASATTRIBUTE_UNUSED #include "XSUB.h" }
これでやっと入りました。まあなくてもとりあえずPlagger動かせたりはするみたいだけど、
普通にEncode::Guessより便利だし使いたかったので。