w3mのリコンパイル

背景

といってもコードを書く訳ではなく、本家に取り込まれていないパッチをマージして当てたい、という要件

arakiken さんのこのページのパッチfedora23のsrpm由来の最新のw3mのコードに当てたい。 意図としては『sixel対応のw3mを最新の状態で使いたい』

作業

下記の順番で作業を行った

  • arakiken / w3m / コミット Bitbucketを私のアカウントにフォークする
  • フォークする際の理由は「hgコマンドに慣れてなくて怖いのでフォーク」とした…
  • フォークした自分のレポジトリからクローンを作成
  • 差分を取り出す
    • hg diff -r 0:29 ./ > ../arakiken.path これは、この時のリビジョンが29だった。つまりイニシャルコミットから最新までの差分、を出力しようとしている

下記のようにパッチを当てた

  • 作業ディレクトリ : /usr2/home/example-user/tmp/w3m/w3m_arakiken
  • パッチファイルの場所 : /usr2/home/example-user/tmp/w3m/w3m_arakiken/arakiken.path 先を実行した
tar xvzf /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.3.tar.gz
cd /usr2/home/example-user/tmp/w3m/w3m_arakiken/w3m-0.5.3
patch -p1 < ../arakiken.path

srpm由来のtar.gzを差し替える(差し替え後、うまく行かない場合、srpmの削除、インストールからやり直し)

cp w3m-0.5.3.tar.gz /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.3.tar.gz

ビルドする

rpmbuild -bb ~/rpmbuild/SPECS/w3m.spec

独自パッチを当てるとSRPM由来の Patch3 が通らなくなる。

Patch #3 (w3m-0.5.2-glibc2.14-fix_file_handle_error.patch):
+ /bin/cat /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.2-glibc2.14-fix_file_handle_error.patch
+ /usr/bin/patch -p1 --fuzz=0
patching file istream.c
Hunk #1 FAILED at 22.
Hunk #2 FAILED at 114.
Hunk #3 FAILED at 658.
3 out of 3 hunks FAILED -- saving rejects to file istream.c.rej
patching file istream.h
Hunk #1 FAILED at 20.
Hunk #2 FAILED at 53.
2 out of 2 hunks FAILED -- saving rejects to file istream.h.rej
エラー: /var/tmp/rpm-tmp.SUBizt の不正な終了ステータス (%prep)

今度は『srpmパッチを当て終わった段階』からパッチを当ててみよう

# To SPEC
# * build_options  に  --with-migemo --disable-mouse 追加は変わらない
# * # BuildRequires:  gdk-pixbuf2-xlib-devel CentOS6, fedora22以前(22を含む)では、この箇所をコメ>ントアウト
#
# * コンパイルエラーがでるパッチを削除 GC_get_warn_proc()
#  + # Patch0:  %{name}-rh555467_FTBFS.patch をコメントアウト
#  + # %patch0 -p0 をコメントアウト

$ rpm -ivh ../w3m-0.5.3-22.fc23.src.rpm
$ tar xvzf /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.3.tar.gz
$ cd w3m-0.5.3
$ patch -p0 < /usr2/home/example-user/rpmbuild/SOURCES/w3m-rh566101_Fix-DSO-X11.patch
$ patch -p1 < /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.2-ssl_verify_server_on.patch
$ patch -p1 < /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.2-glibc2.14-fix_file_handle_error.patch
$ patch -p0 < /usr2/home/example-user/rpmbuild/SOURCES/w3m-rh707994-fix-https-segfault.patch
$ patch -p1 < /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.3-parallel-make.patch
$ patch -p1 < /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.3-format-security.patch
$ patch -p1 < /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.3-FTBFS-sys-errlist.patch
$ patch -p1 < ../arakiken.path
$ cd ..
$ tar cvzf w3m-0.5.3.tar.gz ./w3m-0.5.3/
$ mv w3m-0.5.3.tar.gz /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.3.tar.gz
$ vi /usr2/chef-home/site-cookbooks/w3m/recipes/default.rb
$ vi /usr2/home/example-user/rpmbuild/SPECS/w3m.spec
$ rpmbuild -bb ~/rpmbuild/SPECS/w3m.spec

Fedoraの場合のメモ

依存関係があるので、必要なパッケージは事前にインストールしておく

fedora17で

yum -y install gcc-c++ perl-NKF bzip2 findutils sed ncurses-devel openssl-devel pkgconfig gettext-devel automake gtk2-devel gpm-devel gc-devel nkf lynx rpm-build ImageMagick

ダウンロード

yumdownloader --enablerepo=fedora-source --source w3m && rpm -ihv w3m-* && vi ~/rpmbuild/SPECS/w3m.spec

上記の*.specファイルにはコンパイルオプションも記載されている。

--with-migemo  --disable-mouse

を追加

リコンパイル

rpmbuild -bb ~/rpmbuild/SPECS/w3m.spec

既存パッケージのアンインストール

sudo yum remove w3m w3m-img && rpm -qa |grep w3m

リコンパイルしたパッケージのインストール

sudo rpm -i ~/rpmbuild/RPMS/i*/w3m-* && sudo rpm -i ~/rpmbuild/RPMS/i*/w3m-img-*

確認

rpm -qa |grep w3m

独自パッチを取り込む ( コンパイル処理などは rpmbuild用のspecファイルを流用したい、という方法 )

ソースダウンロード( sixelフォーマットへの対応が含まれたソース )

hg clone https://example_user@bitbucket.org/example_user/w3m