Akira's Commentary


What is libiconv

FreeBSDなどには、汎用の文字コードの変換ライブラリとして 'iconv'というライブラリがあります。 これは、複数の文字コードセット、文字コードエンコーディング間の 変換を行なうものです。 Unicode系の文字エンコーディングのUTF-8とかUTF-16を 取り扱うには必須ともいえるものでしょう。

OS/2上で'iconv'ライブラリが必要になったので、 LGPLでリリースされている Bruno Haible氏の 'libiconv'を OS/2に移植しました (2)。 現在のバージョンでサポートされている 文字セット、エンコーディングについては こちらの表をご覧ください。

移植

移植といっても、ソース自体は何も変更はありません。 元のパッケージでは、configureで構成するものでしたが、 Windows用のMakefile、ヘッダが含まれていましたので、 それらを元に手作業でOS/2用のMakefile、ヘッダファイルを 作成しただけです。

パッケージにはテストプログラムが付属しています。 これについてもWindows用のBATファイルがありましたので、 それらを元にOS/2用のCMDファイルを作成しました。

追加したファイルは以下の通りで、 アーカイブにまとめてあります。

FILES.os2ファイル一覧
README.os2OS/2版の説明
Makefile.os2OS/2用のMakefiles
src/Makefile.os2
man/Makefile.os2
tests/Makefile.os2
include/iconv.h.os2pre-configured include files
src/config.h.os2
src/iconv.def.os2OS/2 DLL用のモジュール定義ファイル
tests/check-stateful.cmdOS/2用のテストスクリプト
tests/check-stateless.cmd
tests/check-translit.cmd

ビルド

提供しているMakefile.os2でmakeするには、 EMX/GCC (0.9d, fix03)とGNUユーティリティの "cp"、"rm"、"diff"、"cat"、"uniq" が必要です。 トップディレクトリから再帰makeをかけるには、Xfree86/2の x11make.exe make.cmd, indir.cmdが必要です。 個別ディレクトリでmakeするなら、通常のGNU makeだけで充分です。

最初に、 Bruno Haible氏の ところから、 'libiconv' を入手し、適当なディレクトリに展開します (2)。 そのディレクトリで上の アーカイブを展開してください。 追加ファイルだけですので、 既存のファイルを書き換えたりすることはありません。

OS/2版のライブラリを作成するには、 トップディレクトリ、またはsrcディレクトリで

make -f Makefile.os2 all

を実行します。

テストを実行する場合には、 トップディレクトリ、またはtestsディレクトリで

make -f Makefile.os2 check

を実行します。

出来上がったライブラリを(EMX環境に)インストールするには、

make -f Makefile.os2 install instroot="X:\emx"

とします。あるいは、手作業で、

includeディレクトリで
cp iconv.h X:\emx\include
srcディレクトリで
cp iconv.dll X:\emx\dll
cp iconv.a X:\emx\lib
cp iconv.lib X:\emx\lib
manディレクトリで
cp iconv.3 iconv_close.3 iconv_open.3 X:\emx\man\man3

としてください。

DLLは、"-Zmt -Zcrtdll"で作成しています。 ですから、libiconvを使うには、メインプログラム側も "-Zmt -Zcrtdll"オプション(省略形は -Zmtd)を付けて 作成されている必要があります。 他のオプションで作成したい方は、Makefile.os2を書き換えてください。

libiconvを使ったプログラムを開発する場合には、 メインプログラム側で、"iconv.h"をインルードする必要があります。 ライブラリは、.a、.libの両方を用意していますので、 オブジェクト形式に合わせてご利用ください。

バイナリ

makeが面倒な人向けに、 作成したバイナリ もおいておきます。 ヘッダ、インポートライブラリ、DLLが含まれています。