2010年01月19日

やったこと

  • 同じスクリプトをGaucheでもmoshでも動かそうと試行錯誤
    • cond-expandを使うにはmoshではimport文が先に必要
    • とりあえず、Gaucheで動かしたい時には最初のimportをコメントアウト、な方式で行きます
  • 途中で2つの大きな壁
    • moshをSnow Leopardで動かす →前編参照
    • c-wrapperをSnow Leopardで動かす →c-wrapperは32bitでならビルドする方法が見つかった。後述。
  • 小さな壁
    • ncurseswが文字化け → LC_ALL の値が環境依存?とりあえず6を0にしたらMacでは直ったっぽい


c-wrapperをSnow Leopardで動かす

現状のバトンはmoshのFFIを使ってncurseswを呼び出すコードになっているので、Gaucheでも同等のことをするにはGaucheの事実上の標準FFIであるc-wrapperが必要不可欠。しかしSnow Leopardでビルドできない。

結論から言うと

  • gosh, c-wrapper ともに 32bit (-arch i386) でビルドする
    • Gauche-0.9 でも大丈夫。但し CFLAGS='-arch i386' で ./configure からやり直し
  • c-wrapperのビルドには GCC 4.2ではなく GCC 4.0を使う → 訳の分からない理由により libffi がコンパイルできない為

で何とかなった。

$ CC=gcc-4.0 CXX=g++-4.0 CFLAGS='-arch i386' CPPFLAGS='-arch i386' CXXFLAGS='-arch i386' -CCASFLAGS='-arch i386' ./configure

みたいな。(実際には上記のようなスマートな方法ではなく gcc/g++ はリンクを張り替えたりとかMakefileを直接書き換えたりとか><)

src/Makefile:

...

CPPFLAGS       = -I./libffi/include -DGAUCHE_API_0_8_8 -arch i386 -x objective-c -fobjc-exceptions
LDFLAGS        = -arch i386  -framework Foundation

...

libffi/Makefile:
        mkdir -p libffi
        cd libffi; CFLAGS='-arch i386' CCASFLAGS='-arch i386' CXXFLAGS='-arch i386' ../../libffi/configure --with-pic

...

ちなみに訳のわからないエラーは /usr/include/stdlib.h の

#ifdef __BLOCKS__
int      atexit_b(void (^)(void));
void    *bsearch_b(const void *, const void *, size_t,
            size_t, int (^)(const void *, const void *));
#endif /* __BLOCKS__ */

の void (^) で怒られた。この ^ って何?

thanks!!



(23:37)

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔