diff mbox series

[bug#49606,wip-haskell,v2] gnu: Add ghc-8.10.

Message ID YT9fJdTVyHUOtSPR@noor.fritz.box
State Accepted
Headers show
Series [bug#49606,wip-haskell,v2] gnu: Add ghc-8.10. | expand

Checks

Context Check Description
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue

Commit Message

Lars-Dominik Braun Sept. 13, 2021, 2:24 p.m. UTC
Hi,

> Any comments/thoughts on this, anyone?
I looked at the patch and would like to propose minor modifications. In
particular I

- removed the 'fix-cc-name phase, which is inherited from ghc-8.8 anyway
- converted the failing test (which I can’t get to pass either) into
  an expected failure instead of nulling it out and
- renamed the package to ghc-next, which should avoid
  https://issues.guix.gnu.org/47335 – if we also rename GHC 8.8 in a
  different patch.

I think we can merge this patch to master, since it only adds a new GHC
version and has no further implications. Thoughts?

Cheers,
Lars

Comments

Xinglu Chen Sept. 13, 2021, 4:07 p.m. UTC | #1
On Mon, Sep 13 2021, Lars-Dominik Braun wrote:

> Hi,
>
>> Any comments/thoughts on this, anyone?
> I looked at the patch and would like to propose minor modifications. In
> particular I
>
> - removed the 'fix-cc-name phase, which is inherited from ghc-8.8 anyway

Aye, the patch has bitrotted a bit.

> - converted the failing test (which I can’t get to pass either) into
>   an expected failure instead of nulling it out and

Either way works for me.  :-)

> - renamed the package to ghc-next, which should avoid
>   https://issues.guix.gnu.org/47335 – if we also rename GHC 8.8 in a
>   different patch.

AFAIK, ‘-next’ packages are usually unstable versions of the regular
version, e.g., ‘emacs-next’ and ‘guile-next’.  ‘ghc-8.10’ is a stable
release, so I am not sure if the ‘-next’ prefix is appropriate.

Also, I would imagine that other language ecosystems also have to
problem of the default compiler not being the latest version, e.g., the
‘rust’ package points to rust-1.45, but rust-1.52 is the latest
available version.

> I think we can merge this patch to master, since it only adds a new GHC
> version and has no further implications. Thoughts?

Originally, the plan was to apply this patch to the ‘wip-haskell’
branch, which contained a patch that results in rebuilding all Haskell
pacakges, and then update our Stackage LTS version (which hasn’t been
updated for ~2 years)[1].  But seeing as there isn’t much interest in a
Haskell update, applying to ‘master’ seems like a better idea.

[1]:
<https://yhetil.org/guix/e7BRZzcL_m4HQVFynEoJhiwl7-MNGGeVEXrXExHAjPuEl9KtiGsySm7YY5sQ4evmx_O3V1mhFq_p3PafWbCKy9t5_0gfR2I2IJCmV8JTryY=@protonmail.com/>

> diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
> index 3d10bdc946..ca0498e6d9 100644
> --- a/gnu/packages/haskell.scm
> +++ b/gnu/packages/haskell.scm
> @@ -21,6 +21,7 @@
>  ;;; Copyright © 2019 Jacob MacDonald <jaccarmac@gmail.com>
>  ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
>  ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
> +;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
>  ;;;
>  ;;; This file is part of GNU Guix.
>  ;;;
> @@ -663,6 +664,60 @@ interactive environment for the functional language Haskell.")
>                                  (file-pattern ".*\\.conf\\.d$")
>                                  (file-type 'directory))))))
>  
> +(define-public ghc-8.10
> +  (package
> +    (inherit ghc-8.8)
> +    (name "ghc-next")
> +    (version "8.10.7")
> +    (source
> +     (origin
> +       (method url-fetch)
> +       (uri (string-append "https://www.haskell.org/ghc/dist/"
> +                           version "/ghc-" version "-src.tar.xz"))
> +       (sha256
> +        (base32 "179ws2q0dinl1a39wm9j37xzwm84zfz3c5543vz8v479khigdvp3"))))
> +    (native-inputs
> +     `(("ghc-bootstrap" ,ghc-8.8)
> +       ("ghc-testsuite"
> +        ,(origin
> +           (method url-fetch)
> +           (uri (string-append
> +                 "https://www.haskell.org/ghc/dist/"
> +                 version "/ghc-" version "-testsuite.tar.xz"))
> +           (patches (search-patches "ghc-testsuite-dlopen-pie.patch"))
> +           (sha256
> +            (base32
> +             "1zl25gg6bpx5601k8h3cqnns1xfc0nqgwnh8jvn2s65ra3f2g1nz"))))
> +       ("git" ,git-minimal)                     ; invoked during tests
> +       ,@(filter (match-lambda
> +                   (("ghc-bootstrap" . _) #f)
> +                   (("ghc-testsuite" . _) #f)
> +                   (_ #t))
> +                 (package-native-inputs ghc-8.8))))
> +    (arguments
> +     (substitute-keyword-arguments (package-arguments ghc-8.8)
> +       ((#:phases phases '%standard-phases)
> +        `(modify-phases ,phases
> +           (add-after 'unpack-testsuite 'patch-more-shebangs
> +             (lambda* (#:key inputs #:allow-other-keys)
> +               (let ((bash (assoc-ref inputs "bash")))
> +                 (substitute* '("testsuite/tests/driver/T8602/T8602.script")
> +                   (("/bin/sh")
> +                    (string-append bash "/bin/sh"))))))
> +           ;; Mark failing tests as broken. Reason for failure is unknown.
> +           (add-after 'skip-more-tests 'skip-even-more-tests
> +             (lambda _
> +               (substitute* '("testsuite/tests/driver/T16521/all.T")
> +                 (("extra_files" all) (string-append "[" all))
> +                 (("\\]\\), " all)
> +                  (string-append all "expect_broken(0)], ")))))))))
> +    (native-search-paths (list (search-path-specification
> +                                (variable "GHC_PACKAGE_PATH")
> +                                (files (list
> +                                        (string-append "lib/ghc-" version)))
> +                                (file-pattern ".*\\.conf\\.d$")
> +                                (file-type 'directory))))))
> +

The updated patch LGTM, and great that you updated it to 8.10.7!
John Kehayias Sept. 13, 2021, 4:55 p.m. UTC | #2
A patch to master would probably be more helpful to get people to try to build their favorite packages with 8.10 to find any issues. Although I guess we'd want to do that in wip-haskell for everything anyway.

And then yes, we'll need to do a Stackage update for whatever release is the latest that uses 8.10. Hopefully we can get a big chunk of that through guix refresh. 8.10 will have to come first.
Lars-Dominik Braun Sept. 14, 2021, 1:02 p.m. UTC | #3
Hi,

> AFAIK, ‘-next’ packages are usually unstable versions of the regular
> version, e.g., ‘emacs-next’ and ‘guile-next’.  ‘ghc-8.10’ is a stable
> release, so I am not sure if the ‘-next’ prefix is appropriate.
that is true, but I don’t see any other way to make

	guix environment --pure --ad-hoc ghc ghc-aeson -- ghci
	> import Data.Aeson

do “the right thing” by default. We could also argue that from
Guix’s point of view GHC 8.8/8.10 is (right now) unstable, because our
entire set of Haskell packages is built with GHC 8.6 (and thus untested
with higher versions of base). We also have python-next@3.9.2 on master
with (I think) exactly the same purpose. So, unless there’s any strong
objections I’ll be bold and rename GHC>8.6 to ghc-next, explaining
the situation in a comment.

> But seeing as there isn’t much interest in a
> Haskell update, applying to ‘master’ seems like a better idea.
I’m counting three people (John, you and me) interested in getting
Haskell back into shape, so let’s just do it :)

Cheers,
Lars
Xinglu Chen Sept. 14, 2021, 3:21 p.m. UTC | #4
On Tue, Sep 14 2021, Lars-Dominik Braun wrote:

> Hi,
>
>> AFAIK, ‘-next’ packages are usually unstable versions of the regular
>> version, e.g., ‘emacs-next’ and ‘guile-next’.  ‘ghc-8.10’ is a stable
>> release, so I am not sure if the ‘-next’ prefix is appropriate.
> that is true, but I don’t see any other way to make
>
> 	guix environment --pure --ad-hoc ghc ghc-aeson -- ghci
> 	> import Data.Aeson
>
> do “the right thing” by default. We could also argue that from
> Guix’s point of view GHC 8.8/8.10 is (right now) unstable, because our
> entire set of Haskell packages is built with GHC 8.6 (and thus untested
> with higher versions of base). We also have python-next@3.9.2 on master
> with (I think) exactly the same purpose. So, unless there’s any strong
> objections I’ll be bold and rename GHC>8.6 to ghc-next, explaining
> the situation in a comment.

Ah, from Guix’s perspective GHC>8.6 would be unstable I guess.  Feel
free to push!  :-)

>> But seeing as there isn’t much interest in a
>> Haskell update, applying to ‘master’ seems like a better idea.
> I’m counting three people (John, you and me) interested in getting
> Haskell back into shape, so let’s just do it :)

That would be great!  :-)
Lars-Dominik Braun Sept. 15, 2021, 7:46 a.m. UTC | #5
Hi,

merged to master as 69f7a8f476da4cca5d146e3b232a9919693eb2eb.

Thank you very much,
Lars
John Kehayias Sept. 15, 2021, 7:31 p.m. UTC | #6
Great, thank you all for the work on ghc-8.10! Now to start the process of package updates on wip-haskell...
diff mbox series

Patch

diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index 3d10bdc946..ca0498e6d9 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -21,6 +21,7 @@ 
 ;;; Copyright © 2019 Jacob MacDonald <jaccarmac@gmail.com>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
+;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -663,6 +664,60 @@  interactive environment for the functional language Haskell.")
                                 (file-pattern ".*\\.conf\\.d$")
                                 (file-type 'directory))))))
 
+(define-public ghc-8.10
+  (package
+    (inherit ghc-8.8)
+    (name "ghc-next")
+    (version "8.10.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.haskell.org/ghc/dist/"
+                           version "/ghc-" version "-src.tar.xz"))
+       (sha256
+        (base32 "179ws2q0dinl1a39wm9j37xzwm84zfz3c5543vz8v479khigdvp3"))))
+    (native-inputs
+     `(("ghc-bootstrap" ,ghc-8.8)
+       ("ghc-testsuite"
+        ,(origin
+           (method url-fetch)
+           (uri (string-append
+                 "https://www.haskell.org/ghc/dist/"
+                 version "/ghc-" version "-testsuite.tar.xz"))
+           (patches (search-patches "ghc-testsuite-dlopen-pie.patch"))
+           (sha256
+            (base32
+             "1zl25gg6bpx5601k8h3cqnns1xfc0nqgwnh8jvn2s65ra3f2g1nz"))))
+       ("git" ,git-minimal)                     ; invoked during tests
+       ,@(filter (match-lambda
+                   (("ghc-bootstrap" . _) #f)
+                   (("ghc-testsuite" . _) #f)
+                   (_ #t))
+                 (package-native-inputs ghc-8.8))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments ghc-8.8)
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-after 'unpack-testsuite 'patch-more-shebangs
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((bash (assoc-ref inputs "bash")))
+                 (substitute* '("testsuite/tests/driver/T8602/T8602.script")
+                   (("/bin/sh")
+                    (string-append bash "/bin/sh"))))))
+           ;; Mark failing tests as broken. Reason for failure is unknown.
+           (add-after 'skip-more-tests 'skip-even-more-tests
+             (lambda _
+               (substitute* '("testsuite/tests/driver/T16521/all.T")
+                 (("extra_files" all) (string-append "[" all))
+                 (("\\]\\), " all)
+                  (string-append all "expect_broken(0)], ")))))))))
+    (native-search-paths (list (search-path-specification
+                                (variable "GHC_PACKAGE_PATH")
+                                (files (list
+                                        (string-append "lib/ghc-" version)))
+                                (file-pattern ".*\\.conf\\.d$")
+                                (file-type 'directory))))))
+
 (define-public ghc-8 ghc-8.6)
 
 (define-public ghc ghc-8)