Find the ghc binary path from libdir

Christiaan Baaij christiaan.baaij at gmail.com
Tue Feb 9 10:54:44 UTC 2021


Calling `ghc --print-lib-dir` is the only way because the `$libdir` is
actually provided on the cmdline using the -B flag:
https://gitlab.haskell.org/ghc/ghc/-/blob/master/ghc/Main.hs#L110-112

That's why the `ghc` you normally execute is a shell-wrapper around the
`ghc` executable applied to a `-B` argument set at installation time.
But a user is free to move that `$libdir` dir to any other place after
installation and update the `-B` flag accordingly.

On Mon, 8 Feb 2021 at 20:09, Fendor <power.walross at gmail.com> wrote:

> Hi,
>
> Well the purpose is a bit convoluted, but here it goes:
>
> Basically, we want to know which `ghc` version `cabal-install` is going
> to pick for compiling the project in a platform independent way without
> resorting to linking to `Cabal`.
>
> You can execute `cabal exec -- ghc` which launches the correct `ghc`
> version, but as far as we found out, there is no programmatic way of
> finding the path to the `ghc` executable itself (`cabal exec -- where
> ghc` or `cabal exec -- which ghc` fails on windows). What we really want
> is `cabal-install` to tell us, e.g. with `cabal show-build-info` which
> is a command not implemented yet[0].
>
> As long as this command is not implemented, we have to monkey patch it
> in order to satisfy our goals. You can execute `cabal exec -- ghc
> --print-libdir`, which gives you the `$libdir`, which brings us back to
> the original question: can we find the `ghc` executable given `$libdir`
> in a platform independent way?
>
> [0] https://github.com/haskell/cabal/pull/6241
>
> Best regards,
> Fendor
>
> On 2/8/21 7:48 PM, Daniel Gröber wrote:
> > Hi Fendor,
> >
> > On Mon, Feb 08, 2021 at 07:35:12PM +0100, Fendor wrote:
> >> I want to find out the location of the `ghc` (and `ghc-pkg`) executable
> >> given the `$libdir` (obtained by `ghc --print-libdir`).
> >> Is there a platform independent way of doing that, which we can rely on?
> > Are you aware of the `ghc --print-libdir` option? I think you'd be much
> > better off going from ghc binary to libdir instead of the other way
> around.
> >
> > Could you explain why you're trying to do it your way?
> >
> >> (P. S. first time using a mailing list, hope I am doing it correctly)
> > Seems fine to me :)
> >
> > --Daniel
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20210209/a0b6a349/attachment.html>


More information about the ghc-devs mailing list