
On 2016-06-30 07:03 PM, Bryan Gardiner wrote:
I'm working on packaging Qtah (my Qt bindings) for upload to Hackage. This is somewhat complicated, as I have some C++ glue code that I build into a shared library that the Haskell library needs.
Currently, my build hooks are as follows, in: https://gitlab.com/khumba/qtah/blob/packaging/qtah/Setup.hs
- postConf: Generate Haskell code in src/ and C++ code in cpp/.
- preBuild: Add cpp/ to HookedBuildInfo.extraLibDirs because the build phase needs this needs this.
- buildHook: Run make to build the C++ code into libqtah.so before the Haskell code builds.
- copyHook and instHook: Copy libqtah.so into InstallDirs.libdir (~/.cabal/lib/.../qtah-*/).
This installs successfully, but ultimately doesn't work because the Haskell libHSqtah*.so that gets built can't find libqtah.so. The installation directory ~/cabal/lib/.../qtah-*/ isn't on libHSqtah*.so's RUNPATH (which makes sense, it's not known at link time).
I don't know how to write custom Setup.hs, so I don't know how to do the following, but the theory is: When creating libHSqtah*.so, the linker needs to be told: -Wl,-rpath,xxx Replace xxx by InstallDirs.libdir. This is how to set RUNPATH (or is it RPATH?).