readline-8.0 と bash-5.0
参照:GNU Bash
GNU bash 5.0がリリースされた
暫く前から RC(Release Candidate) になっていたが、GNU bash 5.0 が 1/7 にリリースになった。メジャーアップデートは10年ぶりだそうだ。あわせて readline-8.0 もリリースになっていたので、ウチの自宅サーバ(Mac mini G4)も最新版に入れ替えてみた。
以下は自分のための備忘録なので、他の環境でのビルド方法とは異なる所があるかもしれない。
1. readline-8.0
1) ダウンロード
公式サイト:https://tiswww.case.edu/php/chet/readline/rltop.html
上記公式サイトやGNU ftpサイトなどから "readline-8.0.tar.gz"をダウンロードして解凍する。
2) ソース修正
"support/shobj-conf" を修正する。Mac OS Xでビルドすると、コンパイルオプションに "-arch_only `/usr/bin/arch`" が指定されるのだが、自分が使っている gcc 5.5.0 にはこのコンパイルオプションが無く、コンパイルエラーになってしまうため。修正個所は以下の2箇所。
$ diff ./support/shobj-conf ./support/shobj-conf.org
192c192
< SHLIB_XLDFLAGS='-install_name $(libdir)/`echo $@ | sed "s:\\..*::"`.$(SHLIB_MAJOR).$(SHLIB_LIBSUFF) -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -v'
---
> SHLIB_XLDFLAGS='-arch_only `/usr/bin/arch` -install_name $(libdir)/`echo $@ | sed "s:\\..*::"`.$(SHLIB_MAJOR).$(SHLIB_LIBSUFF) -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -v'
198c198
< SHOBJ_ARCHFLAGS=
---
> SHOBJ_ARCHFLAGS='-arch_only `/usr/bin/arch`'
注)「¥」は実際には半角の「\」(バックスラッシュ)
3) ビルド方法
readline-8.0のビルドスクリプト("build.sh")は以下。
#!/bin/sh -x
export MACOSX_DEPLOYMENT_TARGET=10.4
export GCC="/usr/local"
export PATH="${GCC}/bin:$PATH"
export DYLD_LIBRARY_PATH="${GCC}/lib:$DYLD_LIBRARY_PATH"
./configure \
--enable-multibyte \
--with-curses \
CC="${GCC}/bin/gcc" \
CPP="${GCC}/bin/cpp" \
CPPFLAGS="-I/usr/local/include -I/usr/include" \
CFLAGS="-O2 -mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET}" \
LDFLAGS="-L/usr/local/lib -L/usr/lib"
make
注)「¥」は実際には半角の「\」(バックスラッシュ)
4) ビルドしてインストール
$ chmod +x ./build.sh
$ ./build.sh
$ sudo make install
2. bash-5.0
1) ダウンロード
公式サイト: https://www.gnu.org/software/bash/
上記公式サイトやGNU ftpサイトなどから "bash-5.0.tar.gz"をダウンロードして解凍する。
2) ソース修正
- "support/shobj-conf"
readlineと同じ "support/shobj-conf" が bash-5.0 のソースにもあるので、同じように修正する。
- "examples/loadables/fdflags.c"
ウチの Mac OS X 10.4.11 (Tiger) の場合、openフラグに O_CLOEXEC が無いため、インストールの際 "examples/loadables/fdflags.c" のコンパイルが失敗する。これを防ぐため、O_CLOEXEC の定義を追加する。かなり無理やりだが、examples なので bash の動作には影響ないだろう。
$ diff examples/loadables/fdflags.c examples/loadables/fdflags.c.org
32d31
< #define O_CLOEXEC 0x1000000
3) ビルド方法
bash-5.0のビルドスクリプト("build.sh")は以下。
#!/bin/sh -x
export MACOSX_DEPLOYMENT_TARGET=10.4
export GCC="/usr/local"
export PATH="${GCC}/bin:$PATH"
export DYLD_LIBRARY_PATH="${GCC}/lib:$DYLD_LIBRARY_PATH"
./configure \
--enable-alias \
--enable-history \
--enable-multibyte \
--enable-readline \
--with-curses \
--with-libiconv-prefix="/usr/local" \
CC="${GCC}/bin/gcc" \
CPPFLAGS="-I/usr/local/include -I/usr/include" \
CFLAGS="-O2 -mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET}" \
LDFLAGS="-L/usr/local/lib -L/usr/lib"
make
make check >check.log
注)「¥」は実際には半角の「\」(バックスラッシュ)
4) ビルドしてインストール
$ chmod +x ./build.sh
$ ./build.sh
$ sudo make install
今のところ以前のbash-4.4と変わりなく動作に問題はない様子で、何が変わったの?と言った感じ。bash-5.0 ではバグ修正と新機能(シェル変数)の追加が行われており、nameref(名前参照)に若干の非互換があるので注意が必要だそうだ。とは言え、namerefという機能を良く知らない(^^;)ので、どう注意すれば良いのか分からん。あまり使われていない機能のようだから、気にしないでも大丈夫かな。
|