saphire シェル β

このプログラムについて
    Linuxで動くシェルです。まだバグがあると思われるのでβ版としてリリースします。

コンパイルと実行を試したOS
    Debian 5.0.3 (coLinux)
    Ubuntu 8.0.4 (VMWare)
    OSX 10.4.1(Mac)
    cygwin 1.7.1

使用上の注意
    このプログラムの実行は自己責任で行ってください。プログラムの実行という重要な操作を行うプログラムであるという認識は作者にもあり、しっかりとデバッグを行っていますが、もし見過ごしている不具合があって、実行結果によって使用者が被害を被っても作者は責任は持てません。このことが承知できる方だけ使用してください。

コンパイルの仕方
    コンパイルするためにはまずsaphireが使っている（依存している)ライブラリをインストールする必要があります。

    saphireが依存しているライブラリ、プログラムは

    gcc (コンパイラ)
    Cライブラリ。
    libm (数学ライブラリ。三角関数や指数計算などを行えるライブラリ)
    ncurses (端末制御ライブラリ。画面に文字列を任意の場所に表示するためのライブラリ)
    readline (行志向のインタラクティブユーザーインターフェース作成ライブラリ）
    oniguruma (正規表現ライブラリ。正規表現という文字列を楽に操作するため文字列処理用のライブラリです)
    C/migemo (日本語ファイルが変換無しのローマ字入力でコマンドライン補完できるライブラリ。このライブラリは無くてもコンパイルできます)

    の７つです。

    gccはFedoraではgcc, Debianでもgccをインストールします。Ubuntuではgccはデフォルトで入っています。

    Cライブラリは大抵のディストリビューションではデフォルトで入っています。Ubuntuでは2010年2月現在ではlibc6-devという名前になっています。インストールしてください。

    ncurseseは大抵のディストリビューションで最初からインストールされていますが、インストールされているのはユーザー用のパッケージである場合が多いです。コンパイルするためには開発用のパッケージをインストールする必要があります。Fedoraでは開発用のパッケージ名は-develと名づけられていることが多いです。ncursesの場合はncurses-develとなっています。Debian, Ubuntuでは-devというのが開発用のパッケージで、ncursesの場合はlibncurses-devとなっています。

    onigurumaも大抵のディストリビューションでパッケージになっていてFedoraではoniguruma-devel, Debian, Ubuntuではlibonig-devをインストールすれば良いです。

    libmは開発用のパッケージも大抵のディストリビューションでデフォルトでインストールされているはずです。

    C/Migemoは必ず必要なわけではありません。インタラクティブシェルでmigemoを使った補完が行いたい場合は./configureに--with-migemoを付けて有効にしてください。C/Migemoはパッケージになっているディストリビューションやなっていないディストリビューションがまちまちです。Fedoraではパッケージ名がcmigemo-develとなっています。Debian, Ubuntuではパッケージになっていないようなので以下のページでインストールしてください。

    Kaoriya.net http://www.kaoriya.net/#CMIGEMO

    ダウンロードするファイルはソースコード 1.3開発版 (MITラインセンス)がいいでしょう。コンパイル方法はダウンロードしたファイルの中のドキュメントに書いてあります。

注) 2010/03 KaoriyaのC/MigemoはUTF8の辞書ライブラリがありませんでした。/usr/share/cmigemo/{eucjp,sjis}か/usr/local/share/migemo/{eucjp,sjis}に置いてある辞書ファイル全てをnkf -w 辞書ファイル名 > /usr/local/share/migemo/utf-8/辞書ファイル名としてUTF-8の辞書を作ってください。

    readlineは開発用のパッケージはデフォルトでインストールされないようです。Fedoraではreadline-devel Debian, ubuntuではlibreadline-devをインストールしてください。OSXでは標準でインストールされるreadlineはlibeditなので、そのままではコンパイルが通りません。GNUのreadlineをインストールする必要があります。ftp://ftp.gnu.org/gnu/readlineの中にあるreadlineのソースを取ってきてコンパイル、インストールしてください。コンパイルしたreadlineは--with-readline-dirでreadlineがインストールされたディレクトリ(prefix)を示してください。/usr/local以下にインストールした場合は必要ないはずです。

    あと以下のプログラムにも依存しています。

    多言語対応ページャ lv 日本語でhelpが見たい場合は必要です。

    lvは大抵のディストリビューションでパッケージになっています。日本語でヘルプを読むために必要です。lessはディストリビューションによっては日本語が化ける場合があるようなのでページャはlvがおすすめです。

    さて依存ライブラリ、依存プログラムが全てインストールできたら

    ./configure 
    make lib
    sudo make lib-install
    make
    sudo make install

    もしくは
    ./configure
    make lib
    su
    make lib-install
    exit
    make 
    su
    make install

    を行って下さい
    make && make install でないことに注意してください。make libが入ります。

    (デフォルトのprefix(インストールディレクトリ)では/usr/local以下にインストールしようとするのでmake lib-install, make installの実行には管理者権限が必要です)

    実行すれば/usr/local/binにsashとsaphireコマンドが, /usr/local/etc/に設定ファイルがインストールされます。

    configureでは以下のオプションが使用できます。

    --prefix インストールするディレクトリを指定します。たとえば--prefix=$HOMEとすると$HOME/binに実行ファイルが$HOME/etcに設定ファイルが設定されます。デフォルトでは/usr/localです。
    --with-migemo C/Migemoを有効にします。C/Migemoはインストールしただけではsaphireで使われません。このオプションを指定して有効にしてください。
    --with-onig-dir 鬼車が標準の場所にインストールされていない場合はインストールされたディレクトリを指定します。(指定するのはprefixのディレクトリ)
    --with-migemo-dir C/Migemoが標準の場所にインストールされていない場合はインストールされたディレクトリを指定します。(指定するのはprefixのディレクトリ)
    --with-readline-dir Readlineが標準の場所にインストールされていない場合はインストールされたディレクトリを指定します。(指定するのはprefixのディレクトリ)
    --with-system-migemo-dir C/Migemoの辞書ファイルの位置を指定します。
    --with-debug デバッグ用の実行ファイルを作成する。メモリリークの検出やgdbでデバッグできる-gオプションをgcc(コンパイラ)に付与します。
    --with-gprof-debug プロファイラgprof用の実行ファイルを作成する。-pgオプションをCFLAGSに付与します。

    saphireはライブラリを作成するので
    /etc/ld.so.confにlibsaphire.soがある場所(デフォルトなら/usr/local/lib)を追加して
    
    sudo ldconfig
    
    もしくは

    su
    ldconfig
    
    を実行して共有ライブラリの検索キャッシュを更新して置いてください。(Linuxでは)
    管理者権限がない場合は共有ライブラリのあるパスを
    環境変数LD_LIBRARY_PATHに書いておくとプログラムの実行時に行われる
    共有ライブラリのサーチに追加されます。(OSXではDYLD_LIBRARY_PATH)

OSXでのコンパイルや実行について
    readlineのコンパイル
    6.1は通りました
    /usr/localがprefix

    OSXのreadlineはlibeditなのでGNU readlineを入れる必要がある

    nkfのコンパイル

    onigurumaのコンパイル

    C/Migemoのコンパイル
    
    nkfでC/MigemoでUtf8の辞書を作る
    (追記:iconvでUTF-8Macに変換する必要はありませんでした。）

    sudo bash
    cd /usr/local/share/migemo/cp932
    for i in *; do nkf -w $i > ../utf-8/$i; done

    ./configure --with-migemo --with-readline-dir=/usr/local --with-system-migemodir=/usr/local/share/migemo
    make lib && sudo make lib-install && sudo make && sudo make install

    で出来上がり

使用するファイル
    /usr/local/bin/saphire プログラム本体
    /usr/local/bin/sash インタラクティブシェル本体
    /usr/local/etc/saphire.sa 設定ファイルのソース
    /usr/local/etc/saphire.sao 設定ファイルのsaphire実行形式
    ~/.saphire/.saphire.sao ユーザーの設定ファイルのsaphire実行形式(/usr/local/etc/saphire.saoが読まれた後に読まれる）
    ~/.saphire/.history コマンドラインヒストリー
    ~/.saphire/tmp 一時ファイルの格納ディレクトリ
    /usr/local/share/migemo/{utf-8,eucjp.sjis}/{han2zen.dat,hira2kana.dat,migemo-dict,roma2hira.dat} migemoの辞書ファイル
    /usr/share/cmigemo/{utf-8,eucjp.sjis}/{han2zen.dat,hira2kana.dat,migemo-dict,roma2hira.dat} migemoの辞書ファイル

saphireが使用するエンコード、改行コード
    スクリプトファイルはエンコードはUTF8,改行コードはLFできめ打ちです。言語本体が扱うデータUTF8, EUCJP, SJISのエンコード0やLF,CR,LFCRのラインフィールドに対応しています。
    インタラクティブシェルの使用端末はUTF8決めうちです。UTF8端末で実行してください。

使い方
    readlineインターフェースを使ったインタラクティブシェルとして使いたい場合はsashを、スクリプトファイルの実行や-cオプションを使ったコマンド実行はsaphireをお使いください。スクリプトファイルの実行などはsashでも行えますが、readlineやmigemoをリンクしない分、saphireの方が消費メモリも少なく起動も速いです。
    sashを実行中にヘルプが見たい場合はsaphire_helpをお使いください。

C/Migemoの使用メモリについて
    物凄く大きいです。問題になる場合はmigemoを外してコンパイルしてください。Migemoによる日本語ファイルの補完はできなくなりますけど。

cygwinでの実行
    saphireはプロセス間通信を使っているのでcygserverが必要です。
    saphireを実行する前にcygserver-configを実行してからnet start cygserverを実行してcygserverを有効にしてください。cygserverを止めるにはnet stop cygserverを実行してください。
    (追記。上記でcygserverが起動できない場合はbashでexport CYGWIN=server; /usr/sbin/cygserver &を実行してみてください)

saphireをアプリケーションに組み込む
    saphireはアプリケーション組み込み用のシェルとしても使えます。
    詳しい組み込み方はmain.cとsaphire.hを見てもらえれば分かります。
    基本的にlibsaphire.soがサーチされていていればsaphire.hをincludeするだけで使えます。

同封ファイルの説明
    AUTHORS 著者情報
    CHANGELOG.txt 変更記録
    GPL GPLラインセンス
    Makefile makeで使うファイル
    Makefile.in configureで使うMakefileの元
    README.ja.txt このファイル
    README.en.txt このファイルの英訳
    USAGE.ja.txt 使い方ファイル
    USAGE.en.txt 使い方のファイルの英訳
    config.h configureで出力されるファイル
    config.h.in configureで使うconfig.hの元
    config.log configureのログ
    config.status configure関連
    configure configureプログラム
    configure.in configureプログラムの元
    install.sh configureで使うファイル
    sash.bat cygwinでsashの起動に使うファイル
    saphire.h saphireをアプリケーションに組み込むときにインクルードするヘッダー
    saphire.ksh saphireのランタイムスクリプト
    saphire_commands.c saphireの組み込みコマンド
    saphire_inner.h saphire内部で使う宣言
    saphire_main.c saphire内部で使うルーチン
    saphire_parser.c saphireのパーサー
    saphire_vm.c kitutukの本体
    main.c saphireを組み込んだインタラクティブシェル(sash)プログラム本体
    saphire_curses.c オリジナル端末制御ライブラリ
    saphire_curses.h
    saphire_debug.c デバッグ用のライブラリ
    saphire_debug.h
    saphire_extra.c その他の便利ルーチン
    saphire_extra.h
    saphire_hash.c ハッシュコンテナライブラリ
    saphire_hash.h
    saphire_kanji.c 漢字処理用のライブラリ
    saphire_kanji.h
    saphire_list.c リストコンテナライブラリ
    saphire_list.h
    saphire_string.c 文字列ライブラリ
    saphire_string.h
    saphire_vector.c 動的配列ライブラリ(Javaと違ってsaphire_listより多くの場合効率的だと思われる)
    saphire_vector.h
    readline.c readlineライブラリを使ってインタラクティブシェルを実現しているソース

著作権
    湊大典にあります。ライセンスはGPLライセンスとします。再配布するときは一報してもらえると助かります。

