// -*- coding: utf-8 -*-
:source-highlighter: pygments

//@start header
// This is a source document from which INSTALL.en.adoc (English) and
// INSTALL.ja.adoc (Japanese) are generated.  If you're reading this in
// an un-tarred source tree, check out one of the generated adoc files.

// Use English as the default language.
// Use "--attribute=lang=ja" option for Japanese output.
ifndef::lang[:lang: en]

ifeval::["{lang}" == "en"]
:EN:
endif::[]
ifeval::["{lang}" == "ja"]
:JA:
endif::[]

//@end header

ifdef::JA[]
= Gaucheのコンパイルとインストール
endif::JA[]
ifdef::EN[]
= Compiling and Installing Gauche
endif::EN[]

ifdef::JA[]
NOTE: Gaucheは開発中のシステムで、頻繁に更新しています。次のURLで最新の
情報が得られます:
endif::JA[]
ifdef::EN[]
NOTE: The Gauche system is a work in progress and frequently updated.
Check out the latest information on the site:
endif::EN[]
https://practical-scheme.net/gauche/

ifdef::JA[]
このドキュメントでは、配布されるtarballからGaucheをコンパイルしてインストールする
方法を説明します。ソースリポジトリをcloneしてコンパイルする場合はさらに準備が必要です。
詳しくは link:HACKING.adoc[] ファイルを参照してください。
endif::JA[]
ifdef::EN[]
This document explains how to compile and install Gauche from a distributed
tarball.   To compile from cloned source tree from the repository,
you need some extra steps; See the file link:HACKING.adoc[] for the details.
endif::EN[]


ifdef::JA[]
== 必要なもの
endif::JA[]
ifdef::EN[]
== Prerequisites
endif::EN[]


ifdef::JA[]
Unix環境の標準的なビルドツールとGNU makeが必要です。

それに加え、以下のツールとライブラリをあらかじめ入れておくことを
推奨します。無くてもGaucheはビルドできますが、一部機能が使えなくなります。

- Makeinfo (バージョン5.0以降) - infoドキュメントをビルドするのに使います。
入ってなければドキュメントはインストールされません (その場合、REPLでのオンラインドキュメント
も使えません)
- Gzip - 同じくドキュメントビルド時に使われます。
- Libiconv - 文字エンコーディング変換に使われます。下の説明も参照。
- link:https://tls.mbed.org/[Mbed TLS] - TLS/SSL接続に使われます。下の説明も参照。

他のオプショナルなライブラリについては以下で順次説明します。

Windows上では、MSYS/MinGWを使ってビルドできます。
詳しくはlink:doc/HOWTO-mingw.adoc[]を参照してください。
endif::JA[]
ifdef::EN[]
You need the standard build tools of the Unix environment, and
GNU make.

Besides that, the following
tools and libraries are recommended to have.  You can build Gauche without
them, but some features won't be available.

- Makeinfo (version 5.0 or later) - used to build info document.
If the build platform doesn't have it, document building is skipped and info
document won't be installed.  (You need info document to use online document
browsing from REPL.)
- Gzip - also used during document building.
- Libiconv - Used for character encoding conversion.  See below.
- link:https://tls.mbed.org/[Mbed TLS] - Used for TLS/SSL connection.  See below.

There are other optional libraries, which will be explained below.

To build on Windows, you can use MSYS/MinGW.
See link:doc/HOWTO-mingw.adoc[] for the details.
endif::EN[]


ifdef::JA[]
== 簡単な方法
endif::JA[]
ifdef::EN[]
== Quick Start
endif::EN[]

[source,console]
----
% ./configure
% make
% make check
% make install
----

ifdef::JA[]
これで、Gaucheシステムが `/usr/local/bin`, `/usr/local/lib/gauche` 及び
`/usr/local/share/gauche` 以下にインストールされます。
endif::JA[]
ifdef::EN[]
Things will be installed under `/usr/local/bin`, `/usr/local/lib/gauche`,
and `/usr/local/share/gauche`.
endif::EN[]

ifdef::JA[]
既にGaucheがインストールされているシステムで、
全く同じconfigurationオプションで新しいバージョンのGaucheをインストール
する場合、`configure` の代わりに次のコマンドを使うこともできます。
endif::JA[]
ifdef::EN[]
If you have installed Gauche before, and want to install
new version of Gauche with the same configuration option,
you can use the following command instead of `configure`.
endif::EN[]

[source,console]
----
% gauche-config --reconfigure | sh
----

ifdef::JA[]
`--reconfigure` オプションが与えられると、 `gauche-config` は現在
インストールされているGaucheがconfigureされた時のコマンドラインを
標準出力に書き出します。それをシェルに評価させれば、同じオプションで
configureすることができます。Gaucheをアップデートする場合に便利です。
endif::JA[]
ifdef::EN[]
When the option `--reconfigure` is given, `gauche-config` prints out
the command line when it is configured.   Pass the output to
shell and you can reconfigure with the same options.  It is a
convenient way to update Gauche.
endif::EN[]


ifdef::JA[]
== TLS/SSL のサポート
endif::JA[]
ifdef::EN[]
== TLS/SSL support
endif::EN[]

ifdef::JA[]
Gaucheはセキュアソケット通信にlink:https://tls.mbed.org/[MbedTLS]を
使っています。

デフォルトでは、システムにMbedTLSライブラリがあればそれを使い、
無ければTLSのサポートを組み込みません。
システムにMbedTLSをインストールできない事情があったり、
コンパイル後のバイナリだけを別環境に持ってゆくので依存ライブラリを減らしたい場合は、
ビルド中にMbedTLSのソースをダウンロードしてGaucheに組み込んでしまうこともできます。
endif::JA[]
ifdef::EN[]
Gauche relies on link:https://tls.mbed.org/[MbedTLS] for secure
connection support.

By default, `configure` checks if the MbedTLS library is installed
on the system, and use it if it's available.  Otherwise, no TLS support
is compiled.  If you can't install MbedTLS for some reason,
or you want to bring the compiled binary to the target system that
may not have MbedTLS library, you can specify to download MbedTLS
source during build and compile it into Gauche binary.
endif::EN[]

[horizontal]
`--with-tls=none`          :: do not include TLS/SSL support
`--with-tls=mbedtls`       :: include only mbedTLS support
`--with-tls=mbedtls-internal` :: During the build, MbedTLS source is downloaded
                            and compiled with Gauche.  See below.


ifdef::JA[]
`mbedtls-internal` を指定すると、ビルド中にMbedTLSのソースを
ダウンロードして、Gaucheの拡張ライブラリの一部として組み込みます。生成されるバイナリは
システムのMbedTLSライブラリには依存しないので、MbedTLSが入っていないターゲットシステムに
もバイナリをそのまま持って行けます。このオプションを使う場合はビルドにCMakeが必要です。
またその場合、`rfc--tls--mbed.so`および`libgauche-static-*.a`に
MbedTLSのコードが含まれるため、バイナリの配布にあたってはMbedTLSのライセンスにも従う
必要があります (Apache License 2.0)。
endif::JA[]
ifdef::EN[]
If you give `mbedtls-internal` in place of `mbedtls`, the build process downloads
MbedTLS source and compile it into Gauche's extension library.  The resulting
binary doesn't depend on system's MbedTLS dynamic library, so you can move it
to the systems that don't have MbedTLS.   You need CMake to use this option.
Note that if you use `mbedtls-internal`, MbedTLS code is included in
`rfc--tls--mbed.so` and `libgauche-static-*.a`, so they are subject to the
MbedTLS license as well (Apache License 2.0).
endif::EN[]

ifdef::JA[]
MbedTLSライブラリはコンパイル時にでマルチスレッド対応にするかどうかを
選べるようになっていますが、Gaucheではマルチスレッド対応でないと使えません。
システムのMbedTLSライブラリがマルチスレッド対応でコンパイルされていない場合は、
Gaucheに組み込むオプションを使ってください。
endif::JA[]
ifdef::EN[]
MbedTLS library can be compiled with or without multi-threading support.
Gauche requires MbedTLS library to be compiled with multi-threading support.
If the system's library doesn't have that support, use the option to
build it into Gauche library.
endif::EN[]

ifdef::JA[]
TLSを使う場合、サーバー証明書を認証するためにはCA(認証局)証明書が必要になります。
どこから証明書を探すかについて、いくつか選択肢を指定できます。
endif::JA[]
ifdef::EN[]
If you use TLS, you need CA certificates bundle to validate
server certificates.  You may specify several options where to look for one.
endif::EN[]

[horizontal]
`--with-ca-bundle=check`   :: Use heuristics to find CA bundle (default)
`--with-ca-bundle=none`    :: Do not set default CA bundle
`--with-ca-bundle=system`  :: Use system CA bundle.
                              On MinGW, it accesses system CA store via
                              Windows API.  Otherwise, it checks several
                              known paths used for popular systems.
`--with-ca-bundle=<path>`  :: Use given path as the CA bundle file


ifdef::JA[]
詳しくはマニュアルの`rfc.tls`の項を参照してください。
endif::JA[]
ifdef::EN[]
See the manual's `rfc.tls` entry for the details.
endif::EN[]


ifdef::JA[]
== 共通コマンド名
endif::JA[]
ifdef::EN[]
== Common command names
endif::EN[]

ifdef::JA[]
Schemeの仕様を議論するSRFI (Scheme Requrests for Implementation) では、
準拠する実装について、特定のコマンド名を推奨していることがあります。それらのコマンド名は
他の処理系も使ってる可能性があるため、デフォルトではインストールされません。

オプション `--enable-shared-commands` を指定すると、以下のコマンドがインストールされます。
endif::JA[]
ifdef::EN[]
SRFI (Scheme Requrests for Implementation), where various aspects of
Scheme spec are discussed, suggests some common names for Scheme-related
commands if the implementation comforms certain specs.  Those command
names may be used by other implementation, so we don't install them
by default.

If you give `--enable-shared-commands` option, the following commands are
installed:

endif::EN[]

  `scheme-r7rs`, `scheme-srfi-0`, `scheme-srfi-7`::
ifdef::JA[]
     `gosh`の別名。
endif::JA[]
ifdef::EN[]
     Aliases of `gosh`.
endif::EN[]

  `compile-r7rs`::
ifdef::JA[]
     `gauche-compile-r7rs`の別名。
endif::JA[]
ifdef::EN[]
     Alias of `gauche-compile-r7rs`.
endif::EN[]



ifdef::JA[]
== DBMデータベースのサポート
endif::JA[]
ifdef::EN[]
== DBM database support
endif::EN[]

ifdef::JA[]
デフォルトでは、Gaucheはシステム中にgdbm, ndbm, odbm (original dbm)のライブラリ
があるかどうかを調べ、見つかったライブラリに対するインタフェースサポートをビルドします。

もし特定のdbmライブラリのサポートを除外したい場合は、configureスクリプトの`--with-dbm`
オプションに、*含めたいライブラリ*を列挙してください。例えば `--with-dbm=ndbm,odbm` と
すれば、gdbmがシステムにあってもそれらは含まれず、
ndbmとodbmのサポートだけビルドされます。いずれのライブラリサポートも含めたくなければ
`--with-dbm=no` と指定してください。
endif::JA[]
ifdef::EN[]
By default, Gauche looks for gdbm, ndbm and odbm (original dbm) libraries
on your system, and build support for available libraries.

If you want to exclude any of these support, list the libraries you
want to *inlucde* in `--with-dbm` configure option.  For example,
if you want to include ndbm and odbm but nothing else,
specify `--with-dbm=ndbm,odbm`.
If you want to include none of them, specify `--with-dbm=no`.
endif::EN[]


ifdef::JA[]
== 文字エンコーディング変換
endif::JA[]
ifdef::EN[]
== Character encoding conversion
endif::EN[]

ifdef::JA[]
GaucheはUnicode(UTF-8, 16, 32)、Latin-N、および代表的な日本語文字エンコーディングを
認識し変換することができますが、それ以外のエンコーディングに関しては、iconvが利用可能で
あればそれを利用して変換を行います。iconvが標準でインストールされていないシステムでは、
`--with-iconv` オプションで外部のiconvライブラリを利用することができます。
endif::JA[]
ifdef::EN[]
Gauche can recognize and converts Unicode (UTF-8, 16, 32), Latin-N, and
typical japanese character encodings, but delegates other conversion work
to iconv library (when available).   If your system does not have iconv
installed in the standard location, you can specify the location of your
external iconv library by `--with-iconv` option.
endif::EN[]

[source,sh]
----
--with-iconv=DIR
----


ifdef::JA[]
例えば `--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が以下から入手可能です。
endif::JA[]
ifdef::EN[]
For example, if your say `--with-iconv=/usr/local`, Gauche looks
for the header iconv.h from `/usr/local/include` and the library
libiconv from `/usr/local/lib`.
In case if your iconv library is named other than libiconv, say,
`libmyconv`, you can also specify `--with-iconv-lib=myconv` to tell
Gauche to link against the library.

You can obtain Bruno Haible's libiconv library from here:
endif::EN[]
https://www.gnu.org/software/libiconv/


ifdef::JA[]
== ローカルライブラリパス
endif::JA[]
ifdef::EN[]
== Local library paths
endif::EN[]

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

[source,sh]
----
--with-local=PATH:PATH2:...
----

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

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

[source,sh]
----
--with-local=/usr/local
----
endif::JA[]
ifdef::EN[]
If you want to use some libraries installed in non-standard location
to build Gauche, you can use the following option to specify the
locations.

[source,sh]
----
--with-local=PATH:PATH2:...
----

This addts `PATH/include`, `PATH2/include`, ... to the include paths,
and `PATH/lib`, `PATH2/lib`, ... to the library search paths.

For example, if you want to use gdbm library in `/usr/local`,
you can say:

[source,sh]
----
--with-local=/usr/local
----
endif::EN[]


ifdef::JA[]
== SLIBの場所
endif::JA[]
ifdef::EN[]
== Selecting SLIB location
endif::EN[]

ifdef::JA[]
link:http://people.csail.mit.edu/jaffer/SLIB[SLIB]は、
ポータブルなSchemeライブラリで、いろいろ便利な機能が
完全にSchemeで書かれています。GaucheはSLIBがインストールされていれば
その機能を利用することができます。
endif::JA[]
ifdef::EN[]
link:http://people.csail.mit.edu/jaffer/SLIB[SLIB]
is a portable Scheme library containing various useful functions,
entirely written in Scheme.  Gauche can use SLIB features if you have
it on your system.
endif::EN[]

ifdef::JA[]
configureスクリプトは、 `/usr/local/slib` や `/usr/share/slib` などいくつかの基本的なディレクトリ
からSLIBを自動的に探します。もしあなたのSLIBシステムが標準的ではない場所に
インストールされていたら、次のオプションでその場所を指定してください。
endif::JA[]
ifdef::EN[]
The configure script tries to find where SLIB is installed.  It looks
for some typical directories like `/usr/local/slib` or `/usr/share/slib`.
If you installed your SLIB in some non-standard location, you can tell
it to the configure script as follows:
endif::EN[]

[source,sh]
----
./configure --with-slib=PATH
----

ifdef::JA[]
ここで、`PATH` はSLIBがインストールされたパスです。
endif::JA[]
ifdef::EN[]
where `PATH` is the path you installed your SLIB.
endif::EN[]

ifdef::JA[]
GauchehはSLIB無しでも動作します。SLIBを使う必要がなければ、このオプションは
気にしなくてよいです。
endif::JA[]
ifdef::EN[]
Gauche works without SLIB, anyway.  If you're not interested, you
don't need to care about this.
endif::EN[]

ifdef::JA[]
SLIBは最初に使う前にGaucheのライブラリディレクトリにカタログファイルを
作成します。Gaucheのインストール時に既にSLIBが存在すればインストール
スクリプトがカタログファイルを作成しますが、Gaucheインストール後にSLIB
がインストールされた場合、最初にSLIBを使おうとした時点でカタログファイルが
作成されます。この時、Gauche使用者がライブラリディレクトリに書き込み権限を
持っていないとエラーとなります。書き込み権限を持つユーザが `gosh` を起動して
例えば次のような式を評価すればカタログファイルが正しく作られます。
endif::JA[]
ifdef::EN[]
SLIB needs a catalog file to be created in the Gauche library
directory before use.  If Gauche finds SLIB during installation,
the install procedure creates the catalog file.
If you install slib after installing Gauche, it tries to create
the catalog file when you use slib first time, and you may get
an error if you don't have a permission to write into the
Gauche library directory.   Run `gosh` in the right permission
and evaluate something like the following will solve the problem.
endif::EN[]

[source,scheme]
----
(use slib)
(require 'logical)
----


ifdef::JA[]
== 実行時のライブラリパス
endif::JA[]
ifdef::EN[]
== Run-time library path
endif::EN[]

ifdef::JA[]
しばしば、環境のコントロールができない箇所で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` でしか
動作しません。
endif::JA[]
ifdef::EN[]
In some cases, your have to run Gauche under the environment
you don't have much control.  One of such cases is when you
want to run CGI script on the ISP's machine.  It may become
a problem that your build of Gauche depends on some dynamically
loaded libraries that are installed in non-standard location.

For example, suppose you install a new `libiconv.so` in `/home/yours/lib`
on the ISP's server and compile Gauche with `--with-iconv=/home/yours/lib`.
You have set up correct environment variables such as `LD_LIBRARY_PATH`,
so you can invoke Gauche interpreter `gosh` without a problem.  Now,
you write a CGI script.   Unfortunately, the ISP's web server
doesn't set `LD_LIBRARY_PATH` as you desired, and your script never
runs on the server, for the interpreter can't find `libiconv.so`
in the system default path.

Some compilers have an option that writes exact path of shared
libraries that the binary depends on.  A `configure` option `--with-rpath`
utilizes the feature.  When an option `--with-rpath=DIR` is given,
configure sets up a build process so that the shared libraries
are looked from `DIR`.   This works only on `gcc`, however.
endif::EN[]


ifdef::JA[]
== インストール先の指定
endif::JA[]
ifdef::EN[]
== Customizing install location
endif::EN[]

ifdef::JA[]
次のようにconfigureスクリプトを起動することにより、インストール先の
ディレクトリを指定できます。
endif::JA[]
ifdef::EN[]
Call configure with those parameters to specify where to install.
endif::EN[]

[source,console]
----
% ./configure --prefix=$PREFIX  --exec-prefix=$EXEC_PREFIX
----


ifdef::JA[]
`--prefix` オプションが指定されなければ、 `/usr/local` が指定されたものとみなされます。
`--exec-prefix` オプションが指定されなければ、 `EXEC_PREFIX` は `PREFIX` と同じものに
なります。
endif::JA[]
ifdef::EN[]
If `--prefix` option is omitted, `/usr/local` is assumed as `PREFIX`.
If `--exec-prefix` option is omitted, `EXEC_PREFIX` is set the same as `PREFIX`.
endif::EN[]


ifdef::JA[]
インストールされるファイルの内訳は以下の通りです。
endif::JA[]
ifdef::EN[]
The files are installed in those locations:
endif::EN[]

  `$EXEC_PREFIX/bin/*`::
ifdef::JA[]
     インタプリタ (`gosh`) とコンフィグレーションスクリプト (`gauche-config`)
endif::JA[]
ifdef::EN[]
     The interpreter (`gosh`) and configuration script (`gauche-config`).
endif::EN[]

  `$EXEC_PREFIX/lib/*`::
ifdef::JA[]
     ライブラリ (`libgauche.a`).
endif::JA[]
ifdef::EN[]
     Library (`libgauche.a`).
endif::EN[]

  `$PREFIX/share/gauche/VERSION/include/*`::
ifdef::JA[]
     libgaucheをリンクするアプリケーションに必要なヘッダーファイル
endif::JA[]
ifdef::EN[]
     Header files required to create applications using libgauche.
endif::EN[]

  `$PREFIX/share/gauche/VERSION/lib/*`::
ifdef::JA[]
     マシンに依存しないSchemeファイル
endif::JA[]
ifdef::EN[]
     Machine-independent Scheme files.
endif::EN[]

  `$PREFIX/share/info/*`::
ifdef::JA[]
     infoファイル
endif::JA[]
ifdef::EN[]
     info files.
endif::EN[]

  `$EXEC_PREFIX/lib/gauche/VERSION/ARCHITECTURE/*`::
ifdef::JA[]
     マシンに依存するファイル (`.so`, `gosh`, `gauche-config`, `libgauche.a`)
endif::JA[]
ifdef::EN[]
     Machine-dependent files (`.so` files, `gosh`, `gauche-config`, and `libgauche.a`)
endif::EN[]

  `$PREFIX/share/gauche/site/lib/*`::
  `$EXEC_PREFIX/lib/gauche/site/VERSION/ARCHITECTURE/*`::
ifdef::JA[]
     ユーザが独自にインストールするマシン非依存／依存ファイルのデフォルトの置き場所。
endif::JA[]
ifdef::EN[]
     These are default locations where user installed
     machine-independent/dependent files will go.
endif::EN[]


ifdef::JA[]
== 最適化オプション
endif::JA[]
ifdef::EN[]
== Optimization options
endif::EN[]


ifdef::JA[]
Make時に、 `make` マクロ `OPTFLAGS` を用いて追加のコンパイルオプションを指定すること
ができます。 `configure` が設定する `OPTFLAGS` 以外のオプションを試したい場合は
次のように `make` を走らせて下さい。
endif::JA[]
ifdef::EN[]
You can pass extra options at make time, using `make` macro `OPTFLAGS`.
`configure` sets a default, but if you want to explore different
options, just run `make` as follows:
endif::EN[]

[source,sh]
----
make OPTFLAGS="--some-compiler-option --other-option"
----


ifdef::JA[]
== アンインストール
endif::JA[]
ifdef::EN[]
== Uninstallation
endif::EN[]

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

[source,sh]
----
make uninstall
----

として下さい。
endif::JA[]
ifdef::EN[]
You can remove installed Gauche software by running

[source,sh]
----
make uninstall
----

on top of the source tree.
endif::EN[]


ifdef::JA[]
== クロスコンパイル
endif::JA[]
ifdef::EN[]
== Cross compilation
endif::EN[]

ifdef::JA[]
Gaucheはautotool標準のクロスコンパイルをサポートしています。
つまり、 `configure` スクリプトに `--build` と `--host` オプションを与えて
makeするだけです (クロス開発に必要なツールはもちろんインストールされているとします)。
ただ、二つばかり気をつけることがあります。
endif::JA[]
ifdef::EN[]
Gauche supports autotools-standard cross compilation, that is,
you give `--build` and `--host` option to `configure` script and
just make (assuming you have appropriate cross development tools).
There are a couple of caveats, though.
endif::EN[]

ifdef::JA[]
- クロスコンパイルしようとしているのと同じバージョンのGaucheをビルドマシンに
  インストールしておいてください。
+
通常のビルドでは、Gaucheは作ったばかりの `gosh` を使って `ext/` 以下の拡張
ライブラリをビルドします。クロスコンパイル時には、作ったばかりの `gosh` は
ビルドマシンでは実行できないので、既にビルドマシンにインストールされている
`gosh` を使うことになります。

- `./configure` に `--with-libatomic-ops=no` オプションが必要かもしれません。
+
このオプションをつけることで、システムにインストールされている `libatomic_ops`
ではなく同梱されたソースを使うようになります。どうもconfigureスクリプトが
ビルドシステム用の `libatomic_ops` をホスト用と誤認するケースがあるようです。
endif::JA[]
ifdef::EN[]
- You have to have the same version of Gauche that you're trying to
  cross-compile on the build machine.
+
In normal build, Gauche uses freshly built `gosh` to compile
extension libraries (under `ext/`).  While cross compiling we can't run
freshly built `gosh` on the build machine, so we rely on the `gosh` already
installed on it.

- You may need `--with-libatomic-ops=no` option for `./configure`
+
The option forces Gauche to use bundled `libatomic_ops` source instead
of system provided one.  We noticed that `./configure` may misunderstood
the build system's `libatmic_ops` as the host system's.
endif::EN[]

ifdef::JA[]
例として、次のコマンドラインで、Windows (mingw-w64 32bit) 用バイナリを
あなたのシステム上でクロスコンパイルできます:
endif::JA[]
ifdef::EN[]
For example, the following command line is to cross build on your machine
for Windows (mingw-w64 32bit):
endif::EN[]

[source,sh]
----
./configure --build=`./config.guess` \
            --host=i686-w64-mingw32 \
            --with-libatomic-ops=no \
            --prefix=/usr/local
----

ifdef::JA[]
== 機種依存の情報
endif::JA[]
ifdef::EN[]
== Machine-dependent information
endif::EN[]


ifdef::JA[]
* MacOS X - 10.15 (Catalina) では、ダウンロードしたtarballから取り出されたファイル
  はセキュリティ機構にマークされているため、ビルド時に必要なシェルスクリプトを実行できません。
  tarballを展開した後、次のコマンドを実行してください。(VERSIONは配布バージョンに
  置き換えてください)。
  tarballが真正のものであるかどうかは、https://practical-scheme.net/vault/ に置いてある
  asc署名で確認してください。
endif::JA[]
ifdef::EN[]
* MacOS X - 10.15 (Catalina) enhanced the security check, and doesn't allow
  to execute shell scripts extracted from an unsigned downloaded tarball.
  Run the following command after extractng tarball
  (Replace VERSION for Gauche's version).
  You can check if the tarball isn't tampered using asc signature file
  distributed from https://practical-scheme.net/vault/.
endif::EN[]
+
[source,sh]
----
xattr -r -d com.apple.quarantine Gauche-VERSION/
----

ifdef::JA[]
* IRIX with 64bit binary - デフォルトの32bit ABIではなく64bit ABIでコンパイル
  したい場合は次のようにして下さい。
endif::JA[]
ifdef::EN[]
* IRIX with 64bit binary - If you want to compile for 64bit ABI instead
  of the default 32bit ABI, run configure like this:
endif::EN[]
+
[source,sh]
----
CC="cc -64" AS="as -64" ./configure
----

ifdef::JA[]
* Linux/Crusoe TM5800 - 最近のLinuxでは Crusoe TM5800がi686互換とされる
  ようになったようですが、gc中でi686特有のprefetch命令を使っているところ
  でコンパイルに失敗するという報告がありました。
  この場合は以下のように環境依存の最適化を無効にして下さい。
endif::JA[]
ifdef::EN[]
* Linux/Crusoe TM5800 - It is reported that recent Linux kernel thinks
  TM5800 as i686-compatible, and compilation of Gauche fails at
  gc where the i686's prefetch instruction is used.
  If you want to disable this machine-dependent heuristic optimization,
  run configure like this:
endif::EN[]
+
[source,sh]
----
./configure --disable-heuristic-optimization
----
