From 276afa66c322add2250fb3f8f7dc64faee54dd58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Dur=C3=A1n=20Dom=C3=ADnguez?= Date: Tue, 10 Feb 2026 21:20:47 +0100 Subject: [PATCH] gnu: Add goal. * gnu/packages/array-languages.scm (goal): New variable. Change-Id: I4e56852bbe25c66748325d6a225742b633be2e68 Signed-off-by: Liliana Marie Prikler --- gnu/packages/array-languages.scm | 73 ++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/gnu/packages/array-languages.scm b/gnu/packages/array-languages.scm index 3ba2be6b50..cb15e0d447 100644 --- a/gnu/packages/array-languages.scm +++ b/gnu/packages/array-languages.scm @@ -29,6 +29,79 @@ ;;; ;;; Code: +(define-public goal + (package + (name "goal") + (version "1.5.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://codeberg.org/anaseto/goal") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1ckkjd2hf2v6f8x0ck9brp1ii4q8lcssvvwn7d6l1l5n9kcfjw7n")))) + (build-system go-build-system) + (inputs (list bash-minimal)) + (outputs (list "out" "lib")) + (arguments + (list + #:unpack-path "codeberg.org/anaseto/goal" + #:import-path "codeberg.org/anaseto/goal/cmd/goal" + #:build-flags + #~(list "-tags" "full,nosse4") ;disable SSE4.2 optimizations + #:test-flags + #~(list "-skip" "TestSources/version.goal" ;git tests require a repo + "-tags" "full,nosse4") + #:phases + #~(modify-phases %standard-phases + ;; Goal requires a shell interpreter. + (add-after 'unpack 'fix-sh-path + (lambda* (#:key unpack-path #:allow-other-keys) + (substitute* (string-append "src/" unpack-path "/os/os.go") + (("/bin/sh") + #$(file-append bash-minimal "/bin/sh"))))) + ;; Tests require the goal binary. + (add-before 'check 'add-goal-path + (lambda _ + (setenv "PATH" + (string-append (getenv "PATH") ":" #$output "/bin")))) + ;; Goal is embeddable, but end users typically don't need the source + ;; code. + (replace 'install + (lambda* (#:key unpack-path #:allow-other-keys #:rest arguments) + (apply (assoc-ref %standard-phases 'install) + `(,@arguments #:import-path ,unpack-path)) + (mkdir-p #$output:lib) + (rename-file (string-append #$output "/src") + (string-append #$output:lib "/src")))) + (add-after 'install 'install-goal-libs-and-documentation + (lambda* (#:key unpack-path inputs #:allow-other-keys #:rest + arguments) + (let ((outdir (string-append #$output "/share/goal/" + #$(version-major version) "/lib"))) + (mkdir-p outdir) + (copy-recursively (string-append "src/" unpack-path "/lib") + outdir)) + (install-file (string-append "src/" unpack-path "/docs/goal.1") + (string-append #$output "/share/man/man1"))))))) + (native-search-paths + (list (search-path-specification + (variable "GOALLIB") + (separator #f) + (files `(,(string-append "share/goal/" + (version-major version) "/lib")))))) + (home-page "https://anaseto.codeberg.page/goal-docs/") + (synopsis "Embeddable scripting array language") + (description + "Goal is an embeddable array programming language with a bytecode +interpreter, written in Go. The command line intepreter can execute scripts +or run in interactive mode. Goal shines the most in common scripting tasks, +like handling columnar data or text processing. It is also suitable for +exploratory programming.") + (license license:isc))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above in alphabetic order.