setup.rb は主に ruby スクリプトと拡張モジュールを対象としたコマンド ラインベースのインストーラです。複数のパッケージ、拡張モジュールなどを 含むパッケージのインストールを自動化することができます。
ユーザが setup.rb を使ってインストールする過程を説明します。 通常は次の三行で十分です。($ はプロンプト、# はスーパーユーザ)
config は設定の変更・調整で、setup が主にコンパイル、install が 実際のインストールです。$ ruby setup.rb config $ ruby setup.rb setup # ruby setup.rb install
以下、もう少し正確に説明します。setup.rb にはグローバルオプションと コマンド、そしてコマンド専用のオプションがあります。組みあわせとしては 以下のようになります。
cvs を知っている人は似たようなものだと思ってください。 まずグローバルオプションとしては次の三種類が使えます。ruby setup.rb グローバルオプション ruby setup.rb コマンド ruby setup.rb コマンド コマンドオプション
config
install
dryrun
コマンドに与えられたオプションはそのまま ruby に渡します。
他のコマンドにはオプションはありません。
setup.rb はパッケージが以下のようなディレクトリ構造になっていることを 前提にしています。
setup.rb と setup/ が全体でインストーラになり、lib/ ext/ bin/ share/ の 四つのディレクトリにはインストールされるファイルが入ります。ディレクトリは ファイルの種別によって区別されていて、lib は ruby スクリプト(ライブラリ)、 ext は拡張モジュール、bin がコマンド、share がデータ(画像やリソースなど) です。パッケージのトップ/ setup.rb setup/ パッケージ名1.rb パッケージ名2.rb lib/ [dirs...]/*.rb ext/ [dirs...]/*.c bin/ [dirs...]/* share/ [dirs...]/*
setup.rb はこのアーカイブに入っているものをそのままコピー。setup/ には ユーザが定義したパッケージごとのインストーラを入れます。と言っても、 setup.rb でほとんどの部分を用意するので、ユーザはクラスを継承してちょこっと 書くだけです。具体的には以下のようなものを書きます。
class Installer_tmail < Installer DIRS = { 'lib/tmail' => 'tmail', 'ext/b64' => 'tmail', 'ext/mails' => 'tmail' } end
まず Installer を継承したクラス「Installer_パッケージ名」を定義し、 その中の定数 DIRS に「ディレクトリ→インストール先」の対応を書いた ハッシュをセットします。「ディレクトリ」はアーカイブの lib/* とか ext/* のことで、インストール先とは require するときの名前の ディレクトリ部分です。たとえば lib/tmail/loader.rb を require 'tmail/loader' として require できるようにしたいなら 「インストール先」は例のとおり「tmail」になります。require 'loader' としたい場合は「.」(ピリオド一個)です。
setup.rb の 2.1 以前のバージョンではかわりに PATHCONV という ファイルを使っていましたが、基本的には setup/*.rb に移行します。 互換性のためいちおう PATHCONV があればそっちからも読むように なっていますが、将来は setup/*.rb で統一する予定です。
setup や install などで行う動作は、普通は setup.rb が判断してよきに はからってくれるのですが、それでは不十分で他の動作を追加したいことも あります。そのような場合はフックを記述して動作を補うことができます。
方法は簡単で、「setup/パッケージ名.rb」で書いたクラス 「Installer_パッケージ名」に setup や install といったメソッドを 追加するだけです。
たとえば以下は setup/tmail.rb で setup をフックする例です。
class Installer_tmail < Installer DIRS = { ……省略…… } def setup Dir.mkdir 'doc' system "rd2html #{package_root}/doc/manual.rd > doc/manual.html" super ### 忘れずに! end end
super を絶対に忘れないでください。これを忘れるとパッケージの 拡張モジュールがコンパイルされなくなってしまいます。
なお、setup.rb はすでに srcdir に対応しているので、実行されるときに パッケージのトップディレクトリにいるかどうかはわかりません。パッケージの トップは package_root() を使って取得してください。一方なにかファイルを 作るときは、逆にカレントディレクトリ以下に作ってください。
このシステムはなんだか複雑に思えます。それでも setup.rb を使うメリットは 何でしょうか。それは、「統一された設定のためのインターフェイスを提供できる」 という一点につきます。
setup.rb は、コマンドラインオプションを与えることで lib や ext の インストール先を変更できるようになっています。またパッケージごとに インストールするかしないかを選択することもできます。特にひとつの アーカイブにたくさんのパッケージが入っている場合は、全部まとめて設定を 行えるのは非常に便利です。また同時に README などを簡潔にすることができ、 慣れない (慣れてるかもしれないけど…) 英語で書く量を減らすこともできます。
GNU General Public License (GPL) version 2 です。 詳細はファイル GPL を見てください。また、setup.rb を使って インストールするプログラムが GPL である必要はありません。
Copyright (c) 2000,2001 Minero Aoki <aamine@loveruby.net>