Mandriva Linux 2009.0に含まれるunzipコマンドのCP932対応について
Mandriva Linuxに「unzip」パッケージとして用意されているunzipコマンドは、Zip書庫内にあるCP932エンコーディングの複数バイトファイル名に対応しておらず、展開時に化けてしまう。
そこで、Ubuntu Japanese Teamの同パッケージに含まれるパッチ01_japanese_charset.dpatch*1を使用してCP932に対応できるよう.specファイルを修正した。
--- unzip-5.52-6mdv2009.0.orig/SPECS/unzip.spec +++ unzip-5.52-6mdv2009.0/SPECS/unzip.spec @@ -3,11 +3,17 @@ %define release %mkrel 6 %define src_ver %(echo %version|sed "s/\\.//"g) +%define build_jp 0 +%{?_with_jp: %global build_jp 1} + Summary: Unpacks ZIP files such as those made by pkzip under DOS Name: %{name} Version: %{version} Release: %{release} Source0: http://ftp.info-zip.org/pub/infozip/src/%{name}%{src_ver}.tar.bz2 +%if %{build_jp} +Patch0: 01_japanese_charset.dpatch +%endif Patch1: unzip542-size-64bit.patch Patch2: unzip-5.52-CAN-2005-2475.patch Patch3: unzip-5.52-CVE-2005-4667.patch @@ -29,6 +35,9 @@ %prep %setup -q +%if %{build_jp} +%patch0 -p1 -b .japanese +%endif %patch1 -p0 %patch2 -p1 -b .can-2005-2475 %patch3 -p1 -b .cve-2005-4667 @@ -37,10 +46,18 @@ %build %ifarch %{ix86} #gw FIXME: do we still need to disable LZW? +%if %{build_jp} +%make -ef unix/Makefile linux CF="-DLZW_CLEAN -D_MBCS %{optflags} -D_FILE_OFFSET_BITS=64 -Wall -I. -DASM_CRC" CC=gcc LD=gcc AS=gcc AF="-Di386" CRC32=crc_gcc +%else %make -ef unix/Makefile linux CF="-DLZW_CLEAN %{optflags} -D_FILE_OFFSET_BITS=64 -Wall -I. -DASM_CRC" CC=gcc LD=gcc AS=gcc AF="-Di386" CRC32=crc_gcc +%endif +%else +%if %{build_jp} +%make -ef unix/Makefile linux_noasm CF="-DLZW_CLEAN -D_MBCS %{optflags} -D_FILE_OFFSET_BITS=64 -Wall -I." %else %make -ef unix/Makefile linux_noasm CF="-DLZW_CLEAN %{optflags} -D_FILE_OFFSET_BITS=64 -Wall -I." %endif +%endif %install [ "%{buildroot}" != "/" ] && rm -rf %{buildroot}
rpmbuildのビルド時に-D '_with_jp 1'オプションを付けたときに限りパッチが使用される。
RPMの.specファイルでは、上の修正のように
%define [マクロ名] [既定値] %{?[-Dオプションで指定する名前]: %global [マクロ名] [オプション指定時の値]} ... %if %{[マクロ名]} ... %else ... %endif
という記述をすることで、GentooのUSEフラグに近い感覚で、ビルド時に機能の有効/無効などが指定できるようになっている。
(2009/1/6)ビルド処理の中に誤りがあり、正常に動作していないことが分かったため、上の差分とSkyDriveのパッケージを修正した。
この修正をしたソースRPMと、CP932対応を有効にしてビルドしたx86_64向けパッケージを別館から入手できるようにした。
(2008/12/11)i586版を追加した。
なお、CP932の複数バイトファイル名を含むZip書庫をGUIで作成/展開したい場合はWineでWin32版の7-Zip File Managerなどの圧縮/展開ツールを使用するのが便利。
(2014/10/4)配布ページは削除済み。
関連: Gentoo LinuxでのunzipとCP932
(2008/11/18)以前Gentoo Linuxを使用していたときには、同パッチを使用してビルドするためebuild.gentoo.gr.jp/view.php?cat=app-arch&app=unzip
のebuildとパッチを使用していた。
ebuildの配置・使用方法などは「Gentoo Linuxにおけるパッケージ管理について(Overlay)」(ローカルOverlayについて)を参照。
使用したバージョン:
- unzip 5.52-6mdv2009.0
*1:http://archive.ubuntulinux.jp/ubuntu-ja/intrepid-ja/ のunzip_5.52-11ubuntu1.1ja1.diff.gzから抽出