gauche head on FreeBSD

gauche test

head をこの前から試しているんだけど、make check するのを忘れていた。

Testing r7rs-aux ...                                             passed.
make[1]: Leaving directory '/home/sakae/src/Gauche/src'
Total: 34150 tests, 34149 passed,     1 failed,     0 aborted.
make[1]: Entering directory '/home/sakae/src/Gauche/src'
make[1]: *** [Makefile:485: test-summary-check] Error 1
make[1]: Leaving directory '/home/sakae/src/Gauche/src'
make: *** [Makefile:56: check] Error 2

make checkのエラーは後回しにして、本筋のエラーがどんな具合か先にみる。

sakae@deb:~/src/Gauche$ fgrep ' got ' src/test.log
test cseq (gen): expects (0 10) => got (0 2)

control.scmの中のこのテストのみがエラー。次の似たようなテストはpassだ。エラーの再現性は有る。

sakae@deb:~$ /home/sakae/MINE/bin/gosh
gosh$ (use control.cseq)
gosh$ (define k 0)
k
gosh$ (define (gen) (if (>= k 10) (eof-object) (begin0 k (inc! k))))
gen
gosh$ (define seq (generator->cseq gen))
seq
gosh$ (list (car seq) k)
(0 10)

手動で実行するとpassするなあ。i386という遅い石だと問題? 遅い石は罪です、なんちゃってね。 そうだ、FreeBSD/i386で試してみよう。そうすれば、いいかげんな推測が白黒はっきりする。

それにしてもtestに使われているコードは、簡単明瞭で非常に良い手続の使用事例になってる。info等でピンとこない説明が出てきたら、test codeを参照するに限るな。

try head on FreeBSD

二世帯住宅の回廊(謎)を経由して、debianで動いているものをそっくり持ってきた。まずは、debianでの痕跡をすっかり消す事だな。gmake distclean。なんだか /bin/bash がないと言われてしまった。Makefileの冒頭にしっかり宣言されてた。bashの必要性ってあるのかな?

portsから入れると/usr/local/bin/bashになるんで、リンクを貼って逃げておく。 portsから入れてる/usr/local/bin/goshを避けるため、–prefix=/home/sakae/MINE が目標地点。

gmake[1]: Leaving directory '/tmp/Gauche/lib'
gmake[1]: Entering directory '/tmp/Gauche/ext'
(cd util; gmake default)
gmake[2]: Entering directory '/tmp/Gauche/ext/util'
"../../src/gosh" -ftest "../../src/precomp" -e -P -o util--match ../../libsrc/util/match.scm
WARNING: Unable to find source tree.  The -ftest option is ignored.
 *** ERROR: cannot find "gauche/parseopt" in ("/home/sakae/MINE/share/gauche-0.98/site/lib" "/home/sakae/MINE/share/gauche-0.98/0.9.11_pre1/lib")
    While compiling "./../../src/precomp" at line 39: (use gauche.parseopt)
    While loading "./../../src/precomp" at line 39
Stack Trace:
_______________________________________
gmake[2]: *** [Makefile:25: util--match.c] Error 70

あれ、未来の目標地点を探してる。そこには、まだ何もないんだよ。debianの時は、どうだったんだろう? 何か古いのが入っていた? いや、この間、新築したばかりで、残骸はなかったはず。

グダグダ言っててもしょうがないので、目標地点を普通の場所(/usr/local)にして、再実行。

gmake[1]: Entering directory '/tmp/Gauche/ext'
(cd util; gmake default)
gmake[2]: Entering directory '/tmp/Gauche/ext/util'
"../../src/gosh" -ftest "../../src/precomp" -e -P -o util--match ../../libsrc/util/match.scm
WARNING: Unable to find source tree.  The -ftest option is ignored.
 *** ERROR: cannot find "gauche/parseopt" in ("/usr/local/share/gauche-0.98/site/lib" "/usr/local/share/gauche-0.98/0.9.11_pre1/lib")
    While compiling "./../../src/precomp" at line 39: (use gauche.parseopt)
    While loading "./../../src/precomp" at line 39
Stack Trace:
_______________________________________
gmake[2]: *** [Makefile:25: util--match.c] Error 70

かくなる上は、根源まで遡り、./DIST gen からやってみる。

make[1]: Fatal errors encountered -- cannot continue
make[1]: stopped in /tmp/Gauche/winnt/wix
 *** Error code 1 (ignored)
rm -rf Makefile config.cache config.log config.status  libtool configure.lineno autom4* gc/autom4*  gc/configure.gnu-gauche Gauche.spec configure VERSION DIST_EXCLUDE_X  gc/configure gc/configure.gnu  INSTALL.en.adoc INSTALL.ja.adoc
Can't exec "aclocal": No such file or directory at /usr/local/share/autoconf-2.69/Autom4te/FileUtils.pm line 326.
autoreconf-2.69: failed to run aclocal: No such file or directory

リナ系のツールは、全てGNU株式会社の製品を使うように、強制されるのね。

[sakae@fb /tmp/Gauche]$ MAKE=gmane ./DIST gen
Can't exec "aclocal": No such file or directory at /usr/local/share/autoconf-2.69/Autom4te/FileUtils.pm line 326.
autoreconf-2.69: failed to run aclocal: No such file or directory

autoconf-2.69_3 が入っているんだけど、微妙に製品内容が違うのかな? ググったら、automakeを入れるんだ、そうです。

[sakae@fb /tmp/Gauche]$ MAKE=gmane ./DIST gen

Ready to run './configure'.

3度目の正直成るか?

gmake[1]: Entering directory '/tmp/Gauche/ext'
(cd util; gmake default)
gmake[2]: Entering directory '/tmp/Gauche/ext/util'
"../../src/gosh" -ftest "../../src/precomp" -e -P -o util--match ../../libsrc/util/match.scm
WARNING: Unable to find source tree.  The -ftest option is ignored.
 *** ERROR: cannot find "gauche/parseopt" in ("/usr/local/share/gauche-0.98/site/lib" "/usr/local/share/gauche-0.98/0.9.11_pre1/lib")
    While compiling "./../../src/precomp" at line 39: (use gauche.parseopt)
    While loading "./../../src/precomp" at line 39
Stack Trace:
_______________________________________
gmake[2]: *** [Makefile:25: util--match.c] Error 70

Uum… 謎だ。頭冷してくる。

[sakae@fb ~]$ locate gauche/parseopt
/usr/local/share/gauche-0.97/0.9.10/lib/gauche/parseopt.scm

こういう場所に有ったので、検索PATHに加えて、コンパイル

[sakae@fb /tmp/Gauche]$ export GAUCHE_LOAD_PATH=/usr/local/share/gauche-0.97/0.9.10/lib:/usr/local/share/gauche-0.97/0.9.10/lib/gauche:/usr/local/share/gauche-0.97/0.9.10/lib/gauche/cgen

gmake[1]: Entering directory '/tmp/Gauche/ext'
(cd util; gmake default)
gmake[2]: Entering directory '/tmp/Gauche/ext/util'
"../../src/gosh" -ftest "../../src/precomp" -e -P -o util--match ../../libsrc/util/match.scm
WARNING: Unable to find source tree.  The -ftest option is ignored.
 *** ERROR: can't find dlopen-able module "srfi-1"
    While loading "/usr/local/share/gauche-0.97/0.9.10/lib/srfi-1.scm" at line 5
    While compiling "/usr/local/share/gauche-0.97/0.9.10/lib/gauche/cgen/precomp
.scm" at line 37: (define-module gauche.cgen.precomp (use srfi-1) (use srfi-13) (use gauche.cgen) (use gauche.cgen.stub ...
    While loading "/usr/local/share/gauche-0.97/0.9.10/lib/gauche/cgen/precomp.s
cm" at line 52
    While compiling "./../../src/precomp" at line 40: (use gauche.cgen.precomp)
    While loading "./../../src/precomp" at line 40
Stack Trace:
_______________________________________
gmake[2]: *** [Makefile:25: util--match.c] Error 70

まだ、何か騙されている? ワーニングも気持よいものではないし。

仕切り直し

0.9.10のtar玉からコンパイルしつつログを取ってみる。

gmake[1]: Entering directory '/tmp/Gauche-0.9.10/ext'
(cd util; gmake default)
gmake[2]: Entering directory '/tmp/Gauche-0.9.10/ext/util'
"../../src/gosh" -ftest "../../src/precomp" -e -P -o util--match ../../libsrc/util/match.scm
cc -DHAVE_CONFIG_H -I. -I. -I../../src -I../../src -I../../gc/include    -g -O2 -Wall -Wextra -Wno-unused-label -fPIC   -o util--match.o -c util--match.c

ワーニングも出ないで、普通に通過してる。という事は、ここに至るまでで、何か不都合な事が起こっているんだな。

折角コンパイルしたんで、これを/home/sakae/MINEにインストールする。

[sakae@fb /tmp/Gauche]$ gosh -V
  :
(build.platform "i586-unknown-freebsd13.0")
(scheme.path "/home/sakae/MINE/share/gauche-0.97/site/lib" "/home/sakae/MINE/share/gauche-0.97/0.9.10/lib")

gosh> *load-path*
("." "/home/sakae/MINE/share/gauche-0.97/site/lib"
 "/home/sakae/MINE/share/gauche-0.97/0.9.10/lib")

こんな状態

gmake[2]: Entering directory '/tmp/Gauche/ext/util'
"../../src/gosh" -ftest "../../src/precomp" -e -P -o util--match ../../libsrc/util/match.scm
WARNING: Unable to find source tree.  The -ftest option is ignored.
 *** ERROR: cannot find "gauche/parseopt" in ("/home/sakae/MINE/share/gauche-0.98/site/lib" "/home/sakae/MINE/share/gauche-0.98/0.9.11_pre1/lib")
    While compiling "./../../src/precomp" at line 39: (use gauche.parseopt)
    While loading "./../../src/precomp" at line 39
Stack Trace:
_______________________________________
gmake[2]: *** [Makefile:25: util--match.c] Error 70

やっぱりワーニングは出てくるし、ABIバージョンが微妙に進んでいる。気分を害する警告も気になる所と言えば

libtype.scm:799:23: warning: unused variable 'v' [-Wunused-variable]
{int oor=FALSE;u_long v=
                      ^
1 warning generated.

これぐらいだけど、実害はなさそう。正直Gave up.

最後っ屁って事で、debianでは、どうなってるか確認しとく。

sakae@deb:~$ gosh
*load-path*
("." "/usr/share/gauche-0.97/site/lib" "/usr/share/gauche-0.97/0.9.10/lib")
gosh>
sakae@deb:~$ MINE/bin/gosh
gosh$ *load-path*
("/home/sakae/MINE/share/gauche-0.98/site/lib"
 "/home/sakae/MINE/share/gauche-0.98/0.9.11_pre1/lib")

ABIバージョンが切り替わる時は、それなりの注意が有るのだろうね。 属に言う鶏卵問題かな?

-ftest (BUG潰し)

test
     "‘../src’" と "‘../lib’" を、初期化ファイルを読む前に ロードパ
     スに加えます。これは、作成された‘gosh’をインストールせずに 実
     行してみるのに便利です。

これが効かないって、壊滅的だな。-P オプションは、どんな機能を提供するんだろう?

鶏卵問題の切り札を握っていないか。インストールせずに実行出来るって説明だけど、これは取りも直さず、新しいAPIでも動かせます、たとえコンパイル中でも。

こうなったらgdbの出番だな。src/ に移動して gdb gosh -ftest 相当で実行

(gdb) bt
#0  test_paths_setup (av=<optimized out>) at main.c:474
#1  main (ac=2, av=0xffbfebc4) at main.c:822
(gdb) n
475         if (SCM_STRINGP(self)) {
(gdb)
484         } else if (access("../src/gauche/config.h", R_OK) == 0
(gdb) n
485             && access("../libsrc/srfi-1.scm", R_OK) == 0
(gdb)
486             && access("../lib/r7rs-setup.scm", R_OK) == 0) {
(gdb)
491         } else if (access("../../src/gauche/config.h", R_OK) == 0
(gdb) n
492                    && access("../../libsrc/srfi-1.scm", R_OK) == 0
(gdb)
499             Scm_Warn("Unable to find source tree.  The -ftest option is ignored.");

access(path, R_OK) は、読み出せればOKかってチェックか。

これぐらいなら、オイラーがチェックしてあげるよ。

[sakae@fb ~/src/Gauche/src]$ ls -l ../src/gauche/config.h
-rw-r--r--  1 sakae  wheel  16459 Oct 11 14:28 ../src/gauche/config.h
[sakae@fb ~/src/Gauche/src]$ ls -l ../libsrc/srfi-1.scm
ls: ../libsrc/srfi-1.scm: No such file or directory
[sakae@fb ~/src/Gauche/src]$ ls -l ../lib/r7rs-setup.scm
-rw-r--r--  1 sakae  wheel  24287 Oct  1 13:53 ../lib/r7rs-setup.scm

大事なものがない。一体何処?

[sakae@fb ~/src/Gauche]$ find . -name srfi-1.scm
./lib/srfi-1.scm

libsrcは、2箇所あるので、修正。これで、この場所は通過した。

次のエラー(未解決)

"../../src/gosh" -ftest "../../src/precomp" -I . -e -P -o gauche--unicode ./unicode.scm
Error in compiling (include "unicode-attr.scm")
 *** ERROR: include file is not readable:  "unicode-attr.scm"
Stack Trace:
_______________________________________
  0  ((with-module gauche.internal pass1/open-include-file) filena ...
        expanded from ($ (with-module gauche.internal pass1/open-include-file) fil
        at "../../lib/gauche/cgen/precomp.scm":670
  1  (generator-fold compile-toplevel-form '() read)
        at "../../lib/gauche/cgen/precomp.scm":248
  2  (with-input-from-file src (^ () (define load-path-save *load- ...
        at "../../lib/gauche/cgen/precomp.scm":239
  3  (do-it)
        at "../../lib/gauche/cgen/precomp.scm":276
  4  (call-with-output-file out.sci (^p (display ";; generated aut ...
        at "../../lib/gauche/cgen/precomp.scm":271
  5  (apply %cgen-precompile src keys)
        at "../../lib/gauche/cgen/precomp.scm":163
  6  (cgen-precompile src :out.c out.c :out.sci (or out.sci ext-mo ...
        at "./../../src/precomp":74
gmake[2]: *** [Makefile:132: gauche--unicode.c] Error 70

unicode.scmには

;; unicode-attr.scm is created with src/gen-unicode.scm during build.
(include "unicode-attr.scm")

自動生成されるって説明。ならば、生成スクリプトがどこかの時点で走るはず。

gmake clean
gmake |& tee LOG
grep gen-unicode.scm LOG

しても、使われた形跡ないなあ。隠れた所で使われている? こういうのは、専門家にまかせよう。

debianでやった時の残骸を調べたら、unicode-attr.scmが有ったので、いけない事と認識しつつ、密輸入したよ。混ぜるな危険は、自己責任。

make check

何とかチェック出来る所まで、漕ぎ着けた。けど、エラーは出て来たね。

[sakae@fb ~/src/Gauche/src]$ grep cseq test.log
<control.cseq>-----------------------------------------------------------------
testing bindings in #<module control.cseq> ... ok
test cseq (gen), expects (0 10) ==> ERROR: GOT (0 2)
test cseq (gen), expects (0 1 2 3 4 5 6 7 8 9) ==> ok
test cseq (gen), expects (0 1 2 3) ==> ok
test cseq (gen), expects #<<error> "oops"> ==> ok
test cseq (coroutine), expects (0 1 2 3 4 5 6 7 8 9) ==> ok
test cseq (gen): expects (0 10) => got (0 2)

ありゃりゃ、debianと同じエラーだ。本当に遅い石は罪なのだろうか?

そして、

Testing utility scripts ...                                      failed.
discrepancies found.  Errors are:
test running test: expects #t => got "WARNING: Unable to find source tree.  The -ftest option is ignored.\n*** ERROR: cannot find \"gauche/test\" in (\".\" \"/home/sakae/MINE/share/gauche-0.98/site/lib\" \"/home/sakae/MINE/share/gauche-0.98/0.9.11_pre1/lib\")\n    While compiling \"././test.scm\" at line 5: (use gauche.test)\n    While loading \"././test.scm\" at line 5\nStack Trace:\n_______________________________________\n"
test running test: expects #t => got "WARNING: Unable to find source tree.  The -ftest option is ignored.\n*** ERROR: cannot find \"gauche/test\" in (\".\" \"/home/sakae/MINE/share/gauche-0.98/site/lib\" \"/home/sakae/MINE/share/gauche-0.98/0.9.11_pre1/lib\")\n    While compiling \"././test.scm\" at line 5: (use gauche.test)\n    While loading \"././test.scm\" at line 5\nStack Trace:\n_______________________________________\n"

headも常に進化してるけど、暫く前にpullしたものを利用してます。

[sakae@fb ~/src/Gauche]$ git log |& head -7
commit a1a05b54c3712b34e26295cc635c1ded35af348a
Author: Shiro Kawai <shiro@acm.org>
Date:   Thu Oct 7 21:32:58 2021 -1000

    Start adding memo-table tests

commit bc74cde38d00e569e6c640fd44b56a5ba247af00

参考まで、まだheadはインストールしてない状態で確認。

[sakae@fb ~/src/Gauche/src]$ ./gosh -ftest
gosh$ *load-path*
("../lib" "../libsrc" "../src" "/home/sakae/MINE/share/gauche-0.98/site/lib"
 "/home/sakae/MINE/share/gauche-0.98/0.9.11_pre1/lib")

This year's Index

Home