Version 1 (modified by kazutaka, 16 years ago) (diff) |
---|
VineSeed (5.0) からシステムデフォルトの文字コードが EUC-JP から UTF-8 に変更になっています。
このため、Seed と Plus/4.0 向けに同じアプリケーションのパッケージを put する場合、従来であれば release +1 してリビルドするだけ問題ありませんでしたが、文字コードの変更により、単にリビルドしただけでは spec に書かれた日本語のタイトルや説明が文字化けを起こしていまいます。
対応策について Seed ML で議論した結果、以下の方針で対応することとしました。
ただし、毎回手作業で文字コードをチェックしたり変換したりするのは大変なので、以下のマクロを ~/.rpmmacros に記述しておくことで、文字コードのチェックと変換を自動的に行えます。
%__spec_prep_pre %{__check_speccharcode}\ %{___build_pre} %__spec_install_pre %{__check_speccharcode}\ %{___build_pre} %__check_speccharcode \ SPEC_FILE=$(ps -p $PPID -o args | awk '{for (i=1;i<=NF;i++) { if ($i ~ /\.spec/) print $i}}')\ CHAR_CODE=$(nkf -g $SPEC_FILE | cut -d" " -f1)\ if [ "$CHAR_CODE" != 'ASCII' -a $CHAR_CODE != "$(locale charmap)" ] ; then\ NKF_OPT=$(echo "$(locale charmap)" | sed "s/UTF-8/-w/" | sed "s/EUC-JP/-e/")\ mv %{_specdir}/$SPEC_FILE %{_specdir}/$SPEC_FILE.$CHAR_CODE\ nkf "$NKF_OPT" %{_specdir}/$SPEC_FILE.$CHAR_CODE > %{_specdir}/$SPEC_FILE\ echo "ERROR: Current locale and character code of spec file is not same."\ echo " Spec file is already converted. Just re-run the command again."\ exit 1\ fi\
このマクロを記述した状態で、例えば UTF-8 な Seed 環境で EUC-JP で書かれた spec を元にパッケージを作成しようとすると、以下のようにエラーになります。
$ rpm -bp hoge.spec 実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.9337 ERROR: Current locale and character code of spec file is not same. Spec file is already converted. Just re-run the command again. エラー: /var/tmp/rpm-tmp.9337 の不正な終了ステータス (%prep) RPM ビルドエラー: /var/tmp/rpm-tmp.9337 の不正な終了ステータス (%prep)
この状態で既に spec ファイルの文字コードは UTF-8 に変換されているので、同じコマンドを再度実行するだけで、作業を続けられます。(元のファイルもファイル名の末尾に .EUC-JP 付きで保存されています)
注意点としては、
があります。