wiki:SpecCharCode

Version 25 (modified by inagaki, 15 years ago) (diff)

--

Spec の文字コードについて

VineSeed (5.0) からシステムデフォルトの文字コードが EUC-JP から UTF-8 に変更になっています。
このため、Seed と Plus/4.0 向けに同じアプリケーションのパッケージを put する場合、従来であれば release +1 してリビルドするだけ問題ありませんでしたが、文字コードの変更により、単にリビルドしただけでは spec に書かれた日本語のタイトルや説明が文字化けを起こしてしまいます。

対応策について 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 には対応できていません
    もし rebuild が必要な場合は、一旦 rpm -U hoge.src.rpm してから rpm -bb hoge.spec してください。
  • %prep も %install もしないパッケージはチェックできません
    まれに %prep も %install もしないパッケージがありますが、この場合は上記マクロを入れていてもチェックできないので、注意が必要です。

があります。

VineSeed上でSPECファイルのUTF-8移行が済んでいないパッケージ

手をつける前に『build予約』欄に名前を書き込み、パッケージのputが完了しましたら『完了』欄に○を書き込んでください。

  • main
パッケージbuild予約完了
dumpkazutaka
gslinagaki
gtksourceviewinagaki
libjconvinagaki
libwnn6
namazu_VineDocsdb
powerpc-utils
procmailinagaki
ttmkfdirinagaki
xorg-x11-xbitmapsinagaki
  • plus
パッケージbuild予約完了
AfterStep?
HelixPlayer?
ORBitinagaki
Omni不要 (削除済)
Plotmtv
SDL_perl
TiMidity?++4ALSA
TrueType?-base
TrueType?-kochi-subst
VFlib
adjtimex
am-utils
aptitude
arpwatch
autofs-ldap不要(削除済)
bdflush
blackbox
blender
bmon
bridge-utils
cabextract
clearsilver
cvsweb
db1
db2
db3
db40
dbus-qt3不要 (削除済)
dhid
dhisd
dvdrtools
ebview
fnlib
freepats
ftpmirror
ftpup
gal
gambas
gcc295不要 (削除済)
gimageview
gimp-gap
glut不要 (削除済)
gnome-core
gnome-spell
gnome-user-share
gnome-vcustom
gogo不要 (削除済)
google-perftools
gpdf
gpr
gpspoint
gqview
grandr_applet
gt
gtkhtml2
gtop
hp2xx
ical
imms
inetd
isapnptools
iscan
jdkgcj
jfbterm
kazehakase不要 (削除済)
kcc
keychain
kinput2
leditinagaki
libbtctl
libexif-gtk
libgal2
libglademm2inagaki
libgnomeprint20
libid3taginagaki
libksba
libppd
libsoup22
libunicode
libwpdinagaki
lilypond
mc
memcachedtomop
mergeant
mh
mkbootdisk
mkxauth不要
mnews
monafont
monotone
moodbar
mozplugger
mutt
neon26不要(削除済)
netcfg
newpg
nss_db
open
openh323
pbzip2
pdflib
perl-Archive-Tar不要(削除済)
perl-ExtUtils?-CBuilder
perl-GDGraphinagaki
perl-Jcode
perl-Module-Build不要 (削除済)
php不要 (削除済)
plan
plugger
pvm
rdic
rdtool
ruby-amstd
ruby-intl
ruby-mecab
ruby-uconv
ruby-vtk
sawfish
secondlife
slinagaki
slang1
smartmontools
smpeg-xmms
smtpfeed
spamassassintomop
stoneiwamoto
t-gnus
task-mozilla
task-ruby
task-skk
task-texmacro-info
task-texmacro-phys
texmacro-aps
trafshow
transfig
tripwire
ttyrec
tuxtype
tvtime
uim
uim-tomoe-gtk
usbmgr
usernet
uucp
wine-docs
wishx_transition
wmapm
wx-gtk2
x-face
xawtv
xemacs
xephem
xfce4-battery-plugin
xgraph11
xlogical
xpbiff