libGDのインストール

画像を動的に操作するライブラリーであるlibGDをソースコードからインストールする。
項目 | 説明 |
---|---|
配布元 | GD Graphics Library |
手順 | |
依存情報 | |
依存先 (必須) | Make (GNU Make) |
依存先 (任意) |
|
依存元 | PHP拡張機能 |
sh -eux <<-"EOT"
PKG=libgd VER=2.2.5 TAG=gd-$VER
LOCAL=~/.local J=$(grep -cs '^processor' /proc/cpuinfo || echo 2)
mkdir -p "$LOCAL/src"
cd "$LOCAL/src"
if command -v git >/dev/null; then
[ -e $PKG ] || git clone --depth 1 https://github.com/libgd/libgd $PKG
cd $PKG
git fetch --depth 1 origin tag $TAG
git checkout -f $TAG
git clean -dfX
autoreconf -is
else
[ -e $PKG-$VER ] || wget https://github.com/libgd/libgd/releases/download/gd-$VER/$PKG-$VER.tar.xz
tar -xf $PKG-$VER.*
cd $PKG-$VER
make -kj $J distclean clean || :
fi
# cmake -DCMAKE_INSTALL_PREFIX="$LOCAL/stow/$PKG-$VER" .
./configure --prefix="$LOCAL/stow/$PKG-$VER"
make -j $J CFLAGS="-g -O2"
make -j $J check
make -j $J install
cd "$LOCAL/stow"
echo $PKG-[0-9]* | xargs -n 1 stow --ignore=dir -D
stow --ignore=dir $PKG-$VER
EOT
日付 | バージョン | OS | 依存関係 |
---|---|---|---|
2018-04-30 | 2.2.5 | Ubuntu 16.04 | GNU Make 4.2.1, GCC 8.1.0, libPNG 1.6.16, libJPEG 9c |
2019-03-03 | 2.2.5 | Ubuntu 18.04 | GNU Make 4.2.1, GCC 7.4.0, Zlib 1.2.11, libPNG 1.6.16, libJPEG 9c |
libGDはAutoconfツールとCMakeの2通りのビルド方法がある。
CMakeの場合,cmake実行時にENABLE_PNG=1などを指定して,明示的にオプションライブラリーを指定する必要がある。その一方,Autoconf (configure) の場合,ビルドマシンの状況に応じて自動的に追加機能を有効にするか判定してくれる。そのため,Autoconfを選んだ。
CMakeでビルドする場合,autoreconfと./configureの2行を無視して,コメントアウトしているmkdir buildとcmakeの2行のコマンドを実行すればよい。
なお,Autoconfでビルドする場合,GCC 7 or 8を使っているとmake実行時に以下のエラーが発生する。
In function ‘font_path’, inlined from ‘fontFetch’ at gdft.c:487:12: gdft.c:1699:2: error: ‘strncpy’ output truncated before terminating nul copying g many bytes from a string as its length [-Werror=stringop-truncation] strncpy(fontlist, name_list, name_list_len); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ gdft.c: In function ‘fontFetch’: gdft.c:1679:37: note: length computed here const unsigned int name_list_len = strlen(name_list); ^~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors
strncpy関数の使用に問題があるようだ。このビルドエラーは以下のissueで議論されている。
annotate.c/gdft.c: Replace strncpy with memccpy to fix -Wstringop-tru… by robertlinux · Pull Request #442 · libgd/libgd
そして,コミットID 748578ff3fa4b636513373f0613e158b930f3ed4で修正された。ただし,この修正は2018-06-22になされている。次期リリースのlibGD 2.2.6,またはmasterであればこのコンパイルエラーは起きないだろう。ただし,現時点の最新のlibGD 2.2.5 (2017-08-30リリース) にはまだ入っていない。
そのため,このビルドエラーを回避する工夫が必要だ。このビルドエラーはコンパイルオプションに-Werror
が指定されているのが原因だ。このオプションがあると,本来なら警告で済むものもコンパイルエラーとみなして,ビルドを中断する。
Autoconfでmakeを作成した場合,以下のコンパイルオプションが指定されているようだ。
-Werror -g -O2 -fvisibility=hidden -Wall
そこで,make実行時にCLFAGSを指定してコンパイルオプションを上書きして,ビルドエラーを回避している。
なお,CMakeでビルドする場合,コンパイルオプションに-Werror
が指定されていないため,このエラーは起きない。
“libGDのインストール” に対して2件のコメントがあります。