diff options
author | Christopher Baines <mail@cbaines.net> | 2023-03-02 10:37:28 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2023-03-02 10:55:08 +0000 |
commit | 7df09ee0ab3e7962ef27859ce87e06a323059284 (patch) | |
tree | d81334f742ddcb9a1ee63961ca6410922980af1c /guix/build-system | |
parent | 2ac51ec99b58b50c08ba719a8c7e9dba0330b065 (diff) | |
parent | af95f2d8f98eb2c8c64954bb2fd0b70838899174 (diff) |
Merge remote-tracking branch 'savannah/master' into core-updates
Conflicts:
gnu/local.mk
gnu/packages/autotools.scm
gnu/packages/cmake.scm
gnu/packages/gnuzilla.scm
gnu/packages/haskell.scm
gnu/packages/pdf.scm
gnu/packages/python-xyz.scm
gnu/packages/samba.scm
gnu/packages/tex.scm
gnu/packages/tls.scm
gnu/packages/wxwidgets.scm
Diffstat (limited to 'guix/build-system')
-rw-r--r-- | guix/build-system/cargo.scm | 1 | ||||
-rw-r--r-- | guix/build-system/copy.scm | 1 | ||||
-rw-r--r-- | guix/build-system/dune.scm | 1 | ||||
-rw-r--r-- | guix/build-system/font.scm | 1 | ||||
-rw-r--r-- | guix/build-system/guile.scm | 2 | ||||
-rw-r--r-- | guix/build-system/haskell.scm | 5 | ||||
-rw-r--r-- | guix/build-system/meson.scm | 13 | ||||
-rw-r--r-- | guix/build-system/ocaml.scm | 1 | ||||
-rw-r--r-- | guix/build-system/ruby.scm | 1 | ||||
-rw-r--r-- | guix/build-system/scons.scm | 1 | ||||
-rw-r--r-- | guix/build-system/texlive.scm | 1 | ||||
-rw-r--r-- | guix/build-system/tree-sitter.scm | 195 | ||||
-rw-r--r-- | guix/build-system/waf.scm | 1 |
13 files changed, 210 insertions, 14 deletions
diff --git a/guix/build-system/cargo.scm b/guix/build-system/cargo.scm index 60c35eed07..912400a191 100644 --- a/guix/build-system/cargo.scm +++ b/guix/build-system/cargo.scm @@ -123,6 +123,7 @@ to NAME and VERSION." (gexp->derivation name builder #:system system #:target #f + #:graft? #f #:guile-for-build guile)) (define (package-cargo-inputs p) diff --git a/guix/build-system/copy.scm b/guix/build-system/copy.scm index e15dc9f616..6cd3ec0216 100644 --- a/guix/build-system/copy.scm +++ b/guix/build-system/copy.scm @@ -133,6 +133,7 @@ #:system system #:target #f #:substitutable? substitutable? + #:graft? #f #:guile-for-build guile))) (define copy-build-system diff --git a/guix/build-system/dune.scm b/guix/build-system/dune.scm index 05784feb32..dc280242fb 100644 --- a/guix/build-system/dune.scm +++ b/guix/build-system/dune.scm @@ -156,6 +156,7 @@ provides a 'setup.ml' file as its build system." (gexp->derivation name builder #:system system #:target #f + #:graft? #f #:guile-for-build guile)) (define dune-build-system diff --git a/guix/build-system/font.scm b/guix/build-system/font.scm index c43fb9a542..925933516c 100644 --- a/guix/build-system/font.scm +++ b/guix/build-system/font.scm @@ -112,6 +112,7 @@ (gexp->derivation name builder #:system system #:target #f + #:graft? #f #:guile-for-build guile))) (define font-build-system diff --git a/guix/build-system/guile.scm b/guix/build-system/guile.scm index 36a88e181a..ffc892260a 100644 --- a/guix/build-system/guile.scm +++ b/guix/build-system/guile.scm @@ -114,6 +114,7 @@ (gexp->derivation name builder #:system system #:target #f + #:graft? #f #:guile-for-build guile))) (define* (guile-cross-build name @@ -170,6 +171,7 @@ (gexp->derivation name builder #:system system #:target target + #:graft? #f #:guile-for-build guile))) (define guile-build-system diff --git a/guix/build-system/haskell.scm b/guix/build-system/haskell.scm index dc83512d30..a37b3a938c 100644 --- a/guix/build-system/haskell.scm +++ b/guix/build-system/haskell.scm @@ -109,10 +109,7 @@ version REVISION." ,@(standard-packages))) (build-inputs `(("haskell" ,haskell) ,@native-inputs)) - ;; XXX: this is a hack to get around issue #41569. - (outputs (match outputs - (("out") (cons "static" outputs)) - (_ outputs))) + (outputs outputs) (build haskell-build) (arguments (substitute-keyword-arguments diff --git a/guix/build-system/meson.scm b/guix/build-system/meson.scm index 0948ad92b5..bf43303027 100644 --- a/guix/build-system/meson.scm +++ b/guix/build-system/meson.scm @@ -74,16 +74,9 @@ for TRIPLET." ;; for selecting optimisations, so set it to something ;; arbitrary. (#t "strawberries"))) - (endian . ,(cond ((string-prefix? "powerpc64le-" triplet) "little") - ((string-prefix? "mips64el-" triplet) "little") - ((target-x86-32? triplet) "little") - ((target-x86-64? triplet) "little") - ;; At least in Guix. Aarch64 and 32-bit arm - ;; have a big-endian mode as well. - ((target-arm? triplet) "little") - ((target-ppc32? triplet) "big") - ((target-riscv64? triplet) "little") - (#t (error "meson: unknown architecture")))))) + (endian . ,(if (target-little-endian? triplet) + "little" + "big")))) (define (make-binaries-alist triplet) "Make an associatoin list describing what should go into diff --git a/guix/build-system/ocaml.scm b/guix/build-system/ocaml.scm index 5f4308a46e..6e1fc62a62 100644 --- a/guix/build-system/ocaml.scm +++ b/guix/build-system/ocaml.scm @@ -309,6 +309,7 @@ provides a 'setup.ml' file as its build system." (gexp->derivation name builder #:system system #:target #f + #:graft? #f #:guile-for-build guile)) (define ocaml-build-system diff --git a/guix/build-system/ruby.scm b/guix/build-system/ruby.scm index 342daf7978..0aa273b4f4 100644 --- a/guix/build-system/ruby.scm +++ b/guix/build-system/ruby.scm @@ -114,6 +114,7 @@ NAME and VERSION." (gexp->derivation name build #:system system #:target #f + #:graft? #f #:modules imported-modules #:guile-for-build guile))) diff --git a/guix/build-system/scons.scm b/guix/build-system/scons.scm index 7a02fa8a0f..9af24d40f8 100644 --- a/guix/build-system/scons.scm +++ b/guix/build-system/scons.scm @@ -121,6 +121,7 @@ provides a 'SConstruct' file as its build system." (gexp->derivation name builder #:system system #:target #f + #:graft? #f #:guile-for-build guile)) (define scons-build-system diff --git a/guix/build-system/texlive.scm b/guix/build-system/texlive.scm index dbb72cd24a..336e192d83 100644 --- a/guix/build-system/texlive.scm +++ b/guix/build-system/texlive.scm @@ -182,6 +182,7 @@ level package ID." (gexp->derivation name builder #:system system #:target #f + #:graft? #f #:substitutable? substitutable? #:guile-for-build guile))) diff --git a/guix/build-system/tree-sitter.scm b/guix/build-system/tree-sitter.scm new file mode 100644 index 0000000000..21c4eb35b2 --- /dev/null +++ b/guix/build-system/tree-sitter.scm @@ -0,0 +1,195 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2022 Pierre Langlois <pierre.langlois@gmx.com> +;;; +;;; 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 (guix build-system tree-sitter) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (guix packages) + #:use-module (guix gexp) + #:use-module (guix monads) + #:use-module (guix search-paths) + #:use-module (guix build-system) + #:use-module (guix build-system gnu) + #:use-module (guix build-system node) + #:use-module (ice-9 match) + #:export (%tree-sitter-build-system-modules + tree-sitter-build + tree-sitter-build-system)) + +(define %tree-sitter-build-system-modules + ;; Build-side modules imported by default. + `((guix build tree-sitter-build-system) + ,@%node-build-system-modules)) + +(define* (lower name + #:key source inputs native-inputs outputs system target + #:allow-other-keys + #:rest arguments) + "Return a bag for NAME from the given arguments." + (define private-keywords + `(#:inputs #:native-inputs #:outputs ,@(if target + '() + '(#:target)))) + (define node + (module-ref (resolve-interface '(gnu packages node)) + 'node-lts)) + (define tree-sitter + (module-ref (resolve-interface '(gnu packages tree-sitter)) + 'tree-sitter)) + (define tree-sitter-cli + (module-ref (resolve-interface '(gnu packages tree-sitter)) + 'tree-sitter-cli)) + ;; Grammars depend on each other via JS modules, which we package into a + ;; dedicated js output. + (define grammar-inputs + (map (match-lambda + ((name package) + `(,name ,package "js"))) + inputs)) + (bag + (name name) + (system system) (target target) + (build-inputs `(,@(if source + `(("source" ,source)) + '()) + ("node" ,node) + ("tree-sitter-cli" ,tree-sitter-cli) + ,@native-inputs + ,@(if target '() grammar-inputs) + ;; Keep the standard inputs of 'gnu-build-system'. + ,@(if target + (standard-cross-packages target 'host) + '()) + ,@(standard-packages))) + (host-inputs `(("tree-sitter" ,tree-sitter) + ,@(if target grammar-inputs '()))) + ;; Keep the standard inputs of 'gnu-buid-system'. + (target-inputs (if target + (standard-cross-packages target 'target) + '())) + ;; XXX: this is a hack to get around issue #41569. + (outputs (match outputs + (("out") (cons "js" outputs)) + (_ outputs))) + (build (if target tree-sitter-cross-build tree-sitter-build)) + (arguments (strip-keyword-arguments private-keywords arguments)))) + +(define* (tree-sitter-build name inputs + #:key + source + (phases '%standard-phases) + (grammar-directories '(".")) + (tests? #t) + (outputs '("out" "js")) + (search-paths '()) + (system (%current-system)) + (guile #f) + (imported-modules %tree-sitter-build-system-modules) + (modules '((guix build utils) + (guix build tree-sitter-build-system)))) + (define builder + (with-imported-modules imported-modules + #~(begin + (use-modules #$@(sexp->gexp modules)) + (tree-sitter-build #:name #$name + #:source #+source + #:system #$system + #:phases #$phases + #:tests? #$tests? + #:grammar-directories '#$grammar-directories + #:outputs #$(outputs->gexp outputs) + #:search-paths + '#$(sexp->gexp + (map search-path-specification->sexp + search-paths)) + #:inputs #$(input-tuples->gexp inputs))))) + + (mlet %store-monad ((guile (package->derivation (or guile (default-guile)) + system #:graft? #f))) + (gexp->derivation name builder + #:system system + #:guile-for-build guile))) + +(define* (tree-sitter-cross-build name + #:key + target + build-inputs target-inputs host-inputs + guile source + (phases '%standard-phases) + (grammar-directories '(".")) + (tests? #t) + (outputs '("out" "js")) + (search-paths '()) + (native-search-paths '()) + (system (%current-system)) + (build (nix-system->gnu-triplet system)) + (imported-modules + %tree-sitter-build-system-modules) + (modules + '((guix build utils) + (guix build tree-sitter-build-system)))) + (define builder + (with-imported-modules imported-modules + #~(begin + (use-modules #$@(sexp->gexp modules)) + + (define %build-host-inputs + #+(input-tuples->gexp build-inputs)) + + (define %build-target-inputs + (append #$(input-tuples->gexp host-inputs) + #+(input-tuples->gexp target-inputs))) + + (define %build-inputs + (append %build-host-inputs %build-target-inputs)) + + (tree-sitter-build #:name #$name + #:source #+source + #:system #$system + #:build #$build + #:target #$target + #:phases #$phases + #:tests? #$tests? + #:grammar-directories '#$grammar-directories + #:outputs #$(outputs->gexp outputs) + #:inputs %build-target-inputs + #:native-inputs %build-host-inputs + #:search-paths ' + #$(sexp->gexp + (map search-path-specification->sexp + search-paths)) + #:native-search-paths + '#$(sexp->gexp + (map + search-path-specification->sexp + native-search-paths)))))) + + (mlet %store-monad ((guile (package->derivation (or guile (default-guile)) + system #:graft? #f))) + (gexp->derivation name builder + #:system system + #:target target + #:guile-for-build guile))) + +(define tree-sitter-build-system + (build-system + (name 'tree-sitter) + (description "The Tree-sitter grammar build system") + (lower lower))) + +;;; tree-sitter.scm ends here diff --git a/guix/build-system/waf.scm b/guix/build-system/waf.scm index e8cd5520b8..1d520050f6 100644 --- a/guix/build-system/waf.scm +++ b/guix/build-system/waf.scm @@ -111,6 +111,7 @@ as its build system." (gexp->derivation name build #:system system #:target #f + #:graft? #f #:modules imported-modules #:guile-for-build guile))) |