環境: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で終わりです。