svn-trunk をビルドしてみた
HACKING によると ./DIST gen すればよさげ。
今のところここではまってる。
何かミスってるな.
$ svn info パス: . URL: https://gauche.svn.sourceforge.net/svnroot/gauche/Gauche/trunk リポジトリのルート: https://gauche.svn.sourceforge.net/svnroot/gauche リポジトリ UUID: c205566b-fb4e-0410-ab5c-8f0660156277 リビジョン: 6833 ノード種別: ディレクトリ 準備中の処理: 特になし 最終変更者: shirok 最終変更リビジョン: 6833 最終変更日時: 2009-11-12 15:27:41 +0900 (木, 12 11 2009) $ make for d in gc src lib ext doc; do (cd $d; make all); done make[2]: Nothing to be done for `all-am'. GAUCHE_LOAD_PATH="" GAUCHE_DYNLOAD_PATH="" gosh -l./preload -I../src -I../lib ./builtin-syms.scm gosh: "error": Compile Error: Compile Error: wrong number of arguments for #<closure make-cgen-type> (required 7, got 6) "../lib/gauche/cgen.scm":45:(define-module gauche.cgen (extend g ... "././builtin-syms.scm":9:(use gauche.cgen) make[1]: *** [gauche/builtin-syms.h] Error 1 make[1]: Nothing to be done for `all'.
ミスではないらしい。
でも compile-error て出るということは、マクロか、やっぱり。
マクロのデバッグ方法あったかな。
追記
コメントで指摘してもらったとおり、HACKING に書いてあるとおりにしなければいけませんでした。
ということで 0.8.14 を /usr/local にインストールしてビルドすると、こうなります。
ちなみに configure に CFLAGS="-arch i386 -arch x86_64" DFLAGS="-arch i386 -arch x86_64" とか付けてます。
$ make すっごい省略 /bin/sh ./genconfig GAUCHE_LOAD_PATH="" GAUCHE_DYNLOAD_PATH="" gosh -l./preload -I../src -I../lib ./builtin-syms.scm GAUCHE_LOAD_PATH="" GAUCHE_DYNLOAD_PATH="" gosh -l./preload -I../src -I../lib ./geninsn gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I./../gc/include -I/usr/local/include -I/usr/local/include -no-cpp-precomp -arch i386 -arch x86_64 -DSCM_TARGET_X86_64 -no-cpp-precomp -fPIC -fno-common -fomit-frame-pointer -c core.c In file included from gauche.h:57, from core.c:37: ./gauche/float.h:96: error: width of ‘mant’ exceeds its type lipo: can't figure out the architecture type of: /var/folders/Yc/YcO1TWhiFW8Ag6O7LY688k+++TI/-Tmp-//ccIENhXy.out make[1]: *** [core.o] Error 1 make[1]: Nothing to be done for `all'.
src/gauche/float.h
ここですかね。
73 typedef union { 74 double d; 75 struct { 76 #ifdef DOUBLE_ARMENDIAN 77 /* ARM's mixed endian. TODO: what if we have LP64 ARM? */ 78 unsigned long mant0:20; 79 unsigned int exp:11; 80 unsigned int sign:1; 81 unsigned long mant1:32; 82 #else /*!DOUBLE_ARMENDIAN*/ 83 #ifdef WORDS_BIGENDIAN 84 #if SIZEOF_LONG >= 8 85 unsigned int sign:1; 86 unsigned int exp:11; 87 unsigned long long mant:52; 88 #else /*SIZEOF_LONG < 8*/ 89 unsigned int sign:1; 90 unsigned int exp:11; 91 unsigned long mant0:20; 92 unsigned long mant1:32; 93 #endif /*SIZEOF_LONG < 8*/ 94 #else /*!WORDS_BIGENDIAN*/ 95 #if SIZEOF_LONG >= 8 96 unsigned long mant:52; 97 unsigned int exp:11; 98 unsigned int sign:1; 99 #else /*SIZEOF_LONG < 8*/ 100 unsigned long mant1:32; 101 unsigned long mant0:20; 102 unsigned int exp:11; 103 unsigned int sign:1; 104 #endif /*SIZEOF_LONG < 8*/ 105 #endif /*!WORDS_BIGENDIAN*/ 106 #endif /*!DOUBLE_ARMENDIAN*/ 107 } components; 108 } ScmIEEEDouble;
sizeof(long) が 8 なのに unsigned long で 52 bit 取れないことになってるのかな…
とりあえず long long にしたらコンパイル通ります。
ということで svn trunk の gauche が i386 と x86_64 なバイナリとしてビルドできました。
あとはこれをどうにかして Portfile に仕込めば...