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")