2009年11月21日

Snow Leopard に GHC 6.10.4 のインストールから cabal-install の動作まで

GHC は以下から取得して普通にインストールする。

http://www.haskell.org/ghc/download_ghc_6_10_4.html#macosxintel

このままだと ghc が完全には 64bit に対応していないため上手く動作しません。以下の変更をします。

/usr/bin/ghc を vi 等で開きます。内容は以下になっています。

#!/bin/sh

exec /Library/Frameworks/GHC.framework/Versions/610/usr/lib/ghc-6.10.4/ghc -B/Library/Frameworks/GHC.framework/Versions/610/usr/lib/ghc-6.10.4/. -dynload wrapped ${1+"$@"}

シェルスクリプトです。

これに -optl-arch\ i386 -optc-m32 -opta-m32 -optl-m32 フラグを追加することで 32bit 固定設定にします。

#!/bin/sh

exec /Library/Frameworks/GHC.framework/Versions/610/usr/lib/ghc-6.10.4/ghc -optl-arch\ i386 -optc-m32 -opta-m32 -optl-m32 -B/Library/Frameworks/GHC.framework/Versions/610/usr/lib/ghc-6.10.4/. -dynload wrapped ${1+"$@"}

また /usr/bin/runhaskell も同様のフラグを付与しておきます。

#!/bin/sh
exec /Library/Frameworks/GHC.framework/Versions/610/usr/lib/ghc-6.10.4/runghc -f /Library/Frameworks/GHC.framework/Versions/610/usr/bin/ghc ${1+"$@"}
#!/bin/sh
exec /Library/Frameworks/GHC.framework/Versions/610/usr/lib/ghc-6.10.4/runghc -f /Library/Frameworks/GHC.framework/Versions/610/usr/bin/ghc -optl-arch\ i386 -optc-m32 -opta-m32 -optl-m32 ${1+"$@"}

基本的にはこれで問題ありませんが このままだと cabal-install tool が動作しません。

cabal-install が使えないと Perl で cpan が使えないのと同じですから GHC の威力がかなりへってしまいます。

cabal-install は HTTP パッケージと zlib パッケージに依存していますのでこの二つをインストールします。

ここでは ユーザディレクトリにインストールします。 $HOME/.cabal 以下にすべてのライブライがインストールされます。

curl -O http://hackage.haskell.org/packages/archive/HTTP/4000.0.8/HTTP-4000.0.8.tar.gz
tar xvfa HTTP-4000.0.8.tar.gz
cd HTTP-4000.0.8
runhaskell Setup.lhs configure --ld-options="-arch i386" --gcc-option=-m32 --user
runhaskell Setup.lhs build
runhaskell Setup.lhs install
cd ../
curl -O http://hackage.haskell.org/packages/archive/zlib/0.5.2.0/zlib-0.5.2.0.tar.gz
tar xvfz zlib-0.5.2.0.tar.gz
cd cd zlib-0.5.2.0
runhaskell Setup.hs configure -p —ld-options="-arch i386" —gcc-option=-m32 --user
runhaskell Setup.hs build
runhaskell Setup.hs install
curl -O http://haskell.org/cabal/release/cabal-install-0.6.2/cabal-install-0.6.2.tar.gz
tar xvfz cabal-install-0.6.2.tar.gz
cd cabal-install-0.6.2
runhaskell Setup.hs configure -p —ld-options="-arch i386" —gcc-option=-m32 --user
runhaskell Setup.hs build
runhaskell Setup.hs install
# cabal のデータベースを更新します
~/.cabal/bin/cabal update

とりあえず動作確認のために pandoc をインストールしてみます。

pandoc を flags=highlighting でインストールします。pcre-light に依存しており、 pcre-light は pcre に依存しています。 ここでは pcre.h は fink の物をとりあえず利用しています。

あと日本語というか UTF-8 等を便利にあつかうために他にもいろいろ入れています。

~/.cabal/bin/cabal install utf8-string
~/.cabal/bin/cabal install zip-archive
~/.cabal/bin/cabal install pcre-light --extra-include-dirs=/sw/include
~/.cabal/bin/cabal install pandoc --flags=highlighting

エラーなくインストールできれば成功です。~/.cabal/bin に PATH を通しておくと便利です。

hg st や hg diff のColor表示

.hgrc 等に以下を記述すると全体的に色がつきます。

[extensions]
color=

これは Color Extension を設定しています。基本的にはこれでほとんどの場合で色が付与されます。

色のカスタマイズをしたければ .hgrc に以下のように色設定を書きます。

[color]
status.added = green bold
diff.deleted = red

細かい設定は Color Extension に記述があります。

これで hg st や hg diff で色が表示されます。

ただ hg diff などは長くなって less をしたくなるでしょうが、less -r しても色は付きません。

Mac OS X 10.6 等の場合は .bash_profile にでも以下のような alias を設定すると良いでしょう。

alias -g V="| /usr/share/vim/vim72/macros/less.sh"

以下のように利用します。

hg diff V

V を付与すると Vim の less.sh マクロの効果で色が付いて表示されます。操作感は less と同じになります。

2009年11月18日

Mac OS X での Universal Binary で ライブラリ非対応 architecture のバイナリを生成しない方法

例えば Python の easy_install や MacPorts、Fink等の自動インストール系ツールを利用した場合以下のようなエラーが発生することがあります。

ld: warning: in //usr/lib/bundle1.o, missing required architecture ppc64 in file
ld: warning: in //usr/lib/libgcc_s.10.5.dylib, missing required architecture ppc64 in file
ld: warning: in //usr/lib/libSystemStubs.a, missing required architecture ppc64 in file
ld: warning: in //usr/lib/libSystem.dylib, missing required architecture ppc64 in file
ld: symbol dyld_stub_binding_helper not defined (usually in crt1.o/dylib1.o/bundle1.o) for architecture ppc64

これはリンクしようとしているライブラリが ppc64 に対応していないにもかかわらず、ppc64対応バイナリを生成しようとするために発生しています。

この場合は 環境変数に ARCHFLAGS を設定することで回避します。

export ARCHFLAGS='-arch i386 -arch x86_64 -arch ppc'

リンクするライブラリによっては当然 ppc 非対応だったりするため ARCHFLAGS の内容を変更してください。

2009年11月11日

Mac OS X 10.6 で Goをコンパイルして動作させてみた

Google が 11/10 に新言語 Go を発表したので取り敢えず動作させてみました。

難しいことはなにもない。とりあえず 32bit でコンパイルしたけど、64bitでもコンパイル可能です。テストが一部通過しない物があるみたいですが、後で調べます。

以下の手順でコンパイルと動作確認しました。ソースの取得には Mercurial が必要です。

export GOROOT=/path/to/go
export GOOS=darwin
export GOARCH=386
hg clone -r release https://go.googlecode.com/hg/ $GOROOT
cd $GOROOT/src
./all.bash
cat >hello.go <<EOF
package main
import "fmt"
func main() {
   fmt.Printf("hello, world\n")
}
EOF
8g hello.go
8l hello.8
./8.out

この他にも基本的な物を動作させてみたけど、文法は簡単ですしライブラリもそれなりにあります。

言語的には Limbo とかの影響下にあるように見えるけど、まだちゃんとさわってないので不明です。