guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

02/02: import/cran: Generate rudimentary ARGUMENTS field.


From: guix-commits
Subject: 02/02: import/cran: Generate rudimentary ARGUMENTS field.
Date: Sun, 21 Jan 2024 05:10:13 -0500 (EST)

rekado pushed a commit to branch master
in repository guix.

commit 2d83a25450d4b820c13d52152e5e9f1bbfb5d985
Author: Ricardo Wurmus <rekado@elephly.net>
AuthorDate: Sun Jan 21 11:05:46 2024 +0100

    import/cran: Generate rudimentary ARGUMENTS field.
    
    * guix/import/cran.scm (phases-for-inputs, maybe-arguments): New procedures.
    (description->package): Splice in result of MAYBE-ARGUMENTS.
    
    Change-Id: I578e1903f37c91bf865f0be49b04187ec372ed05
---
 guix/import/cran.scm | 48 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 47 insertions(+), 1 deletion(-)

diff --git a/guix/import/cran.scm b/guix/import/cran.scm
index d7497e6fb9..57a8e86fcb 100644
--- a/guix/import/cran.scm
+++ b/guix/import/cran.scm
@@ -672,6 +672,52 @@ of META, a package in REPOSITORY."
             (string<? (upstream-input-downstream-name input1)
                       (upstream-input-downstream-name input2))))))
 
+(define (phases-for-inputs input-names)
+  "Generate a list of build phases based on the provided INPUT-NAMES, a list
+of package names for all input packages."
+  (let ((rules
+         (list (lambda ()
+                 (and (member "styler" input-names)
+                      '(add-after 'unpack 'set-HOME
+                         (lambda _ (setenv "HOME" "/tmp")))))
+               (lambda ()
+                 (and (member "esbuild" input-names)
+                      '(add-after 'unpack 'process-javascript
+                         (lambda* (#:key inputs #:allow-other-keys)
+                           (with-directory-excursion "inst/"
+                             (for-each (match-lambda
+                                         ((source . target)
+                                          (minify source #:target target)))
+                                       '())))))))))
+    (fold (lambda (rule phases)
+            (let ((new-phase (rule)))
+              (if new-phase (cons new-phase phases) phases)))
+          (list)
+          rules)))
+
+(define (maybe-arguments inputs)
+  "Generate a list for the arguments field that can be spliced into a package
+S-expression."
+  (let ((input-names (map upstream-input-name inputs))
+        (esbuild-modules '(#:modules
+                           '((guix build r-build-system)
+                             (guix build minify-build-system)
+                             (guix build utils)
+                             (ice-9 match))
+                           #:imported-modules
+                           `(,@%r-build-system-modules
+                             (guix build minify-build-system)))))
+    (match (phases-for-inputs input-names)
+      (() '())
+      (phases
+       `((arguments
+          (list
+           ,@(if (member "esbuild" input-names)
+                 esbuild-modules '())
+           #:phases
+           '(modify-phases %standard-phases
+              ,@phases))))))))
+
 (define* (description->package repository meta #:key (license-prefix identity)
                                (download-source download))
   "Return the `package' s-expression for an R package published on REPOSITORY
@@ -751,7 +797,7 @@ from the alist META, which was derived from the R package's 
DESCRIPTION file."
                     `((properties ,`(,'quasiquote ((,'upstream-name . 
,name)))))
                     '())
               (build-system r-build-system)
-
+              ,@(maybe-arguments inputs)
               ,@(maybe-inputs (filter (upstream-input-type-predicate 'regular)
                                       inputs)
                               'inputs)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]