How to install bluefish-2001-10-30.tar.bz2
2001.11.03
ftp://ftp.ratisbona.com/pub/bluefish/snapshots/
bluefish-2001-10-30.tar.bz2

いつまで待っても bluefish の新しいバージョンが出てこない。
ホームページを見ていたらスナップショットが存在。 それもついこの間の10月30日分。
時間潰し + rpm の練習で入れてみる事にした。




Preparation
$ mv bluefish-2001-10-30.tar.bz2 ~/rpm/SOURCES/

$ cd ~/rpm/BUILD/
$ tar xzvf ../SOURCES/bluefish-2001-10-30.tar.bz2
Created ~/rpm/BUILD/bluefish/
( x option で何で bz2 が展開出来たんだ?)

$ cd ~/rpm/BUILD/
$ cp -dpR bluefish bluefish.org

$ cd ~/rpm/BUILD/bluefish/

Test configure
$ vi c.t > #!/bin/sh
> ./configure --prefix=/usr --sysconfdir=/etc
/usr/local/ は使わない事にした。
src.rpm を作ろう より。

$ chmod +x c.t
$ ./c.t >& c.t.log
No error

Test make
$ make >& make.log
maybe no error
Check InstallDir of Makefile
> prefix = /usr
> exec_prefix = ${prefix}
> bindir = ${exec_prefix}/bin
> datadir = ${prefix}/share
> pkgdatadir = ${prefix}/share/bluefish
> pixmapsdir = /usr/share/pixmaps

Test install
$ make prefix=/var/tmp/bluefish-root/usr -n install &> make-intall.log
/var/tmp/bluefish/usr 以下に入る様になっているか make-install.log を確認。

インストールディレクトリが全て /var/tmp/usr/ 以下になっていた。
実際に /var/tmp/usr/ にインストール

Virtual install
$ mkdir /var/tmp/bluefish-root/
$ make prefix=/var/tmp/bluefish-root/usr >& make-install-v.log
> make[1]: 入ります ディレクトリ `/home/jun1/rpm/BUILD/bluefish/intl'
> make[1]: `all' に対して行うべき事はありません。
> make[1]: 出ます ディレクトリ `/home/jun1/rpm/BUILD/bluefish/intl'
> make[1]: 入ります ディレクトリ `/home/jun1/rpm/BUILD/bluefish/po'
> make[1]: `all' に対して行うべき事はありません。
> make[1]: 出ます ディレクトリ `/home/jun1/rpm/BUILD/bluefish/po'
> make[1]: 入ります ディレクトリ `/home/jun1/rpm/BUILD/bluefish/man'
> make[1]: `all' に対して行うべき事はありません。
> make[1]: 出ます ディレクトリ `/home/jun1/rpm/BUILD/bluefish/man'
> make[1]: 入ります ディレクトリ `/home/jun1/rpm/BUILD/bluefish/data'
> make[1]: `all' に対して行うべき事はありません。
> make[1]: 出ます ディレクトリ `/home/jun1/rpm/BUILD/bluefish/data'
> make[1]: 入ります ディレクトリ `/home/jun1/rpm/BUILD/bluefish/src'
> make[1]: `all' に対して行うべき事はありません。
> make[1]: 出ます ディレクトリ `/home/jun1/rpm/BUILD/bluefish/src'

エラーの原因が分からん。
試しに1度まっさらな状態にしてから同じ処理をやってみる。

ログを上の階層に避難。
$ cd ~/rpm/BUILD/bluefish/
$ mv *.log ..
$ mv c.t ..

~/rpm/BUILD/bluefish/ を削除
$ cd ~/rpm/BUILD/
$ rm -rf bluefish

もう一度作成
$ cp -dpr bluefish.org bluefish
$ mv *.log bluefish
$ mv c.t bluefish

もう一度 configure, make, virtual make install
$ cd ~/rpm/BUILD/bluefish/
$ ./c.t >& c.t2.log
$ make >& make2.log
  Makefile の確認。
$ make prefix=/var/tmp/bluefish-root/usr >& make-install-v2.log
さっきと同じエラー
各ディレクトリ内にある Makefile の中に書いてある
all: セクションでエラーが出ているって事は分かるんだけど、
それがなんでエラーになるのかがわからない。
ルートでないといけないのかな
# cd /home/jun1/rpm/BUILD/bluefish/
# make prefix=/var/tmp/bluefish-root/usr install >& make-install-v3.log
make[1]: 入ります ディレクトリ `/home/jun1/rpm/BUILD/bluefish/intl'
if test "bluefish" = "gettext" \
&& test '' = 'intl-compat.o'; then \
if test -r ./mkinstalldirs; then \
./mkinstalldirs /var/tmp/bluefish-root/usr/lib /var/tmp/bluefish-root/usr/include; \
else \
../mkinstalldirs /var/tmp/bluefish-root/usr/lib /var/tmp/bluefish-root/usr/include; \
fi; \
/usr/bin/install -c -m 644 intlh.inst /var/tmp/bluefish-root/usr/include/libintl.h; \
/usr/bin/install -c -m 644 libintl.a /var/tmp/bluefish-root/usr/lib/libintl.a; \
else \
: ; \
fi
if test "bluefish" = "gettext"; then \
if test -r ./mkinstalldirs; then \
./mkinstalldirs /var/tmp/bluefish-root/usr/share/gettext/intl; \
else \
../mkinstalldirs /var/tmp/bluefish-root/usr/share/gettext/intl; \
fi; \
/usr/bin/install -c -m 644 VERSION /var/tmp/bluefish-root/usr/share/gettext/intl/VERSION; \
dists="ChangeLog Makefile.in linux-msg.sed po2tbl.sed.in xopen-msg.sed gettext.h gettextP.h hash-string.h libgettext.h loadinfo.h bindtextdom.c dcgettext.c dgettext.c gettext.c finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c explodename.c intl-compat.c cat-compat.c"; \
for file in $dists; do \
/usr/bin/install -c -m 644 ./$file /var/tmp/bluefish-root/usr/share/gettext/intl/$file; \
done; \
else \
: ; \
fi
make[1]: 出ます ディレクトリ `/home/jun1/rpm/BUILD/bluefish/intl'
make[1]: 入ります ディレクトリ `/home/jun1/rpm/BUILD/bluefish/po'
if test -r ".././mkinstalldirs"; then \
.././mkinstalldirs /var/tmp/bluefish-root/usr/share; \
else \
/bin/sh ../mkinstalldirs /var/tmp/bluefish-root/usr/share; \
fi
mkdir /var/tmp/bluefish-root/usr
mkdir /var/tmp/bluefish-root/usr/share
mkdir /var/tmp/bluefish-root/usr/share/locale
mkdir /var/tmp/bluefish-root/usr/share/locale/de
mkdir /var/tmp/bluefish-root/usr/share/locale/de/LC_MESSAGES
installing de.gmo as /var/tmp/bluefish-root/usr/share/locale/de/LC_MESSAGES/bluefish.mo
mkdir /var/tmp/bluefish-root/usr/share/locale/da
mkdir /var/tmp/bluefish-root/usr/share/locale/da/LC_MESSAGES
installing da.gmo as /var/tmp/bluefish-root/usr/share/locale/da/LC_MESSAGES/bluefish.mo
mkdir /var/tmp/bluefish-root/usr/share/locale/fr
mkdir /var/tmp/bluefish-root/usr/share/locale/fr/LC_MESSAGES
installing fr.gmo as /var/tmp/bluefish-root/usr/share/locale/fr/LC_MESSAGES/bluefish.mo
mkdir /var/tmp/bluefish-root/usr/share/locale/ru
mkdir /var/tmp/bluefish-root/usr/share/locale/ru/LC_MESSAGES
installing ru.gmo as /var/tmp/bluefish-root/usr/share/locale/ru/LC_MESSAGES/bluefish.mo
mkdir /var/tmp/bluefish-root/usr/share/locale/ro
mkdir /var/tmp/bluefish-root/usr/share/locale/ro/LC_MESSAGES
installing ro.gmo as /var/tmp/bluefish-root/usr/share/locale/ro/LC_MESSAGES/bluefish.mo
mkdir /var/tmp/bluefish-root/usr/share/locale/cs
mkdir /var/tmp/bluefish-root/usr/share/locale/cs/LC_MESSAGES
installing cs.gmo as /var/tmp/bluefish-root/usr/share/locale/cs/LC_MESSAGES/bluefish.mo
mkdir /var/tmp/bluefish-root/usr/share/locale/es
mkdir /var/tmp/bluefish-root/usr/share/locale/es/LC_MESSAGES
installing es.gmo as /var/tmp/bluefish-root/usr/share/locale/es/LC_MESSAGES/bluefish.mo
mkdir /var/tmp/bluefish-root/usr/share/locale/el
mkdir /var/tmp/bluefish-root/usr/share/locale/el/LC_MESSAGES
installing el.gmo as /var/tmp/bluefish-root/usr/share/locale/el/LC_MESSAGES/bluefish.mo
mkdir /var/tmp/bluefish-root/usr/share/locale/en
mkdir /var/tmp/bluefish-root/usr/share/locale/en/LC_MESSAGES
installing en.gmo as /var/tmp/bluefish-root/usr/share/locale/en/LC_MESSAGES/bluefish.mo
mkdir /var/tmp/bluefish-root/usr/share/locale/ja
mkdir /var/tmp/bluefish-root/usr/share/locale/ja/LC_MESSAGES
installing ja.gmo as /var/tmp/bluefish-root/usr/share/locale/ja/LC_MESSAGES/bluefish.mo
mkdir /var/tmp/bluefish-root/usr/share/locale/it
mkdir /var/tmp/bluefish-root/usr/share/locale/it/LC_MESSAGES
installing it.gmo as /var/tmp/bluefish-root/usr/share/locale/it/LC_MESSAGES/bluefish.mo
mkdir /var/tmp/bluefish-root/usr/share/locale/sv
mkdir /var/tmp/bluefish-root/usr/share/locale/sv/LC_MESSAGES
installing sv.gmo as /var/tmp/bluefish-root/usr/share/locale/sv/LC_MESSAGES/bluefish.mo
mkdir /var/tmp/bluefish-root/usr/share/locale/pt_BR
mkdir /var/tmp/bluefish-root/usr/share/locale/pt_BR/LC_MESSAGES
installing pt_BR.gmo as /var/tmp/bluefish-root/usr/share/locale/pt_BR/LC_MESSAGES/bluefish.mo
mkdir /var/tmp/bluefish-root/usr/share/locale/hu
mkdir /var/tmp/bluefish-root/usr/share/locale/hu/LC_MESSAGES
installing hu.gmo as /var/tmp/bluefish-root/usr/share/locale/hu/LC_MESSAGES/bluefish.mo
mkdir /var/tmp/bluefish-root/usr/share/locale/pl
mkdir /var/tmp/bluefish-root/usr/share/locale/pl/LC_MESSAGES
installing pl.gmo as /var/tmp/bluefish-root/usr/share/locale/pl/LC_MESSAGES/bluefish.mo
mkdir /var/tmp/bluefish-root/usr/share/locale/nl
mkdir /var/tmp/bluefish-root/usr/share/locale/nl/LC_MESSAGES
installing nl.gmo as /var/tmp/bluefish-root/usr/share/locale/nl/LC_MESSAGES/bluefish.mo
if test "bluefish" = "gettext"; then \
if test -r ".././mkinstalldirs"; then \
.././mkinstalldirs /var/tmp/bluefish-root/usr/share/gettext/po; \
else \
/bin/sh ../mkinstalldirs /var/tmp/bluefish-root/usr/share/gettext/po; \
fi; \
/usr/bin/install -c -m 644 ./Makefile.in.in \
/var/tmp/bluefish-root/usr/share/gettext/po/Makefile.in.in; \
else \
: ; \
fi
make[1]: 出ます ディレクトリ `/home/jun1/rpm/BUILD/bluefish/po'
make[1]: 入ります ディレクトリ `/home/jun1/rpm/BUILD/bluefish/man'
/usr/bin/install -c -d -m 755 /var/tmp/bluefish-root/usr/man/man1
/usr/bin/install -c -m 644 ./bluefish.1 /var/tmp/bluefish-root/usr/man/man1/bluefish.1
make[1]: 出ます ディレクトリ `/home/jun1/rpm/BUILD/bluefish/man'
make[1]: 入ります ディレクトリ `/home/jun1/rpm/BUILD/bluefish/data'
/usr/bin/install -c -d -m 755 /var/tmp/bluefish-root/usr/share/bluefish/man1
/usr/bin/install -c -m 644 ./loose.dtd strict.dtd frameset.dtd html.dtd html-s.dtd html-0.dtd html-0s.dtd html-1.dtd html-1s.dtd html-2.1e.dtd html-3.dtd html-3s.dtd html-3.2.dtd html-4.dtd html-4-frameset.dtd html-4-strict.dtd xhtml1-strict.dtd xhtml1-transitional.dtd xhtml1-frameset.dtd php3_functions gen_php3_functions php4_functions gen_php4_functions rxml_functions gen_rxml_functions ssi_functions /var/tmp/bluefish-root/usr/share/bluefish
make[1]: 出ます ディレクトリ `/home/jun1/rpm/BUILD/bluefish/data'
/usr/bin/install -c -d -m 755 /usr/share/pixmaps
/usr/bin/install -c -m 644 ./pixmaps/bluefish_icon.xpm /usr/share/pixmaps
make[1]: 入ります ディレクトリ `/home/jun1/rpm/BUILD/bluefish/src'
/usr/bin/install -c -d -m 755 /var/tmp/bluefish-root/usr/bin
/usr/bin/install -c -s -m 755 ./bluefish /var/tmp/bluefish-root/usr/bin/bluefish
make[1]: 出ます ディレクトリ `/home/jun1/rpm/BUILD/bluefish/src'

エラー出じ。
なんでホームディレクトリ内でルート作業をしないといけないんだ?

兎に角、ちゃんと /var/tmp/bluefish-root/usr/ 以下に入ったかを
make-install-v3.log と /var/tmp/bluefish-root/usr/ 以下を比べて確認

make-install-v3.log をながめる。。。
うーーん、よくわからん。
make-install-v3.log の始めの if ステートメントでは
シェルスクリプト ./mkinstalldirs を使って
/var/tmp/bluefish-root/usr/lib, /var/tmp/bluefish-root/usr/include/
を作ろうとしているけど /var/tmp/bluefish/usr/ 以下に作成されていない。
次の if ステータスでは /var/tmp/bluefish-root/usr/share/gettext/intl
を作ろうとしているけど gettext 以下が作られていない。
つまり ~/rpm/BUILD/bluefish/intl/Makefile が全く実行されていない。
でもエラーにならずに完了している。

これでいいのか?

それ以降の po, man, data, src は大丈夫そう。
でも、pixmap がおかしい。
/usr/share/pixmap/ に入れようとしている。
本物(?)の /usr/share/pixmap/ を見るとインストール済の bluefish が入れたであろう
pixmap が入っていて、日付が今回作った pixmap よりも古い。
ここは明かに間違っているね。
今回ので気がついたんだけど、 /usr/share/pixmaps/ って、色んなソフトが使っている為か、異様な状態になっている。
Gnome 関係とか色んな奴が一緒くたに入っている。
今回の bluefish もそう。
/usr/share/bluefish/pixmaps/ にしようかと思ったけど、、、
やめた。
そんなの後まわしだ。
まずは、~/rpm/BLILD/bluefish/pixmaps/ がちゃんと /var/tmp/bluefish-root/usr/ 以下に入る様にしなくちゃ。

bluefish/Makefile を見ると
> srcdir = src
>
> prefix = /usr
> exec_prefix = ${prefix}
> bindir = ${exec_prefix}/bin
> datadir = ${prefix}/share
> pkgdatadir = ${prefix}/share/bluefish
> pixmapsdir = /usr/share/pixmaps
>
> INSTALL = /usr/bin/install -c
となっていた。
ここの修正で pixmap のインストール場所が決まる(ハズ)。

なんで始めに Test make した時に気がつかなかったんだろう。
prefix を使わないで /usr/share/pixmaps/ を決め打ちじゃん。

pixmapsdir の修正
./configure --help では pixmapsdir を修正する項目は無い。
ダメもとで
$ ./configure --pixmapsdir=/usr/share/bluefish/pixmaps
> configure: error: unrecognized option: --pixmapsdir=/usr/share/bluefish/pixmaps
> Try `./configure --help' for more information.
やっぱりダメだった。

Makefile.in と configure.in のどっちを修正すればいいんだろう。

Makefile.in を覗くと。
> srcdir = src
>
> prefix = @prefix@
> exec_prefix = @exec_prefix@
> bindir = @bindir@
> datadir = @datadir@
> pkgdatadir = @pkgdatadir@
> pixmapsdir = @prefix@/share/pixmaps
>
> INSTALL = @INSTALL@
なるものが存在。
pixmapsdir に prefix が使われているね。
ってことは諸悪の根元は configure って事になる。

configure をながめる。
> # Installation directory options.
> # These are left unexpanded so users can "make install exec_prefix=/foo"
> # and all the variables that are supposed to be based on exec_prefix
> # by default will actually change.
> # Use braces instead of parens because sh, perl, etc. also accept them.
> bindir='${exec_prefix}/bin'
> sbindir='${exec_prefix}/sbin'
> libexecdir='${exec_prefix}/libexec'
> datadir='${prefix}/share'
> sysconfdir='${prefix}/etc'
> sharedstatedir='${prefix}/com'
> localstatedir='${prefix}/var'
> libdir='${exec_prefix}/lib'
> includedir='${prefix}/include'
> oldincludedir='/usr/include'
> infodir='${prefix}/info'
> mandir='${prefix}/man'
となっていて、

$ ./configure --help をしたときのディレクトリの表示と同じ。
ここに pixmapsdir を入れたら良いやもしれぬ。

$ cp configure configure.org
$ vi configure
$ diff configure.org configure
> 183a184
> > pixmapsdir='${prefix}/share/pixmaps'

もう一度 configure, make, virtual make install
$ cd ~/rpm/BUILD/bluefish/
$ ./c.t >& c.t3.log
No error

Makefile を見るとまだこんなんになっている。
> pkgdatadir = ${prefix}/share/bluefish
> pixmapsdir = /usr/share/pixmaps
>
> INSTALL = /usr/bin/install -c

さっきの修正だけでは不充分だったらしい。
もうちょっと ./configure を眺めてみないといけないらしい。
ってか、どこが pixmapsdir を /usr/share/pixmaps/ に決め打っているのかを見つけた方が早いかも。

Makefile, Makefile.in, configure configure.in の内、
Makefile は configure が作るので候補から外して、
Makefile.in はさっきも書いたけど、pixmapsdir は @prefix@/share/pixmaps
ってなっているからこれも外せる。
configure.in にはディレクトリを指定していそうな場所はなかった。
最終的に configure を修正する事になるね。

configure の修正
ずらずらって眺めてディレクトリを指定していそうな場所を探す。

$ diff configure.org configure
183a184
> pixmapsdir='${prefix}/share/pixmaps'
318a320,324
> -pixmapsdir | --pixmapsdir)
> ac_prev=pixmapsdir ;;
> -pixmapsdir=* | pixmapsdir=*)
> pixmapsdir=$ac_optarg ;;
>
510c516,517
< localstatedir libdir includedir oldincludedir infodir mandir
---
> localstatedir libdir includedir oldincludedir infodir mandir pixmapsdir
>
7096a7104,7105
> s,@pixmapsdir@,$pixmapsdir,;t t

configure 実行
$ ./confiugre --prefix=/usr --sysconfdir=/etc >& config2.log
$ cat config2.log
> pkgdatadir = ${prefix}/share/bluefish
> pixmapsdir = /usr/share/pixmaps
>
> INSTALL = /usr/bin/install -c
pixmapsdir が直っていない。
もーわからん。

って事で Makefile を直接直すしか無いのかな。
試しに Makefile を書き換えて見る。
$ diff Makefile.org Makefile
33c33,34
< pixmapsdir = /usr/share/pixmaps
---
> #pixmapsdir = /usr/share/pixmaps
> pixmapsdir = ${prefix}/share/pixmaps

make intall のテスト
$ make prefix=/var/tmp/bluefish-root/usr -n install >& make-install2.log
$ cat make-install2.log
/usr/bin/install -c -d -m 755 /var/tmp/bluefish-root/usr/share/pixmaps
/usr/bin/install -c -m 644 ./pixmaps/bluefish_icon.xpm /var/tmp/bluefish-root/usr/share/pixmaps

ってな感じで pixmapsdir も仮想インストール先に指定出来た。
が、こんなんでパッケージングしていいのか?
rpm のソースパッケージ src.rpm を展開してからバイナリパッケージ i386.rpm
を作る時に ./configure を実行する事になる。
そん時にどうやって Makefile にパッチを当てればいいんだろう。
Makefile は configure によって作成されるのだから、人(環境)によって
作られる Makefile も変わってくるよな。
だから、動的に作成される Makefile にどうやってパッチを当てれば良いのかって事になるな。
うーーん、どうしよう。

patch test
$ diff -Naur configure.org configure > patch.conf
$ cat patch.conf
> --- configure.org Wed Oct 31 07:31:49 2001
> +++ configure Sat Nov 10 21:33:24 2001
> @@ -181,6 +181,7 @@
> oldincludedir='/usr/include'
> infodir='${prefix}/info'
> mandir='${prefix}/man'
> +pixmapsdir='${prefix}/share/pixmaps'

> # Identity of this package.
> PACKAGE_NAME=
> @@ -316,6 +317,11 @@
> -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
> mandir=$ac_optarg ;;

> + -pixmapsdir | --pixmapsdir)
> + ac_prev=pixmapsdir ;;
> + -pixmapsdir=* | pixmapsdir=*)
> + pixmapsdir=$ac_optarg ;;
> +
> -nfp | --nfp | --nf)
> # Obsolete; use --without-fp.
> with_fp=no ;;
> @@ -507,7 +513,8 @@

> # Be sure to have absolute paths.
> for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
> - localstatedir libdir includedir oldincludedir infodir mandir
> + localstatedir libdir includedir oldincludedir infodir mandir pixmapsdir
> +
> do
> eval ac_val=$`echo $ac_var`
> case $ac_val in
> @@ -7094,6 +7101,8 @@
> s,@oldincludedir@,$oldincludedir,;t t
> s,@infodir@,$infodir,;t t
> s,@mandir@,$mandir,;t t
> +s,@pixmapsdir@,$pixmapsdir,;t t
> +
> s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
> s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
> s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t

$ rm configure
$ mv configure.org configure
$ patch < patch.conf
パッチ当たっていた。

Makefile をつくって、
$ ./confiugre --prefix=/usr --sysconfdir=/etc >& config3.log
Makefile の patch file を作る。
$ mv Makefile Makefile.org
$ cp ../Makefile .
$ diff -Naur Makefile.org Makefile > patch.Make
Makefile のパッチを当ててみる。
$ rm Makefile
$ mv Makefile.org Makefile
$ patch < patch.Make
当たった。

オリジナルの spec file を作る
始めにいっとー悩んだのが、Makefile のパッチを当てられなかった事。
何回やってもパッチが当たらない。
悩んだ末にパッチを当てるのをやめた。
パッチの当たっていない Makefile を見ても pixmapsdir に /var/tmp/bluefish-root/
が指定されていたし、confiugre にはパッチが当たっているから、なんとかなるだろう。
と、いう考え。

bluefish-2001-10-30.tar.bz2 の中に spec file が入っていたので これをベースに、
src.rpm を作ろう を参考にして作り直した。

パッチを使う事を明記
パッチファイル patch.conf を ~/rpm/SORCES/ へ移動。
後でソースパッケージにする時にいれ忘れない様に今のうちにやっておく。
もちろん、spec file(bluefish.spec) にも patch.conf を書いておく。これが本題だもんね。
> Patch: patch.conf
これだけでパッチを当てるファイルを ~/rpm/SOURCES/ から探してくれる。
フルパスじゃなくていいんだね。

Preamble の修正
#%define version 0.7
#%define release 0.20010319
#%define name bluefish
#%define prefix /usr
#%define blconf %{_builddir}/%{name}-%{version}/bluefish.wmconfig
%define blconf %{_builddir}/%{name}/bluefish.wmconfig

Summary: The Bluefish HTML Editor
Name: bluefish
Version: 0.7
Release: jun1
Copyright: GPL
Group: Applications/Editors
Source: bluefish-0.7.tar.gz
Source2: bluefish.wmconfig
Source3: bluefish.desktop
Patch: patch.conf

BuildRoot: /var/tmp/%{name}-%{version}-root
#Prefix: %{_prefix}

%define は使わない。
人の考えた省略文字なんて、混乱するモトだからね。
blconf だけはインストール時に必要になるから使う。
展開されるディレクトリとの矛盾を直すためにそのままは使えないので修正を入れておく。
Version: は 0.6 を入れている事も考えて勝手に 0.7 にした。
Release: jun1 にする事ででき上がる src.rpm の名称が
  bluefish-0.7-jun1.src.rpm になる。
これでおれのオリジナルって区別が付く様になる。

%prep から %make まで
%prep
rm -rf $BUILD_ROOT_DIR
# tenkai
#%setup -q -n %{name}-%{version}
%setup -q -n bluefish
# patch confiugre
%patch0 -p0
#patch < patch.conf
%build
%__autoconf
%configure --prefix=$RPM_BUILD_ROOT/usr --sysconfdir=$RPM_BUILD_ROOT/etc
%make
make

なんか、修正だらけだね。

setup
rpm は通常、~/rpm/BUILD/ 以下に展開されるディレクトリは
  %{name}-%{version} を期待する。
でも、今回の俺オリジンのソースディレクトリは何となく
  bluefish
のみにしてしまった。
ってか、もともとの bluefish-2001-10-30.tar.bz2 を展開したらそうなっていたんだもん。
その矛盾を直すのが -n bluefish って訳だ。
これで以降、~/rpm/BUILD/bluefish/ を見てくれる事になる。
ホントは setup -q -n %{name} の方がいいんだろうな。
-n は name の略か?
-q は quiet(静か)って事でずらずら出て来るメッセージの抑制。

patch
# patch < patch.conf はうまく当たらなかった時のなごりだから、気にしない事。 なにが、どう、当たらなかったのか、ついさっきまでいじっていた今の俺が思い出せないんだから、もうコメントの仕様がないな。
patch0 -p0
は Preamble に書いたパッチファイル(patch.conf) をこのタイミング(~/rpm/BUILD/bluefish/ を展開直後)にパッチを当てなさい、って指示。
Preamble に複数のパッチファイルを指定するときは
patch:, patch1:,patch2; って増えて行く。
patch: は patch0 と同じ意味。
で、
patch: patch.conf
って Preamble には書いていたのだから
patch < patch.conf
と同じ意味。
-p0 はディレクトリ階層を幾つ無視するか、って指示。
今回はカレント(~/rpm/BUILD/bluefishの中)でパッチファイルを作ったので無視するディレクトリはなし(0)って事になる。
これが1つ上の階層、例えば
  $ cd ~/rpm/BUILD/
  $ diff -Naur bluefish/configure.org bluefish/configure >& ~/rpm/SOUECES/
ってなふうにしていたら、
  patch0 -1
となるのだ。

configure
は、いままで惨々して来たように、prefix と sysconfdir を指定して実行。

make
%make だけでは、コンパイルをしてくれなかったので、make を追加。
ホントは
  make --prefix=$RPM_BUILD_ROOT/usr --sysconfdir=$RPM_BUILD_ROOT/etc
としないといけなかったかも。
ま、うまくいったから、結果オーライ。

コンパイルのテスト
$ cd ~/rpm/SPECS/
$ rpm -bc bluefish >& bc1.log ; beep-beep
  または、
$ r.c bluefish >& r.c1.log ; beep-beep

1. パッチは当たっているか、
2.~/rpm/BUILD/bluefish/ 内に、ちゃんと実行ファイル bluefish
が出来ているか、
3. r.c1.log にエラー、No such file or directory
Bad exit status 等が出ていないか。
を確認。
始め、setup -q -n %{name}-%{version} のままでやっていたから、
~/rpm/BUILD/bluefish を見てくれなくて、
その事に気がつくのに随分時間かかったな。

バイナリファイル bluefish に strings を掛ける。
$ strings ~/rpm/BUILD/bluefish/src/bluefish | grep /var/tmp
ここで、grep が /var/tmp/ を見つけちゃった場合は、要注意。
よく注意しないと、本ちゃんでも /var/tmp/ 以下にインストールされちゃうらしい。
今回、はっきりと grep に /var/tmp/ が引っかかっちゃったんだけど、
Makefile を見ても、configure を見ても、/var/tmp/ は $BUILD_ROOT_DIR
でしか指定していなかったので、原因不明。
エイヤで最後まで(src.rpm)やったらうまく行ったから、さらに原因不明。

%install から %changelog まで
%install
まず、何はなくとも、rm -rf $BUILD_ROOT_DIR を入れる。
心の平和の為らしいが、何かの拍子に消えなくて、ブッ壊れている
以前の奴が残っていたら、やばいもんね。

%install
rm -rf $RPM_BUILD_ROOT

#%makeinstall pixmapsdir=$RPM_BUILD_ROOT%{_datadir}/pixmaps \
   pkgdatadir=$RPM_BUILD_ROOT%{_datadir}/bluefish \
   mandir=$RPM_BUILD_ROOT%{_mandir}
make prefix=$RPM_BUILD_ROOT/usr \
   sysconfdir=$RPM_ROOT_ROOT/etc \
   install

# Since this is specific to Red Hat Linux, we'll leave this in the spec file.

#if [ ! -d /usr/src/redhat ]; then
  mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/X11/wmconfig
  install -m 0644 %{blconf} $RPM_BUILD_ROOT%{_sysconfdir}/X11/wmconfig/bluefish
#fi

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-, root, root)
%doc README ChangeLog BUGS AUTHORS NEWS TODO

%attr( 0644, root, root ) %config(missingok) %{_sysconfdir}/X11/wmconfig/bluefish
%attr( 0755, root, root ) %{_bindir}/*
%attr( 0644, root, root ) %{_mandir}/man1/*
%attr( 0644, root, root ) %{_datadir}/locale/??/LC_MESSAGES/*
%attr( 0644, root, root ) %{_datadir}/bluefish/*
%attr( 0644, root, root ) %{_datadir}/pixmaps/bluefish_icon.xpm

%changelog

%makeinstall マクロを使わずに make install を使った。
理由はマクロが何をしているのかよく分からないため。
make install なら今まで自分でやって来たから何かが起きても
対処しやすいもんね。
だから、pkgdatadir, mandir なんかも、spec file の中で変に指定しないで、
configure, make で作られる通にした。
そのために今までパッチを作ったりして苦労をして来たんだから。

インストールのテスト
$ rm -rf /var/tmp/bluefish-root/
$ rpm -bi --shor-circuit bluefish.spec
  または、
$ r.ii bluefish.spec >& r.ii1.log ; beep-beep

r.ii1.log の内容を確認。
エラーはないか、No such file or directory が出ていないか、
Operation not permitted なんて出ていたら、要注意だ。
/var/tmp/ 以外に入れようとしている可能性大。

%clean, %files はオリジンをそのまま使用。
特に書き換える必要もないでしょう。
ホントは
$ make prefix=/var/tmp/bluefish-root/usr -n install >& make-install2.log
をしたときのログと、
$ find /var/tmp/bluefish-root/ >& log
で取ったログとを比べながら、書いて行くんだろうけど、
今回はめんどくさかったので、パス。
これで、スペックファイルの作成は終了。

いよいよ、ソースパッケージの作成。
$ cd ~/rpm/BUILD/
$ tar czvf bluefish-0.7.tar.gz bluefish/
Created bluefish-0.7.tar.gz
$ mv bluefish-0.7.tar.gz ~/rpm/SOURCES/
~/rpm/SOURCES/ にパッチファイル、
その他のオリジナルのファイル供 bluefish.wmconfig,bluefish.desktop
があるか、確認して、

$ rpm -bs bluefish.spec >& r.s1.log
  または、
$ r.s bluefish.spec >& r.s1.log

一発で完成。
調子に乗って、バイナリパッケージも作成。

$ rpm -bb bluefish.spec
  または、
$ r.b bluefish.spec >& r.b1.log

こっちも一発完成。
よかったー、訳分かんないエラーがでなくて。

で、早速インストール。
古い bluefish が立ち上がっていたので、終了させて、
$ cd ~/rpm/RPMS/
$ su # rpm -ivh bluefish.i386.rpm
> bluefish #######################
はい、かんりょー。

早速起動。
$ bl.damex
ちゃんと起動した。
.blufish もちゃんと読み込んでいるらしく、damex の project も
窓の大きさとかも今まで通りになっていた。

で、使ってみてビックリ。
ファイルを複数開いていると、窓の下側に各ファイル毎にタブが出て来るんだけど、 開いているファイルに修正が入ると、このタブにアスタリスクが付く様になった。
前から欲しかったんだよ、この機能。
えらい!

これで、落ちなくなっていると、いいな。





戻る