2009年3月18日水曜日

wineビルドスクリプト「mkwine.sh」

私はできるだけパッケージ管理ツールを使うように心がけているのだが、wineだけはいつもコンパイルしている。というのも、
  • 開発が早いため、あるソフトを動かすためにはバージョンx.y.zが必要、ということが間々ある
  • 自作や拾い物のパッチを当てたい
  • 何か一つくらいソースコードいじったりしているといざと言うときに自慢できる
  • そもそも、Wineの開発を追うのが趣味
といった事情があるからだ。しかし、バージョンアップのたびにいつも同じような作業をするのは面倒極まりない。そこでスクリプトを書いて便利に使っていたのだが、今回大幅に機能強化し、多少は汎用性が上がったと思うので、公開してみる。

#! /bin/sh
CONFIGURE_OPTS=""

while getopts c:ip OPT
do
case $OPT in
"c" ) CONFIGURE_OPTS=$OPTARG ;;
"i" ) INSTALL="true" ;;
"p" ) PATCH="true" ;;
esac
done

shift $(($OPTIND - 1))

WINEVER=$1
DOWNLOAD_TMP="/tmp/wine-"$WINEVER".tar.bz2"

abort () {
echo $1
exit 1
}

if [ -e "wine-"$WINEVER ]
then
echo "Already wine-"$WINEVER" is exist. Compile start."
cd wine-$WINEVER || abort "error: move current directory to latest wine"
else
if [ -e $DOWNLOAD_TMP ]
then
echo "Already "$DOWNLOAD_TMP" is exist. Melt start."
else
echo "wine-"$WINEVER" isn't exist. Download start."
wget http://jaist.dl.sourceforge.net/sourceforge/wine/wine-$WINEVER.tar.bz2 -O $DOWNLOAD_TMP || abort "error: file download"
fi
echo "Start melt "$DOWNLOAD_TMP
tar jxf $DOWNLOAD_TMP || abort "error: decompress"
rm $DOWNLOAD_TMP
cd wine-$WINEVER || abort "error: move current directory to latest wine"
if [ $PATCH = 1 ]
then
for i in ../*.patch
do
patch -p 1 -R < $i || abort "error: patch " $i
done
fi
fi
./configure $CONFIGURE_OPTS || abort "error: executing ./configure $CONFIGURE_OPTS"
make depend || abort "error: make depend"
nice -n 19 make CC="ccache gcc" CXX="ccache g++" || abort "error: compiling"
echo "no errors, success to compile."
if [ $INSTALL = 1 ]
then
sudo make install || abort "install missing"
else
echo "please \`make install' for root to install wine for your system."
fi

(あまりシェルスクリプトは慣れていないので変な書き方になっているかもしれない)
例えばこれを書いている時点での最新版(1.1.17)をインストールしたいなら、
$ mkwine.sh 1.1.17
と実行すれば、
  1. wineの公式サイトから/tmp以下にwine-1.1.17.tar.bz2がダウンロードされ、
  2. カレントディレクトリに解凍、
  3. -pが指定されていればカレントディレクトリに置いてあるパッチを当てる
  4. ./configure; make depend; makeを実行
  5. -iが指定されていればmake installする
という、一通りの作業を自動化できる。最初はバージョンくらいしか指定できなかったのだが、だんだんパッチを当てるようになったりして大きくなってきた。パッチにバージョン番号を書いておいて当てる必要があるパッチを自動判別するとか、自動的に最新版を落としてくるとか。

# もうあったりして・・・?

0 件のコメント:

コメントを投稿