= Spec の文字コードについて = VineSeed (5.0) からシステムデフォルトの文字コードが EUC-JP から UTF-8 に変更になっています。[[br]] このため、Seed と Plus/4.0 向けに同じアプリケーションのパッケージを put する場合、従来であれば release +1 してリビルドするだけ問題ありませんでしたが、文字コードの変更により、単にリビルドしただけでは spec に書かれた日本語のタイトルや説明が文字化けを起こしてしまいます。[[br]] 対応策について Seed ML で議論した結果、以下の方針で対応することが決まりました。 * Vine Plus/4.0 向けの spec は '''EUC-JP''' で記述する * Vine Seed (5.0) 向けの spec は '''UTF-8''' で記述する * 同一のアプリケーションを Plus 4.0/Seed の双方に put する場合は、それぞれの文字コードに合わせて '''spec ファイルの文字コードを変換'''した上で、パッケージを作成する このため、今後 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 付きで保存されています) 注意点としては、 * src.rpm の rebuild には対応できていません[[br]]もし rebuild が必要な場合は、一旦 rpm -U hoge.src.rpm してから rpm -bb hoge.spec してください。 * %prep も %install もしないパッケージはチェックできません[[br]]まれに %prep も %install もしないパッケージがありますが、この場合は上記マクロを入れていてもチェックできないので、注意が必要です。 があります。