=begin

= Exerb

== 概要

Exerbは、オブジェクト指向言語Rubyのスクリプト/拡張ライブラリを単一で動作可能な
32bit Windows用実行ファイル（以下、実行ファイル）に変換するソフトウェアです。

== 特徴

Exerbの主な特徴は下記の通りです。

* 複数のファイル（スクリプト、拡張ライブラリ）を単一の実行ファイルに変換する
  ことができます。
* 生成された実行ファイルにはRuby本体も含まれているため、Rubyがインストール
  されていない環境でも実行することができます。
* 実行ファイルを生成するのにコンパイラを必要としません。

== インストール

Exerbをインストールするには下記のコマンドを実行します。
最後のinstallについては管理者権限が必要かも知れません。

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

== 使用例

(1) まず実行ファイルに変換したいスクリプトを用意します。

      $ cat foo.rb
      puts 'ok'

(2) mswin32版rubyで実行できることを確認します。

      $ ruby foo.rb
      ok

(3) 定義ファイルを用意します。

自動生成の場合。

      $ ruby -r exerb/mkrbc foo.rb

手動生成の場合。

      $ cat foo.rbc
      script	foo.rb	foo.rb

(4) 実行ファイルを生成します。

      $ exerb.rb foo.rbc

(5) 生成された実行ファイルを実行します。

      $ ./foo.exe
      ok

(6) "ok"と表示されれば成功です。

== オプション

exerb.rbには下記のオプションを指定することができます。

: -c
: --corename
    使用するコアを名前で指定します。指定しない場合はデフォルト値として"cui"が
    使用されます。
    ここで使用する名前はlib/exerb/config.rbで定義されており、標準では"cui"と
    "gui"が定義されています。
    -Cオプションと同時に指定された場合、-Cオプションが優先されます。

: -C
: --corepath
    使用するコアをファイル名で指定します。
    -cオプションと同時に指定された場合、-Cオプションが優先されます。

: -o
: --output
    生成する実行ファイルのファイル名を指定します。
    指定しない場合は定義ファイルの拡張子を"exe"に置換したファイル名が使用され、
    拡張子が"rbc"でない場合は".exe"が付加されたファイル名が使用されます。

: -h
: --help
    ヘルプを表示します。

== 定義ファイル

定義ファイルは、実行ファイルに格納するスクリプト/拡張ライブラリの内部名や
ファイル名を記述したテキストファイルです。
定義ファイル内で一番最初に定義されたスクリプトから実行が始まります。
定義ファイルの拡張子には"rbc"を使用することが推奨されています。

=== 書式

定義ファイルの書式は下記の通りです。
<tab>は1個以上のタブ文字です。

==== コメント

"#"で始まる行はコメントです。

==== 文字コード指定

"kcode"で始まる行は文字コード指定です。

  kcode<tab><文字コード>

<文字コード>には、"none"、"euc"、"sjis"、"utf8"のいずれかを指定します。

==== スクリプト定義

"script"で始まる行はスクリプト定義です。

  script<tab><内部名><tab><ファイル名>

<内部名>は実行ファイル内に格納された時のファイル名です。この内部名はrequire、
バックトレースなどで使用されます。
<ファイル名>は実際に格納するスクリプトのファイル名です。このファイル名は
定義ファイルからの相対パス、または絶対パスで指定します。

==== 拡張ライブラリ定義

"library"で始まる行は拡張ライブラリ定義です。

  library<tab><内部名><tab><ファイル名>

<内部名>、<ファイル名>についてはスクリプト定義と同様です。

=== 記述例

  # example
  kcode		sjis
  script	foo.rb		bin/foo.rb
  library	Win32API.so	lib/Win32API.so

=== 自動生成

定義ファイルはexerb/mkrbc.rbを使って自動生成することができます。
ただし、mkrbc.rbによって定義されるのは実行中にrequireされたファイルのみです。

下記のコマンドでfoo.rbの定義ファイル（foo.rbc）が生成されます。

  $ ruby -r exerb/mkrbc foo.rb

== サンプル

exampleディレクトリには4つのサンプルがあります。

: sample1
    Win32APIを使ってメッセージボックスを表示するサンプル。

: sample2
    例外を発生させ、例外ダイアログを表示するサンプル。

: sample3
    VisualuRubyを使ってウィンドウを表示するサンプル。

: sample4
    標準入力から文字列を読み込み、行番号を付加して出力するサンプル。

sample1の実行ファイルに変換するには下記のようにします。

  $ cd example
  $ exerb.rb -c gui sample1.rbc

sample2、sample3についても同様の方法で変換することができます。
sample4についてはCUI版コアを使用してください。（標準入出力を使用しているため）

=== サンプルで使用しているライブラリ

サンプルプログラムではVisualuRuby（vr/以下、swin.so）とWin32API（Win32API.so）
を使用しています。

VisualuRubyはNISHIKAWA Yasuhiro氏によるWin32 GUIライブラリです。
VisualuRubyに関する情報は((<URL:http://www.osk.3web.ne.jp/~nyasu/software/vrproject.html>))
から入手することができます。
すばらしいライブラリをありがとう！

== コア

ExerbにはGUI版とCUI版の2種類のコア（Ruby本体部分）があります。
GUI版、CUI版のそれぞれのファイル名は"ruby167g.rbx"と"ruby167c.rbx"です。
GUI版とCUI版の違いは下記の通りです。

* GUI版では標準入出力は使用できません。CUI版では使用できます。
* GUI版では例外発生時にダイアログボックスを表示します。CUI版ではコンソールに
  メッセージを出力します。

== 入手方法

Exerbの最新情報、及び最新バージョンは下記のURLから入手することができます。

* ((<URL:http://exerb.sourceforge.jp/>))
* ((<URL:http://sourceforge.jp/projects/exerb/>))

また、Rubyの情報、及びソースコードは下記のURLから入手することができます。

* ((<URL:http://www.ruby-lang.org/>))

== 動作確認環境

Exerbによって生成された実行形式ファイルが、以下の環境で動作することを確認
しました。

* Microsoft WindowsXP
* Microsoft Windows2000
* Microsoft WindowsMe
* Microsoft Windows98 SecondEdition
* Microsoft Windows98
* Microsoft Windows95

== ライセンス

Exerbのコア、およびスクリプトのライセンスはLGPLです。
Exerbによって生成された実行形式ファイルについては、特に制約はありません。

== 著作権・免責

* ExerbのRuby本体部分の著作権は、まつもとゆきひろ氏、及びその他開発に関わった
  方々に属します。
* ExerbのRuby本体部分以外の著作権は、加藤勇也に属します。
* Exerbの使用によって発生したいかなる損害に対して、作者は一切責任を持ちません。

== 謝辞

Rubyというすばらしい言語を開発されたまつもとゆきひろ氏、及びその開発に関わった
すべての方々に感謝いたします。
すばらしい言語をありがとう！

== 作者

Yuya Kato <yuya@katoden.co.jp>

ご意見、ご感想、ご要望、バグ報告などを送っていただけると幸いです。

== 最後に

良いRubyライフを。:-)

=end
