
On Sat, Mar 1, 2008 at 3:21 AM, Duncan Coutts
I presume you mean a private binary that's needed at runtime, rather than a program like a code-gen needed at build time but not installed.
That's right.
Cabal does not have any direct support for private binaries, so you'll have to use a custom Setup.hs.
Perhaps it should, if you can describe what you think is needed in general, file a feature request here: http://hackage.haskell.org/trac/hackage/
I can't think of many scenarios where they'd really be needed. The two instances I've seen are: 1) to write a simplified (commands via stdin, output via stdout) interface to an API that I don't want to link in (or don't want to write bindings for) 2) this particular program, which would be written in Haskell except that it does some C libdl tricks
Cabal knows about the 'libexec' path which sounds like it might be what you want, though that doesn't include any package subdir (though perhaps it should - it is currently unused). Alternatively just install into the 'libdir' which does include the package subdir.
let dirs = absoluteInstallDirs pkg_descr lbi copydest copyFileVerbose verbosity file (libdir dirs > file)
From the docs, it may be the case that copyDest is only available in
Thanks, this is very helpful! absoluteInstallDirs takes a few more args, so here's a longer example for the mailing list archives. I'm 98% of the way there, just need to figure out copyDest. the "copy" step? If that's right, does that mean the user needs to run the copy step manually?
type InstHook = PackageDescription -> LocalBuildInfo -> UserHooks -> InstallFlags -> IO ()) creplChildInst :: InstHook -> InstHook creplChildInst oldhook desc buildinfo hooks flags = do oldhook desc buildinfo hooks flags let compilerpkg = compilerId (compiler buildinfo) let copydest = -- XXX still haven't figured this one out let dirtemplates = installDirTemplates buildinfo let dirs = absoluteInstallDirs desc compilerpkg copydest dirtemplates copyFileVerbose (installVerbose flags) (creplChildPath buildinfo) (libdir dirs > "child")
At runtime you can get the libexec and libdir that the user chose at configure time using the Paths_pkgname module which exports getLibDir and getLibexecDir amongst others.
Cool, thanks.