2012年10月25日

libiconv-1.14にlibiconv-1.13用のパッチを適用してみました

libiconv-1.14にlibiconv-1.13用のパッチを適用してみました。
説明が不要な方は、【パッチの適用手順】からどうぞ。


libiconv-1.13.1には、こちらの「libiconv パッチ集」日本語エンコーディング全般の一括パッチ
http://www2d.biglobe.ne.jp/~msyk/software/libiconv-patch.html
libiconv-1.13-ja-1.patch.gz
を使わせていただいています。

libiconv-1.14がリリースされてからだいぶ経ちましたが、こちらのページでは、パッチは更新されていません。

検索すると、libiconv-1.14用のパッチは、現在こちらのものを利用されている方が多いようです。
libiconv-1.14 日本語パッチ
http://apolloron.org/software/libiconv-1.14-ja/


上記の参考リンクより、
Adding libiconv Support for the IMAP Variant of UTF-7
http://weldon.whipple.org/sendmail/utf7imap/

この手順でやってみたのですが、libiconvに同封されているgenaliasesとgenaliases2というコマンドが、Windows上では正常に動作しませんでした。

どうしたものかと思ってlibiconvのGit Repositoryを見たら、2012/07/01付で修正されていました。

Make it possible to run 'genaliases' on native Windows.
http://git.savannah.gnu.org/cgit/libiconv.git/commit/?id=1f574c8a69e51e4d36698e803be6e510c9d45637

Make it possible to run 'genaliases2' on native Windows.
http://git.savannah.gnu.org/cgit/libiconv.git/commit/?id=5977e1b0c6e2c9ad9fa019698ff28dc11ef6d076



【パッチの適用手順】
libiconvにパッチを適用する前に、gperfGroffをインストールしておいてください。

autoconf-2.68、automake-1.11 も必要です。

libiconv-1.14のソースコードと、libiconv-1.13のパッチは、それぞれ以下の場所からダウンロードします。

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

libiconv-1.13-ja-1.patch.gz
http://www2d.biglobe.ne.jp/~msyk/software/libiconv-1.13-ja-patch.html

libiconvのGit Repositoryから、genaliasesとgenaliases2のWindows用パッチをまとめた物を置いておきます。
ChangeLogの修正は入っていません。
libiconv-1.14-genaliases-win.diff


MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xzf libiconv-1.14.tar.gz
$ cd libiconv-1.14

libiconv-1.14に、パッチを適用します。
$ patch -p1 < ../libiconv-1.14-genaliases-win.diff
$ gzip -dc ../libiconv-1.13-ja-1.patch.gz | patch -p1

lib/aliases*.h、lib/canonical*.h などがFAILEDになりますが、再生成するので気にしなくて良いです。

ついでに、UTF-7-IMAPも追加する場合は、以下のページを参照して修正してください。
Adding libiconv Support for the IMAP Variant of UTF-7
http://weldon.whipple.org/sendmail/utf7imap/

パッチを適用したら、以下のコマンドを実行します。
$ make -f Makefile.devel

lib/aliases*.h、lib/canonical*.h、lib/flags.h、man/iconv_open.3.html
などが更新されていればOKです。

あとは、以下の手順でコンパイル&インストールします。
$ ./configure --prefix=/mingw --disable-shared --enable-static
$ make
$ make install

以上で終了です。



【まとめ】
かなりめんどうですが、やり方さえ分かれば、今後libiconvが更新されても自前でパッチを適用できますね。

せっかくなので、
・genaliasesとgenaliases2のWindows用パッチ
・libiconv-1.13-ja-1.patch
・Adding libiconv Support for the IMAP Variant of UTF-7
・NEWS、README、man/iconv_open.3 にUTF-7-IMAPの記述を追加
を、libiconv-1.14用にまとめたパッチを置いておきます。
libiconv-1.14-ja-1.patch.gz

libiconv-1.14のソースコードに、
$ gzip -dc ../libiconv-1.14-ja-1.patch.gz | patch -p1
だけでOKです。

このパッチは「make -f Makefile.devel」も実行済みのものですので、あとは、以下の手順でコンパイル&インストールします。
$ ./configure --prefix=/mingw --disable-shared --enable-static
$ make
$ make install


この一括パッチを作成するときに、gperfで生成したファイルの改行コードがCRLFになっていて、元のソースコードとdiffを取ると全部違ってしまうので、dos2unixでLFに修正しています。
dos2unixは、msysgitなどに入っています。

dos2unix lib/aliases.h
dos2unix lib/aliases.gperf
dos2unix lib/aliases_*.h
dos2unix lib/aliases_*.gperf
dos2unix lib/canonical_aix.h
dos2unix lib/canonical_aix_sysaix.h
dos2unix lib/canonical_osf1.h
dos2unix lib/canonical_osf1_sysosf1.h
dos2unix lib/canonical_dos.h
dos2unix lib/canonical_extra.h
dos2unix lib/flags.h
dos2unix man/iconv_open.3.html

dos2unixは、CRLFをLFに、LFをCRLFに交互に変換するので、余計なファイルまでCRLFに変換しないように注意してくださいね。

「make -f Makefile.devel」した後、自分の環境で使うだけなら、改行コードは修正しなくても良いです。


パッチを作成するにあたって、以下のページを参考にさせていただきました。
ありがとうございました。

libiconv パッチ集
libiconv-1.14 日本語パッチ
Adding libiconv Support for the IMAP Variant of UTF-7
posted by あべちん at 22:00 | Comment(0) | TrackBack(0) | GCC追加ライブラリ
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/59524109
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック