perlがらみ

諸般の事情で、アメリカのカレンダーなデータを作ることになって、perlのモジュールに Date::Holidaysというものを見つけたので、

$ cpanm Date::Holidays

して、インストールしたのですが、昨年の8月以降更新されていないため、今年の休日のデータは入力されていなかった。
毎年ちゃんと更新されているDate::Japanese::Holidayのほうが異常なのかもしれない。
結局、休日のデータリストを拾って来た。


今度はGD::Graphを使ってグラフを書こうと思ったところ、GD::Textのテストでfaileする。
ひとつ目は

Can't load '~/.cpan/build/GD-2.56-Tx1Hlv/blib/arch/auto/GD/GD.bundle' for module GD: dlopen(~/.cpan/build/GD-2.56-Tx1Hlv/blib/arch/auto/GD/GD.bundle, 2): Library not loaded: @rpath/libtiff.5.dylib

もう一つは

libpng warning: Application built with libpng-1.5.23 but running with 1.6.21
GD Warning: gd-png error: cannot allocate libpng main struct

である。

1つ目のエラーはlibtiff.5.dylibが悪い。

$ otool -L /Library/Perl/5.18/darwin-thread-multi-2level/auto/GD/GD.bundle
/Library/Perl/5.18/darwin-thread-multi-2level/auto/GD/GD.bundle:
	/usr/local/Cellar/jpeg/8d/lib/libjpeg.8.dylib (compatibility version 13.0.0, current version 13.0.0)
	/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
	/usr/local/Cellar/libpng/1.6.21/lib/libpng16.16.dylib (compatibility version 38.0.0, current version 38.0.0)
	/usr/local/Cellar/freetype/2.6.3/lib/libfreetype.6.dylib (compatibility version 19.0.0, current version 19.3.0)
	/usr/local/Cellar/fontconfig/2.11.1/lib/libfontconfig.1.dylib (compatibility version 10.0.0, current version 10.0.0)
	/opt/X11/lib/libXpm.4.dylib (compatibility version 16.0.0, current version 16.0.0)
	/opt/X11/lib/libX11.6.dylib (compatibility version 10.0.0, current version 10.0.0)
	@rpath/libtiff.5.dylib (compatibility version 5.0.0, current version 5.2.4)
	/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
	/usr/local/Cellar/gd/2.1.1/lib/libgd.3.dylib (compatibility version 4.0.0, current version 4.0.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
$ install_name_tool -id /usr/local/lib/libtiff.5.dylib /usr/local/lib/libtiff.5.dylib

と直しておく。

2個目はcpanが悪いのではなく、gdのビルドが失敗しているかららしい。
で、いろいろやったにもかかわらず、gdはlibpng-1.5.23を使おうとするので、libpng-1.6.21を諦めて、

$ ./configure --prefix=/usr/local/Cellar/gd/2.1.1_2 --x-includes=/usr/X11/include/ --x-libraries=/usr/X11/lib/ --with-libiconv-prefix=/usr --with-zlib=/usr --with-png=/usr/X11 --with-freetype=/usr/local --with-fontconfig=/usr/local --with-jpeg=/usr/local --with-xpm --with-vpx=/usr/local/ --with-tiff=/usr/local/  --with-webp CFLAGS="-DDEFAULT_FONTPATH=\\\"/System/Library/Fonts:/Library/Fonts\\\"" LIBPNG_CFLAGS=-I/usr/X11/include/libpng15 LIBPNG_LIBS="-L/usr/X11/lib -lpng15"

としてビルドすると、テストは通ったけれども、libpng-1.6.21を使えなかったことに満足行かない。

で、perlのGDモジュールをインストールしようとすると、

$ cpanm GD 
GD is up to date. (2.56)

はぁ? さっきアンインストールしたはずだが???

$ cpanm GD --uninstall
! GD is not found in the following directories and can't be uninstalled.

  /Library/Perl/5.18/darwin-thread-multi-2level  
  /Library/Perl/5.18

やっぱりアンインストール済みである。しかたがないので、

$ cpanm GD --force
--> Working on GD
Fetching http://www.cpan.org/authors/id/L/LD/LDS/GD-2.56.tar.gz ... OK
Configuring GD-2.56 ... OK
Building and testing GD-2.56 ... FAIL
! Testing GD-2.56 failed but installing it anyway.
Successfully reinstalled GD-2.56
1 distribution installed

う〜んテスト失敗しているやん。

$ cpanm GD::Text
--> Working on GD::Text
Fetching http://www.cpan.org/authors/id/M/MV/MVERB/GDTextUtil-0.86.tar.gz ... OK
Configuring GDTextUtil-0.86 ... OK
Building and testing GDTextUtil-0.86 ... OK
Successfully installed GDTextUtil-0.86
1 distribution installed
$ cpanm GD::Graph
--> Working on GD::Graph
Fetching http://www.cpan.org/authors/id/R/RU/RUZ/GDGraph-1.52.tar.gz ... OK
Configuring GDGraph-1.52 ... OK
Building and testing GDGraph-1.52 ... OK
Successfully installed GDGraph-1.52
1 distribution installed

GD::Textのテストは通るようになったからまぁいいか。