diff mbox series

[bug#37434,1/2] gnu: ghc-megaparsec: Update to 7.0.5.

Message ID 1509023901.36105334.1569334019062.JavaMail.zimbra@centurylink.net
State Accepted
Headers show
Series [bug#37434,1/2] gnu: ghc-megaparsec: Update to 7.0.5. | expand

Commit Message

Eric Bavier Sept. 24, 2019, 2:06 p.m. UTC
----- On Sep 24, 2019, at 2:16 AM, Ludovic Courtès ludo@gnu.org wrote:

> Hello,
> 
> Eric Bavier <ericbavier@centurylink.net> skribis:
> 
>> Idris 1.3.2 unfortunately needs megaparsec>=7.0.4.
>>
>> FWIW, idris is our only package that depends on ghc-megaparsec. :)  So maybe an
>> upgrade is fine?
> 
> For the sake of consistency, what about adding a variant of megaparsec
> for use by Idris, and keeping the LTS-12 version?

That sounds appropriate to me.  New patch attached.

> 
>> I was under the impression that our 'guix refresh' updater was supposed to use
>> the appropriate stackage version?  But it seems to be referencing version 14.6.
> 
> Looking at ‘latest-lts-release’ in (guix import stackage), the updater
> seems to just take the latest LTS version.
> 
> We should probably fix that by having the argument to
> ‘stackage-lts-info-fetch’ default to the currently targeted LTS version.
> Otherwise one has to know the LTS version and pass it to ‘guix import
> stackage --lts-version’, which is error-prone.
> 
> Thoughts?

I think that would be the right thing to do, imo.

Comments

Ludovic Courtès Sept. 24, 2019, 5:08 p.m. UTC | #1
Hi Eric,

Eric Bavier <ericbavier@centurylink.net> skribis:

> From 832529b71c2c5c7e6aa6e88a206c0db65e8a0c2e Mon Sep 17 00:00:00 2001
> From: Eric Bavier <bavier@member.fsf.org>
> Date: Mon, 16 Sep 2019 22:20:23 -0500
> Subject: [PATCH] gnu: idris: Update to 1.3.2.
>
> * gnu/packages/idris.scm (ghc-network-2.8, ghc-megaparsec-7): New variables.
> (idris): Update to 1.3.2.
> [source]: Remove patch.
> [inputs]: Use ghc-network-2.8 and ghc-megaparsec-7.
> * gnu/packages/patches/idris-test-no-node.patch: Delete.
> * gnu/local.mk (dist_patch_DATA): Remove it.

[...]

> +++ b/gnu/packages/idris.scm
> @@ -30,15 +30,50 @@
>    #:use-module (gnu packages perl)
>    #:use-module (guix build-system gnu)
>    #:use-module (guix build-system haskell)
> +  #:use-module (guix utils)
>    #:use-module (guix download)
>    #:use-module (guix git-download)
>    #:use-module ((guix licenses) #:prefix license:)
>    #:use-module (guix packages))
>  
> +;;; Until we update our default GHC to >=8.6 we cannot update our ghc-network
> +;;; package, since the 'cabal-install' package that supports the current
> +;;; 'Cabal' module requires 'network==2.6.*'.  Providing a local ghc-network
> +;;; works in this case since we use it only for a standalone program.
> +(define ghc-network-2.8
> +  (package
> +    (inherit ghc-network)

You should only inherit from packages defined in the same module,
otherwise we risk hitting the dreaded circular dependency mess (actually
this particular case is fine because idris.scm is a “leaf”, but still,
let’s not take this risk.)

So I recommend moving these two ghc-* packages next to their friends.

With this change the patch LGTM.

Thanks,
Ludo’.
Eric Bavier Sept. 25, 2019, 2:20 a.m. UTC | #2
----- On Sep 24, 2019, at 12:08 PM, Ludovic Courtès ludo@gnu.org wrote:

> Hi Eric,
> 
> Eric Bavier <ericbavier@centurylink.net> skribis:
> 
>> From 832529b71c2c5c7e6aa6e88a206c0db65e8a0c2e Mon Sep 17 00:00:00 2001
>> From: Eric Bavier <bavier@member.fsf.org>
>> Date: Mon, 16 Sep 2019 22:20:23 -0500
>> Subject: [PATCH] gnu: idris: Update to 1.3.2.
>>
>> * gnu/packages/idris.scm (ghc-network-2.8, ghc-megaparsec-7): New variables.
>> (idris): Update to 1.3.2.
>> [source]: Remove patch.
>> [inputs]: Use ghc-network-2.8 and ghc-megaparsec-7.
>> * gnu/packages/patches/idris-test-no-node.patch: Delete.
>> * gnu/local.mk (dist_patch_DATA): Remove it.
> 
> [...]
>> +;;; Until we update our default GHC to >=8.6 we cannot update our ghc-network
>> +;;; package, since the 'cabal-install' package that supports the current
>> +;;; 'Cabal' module requires 'network==2.6.*'.  Providing a local ghc-network
>> +;;; works in this case since we use it only for a standalone program.
>> +(define ghc-network-2.8
>> +  (package
>> +    (inherit ghc-network)
> 
> You should only inherit from packages defined in the same module,
> otherwise we risk hitting the dreaded circular dependency mess (actually
> this particular case is fine because idris.scm is a “leaf”, but still,
> let’s not take this risk.)
> 
> So I recommend moving these two ghc-* packages next to their friends.

Makes sense.  Done.

> With this change the patch LGTM.

Pushed with that change and other small adjustments for latest master in commit 4780db2c93.
Timothy Sample Sept. 25, 2019, 5:49 p.m. UTC | #3
Hi Eric and Ludo,

Eric Bavier <ericbavier@centurylink.net> writes:

> ----- On Sep 24, 2019, at 2:16 AM, Ludovic Courtès ludo@gnu.org wrote:
>
>> For the sake of consistency, what about adding a variant of megaparsec
>> for use by Idris, and keeping the LTS-12 version?
>
> That sounds appropriate to me.  New patch attached.

Very good idea!  Thanks.

>>> I was under the impression that our 'guix refresh' updater was
>>> supposed to use
>>> the appropriate stackage version?  But it seems to be referencing
>>> version 14.6.
>> 
>> Looking at ‘latest-lts-release’ in (guix import stackage), the updater
>> seems to just take the latest LTS version.
>> 
>> We should probably fix that by having the argument to
>> ‘stackage-lts-info-fetch’ default to the currently targeted LTS version.
>> Otherwise one has to know the LTS version and pass it to ‘guix import
>> stackage --lts-version’, which is error-prone.
>> 
>> Thoughts?
>
> I think that would be the right thing to do, imo.

I believe we have a patch series from Robert that does this.  There were
a few things to fix up, but it is the right thing to do.

    https://bugs.gnu.org/36653

Unfortunately, I don’t do a lot of Haskell stuff for myself these days,
so my motivation here is pretty limited.  (There are only so many hours
in the week to tinker with Guix....)  Applying this patch and getting
the ball rolling on Stackage LTS 14 are on my to-do list, but I don’t
know when I’ll get around to them.  :(


-- Tim
diff mbox series

Patch

From 832529b71c2c5c7e6aa6e88a206c0db65e8a0c2e Mon Sep 17 00:00:00 2001
From: Eric Bavier <bavier@member.fsf.org>
Date: Mon, 16 Sep 2019 22:20:23 -0500
Subject: [PATCH] gnu: idris: Update to 1.3.2.

* gnu/packages/idris.scm (ghc-network-2.8, ghc-megaparsec-7): New variables.
(idris): Update to 1.3.2.
[source]: Remove patch.
[inputs]: Use ghc-network-2.8 and ghc-megaparsec-7.
* gnu/packages/patches/idris-test-no-node.patch: Delete.
* gnu/local.mk (dist_patch_DATA): Remove it.
---
 gnu/local.mk                                  |  1 -
 gnu/packages/idris.scm                        | 44 +++++++++++--
 gnu/packages/patches/idris-test-no-node.patch | 61 -------------------
 3 files changed, 39 insertions(+), 67 deletions(-)
 delete mode 100644 gnu/packages/patches/idris-test-no-node.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 16b63bc951..4beee88e38 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -946,7 +946,6 @@  dist_patch_DATA =						\
   %D%/packages/patches/icedtea-6-hotspot-gcc-segfault-workaround.patch  \
   %D%/packages/patches/icedtea-7-hotspot-gcc-segfault-workaround.patch  \
   %D%/packages/patches/id3lib-CVE-2007-4460.patch			\
-  %D%/packages/patches/idris-test-no-node.patch			\
   %D%/packages/patches/ilmbase-fix-tests.patch			\
   %D%/packages/patches/intltool-perl-compatibility.patch	\
   %D%/packages/patches/irrlicht-use-system-libs.patch		\
diff --git a/gnu/packages/idris.scm b/gnu/packages/idris.scm
index 4290d8c21f..39b732482f 100644
--- a/gnu/packages/idris.scm
+++ b/gnu/packages/idris.scm
@@ -30,15 +30,50 @@ 
   #:use-module (gnu packages perl)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system haskell)
+  #:use-module (guix utils)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages))
 
+;;; Until we update our default GHC to >=8.6 we cannot update our ghc-network
+;;; package, since the 'cabal-install' package that supports the current
+;;; 'Cabal' module requires 'network==2.6.*'.  Providing a local ghc-network
+;;; works in this case since we use it only for a standalone program.
+(define ghc-network-2.8
+  (package
+    (inherit ghc-network)
+    (version "2.8.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/network/"
+                           "network-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0im8k51rw3ahmr23ny10pshwbz09jfg0fdpam0hzf2hgxnzmvxb1"))))))
+
+;;; Similarly, Idris 1.3.2 requires 'megaparse>=7.0.4' but we'd like to keep
+;;; the public package at the current Stackage LTS version:
+(define ghc-megaparsec-7
+  (package
+    (inherit ghc-megaparsec)
+    (version "7.0.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/megaparsec/"
+                           "megaparsec-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0bqx1icbmk8s7wmbcdzsgnlh607c7kzg8l80cp02dxr5valjxp7j"))))
+    (arguments (strip-keyword-arguments (list #:cabal-revision)
+                                        (package-arguments ghc-megaparsec)))))
+
 (define-public idris
   (package
     (name "idris")
-    (version "1.3.1")
+    (version "1.3.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -46,8 +81,7 @@ 
                     "idris-" version "/idris-" version ".tar.gz"))
               (sha256
                (base32
-                "0fn9h58l592j72njwma1ia48h8h87wi2rjqfxs7j2lfmvgfv18fi"))
-              (patches (search-patches "idris-test-no-node.patch"))))
+                "0wychzkg0yghd2pp8fqz78vp1ayzks191knfpl7mhh8igsmb6bc7"))))
     (build-system haskell-build-system)
     (native-inputs                      ;For tests
      `(("perl" ,perl)
@@ -71,8 +105,8 @@ 
        ("ghc-fsnotify" ,ghc-fsnotify)
        ("ghc-ieee754" ,ghc-ieee754)
        ("ghc-libffi" ,ghc-libffi)
-       ("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-network" ,ghc-network)
+       ("ghc-megaparsec" ,ghc-megaparsec-7)
+       ("ghc-network" ,ghc-network-2.8)
        ("ghc-optparse-applicative" ,ghc-optparse-applicative)
        ("ghc-regex-tdfa" ,ghc-regex-tdfa)
        ("ghc-safe" ,ghc-safe)
diff --git a/gnu/packages/patches/idris-test-no-node.patch b/gnu/packages/patches/idris-test-no-node.patch
deleted file mode 100644
index c04ad41a8e..0000000000
--- a/gnu/packages/patches/idris-test-no-node.patch
+++ /dev/null
@@ -1,61 +0,0 @@ 
-From 6c52e1b902b869c25e2fe39cff6364143a04da61 Mon Sep 17 00:00:00 2001
-From: Niklas Larsson <niklas@mm.st>
-Date: Tue, 11 Dec 2018 19:56:22 +0100
-Subject: [PATCH] Only check for Node when required
-
----
- test/TestRun.hs | 34 ++++++++++++++++++++--------------
- 1 file changed, 20 insertions(+), 14 deletions(-)
-
-diff --git a/test/TestRun.hs b/test/TestRun.hs
-index c7db9fdcd..4809911f3 100644
---- a/test/TestRun.hs
-+++ b/test/TestRun.hs
-@@ -11,6 +11,7 @@ import Data.Proxy
- import Data.Typeable
- import Options.Applicative
- import System.Directory
-+import System.Environment
- import System.Exit
- import System.FilePath ((</>))
- import System.Info
-@@ -103,20 +104,25 @@ runTest path flags = do
-       normalise (x : xs) = x : normalise xs
-       normalise [] = []
- 
-+checkNode :: IO  ()
-+checkNode = do
-+    nodePath   <- findExecutable "node"
-+    nodejsPath <- findExecutable "nodejs"
-+    let node = nodePath <|> nodejsPath
-+    case node of
-+      Nothing -> do
-+        putStrLn "For running the test suite against Node, node must be installed."
-+        exitFailure
-+      Just _  -> return ()
-+
- main :: IO ()
- main = do
--  nodePath   <- findExecutable "node"
--  nodejsPath <- findExecutable "nodejs"
--  let node = nodePath <|> nodejsPath
--  case node of
--    Nothing -> do
--      putStrLn "For running the test suite against Node, node must be installed."
--      exitFailure
--    Just _  -> do
--      defaultMainWithIngredients ingredients $
-+    args <- getArgs
-+    when ("--node" `elem` args) checkNode
-+    defaultMainWithIngredients ingredients $
-         askOption $ \(NodeOpt node) ->
--          let (codegen, flags) = if node then (JS, ["--codegen", "node"])
--                                         else (C , [])
--           in
--            mkGoldenTests (testFamiliesForCodegen codegen)
--                        (flags ++ idrisFlags)
-+            let (codegen, flags) = if node then (JS, ["--codegen", "node"])
-+                                           else (C , [])
-+            in
-+                mkGoldenTests (testFamiliesForCodegen codegen) (flags ++ idrisFlags)
-+
-- 
2.23.0