| Version 2 (modified by kazutaka, 18 years ago) (diff) |
|---|
VineSeed (5.0) からシステムデフォルトの文字コードが EUC-JP から UTF-8 に変更になっています。
このため、Seed と Plus/4.0 向けに同じアプリケーションのパッケージを put する場合、従来であれば release +1 してリビルドするだけ問題ありませんでしたが、文字コードの変更により、単にリビルドしただけでは spec に書かれた日本語のタイトルや説明が文字化けを起こしてしまいます。
対応策について Seed ML で議論した結果、以下の方針で対応することが決まりました。
このため、今後 Seed と Plus/4.0 に同じアプリケーションを put する人は、毎回文字コードのチェックや変換を行う必要があります。
ただし、これを毎回手作業で行うのは大変なので、rpm のマクロを定義することでこの作業を簡略化する方法が提案されています。
以下のマクロを ~/.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 付きで保存されています)
注意点としては、
があります。