試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Windows向けバイナリ差分取得/パッチ当てツールWinIPSのWine向け自動ダウンロード/ビルド/インストールスクリプトを更新(2012年3月末時点)

Windows向けバイナリ差分取得/パッチ当てツールWinIPSをWineでビルドして使用するための自動インストールスクリプト」で扱ったWinIPSのバージョンが0.66に上がっているので、以前作成した自動ダウンロード/ビルド/インストールスクリプトを更新したものを貼り付ける。

メモ

ソースへの変更点について
  • Wine 1.4
  • WinIPS 0.66
  • GCC 4.5.3

の時点では、基本的にビルドのエラーを発生させるような問題点はなく、動作上の大きな問題もない。しかし、「オプション」メニューの「常に手前に表示」の「表示」が「侮ヲ」になるのは変わっていないため、これに関する修正のみは入れている。

x86_64版ディストリで32bit向けのビルドを行うための指定

x86_64版ディストリではそのままではビルド段階でエラーが発生するが、ビルドのルールの書かれたファイルを生成するwinemakerの実行時に--wine32(「--win32」ではない)オプションを付けることで32bit(のWine)向けとしてビルドするようになり、その後(以前のスクリプトで行っていたように)CFLAGSを指定したりする必要はない。

$ winemaker --wine32 winips.dsp
Winemaker 0.8.1
(中略)
Fixing the source files...
  ./ini.c
  ./ips.c
  ./ipslib.c
  ./myfunc.c
  ./winips.c
  ./resource.rc
  ./ini.h
  ./ips.h
  ./ipslib.h
  ./myfunc.h
  ./resource.h
  ./resrc1.h
  ./strres.h
  ./winips.h
Generating project files..

$ make [オプション...]
(正常にビルドが行われる)

スクリプト

[任意]ファイル名: wine-winips-install.sh ライセンス: LGPL-2 (or lator)

#! /bin/sh

# download/patch/build/install script for WinIPS 0.66
# version 20120331
# (C) 2010-2012 kakurasan
# Licensed under LGPLv2+
#
# Requirements:
#  * Wine (development files)
#  * wget or curl
#  * unzip
#  * desktop-file-utils

URL=smblabo.web.fc2.com/files/src/wi066src.zip

TEMPDIR=$(mktemp --tmpdir -d install_winips.XXXXXXXX)
if [ ${?} -ne 0 ]; then
  echo "cannot create tempdir"
  exit 1
fi
cd ${TEMPDIR}

export WINEPREFIX="${WINEPREFIX:-${HOME}/.wine-winips}"
APPDIR="${WINEPREFIX}"/dosdevices/c:/"Program Files"/winips
APPDIR_DOS="$(winepath -w "${APPDIR}" | sed 's:\\:\\\\:g')"

# fetch
if ! wget ${URL}; then
  if ! curl ${URL}; then
    exit 1
  fi
fi
echo "a7294ba0de3235601f3814de1d8a160b  wi066src.zip" | md5sum -c || exit 1

# extract
unzip $(basename ${URL}) || exit 1

# fix japanese text
cat <<EOF | base64 -d | zcat | patch -p1
H4sIABKtdk8CA0vJTEtT0C0tUijPzMssKNY10DMz08svykzXL0otzi8tSk7VK0pGlkQW59LV1cWr
kUtbWxunZgcHBV1DE1MdcwVtCOXgwKUAAq5+LrwQVoB/QGiAgtLWM/f3rLuroRagqQSVcHJ19/Tj
5dJVgAJfV79QzxBXXwWl/rdNJ/teTPRvOjk1pm+ZhlqIppKOAhx4uvjG+weEePr7xTv6hDtGBvv7
hfgH8HJp4zeIBJOw++DszTP3NdQ80N0PAJTVEFx+AQAA
EOF

# build info
winemaker --wine32 winips.dsp || exit 1

# build
make -j $(egrep -c "^processor\s:\s[0-9]+$" /proc/cpuinfo) || exit 1

# set PATH / create wine prefix
cat <<EOF > path.reg || exit 1
REGEDIT4

[HKEY_CURRENT_USER\Environment]
"PATH"="${APPDIR_DOS}"
EOF
regedit path.reg || exit 1

# install
mkdir -p "${APPDIR}" || exit 1
strip winips.exe.so || exit 1
cp winips.exe.so "${APPDIR}" || exit 1
cp -a *.txt appicon.ico "${APPDIR}" || exit 1

# .desktop
mkdir -p ~/.local/share/applications/wine/Programs/ || exit 1
cat <<EOF > ~/.local/share/applications/wine/Programs/winips.desktop || exit 1
[Desktop Entry]
Name=WinIPS
Comment=Binary diff/patch utility
Exec=env WINEPREFIX="${WINEPREFIX}" wine winips.exe.so
Type=Application
StartupWMClass=Wine
Path=${APPDIR}
Icon=${APPDIR}/appicon.ico
EOF
update-desktop-database ~/.local/share/applications || exit 1

# cleanup
cd ..
rm ${TEMPDIR} -fr

以前のときにも書いたが、アンインストールする場合は

  1. Wine環境の[ホームディレクトリ]/.wine-winips/以下を消す
  2. [ホームディレクトリ]/.local/share/applications/wine/Programs/winips.desktopを消す
  3. コマンド「update-desktop-database ~/.local/share/applications」を実行

の流れで作業を行う。

関連記事:

使用したバージョン:

  • Wine 1.4
  • WinIPS 0.66
  • GCC 4.5.3