色んなバージョンの ImageMagick をまとめて build (3)

色んなバージョンの ImageMagick をまとめて build (2) - yoyaのメモ の続き

ソース

ビルドする

ImageMagick-*.tar.gz がまとめて置かれているディレクトリで、allimagemagickbuild.sh を実行します。

  • allimagemagickbuild.sh
for file in `ls -r ImageMagick*.tar.*` ; do
  version=`echo $file | sed 's/ImageMagick-\(.*\).tar\(.*\)/\1/'`
  if [ "$pre_version" != "$version" ] ; then
    echo === $file ===
    tar xf $file
    dir="ImageMagick-$version"
    if ! [ -d $dir ] ; then
        version2=`echo $file | sed 's/ImageMagick-\(.*\)-[0-9]\+.tar\(.*\)/\1/'`
        dir="ImageMagick-$version2";
    fi
    if [ -d $dir ] ; then
      (cd $dir ; ./configure --without-perl --without-magick-plus-plus --prefix=$HOME/ImageMagick/$version ; make install)
      rm -rf $dir
    fi
    pre_version=$version
  fi
done
yoya@sakura:~/imagemagick/src$ sh allimagemagickbuild.sh >& log.txt

C++ の問題で build 出来ないバージョンが多いけど、よく考えたら Magick++ API は要らないので、 --without-magick-plus-plus を付ける事にしました。(昨日との違い)

結果

yoya@sakura:~$ ls  /home/yoya/imagemagick/src/ImageMagick-*.gz | wc
     71      71    3872
yoya@sakura:~$ ls  /home/yoya/ImageMagick/ | wc
yoya@sakura:~/ImageMagick$ ls  | wc
     69      69     592

ImageMagick-5.2.6.tar.gz, ImageMagick-6.0.8-3.tar.gz で失敗してる。

手動対処

configuring ImageMagick 5.2.6
checking build system type... Invalid configuration `x86_64-unknown-linux-gnu': machine `x86_64-unknown' not recognized
    • /usr/share/libtool/config/config.* をコピれば OK
yoya@sakura:~/imagemagick/src/ImageMagick-5.2.6$ cp /usr/share/libtool/config/config.* .
yoya@sakura:~/imagemagick/src/ImageMagick-5.2.6$ ./configure --without-perl --without-magick-plus-plus --prefix=$HOME/ImageMagick/5.2.6 
Magick++/lib/Geometry.cpp:191: error: 'strcpy' was not declared in this scope
make[1]: *** [Magick++/lib/Geometry.lo] エラー 1
    • 頭に #include を置いてみる
gcc -DHAVE_CONFIG_H -I../ -I.. -I../magick -I/home/yoya/ImageMagick/5.2.6/include -g -O2 -c png.c -Wp,-MD,.deps/png.TPlo -o png.o
png.c:1050: error: static declaration of 'png_IM_free' follows non-static declaration
png.c:1040: note: previous declaration of 'png_IM_free' was here
Magick++/lib/Image.cpp: In function 'void Magick::InitializeMagick(const char*)':
Magick++/lib/Image.cpp:3732: error: 'atexit' was not declared in this scope
    • 頭に #include を入れる
yoya@sakura:~/imagemagick/src/ImageMagick-6.0.8-3$ echo '#include <string.h>' | cat - Magick++/lib/Geometry.cpp > yoya.tmp ; mv yoya.tmp Magick++/lib/Geometry.cpp
yoya@sakura:~/imagemagick/src/ImageMagick-6.0.8-3$ echo '#include <stdlib.h>' | cat - Magick++/lib/Image.cpp > yoya.tmp ; mv yoya.tmp Magick++/lib/Image.cpp
yoya@sakura:~/imagemagick/src/ImageMagick-6.0.8-3$ ./configure --without-perl --without-magick-plus-plus --prefix=$HOME/ImageMagick/6.0.8-3

うーむ。--without-magick-plus-plus が効いてないみたい。だけど対処出来たのでいいや。

結果

yoya@sakura:~/ImageMagick$ ls /home/yoya/imagemagick/src/ImageMagick-*.tar.gz | wc
     71      71    3872
yoya@sakura:~/ImageMagick$ ls | wc
     71      71     606
yoya@sakura:~/ImageMagick$ ls -C  | head -2
4.2.9	  6.2.5-5  6.3.0-7   6.3.8-11  6.4.5-9	 6.5.4-10  6.6.1-10  6.7.0-10
5.2.6	  6.2.6-8  6.3.1-6   6.3.9-10  6.4.6-9	 6.5.5-10  6.6.2-10  6.7.1-10
yoya@sakura:~/ImageMagick$ ls 6.0.8-3/bin/
Magick++-config  Wand-config  compare    conjure  display   import   montage
Magick-config    animate      composite  convert  identify  mogrify
yoya@sakura:~/ImageMagick$ ./6.0.8-3/bin/identify -version
Version: ImageMagick 6.0.8 10/22/12 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2004 ImageMagick Studio LLC

yoya@sakura:~/ImageMagick$