Enterprise Linux5システムで使用するRPMパッケージとしてBash4.2をビルドしようとしています。これは、デフォルトで3.2.25に付属しています。これは正常に機能しますが、システムパッケージとの競合を回避し、システム/他のスクリプトが互換性のあるbash3を引き続き使用できるようにするために、両方のバージョンをシステム上で共存させたいと思います。
私の計画は次のとおりです。
理論的にはこれは単純で、Vimはconfigureスクリプトでバイナリプレフィックス/サフィックスを提供しますが、bashにはこの機能がないようです。私が見つけた最も近いものは、実行可能拡張子(Windowsの.exeなど)のサポートを提供するautomakeのEXEEXTですが、これは実際には私がやりたいことのために設計されたものではなく、ドキュメントの問題を解決しません。
bash
autoconfバージョン(2.63)は少し古い(2008年9月)ですが、--program-transform-name
および--program-suffix
機能をサポートしています。残念ながら、bashビルドプロセスはこれらの機能を ドキュメントで詳しく説明されています として使用しません。また、パラメータを使用してmanページのビルド時処理を許可しません。
ファイルと変更の数が少ないため、半手動のアプローチをお勧めします。つまり、インストール前に変更を加えるための小さなスクリプトを作成します。オプションで installwatch を使用して、インストール中にすべてを確実にキャッチできますが、bash
は実際にはごくわずかです。 (FWIW、FreeBSDのbashポートとDebianのbashパッチをざっと見てみましたが、適切な修正の兆候はありませんでした。)
一般的にビルドを壊す興味深い方法ですが、ここでEXEEXT
を悪用することができます:
ac_cv_exeext=42 ./configure [...]
make
./bash42 -c 'echo $BASH_VERSION'
4.2.42(1)-release
名前を変更するだけだったので、お勧めしません;-)
から得られるものがもう少しあります:
./configure [...]
make -e Program=bash42
これは、生成されたbashbug
スクリプト内の変更も反映しているためです(ただし、名前は変更されません)。