haskell / ghcup-hs

https://www.haskell.org/ghcup/
GNU Lesser General Public License v3.0
289 stars 89 forks source link

Support VoidLinux #378

Closed hasufell closed 1 year ago

hasufell commented 2 years ago

In GitLab by @maerwald on May 18, 2022, 04:27

It needs some special packages installed and we should give users better details, e.g.:

xbps-install -S curl gcc gmp make ncurses ncurses-libtinfo-libs perl

It also seems voidlinux supports musl, which complicates matters.

There are also issues with some bindists: https://gitlab.haskell.org/ghc/ghc/-/issues/21559

hasufell commented 2 years ago

In GitLab by @kwshi on Jun 5, 2022, 01:52

Relatedly, I've created a PR to add ghcup as a package to the Void repositories: https://github.com/void-linux/void-packages/pull/35624.

However, as of recently the build is breaking for me because of version mismatches between the GHC version in the repos (9.0.2, base 4.14.3) and that required by ghcup dependencies (e.g., http-io-streams-0.1.6.0 depends on base<4.15).

slotThe commented 1 year ago

FWIW—in case anyone stumbles upon this—I managed to install GHC 9.4.5 from 9.2.7 (installed via xbps-src) just fine on Void x86_64-musl by forcing ghcup to always run with -p x86_64-alpine-linux.

hasufell commented 1 year ago

FWIW—in case anyone stumbles upon this—I managed to install GHC 9.4.5 from 9.2.7 (installed via xbps-src) just fine on Void x86_64-musl by forcing ghcup to always run with -p x86_64-alpine-linux.

You can override distro detection in the config file now: https://www.haskell.org/ghcup/guide/#overriding-distro-detection

slotThe commented 1 year ago

You can override distro detection in the config file now: https://www.haskell.org/ghcup/guide/#overriding-distro-detection

Oh that's neat, thanks!

So, very naive question: what's actually needed such that ghcup "officially" supports Void? The glibc variant can just use the official tarballs, and for musl the alpine ones seems to work well. Is it just that someone has to put in the work? If yes, any pointers for what needs to be done? I skimmed the docs, but there doesn't seem to be anything for "adding new distros".

hasufell commented 1 year ago

Adding new distros requires changing the internal distro enum:

That will cause a breaking change for the metadata and we will have to bump the version to ghcup-0.0.8.yaml and then also update the internal URL:

And then do another ghcup binary release.

That's a lot of disruption for supporting one distro and then not having proper support for its musl variant.

slotThe commented 1 year ago

Ah, well, that's indeed a lot of breaking changes :/

That's a lot of disruption for supporting one distro and then not having proper support for its musl variant.

I don't know whether the alpine people creating a statically linked musl build of GHC is so much worse than the Void people doing the same thing—at least personally, I haven't noticed a difference. I would definitely still consider adding Void worth it (especially since the distro's GHC support is a bit behind the curve, and the respective PR to update everything is kind of stalled). I confess complete ignorance when it comes to these things though, so I will trust your word on this.