Hi *, so I've given this a stab[1]. While getting the wrapper requirement, and the .conf files sorted was rather easy. (We already have getExecutablePath, and the relocatable logic for windows. As well as $topdir and ${pkgroot} support for paths in .conf files.)
Now as Manuel laid out the dynamic libraries situation is a bit annoying. Specifically as the ghc-stage2 we build *in-tree*, and the libraries have a completely different layout from the final install location. And as such setting @rpath, and @loader_path, is quite tricky, as essentially the installation is not a relocation of the stage1 or stage2 compiler. However, I am now again at the point where I start hacking on the build system, while Hadrian is imminent. And this is quite depressing. Cheers, Moritz -- [1]: https://phabricator.haskell.org/D4121 > On Oct 24, 2017, at 9:54 AM, Moritz Angermann <moritz.angerm...@gmail.com> > wrote: > > Hi Manuel, > > thanks for the link! Ahh yes lovely RPATH (this reminds me, I should look > to verify if I can make GHC link recursively.) The conf files came up on > #ghc yesterday as well. Maybe we need some $home, $sysroot or similar marker > to make them relocatable. > > I'll probably take a crack at this today. Not sure how far I get though. > The primary motivation is that packaging the cross compilers in a neat > way looks like layering patched upon patches onto the configure script. And > in light of Hadrian, we might just want to package up a directory and not > deal with the binary-dist logic where we can? > > Cheers, > Moritz > >> On Oct 24, 2017, at 9:45 AM, Manuel M T Chakravarty <c...@justtesting.org> >> wrote: >> >> Hi Moritz, >> >> Haskell for Mac is fully relocatable (as every Mac users expects this of a >> Mac app). >> >> Unfortunately, it is not just the libdir in the wrapper scripts that’s in >> the way of a relocatable GHC. Additional problems are (1) the (at least, as >> of 8.0) still not macOS-friendly RPATHs in dynamic libraries and (2) the >> absolute paths in package .conf files. >> >> In Haskell for Mac, I use two arguably hacky solutions to those two issues. >> I rewrite all RPATHs in .dylibs to be relative and I have got a little tool >> that relocates .conf files. I’d certainly prefer a cleaner solution! >> >> Those aspects of Haskell for Mac are actually in a separate framework >> (GHC.framework) that wraps GHC and some other tools. This is all in a public >> repo if you like to have a look >> >> https://github.com/haskellformac/GHCframework >> >> I haven’t put a license on it, but I’d be happy to make it all BSD3. It is >> of course all highly Mac specific and requires Xcode to build for all the >> code signing, sandboxing, etc. >> >> Cheers, >> Manuel >> >>> Am 23.10.2017 um 17:04 schrieb Moritz Angermann >>> <moritz.angerm...@gmail.com>: >>> >>> Hi, >>> >>> while trying to make the binary-distribution logic work for >>> cross compilers. I've come wonder, how hard it could be to >>> make GHC relocatable. (e.g. just unpack the distribution, >>> and use the compiler from the `bin` folder within). >>> >>> Right now this does not work due to the need for the path to >>> package.conf, and this is hardcoded in the wrapper script to >>> provide the proper libdir to ghc via -B[1]. Supposedly this >>> is not an issue on Windows, as a relative path is common on >>> windows and finding the location of the executable can be done >>> safely. Or that's at least how I understand[1]. >>> >>> For macOS there is the haskell-platform, and ghc-dot-app[2] >>> >>> From [3], it sounds like automake is a build, and not a packaging >>> system, and the binary dist usecase with configure is not >>> really a standard use case. >>> >>> So why do I bring this up NOW? Apart from me trying to make >>> cross compiler binary distributions working? The reason is >>> that we are also trying to move towards hadrian, and by "starting >>> from scratch", maybe we have a chance to reconsider how we >>> do things? >>> >>> I must admit, I'm quite happy to use packages like llvm, by >>> just downloading a package and adding the `bin` path to my >>> $PATH. >>> >>> There is however one thing that the current configure appraoch >>> does, which I think is quite noteworthy (apart from setting >>> $prefix). That is, it does check for compilers and sets them >>> accordingly, which might be desirable. >>> >>> Cheers, >>> Moritz >>> >>> -- >>> [1]: https://ghc.haskell.org/trac/ghc/wiki/Building/Installing >>> [2]: https://ghc.haskell.org/trac/ghc/wiki/Building/MacOSX/Installer >>> [3]: https://lists.gnu.org/archive/html/automake/2006-10/msg00005.html >>> _______________________________________________ >>> ghc-devs mailing list >>> ghc-devs@haskell.org >>> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs >> > > _______________________________________________ > ghc-devs mailing list > ghc-devs@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs