Gauche:BuildAndInstallSnapshot
Shiro(2018/02/14 10:10:15 UTC): Gaucheのリリース間隔がのびのびになっていて、新しい機能を使いたければHEADからビルドしないとならないんだけど、HEADのコンパイルは最新リリース版でしか保証されない (最新リリースより新しい版ではビルドに失敗する可能性がある)という縛りがある。普段HEADを常用しててこれに引っかかった場合、最新リリース版を入れ直さなければならず、面倒。
この手順を若干楽にする仕組みを入れてみた。(2018/2現在)
get-gauche.sh
によるスナップショットの取得
適切なtarballをダウンロードしてインストールするシェルスクリプトを作った。https://github.com/shirok/get-gauche
0.9.5以降にもいくつか不定期にスナップショットリリースを作っている。 最新のHEADとは限らないが、比較的新しい状態のものを手軽に試してみたい場合は それをインストールするのが手軽だ。 既にtarballになっているので最新リリース版Gaucheは必要ない。
一番手軽なやり方は次のとおり。 (--sudoはインストール先の書き込みに特権が必要な場合にのみつける。 ビルド後、インストール前にsudoがパスワードを聞いてくる。)
git clone https://github.com/shirok/get-gauche.git cd get-gauche ./get-gauche.sh --sudo --version snapshot
インストール先を聞いてくるが、既に以前のGaucheがインストール済みならそれがデフォルトになる。
インストールプレフィクスを指定したい場合は--prefixフラグで。例えば:
./get-gauche.sh --prefix /opt/gauche --sudo --version snapshot
現在ダウンロード可能なバージョンの一覧は--listフラグで取得できる。
./get-gauche.sh --list
スナップショットリリースは、
- 不定期。
- 同じバージョン番号で再リリースするかもしれない。
- リリースノートなし。ChangeLogやgitのコミットログ読んで。
という緩い運用でやっている。が、正規リリースにあまり時間がかかるようなら monthlyとかに決めるかもしれない。 正式なリリースではないので、入れた機能を後でやめにしたり、(スナップショットリリース間で)非互換な変更を入れる可能性もあるので注意。
get-gauche.sh
は指定バージョンが既にインストールされている
Gaucheのバージョンより新しくないとダウンロードしないのだが、
同じバージョン番号で再リリースがあった場合などで強制的に再ダウンロード・インストールしたい
場合は--forceオプションをつける。
./get-gauche.sh --sudo --force --version snapshot
gosh -vによるバージョン指定
Gaucheは別バージョンをインストールしても、 実はバイナリはバージョンごとに分かれたディレクトリにもインストールされているので、 完全に上書きされるわけではない。ただ、0.9.5まではリンクする共有ライブラリが上書きされる 場合があり、自由に以前のバージョンを起動するのが難しかった。
2017/9くらいから、gosh -vVERSION とするとVERSIONのGaucheがインストールされていた場合はそちらを起動するようになっている (Gauche:複数バージョンの共存参照)。
あいにく0.9.5はそれに対応していないのでgosh -v0.9.5
で0.9.5を起動するわけにはいかない…はずなのだが、実はLinuxなど一部のプラットフォームでは(0.9.5もインストール済みなら)この方法で0.9.5が起動可能だ。OSXはだめ。
なのでそれらのプラットフォームでは、0.9.5の後に0.9.6_preXをインストールしても、 ビルド時のプリコンパイルに-v0.9.5を指定してやれば0.9.5でのビルドができる。 わざわざ0.9.5を入れ直す必要がないわけだ。
そのためにMakefileがBUILD_GOSH_FLAGSという変数を参照するようにしているので、 「0.9.5と0.9.6_preXをインストールした状態で」GaucheのHEADは次の方法でビルドできる。
./DIST gen gauche-config --reconfigure | sh make BUILD_GOSH_FLAGS=-v0.9.5
(0.9.6リリース以降は、OSXでもHEADのビルドは make BUILD_GOSH_FLAGS=-v0.9.6
でできるようになる)