Gauche:MacOSX
Intel Mac (Darwin 9.0.0, Mac OS 10.5 Build 9A581 / Xcode 3.0)
えんどう 2007/10/27 10:04:00 PDT Gauche CVS HEADをビルドすると以下のエラーが発生します。Boehm GC関係?
for d in gc src lib ext doc; do (cd $d; make all); done Making all in doc make[2]: Nothing to be done for `all'. Making all in include make[2]: Nothing to be done for `all'. source='darwin_stop_world.c' object='darwin_stop_world.lo' libtool=yes \ DEPDIR=.deps depmode=none /bin/sh ./depcomp \ /bin/sh ./libtool --mode=compile gcc -DPACKAGE_NAME=\"gc\" -DPACKAGE_TARNAME=\"gc\" -DPACKAGE_VERSION=\"6.8\" -DPACKAGE_STRING=\"gc\ 6.8\" -DPACKAGE_BUGREPORT=\"Hans.Boehm@hp.com\" -DGC_VERSION_MAJOR=6 -DGC_VERSION_MINOR=8 -DPACKAGE=\"gc\" -DVERSION=\"6.8\" -DGC_DARWIN_THREADS=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DSILENT=1 -DNO_SIGNALS=1 -DNO_EXECUTE_PERMISSION=1 -DALL_INTERIOR_POINTERS=1 -DJAVA_FINALIZATION=1 -DGC_GCJ_SUPPORT=1 -DATOMIC_UNCOLLECTABLE=1 -DDONT_ADD_BYTE_AT_END=1 -DLARGE_CONFIG=1 -I./include -fexceptions -g -O2 -fexceptions -c -o darwin_stop_world.lo darwin_stop_world.c rm -f .libs/darwin_stop_world.lo gcc -DPACKAGE_NAME=\"gc\" -DPACKAGE_TARNAME=\"gc\" -DPACKAGE_VERSION=\"6.8\" "-DPACKAGE_STRING=\"gc 6.8\"" -DPACKAGE_BUGREPORT=\"Hans.Boehm@hp.com\" -DGC_VERSION_MAJOR=6 -DGC_VERSION_MINOR=8 -DPACKAGE=\"gc\" -DVERSION=\"6.8\" -DGC_DARWIN_THREADS=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DSILENT=1 -DNO_SIGNALS=1 -DNO_EXECUTE_PERMISSION=1 -DALL_INTERIOR_POINTERS=1 -DJAVA_FINALIZATION=1 -DGC_GCJ_SUPPORT=1 -DATOMIC_UNCOLLECTABLE=1 -DDONT_ADD_BYTE_AT_END=1 -DLARGE_CONFIG=1 -I./include -fexceptions -g -O2 -fexceptions -c darwin_stop_world.c -fno-common -DPIC -o .libs/darwin_stop_world.lo darwin_stop_world.c: In function 'GC_push_all_stacks': darwin_stop_world.c:107: error: 'i386_thread_state_t' has no member named 'esp' darwin_stop_world.c:109: error: 'i386_thread_state_t' has no member named 'eax' darwin_stop_world.c:110: error: 'i386_thread_state_t' has no member named 'ebx' darwin_stop_world.c:111: error: 'i386_thread_state_t' has no member named 'ecx' darwin_stop_world.c:112: error: 'i386_thread_state_t' has no member named 'edx' darwin_stop_world.c:113: error: 'i386_thread_state_t' has no member named 'edi' darwin_stop_world.c:114: error: 'i386_thread_state_t' has no member named 'esi' darwin_stop_world.c:115: error: 'i386_thread_state_t' has no member named 'ebp' make[2]: *** [darwin_stop_world.lo] Error 1 make[1]: *** [all-recursive] Error 1 make[1]: *** No rule to make target `../gc/libgc.la', needed by `libgauche.dylib'. Stop.
- Shiro(2007/10/27 11:14:25 PDT): これはBoehm GCの対応待ちですね。あるいは7.0系列だと
解決されてるのかもしれませんが。
もしかすると64bit対応でeaxがraxになった、とかいう話だったりするのかな? それなら
7.0系列でいくつかパッチが出てたような。
もしよければ試しにBoehm GC 7.0を落としてそれ単体でビルド/テストしてみてください。
(Gaucheにそのままdrop-inで置き換えることはできませんが)。
7.0はかなり色々パッチが出ていたようなので、Gaucheはできれば7.1を待ちたいと
思います。Gauche-0.8.12は現行通り6.8で行きたいと思ってるんですが、
Leopardでコンパイルできないのはきつい?
- えんどう(2007/10/27 19:31:40 PDT) Boehm CG 7.0単体ではビルドできます。対応していただければうれしいですが、Boehm GC 7.1待ちでもよいです。
- naoya_t(2007/10/27 15:50:58 PDT): 昨夜Leopardをインストールしたので試してみました。
Boehm GC 7.0単体ではビルド/テスト共に通ります。
Gaucheがビルドできないのはi386_thread_state_tの定義が変わっている(eg. eax → __eax)のが原因のようなので、
./configure CFLAGS="-D__DARWIN_UNIX03=0"
とすれば以前と同じ定義になり、Boehm GC 6.8のままでもビルド/テストを通ります。
Boehm GC 7.xを利用するのであれば- GC_PTRが廃止されたのでvoid *に置き換えるか自前で定義する
- GC_MALLOC_WORDS, GC_MALLOC_ATOMIC_WORDSが第3の引数 tiny_fl ("tiny" freelist) を取るようになったので、src/gauche/memory.h のSCM_MALLOC_WORDS, SCM_MALLOC_ATOMIC_WORDS の定義を書き換える
などの変更が必要ですね。
- Shiro(2007/10/27 18:36:21 PDT): おおすばらしい。それなら最悪、
注意書きを加えるだけでGauche-0.8.12はGC6.8でいけますね。
gc/configureで自動検出が出来ればいいんですが、 Leopardで
configureのホスト検出結果がどうなっているかわかりますか?
(i386-macosx-darwin10.5みたいな文字列。Gaucheがコンパイルできたなら
gauche-config --arch で見られます)。
それがわかったら、gc/configure.inの147行目付近にこんな感じで追加してみて、
トップレベルで./DIST gen; ./configure; make をやってみてもらえますか。
*-*-cygwin*) AC_DEFINE(GC_WIN32_THREADS) ;; + *-*-darwin10.5) + CFLAGS="$CFLAGS -D__DARWIN_UNIX03=0" + AC_DEFINE(GC_DARWIN_THREADS) + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + fi + ;; *-*-darwin*) dnl [SK] This makes single-thread execution very slow, so disable by default. dnl The setting must match with src/gauche/memory.h dnl AC_DEFINE(THREAD_LOCAL_ALLOC)
- えんどう(2007/10/27 21:39:39 PDT)i686-apple-darwin9.0.0だったので「*-*-darwin9.0.0」としたところビルドできました。
- Shiro(2007/10/27 22:28:17 PDT): Tigerは"darwin8.*" になってるか誰か確認してもらえますか? そしたら "*-*-darwin9.*" でマッチかけられるんで。
- Shiro(2007/10/28 00:18:45 PDT): というかTigerでCFLAGSに-D__DARWIN_UNIX03=0つけても
たぶん影響無いよね? *-*-darwin* のとこに無条件にフラグ入れても大丈夫なんじゃないかな。
というわけでCVS HEADに変更を入れたので、LeopardとTigerで試してもらえると
ありがたいです。
- えんどう(2007/10/28 06:37:24 PDT) Leopardでは問題なしです。
- naoya_t(2007/10/28 08:26:01 PDT) darwin9.* はLeopard(とiPhone)からのようですね。cf. en.wikipedia
- えんどう(2007/10/28 06:37:24 PDT) Leopardでは問題なしです。
- Shiro(2007/10/28 13:54:53 PDT): まず大丈夫だと思うんだけど、今のCVS HEADで
TigerでもOKかどうか確かめられる人いますか? みんなもうLeopardにしちゃった?
- えんどう(2007/10/28 21:34:17 PDT) iBook G4 (Darwin 8.10.0, Mac OS X 10.4.10 Build 8R218 / Xcode 2.0) 問題ありません。
- naoya_t(2007/10/28 22:38:21 PDT) PowerBook G4 (Darwin 8.10.0, Mac OS X 10.4.10 (8R218) / Xcode 2.2) を借りてテストしてみました。
for d in gc src lib ext doc; do (cd $d; make all); done Making all in doc make[2]: Nothing to be done for `all'. Making all in include make[2]: Nothing to be done for `all'. make[2]: Nothing to be done for `all-am'. GAUCHE_LOAD_PATH="" GAUCHE_DYNLOAD_PATH="" gosh -l./preload -I../src -I../lib ./geninsn *** ERROR: unbound variable: s? Stack Trace: _______________________________________ 0 options 1 (s? :squeeze #f) At line 60 of "../lib/text/tr.scm" 2 (d? :delete #f) At line 59 of "../lib/text/tr.scm" 3 options 4 options 5 (string-tr (x->string name) "-" "_") At line 52 of "././geninsn" 6 (c-insn-name name) At line 1 of "(input string port)" 7 (x->string (c-insn-name name)) [unknown location] 8 (string-append " " (x->string (c-insn-name name)) ",") [unknown location] 9 (cgen-extern (string-append " " (x->string (c-insn-name name)) ", ... At line 265 of "././geninsn" 10 proc 11 (map-with-index (lambda (count insn) (match insn ((_ name num-para ... At line 261 of "././geninsn" make[1]: *** [gauche/vminsn.h] Error 70
のようなエラーが出ます。ちなみにこのマシンでGauche-0.8.11はビルド/テスト共に成功します。 - Shiro (2007/10/28 22:45:11 PDT): あれ、そのエラーは見たことあるな。 インストールされているGaucheのバージョンも0.8.11ですか? 古いGaucheでCVS版を処理しようとした時に出るものだったような気がします。
- Shiro (2007/10/29 00:21:22 PDT): インストールされているGauche、もしくはPATHで 見えるGaucheがlet-keywordsを知らないバージョン (0.8.9以前) ではないですか?
- naoya_t (2007/10/29 00:30:48 PDT): 去年まで自分が使っていたノートなのでGaucheが入っているのですが、バージョンは(さっき0.8.11をビルド〜インストールするまでは)0.8.6でした。で、0.8.11が動く状態でCVS HEADを改めてビルドしたらビルド/テスト共うまく行きました。
- Shiro(2007/10/29 00:37:47 PDT): ありがとうございます。0.8.12はこれで行こうと思います。
Intel Mac (Darwin 8.7.1, Mac OS 10.4.7 Build 8J2135a / Xcode-2.4)
び(2006/08/10 22:46:27 PDT): WWDCの開催に合わせて公開されたXcode-2.4をインストールしてGaucheをビルドすると、Boehm-gcのテストが失敗します。
gnumake check-TESTS thread_get_state failed FAIL: gctest ================================== 1 of 1 tests failed Please report to Hans.Boehm@hp.com ================================== gnumake[3]: *** [check-TESTS] Error 1 gnumake[2]: *** [check-am] Error 2 gnumake[1]: *** [check-recursive] Error 1
Gaucheそのもののmake checkは通るのですが、インストールしてmake install-checkすると、threadsのテストでやはり thread_get_state failed で落ちます。Xcode-2.3に戻して再ビルド/インストールするとこの現象は起きません。Xcode-2.4に含まれているGCCは
% gcc --version i686-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5363) Copyright (C) 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
です。しばらくはXcode-2.3のままにしておいた方がよさそうです。
- び(2006/08/12 01:08:09 PDT): どうやら64bit対応した際のヘッダファイルの変更にBoehm-gcが対応していないのが原因のようです。どう直すのがスマートか思案中。誰かがやってくれるのを待っているとも言う(笑)。
- び(2006/10/26 04:28:15 PDT): 待ってた甲斐がありました(笑)。Boehm-gcのメーリングリストに、この問題を解決するパッチが流れました。現在のCVS HEADのgc(6.7)でも当たらなくはありませんが、一応gcを6.8に上げるパッチを作ってありますので、これを当ててから、上記のパッチを当てると、Xcode-2.4をインストールした環境でも問題なくmake checkが通るようになります。
- び(2006/10/31 21:40:22 PST): 先ほどXcode 2.4.1が出ているのに気づいたので、さっそくインストールして試してみました。Gauche-gc6.7-gc6.8.patch.gz+gc6.8-xcode2.4.patchで無問題でした。後者のパッチについては、MLでHansが好意的なリプライを返していたので、多分次のリリースには取り込まれるんじゃないかな。
Intel Mac (Darwin 8.5.2, Mac OS 10.4.5 Build 8H1455)
Gauche:NetBSDにあったびさんのBoehm GC 6.7へのパッチをGauche CVS HEADにあてたらmake checkすべてpassしました。
Intel Mac (Darwin 8.5.1, Mac OS 10.4.5)
http://www.hpl.hp.com/hosted/linux/mail-archives/gc/2006-February/001160.html
を Gauche-0.8.6 に当てたら動いた。 Gauche-gl は configure.in の powerpc-apple-darwin* を *-apple-darwin* に置き換えて autoconf し直したら動きました。
Tiger
CVS HEADはとりあえず問題なくmakeもmake checkも通りました。(2005/04/30 17:03:21 PDT)
- と思ってたんですがごめんなさい。GCのテストでエラーが出ていたのを見落としてました。
creating gctest make check-TESTS Switched to incremental mode Emulating dirty bits with mprotect/signals FAIL: gctest =================== 1 of 1 tests failed =================== make[3]: *** [check-TESTS] Error 1 make[2]: *** [check-am] Error 2 make[1]: *** [check-recursive] Error 1
-この問題は解決済みの模様
- び(2005/09/01 17:32:32 PDT) gc/doc/README.darwinの先頭部分を読むとわかりますが、
6.5 update: I disabled incremental GC on Darwin in this version, since I couldn't get gctest to pass when the GC was built as a dynamic library. Building with -DMPROTECT_VDB (and threads) on the command line should get you back to the old state. - HB
とあるので、ひっかかっていた機能を殺しただけのようです。しかも現状のGaucheはlibgcをスタティックリンクしているので、いずれにしてもGaucheでは問題にならなかったようです。
Pthreads
ねるWiki:ねる Boehm GC を Darwin の pthreads上でも動くように hack してみました。パッチはこちら。テストはすべて通りますが、運用していないので安定するかどうかは良くわかりません。
- Shiro: Gauche-0.6.8に取り込まれています。
Boehm GC が新バージョンになったため(?)、0.8.3をpthreads 上で使おうとすると以下のようなエラーがでてリンクできません。
ld: Undefined symbols: _GC_darwin_register_mach_handler_thread /usr/bin/libtool: internal link edit command failed make[1]: *** [libgauche.dylib] Error 1
- Shiro (2005/02/11 00:03:57 PST): --enable-threads=pthreadsはつけてる、ってことですよね? OSのバージョンわかりますか? sf.netのコンパイルファームのDarwin 5.5上では問題なく動作します。
- 10.3.8 (Darwin 7.8.0) です。さっき試してみたところ--enable-threads=pthreads をつけなくても同様のエラーが起こるようです。(7.7.0 の頃は--enable-threads=pthreadsなしではできた気がするのですが)
- Shiro: Boehm GC 6.3 になってから、MacOSXでは--enable-threads=pthreadsが
必須になっています。問題のエラーはgc/以下のコンパイル時にGC_DARWIN_THREADSが
定義されていないと起きるので、configure時に何か問題が発生しているのかも
しれません。とりあえず、時間があったら次のことを試してみて下さい。
- まっさらの状態からconfigure+makeして、gc/ 以下のコンパイル時にコンパイラオプションに -DGC_DARWIN_THREADS がついているか確認 (ついてなければconfigure.inの問題)
- ソースのトップディレクトリでの ./config.guess の出力 (もしかすると "*-*-darwin*" にマッチしない形式になっているのかも)
- -DGC_DARWIN_THREADS がついていませんでした。./config.guess の結果はpowerpc-apple-darwin7.8.0 で問題ないようです。
- あ、こちらのミスでした--enable-threads=pthreads とするべきところを --enable-pthread としてました。
ソケット関係
- sockaddr_in6
2003/11/16 21:49:40 PST IPv6を有効にしてconfigure && makeすると、make checkで以下のようなエラーが発生します。
Testing net ... failed. discrepancies found. Errors are: test sockaddr_in6: expects #t => got #f
57行目の(sockaddr-name addr)が[2001:200::8002:203:47ff:fea5:3085]:23を返すのが原因です。 確かにNetBSDなどは[2001:200:0:8002:203:47ff:fea5:3085]:23を返しますが、OS Xが返す値は間違いと言ってしまっていいのかちょっと疑問が残ります。しばらく前のCVS HEADからこうなっていたと思います。10.2.8、10.3、10.3.1のいずれでも発生します。
- OS X間違ってないです。チェックがきつすぎるのが悪いです。直しときます。あと、私はあんまりここを見てないので、MLに投げるようにしてもらえるとうれしいです。
- 了解しました。MLはsubscribeしてなかったのですが、あとでしておきます。
- socklen_t
--enable-ipv6をつけてconfigure && make すると、ext/net/net.c がコンパイルエラーとなります。 /usr/include/sys/socket.h を眺めた結果、'CPPFLAGS=-D_BSD_SOCKLEN_T_=u_int' をつけて configure すれば問題なくmakeでき、echo-server.scm に telnet ::1 3131 で接続できることはわかりました。ただ、対処の仕方がこれで正当なのかどうかはちょっと分かりません。
- Shiro(2003/10/05 14:11:24 PDT): この問題、0.7.2でも出ますか?
- CPPFLAGS=-D_BSD_SOCKLEN_T_=u_intなしで問題なくmakeできるようになりました。
ビルド関係
- autoconf, aclocal
MacOSX 付属のものは -I (大文字のアイ)のかわりに -l (小文字のエル)を使う。(OS10.2 以前) OS10.3 では aclocal, autoconf は標準でついてきます。 aclocal はデフォルトで /usr/share/aclocal を見に行くので、Gauche の configure で --prefix=/usr とかやらない限り gauche.m4 を見つけてくれません。 -I オプションで幸せになれます。 なお autoconf, aclocal は CVS 上の最新版を追いかけたり、 Gauche の拡張ライブラリを開発したりする人が使うツールです。 普通にインストールして使うぶんにはそれがどうなってようが全く影響ありません。 ご安心ください。
- texi2html
MacOSX 付属のもののバージョンは 1.57 でオプションが微妙に違う。 texi2html -number -menu -split_node gauche-refj.texi とやるとウェブ版と近い出力になる。
- ダイナミックロード
Fink Project の dlcompat ライブラリを使う。(OS10.2 以前) dlcompat は OpenDarwin のプロジェクトに移動しました。ライセンスはBSDラインセンス近似となります。 OS10.3 からは標準でこのライブラリがついてくるようになり特に何もしなくてもよくなりました。
拡張ライブラリ
- Gauche-gl
ウインドウを開くプログラムはアプリケーション形式 *.app にしないとキーボード入力ができなかったり、うれしく無い。 正式なやり方ではないとおもうけど、一例
- Gauche-gtk
FinkのGtkを使うと動く。でも、フォントが変更できなくて、漢字を見えない。Finkの問題でしょうか。
- Gauche-sdl
FinkのSDLコンパイルするが、セグメンテーションフォルトが出る。まだネイティブのSDLでコンパイルできません。
あとは普通に ./configure && make でオッケイです。 iconv と gdbm はまだ試してません。
fink で gdbm と iconv を install して
./configure --with-local=/sw --with-rpath=/sw/lib --with-iconv=/sw --enable-multibyte=sjis make
で、iconv と gdbm が使えています。 -- nel
0.6.8+dlcompat最新版
どうも、dlcompatの新しいやつでは、拡張ライブラリのロードに失敗する ようです。Cのシンボル名の頭に '_' をつけるかつけないかに違いがあるみたい。 src/load.c 中の "_Scm_Init_" という定数の頭の'_' を取って下さい。 この問題は0.7では修正されます。(2003/05/25 14:44:26 PDT)
MacOSX について
- http://developer.apple.com/macosx/ 開発者向けリソース
- http://developer.apple.com/techpubs/macosx/macosx.html ドキュメンテーション