2015-07-24 10:49:57 -04:00
|
|
|
|
;;; GNU Guix --- Functional package management for GNU
|
2023-04-27 15:48:12 -04:00
|
|
|
|
;;; Copyright © 2015-2023 Ricardo Wurmus <rekado@elephly.net>
|
upstream: Replace 'input-changes' field by 'inputs'.
Returning the expected list of inputs rather than changes relative to
the current package definition is less ambiguous and offers more
possibilities for further processing.
* guix/upstream.scm (<upstream-source>)[input-changes]: Remove.
[inputs]: New field.
(<upstream-input>): New record type.
* guix/upstream.scm (upstream-input-type-predicate)
(input-type-filter, upstream-source-regular-inputs)
(upstream-source-native-inputs, upstream-source-propagated-inputs): New
procedures.
(changed-inputs): Expect an <upstream-source> as its second argument.
Adjust accordingly.
* guix/import/pypi.scm (distribution-sha256): New procedure.
(maybe-inputs): Expect a list of <upstream-input>.
(compute-inputs): Rewrite to return a list of <upstream-input>.
(pypi-package-inputs, pypi-package->upstream-source): New procedures.
(make-pypi-sexp): Use it.
* guix/import/stackage.scm (latest-lts-release): Define 'cabal'.
Replace 'input-changes' field by 'inputs'.
* guix/scripts/refresh.scm (update-package): Use 'changed-inputs'
instead of 'upstream-source-input-changes'.
* tests/cran.scm ("description->package"): Adjust order of inputs.
* tests/pypi.scm (default-sha256, default-sha256/base32): New variables.
(foo-json): Add 'digests' entry.
("pypi->guix-package, no wheel"): Check HASH against DEFAULT-SHA256/BASE32.
("pypi->guix-package, wheels"): Likewise.
("pypi->guix-package, no usable requirement file."): Likewise.
("pypi->guix-package, package name contains \"-\" followed by digits"):
Likewise.
("package-latest-release"): New test.
* tests/upstream.scm (test-package-sexp): Remove.
("changed-inputs returns no changes"): Rewrite to use <upstream-source>.
(test-new-package-sexp): Remove.
("changed-inputs returns changes to plain input list"): Rewrite.
("changed-inputs returns changes to all plain input lists"): Likewise.
("changed-inputs returns changes to labelled input list")
("changed-inputs returns changes to all labelled input lists"): Remove.
* guix/import/cran.scm (maybe-inputs): Expect PACKAGE-INPUTS to be a
list of <upstream-input>.
(source-dir->dependencies): Return a list of <upstream-input>.
(vignette-builders): Likewise.
(uri-helper, cran-package-source-url)
(cran-package-propagated-inputs, cran-package-inputs): New procedures.
(description->package): Use them instead of local definitions.
(latest-cran-release): Replace 'input-changes' field by 'inputs'.
(latest-bioconductor-release): Likewise.
(format-inputs): Remove.
* guix/import/hackage.scm (cabal-package-inputs): New procedure.
(hackage-module->sexp): Use it.
[maybe-inputs]: Expect a list of <upstream-input>.
2023-05-15 16:37:25 -04:00
|
|
|
|
;;; Copyright © 2015-2017, 2019-2021, 2023 Ludovic Courtès <ludo@gnu.org>
|
2017-05-04 05:52:33 -04:00
|
|
|
|
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
|
2020-02-04 07:18:18 -05:00
|
|
|
|
;;; Copyright © 2020 Martin Becze <mjbecze@riseup.net>
|
2022-01-05 09:07:48 -05:00
|
|
|
|
;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
|
2021-01-19 10:47:20 -05:00
|
|
|
|
;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
|
2022-06-24 16:01:35 -04:00
|
|
|
|
;;; Copyright © 2022 Hartmut Goebel <h.goebel@crazy-compilers.com>
|
2015-07-24 10:49:57 -04:00
|
|
|
|
;;;
|
|
|
|
|
;;; 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 import cran)
|
|
|
|
|
#:use-module (ice-9 match)
|
|
|
|
|
#:use-module (ice-9 regex)
|
2020-03-25 04:36:58 -04:00
|
|
|
|
#:use-module (ice-9 popen)
|
2017-03-27 06:53:13 -04:00
|
|
|
|
#:use-module ((ice-9 rdelim) #:select (read-string read-line))
|
2015-07-24 10:49:57 -04:00
|
|
|
|
#:use-module (srfi srfi-1)
|
2018-12-20 03:37:58 -05:00
|
|
|
|
#:use-module (srfi srfi-2)
|
2015-10-21 08:36:14 -04:00
|
|
|
|
#:use-module (srfi srfi-26)
|
2016-12-17 09:24:45 -05:00
|
|
|
|
#:use-module (srfi srfi-34)
|
2020-12-11 18:06:18 -05:00
|
|
|
|
#:use-module (srfi srfi-35)
|
2022-12-31 08:40:13 -05:00
|
|
|
|
#:use-module (srfi srfi-71)
|
2016-12-17 09:24:45 -05:00
|
|
|
|
#:use-module (web uri)
|
Add (guix memoization).
* guix/combinators.scm (memoize): Remove.
* guix/memoization.scm: New file.
* Makefile.am (MODULES): Add it.
* gnu/packages.scm, gnu/packages/bootstrap.scm,
guix/build-system/gnu.scm, guix/build-system/python.scm,
guix/derivations.scm, guix/gnu-maintenance.scm,
guix/import/cran.scm, guix/import/elpa.scm,
guix/modules.scm, guix/scripts/build.scm,
guix/scripts/graph.scm, guix/scripts/lint.scm,
guix/store.scm, guix/utils.scm: Adjust imports accordingly.
2017-01-28 10:33:57 -05:00
|
|
|
|
#:use-module (guix memoization)
|
2015-07-24 10:49:57 -04:00
|
|
|
|
#:use-module (guix http-client)
|
2021-10-28 08:54:22 -04:00
|
|
|
|
#:use-module (guix diagnostics)
|
2022-01-05 09:07:48 -05:00
|
|
|
|
#:use-module (guix hash)
|
2021-10-28 08:54:22 -04:00
|
|
|
|
#:use-module (guix i18n)
|
2015-07-24 10:49:57 -04:00
|
|
|
|
#:use-module (guix store)
|
|
|
|
|
#:use-module (guix base32)
|
|
|
|
|
#:use-module ((guix download) #:select (download-to-store))
|
|
|
|
|
#:use-module (guix import utils)
|
2020-03-25 04:36:58 -04:00
|
|
|
|
#:use-module ((guix build utils)
|
|
|
|
|
#:select (find-files
|
|
|
|
|
delete-file-recursively
|
|
|
|
|
with-directory-excursion))
|
2017-03-27 06:53:13 -04:00
|
|
|
|
#:use-module (guix utils)
|
2019-08-27 18:38:31 -04:00
|
|
|
|
#:use-module (guix git)
|
2015-12-16 08:45:28 -05:00
|
|
|
|
#:use-module ((guix build-system r) #:select (cran-uri bioconductor-uri))
|
2015-10-21 08:36:14 -04:00
|
|
|
|
#:use-module (guix upstream)
|
|
|
|
|
#:use-module (guix packages)
|
2023-02-17 16:25:27 -05:00
|
|
|
|
#:use-module (guix sets)
|
2020-12-17 04:40:30 -05:00
|
|
|
|
#:export (%input-style
|
|
|
|
|
|
|
|
|
|
cran->guix-package
|
2015-12-16 08:45:28 -05:00
|
|
|
|
bioconductor->guix-package
|
2018-06-08 06:46:43 -04:00
|
|
|
|
cran-recursive-import
|
2015-12-16 08:45:28 -05:00
|
|
|
|
%cran-updater
|
2017-05-16 15:42:18 -04:00
|
|
|
|
%bioconductor-updater
|
2019-09-16 05:16:40 -04:00
|
|
|
|
%bioconductor-version
|
2017-05-16 15:42:18 -04:00
|
|
|
|
|
|
|
|
|
cran-package?
|
|
|
|
|
bioconductor-package?
|
|
|
|
|
bioconductor-data-package?
|
2020-01-16 15:47:36 -05:00
|
|
|
|
bioconductor-experiment-package?
|
|
|
|
|
|
|
|
|
|
description->alist
|
|
|
|
|
description->package))
|
2015-07-24 10:49:57 -04:00
|
|
|
|
|
|
|
|
|
;;; Commentary:
|
|
|
|
|
;;;
|
|
|
|
|
;;; Generate a package declaration template for the latest version of an R
|
2015-12-03 10:12:09 -05:00
|
|
|
|
;;; package on CRAN, using the DESCRIPTION file downloaded from
|
2015-07-24 10:49:57 -04:00
|
|
|
|
;;; cran.r-project.org.
|
|
|
|
|
;;;
|
|
|
|
|
;;; Code:
|
|
|
|
|
|
2020-12-17 04:40:30 -05:00
|
|
|
|
(define %input-style
|
|
|
|
|
(make-parameter 'variable)) ; or 'specification
|
|
|
|
|
|
2022-10-18 06:45:15 -04:00
|
|
|
|
(define (string->licenses license-string license-prefix)
|
2022-09-28 16:07:40 -04:00
|
|
|
|
(let ((licenses
|
|
|
|
|
(map string-trim-both
|
|
|
|
|
(string-tokenize license-string
|
|
|
|
|
(char-set-complement (char-set #\|))))))
|
2022-10-18 06:45:15 -04:00
|
|
|
|
(string->license licenses license-prefix)))
|
2015-07-24 10:49:57 -04:00
|
|
|
|
|
2022-10-18 06:45:15 -04:00
|
|
|
|
(define (string->license license-string license-prefix)
|
|
|
|
|
(let ((prefix license-prefix))
|
|
|
|
|
(match license-string
|
2022-09-28 16:07:40 -04:00
|
|
|
|
("AGPL-3" (prefix 'agpl3))
|
|
|
|
|
("AGPL (>= 3)" (prefix 'agpl3+))
|
|
|
|
|
("Artistic-2.0" (prefix 'artistic2.0))
|
|
|
|
|
((or "Apache License 2.0"
|
|
|
|
|
"Apache License (== 2.0)")
|
|
|
|
|
(prefix 'asl2.0))
|
|
|
|
|
("BSD_2_clause" (prefix 'bsd-2))
|
|
|
|
|
("BSD_2_clause + file LICENSE" (prefix 'bsd-2))
|
|
|
|
|
("BSD_3_clause" (prefix 'bsd-3))
|
|
|
|
|
("BSD_3_clause + file LICENSE" (prefix 'bsd-3))
|
|
|
|
|
("CC0" (prefix 'cc0))
|
|
|
|
|
("CC BY-SA 4.0" (prefix 'cc-by-sa4.0))
|
|
|
|
|
("CeCILL" (prefix 'cecill))
|
|
|
|
|
((or "GPL"
|
|
|
|
|
"GNU General Public License")
|
|
|
|
|
`(list ,(prefix 'gpl2+) ,(prefix 'gpl3+)))
|
|
|
|
|
((or "GPL (>= 2)"
|
|
|
|
|
"GPL (>= 2.0)")
|
|
|
|
|
(prefix 'gpl2+))
|
|
|
|
|
((or "GPL (> 2)"
|
|
|
|
|
"GPL (>= 3)"
|
|
|
|
|
"GPL (>= 3.0)"
|
|
|
|
|
"GNU General Public License (>= 3)")
|
|
|
|
|
(prefix 'gpl3+))
|
|
|
|
|
((or "GPL-2"
|
|
|
|
|
"GNU General Public License version 2")
|
|
|
|
|
(prefix 'gpl2))
|
|
|
|
|
((or "GPL-3"
|
|
|
|
|
"GNU General Public License version 3")
|
|
|
|
|
(prefix 'gpl3))
|
|
|
|
|
((or "GNU Lesser General Public License"
|
|
|
|
|
"LGPL")
|
|
|
|
|
(prefix 'lgpl2.0+))
|
|
|
|
|
("LGPL-2" (prefix 'lgpl2.0))
|
|
|
|
|
("LGPL-2.1" (prefix 'lgpl2.1))
|
|
|
|
|
("LGPL-3" (prefix 'lgpl3))
|
|
|
|
|
((or "LGPL (>= 2)"
|
|
|
|
|
"LGPL (>= 2.0)")
|
|
|
|
|
(prefix 'lgpl2.0+))
|
|
|
|
|
("LGPL (>= 2.1)" (prefix 'lgpl2.1+))
|
|
|
|
|
("LGPL (>= 3)" (prefix 'lgpl3+))
|
|
|
|
|
("MIT" (prefix 'expat))
|
|
|
|
|
("MIT + file LICENSE" (prefix 'expat))
|
|
|
|
|
("file LICENSE"
|
|
|
|
|
`(,(prefix 'fsdg-compatible) "file://LICENSE"))
|
2022-10-18 06:45:15 -04:00
|
|
|
|
((x) (string->license x license-prefix))
|
|
|
|
|
((lst ...) `(list ,@(map (cut string->license <> license-prefix) lst)))
|
2022-09-28 16:07:40 -04:00
|
|
|
|
(unknown `(,(prefix 'fsdg-compatible) ,unknown)))))
|
2015-12-03 10:12:09 -05:00
|
|
|
|
|
|
|
|
|
(define (description->alist description)
|
|
|
|
|
"Convert a DESCRIPTION string into an alist."
|
|
|
|
|
(let ((lines (string-split description #\newline))
|
|
|
|
|
(parse (lambda (line acc)
|
|
|
|
|
(if (string-null? line) acc
|
|
|
|
|
;; Keys usually start with a capital letter and end with
|
|
|
|
|
;; ":". There are some exceptions, unfortunately (such
|
|
|
|
|
;; as "biocViews"). There are no blanks in a key.
|
|
|
|
|
(if (string-match "^[A-Za-z][^ :]+:( |\n|$)" line)
|
|
|
|
|
;; New key/value pair
|
|
|
|
|
(let* ((pos (string-index line #\:))
|
|
|
|
|
(key (string-take line pos))
|
|
|
|
|
(value (string-drop line (+ 1 pos))))
|
|
|
|
|
(cons (cons key
|
|
|
|
|
(string-trim-both value))
|
|
|
|
|
acc))
|
|
|
|
|
;; This is a continuation of the previous pair
|
|
|
|
|
(match-let ((((key . value) . rest) acc))
|
|
|
|
|
(cons (cons key (string-join
|
|
|
|
|
(list value
|
|
|
|
|
(string-trim-both line))))
|
|
|
|
|
rest)))))))
|
|
|
|
|
(fold parse '() lines)))
|
|
|
|
|
|
upstream: Replace 'input-changes' field by 'inputs'.
Returning the expected list of inputs rather than changes relative to
the current package definition is less ambiguous and offers more
possibilities for further processing.
* guix/upstream.scm (<upstream-source>)[input-changes]: Remove.
[inputs]: New field.
(<upstream-input>): New record type.
* guix/upstream.scm (upstream-input-type-predicate)
(input-type-filter, upstream-source-regular-inputs)
(upstream-source-native-inputs, upstream-source-propagated-inputs): New
procedures.
(changed-inputs): Expect an <upstream-source> as its second argument.
Adjust accordingly.
* guix/import/pypi.scm (distribution-sha256): New procedure.
(maybe-inputs): Expect a list of <upstream-input>.
(compute-inputs): Rewrite to return a list of <upstream-input>.
(pypi-package-inputs, pypi-package->upstream-source): New procedures.
(make-pypi-sexp): Use it.
* guix/import/stackage.scm (latest-lts-release): Define 'cabal'.
Replace 'input-changes' field by 'inputs'.
* guix/scripts/refresh.scm (update-package): Use 'changed-inputs'
instead of 'upstream-source-input-changes'.
* tests/cran.scm ("description->package"): Adjust order of inputs.
* tests/pypi.scm (default-sha256, default-sha256/base32): New variables.
(foo-json): Add 'digests' entry.
("pypi->guix-package, no wheel"): Check HASH against DEFAULT-SHA256/BASE32.
("pypi->guix-package, wheels"): Likewise.
("pypi->guix-package, no usable requirement file."): Likewise.
("pypi->guix-package, package name contains \"-\" followed by digits"):
Likewise.
("package-latest-release"): New test.
* tests/upstream.scm (test-package-sexp): Remove.
("changed-inputs returns no changes"): Rewrite to use <upstream-source>.
(test-new-package-sexp): Remove.
("changed-inputs returns changes to plain input list"): Rewrite.
("changed-inputs returns changes to all plain input lists"): Likewise.
("changed-inputs returns changes to labelled input list")
("changed-inputs returns changes to all labelled input lists"): Remove.
* guix/import/cran.scm (maybe-inputs): Expect PACKAGE-INPUTS to be a
list of <upstream-input>.
(source-dir->dependencies): Return a list of <upstream-input>.
(vignette-builders): Likewise.
(uri-helper, cran-package-source-url)
(cran-package-propagated-inputs, cran-package-inputs): New procedures.
(description->package): Use them instead of local definitions.
(latest-cran-release): Replace 'input-changes' field by 'inputs'.
(latest-bioconductor-release): Likewise.
(format-inputs): Remove.
* guix/import/hackage.scm (cabal-package-inputs): New procedure.
(hackage-module->sexp): Use it.
[maybe-inputs]: Expect a list of <upstream-input>.
2023-05-15 16:37:25 -04:00
|
|
|
|
(define* (maybe-inputs package-inputs #:optional (input-type 'inputs))
|
2015-07-24 10:49:57 -04:00
|
|
|
|
"Given a list of PACKAGE-INPUTS, tries to generate the TYPE field of a
|
|
|
|
|
package definition."
|
|
|
|
|
(match package-inputs
|
|
|
|
|
(()
|
|
|
|
|
'())
|
|
|
|
|
((package-inputs ...)
|
upstream: Replace 'input-changes' field by 'inputs'.
Returning the expected list of inputs rather than changes relative to
the current package definition is less ambiguous and offers more
possibilities for further processing.
* guix/upstream.scm (<upstream-source>)[input-changes]: Remove.
[inputs]: New field.
(<upstream-input>): New record type.
* guix/upstream.scm (upstream-input-type-predicate)
(input-type-filter, upstream-source-regular-inputs)
(upstream-source-native-inputs, upstream-source-propagated-inputs): New
procedures.
(changed-inputs): Expect an <upstream-source> as its second argument.
Adjust accordingly.
* guix/import/pypi.scm (distribution-sha256): New procedure.
(maybe-inputs): Expect a list of <upstream-input>.
(compute-inputs): Rewrite to return a list of <upstream-input>.
(pypi-package-inputs, pypi-package->upstream-source): New procedures.
(make-pypi-sexp): Use it.
* guix/import/stackage.scm (latest-lts-release): Define 'cabal'.
Replace 'input-changes' field by 'inputs'.
* guix/scripts/refresh.scm (update-package): Use 'changed-inputs'
instead of 'upstream-source-input-changes'.
* tests/cran.scm ("description->package"): Adjust order of inputs.
* tests/pypi.scm (default-sha256, default-sha256/base32): New variables.
(foo-json): Add 'digests' entry.
("pypi->guix-package, no wheel"): Check HASH against DEFAULT-SHA256/BASE32.
("pypi->guix-package, wheels"): Likewise.
("pypi->guix-package, no usable requirement file."): Likewise.
("pypi->guix-package, package name contains \"-\" followed by digits"):
Likewise.
("package-latest-release"): New test.
* tests/upstream.scm (test-package-sexp): Remove.
("changed-inputs returns no changes"): Rewrite to use <upstream-source>.
(test-new-package-sexp): Remove.
("changed-inputs returns changes to plain input list"): Rewrite.
("changed-inputs returns changes to all plain input lists"): Likewise.
("changed-inputs returns changes to labelled input list")
("changed-inputs returns changes to all labelled input lists"): Remove.
* guix/import/cran.scm (maybe-inputs): Expect PACKAGE-INPUTS to be a
list of <upstream-input>.
(source-dir->dependencies): Return a list of <upstream-input>.
(vignette-builders): Likewise.
(uri-helper, cran-package-source-url)
(cran-package-propagated-inputs, cran-package-inputs): New procedures.
(description->package): Use them instead of local definitions.
(latest-cran-release): Replace 'input-changes' field by 'inputs'.
(latest-bioconductor-release): Likewise.
(format-inputs): Remove.
* guix/import/hackage.scm (cabal-package-inputs): New procedure.
(hackage-module->sexp): Use it.
[maybe-inputs]: Expect a list of <upstream-input>.
2023-05-15 16:37:25 -04:00
|
|
|
|
`((,input-type (list ,@(map (compose string->symbol
|
|
|
|
|
upstream-input-downstream-name)
|
|
|
|
|
package-inputs)))))))
|
2015-07-24 10:49:57 -04:00
|
|
|
|
|
2019-01-03 02:32:05 -05:00
|
|
|
|
(define %cran-url "https://cran.r-project.org/web/packages/")
|
2020-02-05 02:26:08 -05:00
|
|
|
|
(define %cran-canonical-url "https://cran.r-project.org/package=")
|
Use HTTPS for bioconductor.org.
* doc/guix.texi (Invoking guix import, Invoking guix refresh): Use HTTPS for
bioconductor.org URLs.
* gnu/packages/bioinformatics.scm (r-annotate, r-geneplotter, r-genefilter)
(r-deseq2, r-dexseq, r-annotationforge, r-rbgl, r-gseabase, r-category)
(r-gostats, r-shortread, r-biocgenerics, r-biocinstaller, r-biocviews)
(r-biocstyle, r-bioccheck, r-s4vectors, r-iranges, r-genomeinfodbdata)
(r-genomeinfodb, r-xvector, r-genomicranges, r-biobase, r-annotationdbi)
(r-biomart, r-biocparallel, r-biostrings, r-rsamtools, r-delayedarray)
(r-summarizedexperiment, r-genomicalignments, r-rtracklayer)
(r-genomicfeatures, r-graph, r-topgo, r-bsgenome, r-impute, r-seqpattern)
(r-seqlogo, r-motifrg, r-bamsignals, r-mutationalpatterns, r-tximport)
(r-rhdf5, r-chipseq, r-sva, r-affy, r-vsn, r-mzid, r-msnid)
(r-interactivedisplaybase, r-annotationhub)[home-page]: Likewise.
* gnu/packages/bioinformatics.scm (r-txdb-hsapiens-ucsc-hg19-knowngene)
(r-go-db, r-bsgenome-hsapiens-1000genomes-hs37d5, r-org-hs-eg-db)
(r-org-ce-eg-db, r-org-dm-eg-db, r-org-mm-eg-db)
(r-bsgenome-hsapiens-ucsc-hg19, r-bsgenome-mmusculus-ucsc-mm9)
(r-bsgenome-mmusculus-ucsc-mm10, r-txdb-mmusculus-ucsc-mm10-knowngene)
(r-bsgenome-celegans-ucsc-ce6, r-bsgenome-celegans-ucsc-ce10)
(r-bsgenome-dmelanogaster-ucsc-dm3, r-copyhelper)[source, home-page]:
Likewise.
* gnu/packages/statistics.scm (r-rcurl)[source]: Likewise.
* guix/build-system/r.scm (bioconductor-uri): Likewise.
* guix/import/cran.scm (%cran-url, bioconductor-package?)
(bioconductor-data-package?, bioconductor-experiment-package?): Likewise.
2017-10-19 20:39:56 -04:00
|
|
|
|
(define %bioconductor-url "https://bioconductor.org/packages/")
|
2015-12-16 08:45:28 -05:00
|
|
|
|
|
2023-04-27 15:48:12 -04:00
|
|
|
|
;; The latest Bioconductor release is 3.17. Bioconductor packages should be
|
2015-12-16 08:45:28 -05:00
|
|
|
|
;; updated together.
|
2023-04-27 15:48:12 -04:00
|
|
|
|
(define %bioconductor-version "3.17")
|
2017-11-06 11:09:06 -05:00
|
|
|
|
|
2019-08-16 08:59:23 -04:00
|
|
|
|
(define* (bioconductor-packages-list-url #:optional type)
|
2017-11-06 11:09:06 -05:00
|
|
|
|
(string-append "https://bioconductor.org/packages/"
|
2019-08-16 08:59:23 -04:00
|
|
|
|
%bioconductor-version
|
|
|
|
|
(match type
|
|
|
|
|
('annotation "/data/annotation")
|
|
|
|
|
('experiment "/data/experiment")
|
|
|
|
|
(_ "/bioc"))
|
|
|
|
|
"/src/contrib/PACKAGES"))
|
2017-11-06 11:09:06 -05:00
|
|
|
|
|
2019-08-16 08:59:23 -04:00
|
|
|
|
(define* (bioconductor-packages-list #:optional type)
|
2017-11-06 11:09:06 -05:00
|
|
|
|
"Return the latest version of package NAME for the current bioconductor
|
|
|
|
|
release."
|
2019-08-16 08:59:23 -04:00
|
|
|
|
(let ((url (string->uri (bioconductor-packages-list-url type))))
|
2017-11-06 11:09:06 -05:00
|
|
|
|
(guard (c ((http-get-error? c)
|
2021-10-28 08:54:22 -04:00
|
|
|
|
(warning (G_ "failed to retrieve list of packages \
|
|
|
|
|
from ~a: ~a (~a)~%")
|
|
|
|
|
(uri->string (http-get-error-uri c))
|
|
|
|
|
(http-get-error-code c)
|
|
|
|
|
(http-get-error-reason c))
|
2017-11-06 11:09:06 -05:00
|
|
|
|
#f))
|
|
|
|
|
;; Split the big list on empty lines, then turn each chunk into an
|
|
|
|
|
;; alist of attributes.
|
|
|
|
|
(map (lambda (chunk)
|
|
|
|
|
(description->alist (string-join chunk "\n")))
|
2020-01-03 10:01:11 -05:00
|
|
|
|
(let* ((port (http-fetch/cached url))
|
|
|
|
|
(lines (read-lines port)))
|
|
|
|
|
(close-port port)
|
|
|
|
|
(chunk-lines lines))))))
|
2017-11-06 11:09:06 -05:00
|
|
|
|
|
2019-08-16 08:59:23 -04:00
|
|
|
|
(define* (latest-bioconductor-package-version name #:optional type)
|
2017-11-06 11:09:06 -05:00
|
|
|
|
"Return the version string corresponding to the latest release of the
|
|
|
|
|
bioconductor package NAME, or #F if the package is unknown."
|
|
|
|
|
(and=> (find (lambda (meta)
|
|
|
|
|
(string=? (assoc-ref meta "Package") name))
|
2019-08-16 08:59:23 -04:00
|
|
|
|
(bioconductor-packages-list type))
|
2017-11-06 11:09:06 -05:00
|
|
|
|
(cut assoc-ref <> "Version")))
|
2015-12-16 08:45:28 -05:00
|
|
|
|
|
2019-01-03 02:31:15 -05:00
|
|
|
|
;; Little helper to download URLs only once.
|
|
|
|
|
(define download
|
|
|
|
|
(memoize
|
2022-08-12 12:59:11 -04:00
|
|
|
|
(lambda* (url #:key method (ref '()))
|
2019-08-27 18:38:31 -04:00
|
|
|
|
(with-store store
|
2020-03-25 04:36:58 -04:00
|
|
|
|
(cond
|
|
|
|
|
((eq? method 'git)
|
2022-08-12 12:59:11 -04:00
|
|
|
|
(latest-repository-commit store url #:ref ref))
|
2020-03-25 04:36:58 -04:00
|
|
|
|
((eq? method 'hg)
|
|
|
|
|
(call-with-temporary-directory
|
|
|
|
|
(lambda (dir)
|
|
|
|
|
(unless (zero? (system* "hg" "clone" url dir))
|
|
|
|
|
(leave (G_ "~A: hg download failed~%") url))
|
|
|
|
|
(with-directory-excursion dir
|
|
|
|
|
(let* ((port (open-pipe* OPEN_READ "hg" "id" "--id"))
|
|
|
|
|
(changeset (string-trim-right (read-string port))))
|
|
|
|
|
(close-pipe port)
|
|
|
|
|
(for-each delete-file-recursively
|
|
|
|
|
(find-files dir "^\\.hg$" #:directories? #t))
|
|
|
|
|
(let ((store-directory
|
|
|
|
|
(add-to-store store (basename url) #t "sha256" dir)))
|
|
|
|
|
(values store-directory changeset)))))))
|
2021-10-29 15:26:16 -04:00
|
|
|
|
(else
|
|
|
|
|
(match url
|
|
|
|
|
((? string?)
|
|
|
|
|
(download-to-store store url))
|
|
|
|
|
((urls ...)
|
|
|
|
|
;; Try all the URLs. A use case where this is useful is when one
|
|
|
|
|
;; of the URLs is the /Archive CRAN URL.
|
|
|
|
|
(any (cut download-to-store store <>) urls)))))))))
|
|
|
|
|
|
|
|
|
|
(define (fetch-description-from-tarball url)
|
|
|
|
|
"Fetch the tarball at URL, extra its 'DESCRIPTION' file, parse it, and
|
|
|
|
|
return the resulting alist."
|
|
|
|
|
(match (download url)
|
|
|
|
|
(#f #f)
|
|
|
|
|
(tarball
|
|
|
|
|
(call-with-temporary-directory
|
|
|
|
|
(lambda (dir)
|
|
|
|
|
(parameterize ((current-error-port (%make-void-port "rw+"))
|
|
|
|
|
(current-output-port (%make-void-port "rw+")))
|
|
|
|
|
(and (zero? (system* "tar" "--wildcards" "-x"
|
|
|
|
|
"--strip-components=1"
|
|
|
|
|
"-C" dir
|
|
|
|
|
"-f" tarball "*/DESCRIPTION"))
|
|
|
|
|
(description->alist
|
|
|
|
|
(call-with-input-file (string-append dir "/DESCRIPTION")
|
|
|
|
|
read-string)))))))))
|
|
|
|
|
|
|
|
|
|
(define* (fetch-description repository name #:optional version)
|
2015-12-03 10:12:09 -05:00
|
|
|
|
"Return an alist of the contents of the DESCRIPTION file for the R package
|
2021-10-29 15:26:16 -04:00
|
|
|
|
NAME at VERSION in the given REPOSITORY, or #f in case of failure. NAME is
|
2017-04-05 09:37:03 -04:00
|
|
|
|
case-sensitive."
|
2017-11-06 11:10:41 -05:00
|
|
|
|
(case repository
|
|
|
|
|
((cran)
|
2021-10-29 15:26:16 -04:00
|
|
|
|
(guard (c ((http-get-error? c)
|
|
|
|
|
(warning (G_ "failed to retrieve package information \
|
2021-10-28 08:54:22 -04:00
|
|
|
|
from ~a: ~a (~a)~%")
|
2021-10-29 15:26:16 -04:00
|
|
|
|
(uri->string (http-get-error-uri c))
|
|
|
|
|
(http-get-error-code c)
|
|
|
|
|
(http-get-error-reason c))
|
|
|
|
|
#f))
|
|
|
|
|
;; When VERSION is true, we have to download the tarball to get at its
|
|
|
|
|
;; 'DESCRIPTION' file; only the latest one is directly accessible over
|
|
|
|
|
;; HTTP.
|
|
|
|
|
(if version
|
|
|
|
|
(let ((urls (list (string-append "mirror://cran/src/contrib/"
|
|
|
|
|
name "_" version ".tar.gz")
|
|
|
|
|
(string-append "mirror://cran/src/contrib/Archive/"
|
|
|
|
|
name "/"
|
|
|
|
|
name "_" version ".tar.gz"))))
|
|
|
|
|
(fetch-description-from-tarball urls))
|
|
|
|
|
(let* ((url (string-append %cran-url name "/DESCRIPTION"))
|
|
|
|
|
(port (http-fetch url))
|
|
|
|
|
(result (description->alist (read-string port))))
|
|
|
|
|
(close-port port)
|
|
|
|
|
result))))
|
2017-11-06 11:10:41 -05:00
|
|
|
|
((bioconductor)
|
|
|
|
|
;; Currently, the bioconductor project does not offer a way to access a
|
|
|
|
|
;; package's DESCRIPTION file over HTTP, so we determine the version,
|
|
|
|
|
;; download the source tarball, and then extract the DESCRIPTION file.
|
2019-08-16 08:59:23 -04:00
|
|
|
|
(and-let* ((type (or
|
|
|
|
|
(and (latest-bioconductor-package-version name) #t)
|
|
|
|
|
(and (latest-bioconductor-package-version name 'annotation) 'annotation)
|
|
|
|
|
(and (latest-bioconductor-package-version name 'experiment) 'experiment)))
|
2021-10-29 15:26:16 -04:00
|
|
|
|
;; TODO: Honor VERSION.
|
2019-08-16 08:59:23 -04:00
|
|
|
|
(version (latest-bioconductor-package-version name type))
|
|
|
|
|
(url (car (bioconductor-uri name version type)))
|
2021-10-29 15:26:16 -04:00
|
|
|
|
(meta (fetch-description-from-tarball url)))
|
|
|
|
|
(if (boolean? type)
|
|
|
|
|
meta
|
|
|
|
|
(cons `(bioconductor-type . ,type) meta))))
|
2019-08-27 18:38:31 -04:00
|
|
|
|
((git)
|
2019-09-02 08:46:04 -04:00
|
|
|
|
(and (string-prefix? "http" name)
|
|
|
|
|
;; Download the git repository at "NAME"
|
|
|
|
|
(call-with-values
|
2020-03-25 04:36:58 -04:00
|
|
|
|
(lambda () (download name #:method 'git))
|
2019-09-02 08:46:04 -04:00
|
|
|
|
(lambda (dir commit)
|
|
|
|
|
(and=> (description->alist (with-input-from-file
|
|
|
|
|
(string-append dir "/DESCRIPTION") read-string))
|
|
|
|
|
(lambda (meta)
|
|
|
|
|
(cons* `(git . ,name)
|
|
|
|
|
`(git-commit . ,commit)
|
2020-03-25 04:36:58 -04:00
|
|
|
|
meta)))))))
|
|
|
|
|
((hg)
|
|
|
|
|
(and (string-prefix? "http" name)
|
|
|
|
|
;; Download the mercurial repository at "NAME"
|
|
|
|
|
(call-with-values
|
|
|
|
|
(lambda () (download name #:method 'hg))
|
|
|
|
|
(lambda (dir changeset)
|
|
|
|
|
(and=> (description->alist (with-input-from-file
|
|
|
|
|
(string-append dir "/DESCRIPTION") read-string))
|
|
|
|
|
(lambda (meta)
|
|
|
|
|
(cons* `(hg . ,name)
|
|
|
|
|
`(hg-changeset . ,changeset)
|
2019-09-02 08:46:04 -04:00
|
|
|
|
meta)))))))))
|
2015-12-03 10:12:09 -05:00
|
|
|
|
|
|
|
|
|
(define (listify meta field)
|
|
|
|
|
"Look up FIELD in the alist META. If FIELD contains a comma-separated
|
|
|
|
|
string, turn it into a list and strip off parenthetic expressions. Return the
|
|
|
|
|
empty list when the FIELD cannot be found."
|
|
|
|
|
(let ((value (assoc-ref meta field)))
|
|
|
|
|
(if (not value)
|
|
|
|
|
'()
|
|
|
|
|
;; Strip off parentheses
|
|
|
|
|
(let ((items (string-split (regexp-substitute/global
|
|
|
|
|
#f "( *\\([^\\)]+\\)) *"
|
|
|
|
|
value 'pre 'post)
|
|
|
|
|
#\,)))
|
2015-12-16 08:29:38 -05:00
|
|
|
|
(remove (lambda (item)
|
|
|
|
|
(or (string-null? item)
|
|
|
|
|
;; When there is whitespace inside of items it is
|
|
|
|
|
;; probably because this was not an actual list to
|
|
|
|
|
;; begin with.
|
|
|
|
|
(string-any char-set:whitespace item)))
|
2015-12-03 10:12:09 -05:00
|
|
|
|
(map string-trim-both items))))))
|
|
|
|
|
|
2020-01-16 15:47:36 -05:00
|
|
|
|
;; Trick Guile 3 so that it keeps the 'listify' binding accessible *and*
|
|
|
|
|
;; private even though this module is declarative.
|
|
|
|
|
(set! listify listify)
|
|
|
|
|
|
2016-05-17 09:22:30 -04:00
|
|
|
|
(define default-r-packages
|
2017-03-11 18:21:39 -05:00
|
|
|
|
(list "base"
|
2016-05-17 09:22:30 -04:00
|
|
|
|
"compiler"
|
2020-05-13 07:53:05 -04:00
|
|
|
|
"datasets"
|
2016-05-17 09:22:30 -04:00
|
|
|
|
"grDevices"
|
|
|
|
|
"graphics"
|
|
|
|
|
"grid"
|
|
|
|
|
"methods"
|
|
|
|
|
"parallel"
|
|
|
|
|
"splines"
|
|
|
|
|
"stats"
|
|
|
|
|
"stats4"
|
|
|
|
|
"tcltk"
|
|
|
|
|
"tools"
|
|
|
|
|
"translations"
|
|
|
|
|
"utils"))
|
|
|
|
|
|
2019-05-23 04:54:17 -04:00
|
|
|
|
;; The field for system dependencies is often abused to specify non-package
|
|
|
|
|
;; dependencies (such as c++11). This list is used to ignore them.
|
|
|
|
|
(define invalid-packages
|
2022-11-11 09:07:41 -05:00
|
|
|
|
(list "c++"
|
|
|
|
|
"c++11"
|
2021-01-20 11:04:38 -05:00
|
|
|
|
"c++14"
|
2022-11-11 09:07:41 -05:00
|
|
|
|
"c++17"
|
2022-10-22 04:37:50 -04:00
|
|
|
|
"c99"
|
2021-01-20 11:04:38 -05:00
|
|
|
|
"getopt::long"
|
2022-10-22 04:37:50 -04:00
|
|
|
|
"gnu"
|
2022-11-11 09:07:41 -05:00
|
|
|
|
"posix.1-2001"
|
2022-09-28 16:03:25 -04:00
|
|
|
|
"linux"
|
|
|
|
|
"none"
|
2023-04-28 07:36:31 -04:00
|
|
|
|
"unix"
|
2022-09-28 16:03:25 -04:00
|
|
|
|
"windows"
|
|
|
|
|
"xcode"
|
2021-01-20 11:04:38 -05:00
|
|
|
|
"xquartz"))
|
2019-05-23 04:54:17 -04:00
|
|
|
|
|
2022-09-28 16:04:01 -04:00
|
|
|
|
(define (transform-sysname sysname)
|
|
|
|
|
"Return a Guix package name for the common package name SYSNAME."
|
|
|
|
|
(match sysname
|
2022-10-22 04:37:50 -04:00
|
|
|
|
("booktabs" "texlive-booktabs")
|
|
|
|
|
("bowtie2" "bowtie")
|
|
|
|
|
("cat" "coreutils")
|
2022-09-28 16:04:01 -04:00
|
|
|
|
("java" "openjdk")
|
2022-10-22 04:37:50 -04:00
|
|
|
|
("exiftool" "perl-image-exiftool")
|
2022-09-28 16:04:01 -04:00
|
|
|
|
("fftw3" "fftw")
|
2022-11-16 09:41:30 -05:00
|
|
|
|
("freetype2" "freetype")
|
2022-10-22 04:37:50 -04:00
|
|
|
|
("gettext" "gnu-gettext")
|
|
|
|
|
("gmake" "gnu-make")
|
|
|
|
|
("libarchive-devel" "libarchive")
|
|
|
|
|
("libarchive_dev" "libarchive")
|
|
|
|
|
("libbz2" "bzip2")
|
|
|
|
|
("libexpat" "expat")
|
2023-02-17 16:21:34 -05:00
|
|
|
|
("libjpeg" "libjpeg-turbo")
|
2022-10-22 04:37:50 -04:00
|
|
|
|
("liblz4" "lz4")
|
|
|
|
|
("liblzma" "xz")
|
|
|
|
|
("libzstd" "zstd")
|
|
|
|
|
("libxml2-devel" "libxml2")
|
|
|
|
|
("libz" "zlib")
|
2022-12-19 11:03:04 -05:00
|
|
|
|
("mariadb-devel" "mariadb")
|
|
|
|
|
("mysql56_dev" "mariadb")
|
2022-10-22 04:37:50 -04:00
|
|
|
|
("pandoc-citeproc" "pandoc")
|
|
|
|
|
("python3" "python-3")
|
2022-11-29 09:06:53 -05:00
|
|
|
|
("sqlite3" "sqlite")
|
2022-10-22 04:37:50 -04:00
|
|
|
|
("svn" "subversion")
|
|
|
|
|
("tcl/tk" "tcl")
|
2022-12-19 11:03:04 -05:00
|
|
|
|
("udunits-2" "udunits")
|
2022-10-22 04:37:50 -04:00
|
|
|
|
("whoami" "coreutils")
|
2022-12-19 11:03:04 -05:00
|
|
|
|
("x11" "libx11")
|
2023-04-28 07:37:02 -04:00
|
|
|
|
("xml2" "libxml2")
|
2022-09-28 16:04:01 -04:00
|
|
|
|
(_ sysname)))
|
|
|
|
|
|
2018-06-08 06:46:43 -04:00
|
|
|
|
(define cran-guix-name (cut guix-name "r-" <>))
|
2016-07-06 06:42:38 -04:00
|
|
|
|
|
2019-08-27 18:38:31 -04:00
|
|
|
|
(define (directory-needs-fortran? dir)
|
|
|
|
|
"Check if the directory DIR contains Fortran source files."
|
2022-12-01 06:05:09 -05:00
|
|
|
|
(match (find-files dir "\\.f(90|95)?$")
|
2019-08-27 18:38:31 -04:00
|
|
|
|
(() #f)
|
|
|
|
|
(_ #t)))
|
|
|
|
|
|
2023-02-17 16:20:45 -05:00
|
|
|
|
(define (directory-needs-esbuild? dir)
|
|
|
|
|
"Check if the directory DIR contains minified JavaScript files and thus
|
|
|
|
|
needs a JavaScript compiler."
|
|
|
|
|
(match (find-files dir "\\.min.js$")
|
|
|
|
|
(() #f)
|
|
|
|
|
(_ #t)))
|
|
|
|
|
|
2019-08-27 18:38:31 -04:00
|
|
|
|
(define (files-match-pattern? directory regexp . file-patterns)
|
|
|
|
|
"Return #T if any of the files matching FILE-PATTERNS in the DIRECTORY match
|
|
|
|
|
the given REGEXP."
|
|
|
|
|
(let ((pattern (make-regexp regexp)))
|
|
|
|
|
(any (lambda (file)
|
|
|
|
|
(call-with-input-file file
|
|
|
|
|
(lambda (port)
|
|
|
|
|
(let loop ()
|
|
|
|
|
(let ((line (read-line port)))
|
|
|
|
|
(cond
|
|
|
|
|
((eof-object? line) #f)
|
|
|
|
|
((regexp-exec pattern line) #t)
|
|
|
|
|
(else (loop))))))))
|
|
|
|
|
(apply find-files directory file-patterns))))
|
|
|
|
|
|
2023-02-17 16:25:27 -05:00
|
|
|
|
(define packages-for-matches
|
|
|
|
|
'(("-lcrypto" . "openssl")
|
|
|
|
|
("-lcurl" . "curl")
|
|
|
|
|
("-lgit2" . "libgit2")
|
|
|
|
|
("-lpcre" . "pcre2")
|
|
|
|
|
("-lssh" . "openssh")
|
|
|
|
|
("-lssl" . "openssl")
|
|
|
|
|
("-ltbb" . "tbb")
|
|
|
|
|
("-lz" . "zlib")
|
|
|
|
|
("gsl-config" . "gsl")
|
|
|
|
|
("xml2-config" . "libxml2")
|
|
|
|
|
("CURL_LIBS" . "curl")))
|
|
|
|
|
|
|
|
|
|
(define libraries-pattern
|
|
|
|
|
(make-regexp
|
|
|
|
|
(string-append "("
|
|
|
|
|
(string-join
|
|
|
|
|
(map (compose regexp-quote first) packages-for-matches) "|")
|
|
|
|
|
")")))
|
|
|
|
|
|
|
|
|
|
(define (needed-libraries-in-directory dir)
|
|
|
|
|
"Return a list of package names that correspond to libraries that are
|
|
|
|
|
referenced in build system files."
|
|
|
|
|
(set->list
|
|
|
|
|
(fold
|
|
|
|
|
(lambda (file packages)
|
|
|
|
|
(call-with-input-file file
|
|
|
|
|
(lambda (port)
|
|
|
|
|
(let loop ((packages packages))
|
|
|
|
|
(let ((line (read-line port)))
|
|
|
|
|
(cond
|
|
|
|
|
((eof-object? line) packages)
|
|
|
|
|
(else
|
|
|
|
|
(loop
|
|
|
|
|
(fold (lambda (match acc)
|
|
|
|
|
(or (and=> (assoc-ref packages-for-matches
|
|
|
|
|
(match:substring match))
|
|
|
|
|
(cut set-insert <> acc))
|
|
|
|
|
acc))
|
|
|
|
|
packages
|
|
|
|
|
(list-matches libraries-pattern line))))))))))
|
|
|
|
|
(set)
|
|
|
|
|
(find-files dir "(Makevars.in*|configure.*)"))))
|
|
|
|
|
|
2019-08-27 18:38:31 -04:00
|
|
|
|
(define (directory-needs-pkg-config? dir)
|
|
|
|
|
"Return #T if any of the Makevars files in the src directory DIR reference
|
|
|
|
|
the pkg-config tool."
|
|
|
|
|
(files-match-pattern? dir "pkg-config"
|
|
|
|
|
"(Makevars.*|configure.*)"))
|
|
|
|
|
|
2022-11-27 09:39:34 -05:00
|
|
|
|
(define (source-dir->dependencies dir)
|
upstream: Replace 'input-changes' field by 'inputs'.
Returning the expected list of inputs rather than changes relative to
the current package definition is less ambiguous and offers more
possibilities for further processing.
* guix/upstream.scm (<upstream-source>)[input-changes]: Remove.
[inputs]: New field.
(<upstream-input>): New record type.
* guix/upstream.scm (upstream-input-type-predicate)
(input-type-filter, upstream-source-regular-inputs)
(upstream-source-native-inputs, upstream-source-propagated-inputs): New
procedures.
(changed-inputs): Expect an <upstream-source> as its second argument.
Adjust accordingly.
* guix/import/pypi.scm (distribution-sha256): New procedure.
(maybe-inputs): Expect a list of <upstream-input>.
(compute-inputs): Rewrite to return a list of <upstream-input>.
(pypi-package-inputs, pypi-package->upstream-source): New procedures.
(make-pypi-sexp): Use it.
* guix/import/stackage.scm (latest-lts-release): Define 'cabal'.
Replace 'input-changes' field by 'inputs'.
* guix/scripts/refresh.scm (update-package): Use 'changed-inputs'
instead of 'upstream-source-input-changes'.
* tests/cran.scm ("description->package"): Adjust order of inputs.
* tests/pypi.scm (default-sha256, default-sha256/base32): New variables.
(foo-json): Add 'digests' entry.
("pypi->guix-package, no wheel"): Check HASH against DEFAULT-SHA256/BASE32.
("pypi->guix-package, wheels"): Likewise.
("pypi->guix-package, no usable requirement file."): Likewise.
("pypi->guix-package, package name contains \"-\" followed by digits"):
Likewise.
("package-latest-release"): New test.
* tests/upstream.scm (test-package-sexp): Remove.
("changed-inputs returns no changes"): Rewrite to use <upstream-source>.
(test-new-package-sexp): Remove.
("changed-inputs returns changes to plain input list"): Rewrite.
("changed-inputs returns changes to all plain input lists"): Likewise.
("changed-inputs returns changes to labelled input list")
("changed-inputs returns changes to all labelled input lists"): Remove.
* guix/import/cran.scm (maybe-inputs): Expect PACKAGE-INPUTS to be a
list of <upstream-input>.
(source-dir->dependencies): Return a list of <upstream-input>.
(vignette-builders): Likewise.
(uri-helper, cran-package-source-url)
(cran-package-propagated-inputs, cran-package-inputs): New procedures.
(description->package): Use them instead of local definitions.
(latest-cran-release): Replace 'input-changes' field by 'inputs'.
(latest-bioconductor-release): Likewise.
(format-inputs): Remove.
* guix/import/hackage.scm (cabal-package-inputs): New procedure.
(hackage-module->sexp): Use it.
[maybe-inputs]: Expect a list of <upstream-input>.
2023-05-15 16:37:25 -04:00
|
|
|
|
"Guess dependencies of R package source in DIR and return a list of
|
|
|
|
|
<upstream-input> corresponding to the dependencies guessed from source files
|
|
|
|
|
in DIR."
|
|
|
|
|
(define (native name)
|
|
|
|
|
(upstream-input
|
|
|
|
|
(name name)
|
|
|
|
|
(downstream-name name)
|
|
|
|
|
(type 'native)))
|
|
|
|
|
|
|
|
|
|
(append (map (lambda (name)
|
|
|
|
|
(upstream-input
|
|
|
|
|
(name name)
|
|
|
|
|
(downstream-name (cran-guix-name name))))
|
|
|
|
|
(needed-libraries-in-directory dir))
|
|
|
|
|
(if (directory-needs-esbuild? dir)
|
|
|
|
|
(list (native "esbuild"))
|
|
|
|
|
'())
|
|
|
|
|
(if (directory-needs-pkg-config? dir)
|
|
|
|
|
(list (native "pkg-config"))
|
|
|
|
|
'())
|
|
|
|
|
(if (directory-needs-fortran? dir)
|
|
|
|
|
(list (native "gfortran"))
|
|
|
|
|
'())))
|
2022-11-27 09:39:34 -05:00
|
|
|
|
|
|
|
|
|
(define (source->dependencies source tarball?)
|
|
|
|
|
"SOURCE-DIR->DEPENDENCIES, but for directories and tarballs as indicated
|
|
|
|
|
by TARBALL?"
|
2019-08-27 18:38:31 -04:00
|
|
|
|
(if tarball?
|
2022-11-27 09:39:34 -05:00
|
|
|
|
(call-with-temporary-directory
|
|
|
|
|
(lambda (dir)
|
|
|
|
|
(parameterize ((current-error-port (%make-void-port "rw+")))
|
|
|
|
|
(system* "tar" "xf" source "-C" dir))
|
|
|
|
|
(source-dir->dependencies dir)))
|
|
|
|
|
(source-dir->dependencies source)))
|
2019-08-27 18:38:31 -04:00
|
|
|
|
|
2023-02-17 16:22:42 -05:00
|
|
|
|
(define (vignette-builders meta)
|
upstream: Replace 'input-changes' field by 'inputs'.
Returning the expected list of inputs rather than changes relative to
the current package definition is less ambiguous and offers more
possibilities for further processing.
* guix/upstream.scm (<upstream-source>)[input-changes]: Remove.
[inputs]: New field.
(<upstream-input>): New record type.
* guix/upstream.scm (upstream-input-type-predicate)
(input-type-filter, upstream-source-regular-inputs)
(upstream-source-native-inputs, upstream-source-propagated-inputs): New
procedures.
(changed-inputs): Expect an <upstream-source> as its second argument.
Adjust accordingly.
* guix/import/pypi.scm (distribution-sha256): New procedure.
(maybe-inputs): Expect a list of <upstream-input>.
(compute-inputs): Rewrite to return a list of <upstream-input>.
(pypi-package-inputs, pypi-package->upstream-source): New procedures.
(make-pypi-sexp): Use it.
* guix/import/stackage.scm (latest-lts-release): Define 'cabal'.
Replace 'input-changes' field by 'inputs'.
* guix/scripts/refresh.scm (update-package): Use 'changed-inputs'
instead of 'upstream-source-input-changes'.
* tests/cran.scm ("description->package"): Adjust order of inputs.
* tests/pypi.scm (default-sha256, default-sha256/base32): New variables.
(foo-json): Add 'digests' entry.
("pypi->guix-package, no wheel"): Check HASH against DEFAULT-SHA256/BASE32.
("pypi->guix-package, wheels"): Likewise.
("pypi->guix-package, no usable requirement file."): Likewise.
("pypi->guix-package, package name contains \"-\" followed by digits"):
Likewise.
("package-latest-release"): New test.
* tests/upstream.scm (test-package-sexp): Remove.
("changed-inputs returns no changes"): Rewrite to use <upstream-source>.
(test-new-package-sexp): Remove.
("changed-inputs returns changes to plain input list"): Rewrite.
("changed-inputs returns changes to all plain input lists"): Likewise.
("changed-inputs returns changes to labelled input list")
("changed-inputs returns changes to all labelled input lists"): Remove.
* guix/import/cran.scm (maybe-inputs): Expect PACKAGE-INPUTS to be a
list of <upstream-input>.
(source-dir->dependencies): Return a list of <upstream-input>.
(vignette-builders): Likewise.
(uri-helper, cran-package-source-url)
(cran-package-propagated-inputs, cran-package-inputs): New procedures.
(description->package): Use them instead of local definitions.
(latest-cran-release): Replace 'input-changes' field by 'inputs'.
(latest-bioconductor-release): Likewise.
(format-inputs): Remove.
* guix/import/hackage.scm (cabal-package-inputs): New procedure.
(hackage-module->sexp): Use it.
[maybe-inputs]: Expect a list of <upstream-input>.
2023-05-15 16:37:25 -04:00
|
|
|
|
(map (lambda (name)
|
|
|
|
|
(upstream-input
|
|
|
|
|
(name name)
|
|
|
|
|
(downstream-name (cran-guix-name name))
|
|
|
|
|
(type 'native)))
|
|
|
|
|
(listify meta "VignetteBuilder")))
|
|
|
|
|
|
|
|
|
|
(define (uri-helper repository)
|
|
|
|
|
(match repository
|
|
|
|
|
('cran cran-uri)
|
|
|
|
|
('bioconductor bioconductor-uri)
|
|
|
|
|
('git #f)
|
|
|
|
|
('hg #f)))
|
|
|
|
|
|
|
|
|
|
(define (cran-package-source-url meta repository)
|
|
|
|
|
"Return the URL of the source code referred to by META, a package in
|
|
|
|
|
REPOSITORY."
|
|
|
|
|
(case repository
|
|
|
|
|
((git) (assoc-ref meta 'git))
|
|
|
|
|
((hg) (assoc-ref meta 'hg))
|
|
|
|
|
(else
|
|
|
|
|
(match (apply (uri-helper repository)
|
|
|
|
|
(assoc-ref meta "Package")
|
|
|
|
|
(assoc-ref meta "Version")
|
|
|
|
|
(case repository
|
|
|
|
|
((bioconductor)
|
|
|
|
|
(list (assoc-ref meta 'bioconductor-type)))
|
|
|
|
|
(else '())))
|
|
|
|
|
((urls ...) urls)
|
|
|
|
|
((? string? url) url)
|
|
|
|
|
(_ #f)))))
|
|
|
|
|
|
|
|
|
|
(define (cran-package-propagated-inputs meta)
|
|
|
|
|
"Return the list of <upstream-input> derived from dependency information in
|
|
|
|
|
META."
|
|
|
|
|
(filter-map (lambda (name)
|
|
|
|
|
(and (not (member name
|
|
|
|
|
(append default-r-packages invalid-packages)))
|
|
|
|
|
(upstream-input
|
|
|
|
|
(name name)
|
|
|
|
|
(downstream-name (cran-guix-name name))
|
|
|
|
|
(type 'propagated))))
|
|
|
|
|
(lset-union equal?
|
|
|
|
|
(listify meta "Imports")
|
|
|
|
|
(listify meta "LinkingTo")
|
|
|
|
|
(delete "R" (listify meta "Depends")))))
|
|
|
|
|
|
|
|
|
|
(define* (cran-package-inputs meta repository
|
|
|
|
|
#:key (download-source download))
|
|
|
|
|
"Return the list of <upstream-input> corresponding to all the dependencies
|
|
|
|
|
of META, a package in REPOSITORY."
|
|
|
|
|
(let* ((url (cran-package-source-url meta repository))
|
|
|
|
|
(source (download-source url
|
|
|
|
|
#:method
|
|
|
|
|
(cond ((assoc-ref meta 'git) 'git)
|
|
|
|
|
((assoc-ref meta 'hg) 'hg)
|
|
|
|
|
(else #f))))
|
|
|
|
|
(tarball? (not (or (assoc-ref meta 'git)
|
|
|
|
|
(assoc-ref meta 'hg)))))
|
|
|
|
|
(sort (append (source->dependencies source tarball?)
|
|
|
|
|
(filter-map (lambda (name)
|
|
|
|
|
(and (not (member name invalid-packages))
|
|
|
|
|
(upstream-input
|
|
|
|
|
(name name)
|
|
|
|
|
(downstream-name
|
|
|
|
|
(transform-sysname name)))))
|
|
|
|
|
(map string-downcase
|
|
|
|
|
(listify meta "SystemRequirements")))
|
|
|
|
|
(cran-package-propagated-inputs meta)
|
|
|
|
|
(vignette-builders meta))
|
|
|
|
|
(lambda (input1 input2)
|
|
|
|
|
(string<? (upstream-input-downstream-name input1)
|
|
|
|
|
(upstream-input-downstream-name input2))))))
|
2020-03-07 13:30:51 -05:00
|
|
|
|
|
2022-10-18 06:45:56 -04:00
|
|
|
|
(define* (description->package repository meta #:key (license-prefix identity)
|
|
|
|
|
(download-source download))
|
2015-12-16 08:45:28 -05:00
|
|
|
|
"Return the `package' s-expression for an R package published on REPOSITORY
|
|
|
|
|
from the alist META, which was derived from the R package's DESCRIPTION file."
|
|
|
|
|
(let* ((base-url (case repository
|
|
|
|
|
((cran) %cran-url)
|
2019-08-27 18:38:31 -04:00
|
|
|
|
((bioconductor) %bioconductor-url)
|
2020-03-25 04:36:58 -04:00
|
|
|
|
((git) #f)
|
|
|
|
|
((hg) #f)))
|
2020-02-05 02:26:08 -05:00
|
|
|
|
(canonical-url-base (case repository
|
|
|
|
|
((cran) %cran-canonical-url)
|
|
|
|
|
((bioconductor) %bioconductor-url)
|
|
|
|
|
((git) #f)))
|
2015-12-16 08:45:28 -05:00
|
|
|
|
(name (assoc-ref meta "Package"))
|
2015-12-03 10:12:09 -05:00
|
|
|
|
(synopsis (assoc-ref meta "Title"))
|
|
|
|
|
(version (assoc-ref meta "Version"))
|
2022-10-18 06:45:15 -04:00
|
|
|
|
(license (string->licenses (assoc-ref meta "License") license-prefix))
|
2015-12-03 10:12:09 -05:00
|
|
|
|
;; Some packages have multiple home pages. Some have none.
|
2019-08-27 18:38:31 -04:00
|
|
|
|
(home-page (case repository
|
|
|
|
|
((git) (assoc-ref meta 'git))
|
2020-03-25 04:36:58 -04:00
|
|
|
|
((hg) (assoc-ref meta 'hg))
|
2019-08-27 18:38:31 -04:00
|
|
|
|
(else (match (listify meta "URL")
|
|
|
|
|
((url rest ...) url)
|
2020-02-05 02:26:08 -05:00
|
|
|
|
(_ (string-append canonical-url-base name))))))
|
upstream: Replace 'input-changes' field by 'inputs'.
Returning the expected list of inputs rather than changes relative to
the current package definition is less ambiguous and offers more
possibilities for further processing.
* guix/upstream.scm (<upstream-source>)[input-changes]: Remove.
[inputs]: New field.
(<upstream-input>): New record type.
* guix/upstream.scm (upstream-input-type-predicate)
(input-type-filter, upstream-source-regular-inputs)
(upstream-source-native-inputs, upstream-source-propagated-inputs): New
procedures.
(changed-inputs): Expect an <upstream-source> as its second argument.
Adjust accordingly.
* guix/import/pypi.scm (distribution-sha256): New procedure.
(maybe-inputs): Expect a list of <upstream-input>.
(compute-inputs): Rewrite to return a list of <upstream-input>.
(pypi-package-inputs, pypi-package->upstream-source): New procedures.
(make-pypi-sexp): Use it.
* guix/import/stackage.scm (latest-lts-release): Define 'cabal'.
Replace 'input-changes' field by 'inputs'.
* guix/scripts/refresh.scm (update-package): Use 'changed-inputs'
instead of 'upstream-source-input-changes'.
* tests/cran.scm ("description->package"): Adjust order of inputs.
* tests/pypi.scm (default-sha256, default-sha256/base32): New variables.
(foo-json): Add 'digests' entry.
("pypi->guix-package, no wheel"): Check HASH against DEFAULT-SHA256/BASE32.
("pypi->guix-package, wheels"): Likewise.
("pypi->guix-package, no usable requirement file."): Likewise.
("pypi->guix-package, package name contains \"-\" followed by digits"):
Likewise.
("package-latest-release"): New test.
* tests/upstream.scm (test-package-sexp): Remove.
("changed-inputs returns no changes"): Rewrite to use <upstream-source>.
(test-new-package-sexp): Remove.
("changed-inputs returns changes to plain input list"): Rewrite.
("changed-inputs returns changes to all plain input lists"): Likewise.
("changed-inputs returns changes to labelled input list")
("changed-inputs returns changes to all labelled input lists"): Remove.
* guix/import/cran.scm (maybe-inputs): Expect PACKAGE-INPUTS to be a
list of <upstream-input>.
(source-dir->dependencies): Return a list of <upstream-input>.
(vignette-builders): Likewise.
(uri-helper, cran-package-source-url)
(cran-package-propagated-inputs, cran-package-inputs): New procedures.
(description->package): Use them instead of local definitions.
(latest-cran-release): Replace 'input-changes' field by 'inputs'.
(latest-bioconductor-release): Likewise.
(format-inputs): Remove.
* guix/import/hackage.scm (cabal-package-inputs): New procedure.
(hackage-module->sexp): Use it.
[maybe-inputs]: Expect a list of <upstream-input>.
2023-05-15 16:37:25 -04:00
|
|
|
|
(source-url (cran-package-source-url meta repository))
|
2022-01-20 05:58:46 -05:00
|
|
|
|
(git? (if (assoc-ref meta 'git) #true #false))
|
|
|
|
|
(hg? (if (assoc-ref meta 'hg) #true #false))
|
2022-10-18 06:45:56 -04:00
|
|
|
|
(source (download-source source-url #:method (cond
|
|
|
|
|
(git? 'git)
|
|
|
|
|
(hg? 'hg)
|
|
|
|
|
(else #f))))
|
upstream: Replace 'input-changes' field by 'inputs'.
Returning the expected list of inputs rather than changes relative to
the current package definition is less ambiguous and offers more
possibilities for further processing.
* guix/upstream.scm (<upstream-source>)[input-changes]: Remove.
[inputs]: New field.
(<upstream-input>): New record type.
* guix/upstream.scm (upstream-input-type-predicate)
(input-type-filter, upstream-source-regular-inputs)
(upstream-source-native-inputs, upstream-source-propagated-inputs): New
procedures.
(changed-inputs): Expect an <upstream-source> as its second argument.
Adjust accordingly.
* guix/import/pypi.scm (distribution-sha256): New procedure.
(maybe-inputs): Expect a list of <upstream-input>.
(compute-inputs): Rewrite to return a list of <upstream-input>.
(pypi-package-inputs, pypi-package->upstream-source): New procedures.
(make-pypi-sexp): Use it.
* guix/import/stackage.scm (latest-lts-release): Define 'cabal'.
Replace 'input-changes' field by 'inputs'.
* guix/scripts/refresh.scm (update-package): Use 'changed-inputs'
instead of 'upstream-source-input-changes'.
* tests/cran.scm ("description->package"): Adjust order of inputs.
* tests/pypi.scm (default-sha256, default-sha256/base32): New variables.
(foo-json): Add 'digests' entry.
("pypi->guix-package, no wheel"): Check HASH against DEFAULT-SHA256/BASE32.
("pypi->guix-package, wheels"): Likewise.
("pypi->guix-package, no usable requirement file."): Likewise.
("pypi->guix-package, package name contains \"-\" followed by digits"):
Likewise.
("package-latest-release"): New test.
* tests/upstream.scm (test-package-sexp): Remove.
("changed-inputs returns no changes"): Rewrite to use <upstream-source>.
(test-new-package-sexp): Remove.
("changed-inputs returns changes to plain input list"): Rewrite.
("changed-inputs returns changes to all plain input lists"): Likewise.
("changed-inputs returns changes to labelled input list")
("changed-inputs returns changes to all labelled input lists"): Remove.
* guix/import/cran.scm (maybe-inputs): Expect PACKAGE-INPUTS to be a
list of <upstream-input>.
(source-dir->dependencies): Return a list of <upstream-input>.
(vignette-builders): Likewise.
(uri-helper, cran-package-source-url)
(cran-package-propagated-inputs, cran-package-inputs): New procedures.
(description->package): Use them instead of local definitions.
(latest-cran-release): Replace 'input-changes' field by 'inputs'.
(latest-bioconductor-release): Likewise.
(format-inputs): Remove.
* guix/import/hackage.scm (cabal-package-inputs): New procedure.
(hackage-module->sexp): Use it.
[maybe-inputs]: Expect a list of <upstream-input>.
2023-05-15 16:37:25 -04:00
|
|
|
|
(uri-helper (uri-helper repository))
|
|
|
|
|
(inputs (cran-package-inputs meta repository
|
|
|
|
|
#:download-source download-source))
|
2019-08-27 18:38:31 -04:00
|
|
|
|
(package
|
|
|
|
|
`(package
|
|
|
|
|
(name ,(cran-guix-name name))
|
2022-08-12 13:59:50 -04:00
|
|
|
|
(version ,(cond
|
|
|
|
|
(git?
|
|
|
|
|
`(git-version ,version revision commit))
|
|
|
|
|
(hg?
|
|
|
|
|
`(string-append ,version "-" revision "." changeset))
|
|
|
|
|
(else version)))
|
2019-08-27 18:38:31 -04:00
|
|
|
|
(source (origin
|
2020-03-25 04:36:58 -04:00
|
|
|
|
(method ,(cond
|
|
|
|
|
(git? 'git-fetch)
|
|
|
|
|
(hg? 'hg-fetch)
|
|
|
|
|
(else 'url-fetch)))
|
2022-08-12 13:59:50 -04:00
|
|
|
|
(uri ,(cond
|
|
|
|
|
(git?
|
|
|
|
|
`(git-reference
|
|
|
|
|
(url ,(assoc-ref meta 'git))
|
|
|
|
|
(commit commit)))
|
|
|
|
|
(hg?
|
|
|
|
|
`(hg-reference
|
|
|
|
|
(url ,(assoc-ref meta 'hg))
|
|
|
|
|
(changeset changeset)))
|
|
|
|
|
(else
|
|
|
|
|
`(,(procedure-name uri-helper) ,name version
|
|
|
|
|
,@(or (and=> (assoc-ref meta 'bioconductor-type)
|
|
|
|
|
(lambda (type)
|
|
|
|
|
(list (list 'quote type))))
|
|
|
|
|
'())))))
|
2020-03-25 04:36:58 -04:00
|
|
|
|
,@(cond
|
|
|
|
|
(git?
|
|
|
|
|
'((file-name (git-file-name name version))))
|
|
|
|
|
(hg?
|
|
|
|
|
'((file-name (string-append name "-" version "-checkout"))))
|
|
|
|
|
(else '()))
|
2019-08-27 18:38:31 -04:00
|
|
|
|
(sha256
|
|
|
|
|
(base32
|
|
|
|
|
,(bytevector->nix-base32-string
|
2022-01-05 09:07:48 -05:00
|
|
|
|
(file-hash* source #:recursive? (or git? hg?)))))))
|
2020-03-25 04:36:58 -04:00
|
|
|
|
,@(if (not (and git? hg?
|
2019-08-27 18:38:31 -04:00
|
|
|
|
(equal? (string-append "r-" name)
|
|
|
|
|
(cran-guix-name name))))
|
|
|
|
|
`((properties ,`(,'quasiquote ((,'upstream-name . ,name)))))
|
|
|
|
|
'())
|
|
|
|
|
(build-system r-build-system)
|
upstream: Replace 'input-changes' field by 'inputs'.
Returning the expected list of inputs rather than changes relative to
the current package definition is less ambiguous and offers more
possibilities for further processing.
* guix/upstream.scm (<upstream-source>)[input-changes]: Remove.
[inputs]: New field.
(<upstream-input>): New record type.
* guix/upstream.scm (upstream-input-type-predicate)
(input-type-filter, upstream-source-regular-inputs)
(upstream-source-native-inputs, upstream-source-propagated-inputs): New
procedures.
(changed-inputs): Expect an <upstream-source> as its second argument.
Adjust accordingly.
* guix/import/pypi.scm (distribution-sha256): New procedure.
(maybe-inputs): Expect a list of <upstream-input>.
(compute-inputs): Rewrite to return a list of <upstream-input>.
(pypi-package-inputs, pypi-package->upstream-source): New procedures.
(make-pypi-sexp): Use it.
* guix/import/stackage.scm (latest-lts-release): Define 'cabal'.
Replace 'input-changes' field by 'inputs'.
* guix/scripts/refresh.scm (update-package): Use 'changed-inputs'
instead of 'upstream-source-input-changes'.
* tests/cran.scm ("description->package"): Adjust order of inputs.
* tests/pypi.scm (default-sha256, default-sha256/base32): New variables.
(foo-json): Add 'digests' entry.
("pypi->guix-package, no wheel"): Check HASH against DEFAULT-SHA256/BASE32.
("pypi->guix-package, wheels"): Likewise.
("pypi->guix-package, no usable requirement file."): Likewise.
("pypi->guix-package, package name contains \"-\" followed by digits"):
Likewise.
("package-latest-release"): New test.
* tests/upstream.scm (test-package-sexp): Remove.
("changed-inputs returns no changes"): Rewrite to use <upstream-source>.
(test-new-package-sexp): Remove.
("changed-inputs returns changes to plain input list"): Rewrite.
("changed-inputs returns changes to all plain input lists"): Likewise.
("changed-inputs returns changes to labelled input list")
("changed-inputs returns changes to all labelled input lists"): Remove.
* guix/import/cran.scm (maybe-inputs): Expect PACKAGE-INPUTS to be a
list of <upstream-input>.
(source-dir->dependencies): Return a list of <upstream-input>.
(vignette-builders): Likewise.
(uri-helper, cran-package-source-url)
(cran-package-propagated-inputs, cran-package-inputs): New procedures.
(description->package): Use them instead of local definitions.
(latest-cran-release): Replace 'input-changes' field by 'inputs'.
(latest-bioconductor-release): Likewise.
(format-inputs): Remove.
* guix/import/hackage.scm (cabal-package-inputs): New procedure.
(hackage-module->sexp): Use it.
[maybe-inputs]: Expect a list of <upstream-input>.
2023-05-15 16:37:25 -04:00
|
|
|
|
|
|
|
|
|
,@(maybe-inputs (filter (upstream-input-type-predicate 'regular)
|
|
|
|
|
inputs)
|
|
|
|
|
'inputs)
|
|
|
|
|
,@(maybe-inputs (filter (upstream-input-type-predicate
|
|
|
|
|
'propagated)
|
|
|
|
|
inputs)
|
|
|
|
|
'propagated-inputs)
|
|
|
|
|
,@(maybe-inputs (filter (upstream-input-type-predicate 'native)
|
|
|
|
|
inputs)
|
|
|
|
|
'native-inputs)
|
|
|
|
|
|
2019-08-27 18:38:31 -04:00
|
|
|
|
(home-page ,(if (string-null? home-page)
|
|
|
|
|
(string-append base-url name)
|
|
|
|
|
home-page))
|
2022-09-28 16:06:21 -04:00
|
|
|
|
(synopsis ,(beautify-synopsis synopsis))
|
2019-08-27 18:38:31 -04:00
|
|
|
|
(description ,(beautify-description (or (assoc-ref meta "Description")
|
|
|
|
|
"")))
|
|
|
|
|
(license ,license))))
|
2016-05-17 09:17:54 -04:00
|
|
|
|
(values
|
2022-08-12 13:59:50 -04:00
|
|
|
|
(cond
|
|
|
|
|
(git?
|
|
|
|
|
`(let ((commit ,(assoc-ref meta 'git-commit))
|
|
|
|
|
(revision "1"))
|
|
|
|
|
,package))
|
|
|
|
|
(hg?
|
|
|
|
|
`(let ((changeset ,(assoc-ref meta 'hg-changeset))
|
|
|
|
|
(revision "1"))
|
|
|
|
|
,package))
|
|
|
|
|
(else package))
|
upstream: Replace 'input-changes' field by 'inputs'.
Returning the expected list of inputs rather than changes relative to
the current package definition is less ambiguous and offers more
possibilities for further processing.
* guix/upstream.scm (<upstream-source>)[input-changes]: Remove.
[inputs]: New field.
(<upstream-input>): New record type.
* guix/upstream.scm (upstream-input-type-predicate)
(input-type-filter, upstream-source-regular-inputs)
(upstream-source-native-inputs, upstream-source-propagated-inputs): New
procedures.
(changed-inputs): Expect an <upstream-source> as its second argument.
Adjust accordingly.
* guix/import/pypi.scm (distribution-sha256): New procedure.
(maybe-inputs): Expect a list of <upstream-input>.
(compute-inputs): Rewrite to return a list of <upstream-input>.
(pypi-package-inputs, pypi-package->upstream-source): New procedures.
(make-pypi-sexp): Use it.
* guix/import/stackage.scm (latest-lts-release): Define 'cabal'.
Replace 'input-changes' field by 'inputs'.
* guix/scripts/refresh.scm (update-package): Use 'changed-inputs'
instead of 'upstream-source-input-changes'.
* tests/cran.scm ("description->package"): Adjust order of inputs.
* tests/pypi.scm (default-sha256, default-sha256/base32): New variables.
(foo-json): Add 'digests' entry.
("pypi->guix-package, no wheel"): Check HASH against DEFAULT-SHA256/BASE32.
("pypi->guix-package, wheels"): Likewise.
("pypi->guix-package, no usable requirement file."): Likewise.
("pypi->guix-package, package name contains \"-\" followed by digits"):
Likewise.
("package-latest-release"): New test.
* tests/upstream.scm (test-package-sexp): Remove.
("changed-inputs returns no changes"): Rewrite to use <upstream-source>.
(test-new-package-sexp): Remove.
("changed-inputs returns changes to plain input list"): Rewrite.
("changed-inputs returns changes to all plain input lists"): Likewise.
("changed-inputs returns changes to labelled input list")
("changed-inputs returns changes to all labelled input lists"): Remove.
* guix/import/cran.scm (maybe-inputs): Expect PACKAGE-INPUTS to be a
list of <upstream-input>.
(source-dir->dependencies): Return a list of <upstream-input>.
(vignette-builders): Likewise.
(uri-helper, cran-package-source-url)
(cran-package-propagated-inputs, cran-package-inputs): New procedures.
(description->package): Use them instead of local definitions.
(latest-cran-release): Replace 'input-changes' field by 'inputs'.
(latest-bioconductor-release): Likewise.
(format-inputs): Remove.
* guix/import/hackage.scm (cabal-package-inputs): New procedure.
(hackage-module->sexp): Use it.
[maybe-inputs]: Expect a list of <upstream-input>.
2023-05-15 16:37:25 -04:00
|
|
|
|
(filter-map (lambda (input)
|
|
|
|
|
(and (eq? 'propagated (upstream-input-type input))
|
|
|
|
|
(upstream-input-name input)))
|
|
|
|
|
inputs))))
|
2015-07-24 10:49:57 -04:00
|
|
|
|
|
2016-05-17 10:38:17 -04:00
|
|
|
|
(define cran->guix-package
|
|
|
|
|
(memoize
|
2022-10-18 06:45:15 -04:00
|
|
|
|
(lambda* (package-name #:key (repo 'cran) version (license-prefix identity)
|
2022-10-18 06:45:45 -04:00
|
|
|
|
(fetch-description fetch-description)
|
2022-10-18 06:45:56 -04:00
|
|
|
|
(download-source download)
|
2022-10-18 06:45:15 -04:00
|
|
|
|
#:allow-other-keys)
|
2016-05-17 10:38:17 -04:00
|
|
|
|
"Fetch the metadata for PACKAGE-NAME from REPO and return the `package'
|
2015-12-16 08:45:28 -05:00
|
|
|
|
s-expression corresponding to that package, or #f on failure."
|
2021-10-29 15:26:16 -04:00
|
|
|
|
(let ((description (fetch-description repo package-name version)))
|
2019-09-02 08:45:17 -04:00
|
|
|
|
(if description
|
2022-10-18 06:45:15 -04:00
|
|
|
|
(description->package repo description
|
2022-10-18 06:45:56 -04:00
|
|
|
|
#:license-prefix license-prefix
|
|
|
|
|
#:download-source download-source)
|
2019-09-02 08:45:17 -04:00
|
|
|
|
(case repo
|
|
|
|
|
((git)
|
|
|
|
|
;; Retry import from Bioconductor
|
2022-10-18 06:45:15 -04:00
|
|
|
|
(cran->guix-package package-name #:repo 'bioconductor
|
|
|
|
|
#:license-prefix license-prefix))
|
2020-03-25 04:36:58 -04:00
|
|
|
|
((hg)
|
|
|
|
|
;; Retry import from Bioconductor
|
2022-10-18 06:45:15 -04:00
|
|
|
|
(cran->guix-package package-name #:repo 'bioconductor
|
|
|
|
|
#:license-prefix license-prefix))
|
2019-09-02 08:45:17 -04:00
|
|
|
|
((bioconductor)
|
|
|
|
|
;; Retry import from CRAN
|
2022-10-18 06:45:15 -04:00
|
|
|
|
(cran->guix-package package-name #:repo 'cran
|
|
|
|
|
#:license-prefix license-prefix))
|
2020-12-11 18:06:18 -05:00
|
|
|
|
(else
|
2021-01-19 10:47:20 -05:00
|
|
|
|
(values #f '()))))))))
|
2016-05-17 10:38:17 -04:00
|
|
|
|
|
2022-10-18 06:45:15 -04:00
|
|
|
|
(define* (cran-recursive-import package-name #:key (repo 'cran) version
|
|
|
|
|
(license-prefix identity))
|
2020-02-04 07:18:18 -05:00
|
|
|
|
(recursive-import package-name
|
2021-10-29 15:26:16 -04:00
|
|
|
|
#:version version
|
2020-02-04 07:18:18 -05:00
|
|
|
|
#:repo repo
|
2018-06-08 06:46:43 -04:00
|
|
|
|
#:repo->guix-package cran->guix-package
|
2022-10-18 06:45:15 -04:00
|
|
|
|
#:guix-name cran-guix-name
|
|
|
|
|
#:license-prefix license-prefix))
|
2015-10-21 08:36:14 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;;;
|
|
|
|
|
;;; Updater.
|
|
|
|
|
;;;
|
|
|
|
|
|
2015-12-16 08:22:17 -05:00
|
|
|
|
(define (package->upstream-name package)
|
|
|
|
|
"Return the upstream name of the PACKAGE."
|
|
|
|
|
(let* ((properties (package-properties package))
|
|
|
|
|
(upstream-name (and=> properties
|
|
|
|
|
(cut assoc-ref <> 'upstream-name))))
|
|
|
|
|
(if upstream-name
|
|
|
|
|
upstream-name
|
|
|
|
|
(match (package-source package)
|
|
|
|
|
((? origin? origin)
|
|
|
|
|
(match (origin-uri origin)
|
2016-03-22 10:12:30 -04:00
|
|
|
|
((or (? string? url) (url _ ...))
|
2015-12-16 08:22:17 -05:00
|
|
|
|
(let ((end (string-rindex url #\_))
|
|
|
|
|
(start (string-rindex url #\/)))
|
|
|
|
|
;; The URL ends on
|
|
|
|
|
;; (string-append "/" name "_" version ".tar.gz")
|
2017-05-04 05:52:33 -04:00
|
|
|
|
(and start end (substring url (+ start 1) end))))
|
2015-12-16 08:22:17 -05:00
|
|
|
|
(_ #f)))
|
|
|
|
|
(_ #f)))))
|
|
|
|
|
|
2022-06-24 16:01:35 -04:00
|
|
|
|
(define* (latest-cran-release pkg #:key (version #f))
|
2019-01-11 03:27:21 -05:00
|
|
|
|
"Return an <upstream-source> for the latest release of the package PKG."
|
2022-06-24 16:01:35 -04:00
|
|
|
|
(when version
|
|
|
|
|
(error
|
|
|
|
|
(formatted-message
|
|
|
|
|
(G_ "~a provides only the latest version of each package, sorry.")
|
|
|
|
|
"CRAN")))
|
2015-12-03 10:12:09 -05:00
|
|
|
|
|
2015-12-16 08:22:17 -05:00
|
|
|
|
(define upstream-name
|
2019-01-11 03:27:21 -05:00
|
|
|
|
(package->upstream-name pkg))
|
2015-12-03 10:12:09 -05:00
|
|
|
|
|
|
|
|
|
(define meta
|
2017-04-05 09:37:03 -04:00
|
|
|
|
(fetch-description 'cran upstream-name))
|
2015-12-03 10:12:09 -05:00
|
|
|
|
|
|
|
|
|
(and meta
|
|
|
|
|
(let ((version (assoc-ref meta "Version")))
|
|
|
|
|
;; CRAN does not provide signatures.
|
|
|
|
|
(upstream-source
|
2019-01-11 03:27:21 -05:00
|
|
|
|
(package (package-name pkg))
|
2015-12-03 10:12:09 -05:00
|
|
|
|
(version version)
|
2019-01-11 03:27:21 -05:00
|
|
|
|
(urls (cran-uri upstream-name version))
|
upstream: Replace 'input-changes' field by 'inputs'.
Returning the expected list of inputs rather than changes relative to
the current package definition is less ambiguous and offers more
possibilities for further processing.
* guix/upstream.scm (<upstream-source>)[input-changes]: Remove.
[inputs]: New field.
(<upstream-input>): New record type.
* guix/upstream.scm (upstream-input-type-predicate)
(input-type-filter, upstream-source-regular-inputs)
(upstream-source-native-inputs, upstream-source-propagated-inputs): New
procedures.
(changed-inputs): Expect an <upstream-source> as its second argument.
Adjust accordingly.
* guix/import/pypi.scm (distribution-sha256): New procedure.
(maybe-inputs): Expect a list of <upstream-input>.
(compute-inputs): Rewrite to return a list of <upstream-input>.
(pypi-package-inputs, pypi-package->upstream-source): New procedures.
(make-pypi-sexp): Use it.
* guix/import/stackage.scm (latest-lts-release): Define 'cabal'.
Replace 'input-changes' field by 'inputs'.
* guix/scripts/refresh.scm (update-package): Use 'changed-inputs'
instead of 'upstream-source-input-changes'.
* tests/cran.scm ("description->package"): Adjust order of inputs.
* tests/pypi.scm (default-sha256, default-sha256/base32): New variables.
(foo-json): Add 'digests' entry.
("pypi->guix-package, no wheel"): Check HASH against DEFAULT-SHA256/BASE32.
("pypi->guix-package, wheels"): Likewise.
("pypi->guix-package, no usable requirement file."): Likewise.
("pypi->guix-package, package name contains \"-\" followed by digits"):
Likewise.
("package-latest-release"): New test.
* tests/upstream.scm (test-package-sexp): Remove.
("changed-inputs returns no changes"): Rewrite to use <upstream-source>.
(test-new-package-sexp): Remove.
("changed-inputs returns changes to plain input list"): Rewrite.
("changed-inputs returns changes to all plain input lists"): Likewise.
("changed-inputs returns changes to labelled input list")
("changed-inputs returns changes to all labelled input lists"): Remove.
* guix/import/cran.scm (maybe-inputs): Expect PACKAGE-INPUTS to be a
list of <upstream-input>.
(source-dir->dependencies): Return a list of <upstream-input>.
(vignette-builders): Likewise.
(uri-helper, cran-package-source-url)
(cran-package-propagated-inputs, cran-package-inputs): New procedures.
(description->package): Use them instead of local definitions.
(latest-cran-release): Replace 'input-changes' field by 'inputs'.
(latest-bioconductor-release): Likewise.
(format-inputs): Remove.
* guix/import/hackage.scm (cabal-package-inputs): New procedure.
(hackage-module->sexp): Use it.
[maybe-inputs]: Expect a list of <upstream-input>.
2023-05-15 16:37:25 -04:00
|
|
|
|
(inputs (cran-package-inputs meta 'cran))))))
|
2015-10-21 08:36:14 -04:00
|
|
|
|
|
2022-06-24 16:01:35 -04:00
|
|
|
|
(define* (latest-bioconductor-release pkg #:key (version #f))
|
2019-01-11 03:27:21 -05:00
|
|
|
|
"Return an <upstream-source> for the latest release of the package PKG."
|
2022-06-24 16:01:35 -04:00
|
|
|
|
(when version
|
|
|
|
|
(error
|
|
|
|
|
(formatted-message
|
|
|
|
|
(G_ "~a provides only the latest version of each package, sorry.")
|
|
|
|
|
"bioconductor.org")))
|
2015-12-16 08:45:28 -05:00
|
|
|
|
|
|
|
|
|
(define upstream-name
|
2019-01-11 03:27:21 -05:00
|
|
|
|
(package->upstream-name pkg))
|
2015-12-16 08:45:28 -05:00
|
|
|
|
|
2022-06-24 16:01:35 -04:00
|
|
|
|
(define latest-version
|
2017-11-06 11:10:41 -05:00
|
|
|
|
(latest-bioconductor-package-version upstream-name))
|
2015-12-16 08:45:28 -05:00
|
|
|
|
|
2023-01-09 16:32:58 -05:00
|
|
|
|
(and latest-version
|
2017-11-06 11:10:41 -05:00
|
|
|
|
;; Bioconductor does not provide signatures.
|
|
|
|
|
(upstream-source
|
2019-01-11 03:27:21 -05:00
|
|
|
|
(package (package-name pkg))
|
2022-06-24 16:01:35 -04:00
|
|
|
|
(version latest-version)
|
2023-01-09 16:32:58 -05:00
|
|
|
|
(urls (bioconductor-uri upstream-name latest-version))
|
upstream: Replace 'input-changes' field by 'inputs'.
Returning the expected list of inputs rather than changes relative to
the current package definition is less ambiguous and offers more
possibilities for further processing.
* guix/upstream.scm (<upstream-source>)[input-changes]: Remove.
[inputs]: New field.
(<upstream-input>): New record type.
* guix/upstream.scm (upstream-input-type-predicate)
(input-type-filter, upstream-source-regular-inputs)
(upstream-source-native-inputs, upstream-source-propagated-inputs): New
procedures.
(changed-inputs): Expect an <upstream-source> as its second argument.
Adjust accordingly.
* guix/import/pypi.scm (distribution-sha256): New procedure.
(maybe-inputs): Expect a list of <upstream-input>.
(compute-inputs): Rewrite to return a list of <upstream-input>.
(pypi-package-inputs, pypi-package->upstream-source): New procedures.
(make-pypi-sexp): Use it.
* guix/import/stackage.scm (latest-lts-release): Define 'cabal'.
Replace 'input-changes' field by 'inputs'.
* guix/scripts/refresh.scm (update-package): Use 'changed-inputs'
instead of 'upstream-source-input-changes'.
* tests/cran.scm ("description->package"): Adjust order of inputs.
* tests/pypi.scm (default-sha256, default-sha256/base32): New variables.
(foo-json): Add 'digests' entry.
("pypi->guix-package, no wheel"): Check HASH against DEFAULT-SHA256/BASE32.
("pypi->guix-package, wheels"): Likewise.
("pypi->guix-package, no usable requirement file."): Likewise.
("pypi->guix-package, package name contains \"-\" followed by digits"):
Likewise.
("package-latest-release"): New test.
* tests/upstream.scm (test-package-sexp): Remove.
("changed-inputs returns no changes"): Rewrite to use <upstream-source>.
(test-new-package-sexp): Remove.
("changed-inputs returns changes to plain input list"): Rewrite.
("changed-inputs returns changes to all plain input lists"): Likewise.
("changed-inputs returns changes to labelled input list")
("changed-inputs returns changes to all labelled input lists"): Remove.
* guix/import/cran.scm (maybe-inputs): Expect PACKAGE-INPUTS to be a
list of <upstream-input>.
(source-dir->dependencies): Return a list of <upstream-input>.
(vignette-builders): Likewise.
(uri-helper, cran-package-source-url)
(cran-package-propagated-inputs, cran-package-inputs): New procedures.
(description->package): Use them instead of local definitions.
(latest-cran-release): Replace 'input-changes' field by 'inputs'.
(latest-bioconductor-release): Likewise.
(format-inputs): Remove.
* guix/import/hackage.scm (cabal-package-inputs): New procedure.
(hackage-module->sexp): Use it.
[maybe-inputs]: Expect a list of <upstream-input>.
2023-05-15 16:37:25 -04:00
|
|
|
|
(inputs
|
|
|
|
|
(let ((meta (fetch-description 'bioconductor upstream-name)))
|
|
|
|
|
(cran-package-inputs meta 'bioconductor))))))
|
2015-12-16 08:45:28 -05:00
|
|
|
|
|
2015-10-21 08:36:14 -04:00
|
|
|
|
(define (cran-package? package)
|
|
|
|
|
"Return true if PACKAGE is an R package from CRAN."
|
2015-12-16 08:45:28 -05:00
|
|
|
|
(and (string-prefix? "r-" (package-name package))
|
2017-05-04 05:52:33 -04:00
|
|
|
|
;; Check if the upstream name can be extracted from package uri.
|
|
|
|
|
(package->upstream-name package)
|
|
|
|
|
;; Check if package uri(s) are prefixed by "mirror://cran".
|
2020-07-03 16:45:21 -04:00
|
|
|
|
((url-predicate (cut string-prefix? "mirror://cran" <>)) package)))
|
2015-12-16 08:45:28 -05:00
|
|
|
|
|
|
|
|
|
(define (bioconductor-package? package)
|
|
|
|
|
"Return true if PACKAGE is an R package from Bioconductor."
|
2016-10-26 03:47:40 -04:00
|
|
|
|
(let ((predicate (lambda (uri)
|
Use HTTPS for bioconductor.org.
* doc/guix.texi (Invoking guix import, Invoking guix refresh): Use HTTPS for
bioconductor.org URLs.
* gnu/packages/bioinformatics.scm (r-annotate, r-geneplotter, r-genefilter)
(r-deseq2, r-dexseq, r-annotationforge, r-rbgl, r-gseabase, r-category)
(r-gostats, r-shortread, r-biocgenerics, r-biocinstaller, r-biocviews)
(r-biocstyle, r-bioccheck, r-s4vectors, r-iranges, r-genomeinfodbdata)
(r-genomeinfodb, r-xvector, r-genomicranges, r-biobase, r-annotationdbi)
(r-biomart, r-biocparallel, r-biostrings, r-rsamtools, r-delayedarray)
(r-summarizedexperiment, r-genomicalignments, r-rtracklayer)
(r-genomicfeatures, r-graph, r-topgo, r-bsgenome, r-impute, r-seqpattern)
(r-seqlogo, r-motifrg, r-bamsignals, r-mutationalpatterns, r-tximport)
(r-rhdf5, r-chipseq, r-sva, r-affy, r-vsn, r-mzid, r-msnid)
(r-interactivedisplaybase, r-annotationhub)[home-page]: Likewise.
* gnu/packages/bioinformatics.scm (r-txdb-hsapiens-ucsc-hg19-knowngene)
(r-go-db, r-bsgenome-hsapiens-1000genomes-hs37d5, r-org-hs-eg-db)
(r-org-ce-eg-db, r-org-dm-eg-db, r-org-mm-eg-db)
(r-bsgenome-hsapiens-ucsc-hg19, r-bsgenome-mmusculus-ucsc-mm9)
(r-bsgenome-mmusculus-ucsc-mm10, r-txdb-mmusculus-ucsc-mm10-knowngene)
(r-bsgenome-celegans-ucsc-ce6, r-bsgenome-celegans-ucsc-ce10)
(r-bsgenome-dmelanogaster-ucsc-dm3, r-copyhelper)[source, home-page]:
Likewise.
* gnu/packages/statistics.scm (r-rcurl)[source]: Likewise.
* guix/build-system/r.scm (bioconductor-uri): Likewise.
* guix/import/cran.scm (%cran-url, bioconductor-package?)
(bioconductor-data-package?, bioconductor-experiment-package?): Likewise.
2017-10-19 20:39:56 -04:00
|
|
|
|
(and (string-prefix? "https://bioconductor.org" uri)
|
2017-04-05 09:37:03 -04:00
|
|
|
|
;; Data packages are neither listed in SVN nor on
|
|
|
|
|
;; the Github mirror, so we have to exclude them
|
|
|
|
|
;; from the set of bioconductor packages that can be
|
|
|
|
|
;; updated automatically.
|
2017-04-05 12:42:05 -04:00
|
|
|
|
(not (string-contains uri "/data/annotation/"))
|
|
|
|
|
;; Experiment packages are in a separate repository.
|
|
|
|
|
(not (string-contains uri "/data/experiment/"))))))
|
2016-10-26 03:47:40 -04:00
|
|
|
|
(and (string-prefix? "r-" (package-name package))
|
2020-07-03 16:45:21 -04:00
|
|
|
|
((url-predicate predicate) package))))
|
2016-10-26 03:47:40 -04:00
|
|
|
|
|
|
|
|
|
(define (bioconductor-data-package? package)
|
|
|
|
|
"Return true if PACKAGE is an R data package from Bioconductor."
|
|
|
|
|
(let ((predicate (lambda (uri)
|
Use HTTPS for bioconductor.org.
* doc/guix.texi (Invoking guix import, Invoking guix refresh): Use HTTPS for
bioconductor.org URLs.
* gnu/packages/bioinformatics.scm (r-annotate, r-geneplotter, r-genefilter)
(r-deseq2, r-dexseq, r-annotationforge, r-rbgl, r-gseabase, r-category)
(r-gostats, r-shortread, r-biocgenerics, r-biocinstaller, r-biocviews)
(r-biocstyle, r-bioccheck, r-s4vectors, r-iranges, r-genomeinfodbdata)
(r-genomeinfodb, r-xvector, r-genomicranges, r-biobase, r-annotationdbi)
(r-biomart, r-biocparallel, r-biostrings, r-rsamtools, r-delayedarray)
(r-summarizedexperiment, r-genomicalignments, r-rtracklayer)
(r-genomicfeatures, r-graph, r-topgo, r-bsgenome, r-impute, r-seqpattern)
(r-seqlogo, r-motifrg, r-bamsignals, r-mutationalpatterns, r-tximport)
(r-rhdf5, r-chipseq, r-sva, r-affy, r-vsn, r-mzid, r-msnid)
(r-interactivedisplaybase, r-annotationhub)[home-page]: Likewise.
* gnu/packages/bioinformatics.scm (r-txdb-hsapiens-ucsc-hg19-knowngene)
(r-go-db, r-bsgenome-hsapiens-1000genomes-hs37d5, r-org-hs-eg-db)
(r-org-ce-eg-db, r-org-dm-eg-db, r-org-mm-eg-db)
(r-bsgenome-hsapiens-ucsc-hg19, r-bsgenome-mmusculus-ucsc-mm9)
(r-bsgenome-mmusculus-ucsc-mm10, r-txdb-mmusculus-ucsc-mm10-knowngene)
(r-bsgenome-celegans-ucsc-ce6, r-bsgenome-celegans-ucsc-ce10)
(r-bsgenome-dmelanogaster-ucsc-dm3, r-copyhelper)[source, home-page]:
Likewise.
* gnu/packages/statistics.scm (r-rcurl)[source]: Likewise.
* guix/build-system/r.scm (bioconductor-uri): Likewise.
* guix/import/cran.scm (%cran-url, bioconductor-package?)
(bioconductor-data-package?, bioconductor-experiment-package?): Likewise.
2017-10-19 20:39:56 -04:00
|
|
|
|
(and (string-prefix? "https://bioconductor.org" uri)
|
2016-10-26 03:47:40 -04:00
|
|
|
|
(string-contains uri "/data/annotation/")))))
|
|
|
|
|
(and (string-prefix? "r-" (package-name package))
|
2020-07-03 16:45:21 -04:00
|
|
|
|
((url-predicate predicate) package))))
|
2015-10-21 08:36:14 -04:00
|
|
|
|
|
2017-04-05 12:42:06 -04:00
|
|
|
|
(define (bioconductor-experiment-package? package)
|
|
|
|
|
"Return true if PACKAGE is an R experiment package from Bioconductor."
|
|
|
|
|
(let ((predicate (lambda (uri)
|
Use HTTPS for bioconductor.org.
* doc/guix.texi (Invoking guix import, Invoking guix refresh): Use HTTPS for
bioconductor.org URLs.
* gnu/packages/bioinformatics.scm (r-annotate, r-geneplotter, r-genefilter)
(r-deseq2, r-dexseq, r-annotationforge, r-rbgl, r-gseabase, r-category)
(r-gostats, r-shortread, r-biocgenerics, r-biocinstaller, r-biocviews)
(r-biocstyle, r-bioccheck, r-s4vectors, r-iranges, r-genomeinfodbdata)
(r-genomeinfodb, r-xvector, r-genomicranges, r-biobase, r-annotationdbi)
(r-biomart, r-biocparallel, r-biostrings, r-rsamtools, r-delayedarray)
(r-summarizedexperiment, r-genomicalignments, r-rtracklayer)
(r-genomicfeatures, r-graph, r-topgo, r-bsgenome, r-impute, r-seqpattern)
(r-seqlogo, r-motifrg, r-bamsignals, r-mutationalpatterns, r-tximport)
(r-rhdf5, r-chipseq, r-sva, r-affy, r-vsn, r-mzid, r-msnid)
(r-interactivedisplaybase, r-annotationhub)[home-page]: Likewise.
* gnu/packages/bioinformatics.scm (r-txdb-hsapiens-ucsc-hg19-knowngene)
(r-go-db, r-bsgenome-hsapiens-1000genomes-hs37d5, r-org-hs-eg-db)
(r-org-ce-eg-db, r-org-dm-eg-db, r-org-mm-eg-db)
(r-bsgenome-hsapiens-ucsc-hg19, r-bsgenome-mmusculus-ucsc-mm9)
(r-bsgenome-mmusculus-ucsc-mm10, r-txdb-mmusculus-ucsc-mm10-knowngene)
(r-bsgenome-celegans-ucsc-ce6, r-bsgenome-celegans-ucsc-ce10)
(r-bsgenome-dmelanogaster-ucsc-dm3, r-copyhelper)[source, home-page]:
Likewise.
* gnu/packages/statistics.scm (r-rcurl)[source]: Likewise.
* guix/build-system/r.scm (bioconductor-uri): Likewise.
* guix/import/cran.scm (%cran-url, bioconductor-package?)
(bioconductor-data-package?, bioconductor-experiment-package?): Likewise.
2017-10-19 20:39:56 -04:00
|
|
|
|
(and (string-prefix? "https://bioconductor.org" uri)
|
2017-04-05 12:42:06 -04:00
|
|
|
|
(string-contains uri "/data/experiment/")))))
|
|
|
|
|
(and (string-prefix? "r-" (package-name package))
|
2020-07-03 16:45:21 -04:00
|
|
|
|
((url-predicate predicate) package))))
|
2017-04-05 12:42:06 -04:00
|
|
|
|
|
2015-10-21 08:36:14 -04:00
|
|
|
|
(define %cran-updater
|
2015-10-26 14:24:53 -04:00
|
|
|
|
(upstream-updater
|
|
|
|
|
(name 'cran)
|
|
|
|
|
(description "Updater for CRAN packages")
|
|
|
|
|
(pred cran-package?)
|
upstream-updater: Rename record field.
The next commits will make the functions, which are currently importing the
latest version of a package, change into importing the latest or a given
version of the package (for those updaters supporting specifying a version).
Thus the name ‘latest‘ is no longer appropriate.
* guix/upstream.scm (upstream-updater) Rename field [latest] to
[import]. (lookup-updater, package-latest-release) Adjust fieldname
accordingly.
* guix/gnu-maintenance.scm (%gnu-updater, %gnu-ftp-updater,
%savannah-updater, %sourceforge-updater, %xorg-updater,
%kernel.org-updater, %generic-html-updater),
guix/import/cpan.scm (%cpan-updater),
guix/import/cran.scm (%cran-updater, %bioconductor-updater),
guix/import/crate.scm (%crate-updater),
guix/import/egg.scm (%egg-updater),
guix/import/elpa.scm (%elpa-updater),
guix/import/gem.scm (%gem-updater),
guix/import/git.scm (%generic-git-updater),
guix/import/github.scm (%github-updater),
guix/import/gnome.scm (%gnome-updater),
guix/import/hackage.scm (%hackage-updater),
guix/import/hexpm.scm (%hexpm-updater),
guix/import/kde.scm (%kde-updater),
guix/import/launchpad.scm (%launchpad-updater),
guix/import/minetest.scm (%minetest-updater),
guix/import/opam.scm (%opam-updater),
guix/import/pypi.scm (%pypi-updater),
guix/import/stackage.scm (%stackage-updater),
tests/import-github.scm (found-sexp)
tests/transformations.scm ("options->transformation, with-latest"):
Adjust fieldname accordingly.
2022-08-27 07:05:33 -04:00
|
|
|
|
(import latest-cran-release)))
|
2015-12-16 08:45:28 -05:00
|
|
|
|
|
|
|
|
|
(define %bioconductor-updater
|
|
|
|
|
(upstream-updater
|
|
|
|
|
(name 'bioconductor)
|
|
|
|
|
(description "Updater for Bioconductor packages")
|
|
|
|
|
(pred bioconductor-package?)
|
upstream-updater: Rename record field.
The next commits will make the functions, which are currently importing the
latest version of a package, change into importing the latest or a given
version of the package (for those updaters supporting specifying a version).
Thus the name ‘latest‘ is no longer appropriate.
* guix/upstream.scm (upstream-updater) Rename field [latest] to
[import]. (lookup-updater, package-latest-release) Adjust fieldname
accordingly.
* guix/gnu-maintenance.scm (%gnu-updater, %gnu-ftp-updater,
%savannah-updater, %sourceforge-updater, %xorg-updater,
%kernel.org-updater, %generic-html-updater),
guix/import/cpan.scm (%cpan-updater),
guix/import/cran.scm (%cran-updater, %bioconductor-updater),
guix/import/crate.scm (%crate-updater),
guix/import/egg.scm (%egg-updater),
guix/import/elpa.scm (%elpa-updater),
guix/import/gem.scm (%gem-updater),
guix/import/git.scm (%generic-git-updater),
guix/import/github.scm (%github-updater),
guix/import/gnome.scm (%gnome-updater),
guix/import/hackage.scm (%hackage-updater),
guix/import/hexpm.scm (%hexpm-updater),
guix/import/kde.scm (%kde-updater),
guix/import/launchpad.scm (%launchpad-updater),
guix/import/minetest.scm (%minetest-updater),
guix/import/opam.scm (%opam-updater),
guix/import/pypi.scm (%pypi-updater),
guix/import/stackage.scm (%stackage-updater),
tests/import-github.scm (found-sexp)
tests/transformations.scm ("options->transformation, with-latest"):
Adjust fieldname accordingly.
2022-08-27 07:05:33 -04:00
|
|
|
|
(import latest-bioconductor-release)))
|
2015-10-21 08:36:14 -04:00
|
|
|
|
|
|
|
|
|
;;; cran.scm ends here
|