mirror of
https://codeberg.org/guix/guix.git
synced 2026-01-28 03:45:07 -06:00
build-system: elm: Migrate to (json).
Fixes guix/guix#2617. * guix/build-system/elm.scm (%elm-build-system-modules) (%elm-default-modules): Remove (guix build json). (default-guile-json): New procedure. (elm-build): Add guile-json extension. * guix/build/elm-build-system.scm (stage, make-offline-registry-file) (read-offline-registry, find-indirect-dependencies) (patch-application-dependencies, configure): Refresh procedures replacing (guix build json) procedures with (json) ones. Signed-off-by: Liliana Marie Prikler <liliana.prikler@gmail.com>
This commit is contained in:
parent
944c20e171
commit
5bbed7ee01
2 changed files with 64 additions and 68 deletions
|
|
@ -86,7 +86,6 @@ given VERSION with sha256 checksum HASH."
|
|||
(define %elm-build-system-modules
|
||||
;; Build-side modules imported by default.
|
||||
`((guix build elm-build-system)
|
||||
(guix build json)
|
||||
(guix build union)
|
||||
,@%default-gnu-imported-modules))
|
||||
|
||||
|
|
@ -94,7 +93,6 @@ given VERSION with sha256 checksum HASH."
|
|||
;; Modules in scope in the build-side environment.
|
||||
'((guix build elm-build-system)
|
||||
(guix build utils)
|
||||
(guix build json)
|
||||
(guix build union)))
|
||||
|
||||
;; Lazily resolve bindings to avoid circular dependencies.
|
||||
|
|
@ -107,6 +105,10 @@ given VERSION with sha256 checksum HASH."
|
|||
(define (default-elm-json)
|
||||
(@* (gnu packages elm) elm-json))
|
||||
|
||||
(define (default-guile-json)
|
||||
"Return the default guile-json package, resolved lazily."
|
||||
(@* (gnu packages guile) guile-json-4))
|
||||
|
||||
(define* (lower name
|
||||
#:key source inputs native-inputs outputs system target
|
||||
(implicit-elm-package-inputs? #t)
|
||||
|
|
@ -168,23 +170,25 @@ given VERSION with sha256 checksum HASH."
|
|||
(search-paths '())
|
||||
(system (%current-system))
|
||||
(guile #f)
|
||||
(guile-json (default-guile-json))
|
||||
(imported-modules %elm-build-system-modules)
|
||||
(modules %elm-default-modules))
|
||||
"Build SOURCE using ELM."
|
||||
(define builder
|
||||
(with-imported-modules imported-modules
|
||||
#~(begin
|
||||
(use-modules #$@(sexp->gexp modules))
|
||||
(elm-build #:name #$name
|
||||
#:source #+source
|
||||
#:system #$system
|
||||
#:tests? #$tests?
|
||||
#:phases #$phases
|
||||
#:outputs #$(outputs->gexp outputs)
|
||||
#:search-paths '#$(sexp->gexp
|
||||
(map search-path-specification->sexp
|
||||
search-paths))
|
||||
#:inputs #$(input-tuples->gexp inputs)))))
|
||||
(with-extensions (list guile-json)
|
||||
(with-imported-modules imported-modules
|
||||
#~(begin
|
||||
(use-modules #$@(sexp->gexp modules))
|
||||
(elm-build #:name #$name
|
||||
#:source #+source
|
||||
#:system #$system
|
||||
#:tests? #$tests?
|
||||
#:phases #$phases
|
||||
#: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
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@
|
|||
(define-module (guix build elm-build-system)
|
||||
#:use-module ((guix build gnu-build-system) #:prefix gnu:)
|
||||
#:use-module (guix build utils)
|
||||
#:use-module (guix build json)
|
||||
#:use-module (guix build union)
|
||||
#:use-module (ice-9 ftw)
|
||||
#:use-module (ice-9 rdelim)
|
||||
|
|
@ -27,6 +26,7 @@
|
|||
#:use-module (ice-9 match)
|
||||
#:use-module (ice-9 popen)
|
||||
#:use-module (ice-9 vlist)
|
||||
#:use-module (json)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (srfi srfi-26)
|
||||
#:use-module (srfi srfi-71)
|
||||
|
|
@ -130,8 +130,7 @@ GUIX_ELM_PKG_VERSION to the name and version, respectively, of the Elm package
|
|||
being built, as defined in its \"elm.json\" file."
|
||||
(let* ((elm-version (getenv "GUIX_ELM_VERSION"))
|
||||
(elm-home (getenv "ELM_HOME"))
|
||||
(info (match (call-with-input-file "elm.json" read-json)
|
||||
(('@ . alist) alist)))
|
||||
(info (call-with-input-file "elm.json" json->scm))
|
||||
(name (assoc-ref info "name"))
|
||||
(version (assoc-ref info "version"))
|
||||
(rel-dir (string-append elm-version "/packages/" name "/" version))
|
||||
|
|
@ -181,12 +180,11 @@ versions from the internet."
|
|||
(with-directory-excursion org
|
||||
(map (lambda (repo)
|
||||
(cons (string-append org "/" repo)
|
||||
(directory-list repo)))
|
||||
(list->vector (directory-list repo))))
|
||||
(directory-list "."))))
|
||||
(directory-list ".")))))
|
||||
(call-with-output-file registry-file
|
||||
(lambda (out)
|
||||
(write-json `(@ ,@registry-alist) out)))
|
||||
(cut scm->json registry-alist <>))
|
||||
(patch-json-string-escapes registry-file)
|
||||
(setenv "GUIX_ELM_OFFLINE_REGISTRY_FILE" registry-file)))
|
||||
|
||||
|
|
@ -194,9 +192,8 @@ versions from the internet."
|
|||
"Return a vhash mapping Elm \"package\" names to lists of available version
|
||||
strings."
|
||||
(alist->vhash
|
||||
(match (call-with-input-file (getenv "GUIX_ELM_OFFLINE_REGISTRY_FILE")
|
||||
read-json)
|
||||
(('@ . alist) alist))))
|
||||
(call-with-input-file (getenv "GUIX_ELM_OFFLINE_REGISTRY_FILE")
|
||||
json->scm)))
|
||||
|
||||
(define (find-indirect-dependencies registry-vhash root-pkg root-version)
|
||||
"Return the recursive dependencies of ROOT-PKG, an Elm \"package\" name, at
|
||||
|
|
@ -210,13 +207,11 @@ conjunction with the ELM_HOME environment variable to find dependencies."
|
|||
"/packages")
|
||||
(define (get-dependencies pkg version acc)
|
||||
(let* ((elm-json-alist
|
||||
(match (call-with-input-file
|
||||
(string-append pkg "/" version "/elm.json")
|
||||
read-json)
|
||||
(('@ . alist) alist)))
|
||||
(call-with-input-file
|
||||
(string-append pkg "/" version "/elm.json")
|
||||
json->scm))
|
||||
(deps-alist
|
||||
(match (assoc-ref elm-json-alist "dependencies")
|
||||
(('@ . alist) alist)))
|
||||
(assoc-ref elm-json-alist "dependencies"))
|
||||
(deps-names
|
||||
(filter-map (match-lambda
|
||||
((name . range)
|
||||
|
|
@ -231,7 +226,7 @@ conjunction with the ELM_HOME environment variable to find dependencies."
|
|||
(if (vhash-assoc pkg acc)
|
||||
acc
|
||||
(match (vhash-assoc pkg registry-vhash)
|
||||
((_ version . _)
|
||||
((_ . #(version))
|
||||
;; in the rare case that multiple versions are present,
|
||||
;; just picking an arbitrary one seems to work well enough for now
|
||||
(get-dependencies pkg version (vhash-cons pkg version acc))))))
|
||||
|
|
@ -249,37 +244,34 @@ versions."
|
|||
(match-lambda
|
||||
((name . _)
|
||||
(cons name (match (vhash-assoc name registry-vhash)
|
||||
((_ version) ;; no dot
|
||||
((_ . #(version)) ;; no dot
|
||||
version))))))
|
||||
(rewrite-direct/indirect
|
||||
(match-lambda
|
||||
;; a little checking to avoid confusing misuse with "package"
|
||||
;; project dependencies, which have a different shape
|
||||
(((and key (or "direct" "indirect"))
|
||||
'@ . alist)
|
||||
`(,key @ ,@(map rewrite-dep-version alist)))))
|
||||
. alist)
|
||||
`(,key ,@(map rewrite-dep-version alist)))))
|
||||
(rewrite-json-section
|
||||
(match-lambda
|
||||
(((and key (or "dependencies" "test-dependencies"))
|
||||
'@ . alist)
|
||||
`(,key @ ,@(map rewrite-direct/indirect alist)))
|
||||
. alist)
|
||||
`(,key ,@(map rewrite-direct/indirect alist)))
|
||||
((k . v)
|
||||
(cons k v))))
|
||||
(rewrite-elm-json
|
||||
(match-lambda
|
||||
(('@ . alist)
|
||||
`(@ ,@(map rewrite-json-section alist))))))
|
||||
(cut map rewrite-json-section <>)))
|
||||
(with-atomic-file-replacement "elm.json"
|
||||
(lambda (in out)
|
||||
(write-json (rewrite-elm-json (read-json in))
|
||||
out)))
|
||||
(scm->json (rewrite-elm-json (json->scm in))
|
||||
out)))
|
||||
(patch-json-string-escapes "elm.json")))
|
||||
|
||||
(define* (configure #:key native-inputs inputs #:allow-other-keys)
|
||||
"Generate a trivial Elm \"application\" with a direct dependency on the Elm
|
||||
\"package\" currently being built."
|
||||
(let* ((info (match (call-with-input-file "elm.json" read-json)
|
||||
(('@ . alist) alist)))
|
||||
(let* ((info (call-with-input-file "elm.json" json->scm))
|
||||
(name (getenv "GUIX_ELM_PKG_NAME"))
|
||||
(version (getenv "GUIX_ELM_PKG_VERSION"))
|
||||
(elm-home (getenv "ELM_HOME"))
|
||||
|
|
@ -289,31 +281,31 @@ versions."
|
|||
(with-directory-excursion app-dir
|
||||
(call-with-output-file "elm.json"
|
||||
(lambda (out)
|
||||
(write-json
|
||||
`(@ ("type" . "application")
|
||||
("source-directories" "src") ;; intentionally no dot
|
||||
("elm-version" . ,(getenv "GUIX_ELM_VERSION"))
|
||||
("dependencies"
|
||||
@ ("direct"
|
||||
@ ,@(map (lambda (pkg)
|
||||
(match (vhash-assoc pkg registry-vhash)
|
||||
((_ pkg-version . _)
|
||||
(cons pkg
|
||||
(if (equal? pkg name)
|
||||
version
|
||||
pkg-version)))))
|
||||
(if (member name %essential-elm-packages)
|
||||
%essential-elm-packages
|
||||
(cons name %essential-elm-packages))))
|
||||
("indirect"
|
||||
@ ,@(if (member name %essential-elm-packages)
|
||||
'()
|
||||
(find-indirect-dependencies registry-vhash
|
||||
name
|
||||
version))))
|
||||
("test-dependencies"
|
||||
@ ("direct" @)
|
||||
("indirect" @)))
|
||||
(scm->json
|
||||
`(("type" . "application")
|
||||
("source-directories" . #("src")) ;; intentionally no dot
|
||||
("elm-version" . ,(getenv "GUIX_ELM_VERSION"))
|
||||
("dependencies"
|
||||
("direct"
|
||||
,@(map (lambda (pkg)
|
||||
(match (vhash-assoc pkg registry-vhash)
|
||||
((_ . #(pkg-version))
|
||||
(cons pkg
|
||||
(if (equal? pkg name)
|
||||
version
|
||||
pkg-version)))))
|
||||
(if (member name %essential-elm-packages)
|
||||
%essential-elm-packages
|
||||
(cons name %essential-elm-packages))))
|
||||
("indirect"
|
||||
,@(if (member name %essential-elm-packages)
|
||||
'()
|
||||
(find-indirect-dependencies registry-vhash
|
||||
name
|
||||
version))))
|
||||
("test-dependencies"
|
||||
("direct")
|
||||
("indirect")))
|
||||
out)))
|
||||
(patch-json-string-escapes "elm.json")
|
||||
(with-output-to-file "src/Main.elm"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue