GNU bug report logs - #75787
[PATCH] gnu: Add microcabal.

Previous Next

Package: guix-patches;

Reported by: Homo <gay <at> disroot.org>

Date: Thu, 23 Jan 2025 16:22:01 UTC

Severity: normal

Tags: patch

To reply to this bug, email your comments to 75787 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#75787; Package guix-patches. (Thu, 23 Jan 2025 16:22:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Homo <gay <at> disroot.org>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Thu, 23 Jan 2025 16:22:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Homo <gay <at> disroot.org>
To: guix-patches <at> gnu.org,
	lars <at> 6xq.net,
	divya <at> subvertising.org
Cc: Homo <gay <at> disroot.org>
Subject: [PATCH] gnu: Add microcabal.
Date: Thu, 23 Jan 2025 18:20:33 +0200
Depends on <https://issues.guix.gnu.org/75778>.

* gnu/packages/haskell-apps.scm (microcabal): New variable.

Change-Id: Ib676c2afc360c379183422b1038f045af5485b59
---
 gnu/packages/haskell-apps.scm | 50 +++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/gnu/packages/haskell-apps.scm b/gnu/packages/haskell-apps.scm
index 1ef3ed4035..d0c3ebdc42 100644
--- a/gnu/packages/haskell-apps.scm
+++ b/gnu/packages/haskell-apps.scm
@@ -20,6 +20,7 @@
 ;;; Copyright © 2021 Morgan Smith <Morgan.J.Smith <at> outlook.com>
 ;;; Copyright © 2022 David Thompson <dthompson2 <at> worcester.edu>
 ;;; Copyright © 2024 jgart <jgart <at> dismail.de>
+;;; Copyright © 2025 Homo <gay <at> disroot.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -42,6 +43,7 @@ (define-module (gnu packages haskell-apps)
   #:use-module (guix git-download)
   #:use-module (guix packages)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix build-system gnu)
   #:use-module (guix build-system haskell)
   #:use-module (gnu packages)
   #:use-module (gnu packages bash)
@@ -783,6 +785,54 @@ (define-public matterhorn
      "This is a terminal client for the Mattermost chat system.")
     (license license:bsd-3)))
 
+(define-public microcabal
+  ;; There are no tags, using latest commit.
+  (let ((commit "52e23c1472f63c546e8c366b722aaaef365713f9")
+        (revision "0"))
+    (package
+      (name "microcabal")
+      (version (git-version "0.4.1.0" revision commit))
+      (source (origin
+        (method git-fetch)
+        (uri (git-reference
+          (url "https://github.com/augustss/MicroCabal")
+          (commit commit)))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "0f1ikjgj2wrg1wrc4g4rhws791iajvajk7pr8yjr4di2v9h930ak"))))
+      (build-system gnu-build-system)
+      (arguments
+        (list
+          #:make-flags #~(list "MHS=mhs")
+          ;; Tests require *.cabal files from MicroHs's code.
+          #:tests? #f
+          #:phases
+          #~(modify-phases %standard-phases
+            (replace 'configure
+              (lambda _
+                (substitute* "Makefile"
+                  (("MHSDIR=[^ ]* ?")
+                    "")
+                  ;; Don't build with GHC.
+                  (("bin/gmcabal bin/mcabal")
+                    "bin/mcabal"))))
+            (replace 'install
+              (lambda _
+                (let ((bin (string-append #$output "/bin/")))
+                  (install-file "bin/mcabal" bin)))))))
+      (propagated-inputs (list microhs))
+      (home-page "https://github.com/augustss/MicroCabal")
+      (synopsis "Reimplementation of a subset of Cabal")
+      (description "Why a reimplementation?  Because Cabal is not a Haskell tool, it is a ghc tool.
+A Haskell tool should be compilable by an implementation of Haskell2010,
+which Cabal is definitely not.
+
+The implementation assumes a Unix-like system with commands like `wget` and `tar`.
+
+To get a consistent set of packages MicroCabal uses Stackage to find compatible packages.
+So in a sense, MicroCabal is more like a MicroStackage.")
+      (license license:asl2.0))))
+
 (define-public nixfmt
   (package
     (name "nixfmt")
-- 
2.47.1





Information forwarded to guix-patches <at> gnu.org:
bug#75787; Package guix-patches. (Sat, 01 Feb 2025 13:20:02 GMT) Full text and rfc822 format available.

Message #8 received at 75787 <at> debbugs.gnu.org (full text, mbox):

From: Lars-Dominik Braun <lars <at> 6xq.net>
To: Homo <gay <at> disroot.org>
Cc: divya <at> subvertising.org, 75787 <at> debbugs.gnu.org
Subject: Re: [PATCH] gnu: Add microcabal.
Date: Sat, 1 Feb 2025 14:19:36 +0100
[Message part 1 (text/plain, inline)]
Hi,

> * gnu/packages/haskell-apps.scm (microcabal): New variable.

I’m using a slightly modified patch (see attachment), but `mcabal`
cannot build any packages. It seems that it ignores the MHSDIR environment
variable:

    mcabal build fail
    mcabal: Build package fail
    mcabal: Building in /home/lars/.mcabal/packages/fail-4.9.0.0
    mcabal: Building library fail
    mhs: error: no location: Module not found: Mhs.Builtin
    search path=[".","dist-mcabal/autogen"]
    package path=["."]
    mhs: error: callCommand: failed 256, "mhs -Pfail-4.9.0.0 -ofail-4.9.0.0.pkg -i -i. -idist-mcabal/autogen '-DVERSION_base=\"4.19.1.0\"' '-DMIN_VERSION_base(x,y,z)=((x)<4||(x)==4&&(y)<19||(x)==4&&(y)==19&&(z)<=1)' -a. Control.Monad.Fail"

Looking at the MicroCabal sources mcabal might be expecting mhs to be
installed as an “mcabal package”?

Lars

[0001-gnu-Add-microcabal.patch (text/plain, attachment)]

Information forwarded to guix-patches <at> gnu.org:
bug#75787; Package guix-patches. (Sat, 01 Feb 2025 13:47:02 GMT) Full text and rfc822 format available.

Message #11 received at 75787 <at> debbugs.gnu.org (full text, mbox):

From: gay <at> disroot.org
To: Lars-Dominik Braun <lars <at> 6xq.net>, 75787 <at> debbugs.gnu.org
Subject: Re: [PATCH] gnu: Add microcabal.
Date: Sat, 01 Feb 2025 15:46:04 +0200
Hi,

Sorry about that, I expected it to be used only to build packages for 
Guix, not as package manager.

It's surprising MicroHs itself ignores MHSDIR, considering it didn't 
ignore this variable while building MicroCabal.

Considering inputs are runtime dependencies, shouldn't they go to 
propagated-inputs?




Information forwarded to guix-patches <at> gnu.org:
bug#75787; Package guix-patches. (Sun, 02 Feb 2025 11:21:02 GMT) Full text and rfc822 format available.

Message #14 received at 75787 <at> debbugs.gnu.org (full text, mbox):

From: Lars-Dominik Braun <lars <at> 6xq.net>
To: gay <at> disroot.org
Cc: 75787 <at> debbugs.gnu.org
Subject: Re: [PATCH] gnu: Add microcabal.
Date: Sun, 2 Feb 2025 12:19:54 +0100
Hi,

> Sorry about that, I expected it to be used only to build packages for 
> Guix, not as package manager.

do you have an example for that? I would like to be able to do both,
if possible.

> It's surprising MicroHs itself ignores MHSDIR, considering it didn't 
> ignore this variable while building MicroCabal.

I believe MicroCabal explicitly unsets the search path (via `-i`
without any argument).

> Considering inputs are runtime dependencies, shouldn't they go to 
> propagated-inputs?

Yes and no. Whenever possible, runtime dependencies should be plain
inputs. The key here is that their paths are baked into the resulting
mcabal binary via the 'fix-paths phase. propagated-inputs is (imo)
a last-resort is case that is not feasible or desired.

Lars





Information forwarded to guix-patches <at> gnu.org:
bug#75787; Package guix-patches. (Tue, 04 Feb 2025 17:10:02 GMT) Full text and rfc822 format available.

Message #17 received at 75787 <at> debbugs.gnu.org (full text, mbox):

From: gay <at> disroot.org
To: Lars-Dominik Braun <lars <at> 6xq.net>, 75787 <75787 <at> debbugs.gnu.org>
Subject: Re: [PATCH] gnu: Add microcabal.
Date: Tue, 04 Feb 2025 19:09:27 +0200
> do you have an example for that? I would like to be able to do both,
> if possible.

Nope, no idea yet, it might need slight modification to make such 
example possible, because there are different places where to lookup 
packages and where to install packages, to figure this out the only 
documentation available is source code.

> I believe MicroCabal explicitly unsets the search path (via `-i`
> without any argument).

Looks like intention to rebuild MicroHs to be installed as package 
managed by MicroCabal, except it doesn't know how to do that, because 
base (and few more packages) are expected to be backed into Haskell 
implementation, but then in standalone package manager scenario you can 
use old compiler (unknown to MicroCabal) and old MicroCabal (also 
unknown to MicroCabal) to build and install new compiler, new base and 
new MicroCabal. I have no idea what to do about other packages expected 
to be baked into implementation, maybe same workflow - clone git repo 
manually.




This bug report was last modified 132 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.