@c -*- coding: utf-8 -*-
                      Gaucheのコンパイルとインストール

注: Gaucheは開発中のシステムで、頻繁に更新しています。次のURLで最新の
情報が得られます:
  http://practical-scheme.net/gauche/


簡単な方法
---------------------------------------------------

   % ./configure
   % make
   % make test
   % make install

これで、Gaucheシステムが /usr/local/bin, /usr/local/lib/gauche及び
/usr/local/share/gauche以下にインストールされます。

既にGaucheがインストールされているシステムで、
全く同じconfigurationオプションで新しいバージョンのGaucheをインストール
する場合、'configure' の代わりに次のコマンドを使うこともできます。

    % gauche-config --reconfigure | sh

'--reconfigure' オプションが与えられると、gauche-configは現在
インストールされているGaucheがconfigureされた時のコマンドラインを
標準出力に書き出します。それをシェルに評価させれば、同じオプションで
configureすることができます。Gaucheをアップデートする場合に便利です。


スレッドサポート
---------------------------------------------------

ポピュラーなUnix系OSの多くで、Gaucheはネイティブスレッドをサポートします。
スレッドが使用可能かどうかはconfigure時に自動判定されます。
スレッドサポートが有効かどうかはconfigureスクリプトの出力の最後に表示されます。

何らかの理由で、スレッドサポートが可能なプラットフォームでそれを無効にしたい場合、
あるいは本来可能であるはずなのにconfigureスクリプトが判定を間違えて有効になっていない
場合には、次のconfigureオプションで強制的にスレッドサポートの有効/無効を
切り替えることができます。

  ./configure --enable-threads=none     ;; turn off the thread support
  ./configure --enable-threads=pthreads ;; turn on the thread support


文字エンコーディングの選択
---------------------------------------------------

デフォルトでは、Gaucheは内部文字エンコーディングとしてutf-8を使います。
--enable-multibyte=ENCODING というオプションをconfigureに渡すことで、
内部文字エンコーディングを変えることができます。

  ./configure --enable-multibyte=utf-8   ;; UTF-8 (default)
  ./configure --enable-multibyte=euc-jp  ;; EUC-JP
  ./configure --enable-multibyte=sjis    ;; Shift JIS
  ./configure --enable-multibyte=no      ;; No multibyte string


Gaucheは代表的な日本語文字エンコーディングを認識し変換することが
できますが、それ以外のエンコーディングに関しては、iconvが利用可能で
あればそれを利用して変換を行います。
iconvが標準でインストールされていないシステムでは、
--with-iconvオプションで外部のiconvライブラリを利用することができます。

  ./configure --with-iconv=DIR


例えば --with-iconv=/usr/local とすれば、Gaucheはiconv.hを/usr/local/include
から、libiconvを/usr/local/libから探します。もしあなたのiconvライブラリが
libiconv以外の名前 (libmyconvとか) だったとしたら、
--with-iconv-lib=myconv というオプションも指定して下さい。

外部のiconvライブラリとしては、Bruno Haible氏のlibiconvが以下から入手可能です。
http://www.gnu.org/software/libiconv/


ローカルライブラリパス
---------------------------------------------------

Gaucheのビルドに、標準でない場所にインストールされているライブラリを
使用したい場合、次のオプションでその場所を指定することができます。

  --with-local=PATH:PATH2:...

これで、PATH/include、PATH2/include、... がインクルードパスに、
PATH/lib、PATH2/lib、... がライブラリサーチパスに追加されます。

例えば、/usr/localにインストールされたgdbmライブラリを使用したい
場合は次のようにします。

  --with-local=/usr/local


IPv6サポート
---------------------------------------------------

Gaucheは実験的にIPv6をサポートしています。デフォルトではこの機能はoffに
なっていますが、次のconfigureオプションで有効にすることができます。

  --enable-ipv6

もちろん、OSでIPv6がサポートされていなければなりません。
現在の実装はFreeBSDおよびLinux上でテストされています。
詳しい機能はリファレンスマニュアルのgauche.netの項を参照して下さい。


SLIBの場所
---------------------------------------------------

SLIBは、ポータブルなSchemeライブラリで、いろいろ便利な機能が
完全にSchemeで書かれています。GaucheはSLIBがインストールされていれば
その機能を利用することができます。

configureスクリプトは、/usr/local/slibなどいくつかの基本的なディレクトリ
からSLIBを自動的に探します。もしあなたのSLIBシステムが標準的ではない場所に
インストールされていたら、次のオプションでその場所を指定してください。

   ./configure --with-slib=PATH

ここで、PATHはSLIBがインストールされたパスです。

GauchehはSLIB無しでも動作します。SLIBを使う必要がなければ、このオプションは
気にしなくてよいです。

SLIBは最初に使う前にGaucheのライブラリディレクトリにカタログファイルを
作成します。Gaucheのインストール時に既にSLIBが存在すればインストール
スクリプトがカタログファイルを作成しますが、Gaucheインストール後にSLIB
がインストールされた場合、最初にSLIBを使おうとした時点でカタログファイルが
作成されます。この時、Gauche使用者がライブラリディレクトリに書き込み権限を
持っていないとエラーとなります。書き込み権限を持つユーザがgoshを起動して
例えば次のような式を評価すればカタログファイルが正しく作られます。

  (use slib)
  (require 'logical)


実行時のライブラリパス
---------------------------------------------------

しばしば、環境のコントロールができない箇所でGaucheを走らせなければならない
場合があります。例えばCGIスクリプトをISPのサーバーで走らせる場合などです。
もし、Gaucheが標準的でない場所にインストールされた共有ライブラリに依存し
ている場合、それが問題となります。

例えば、最新のlibiconv.soを自分でコンパイルして /home/yours/lib に
インストールしたとします。--with-iconv=/home/yours/lib としてconfigure
すれば、Gaucheはあなたのiconvを使うようにコンパイルされます。実行時に適切
な環境変数、例えばLD_LIBRARY_PATHなどを設定しておけば、Gaucheの
インタプリタgoshはlibiconv.soを捜し出すことができます。しかし、
CGIスクリプトはWeb serverによって起動され、Web serverはLD_LIBRARY_PATH
を設定してくれないかもしれません。その場合、goshはlibiconv.soが見つけられずに
起動に失敗するかもしれません。

コンパイラによっては、プログラムが依存している共有ライブラリのパスをプログラム
本体に書き込んでしまえるオプションを持っています。configureの --with-rpath
オプションはそれを利用します。--with-rpath=DIRとすると、実行時にDIRから
共有ライブラリを探すような設定になります。このオプションは今のところgccでしか
動作しません。


インストール先の指定
---------------------------------------------------

次のようにconfigureスクリプトを起動することにより、インストール先の
ディレクトリを指定できます。

   % ./configure --prefix=$PREFIX  --exec-prefix=$EXEC_PREFIX


--prefix オプションが指定されなければ、 /usr/local が指定されたものとみなされます。
--exec-prefix オプションが指定されなければ、EXEC_PREFIXはPREFIXと同じものに
なります。


インストールされるファイルの内訳は以下の通りです。

  $EXEC_PREFIX/bin/*
     インタプリタ (gosh) とコンフィグレーションスクリプト (gauche-config)

  $EXEC_PREFIX/lib/*
     ライブラリ (libgauche.a).

  $PREFIX/share/gauche/VERSION/include/*
     libgaucheをリンクするアプリケーションに必要なヘッダーファイル

  $PREFIX/share/gauche/VERSION/lib/*
     マシンに依存しないSchemeファイル

  $PREFIX/share/info/*
     infoファイル

  $EXEC_PREFIX/lib/gauche/VERSION/ARCHITECTURE/*
     マシンに依存するファイル (.so, gosh, gauche-config, libgauche.a)

  $PREFIX/share/gauche/site/lib/*
  $EXEC_PREFIX/lib/gauche/site/VERSION/ARCHITECTURE/*
     ユーザが独自にインストールするマシン非依存／依存ファイルのデフォルトの置き場所。


最適化オプション
---------------------------------------------------


Make時に、makeマクロOPTFLAGSを用いて追加のコンパイルオプションを指定すること
ができます。configureが設定するOPTFLAGS以外のオプションを試したい場合は
次のようにmakeを走らせて下さい。

  make OPTFLAGS="--some-compiler-option --other-option"


アンインストール
---------------------------------------------------

インストールされたGaucheソフトウェアを取り除くには、ソースツリーのトップ
ディレクトリで

  make uninstall

として下さい。


機種依存の情報
---------------------------------------------------


* MacOS X - 10.2.x以前のバージョンでは、dlcompatライブラリ(libdl)が
      インストールされていることが必要です。http://fink.sourceforge.netから
      ダウンロードできます。10.3以降では必要ありません。システム標準の
      場所以外にdlcompatライブラリをインストールした場合は、configureの
      --with-localオプションで場所を指定して下さい。
      また、GCがpthreadsを要求するようになったので、--enable-threads=pthreads
      も必要です。
      (例：$HOME/include に dlfcn.h が、 $HOME/lib に libdl.aがある場合は

         ./configure --with-local=$HOME --enable-threads=pthreads

       とする)

* IRIX with 64bit binary - デフォルトの32bit ABIではなく64bit ABIでコンパイル
       したい場合は次のようにして下さい。

         CC="cc -64" AS="as -64" ./configure

* Linux/Crusoe TM5800 - 最近のLinuxでは Crusoe TM5800がi686互換とされる
       ようになったようですが、gc中でi686特有のprefetch命令を使っているところ
       でコンパイルに失敗するという報告がありました。とりあえずのfixは、
       configure後にgc/Makefile中の 

         -DUSE_I686_PREFETCH

       という記述を消してからmakeして下さい。


