From: Brett Gilio <brettg@posteo.net>
To: guix-devel@gnu.org
Subject: Re: Packaging Mercury & Some Struggles
Date: Wed, 04 Dec 2019 18:34:26 -0600 [thread overview]
Message-ID: <87sglz625p.fsf@posteo.net> (raw)
In-Reply-To: <87blsqgq2c.fsf@posteo.net> (Brett Gilio's message of "Mon, 02 Dec 2019 19:23:23 -0600")
Brett Gilio <brettg@posteo.net> writes:
> Greetings all!
>
> I am continuing my prolific streak of trying to move as many things from
> my channel to the main repository as possible.
>
> Up next on the menu: the Mercury language and compiler.
> http://mercurylang.org/
>
> So here are a few issues I am wanting to get resolved with this package,
> and I am hoping some support from the community can get this package
> further along.
>
> 1. Mercury comes with a number of "grades", which you can think of as
> anything relating to do with support for extra backends, libraries, and
> a number of other functionalities. The default setting in Mercury is to
> compile the compiler including all of the standard grades, which can
> take one heck of a long time! As a result, I was thinking of adopting
> something similar to `emacs-minimal`, for people who need to use the
> Mercury compiler but do not need all of that overhead of having all of
> the grades included by default.
>
> (define-public mercury-minimal
> (package (inherit mercury)
> (name "mercury-minimal")
> (build-system gnu-build-system)
> (arguments
> (substitute-keyword-arguments (package-arguments mercury)
> ((#:configure-flags flags ''())
> `(list "--enable-minimal-install"))))
> (inputs
> `(("gcc-toolchain" ,gcc-toolchain)))
> (synopsis "A pure logic programming language (used only for
> compiling packages dependent on base Mercury)")))
>
>
> So this example comes with a few points I want to address. Most distinct
> is the modification of the inherited mercury args to use the
> minimal-install flag (disabling grades not related to the compiler
> itself). Additionally, to use the mercury compiler in projects it
> depends on having some C-based toolchain to handoff the extracted code
> to. Is including gcc-toolchain as an Input/Prop-Input the best solution
> here? I worry that it might conflict with versions of the toolchain
> already in a user profile, or if somebody wants to use a different
> version of the gcc-toolchain (though they could replace the input using
> the appropriate guix flag.)
>
> 2. The Mercury source tarball includes a git submodule copy of
> boehm-gc. Of course, I think the "Guix way"TM of doing this is to strip
> out the submodule and replace it using a Native-Input (assuming the two
> versions are compatible, anyways). Here is the method I have assumed for
> trying to get that done.
>
> (add-after 'unpack 'replace-boehm
> (lambda* (#:key inputs #:allow-other-keys)
> (let ((boehm (assoc-ref inputs "libgc")))
> (map (match-lambda
> ((src orig-name new-name)
> (with-directory-excursion "."
> (apply unpack (list #:source src))
> (apply patch-source-shebangs (list #:source src)))
> (delete-file-recursively new-name)
> (invoke "mv" orig-name new-name)))
> `((,boehm "source" "libgc"))))))
>
>
> Now, this code may not be perfectly correct (feel free to do the work
> for me here, if you want, but I can probably figure it out ;). But, the
> code is at least in the spirit of what I am trying to achieve here. The
> issue here may just be that I am tired, but for whatever reason
> `match-lambda' is not resolving.
>
> starting phase `replace-boehm'
> Backtrace:
> 8 (primitive-load "/gnu/store/z0wfywmlbn079q07hgab4fafmqx…")
> In ice-9/eval.scm:
> 191:35 7 (_ #f)
> In ice-9/boot-9.scm:
> 829:9 6 (catch srfi-34 #<procedure 7ffff2d1a420 at /gnu/store/…> …)
> In srfi/srfi-1.scm:
> 863:16 5 (every1 #<procedure 7ffff2d1a3e0 at /gnu/store/w3jlc8p…> …)
> In /gnu/store/w3jlc8pk8416m7h677r5vq92b66h8cqd-module-import/guix/build/gnu-build-system.scm:
> 839:30 4 (_ _)
> In ice-9/eval.scm:
> 159:9 3 (_ #(#(#(#<directory (guile-user) 7ffff3c6b140>) (…)) #))
> 182:19 2 (proc #(#(#(#<directory (guile-user) 7ffff3c6b140>) …) …))
> 142:16 1 (compile-top-call _ (7 . match-lambda) ((10 (10 # …) …)))
> In unknown file:
> 0 (%resolve-variable (7 . match-lambda) #<directory (guil…>)
>
> ERROR: In procedure %resolve-variable:
> Unbound variable: match-lambda
>
>
> Last I checked, match-lambda belongs to `(ice-9 match)`. Though it is
> very possible that there is just some syntactical issue here that I am
> just not seeing right now. Again, eyes on this would be appreciated :).
>
> 3. Last, but not least: If any of you can find documentation on how to
> run the tests for the Mercury compiler, I would greatly appreciate it! I
> am completely lost on how to run them. I can not find an appropriate
> make target for them to run off of.
>
> 4. This one is not a real issue, per se; however, so far I am doing this
> work in a new module (gnu packages mercury). I would have preferred to
> place this in a (gnu packages prolog), but we only have a (gnu packages
> gprolog) named for the GNU implementation. I personally find this naming
> convention unfortunate, as I have SWI-Prolog packaged in my channel too,
> and I would like to see SWI-Prolog, gprolog, and mercury all reside in
> an appropriately named module.
>
> Alright, hopefully this is enough information to get some help but not
> too much for you all to not eventually consider me for maintainer status
> in the project. Haha.
>
> Below is the complete WIP for Mercury. All thoughts, criticism, and
> confused stares are welcome:
>
> (define-public mercury
> (package
> (name "mercury")
> (version "14.01.1")
> (source (origin
> (method url-fetch)
> (uri (string-append "https://dl.mercurylang.org/release/mercury-srcdist-"
> version
> ".tar.gz"))
> (sha256
> (base32
> "12z8qi3da8q50mcsjsy5bnr4ia6ny5lkxvzy01a3c9blgbgcpxwq"))))
> (build-system gnu-build-system)
> (arguments
> '(#:tests? #f ; TODO: tests are cryptic. Figure it out later.
> #:phases
> (modify-phases %standard-phases
> (add-after 'unpack 'patch
> (lambda _ (substitute*
> (list "Makefile"
> "Mmakefile"
> "scripts/mercury_update_interface.in"
> "scripts/mercury_config.in"
> "scripts/mmake.in"
> "scripts/mmake.sh"
> "scripts/Mmake.vars.in"
> "scripts/mdb.in"
> "scripts/rs6000_hack"
> "scripts/fullarch"
> "scripts/mmc.in"
> "scripts/canonical_grade"
> "scripts/mprof.in"
> "scripts/gud.el"
> "scripts/ml.in"
> "scripts/canonical_grade.in"
> "scripts/mdprof.in"
> "scripts/vpath_find"
> "scripts/mkfifo_using_mknod.in"
> "scripts/prepare_install_dir.in"
> "scripts/ml.sh"
> "scripts/mprof_merge_runs"
> "scripts/mtc"
> "scripts/mgnuc.in"
> "scripts/c2init.in"
> "bindist/bindist.Makefile")
> (("/bin/sh") (which "sh"))
> (("/bin/pwd") (which "pwd"))
> (("/bin/rm") (which "rm")))))
> (add-after 'unpack 'replace-boehm
> (lambda* (#:key inputs #:allow-other-keys)
> (let ((boehm (assoc-ref inputs "libgc")))
> (map (match-lambda
> ((src orig-name new-name)
> (with-directory-excursion "."
> (apply unpack (list #:source src))
> (apply patch-source-shebangs (list #:source src)))
> (delete-file-recursively new-name)
> (invoke "mv" orig-name new-name)))
> `((,boehm "source" "libgc")))))))))
> (native-inputs
> `(("texinfo" ,texinfo)
> ("flex" ,flex)
> ("tcsh", tcsh)
> ("bison" ,bison)
> ("readline" ,readline)
> ("libgc" ,libgc)))
> (synopsis "A pure logic programming language")
> (description "Mercury is a logic/functional programming language which
> combines the clarity and expressiveness of declarative programming with advanced
> static analysis and error detection features. Its highly optimized execution
> algorithm delivers efficiency far in excess of existing logic programming
> systems, and close to conventional programming systems. Mercury addresses
> the problems of large-scale program development, allowing modularity,
> separate compilation, and numerous optimization/time trade-offs.")
> (home-page "https://mercurylang.org")
> (license license:gpl2)))
>
> (define-public mercury-minimal
> (package (inherit mercury)
> (name "mercury-minimal")
> (build-system gnu-build-system)
> (arguments
> (substitute-keyword-arguments (package-arguments mercury)
> ((#:configure-flags flags ''())
> `(list "--enable-minimal-install"))))
> (inputs
> `(("gcc-toolchain" ,gcc-toolchain)))
> (synopsis "A pure logic programming language (used only for
> compiling packages dependent on base Mercury)")))
Hey all! Just bumping this as I had not heard anything yet.
--
Brett M. Gilio
https://git.sr.ht/~brettgilio/
next prev parent reply other threads:[~2019-12-05 0:34 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-03 1:23 Packaging Mercury & Some Struggles Brett Gilio
2019-12-05 0:34 ` Brett Gilio [this message]
2019-12-05 16:16 ` John Soo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87sglz625p.fsf@posteo.net \
--to=brettg@posteo.net \
--cc=guix-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).