# idnkitのインストール

UNIX環境でidnkitをソースからのインストールする手順について説明します。 ここではソースからのインストール方法について説明します。

- idnkitのインストール手順
- インストールされるファイルの一覧

インストールの後は、必要に応じて「idnkitの設定」 を参照して設定を行って下さい。 また、DNSサーバに国際化ドメインのゾーン情報をセットする場合は、 「DNSサーバの設定」を参照して下さい。

## idnkitのインストール手順

idnkitのコンパイルおよびインストール手順について説明します。 配布ソースからのインストール手順は、次のようになります。

1. 前準備
2. 配布ソースの展開
3. `configure`スクリプトの実行
4. コンパイル
5. テスト (省略可)
6. ファイルのインストール
7. 後片付け (省略可)

以下、この順番に沿って説明していきます。

### 前準備

idnkitでは、ISO8859-1, EUC-JPなど様々なローカルエンコーディングで記述 されたドメイン名のエンコーディングを変換するために、`iconv()` という関数を使用します。

`iconv()`は汎用のエンコーディング変換関数ですが、標準で 提供されているシステムとそうでないシステムがあります。 標準で提供されていないシステムでは、idnkitのインストールに先立って `iconv()`をインストールしなければなりません。 また、idnkitは`iconv()`がUTF-8エンコーディングをサポート していることを要求します。 システム付属の`iconv()`がUTF-8をサポートしていない場合には、 別途UTF-8に対応した`iconv()`をインストールする必要があります。

UTF-8に対応した`iconv()`のフリーな実装としては、たとえば GNU libiconvがあります。 ソースコードは、下記のページから入手することができます。

> http://www.gnu.org/software/libiconv/

GNU libiconvはLGPLに基づいたフリーソフトウェアで、多くのUNIX系OS で動作します。 GNU libiconvのインストール方法については上記ページか、あるいは ソースコードに含まれる`INSTALL.generic`ファイルをご覧下さい。

ただし、軽量版のライブラリ (libidnkitlite) だけをインストールするので あれば、`iconv()`を含むライブラリは必要ありません。 その場合は後述する`configure`スクリプトの実行時に、 `--enable-liteonlyオプション` を指定して下さい。

### 配布ソースの展開

idnkitに関する最新情報は以下の場所から入手可能で、 最新のソースコードもここからダウンロードできます。

> http://jprs.co.jp/idn/

ここでは、最新版のバージョンが2.3であるものとします。 より新しい版が入手できる場合はそちらを利用し、以下「2.3」と書かれた 箇所は適宜読み替えて下さい。

入手したidnkitの配布ソース`idnkit-2.3.tar.bz2`を次の ようにして展開します。

> `% bunzip2 -c idnkit-2.3.tar.bz2 | tar xf -`

展開すると、`idnkit-2.3`というディレクトリが作られますので、 そこに移動して下さい。

> `% cd idnkit-2.3`

### `configure`の実行

idnkitのライブラリやコマンドをコンパイルします。 まず、`configure`スクリプトを実行します。 `configure`はヘッダファイルやライブラリの有無など、システム毎の 特徴を調べ、コンパイル環境を適切に設定するためのツールです。

> `% ./configure`

軽量版ライブラリのみをインストールしたい場合や、`iconv()` を含むライブラリの存在位置を指定しなければいけない場合、あるいは コンパイル時に特別なオプションを指定したい場合は、オプションや環境変数 で`configure`で指定します。

`configure`に指定できるオプションの中で、重要と思われるもの を記します。

オプション | 説明
--- | ---
`--prefix=PREFIX` | idnkitをインストールするディレクトリのパスを指定します。デフォルト は`/usr/local`です。
`--enable-liteonly` | ローカルエンコーディングへの対応を省いた、軽量版ライブラリのみを インストールします。`iconv()`に関するオプションと同時に 指定することはできません。
`--with-libiconv=LIBICONV_PREFIX` | あらかじめインストールしてあるGNU libiconvをidnkitにリンクさせる 場合、このオプションを指定します。 引数LIBICONV_PREFIXには、GNU libiconvがインストールされて いる位置を指定します。 このオプションを指定しなくても、`configure`はGNU libiconv の自動検出を行いますが、GNU libiconvのインストール位置によっては、検出 できないことがあります。 その場合は、このオプションで位置を明示して下さい。 また、システム付属の`iconv()`が存在する環境で、敢えて GNU libiconvを使用する場合も、このオプションによる指定が必要です。 引数を省略すると、PREFIX (PREFIXの値は `--prefix=`PREFIXから導出されます) を指定したもの とみなされます。 `--with-libiconv`はGNU libiconv用の短縮オプションで `--with-libiconv=/usr/local` は以下と等価になります。 `--with-iconv-include='-I/usr/local/include' --with-iconv='-L/usr/local/lib -R/usr/local/lib -liconv'` 短縮オプション (`--with-libiconv`) と通常用のオプション (`--with-iconv-include`, `--with-iconv`) を両方 とも指定した場合は、通常用のオプションほうが優先されます。 なお、このオプションは`--enable-liteonly`と同時に指定する ことはできません。
`--with-iconv-include=ICONV_INCDIR` | Cコンパイラが通常では検索しないディレクトリに`iconv.h` が置かれている場合、次のようにしてそのディレクトリを指定します。 `--with-iconv-include=/usr/local/include` なお、このオプションは`--enable-liteonly`と同時に指定する ことはできません。
`--with-iconv=ICONV_LIB` | システムに`iconv()`が組み込まれていない、あるいは システムの`iconv()`を使いたくないなどの理由で別途 `iconv()`のパッケージをインストールした場合は、 ICONV_LIBに`iconv()`のライブラリを指定します。 ライブラリファイルを絶対パスで指定するか、あるいはCコンパイラに与える オプションの形式で指定して下さい。 たとえば `--with-iconv="-L/usr/local/lib -liconv"` のように指定します。 `iconv()`が共有ライブラリになっている場合には、さらに Cコンパイラのオプションをいくつか指定する必要があるかも知れません。 なお、このオプションは`--enable-liteonly`と同時に指定する ことはできません。
`--with-utf8=UTF8_NAME` | UTF-8エンコーディングを`iconv()`に指定する場合、 idnkitはデフォルトで`"UTF-8"`というエンコーディング名称を 使用します。これ以外のエンコーディング名称を指定する必要があれば、 このオプションで名称をセットします。 GNU libiconvを使用する場合には、このオプションの指定は不要です。

### その他の`configure`のオプション

それほどよく使うわけではありませんが、`configure`には 前項に挙げたもの以外にも様々なオプションが用意されています。 必要に応じて指定して下さい。

オプション | 説明
--- | ---
`--exec-prefix=EXEC_PREFIX` | マシン固有のファイルをインストールするディレクトリのパスを指定します。 デフォルトはPREFIX (`--prefix=PREFIX` によって指定可能、PREFIXのデフォルトは `/usr/local`) になります。
`--bindir=BINDIR` | idnconv2, idncmp, idncheck, idnslookup2の各コマンドを インストールするディレクトリを指定します。 デフォルトでは`EXEC_PREFIX/bin`にインストール されます。
`--libdir=LIBDIR` | idnkitのライブラリをインストールするディレクトリを指定します。 デフォルトでは`EXEC_PREFIX/lib`にインストール されます。
`--includedir=INCDIR` | idnkitのライブラリのヘッダファイルをインストールするディレクトリ を指定します。 デフォルトでは`PREFIX/include`にインストール されます。
`--sysconfdir=SYSCONFDIR` | idnkitの設定ファイルをインストールするディレクトリを指定します。 デフォルトでは`PREFIX/etc`にインストールされます。
`--mandir=MANDIR` | マニュアルをインストールするベースディレクトリを指定します。 デフォルトでは`PREFIX/man`です。実際には さらにその下の`MANDIR/man1`や `MANDIR/man3`, `MANDIR/man5` にファイルがインストールされます。
`--datadir=DATADIR` | 異なるマシンで共有可能なファイルをインストールするディレクトリを指定 します。デフォルトは`PREFIX/share`です。 実際にはその下の`DATADIR/idnkit/map` にファイルがインストールされます。
`--enable-shared` | 共有ライブラリを作成します。デフォルトは有効 (`yes`) に なっています。
`--enable-static` | 静的ライブラリを作成します。デフォルトは有効 (`yes`) に なっています。

`configure`には他にもオプションがありますが、idnkitで使用する ことは滅多にないと思いますので、説明は省きます。

> `% ./configure --help`

でオプションの一覧を表示させることができます。

### `configure`に関係する環境変数

`configure`に関係する環境変数は、次の通りです。 これらについても、必要であれば指定して下さい。

環境変数 | 説明
--- | ---
`CC` | Cコンパイラのコマンド名を指定します。
`CPPFLAGS` | Cコンパイラに渡すプリプロセス (前処理) オプションを指定します。 たとえば、"`-I/usr/local/include`" を指定することで、 インクルードパスに`/usr/local/include`を加えるよう指示 します。
`CFLAGS` | Cコンパイラに渡すコンパイルオプションを指定します。たとえば GCCを使用しているのであれば、"`-O3`" を指定することで 最適化レベル3でコンパイルが行われるようになります。
`LDFLAGS` | Cコンパイラに渡すリンクオプションを指定します。たとえば GCCを使用しているのであれば、"`-L/usr/local/lib`" を指定する ことでライブラリのサーチパスに "`/usr/local/lib`" を加えるよう 指示します。
`PERL` | Perlのコマンド名を指定します。

csh系のシェルの場合、これらの環境変数をセットするには、

> `% setenv CFLAGS -O3`

のようにします。またsh系のシェルの場合には

>     % CFLAGS=-O3
>     % export CFLAGS

のようにします。

### コンパイル

`make`コマンドを実行して、ライブラリやコマンドを生成します。

> `% make`

### テスト

テストプログラムをコンパイルし、実行します。 この工程は、省略しても構いません。 テストムの実行には、Perlが必要です。 また、軽量版のライブラリのみをコンパイルした場合は、テストを行うこと はできません。(警告メッセージが表示され、全件が失敗します。)

> `% make check`

実行すると、次のような表示を含むメッセージが大量に出力されます。 「PASS:」「FAIL:」「SKIP:」と書かれた行が、テスト項目一件に相当し、 それぞれ成功、失敗、テスト省略を意味します。

>     PASS: checkname_0001.sh
>     PASS: checkname_0002.sh
>     PASS: checkname_0003.sh
>     PASS: checkname_0004.sh
>     PASS: checkname_0005.sh
>     ==================
>     All 5 tests passed
>     ==================

### ファイルのインストール

コンパイルが終了したら、実行ファイルなどのインストールを行います。 `sudo`コマンドを使う場合は、次のようにします。

> `% sudo make install`

`su`コマンドを用いる場合は、代わりに次のようにします。

> `% su
> # make install`

### 後片付け

`make`や`make test`によって生成されたファイルを idnkitのソースディレクトリから削除するには、`make clean`を 実行して下さい。 (`make install`の際にインストールされたファイルは、削除 されません。) この工程は、省略しても構いません。

> `# make clean`

`configure`で生成されたファイルも一緒に削除したいときは、 代わりに`make distclean`を実行します。

> `# make distclean`

`make distclean`を行えば、このソースディレクトリを使って、 前回とは異なるOS向けに`configure`の実行およびidnkitの コンパイルを行うことができるようになります。

## インストールされるファイルの一覧

`make install`によってインストールされるファイルは以下の 通りです。

### インストールされる実行ファイル

次の実行ファイルがインストールされます。

ファイル名 | 説明
--- | ---
`idnconv2` | `idnconv2`コマンド
`idnslookup2` | `idnslookup2`スクリプト
`idncmp` | `idncmp`コマンド
`idncheck` | `idncheck`コマンド

これらはデフォルトで`/usr/local/bin`にインストールされます。 インストール先を変えるには `configure`の`--bindir` オプションを使用します。 ただし軽量ライブラリのみをインストールした場合、これらはインストールされ ません。

### インストールされるマニュアル

以下のマニュアルがインストールされます。

ファイル名 | 説明
--- | ---
`idnconv2.1` | `idnconv2`コマンドのマニュアル
`idncmp.1` | `idncmp`コマンドのマニュアル
`idncheck.1` | `idncheck`コマンドのマニュアル
`libidnkit.3` | idnkitライブラリの概要を記したマニュアル
`libidnkitlite.3` | idnkitliteライブラリの概要を記したマニュアル (内容は`libidnkit.3`と同一)
`idn_checkname.3` | `idn_checkname()`関数のマニュアル
`idn_comparenames.3` | `idn_comparenames()`関数のマニュアル
`idn_comparenames2.3` | `idn_comparenames2()`関数のマニュアル (内容は`idn_comparenames.3`と同一)
`idn_decodename.3` | `idn_decodename()`関数のマニュアル
`idn_decodename2.3` | `idn_decodename2()`関数のマニュアル (内容は`idn_decodename.3`と同一)
`idn_encodename.3` | `idn_encodename()`関数のマニュアル
`idn_nameinit.3` | `idn_nameinit()`関数のマニュアル
`idn_result_tostring.3` | `idn_result_tostring()`関数のマニュアル
`idn_setlanguage.3` | `idn_setlanguage()`関数のマニュアル
`idn_setlocalcheckfile.3` | `idn_setlocalcheckfile()`関数のマニュアル
`idn_setlocalencoding.3` | `idn_setlocalencoding()`関数のマニュアル
`idn_version_getstring.3` | `idn_version_getstring()`関数のマニュアル
`idn_version_idnatable.3` | `idn_version_idnatable()`関数のマニュアル (内容は`idn_version_idnatable.3`と同一)
`idn_version_libidn.3` | `idn_version_libidn()`関数のマニュアル (内容は`idn_version_idnatable.3`と同一)
`idn_version_unicode.3` | `idn_version_unicode()`関数のマニュアル (内容は`idn_version_idnatable.3`と同一)
`idn2.conf.5` | 設定ファイル`idn2.conf`のマニュアル
`idn2rc.5` | 設定ファイル`.idn2rc`のマニュアル (内容は`idn2.conf.5`と同一)
`idnalias.conf.5` | 設定ファイル`idnalias.conf`のマニュアル
`idnlang.conf.5` | 設定ファイル`idnlang.conf`のマニュアル

デフォルトでは `/usr/local/man/man1`、 `/usr/local/man/man3`、 `/usr/local/man/man5` にそれぞれインストールされます。 インストール先を変えるには、`configure`の `--mandir`オプションを使用します。 ただし軽量ライブラリのみをインストールした場合、 `idnconv2.1`, `idncmp.1`, `idncheck.1`, `libidnkit.3`はインストールされません。

### インストールされる設定ファイル

以下の設定ファイルあるいはそのサンプルファイルがインストールされます。

ファイル名 | 説明
--- | ---
`idn2.conf.sample` | idnkitの設定ファイルidn2.confのサンプル
`idnalias.conf.sample` | エンコーディング別名定義ファイル `idnalias.conf`のサンプル
`idnlang.conf.sample` | 言語別名定義ファイル `idnlang.conf`のサンプル
`idn2.conf` | idnkitの設定ファイル (内容は`idn2.conf.sample`と同一)
`idnalias.conf` | エンコーディング別名定義ファイル (内容は`idnalias.conf.sample`と同一)
`idnlang.conf` | 言語別名定義ファイル (内容は`idnlang.conf.sample`と同一)

いずれも、デフォルトでは`/usr/local/etc`にインストールされます。 インストール先を変えるには、`configure`の `--sysconfdir`オプションを使用します。

ただし、サンプルファイルは常にインストールされますが、それ以外のファイル はシステム上に存在しない場合に限って、インストールされます。

### インストールされるライブラリ

以下のライブラリがインストールされます。

ファイル名 | 説明
--- | ---
`libidnkit.`拡張子 | idnconv2等のコマンドが使用しているidnkitの基本ライブラリ
`libidnkitlite.`拡張子 | `libidnkit`の軽量版

「拡張子」の部分は、システムに応じて様々な名前になります。 静的ライブラリと共有ライブラリの両方をインストールした場合は、少なくとも 2つのファイルがインストールされます。

いずれのライブラリもデフォルトでは`/usr/local/lib`に インストールされます。 インストール先を変えるには `configure`の`--libdirオプション` を使用します。 ただし軽量ライブラリのみをインストールした場合、 `libidnkit` 拡張子はインストールされません。

### インストールされるヘッダファイル

以下のヘッダファイルがインストールされます。

ファイル名 | 説明
--- | ---
`api.h` | apiモジュール (高レベルAPI) のヘッダファイル
`export.h` | WindowsのDLL生成支援用ヘッダファイル
`res.h` | resモジュール (低レベルAPI) のヘッダファイル
`resconf.h` | resconfモジュール (変換コンテキストAPI) のヘッダファイル |
`result.h` | resultモジュール (エラーコード定義) のヘッダファイル
`version.h` | versionモジュール (バージョン情報API) のヘッダファイル |

デフォルトでは`/usr/local/include`の下に`idn`という ディレクトリが作られ、その下にインストールされます。 インストール先を変えるには、`configure`の `--includedir`オプションを使用します。