Gauche > Archives > 2009/07/18

2009/07/18 03:55:32 UTCとおる。
#
only とか not とかがどこまでにかかるのかって、感覚的に日本語とちょっと違いますよね。
2009/07/18 09:19:23 UTCPocket
#
質問です、
#
Gaucheで起動時に自動的にカレントディレクトリを
#
load-pathに追加するにはどうすれば良いのでしょうか?
#
.gauchercで
#
(use file.util)
#
(add-load-path (current-directory))
#
とやろうかと思いましたが、
#
WARNING: couldn't load gauche.interactive
#
などの警告が出てしまいますので、
#
正しいやり方が有ればご教授ください。
2009/07/18 09:50:06 UTCPocket
#
Gaucheの起動オプションに-I .をつける事で行けそうです。
#
ありがとう御座いました。
2009/07/18 10:52:23 UTC(び)
#
REPLの中ではよく(push! *load-path* ".")なんてやっちゃいますね
2009/07/18 12:29:59 UTC齊藤
#
Boehm GC を Mingw で pthread 対応で動かすために色々と弄ったりしたけど、よく見ると別の #ifdef の範囲にほとんど同等の処理が書いてあった。
#
結局は configure.ac だけちょっと弄ればビルドできることを発見。
#
*** configure.ac	Sat Jul 18 21:23:49 2009
--- configure.ac	Sat Jul 18 21:06:55 2009
***************
*** 159,162 ****
--- 159,168 ----
  	win32_threads=true
  	;;
+      *-*-mingw*)
+ 	AC_DEFINE(GC_WIN32_PTHREADS)
+ 	AC_DEFINE(THREAD_LOCAL_ALLOC)
+ 	THREADDLLIBS="-lpthreadGC2"
+ 	win32_threads=true
+ 	;;
       *-*-darwin*)
  	AC_DEFINE(GC_DARWIN_THREADS)
#
とりあえずこれでテストは通る。
2009/07/18 13:00:39 UTCshiro
#
@齊藤 もしよければ、mingw+pthreadビルド手順を(pthread-win32のビルドも含めて)wilikiあたりにまとめておいて頂けると後々便利かも
2009/07/18 13:30:05 UTC齊藤
#
了解しました。
#
pthread はバイナリ配布のに差し替えても問題ないようだったので、とりたててすることはなさそうです。
2009/07/18 13:34:26 UTC齊藤
#
と、言うわけであとはいよいよ Gauche 自体ということになりますね。 試行錯誤でごちゃごちゃになってるんですが、ソースコードそのものに手を入れる必要があったのは vm.c と threads.c だけだったように思います。
#
makefile や configure を直接書換えたりもしたのでキッチリしたやり方にするのはちょっと面倒かも。
#
makefile はともかく autoconf の使い方とかあんまりわかってなかったりするので。
2009/07/18 13:41:16 UTCshiro
#
makefileをいじる必要があるのはpthread-win32をリンクしたりするから?
2009/07/18 13:42:33 UTC齊藤
#
そうです。 -lpthread でなく -lpthreadGC2 にした方がいいみたい(?) だったりとかよくわからないルールがあるらしくて。
#
あと、 -mthreads オプションも必要ですね。
2009/07/18 13:44:27 UTCshiro
#
そうかあ。mingw + pthread-win32でうまく動くなら、もうmingwビルドではpthread-win32は必要ってことで決め打ちにしちゃってもいいとは思ってます (「mingw/pthreadあり」と「mingw/pthreadなし」を両方サポートする必要はないと)。
#
あーでも配布するときに面倒なのかな? 同じディレクトリにDLLを入れとけば動くんでしたっけ。(昔のwindowsはそうだったけど、最近ややこしいみたいなので…)
2009/07/18 13:46:21 UTC齊藤
#
少なくとも XP までは同じディレクトリに入れれば大丈夫なはずです
#
Boehm GC を落してきて普通にビルドすると libgc.a が出来るんですけど、 Gauche 同梱のやつだと .o で止まっててそのままリンクしてるのは単なる時間短縮ですか?
2009/07/18 13:47:54 UTCshiro
#
あれ、libgc.aを一回作ってからばらしてリンクしてると思ったけど
2009/07/18 13:47:55 UTC齊藤
#
どうも pthread を有効にしたことで gauche-sdl がちゃんと動かないみたいなんです。
#
あれ? 一旦作ってるんですか。 最終成果が *.o になってるみたいだったんで止めてるのかと思った。
2009/07/18 13:49:18 UTCshiro
#
ああ違う。gc以下をビルドした時点で*.oができてるはずだからそれを直接リンクしてたんだ。
#
依存関係は、libgc.laが出来てるかどうかをみてます。
#
これはlibtoolがやることなので、mingwでlibgc.laが出来たときにlibgc.aも出来てるかどうかはよくわからない。
2009/07/18 13:52:49 UTC齊藤
#
あと、 glint もテスト中に落ちるんで、どこがどうなってるのかわかりませんが、まだ充分に信頼できる状況とは言えないと思います。
#
*.o を直接リンクすることには何か意図が?
2009/07/18 14:03:09 UTC齊藤
#
gauche-sdl に関してはこれのビルドで何か指定をまちがえてスレッドセーフになってないとかがあるかもしれませんが、glint は Scheme 内のことなのでもうちょっと慎重に見る必要があるかもしれません。
2009/07/18 14:06:31 UTCshiro
#
*.oを直接リンクするのは、Gaucheはboehm gcのビルドにオプションを付け足したりしているので、独立したlibgc.aとかlibgc.soにしてしまうと「boehm gc」としてシステムにインストールされてるライブラリとぶつかる可能性があるって理由です。
2009/07/18 14:07:54 UTC齊藤
#
なるほど。 納得しました。
2009/07/18 14:09:34 UTCshiro
#
glintが落ちるのは確かに心配ですね。Gauche自身のテストは、特にスレッドまわりについては十分とは言えないので。
2009/07/18 14:12:43 UTC齊藤
#
ただ、逆に再現率100%なので、再現条件は探りやすそうです。