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 の gauchei386x86_64 なバイナリとしてビルドできました。
あとはこれをどうにかして Portfile に仕込めば...