適当なportsの作り方


moshのsvnをやっているが、突然 configure も作ってみたくなった。
configureって、autoconf で作るんだよねーと、

[sakae@nil ~/mosh-dev]$ autoconf
aclocal.m4:16: warning: this file was generated for autoconf 2.63.
You have another version of autoconf.  It may work, but is not guaranteed to.
If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically `autoreconf'.
configure.ac:4: error: Autoconf version 2.63 or higher is required
configure.ac:4: the top level
autom4te-2.62: /usr/local/bin/gm4 failed with exit status: 63

autoconfがちと古いらしい。
FreeBSDに入っているのは、2.62版のautoconf。ports/devel/を点検するも
2.62版が最新みたい。
しゃーない、2.63版を、でっちあげて見るか。

[root@nil /usr/ports/devel]# mkdir autoconf263
[root@nil /usr/ports/devel]# cp -R autoconf262/* autoconf263
[root@nil /usr/ports/devel]# cd autoconf263

まずは、作成レシピである Makefile を見る。
至る所に、262 とか 2.62 とか書いてあるので変更しよう。
viでMakefileを開いてから
:%s/62/63/gc
して、漏れなく変更。
これで、srcぐらいは、取ってこれるだろう。

[root@nil /usr/ports/devel/autoconf263]# make fetch
===>  Vulnerability check disabled, database not found
=> autoconf-2.63.tar.bz2 is not in /usr/ports/devel/autoconf263/distinfo.
=> Either /usr/ports/devel/autoconf263/distinfo is out of date, or
=> autoconf-2.63.tar.bz2 is spelled incorrectly.
*** Error code 1

Stop in /usr/ports/devel/autoconf263.

あらら、distinfoも変更しないと、いけないみたい。
このファイルには、取ってくるべきファイルや、md5、サイズも書いてあるけど
取りあえず、ファイル名だけ変更。

[root@nil /usr/ports/devel/autoconf263]# make fetch
===>  Vulnerability check disabled, database not found
=> autoconf-2.63.tar.bz2 doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch from http://ftp.gnu.org/gnu/autoconf/.
fetch: http://ftp.gnu.org/gnu/autoconf/autoconf-2.63.tar.bz2: size mismatch: expected 1165951, actual 1195259
=> Attempting to fetch from ftp://ftp.gnu.org/gnu/autoconf/.
fetch: ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.63.tar.bz2: size mismatch: expected 1165951, actual 1195259
=> Attempting to fetch from http://www.gtlib.cc.gatech.edu/pub/gnu/gnu/autoconf/.
^Cfetch: transfer interrupted

ファイルサイズが分かったので、変更して

[root@nil /usr/ports/devel/autoconf263]# make fetch
===>  Vulnerability check disabled, database not found
=> autoconf-2.63.tar.bz2 doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch from http://ftp.gnu.org/gnu/autoconf/.
autoconf-2.63.tar.bz2                         100% of 1167 kB   38 kBps 00m00s

後は、こんな風にして証明値をdistinfoに書いておくのね。(面倒だから、今回
は、やらないで先に進むけど)

[root@nil /usr/ports/devel/autoconf263]# md5 /usr/ports/distfiles/autoconf-2.63.
tar.bz2
MD5 (/usr/ports/distfiles/autoconf-2.63.tar.bz2) = 7565809ed801bb5726da0631ceab3699
[root@nil /usr/ports/devel/autoconf263]# sha256 /usr/ports/distfiles/autoconf-2.
63.tar.bz2
SHA256 (/usr/ports/distfiles/autoconf-2.63.tar.bz2) = 264d7c1c0e268bc77fbe0f308e085545535edfe73f33e27c80219cc0c9c71246

先に進もう、早速 make だ。

[root@nil /usr/ports/devel/autoconf263]# make
===>  Vulnerability check disabled, database not found
===>  Extracting for autoconf-2.63
=> MD5 Checksum mismatch for autoconf-2.63.tar.bz2.
=> SHA256 Checksum mismatch for autoconf-2.63.tar.bz2.
===>  Refetch for 1 more times files: autoconf-2.63.tar.bz2 autoconf-2.63.tar.bz2
===>  Vulnerability check disabled, database not found
=> autoconf-2.63.tar.bz2 doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch from http://ftp.gnu.org/gnu/autoconf/.
fetch: http://ftp.gnu.org/gnu/autoconf/autoconf-2.63.tar.bz2: Requested Range Not Satisfiable
=> Attempting to fetch from ftp://ftp.gnu.org/gnu/autoconf/.
===>  Vulnerability check disabled, database not found
=> MD5 Checksum mismatch for autoconf-2.63.tar.bz2.
=> SHA256 Checksum mismatch for autoconf-2.63.tar.bz2.
===>  Giving up on fetching files: autoconf-2.63.tar.bz2 autoconf-2.63.tar.bz2
Make sure the Makefile and distinfo file (/usr/ports/devel/autoconf263/distinfo)
are up to date.  If you are absolutely sure you want to override this
check, type "make NO_CHECKSUM=yes [other args]".
*** Error code 1

Stop in /usr/ports/devel/autoconf263.
*** Error code 1

あらら、手抜きが祟ったわい。でも、抜け穴があって

[root@nil /usr/ports/devel/autoconf263]# make NO_CHECKSUM=yes
 :
Making all in doc
gmake[2]: Entering directory `/usr/ports/devel/autoconf263/work/autoconf-2.63/doc'
gmake[2]: *** No rule to make target `autoconf-2.62.texi', needed by `autoconf-2.62.info'.  Stop.
gmake[2]: Leaving directory `/usr/ports/devel/autoconf263/work/autoconf-2.63/doc

あらら、まだ、2.62 なんてのを引きずっているのね! さて、どこだろう?
autoconf263/直下にある files/ の中にパッチが有ったぞ。
見たら、パッチファイルが2つあり、しっかりと 2.62が刻印されてた。
とりあえず、2.63に変更。

make clean してからやり直し
そして
make install clean

ちゃんと 2.63 になったか確認
[sakae@nil ~]$ autoconf -v
autoconf-2.63: no input file

続いて本番
[sakae@nil ~/mosh-dev]$ autoconf
 :
tile$|^HAVE_ALLOCA_H$|^HAVE_ALLOCA$|^ALLOCA$|^C_ALLOCA$|^CRAY_STACKSEG_END$|^STACK_DIRECTION$|^LINE_FEED_CODE_CRLF$|^LINE_FEED_CODE_CR$|^LINE_FEED_CODE_LF$|^subdirs$|^LIBOBJS$|^LTLIBOBJS$
[sakae@nil ~/mosh-dev]$ ls -l configure
-rwxr-xr-x  1 sakae  kuma  252431  3 11 14:40 configure*