[PATCH] gnu: Add hare

  • Open
  • quality assurance status badge
Details
2 participants
  • Ekaitz Zarraga
  • (
Owner
unassigned
Submitted by
Ekaitz Zarraga
Severity
normal
E
E
Ekaitz Zarraga wrote on 27 Jul 2023 10:35
(name . guix-patches@gnu.org)(address . guix-patches@gnu.org)
GvOYop3WTKkSSyf8Bw443CZlf6uRVc-AO7IYjEaQVZ6QrPCFHOhs6L0Rh0Z-d_1QqO65DnG6TLCmiowhj1qssn4Wo-qA12jZMjLcFpYLEhw=@elenq.tech
From 308b67848e93a25f627dd64e024e9a501979a157 Mon Sep 17 00:00:00 2001
Message-Id: <308b67848e93a25f627dd64e024e9a501979a157.1689368739.git.ekaitz@elenq.tech>
From: Ekaitz Zarraga <ekaitz@elenq.tech>
Date: Fri, 14 Jul 2023 22:52:59 +0200
Subject: [PATCH] gnu: Add hare

* gnu/packages/hare.scm (hare, harec): New variable.
* gnu/local.mk: Add hare.scm
---
gnu/local.mk | 2 +
gnu/packages/hare.scm | 104 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 106 insertions(+)
create mode 100644 gnu/packages/hare.scm

Toggle diff (134 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 06a376a99a..4d1645c595 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -59,6 +59,7 @@
# Copyright © 2023 Zheng Junjie <873216071@qq.com>
# Copyright © 2023 Ivana Drazovic <iv.dra@hotmail.com>
# Copyright © 2023 Andy Tai <atai@atai.org>
+# Copyright © 2023 Ekaitz Zarraga <ekaitz@elenq.tech>
#
# This file is part of GNU Guix.
#
@@ -314,6 +315,7 @@ GNU_SYSTEM_MODULES = \
%D%/packages/gv.scm \
%D%/packages/gxmessage.scm \
%D%/packages/hardware.scm \
+ %D%/packages/hare.scm \
%D%/packages/haskell.scm \
%D%/packages/haskell-apps.scm \
%D%/packages/haskell-check.scm \
diff --git a/gnu/packages/hare.scm b/gnu/packages/hare.scm
new file mode 100644
index 0000000000..0c65463e92
--- /dev/null
+++ b/gnu/packages/hare.scm
@@ -0,0 +1,104 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2023 Ekaitz Zarraga <ekaitz@elenq.tech>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages hare)
+ #:use-module (guix packages)
+ #:use-module (guix utils)
+ #:use-module (guix git-download)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix build-system gnu)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages c)
+ #:use-module (gnu packages man))
+
+(define-public harec
+ (let ((revision "1")
+ (commit "f5da14c17f734f0bba5a741997b79d3e65a87712"))
+ (package
+ (name "harec")
+ (version (git-version "0.0.1" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://git.sr.ht/~sircmpwn/harec")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1xdf9pdwy5dvxhgvw6hqkpnjl8z76xc413vsnbbqfvwmfing53yn"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-before 'configure 'setenv
+ (lambda _
+ (setenv "CC" ,(cc-for-target))))
+ (add-after 'configure 'configure-better
+ (lambda* (#:key outputs #:allow-other-keys)
+ (invoke "./configure"
+ (string-append "--prefix=" (assoc-ref outputs "out")))))
+ (delete 'configure))))
+ (inputs (list qbe scdoc))
+ (synopsis "Bootstrapping compiler for Hare")
+ (description "Hare is a systems programming language designed to be
+simple, stable, and robust. Hare uses a static type system, manual memory
+management, and a minimal runtime. It is well-suited to writing operating
+systems, system tools, compilers, networking software, and other low-level,
+high performance tasks.")
+ (home-page "https://git.sr.ht/~sircmpwn/harec")
+ (license license:gpl3))))
+
+
+(define-public hare
+ (let ((revision "1")
+ (commit "112b75eb56d98c442094966fe59cbf3cd5feb909"))
+ (package
+ (name "hare")
+ (version (git-version "0.0.1" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://git.sr.ht/~sircmpwn/hare")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "0ilnz56757k4v0ggdc2v4xsjw0c944y8r289nfmqhw4hwzsrvb4j"))))
+ (inputs (list scdoc))
+ (propagated-inputs (list qbe harec))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:make-flags `("HARECACHE=./cache"
+ ,(string-append "PREFIX=" (assoc-ref %outputs "out")))
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'configure 'configure-make
+ (lambda _
+ ;; NOTE: We are not really using this because overwriting it via
+ ;; `make-flags` is way easier with our tooling.
+ ;; Maybe we should?
+ (copy-file "config.example.mk" "config.mk")))
+ (delete 'configure))))
+ (synopsis "Hare build driver")
+ (description "Hare is a systems programming language designed to be
+simple, stable, and robust. Hare uses a static type system, manual memory
+management, and a minimal runtime. It is well-suited to writing operating
+systems, system tools, compilers, networking software, and other low-level,
+high performance tasks.")
+ (home-page "https://git.sr.ht/~sircmpwn/hare")
+ (license license:gpl3))))

base-commit: 917a299831361f253ea664f009176b4bbe06900a
--
2.39.2
(
(name . Ekaitz Zarraga)(address . ekaitz@elenq.tech)
87ila4t8tq.fsf@disroot.org
Hi!

Ekaitz Zarraga <ekaitz@elenq.tech> writes:
Toggle quote (3 lines)
> * gnu/packages/hare.scm (hare, harec): New variable.
> * gnu/local.mk: Add hare.scm

:)

Toggle quote (2 lines)
> + (sha256
> + (base32 "1xdf9pdwy5dvxhgvw6hqkpnjl8z76xc413vsnbbqfvwmfing53yn"))))
^
Odd spacing here.

Toggle quote (4 lines)
> + (build-system gnu-build-system)
> + (arguments
> + `(#:phases

Please use gexps and LIST for any new packages.

Toggle quote (5 lines)
> + (modify-phases %standard-phases
> + (add-before 'configure 'setenv
> + (lambda _
> + (setenv "CC" ,(cc-for-target))))

Hmm. In my version of the package[1], I also have:

(setenv "AR" #$(ar-for-target))
(setenv "LD" #$(ld-for-target))

Not sure why I added those, though. Maybe try cross-compiling both
packages? Perhaps these lines are needed for that...

Toggle quote (6 lines)
> + (add-after 'configure 'configure-better
> + (lambda* (#:key outputs #:allow-other-keys)
> + (invoke "./configure"
> + (string-append "--prefix=" (assoc-ref outputs "out")))))
> + (delete 'configure))))

You could just (replace 'configure ...) instead :)

Toggle quote (2 lines)
> +simple, stable, and robust. Hare uses a static type system, manual memory

s/Hare/It/ in this line, maybe?

Toggle quote (2 lines)
> +(define-public hare

Each package should have its own commit, remember.

Toggle quote (2 lines)
> + (let ((revision "1")
> + (commit "112b75eb56d98c442094966fe59cbf3cd5feb909"))
^
Rouge space.

Toggle quote (2 lines)
> + (sha256
> + (base32 "0ilnz56757k4v0ggdc2v4xsjw0c944y8r289nfmqhw4hwzsrvb4j"))))
^
Another.

Toggle quote (2 lines)
> + (inputs (list scdoc))

scdoc should be a native-input.

Toggle quote (2 lines)
> + (propagated-inputs (list qbe harec))

Might be an idea to make QBE and harec regular inputs, using substitute*
to replace any invocations of their binaries within the code with the
full /gnu/store/.../bin/blah path. Propagated inputs should be avoided
where possible, even if it makes the package definition a little more
complex.

Toggle quote (4 lines)
> + (arguments
> + `(#:make-flags `("HARECACHE=./cache"
> + ,(string-append "PREFIX=" (assoc-ref %outputs "out")))

Again, please use gexps within LIST, and replace
``(assoc-ref %outputs "out")'' with ``#$output''.

Toggle quote (8 lines)
> + #:phases
> + (modify-phases %standard-phases
> + (add-before 'configure 'configure-make
> + (lambda _
> + ;; NOTE: We are not really using this because overwriting it via
> + ;; `make-flags` is way easier with our tooling.
> + ;; Maybe we should?

No, I think what you do here is fine.

Toggle quote (2 lines)
> + (copy-file "config.example.mk" "config.mk")))

You can use RENAME-FILE rather than COPY-FILE here.

Toggle quote (2 lines)
> + (delete 'configure))))

Again, please just use REPLACE; it's simpler.

Toggle quote (2 lines)
> + (synopsis "Hare build driver")

Maybe "Build driver for the Hare language"? "Hare build driver" is
almost a bit *too* short, IMO.

Toggle quote (6 lines)
> + (description "Hare is a systems programming language designed to be
> +simple, stable, and robust. Hare uses a static type system, manual memory
> +management, and a minimal runtime. It is well-suited to writing operating
> +systems, system tools, compilers, networking software, and other low-level,
> +high performance tasks.")

Perhaps trim the language description down a bit and add a sentence or
two about what *this specific tool* does.

-- (
(
(name . Ekaitz Zarraga)(address . ekaitz@elenq.tech)
87edkst6ma.fsf@disroot.org
Oh, also:

Ekaitz Zarraga <ekaitz@elenq.tech> writes:
Toggle quote (13 lines)
> + (arguments
> + `(#:make-flags `("HARECACHE=./cache"
> + ,(string-append "PREFIX=" (assoc-ref %outputs "out")))
> + #:phases
> + (modify-phases %standard-phases
> + (add-before 'configure 'configure-make
> + (lambda _
> + ;; NOTE: We are not really using this because overwriting it via
> + ;; `make-flags` is way easier with our tooling.
> + ;; Maybe we should?
> + (copy-file "config.example.mk" "config.mk")))
> + (delete 'configure))))

You'll probably want to add this just after this point:

(native-search-paths
(list (search-path-specification
(variable "HAREPATH")
(files (list "src/hare/stdlib" "src/hare/third-party")))))

-- (
E
E
Ekaitz Zarraga wrote on 8 Aug 2023 12:09
(name . ()(address . paren@disroot.org)
HOfirAp-1D2_parMzFA7FQ-hj_C_taeFQAowyT9otBA3mzPGBzzqmiw-S-pgHCDm1EAATMCDSwd3RBZheiTh-axIj_Mxn8rFgHIEwZIFupE=@elenq.tech
Hi,

I applied most of the proposed changes to the hare package, and I split the commit in two.

I talked with the devs and we need to propagate at least those variables because the config.mk file is not persisting the values. We'll patch that upstream later.

Best,
Ekaitz
From 110a6af0295bbfc148577ce655428ffebbcb9327 Mon Sep 17 00:00:00 2001
Message-ID: <110a6af0295bbfc148577ce655428ffebbcb9327.1691486188.git.ekaitz@elenq.tech>
From: Ekaitz Zarraga <ekaitz@elenq.tech>
Date: Sat, 29 Jul 2023 13:09:25 +0200
Subject: [PATCH 1/2] gnu: Add harec

* gnu/packages/hare.scm (harec): New variable.
* gnu/local.mk: Add hare.scm
---
gnu/local.mk | 2 ++
gnu/packages/hare.scm | 67 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 69 insertions(+)
create mode 100644 gnu/packages/hare.scm

Toggle diff (97 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 06a376a99a..4d1645c595 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -59,6 +59,7 @@
# Copyright © 2023 Zheng Junjie <873216071@qq.com>
# Copyright © 2023 Ivana Drazovic <iv.dra@hotmail.com>
# Copyright © 2023 Andy Tai <atai@atai.org>
+# Copyright © 2023 Ekaitz Zarraga <ekaitz@elenq.tech>
#
# This file is part of GNU Guix.
#
@@ -314,6 +315,7 @@ GNU_SYSTEM_MODULES = \
%D%/packages/gv.scm \
%D%/packages/gxmessage.scm \
%D%/packages/hardware.scm \
+ %D%/packages/hare.scm \
%D%/packages/haskell.scm \
%D%/packages/haskell-apps.scm \
%D%/packages/haskell-check.scm \
diff --git a/gnu/packages/hare.scm b/gnu/packages/hare.scm
new file mode 100644
index 0000000000..da5820510a
--- /dev/null
+++ b/gnu/packages/hare.scm
@@ -0,0 +1,67 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2023 Ekaitz Zarraga <ekaitz@elenq.tech>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages hare)
+ #:use-module (guix packages)
+ #:use-module (guix gexp)
+ #:use-module (guix utils)
+ #:use-module (guix git-download)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix build-system gnu)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages c)
+ #:use-module (gnu packages man))
+
+(define-public harec
+ (let ((revision "1")
+ (commit "f5da14c17f734f0bba5a741997b79d3e65a87712"))
+ (package
+ (name "harec")
+ (version (git-version "0.0.1" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://git.sr.ht/~sircmpwn/harec")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1xdf9pdwy5dvxhgvw6hqkpnjl8z76xc413vsnbbqfvwmfing53yn"))))
+ (build-system gnu-build-system)
+ (arguments
+ (list
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-before 'configure 'setenv
+ (lambda* (#:key inputs #:allow-other-keys)
+ (setenv "AR" #$(ar-for-target))
+ (setenv "LD" #$(ld-for-target))
+ (setenv "CC" #$(cc-for-target))))
+ (replace 'configure
+ (lambda* (#:key outputs #:allow-other-keys)
+ (invoke "./configure"
+ (string-append "--prefix=" #$output)))))))
+ (native-inputs (list scdoc))
+ (inputs (list qbe))
+ (synopsis "Bootstrapping compiler for Hare language")
+ (description "Hare is a systems programming language designed to be
+simple, stable, and robust. It uses a static type system, manual memory
+management, and a minimal runtime. This package provides only the compiler.
+If you want to code in Hare, @code{hare} package is recommended.")
+ (home-page "https://git.sr.ht/~sircmpwn/harec")
+ (license license:gpl3))))

base-commit: 917a299831361f253ea664f009176b4bbe06900a
--
2.41.0
From f247e52e2190fbb319cf50184a22f605a043dede Mon Sep 17 00:00:00 2001
Message-ID: <f247e52e2190fbb319cf50184a22f605a043dede.1691486188.git.ekaitz@elenq.tech>
In-Reply-To: <110a6af0295bbfc148577ce655428ffebbcb9327.1691486188.git.ekaitz@elenq.tech>
References: <110a6af0295bbfc148577ce655428ffebbcb9327.1691486188.git.ekaitz@elenq.tech>
From: Ekaitz Zarraga <ekaitz@elenq.tech>
Date: Tue, 8 Aug 2023 01:42:57 +0200
Subject: [PATCH 2/2] gnu: Add hare

* gnu/packages/hare.scm (hare): New variable
---
gnu/packages/hare.scm | 41 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)

Toggle diff (51 lines)
diff --git a/gnu/packages/hare.scm b/gnu/packages/hare.scm
index da5820510a..a73126096b 100644
--- a/gnu/packages/hare.scm
+++ b/gnu/packages/hare.scm
@@ -65,3 +65,44 @@ (define-public harec
If you want to code in Hare, @code{hare} package is recommended.")
(home-page "https://git.sr.ht/~sircmpwn/harec")
(license license:gpl3))))
+
+
+(define-public hare
+ (let ((revision "1")
+ (commit "0919412be13703235c7deabdb6216254e4a39432"))
+ (package
+ (name "hare")
+ (version (git-version "0.0.1" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://git.sr.ht/~sircmpwn/hare")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "042dxdcnk9fwgcfkd1iac8q944qsq6qb1c8v1s12ixybc3nmnnva"))))
+ (native-inputs (list scdoc))
+ (propagated-inputs (list qbe harec))
+ (build-system gnu-build-system)
+ (arguments
+ (list
+ #:make-flags
+ #~(list "HARECACHE=./cache"
+ (string-append "PREFIX=" #$output))
+ #:phases
+ #~(modify-phases %standard-phases
+ (replace 'configure
+ (lambda* (#:key inputs #:allow-other-keys)
+ (rename-file "config.example.mk" "config.mk"))))))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "HAREPATH")
+ (files (list "src/hare/stdlib" "src/hare/third-party")))))
+ (synopsis "Systems programming language")
+ (description "Hare is a systems programming language designed to be
+simple, stable, and robust. It uses a static type system, manual memory
+management, and a minimal runtime. This package provides the compiler, the
+compiler driver and the standard library.")
+ (home-page "https://git.sr.ht/~sircmpwn/hare")
+ (license license:gpl3))))
--
2.41.0
(
(name . Ekaitz Zarraga)(address . ekaitz@elenq.tech)
87jzu524ja.fsf@disroot.org
Ekaitz Zarraga <ekaitz@elenq.tech> writes:
Toggle quote (4 lines)
> Hi,
>
> I applied most of the proposed changes to the hare package, and I split the commit in two.

Looks good :) It's easier to read and apply the patches if you send
them with 'git send-email' as described by the manual, though:


Toggle quote (4 lines)
> I talked with the devs and we need to propagate at least those variables because
> the config.mk file is not persisting the values. We'll patch that upstream
> later.

You can still do something like this, surely?

(substitute* "foo/bar.ha"
(("\"harec\") (search-input-file inputs "/bin/harec"))
(("\"qbe\") (search-input-file inputs "/bin/qbe")))

-- (
E
E
Ekaitz Zarraga wrote on 8 Aug 2023 12:51
(name . ()(address . paren@disroot.org)
wBNTQaDpfn6EwTVrtHtIBUwN6TU0zO6-HRxKb6CVY9VZ4vir2Mhaaui1fgFVA0pvyYgNmi7_wcuxADKv7vFvNPvLfgiIVjX2NpcE47DhN8Y=@elenq.tech
Hi,


Toggle quote (5 lines)
> Looks good :) It's easier to read and apply the patches if you send
> them with 'git send-email' as described by the manual, though:
>
> https://guix.gnu.org/manual/devel/en/html_node/Sending-a-Patch-Series.html

My email provider doesn't help with that at all. I'm sorry... I have to do something about it.

Toggle quote (13 lines)
> > I talked with the devs and we need to propagate at least those variables because
> > the config.mk file is not persisting the values. We'll patch that upstream
> > later.
>
>
> You can still do something like this, surely?
>
> (substitute* "foo/bar.ha"
> (("\"harec\") (search-input-file inputs "/bin/harec"))
> (("\"qbe\") (search-input-file inputs "/bin/qbe")))
>
> -- (

Let me take a look into this and give it a try.
Thanks for the help!
?