I just replaced C->Haskell's (quite elaborate) make-based build system by a Cabal-based system. Overall, this worked quite well (but partially because I simplified some of c2hs's old structure anyway). So, here some feedback. * Having the ability to specify multiple source directories is quite important (at least for non-library packages). So, please include Cabal 1.0.1 or higher with GHC soon. * Installation is still too inflexible. In particular, the pre/post hooks (and I guess not only the installation ones) need to get the PackageDescription as an argument. Due to the lack of the PackageDescription, I had to add a ./configure mangled shell script that I invoke from the postInst hook. See http://www.cse.unsw.edu.au/~chak/repos/c2hs/Setup.hs <see appended code for postInst.sh.in - our web server won't serve it via http due to the filename> Essentially, I need to create wrapper scripts (like ghc) to pass an install-location dependent path to the main executable. (Actually, two scripts one for running the c2hs inplace in the build tree and one for after proper installation.) Wrapper scripts are really common, so ideally there should be special support for those. * There doesn't seem to be anything to handle documentation. * Maybe not really a Cabal problem, but --make with GHC on larger programs is quite tedious. When you change, say, Main.hs ghc walks through all the other modules telling you its skipping them, which takes quite a long time, only to spot a type in the change that you just makes...and then you can start looking at all the skipping messages again. It's not the skipping messages that bother me. It's how long ghc takes to figure out that it actually only needs to compile one file. This is actually the problem which bother me most at the moment. Anyway, its great to have Cabal. Manuel -=- postInst.sh.in -=- #!/bin/sh prefix=/home/chak/sandbox exec_prefix=${prefix} bindir=${exec_prefix}/bin libdir=${exec_prefix}/lib/c2hs-0.14.0 echo "Moving executable into $libdir/" /bin/sh install-sh -d $libdir /bin/sh install-sh -s -m 755 $bindir/c2hs $libdir/ echo "Installing wrapper and C2HS.hs" /bin/sh install-sh -c -m 755 c2hs/c2hs $bindir/ /bin/sh install-sh -c -m 644 c2hs/lib/C2HS.hs $libdir/
participants (1)
-
Manuel M T Chakravarty