jhcをビルドする
環境:Mac OS X 10.8.2, GHC 7.4.2
jhcはだいたい下記の記事に書いてあるとおりなんですが(autoreconfやaclocalが無い時はautoconfとautomakeをMacPortsとかでインストールするとたぶん大丈夫)、いろいろ引っかかりましたので。
簡約!λカ娘(4)の紹介とjhcのすゝめ - Metasepi
darcsは公式サイトから落としてくる。
Darcs - Download Darcs
バイナリで配布されているので、解凍してパスの通ったディレクトリに置くだけ。
で、いざやってみると、
% darcs get http://repetae.net/repos/jhc % cd jhc % autoreconf -i % ./configure % make (略) DrIFT src/C/FFI.hs -o drift_processed/C/FFI.hs make: DrIFT: No such file or directory make: *** [drift_processed/C/FFI.hs] Error 1
という感じになる。DrIFTとはなんぞや。
cabalで探すとそれらしいのが見つかる。
% cabal list DrIFT [jhc] * DrIFT-cabalized Synopsis: Program to derive type class instances Default available version: 2.2.3.2 Installed versions: [ Unknown ] Homepage: http://repetae.net/computer/haskell/DrIFT/ License: BSD3 * pugs-DrIFT Synopsis: DrIFT with pugs-specific rules. Default available version: 2.2.3.20120717 Installed versions: 2.2.3.20120717 Homepage: http://pugscode.org/ License: BSD3
よくわからないけどDrIFT-cabalizedはインストールできないし、pugs-DrIFTは違うものっぽい。
けどもサイトの方にソースアーカイブがおいてあるので、それを取ってきて自分でビルドすればいいじゃないということになる。
http://repetae.net/computer/haskell/DrIFT/drop/
% wget http://repetae.net/computer/haskell/DrIFT/drop/DrIFT-2.2.3.tar.gz % tar xvzf DrIFT-2.2.3.tar.gz % cd DrIFT-2.2.3 % make Making all in src make all-am /usr/bin/ghc -i. -i. -hidir . -odir . -o DrIFT --make ./DrIFT.hs DrIFT.hs:20:18: Could not find module `System' It is a member of the hidden package `haskell98-2.0.0.1'. Use -v to see a list of the files searched for. make[2]: *** [DrIFT] Error 1 make[1]: *** [all] Error 2 make: *** [all-recursive] Error 1
うえええ
どうもhaskell98に依存してるっぽくて、cabalにあったDrIFT-cabalizedがインストールできないのもここ関係のもよう。
仕方ないのでcabalファイルを書く。こんなものでよかろう。
DrIFT.cabal
name: DrIFT version: 2.2.3 build-type: Simple cabal-version: >=1.8 executable DrIFT main-is: DrIFT.hs build-depends: haskell98 hs-source-dirs: src
これを使ってビルドする。
% cabal-dev build Building DrIFT-0.1.0.0... Preprocessing executable 'DrIFT' for DrIFT-0.1.0.0... [ 6 of 23] Compiling GenUtil ( src/GenUtil.hs, dist/build/DrIFT/DrIFT-tmp/GenUtil.o ) src/GenUtil.hs:486:18: Could not deduce (Show a) arising from a use of `st' from the context (Integral a) bound by the type signature for showDuration :: Integral a => a -> String at src/GenUtil.hs:(486,1)-(491,28) Possible fix: add (Show a) to the context of the type signature for showDuration :: Integral a => a -> String In the first argument of `(++)', namely `st "d" dayI' In the expression: st "d" dayI ++ st "h" hourI ++ st "m" minI ++ show secI ++ "s" In an equation for `showDuration': showDuration x = st "d" dayI ++ st "h" hourI ++ st "m" minI ++ show secI ++ "s" where (dayI, hourI) = divMod hourI' 24 (hourI', minI) = divMod minI' 60 (minI', secI) = divMod x 60 st _ 0 = "" st c n = show n ++ c
これは普通にコンパイルエラーを直してしまう。。
src/GenUtil.hs:486行目のshowDuration関数のシグネチャでクラス制約を付け足せばよい。
- show Duration :: Integral a => a -> String + show Duration :: (Integral a, Show a) => a -> String
あとは普通にビルドできます(たぶん)。
% cabal-dev build ... Linking dist/build/DrIFT/DrIFT
出来上がったものをパスが通ったディレクトリに置けばOK。
jhcに戻ってビルドする。
% make ... pandoc jhc_man.mkd -s -f markdown -t man -s -o jhc.1 make[2]: pandoc: No such file or directory make[2]: *** [man] Error 1 rm jhc_man.mkd options.mkd make[1]: *** [jhc.1] Error 2 make: *** [all] Error 2
おおぅpandocさん……。
あとはどうにかしてpandocをインストールして、sudo make installで終わりです。