summary refs log tree commit diff
diff options
context:
space:
mode:
authorPhilip McGrath <philip@philipmcgrath.com>2022-05-18 14:11:10 -0400
committerLudovic Courtès <ludo@gnu.org>2022-05-22 01:07:55 +0200
commitb6c0f18dee39d0adb2b8e7019e3d7cc5be9f933d (patch)
treefb6b81565d15eabca3e26e004733feb39a9204eb
parent9885c2fd07a26a48a40e0fda859a1c9ae0b3e973 (diff)
downloadguix-b6c0f18dee39d0adb2b8e7019e3d7cc5be9f933d.tar.gz
gnu: Add elm-todomvc.
* gnu/packages/elm.scm (elm-todomvc): New variable.
* doc/guix.texi (Build Systems)[elm-build-system]: Mention it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
-rw-r--r--doc/guix.texi4
-rw-r--r--gnu/packages/elm.scm53
2 files changed, 55 insertions, 2 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 27d0c69dad..9cdee15d55 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -8748,7 +8748,7 @@ Elm @dfn{projects} which declare @code{@{ "type": "package" @}} in their
 @file{elm.json} files.  Using @code{elm-build-system} to build Elm
 @dfn{applications} (which declare @code{@{ "type": "application" @}}) is
 possible, but requires ad-hoc modifications to the build phases.  For
-an example, see the definition of
+examples, see the definitions of the @code{elm-todomvc} example application and
 the @code{elm} package itself (because the front-end for the
 @samp{elm reactor} command is an Elm application).
 
@@ -8757,7 +8757,7 @@ Elm supports multiple versions of a package coexisting simultaneously under
 @env{ELM_HOME}, but this does not yet work well with @code{elm-build-system}.
 This limitation primarily affects Elm applications, because they specify
 exact versions for their dependencies, whereas Elm packages specify supported
-version ranges.  As a workaround, you can use
+version ranges.  As a workaround, the example applications mentioned above use
 the @code{patch-application-dependencies} procedure provided by
 @code{(guix build elm-build-system)} to rewrite their @file{elm.json} files to
 refer to the package versions actually present in the build environment.
diff --git a/gnu/packages/elm.scm b/gnu/packages/elm.scm
index d515d68e8f..9d3a58bcb5 100644
--- a/gnu/packages/elm.scm
+++ b/gnu/packages/elm.scm
@@ -487,3 +487,56 @@ you.")
 on the @code{marked} project, which focuses on speed.")
     (license license:bsd-3)))
 
+(define-public elm-todomvc
+  (let ((commit "f236e7e56941c7705aba6e42cb020ff515fe3290")
+        (revision "1"))
+    (package
+      (name "elm-todomvc")
+      (version (git-version "1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/evancz/elm-todomvc")
+               (commit commit)))
+         (sha256
+          (base32 "0g37bglzshkf79s4n7aq9ib44h5qn8ng7n72sh2xslgd20h05nfw"))
+         (file-name (git-file-name name version))))
+      (inputs (list elm-browser elm-core elm-html elm-json))
+      (build-system elm-build-system)
+      (arguments
+       (list
+        #:modules
+        `((srfi srfi-26)
+          ,@%elm-default-modules)
+        #:phases
+        #~(modify-phases %standard-phases
+            (delete 'stage)
+            (replace 'configure
+              patch-application-dependencies)
+            (replace 'build
+              (lambda* (#:key native-inputs inputs #:allow-other-keys)
+                (invoke (search-input-file (or native-inputs inputs)
+                                           "/bin/elm")
+                        "make"
+                        "src/Main.elm"
+                        "--output=elm.js")))
+            (replace 'install
+              (lambda args
+                (let* ((out-dir #$output)
+                       (dest-dir
+                        (string-append out-dir
+                                       "/share/"
+                                       (strip-store-file-name out-dir))))
+                  (for-each (cut install-file <> dest-dir)
+                            `("elm.js"
+                              "index.html"
+                              "style.css"
+                              "README.md")))))
+            (delete 'validate-compiled))))
+      (home-page "https://github.com/evancz/elm-todomvc")
+      (synopsis "TodoMVC in Elm")
+      (description "This is the official Elm implementation of
+@url{https://todomvc.com,TodoMVC}, a simple to-do--list application used to
+compare front-end web frameworks.")
+      (license license:bsd-3))))