Usage

# setup.rb ユーザマニュアル

## 簡単な解説

setup.rb は主に ruby スクリプトと拡張モジュールを対象としたコマンド ラインベースのインストーラです。複数のパッケージ、拡張モジュールなどを 含むパッケージのインストールを自動化することができます。

## ユーザからの setup.rb の使い方

ユーザが setup.rb を使ってインストールする過程を説明します。 通常は次の三行で十分です。($ はプロンプト、# はスーパーユーザ)

>     $ ruby setup.rb config
>     $ ruby setup.rb setup
>     # ruby setup.rb install

config は設定の変更・調整で、setup が主にコンパイル、install が 実際のインストールです。

以下、もう少し正確に説明します。setup.rb にはグローバルオプションと コマンド、そしてコマンド専用のオプションがあります。組みあわせとしては 以下のようになります。

>     ruby setup.rb グローバルオプション
>     ruby setup.rb コマンド
>     ruby setup.rb コマンド コマンドオプション

cvs を知っている人は似たようなものだと思ってください。 まずグローバルオプションとしては次の三種類が使えます。

--help
  setup.rb の使いかたなどを表示
-v,--version
  setup.rb のバージョンを表示
--copyright
  setup.rb の著作権を表示

コマンドは以下の 6 つです。

config
  設定を変え、保存する
setup
  コンパイルなど、ファイル内容の変更を行うもの
install
  インストール
show
  現在のコンフィグを表示する
clean
  拡張モジュールに対し make clean を実行
dryrun
  実際にインストールせずにライブラリを使ってみる。 おそらくアプリケーションには通用しない

続いて順次コマンドのオプションを解説します。

config

--prefix
  rbdir sodir などの共通部分のパス
--std-ruby
  Ruby の標準ライブラリのパス
--site-ruby
  site_ruby
--bin-dir
  実行可能ファイル(コマンド)がインストールされるパス
--rb-dir
  Ruby スクリプトがインストールされるパス
--so-dir
  拡張モジュールがインストールされるパス
--data-dir
  データがインストールされるパス
--ruby-path
  #! 行にセットする ruby のパス
--ruby-prog
  インストールに使う ruby のパス
--make-prog
  make を指定
--with
  インストールするパッケージ/ディレクトリ
--without
  インストールしないパッケージ/ディレクトリ
--rb-config
  デフォルトの設定に使う rbconfig.rb すべて --opt=value の形で指定します。途中に空白があってはいけません。 また、--with と --without には ',' で区切って複数の値をあたえられます。 ext/myext のように直接ディレクトリを指定することもできます。 さらに ext/* のようにワイルドカードも使えます。
  各オプションのデフォルト値は ruby setup.rb --help で見られます。

  install

  --no-harm
    挙動を表示するだけで実行しません。

  dryrun
  コマンドに与えられたオプションはそのまま ruby に渡します。

  他のコマンドにはオプションはありません。

  ## パッケージ配布者側からの使い方

  setup.rb はパッケージが以下のようなディレクトリ構造になっていることを 前提にしています。

  >     パッケージのトップ/
  >       setup.rb
  >       setup/
  >           パッケージ名1.rb
  >           パッケージ名2.rb
  >       lib/
  >           [dirs...]/*.rb
  >       ext/
  >           [dirs...]/*.c
  >       bin/
  >           [dirs...]/*
  >       share/
  >           [dirs...]/*

  setup.rb と setup/ が全体でインストーラになり、lib/ ext/ bin/ share/ の 四つのディレクトリにはインストールされるファイルが入ります。ディレクトリは ファイルの種別によって区別されていて、lib は ruby スクリプト(ライブラリ)、 ext は拡張モジュール、bin がコマンド、share がデータ(画像やリソースなど) です。

  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 を使うメリットは 何でしょうか。それは、「統一された設定のためのインターフェイスを提供できる」 という一点につきます。

  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>