Merge branch 'master' into staging

This commit is contained in:
Marius Bakke 2019-12-11 23:21:27 +01:00
commit 9b601fc211
No known key found for this signature in database
GPG Key ID: A2A06DF2A33A54FA
34 changed files with 814 additions and 274 deletions

View File

@ -1179,6 +1179,7 @@ dist_patch_DATA = \
%D%/packages/patches/ngircd-handle-zombies.patch \ %D%/packages/patches/ngircd-handle-zombies.patch \
%D%/packages/patches/nm-plugin-path.patch \ %D%/packages/patches/nm-plugin-path.patch \
%D%/packages/patches/nsis-env-passthru.patch \ %D%/packages/patches/nsis-env-passthru.patch \
%D%/packages/patches/nss-CVE-2019-11745.patch \
%D%/packages/patches/nss-freebl-stubs.patch \ %D%/packages/patches/nss-freebl-stubs.patch \
%D%/packages/patches/nss-increase-test-timeout.patch \ %D%/packages/patches/nss-increase-test-timeout.patch \
%D%/packages/patches/nss-pkgconfig.patch \ %D%/packages/patches/nss-pkgconfig.patch \

View File

@ -629,7 +629,7 @@ would need and has several interesting built-in capabilities.")
(define-public netcat-openbsd (define-public netcat-openbsd
(package (package
(name "netcat-openbsd") (name "netcat-openbsd")
(version "1.203-2") (version "1.206-1")
(source (origin (source (origin
(method git-fetch) (method git-fetch)
(uri (git-reference (uri (git-reference
@ -638,7 +638,7 @@ would need and has several interesting built-in capabilities.")
(file-name (git-file-name name version)) (file-name (git-file-name name version))
(sha256 (sha256
(base32 (base32
"0j85gzbjzs6yrhgabh3zkwzd27qkr5s0zjjczl0hah8q7yhrjk3m")))) "08r3mmck3s5pbvwyq19wp5g8jqcxza3cm8nkc6jm7rqn4jdydc4z"))))
(build-system gnu-build-system) (build-system gnu-build-system)
(arguments (arguments
`(#:tests? #f ; no test suite `(#:tests? #f ; no test suite

View File

@ -26,6 +26,7 @@
#:use-module (guix packages) #:use-module (guix packages)
#:use-module (gnu packages autotools) #:use-module (gnu packages autotools)
#:use-module (gnu packages gettext) #:use-module (gnu packages gettext)
#:use-module (gnu packages libevent)
#:use-module (gnu packages linux) #:use-module (gnu packages linux)
#:use-module (gnu packages pkg-config) #:use-module (gnu packages pkg-config)
#:use-module (gnu packages sphinx) #:use-module (gnu packages sphinx)
@ -87,7 +88,7 @@ independently or together to provide resilient infrastructures.")
(define-public libraft (define-public libraft
(package (package
(name "libraft") (name "libraft")
(version "0.9.5") (version "0.9.11")
(home-page "https://github.com/canonical/raft") (home-page "https://github.com/canonical/raft")
(source (origin (source (origin
(method git-fetch) (method git-fetch)
@ -96,10 +97,17 @@ independently or together to provide resilient infrastructures.")
(file-name (git-file-name name version)) (file-name (git-file-name name version))
(sha256 (sha256
(base32 (base32
"1q49f5mmv6nr6dxhnp044xwc6jlczgh0nj0bl6718wiqh28411x0")))) "00rsq4z9nykmf7r5rlpv1y6bvckcmg3zv57vh1h681y5pij6cch1"))))
(arguments '(#:configure-flags '("--disable-uv"))) (arguments '(#:configure-flags '("--enable-uv")
;; The uv plugin tests fail, if libuv (or the example) is enabled, #:phases
;; because setting up the environment requires too much privileges. (modify-phases %standard-phases
(add-after 'unpack 'disable-failing-tests
(lambda _
(substitute* "Makefile.am"
((".*test_uv_append.c.*") ""))
#t)))))
(inputs
`(("libuv" ,libuv)))
(native-inputs (native-inputs
`(("autoconf" ,autoconf) `(("autoconf" ,autoconf)
("automake" ,automake) ("automake" ,automake)

View File

@ -4168,6 +4168,30 @@ supports arbitrary vertex/edge/graph attributes.")
software developed by the Statnet Project.") software developed by the Statnet Project.")
(license license:gpl3))) (license license:gpl3)))
(define-public r-statcheck
(package
(name "r-statcheck")
(version "1.3.0")
(source
(origin
(method url-fetch)
(uri (cran-uri "statcheck" version))
(sha256
(base32
"0ivybdcrymlsfv6pg6p5bv70qdvgxf2vgp0kf4r0pf2fcvav1mcp"))))
(build-system r-build-system)
(propagated-inputs
`(("r-ggplot2" ,r-ggplot2)
("r-plyr" ,r-plyr)
("r-rmarkdown" ,r-rmarkdown)))
(home-page "https://cran.r-project.org/web/packages/statcheck/")
(synopsis "Extract statistics from articles and recompute p-values")
(description "This package can automatically extract statistical
null-hypothesis significant testing (NHST) results from articles and recompute
the p-values based on the reported test statistic and degrees of freedom to
detect possible inconsistencies.")
(license license:gpl2)))
(define-public r-sna (define-public r-sna
(package (package
(name "r-sna") (name "r-sna")
@ -14695,6 +14719,89 @@ they are often difficult to interpret. Rex allows you to build complex
regular expressions from human readable expressions") regular expressions from human readable expressions")
(license license:expat))) (license license:expat)))
(define-public r-xmlparsedata
(package
(name "r-xmlparsedata")
(version "1.0.3")
(source
(origin
(method url-fetch)
(uri (cran-uri "xmlparsedata" version))
(sha256
(base32
"0gjr3l5z5dp276lchr2649as1rkj56d2mlvbr66yg393zzw50lsh"))))
(properties `((upstream-name . "xmlparsedata")))
(build-system r-build-system)
(home-page "https://github.com/r-lib/xmlparsedata#readme")
(synopsis "Parse data of @code{R} code as an @code{XML} tree")
(description
"This package provides tools to convert the output of
@code{utils::getParseData()} to an @code{XML} tree, that one can search via
@code{XPath}, and is easier to manipulate in general.")
(license license:expat)))
(define-public r-cyclocomp
(package
(name "r-cyclocomp")
(version "1.1.0")
(source
(origin
(method url-fetch)
(uri (cran-uri "cyclocomp" version))
(sha256
(base32
"0gky3svk02wiajw7nfjh30684h3qxili4bvsab0m7b6cggw6bgyd"))))
(properties `((upstream-name . "cyclocomp")))
(build-system r-build-system)
(propagated-inputs
`(("r-callr" ,r-callr)
("r-crayon" ,r-crayon)
("r-desc" ,r-desc)
("r-remotes" ,r-remotes)
("r-withr" ,r-withr)))
(home-page "https://github.com/MangoTheCat/cyclocomp")
(synopsis "Cyclomatic complexity of R code")
(description
"Cyclomatic complexity is a software metric, used to indicate the
complexity of a program. It is a quantitative measure of the number of
linearly independent paths through a program's source code. This package
provides tools to compute this metric.")
(license license:expat)))
(define-public r-lintr
(package
(name "r-lintr")
(version "2.0.0")
(source
(origin
(method url-fetch)
(uri (cran-uri "lintr" version))
(sha256
(base32
"09gbci4v5n4gsfzminly8332fw7faxdi1kkyvpa10dydx02sjcwb"))))
(properties `((upstream-name . "lintr")))
(build-system r-build-system)
(propagated-inputs
`(("r-codetools" ,r-codetools)
("r-crayon" ,r-crayon)
("r-cyclocomp" ,r-cyclocomp)
("r-digest" ,r-digest)
("r-httr" ,r-httr)
("r-jsonlite" ,r-jsonlite)
("r-knitr" ,r-knitr)
("r-rex" ,r-rex)
("r-rstudioapi" ,r-rstudioapi)
("r-stringdist" ,r-stringdist)
("r-testthat" ,r-testthat)
("r-xml2" ,r-xml2)
("r-xmlparsedata" ,r-xmlparsedata)))
(home-page "https://github.com/jimhester/lintr")
(synopsis "Linter for R code")
(description "This package checks adherence to a given style, syntax
errors and possible semantic issues. It supports on the fly checking of R
code edited with @code{RStudio IDE}, @code{Emacs} and @code{Vim}.")
(license license:expat)))
(define-public r-sctransform (define-public r-sctransform
(package (package
(name "r-sctransform") (name "r-sctransform")

View File

@ -852,15 +852,16 @@ cannot sign messages in OpenBSD format yet.")
(define-public enchive (define-public enchive
(package (package
(name "enchive") (name "enchive")
(version "3.4") (version "3.5")
(source (origin (source (origin
(method url-fetch) (method git-fetch)
(uri (string-append "https://github.com/skeeto/" name "/archive/" (uri (git-reference
version ".tar.gz")) (url "https://github.com/skeeto/enchive")
(sha256 (commit version)))
(base32 (sha256
"17hrxpp4cpn10bk48sfvfjc8hghky34agsnypam1v9f36kbalqfk")) (base32
(file-name (string-append name "-" version ".tar.gz")))) "0fdrfc5l42lj2bvmv9dmkmhmm7qiszwk7cmdvnqad3fs7652g0qa"))
(file-name (git-file-name name version))))
(build-system gnu-build-system) (build-system gnu-build-system)
(arguments (arguments
'(#:tests? #f ; no check target ' '(#:tests? #f ; no check target '

View File

@ -19734,6 +19734,54 @@ You can customize: @code{tao-theme-scale-fn}, that returns 16 2-digit numbers;
@code{tao-theme-use-height}.") @code{tao-theme-use-height}.")
(license license:gpl3+)))) (license license:gpl3+))))
(define-public emacs-almost-mono-themes
(let ((commit "c3a85c1a665530a5d830665969725cdba8eceb75")
(revision "0"))
(package
(name "emacs-almost-mono-themes")
(version (git-version "0" revision commit))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/cryon/almost-mono-themes.git")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"034k32xkr5ma415hlkbl35z0jxc4sa1inf87hg3y6lrlfl83fyjh"))))
(build-system emacs-build-system)
(home-page "https://github.com/cryon/almost-mono-themes")
(synopsis "Almost monochromatic themes for emacs in a few variants")
(description
"This package provides a collection of almost monochrome Emacs themes:
@code{almost-mono-black} and @code{almost-mono-white}.")
(license license:gpl3+))))
(define-public emacs-quasi-monochrome
(let ((commit "68060dbbc0bbfe4924387392874186c5a29bb434")
(revision "0"))
(package
(name "emacs-quasi-monochrome")
(version (git-version "1.2" revision commit))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/lbolla/emacs-quasi-monochrome.git")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"0zp2xr0bjfqrpb0bqczzick1vvbjmipjavrdi70kw6a9caynvq22"))))
(build-system emacs-build-system)
(home-page "https://github.com/lbolla/emacs-quasi-monochrome")
(synopsis "Dark color theme for Emacs")
(description
"This package provides a dark color theme with a black background, high
contrast and few colors.")
(license license:gpl3+))))
(define-public emacs-doom-themes (define-public emacs-doom-themes
(package (package
(name "emacs-doom-themes") (name "emacs-doom-themes")

View File

@ -186,7 +186,7 @@ by the b43-open driver of Linux-libre.")
(define-public seabios (define-public seabios
(package (package
(name "seabios") (name "seabios")
(version "1.12.1") (version "1.13.0")
(source (source
(origin (origin
(method git-fetch) (method git-fetch)
@ -195,10 +195,10 @@ by the b43-open driver of Linux-libre.")
(commit (string-append "rel-" version)))) (commit (string-append "rel-" version))))
(file-name (git-file-name name version)) (file-name (git-file-name name version))
(sha256 (sha256
(base32 "1g9y03r5ky58q2g9rhbwfhs42z0zb9f59wfxpwh6zjqa6fyv1r80")))) (base32 "1n1bd6msfs7xn8844sz2qnm7hb5x2qfl3zb06kp4bx9vdc3i6619"))))
(build-system gnu-build-system) (build-system gnu-build-system)
(native-inputs (native-inputs
`(("python-2" ,python-2))) `(("python" ,python-wrapper)))
(arguments (arguments
`(#:tests? #f ; no check target `(#:tests? #f ; no check target
#:phases #:phases

View File

@ -117,7 +117,7 @@ the Obsidian icon theme.")
(define-public gnome-shell-extension-dash-to-dock (define-public gnome-shell-extension-dash-to-dock
(package (package
(name "gnome-shell-extension-dash-to-dock") (name "gnome-shell-extension-dash-to-dock")
(version "65") (version "66")
(source (origin (source (origin
(method git-fetch) (method git-fetch)
(uri (git-reference (uri (git-reference
@ -126,7 +126,7 @@ the Obsidian icon theme.")
version)))) version))))
(sha256 (sha256
(base32 (base32
"0ln49l9s0yfl30pi77pz7xlmh63l9vjppi863kry5lay10dsvz47")) "04krl6rxlp1qc97psraf2kwin7h0mx4c7pnfpi7vhplmvasrwkfh"))
(file-name (git-file-name name version)))) (file-name (git-file-name name version))))
(build-system gnu-build-system) (build-system gnu-build-system)
(arguments (arguments

View File

@ -27,6 +27,7 @@
(define-module (gnu packages kde) (define-module (gnu packages kde)
#:use-module (guix build-system cmake) #:use-module (guix build-system cmake)
#:use-module (guix build-system qt) #:use-module (guix build-system qt)
#:use-module (guix deprecation)
#:use-module (guix download) #:use-module (guix download)
#:use-module (guix git-download) #:use-module (guix git-download)
#:use-module ((guix licenses) #:prefix license:) #:use-module ((guix licenses) #:prefix license:)
@ -37,6 +38,7 @@
#:use-module (gnu packages apr) #:use-module (gnu packages apr)
#:use-module (gnu packages audio) #:use-module (gnu packages audio)
#:use-module (gnu packages boost) #:use-module (gnu packages boost)
#:use-module (gnu packages code)
#:use-module (gnu packages compression) #:use-module (gnu packages compression)
#:use-module (gnu packages curl) #:use-module (gnu packages curl)
#:use-module (gnu packages documentation) #:use-module (gnu packages documentation)
@ -145,7 +147,7 @@ projects.")
(define-public kdevelop (define-public kdevelop
(package (package
(name "kdevelop") (name "kdevelop")
(version "5.1.2") (version "5.4.5")
(source (source
(origin (origin
(method url-fetch) (method url-fetch)
@ -154,73 +156,79 @@ projects.")
version ".tar.xz")) version ".tar.xz"))
(sha256 (sha256
(base32 (base32
"1iqaq0ilijjigqb34v5wq9in6bnjs0p9cmgbygjmy53xhh3yhm5g")))) "08vhbg9ql0402bw3y3xw1kdxhig9sv3ss8g0h4477vy3z17m1h4j"))))
(build-system cmake-build-system) (build-system qt-build-system)
(native-inputs (native-inputs
`(("extra-cmake-modules" ,extra-cmake-modules) `(("extra-cmake-modules" ,extra-cmake-modules)
("pkg-config" ,pkg-config) ("pkg-config" ,pkg-config)
("shared-mime-info" ,shared-mime-info)
("qttools" ,qttools))) ("qttools" ,qttools)))
(inputs (inputs
`(("kdevplatform" ,kdevplatform) `(("boost" ,boost)
("kdevelop-pg-qt" ,kdevelop-pg-qt) ("clang" ,clang)
("qtbase" ,qtbase) ("grantlee" ,grantlee)
("qtdeclarative" ,qtdeclarative)
("qtquickcontrols" ,qtquickcontrols)
("qtwebkit" ,qtwebkit)
("karchive" ,karchive) ("karchive" ,karchive)
("kcmutils" ,kcmutils) ("kcmutils" ,kcmutils)
("kconfig" ,kconfig) ("kcrash" ,kcrash)
("kdeclarative" ,kdeclarative) ("kdeclarative" ,kdeclarative)
("kdoctools" ,kdoctools) ("kdoctools" ,kdoctools)
("kguiaddons" ,kguiaddons) ("kguiaddons" ,kguiaddons)
("ki18n" ,ki18n) ("ki18n" ,ki18n)
("kio" ,kio)
("kiconthemes" ,kiconthemes) ("kiconthemes" ,kiconthemes)
("kio" ,kio) ;; not checked as requirement
("kitemmodels" ,kitemmodels) ("kitemmodels" ,kitemmodels)
("kitemviews" ,kitemviews) ("kitemviews" ,kitemviews)
("kjobwidgets" ,kjobwidgets) ("kjobwidgets" ,kjobwidgets)
("knotifyconfig" ,knotifyconfig)
("knotifications" ,knotifications) ("knotifications" ,knotifications)
("knotifyconfig" ,knotifyconfig)
("kparts" ,kparts) ("kparts" ,kparts)
("kcrash" ,kcrash) ("kservice" ,kservice)
("knewstuff" ,knewstuff)
("krunner" ,krunner)
("kxmlgui" ,kxmlgui)
("libksysguard" ,libksysguard)
("threadweaver" ,threadweaver)
("ktexteditor" ,ktexteditor) ("ktexteditor" ,ktexteditor)
("kwindowsystem" ,kwindowsystem) ("kwindowsystem" ,kwindowsystem)
("kxmlgui" ,kxmlgui)
("libkomparediff2" ,libkomparediff2)
("oxygen-icons" ,oxygen-icons)
("qtbase" ,qtbase)
("qtdeclarative" ,qtdeclarative)
("qtquickcontrols" ,qtquickcontrols) ;; not checked as requirement
("qtquickcontrols2" ,qtquickcontrols2) ;; not checked as requirement
("qtwebkit" ,qtwebkit)
("threadweaver" ,threadweaver)
;; recommendes
("astyle" ,astyle)
("kdevelop-pg-qt" ,kdevelop-pg-qt)
("libksysguard" ,libksysguard)
;; optional
("apr" ,apr) ; required for subversion support
("apr-util" ,apr-util) ; required for subversion support
("attica" ,attica)
("kconfigwidgets" ,kconfigwidgets)
("knewstuff" ,knewstuff)
("krunner" ,krunner)
;; TODO: OktetaGui, OktetaKastenControllers
("plasma" ,plasma-framework) ("plasma" ,plasma-framework)
("grantlee" ,grantlee) ;; TODO: purpose
("libepoxy" ,libepoxy) ("sonnet" ,sonnet)
("clang" ,clang) ("subversion" ,subversion)))
("shared-mime-info" ,shared-mime-info)))
;; run-time packages - TODO
;; ClazyStandalone
;; Cppcheck
;; heaptrack
;; heaptrack_gui
;; meson
(arguments (arguments
`(#:phases `(#:tests? #f ;; there are some issues with the test suite
(modify-phases %standard-phases #:phases
(delete 'check) ;; there are some issues with the test suite (modify-phases (@ (guix build qt-build-system) %standard-phases)
(add-after 'install 'wrap-executable (add-before 'configure 'add-include-path
(lambda* (#:key inputs outputs #:allow-other-keys) (lambda* (#:key inputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out")) (substitute* "cmake/modules/FindClang.cmake"
(kdevplatform (assoc-ref inputs "kdevplatform")) (("^\\s*PATHS \"\\$\\{CLANG_LIBRARY_DIRS\\}\"" line)
(kio (assoc-ref inputs "kio")) (string-append line " " (assoc-ref inputs "clang") "/lib")))
(kcmutils (assoc-ref inputs "kcmutils")) #t)))))
(qtquickcontrols (assoc-ref inputs "qtquickcontrols"))
(qtbase (assoc-ref inputs "qtbase"))
(qtdeclarative (assoc-ref inputs "qtdeclarative"))
(qml "/qml"))
(wrap-program (string-append out "/bin/kdevelop")
`("XDG_DATA_DIRS" ":" prefix
,(map (lambda (s) (string-append s "/share"))
(list out kdevplatform kcmutils)))
`("QT_QPA_PLATFORM_PLUGIN_PATH" ":" =
(,(string-append qtbase "/plugins/platforms")))
`("QT_PLUGIN_PATH" ":" prefix
,(map (lambda (s) (string-append s "/lib/plugins"))
(list out kdevplatform kio)))
`("QML2_IMPORT_PATH" ":" prefix
(,(string-append qtquickcontrols qml)
,(string-append qtdeclarative qml))))))))))
(home-page "https://kdevelop.org") (home-page "https://kdevelop.org")
(synopsis "IDE for C, C++, Python, Javascript and PHP") (synopsis "IDE for C, C++, Python, Javascript and PHP")
(description "The KDevelop IDE provides semantic syntax highlighting, as (description "The KDevelop IDE provides semantic syntax highlighting, as
@ -233,7 +241,7 @@ software (Git, Subversion, Mercurial, CVS and Bazaar).")
(define-public kdevelop-pg-qt (define-public kdevelop-pg-qt
(package (package
(name "kdevelop-pg-qt") (name "kdevelop-pg-qt")
(version "2.0.0") (version "2.2.0")
(source (source
(origin (origin
(method url-fetch) (method url-fetch)
@ -241,7 +249,7 @@ software (Git, Subversion, Mercurial, CVS and Bazaar).")
version ".tar.gz")) version ".tar.gz"))
(file-name (string-append name "-" version ".tar.gz")) (file-name (string-append name "-" version ".tar.gz"))
(sha256 (sha256
(base32 "1av8plqz7hyhrd07avnmn6ryslqlarmxn0pw7swzvb6ddiqp59j4")))) (base32 "15ja19gg6x7gww4ch12hy585x55ghbkpsiyr8fqiyjk0j6v07hh5"))))
(native-inputs (native-inputs
`(("extra-cmake-modules" ,extra-cmake-modules))) `(("extra-cmake-modules" ,extra-cmake-modules)))
(inputs (inputs
@ -253,77 +261,8 @@ software (Git, Subversion, Mercurial, CVS and Bazaar).")
for some KDevelop language plugins (Ruby, PHP, CSS...).") for some KDevelop language plugins (Ruby, PHP, CSS...).")
(license license:lgpl2.0+))) (license license:lgpl2.0+)))
(define-public kdevplatform ;; kdevplatform was merged into kdevelop as of 5.2.x
(package (define-deprecated kdevplatform kdevelop kdevelop)
(name "kdevplatform")
(version "5.1.2")
(source (origin
(method url-fetch)
(uri (string-append "mirror://kde/stable/kdevelop"
"/" version "/src/kdevplatform-"
version ".tar.xz"))
(sha256
(base32
"0jk6g1kiqpyjy8pca0236b9944gxqnymqv8ny6m8nrraannxs8p6"))))
(build-system cmake-build-system)
(native-inputs
`(("extra-cmake-modules" ,extra-cmake-modules)
("pkg-config" ,pkg-config)))
(inputs
`(("apr" ,apr)
("apr-util" ,apr-util)
("boost" ,boost)
("karchive" ,karchive)
("kconfigwidgets" ,kconfigwidgets)
("kcmutils" ,kcmutils)
("kiconthemes" ,kiconthemes)
("kdeclarative" ,kdeclarative)
("kdoctools" ,kdoctools)
("kguiaddons" ,kguiaddons)
("kinit" ,kinit)
("kitemmodels" ,kitemmodels)
("knewstuff" ,knewstuff)
("knotifications" ,knotifications)
("knotifyconfig" ,knotifyconfig)
("kwindowsystem" ,kwindowsystem)
("kio" ,kio)
("ki18n" ,ki18n)
("kparts" ,kparts)
("kservice" ,kservice)
("grantlee" ,grantlee)
("libkomparediff2" ,libkomparediff2)
("sonnet" ,sonnet)
("threadweaver" ,threadweaver)
("ktexteditor" ,ktexteditor)
("qtbase" ,qtbase)
("qtdeclarative" ,qtdeclarative)
("qtscript" ,qtscript)
("qtwebkit" ,qtwebkit)
("qtx11extras" ,qtx11extras)
("plasma" ,plasma-framework)
("subversion" ,subversion)
("zlib" ,zlib)))
(arguments
`(#:phases
(modify-phases %standard-phases
(delete 'check)
(add-after 'install 'check
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(setenv "CTEST_OUTPUT_ON_FAILURE" "1")
(setenv "QT_PLUGIN_PATH"
(string-append out "/lib/plugins:"
(getenv "QT_PLUGIN_PATH")))
(setenv "XDG_DATA_DIRS"
(string-append out "/share:"
(getenv "XDG_DATA_DIRS")))
(invoke "ctest" "-R" ; almost all tests require a display
"filteringstrategy|kdevvarlengtharray|kdevhash")))))))
(home-page "https://github.com/KDE/kdevplatform")
(synopsis "Framework to build integrated development environments (IDEs)")
(description "KDevPlatform is the basis of KDevelop and contains some
plugins, as well as code to create plugins, or complete applications.")
(license license:gpl3+)))
(define-public krita (define-public krita
(package (package

View File

@ -35,6 +35,7 @@
;;; Copyright © 2019 Alex Griffin <a@ajgrf.com> ;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
;;; Copyright © 2019 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl> ;;; Copyright © 2019 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
;;; Copyright © 2019 Daniel Schaefer <git@danielschaefer.me> ;;; Copyright © 2019 Daniel Schaefer <git@danielschaefer.me>
;;; Copyright © 2019 Diego N. Barbato <dnbarbato@posteo.de>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
;;; ;;;
@ -2522,12 +2523,6 @@ communication over HTTP.")
(home-page "https://github.com/Corvusoft/restbed") (home-page "https://github.com/Corvusoft/restbed")
(license license:agpl3+)))) (license license:agpl3+))))
(define fmt-restinio
(package
(inherit fmt)
(arguments
'(#:configure-flags '("-DCMAKE_CXX_FLAGS=-fPIC")))))
(define-public restinio (define-public restinio
(package (package
(name "restinio") (name "restinio")
@ -2552,7 +2547,7 @@ communication over HTTP.")
("sobjectizer" ,sobjectizer))) ("sobjectizer" ,sobjectizer)))
(propagated-inputs (propagated-inputs
`(("asio", asio) `(("asio", asio)
("fmt" ,fmt-restinio) ("fmt" ,fmt)
("http-parser", http-parser))) ("http-parser", http-parser)))
(arguments (arguments
`(#:configure-flags '("-DRESTINIO_INSTALL=on") `(#:configure-flags '("-DRESTINIO_INSTALL=on")
@ -2591,7 +2586,7 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
("readline" ,readline) ("readline" ,readline)
("jsoncpp" ,jsoncpp) ("jsoncpp" ,jsoncpp)
("openssl" ,openssl) ("openssl" ,openssl)
("fmt" ,fmt-restinio))) ("fmt" ,fmt)))
(propagated-inputs (propagated-inputs
`(("argon2" ,argon2) ; TODO: Needed for the pkg-config .pc file to work? `(("argon2" ,argon2) ; TODO: Needed for the pkg-config .pc file to work?
("msgpack" ,msgpack))) ;included in several installed headers ("msgpack" ,msgpack))) ;included in several installed headers
@ -2822,3 +2817,33 @@ to be a teaching tool and presents the subnetting results as
easy-to-understand binary values.") easy-to-understand binary values.")
(home-page "http://jodies.de/ipcalc") (home-page "http://jodies.de/ipcalc")
(license license:gpl2+))) (license license:gpl2+)))
(define-public vde2
(package
(name "vde2")
(version "2.3.2")
(source
(origin
(method url-fetch)
(uri "mirror://sourceforge/vde/vde2/2.3.2/vde2-2.3.2.tar.gz")
(sha256
(base32 "14xga0ib6p1wrv3hkl4sa89yzjxv7f1vfqaxsch87j6scdm59pr2"))))
(build-system gnu-build-system)
(arguments
`(#:parallel-build? #f)) ; Build fails if #t.
(inputs
`(("python" ,python)
("libpcap" ,libpcap)
("openssl" ,openssl-1.0))) ; Build fails with 1.1.
(home-page "https://github.com/virtualsquare/vde-2")
(synopsis "Virtual Distributed Ethernet")
(description "VDE is a set of programs to provide virtual software-defined
Ethernet network interface controllers across multiple virtual or
physical, local or remote devices. The VDE architecture provides
virtual counterparts to hardware components such as switches and
cables.")
(license (list license:gpl2
license:lgpl2.1 ; libvdeplug
(license:non-copyleft ; slirpvde
"file://COPYING.slirpvde"
"See COPYING.slirpvde in the distribution.")))))

View File

@ -183,3 +183,11 @@ applications. Applications built with NSS can support SSL v2 and v3, TLS,
PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 certificates, and other PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 certificates, and other
security standards.") security standards.")
(license license:mpl2.0))) (license license:mpl2.0)))
(define nss/fixed
(package
(inherit nss)
(source (origin
(inherit (package-source nss))
(patches (append (search-patches "nss-CVE-2019-11745.patch")
(origin-patches (package-source nss))))))))

View File

@ -0,0 +1,24 @@
Fix CVE-2019-11745 (Out-of-bounds write when passing an output buffer smaller
than the block size to NSC_EncryptUpdate).
Copied from Debian, equivalent to upstream fix:
<https://hg.mozilla.org/projects/nss/rev/1e22a0c93afe9f46545560c86caedef9dab6cfda>.
# HG changeset patch
# User Craig Disselkoen <cdisselk@cs.ucsd.edu>
# Date 1574189697 25200
# Node ID 60bca7c6dc6dc44579b9b3e0fb62ca3b82d92eec
# Parent 64e55c9f658e2a75f0835d00a8a1cdc2f25c74d6
Bug 1586176 - EncryptUpdate should use maxout not block size. r=franziskus
--- a/nss/lib/softoken/pkcs11c.c
+++ b/nss/lib/softoken/pkcs11c.c
@@ -1285,7 +1285,7 @@ NSC_EncryptUpdate(CK_SESSION_HANDLE hSes
}
/* encrypt the current padded data */
rv = (*context->update)(context->cipherInfo, pEncryptedPart,
- &padoutlen, context->blockSize, context->padBuf,
+ &padoutlen, maxout, context->padBuf,
context->blockSize);
if (rv != SECSuccess) {
return sftk_MapCryptError(PORT_GetError());

View File

@ -174,6 +174,8 @@ different programming languages.")
(base32 (base32
"0h148anbaqgch6n69pxsvs1c9wmykgd052wmzgdia7qpz8w6p8dl")))) "0h148anbaqgch6n69pxsvs1c9wmykgd052wmzgdia7qpz8w6p8dl"))))
(build-system cmake-build-system) (build-system cmake-build-system)
(arguments
'(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
(native-inputs (native-inputs
`(("unzip" ,unzip))) `(("unzip" ,unzip)))
(home-page "http://fmtlib.net/") (home-page "http://fmtlib.net/")

View File

@ -11768,19 +11768,41 @@ PNG, JPEG, JPEG2000 and GIF files in pure Python.")
(define-public python-argcomplete (define-public python-argcomplete
(package (package
(name "python-argcomplete") (name "python-argcomplete")
(version "1.7.0") (version "1.10.3")
(source (source
(origin (origin
(method url-fetch) (method url-fetch)
(uri (pypi-uri "argcomplete" version)) (uri (pypi-uri "argcomplete" version))
(sha256 (sha256
(base32 (base32
"11bwiw6j0nilgz81xnw6f1npyga3prp8asjqrm87cdr3ria5l03x")))) "02jkc44drb0yjz6x28lvg6rj607n8r2irdpdvyylm8xnycn54zx3"))))
(build-system python-build-system) (build-system python-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'embed-tool-references
(lambda _
(substitute* "argcomplete/bash_completion.d/python-argcomplete.sh"
((" grep")
(string-append " " (which "grep")))
((" egrep")
(string-append " " (which "egrep")))
(("elif which")
(string-append "elif " (which "which")))
(("\\$\\(which")
(string-append "$(" (which "which"))))
#t)))))
(inputs
`(("grep" ,grep)
("which" ,which)))
(native-inputs (native-inputs
`(("python-pexpect" ,python-pexpect) `(("python-coverage" ,python-coverage)
("python-flake8" ,python-flake8)
("python-pexpect" ,python-pexpect)
("python-wheel" ,python-wheel)
("tcsh" ,tcsh) ("tcsh" ,tcsh)
("bash-full" ,bash))) ;full Bash for 'test_file_completion' ("fish" ,fish)
("bash-full" ,bash))) ;full Bash for 'test_file_completion'
(home-page "https://github.com/kislyuk/argcomplete") (home-page "https://github.com/kislyuk/argcomplete")
(synopsis "Shell tab completion for Python argparse") (synopsis "Shell tab completion for Python argparse")
(description "argcomplete provides extensible command line tab completion (description "argcomplete provides extensible command line tab completion

View File

@ -71,7 +71,7 @@
(define-public libssh (define-public libssh
(package (package
(name "libssh") (name "libssh")
(version "0.9.2") (version "0.9.3")
(source (origin (source (origin
(method git-fetch) (method git-fetch)
(uri (git-reference (uri (git-reference
@ -79,23 +79,13 @@
(commit (string-append "libssh-" version)))) (commit (string-append "libssh-" version))))
(sha256 (sha256
(base32 (base32
"14g4rvp91skn2hlsjyhkv58vhng65xrf34cfqffixa4al869hzgj")) "175i3xybg69d5lb078334v6dd3njm743kww8f67ix9w33969rmzf"))
(file-name (git-file-name name version)))) (file-name (git-file-name name version))))
(build-system cmake-build-system) (build-system cmake-build-system)
(outputs '("out" "debug")) (outputs '("out" "debug"))
(arguments (arguments
'(#:configure-flags '("-DWITH_GCRYPT=ON") '(#:configure-flags '("-DWITH_GCRYPT=ON")
#:phases (modify-phases %standard-phases
(add-before 'configure 'avoid-werror
(lambda _
;; Avoid '-Werror'. Presumably this works fine with
;; gcc@8 on x86_64 but leads to errors with our older
;; compiler.
(substitute* "CompilerChecks.cmake"
(("-Werror=") "-W"))
#t)))
;; TODO: Add 'CMockery' and '-DWITH_TESTING=ON' for the test suite. ;; TODO: Add 'CMockery' and '-DWITH_TESTING=ON' for the test suite.
#:tests? #f)) #:tests? #f))
(inputs `(("zlib" ,zlib) (inputs `(("zlib" ,zlib)

View File

@ -531,7 +531,7 @@ everything from small to very large projects with speed and efficiency.")
(define-public libgit2 (define-public libgit2
(package (package
(name "libgit2") (name "libgit2")
(version "0.28.3") (version "0.28.4")
(source (origin (source (origin
(method git-fetch) (method git-fetch)
(uri (git-reference (uri (git-reference
@ -540,7 +540,7 @@ everything from small to very large projects with speed and efficiency.")
(file-name (git-file-name name version)) (file-name (git-file-name name version))
(sha256 (sha256
(base32 (base32
"07068flm9xi25wmcs65nyfg6a7ikgfv96i2nhgyj5gzs9gljqiz2")) "171b25aym4q88bidc4c76y4l6jmdwifm3q9zjqsll0wjhlkycfy1"))
(patches (search-patches "libgit2-avoid-python.patch" (patches (search-patches "libgit2-avoid-python.patch"
"libgit2-mtime-0.patch")) "libgit2-mtime-0.patch"))

View File

@ -1454,6 +1454,7 @@ projects while introducing many more.")
(build-system gnu-build-system) (build-system gnu-build-system)
(arguments (arguments
`(#:configure-flags (list "--enable-shared" `(#:configure-flags (list "--enable-shared"
"--disable-static"
"--as=yasm" "--as=yasm"
;; Limit size to avoid CVE-2015-1258 ;; Limit size to avoid CVE-2015-1258
"--size-limit=16384x16384" "--size-limit=16384x16384"

View File

@ -220,7 +220,7 @@ exec smbd $@")))
("spice" ,spice) ("spice" ,spice)
("usbredir" ,usbredir) ("usbredir" ,usbredir)
("util-linux" ,util-linux) ("util-linux" ,util-linux)
;; ("vde2" ,vde2) ("vde2" ,vde2)
("virglrenderer" ,virglrenderer) ("virglrenderer" ,virglrenderer)
("zlib" ,zlib))) ("zlib" ,zlib)))
(native-inputs `(("gettext" ,gettext-minimal) (native-inputs `(("gettext" ,gettext-minimal)
@ -268,7 +268,7 @@ server and embedded PowerPC, and S390 guests.")
'("gettext"))) '("gettext")))
(inputs (fold alist-delete (package-inputs qemu) (inputs (fold alist-delete (package-inputs qemu)
'("libusb" "mesa" "sdl2" "spice" "virglrenderer" "gtk+" '("libusb" "mesa" "sdl2" "spice" "virglrenderer" "gtk+"
"usbredir" "libdrm" "libepoxy" "pulseaudio"))))) "usbredir" "libdrm" "libepoxy" "pulseaudio" "vde2")))))
;; The GRUB test suite fails with later versions of Qemu, so we ;; The GRUB test suite fails with later versions of Qemu, so we
;; keep it at 2.10 for now. See ;; keep it at 2.10 for now. See

View File

@ -10,6 +10,7 @@
;;; Copyright © 2018 Meiyo Peng <meiyo.peng@gmail.com> ;;; Copyright © 2018 Meiyo Peng <meiyo.peng@gmail.com>
;;; Copyright © 2019 Leo Famulari <leo@famulari.name> ;;; Copyright © 2019 Leo Famulari <leo@famulari.name>
;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com> ;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com>
;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
;;; ;;;
@ -42,6 +43,7 @@
#:use-module (gnu packages compression) #:use-module (gnu packages compression)
#:use-module (gnu packages gettext) #:use-module (gnu packages gettext)
#:use-module (gnu packages gnupg) #:use-module (gnu packages gnupg)
#:use-module (gnu packages guile)
#:use-module (gnu packages libevent) #:use-module (gnu packages libevent)
#:use-module (gnu packages linux) #:use-module (gnu packages linux)
#:use-module (gnu packages nss) #:use-module (gnu packages nss)
@ -134,7 +136,8 @@ Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
(base32 (base32
"1g41yarz2bl0f73kbjqnywr485ghanbp7nmspklfb0n07yp0z6ak")))) "1g41yarz2bl0f73kbjqnywr485ghanbp7nmspklfb0n07yp0z6ak"))))
(build-system gnu-build-system) (build-system gnu-build-system)
(inputs `(("coreutils" ,coreutils) (inputs `(("guile" ,guile-2.2) ; for the wrapper scripts
("coreutils" ,coreutils)
("grep" ,grep) ("grep" ,grep)
("iproute2" ,iproute) ; for ip ("iproute2" ,iproute) ; for ip
("net-tools" ,net-tools) ; for ifconfig, route ("net-tools" ,net-tools) ; for ifconfig, route
@ -177,7 +180,7 @@ Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
(let ((out (assoc-ref outputs "out"))) (let ((out (assoc-ref outputs "out")))
(for-each (for-each
(lambda (script) (lambda (script)
(wrap-program script (wrap-script (string-append out "/etc/vpnc/" script)
`("PATH" ":" prefix `("PATH" ":" prefix
,(map (lambda (name) ,(map (lambda (name)
(let ((input (assoc-ref inputs name))) (let ((input (assoc-ref inputs name)))
@ -189,8 +192,9 @@ Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
"net-tools" "net-tools"
"sed" "sed"
"which"))))) "which")))))
(find-files (string-append out "/etc/vpnc/vpnc-script") (list "vpnc-script-ptrtd"
"^vpnc-script")) "vpnc-script-sshd"
"vpnc-script"))
#t)))) #t))))
#:tests? #f)) ; no tests #:tests? #f)) ; no tests
(home-page "http://git.infradead.org/users/dwmw2/vpnc-scripts.git") (home-page "http://git.infradead.org/users/dwmw2/vpnc-scripts.git")

View File

@ -143,6 +143,8 @@ compressed video format.")
(base32 (base32
"150047wnllz4r94whb9r73l5qf0z5z3rlhy98bawfbblmkq8mbpa")))) "150047wnllz4r94whb9r73l5qf0z5z3rlhy98bawfbblmkq8mbpa"))))
(build-system gnu-build-system) (build-system gnu-build-system)
(arguments
'(#:configure-flags '("--disable-static")))
(native-inputs (native-inputs
`(("pkg-config" ,pkg-config))) `(("pkg-config" ,pkg-config)))
(inputs (inputs

View File

@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2015, 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
@ -505,7 +505,7 @@ s-expression corresponding to that package, or #f on failure."
((bioconductor) ((bioconductor)
;; Retry import from CRAN ;; Retry import from CRAN
(cran->guix-package package-name 'cran)) (cran->guix-package package-name 'cran))
(else #f))))))) (else (values #f '()))))))))
(define* (cran-recursive-import package-name #:optional (repo 'cran)) (define* (cran-recursive-import package-name #:optional (repo 'cran))
(recursive-import package-name repo (recursive-import package-name repo

View File

@ -178,21 +178,20 @@ and LICENSE."
(close-port port) (close-port port)
pkg)) pkg))
(define %dual-license-rx (define (string->license string)
;; Dual licensing is represented by a string such as "MIT OR Apache-2.0". (filter-map (lambda (license)
;; This regexp matches that. (and (not (string-null? license))
(make-regexp "^(.*) OR (.*)$")) (not (any (lambda (elem) (string=? elem license))
'("AND" "OR" "WITH")))
(or (spdx-string->license license)
'unknown-license!)))
(string-split string (string->char-set " /"))))
(define* (crate->guix-package crate-name #:optional version) (define* (crate->guix-package crate-name #:optional version)
"Fetch the metadata for CRATE-NAME from crates.io, and return the "Fetch the metadata for CRATE-NAME from crates.io, and return the
`package' s-expression corresponding to that package, or #f on failure. `package' s-expression corresponding to that package, or #f on failure.
When VERSION is specified, attempt to fetch that version; otherwise fetch the When VERSION is specified, attempt to fetch that version; otherwise fetch the
latest version of CRATE-NAME." latest version of CRATE-NAME."
(define (string->license string)
(match (regexp-exec %dual-license-rx string)
(#f (list (spdx-string->license string)))
(m (list (spdx-string->license (match:substring m 1))
(spdx-string->license (match:substring m 2))))))
(define (normal-dependency? dependency) (define (normal-dependency? dependency)
(eq? (crate-dependency-kind dependency) 'normal)) (eq? (crate-dependency-kind dependency) 'normal))

View File

@ -34,15 +34,16 @@
#:use-module (guix gexp) #:use-module (guix gexp)
#:use-module (guix store) #:use-module (guix store)
#:use-module (guix download) #:use-module (guix download)
#:use-module (guix sets)
#:use-module (gnu packages) #:use-module (gnu packages)
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:use-module (ice-9 rdelim) #:use-module (ice-9 rdelim)
#:use-module (ice-9 receive) #:use-module (ice-9 receive)
#:use-module (ice-9 regex) #:use-module (ice-9 regex)
#:use-module (srfi srfi-1) #:use-module (srfi srfi-1)
#:use-module (srfi srfi-9)
#:use-module (srfi srfi-11) #:use-module (srfi srfi-11)
#:use-module (srfi srfi-26) #:use-module (srfi srfi-26)
#:use-module (srfi srfi-41)
#:export (factorize-uri #:export (factorize-uri
flatten flatten
@ -377,40 +378,53 @@ separated by PRED."
(chr (char-downcase chr))) (chr (char-downcase chr)))
name))) name)))
(define (topological-sort nodes
node-dependencies
node-name)
"Perform a breadth-first traversal of the graph rooted at NODES, a list of
nodes, and return the list of nodes sorted in topological order. Call
NODE-DEPENDENCIES to obtain the dependencies of a node, and NODE-NAME to
obtain a node's uniquely identifying \"key\"."
(let loop ((nodes nodes)
(result '())
(visited (set)))
(match nodes
(()
result)
((head . tail)
(if (set-contains? visited (node-name head))
(loop tail result visited)
(let ((dependencies (node-dependencies head)))
(loop (append dependencies tail)
(cons head result)
(set-insert (node-name head) visited))))))))
(define* (recursive-import package-name repo (define* (recursive-import package-name repo
#:key repo->guix-package guix-name #:key repo->guix-package guix-name
#:allow-other-keys) #:allow-other-keys)
"Generate a stream of package expressions for PACKAGE-NAME and all its "Return a stream of package expressions for PACKAGE-NAME and all its
dependencies." dependencies, sorted in topological order. For each package,
(define (exists? dependency) call (REPO->GUIX-PACKAGE NAME REPO), which should return a package expression
(not (null? (find-packages-by-name (guix-name dependency))))) and a list of dependencies; call (GUIX-NAME NAME) to obtain the Guix package
(define initial-state (list #f (list package-name) (list))) name corresponding to the upstream name."
(define (step state) (define-record-type <node>
(match state (make-node name package dependencies)
((prev (next . rest) done) node?
(define (handle? dep) (name node-name)
(and (package node-package)
(not (equal? dep next)) (dependencies node-dependencies))
(not (member dep done))
(not (exists? dep))))
(receive (package . dependencies) (repo->guix-package next repo)
(list
(if package package '()) ;; default #f on failure would interrupt
(if package
(lset-union equal? rest (filter handle? (car dependencies)))
rest)
(cons next done))))
((prev '() done)
(list #f '() done))))
;; Generate a lazy stream of package expressions for all unknown (define (exists? name)
;; dependencies in the graph. (not (null? (find-packages-by-name (guix-name name)))))
(stream-unfold
;; map: produce a stream element (define (lookup-node name)
(match-lambda ((latest queue done) latest)) (receive (package dependencies) (repo->guix-package name repo)
;; predicate (make-node name package dependencies)))
(match-lambda ((latest queue done) latest))
;; generator: update the queue (map node-package
step (topological-sort (list (lookup-node package-name))
;; initial state (lambda (node)
(step initial-state))) (map lookup-node
(remove exists?
(node-dependencies node))))
node-name)))

View File

@ -27,7 +27,6 @@
#:use-module (srfi srfi-1) #:use-module (srfi srfi-1)
#:use-module (srfi srfi-11) #:use-module (srfi srfi-11)
#:use-module (srfi srfi-37) #:use-module (srfi srfi-37)
#:use-module (srfi srfi-41)
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:use-module (ice-9 format) #:use-module (ice-9 format)
#:export (guix-import-cran)) #:export (guix-import-cran))
@ -98,10 +97,8 @@ Import and convert the CRAN package for PACKAGE-NAME.\n"))
(if (assoc-ref opts 'recursive) (if (assoc-ref opts 'recursive)
;; Recursive import ;; Recursive import
(map package->definition (map package->definition
(reverse (cran-recursive-import package-name
(stream->list (or (assoc-ref opts 'repo) 'cran)))
(cran-recursive-import package-name
(or (assoc-ref opts 'repo) 'cran)))))
;; Single import ;; Single import
(let ((sexp (cran->guix-package package-name (let ((sexp (cran->guix-package package-name
(or (assoc-ref opts 'repo) 'cran)))) (or (assoc-ref opts 'repo) 'cran))))

View File

@ -28,7 +28,6 @@
#:use-module (srfi srfi-1) #:use-module (srfi srfi-1)
#:use-module (srfi srfi-11) #:use-module (srfi srfi-11)
#:use-module (srfi srfi-37) #:use-module (srfi srfi-37)
#:use-module (srfi srfi-41)
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:use-module (ice-9 format) #:use-module (ice-9 format)
#:export (guix-import-crate)) #:export (guix-import-crate))
@ -101,9 +100,7 @@ Import and convert the crate.io package for PACKAGE-NAME.\n"))
`(define-public ,(string->symbol name) `(define-public ,(string->symbol name)
,pkg)) ,pkg))
(_ #f)) (_ #f))
(reverse (crate-recursive-import name))
(stream->list
(crate-recursive-import name))))
(let ((sexp (crate->guix-package name version))) (let ((sexp (crate->guix-package name version)))
(unless sexp (unless sexp
(leave (G_ "failed to download meta-data for package '~a'~%") (leave (G_ "failed to download meta-data for package '~a'~%")

View File

@ -27,7 +27,6 @@
#:use-module (srfi srfi-1) #:use-module (srfi srfi-1)
#:use-module (srfi srfi-11) #:use-module (srfi srfi-11)
#:use-module (srfi srfi-37) #:use-module (srfi srfi-37)
#:use-module (srfi srfi-41)
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:use-module (ice-9 format) #:use-module (ice-9 format)
#:export (guix-import-elpa)) #:export (guix-import-elpa))
@ -101,10 +100,8 @@ Import the latest package named PACKAGE-NAME from an ELPA repository.\n"))
`(define-public ,(string->symbol name) `(define-public ,(string->symbol name)
,pkg)) ,pkg))
(_ #f)) (_ #f))
(reverse (elpa-recursive-import package-name
(stream->list (or (assoc-ref opts 'repo) 'gnu)))
(elpa-recursive-import package-name
(or (assoc-ref opts 'repo) 'gnu)))))
(let ((sexp (elpa->guix-package package-name (assoc-ref opts 'repo)))) (let ((sexp (elpa->guix-package package-name (assoc-ref opts 'repo))))
(unless sexp (unless sexp
(leave (G_ "failed to download package '~a'~%") package-name)) (leave (G_ "failed to download package '~a'~%") package-name))

View File

@ -26,7 +26,6 @@
#:use-module (srfi srfi-1) #:use-module (srfi srfi-1)
#:use-module (srfi srfi-11) #:use-module (srfi srfi-11)
#:use-module (srfi srfi-37) #:use-module (srfi srfi-37)
#:use-module (srfi srfi-41)
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:use-module (ice-9 format) #:use-module (ice-9 format)
#:export (guix-import-gem)) #:export (guix-import-gem))
@ -95,9 +94,7 @@ Import and convert the RubyGems package for PACKAGE-NAME.\n"))
`(define-public ,(string->symbol name) `(define-public ,(string->symbol name)
,pkg)) ,pkg))
(_ #f)) (_ #f))
(reverse (gem-recursive-import package-name 'rubygems))
(stream->list
(gem-recursive-import package-name 'rubygems))))
(let ((sexp (gem->guix-package package-name))) (let ((sexp (gem->guix-package package-name)))
(unless sexp (unless sexp
(leave (G_ "failed to download meta-data for package '~a'~%") (leave (G_ "failed to download meta-data for package '~a'~%")

View File

@ -27,7 +27,6 @@
#:use-module (srfi srfi-1) #:use-module (srfi srfi-1)
#:use-module (srfi srfi-11) #:use-module (srfi srfi-11)
#:use-module (srfi srfi-37) #:use-module (srfi srfi-37)
#:use-module (srfi srfi-41)
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:use-module (ice-9 format) #:use-module (ice-9 format)
#:export (guix-import-hackage)) #:export (guix-import-hackage))
@ -130,9 +129,7 @@ version.\n"))
`(define-public ,(string->symbol name) `(define-public ,(string->symbol name)
,pkg)) ,pkg))
(_ #f)) (_ #f))
(reverse (apply hackage-recursive-import arguments))
(stream->list
(apply hackage-recursive-import arguments))))
;; Single import ;; Single import
(apply hackage->guix-package arguments)))) (apply hackage->guix-package arguments))))
(unless sexp (error-fn)) (unless sexp (error-fn))

View File

@ -25,7 +25,6 @@
#:use-module (srfi srfi-1) #:use-module (srfi srfi-1)
#:use-module (srfi srfi-11) #:use-module (srfi srfi-11)
#:use-module (srfi srfi-37) #:use-module (srfi srfi-37)
#:use-module (srfi srfi-41)
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:use-module (ice-9 format) #:use-module (ice-9 format)
#:export (guix-import-opam)) #:export (guix-import-opam))
@ -94,9 +93,7 @@ Import and convert the opam package for PACKAGE-NAME.\n"))
`(define-public ,(string->symbol name) `(define-public ,(string->symbol name)
,pkg)) ,pkg))
(_ #f)) (_ #f))
(reverse (opam-recursive-import package-name))
(stream->list
(opam-recursive-import package-name))))
;; Single import ;; Single import
(let ((sexp (opam->guix-package package-name))) (let ((sexp (opam->guix-package package-name)))
(unless sexp (unless sexp

View File

@ -26,7 +26,6 @@
#:use-module (srfi srfi-1) #:use-module (srfi srfi-1)
#:use-module (srfi srfi-11) #:use-module (srfi srfi-11)
#:use-module (srfi srfi-37) #:use-module (srfi srfi-37)
#:use-module (srfi srfi-41)
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:use-module (ice-9 format) #:use-module (ice-9 format)
#:export (guix-import-pypi)) #:export (guix-import-pypi))
@ -95,9 +94,7 @@ Import and convert the PyPI package for PACKAGE-NAME.\n"))
`(define-public ,(string->symbol name) `(define-public ,(string->symbol name)
,pkg)) ,pkg))
(_ #f)) (_ #f))
(reverse (pypi-recursive-import package-name))
(stream->list
(pypi-recursive-import package-name))))
;; Single import ;; Single import
(let ((sexp (pypi->guix-package package-name))) (let ((sexp (pypi->guix-package package-name)))
(unless sexp (unless sexp

View File

@ -27,7 +27,6 @@
#:use-module (srfi srfi-1) #:use-module (srfi srfi-1)
#:use-module (srfi srfi-11) #:use-module (srfi srfi-11)
#:use-module (srfi srfi-37) #:use-module (srfi srfi-37)
#:use-module (srfi srfi-41)
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:use-module (ice-9 format) #:use-module (ice-9 format)
#:export (guix-import-stackage)) #:export (guix-import-stackage))
@ -110,9 +109,7 @@ Import and convert the LTS Stackage package for PACKAGE-NAME.\n"))
`(define-public ,(string->symbol name) `(define-public ,(string->symbol name)
,pkg)) ,pkg))
(_ #f)) (_ #f))
(reverse (apply stackage-recursive-import arguments))
(stream->list
(apply stackage-recursive-import arguments))))
;; Single import ;; Single import
(apply stackage->guix-package arguments)))) (apply stackage->guix-package arguments))))
(unless sexp (error-fn)) (unless sexp (error-fn))

View File

@ -28,7 +28,7 @@
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:use-module (srfi srfi-64)) #:use-module (srfi srfi-64))
(define test-crate (define test-foo-crate
"{ "{
\"crate\": { \"crate\": {
\"max_version\": \"1.0.0\", \"max_version\": \"1.0.0\",
@ -50,7 +50,7 @@
} }
}") }")
(define test-dependencies (define test-foo-dependencies
"{ "{
\"dependencies\": [ \"dependencies\": [
{ {
@ -60,9 +60,182 @@
] ]
}") }")
(define test-root-crate
"{
\"crate\": {
\"max_version\": \"1.0.0\",
\"name\": \"root\",
\"description\": \"summary\",
\"homepage\": \"http://example.com\",
\"repository\": \"http://example.com\",
\"keywords\": [\"dummy\" \"test\"],
\"categories\": [\"test\"]
\"actual_versions\": [
{ \"id\": \"foo\",
\"num\": \"1.0.0\",
\"license\": \"MIT OR Apache-2.0\",
\"links\": {
\"dependencies\": \"/api/v1/crates/root/1.0.0/dependencies\"
}
}
]
}
}")
(define test-root-dependencies
"{
\"dependencies\": [
{
\"crate_id\": \"intermediate-1\",
\"kind\": \"normal\",
},
{
\"crate_id\": \"intermediate-2\",
\"kind\": \"normal\",
}
{
\"crate_id\": \"leaf-alice\",
\"kind\": \"normal\",
},
{
\"crate_id\": \"leaf-bob\",
\"kind\": \"normal\",
},
]
}")
(define test-intermediate-1-crate
"{
\"crate\": {
\"max_version\": \"1.0.0\",
\"name\": \"intermediate-1\",
\"description\": \"summary\",
\"homepage\": \"http://example.com\",
\"repository\": \"http://example.com\",
\"keywords\": [\"dummy\" \"test\"],
\"categories\": [\"test\"]
\"actual_versions\": [
{ \"id\": \"intermediate-1\",
\"num\": \"1.0.0\",
\"license\": \"MIT OR Apache-2.0\",
\"links\": {
\"dependencies\": \"/api/v1/crates/intermediate-1/1.0.0/dependencies\"
}
}
]
}
}")
(define test-intermediate-1-dependencies
"{
\"dependencies\": [
{
\"crate_id\": \"intermediate-2\",
\"kind\": \"normal\",
},
{
\"crate_id\": \"leaf-alice\",
\"kind\": \"normal\",
},
{
\"crate_id\": \"leaf-bob\",
\"kind\": \"normal\",
}
]
}")
(define test-intermediate-2-crate
"{
\"crate\": {
\"max_version\": \"1.0.0\",
\"name\": \"intermediate-2\",
\"description\": \"summary\",
\"homepage\": \"http://example.com\",
\"repository\": \"http://example.com\",
\"keywords\": [\"dummy\" \"test\"],
\"categories\": [\"test\"]
\"actual_versions\": [
{ \"id\": \"intermediate-2\",
\"num\": \"1.0.0\",
\"license\": \"MIT OR Apache-2.0\",
\"links\": {
\"dependencies\": \"/api/v1/crates/intermediate-2/1.0.0/dependencies\"
}
}
]
}
}")
(define test-intermediate-2-dependencies
"{
\"dependencies\": [
{
\"crate_id\": \"leaf-bob\",
\"kind\": \"normal\",
},
]
}")
(define test-leaf-alice-crate
"{
\"crate\": {
\"max_version\": \"1.0.0\",
\"name\": \"leaf-alice\",
\"description\": \"summary\",
\"homepage\": \"http://example.com\",
\"repository\": \"http://example.com\",
\"keywords\": [\"dummy\" \"test\"],
\"categories\": [\"test\"]
\"actual_versions\": [
{ \"id\": \"leaf-alice\",
\"num\": \"1.0.0\",
\"license\": \"MIT OR Apache-2.0\",
\"links\": {
\"dependencies\": \"/api/v1/crates/leaf-alice/1.0.0/dependencies\"
}
}
]
}
}")
(define test-leaf-alice-dependencies
"{
\"dependencies\": []
}")
(define test-leaf-bob-crate
"{
\"crate\": {
\"max_version\": \"1.0.0\",
\"name\": \"leaf-bob\",
\"description\": \"summary\",
\"homepage\": \"http://example.com\",
\"repository\": \"http://example.com\",
\"keywords\": [\"dummy\" \"test\"],
\"categories\": [\"test\"]
\"actual_versions\": [
{ \"id\": \"leaf-bob\",
\"num\": \"1.0.0\",
\"license\": \"MIT OR Apache-2.0\",
\"links\": {
\"dependencies\": \"/api/v1/crates/leaf-bob/1.0.0/dependencies\"
}
}
]
}
}")
(define test-leaf-bob-dependencies
"{
\"dependencies\": []
}")
(define test-source-hash (define test-source-hash
"") "")
(define string->license
(@@ (guix import crate) string->license))
(test-begin "crate") (test-begin "crate")
(test-equal "guix-package->crate-name" (test-equal "guix-package->crate-name"
@ -79,14 +252,14 @@
(lambda (url . rest) (lambda (url . rest)
(match url (match url
("https://crates.io/api/v1/crates/foo" ("https://crates.io/api/v1/crates/foo"
(open-input-string test-crate)) (open-input-string test-foo-crate))
("https://crates.io/api/v1/crates/foo/1.0.0/download" ("https://crates.io/api/v1/crates/foo/1.0.0/download"
(set! test-source-hash (set! test-source-hash
(bytevector->nix-base32-string (bytevector->nix-base32-string
(sha256 (string->bytevector "empty file\n" "utf-8")))) (sha256 (string->bytevector "empty file\n" "utf-8"))))
(open-input-string "empty file\n")) (open-input-string "empty file\n"))
("https://crates.io/api/v1/crates/foo/1.0.0/dependencies" ("https://crates.io/api/v1/crates/foo/1.0.0/dependencies"
(open-input-string test-dependencies)) (open-input-string test-foo-dependencies))
(_ (error "Unexpected URL: " url))))) (_ (error "Unexpected URL: " url)))))
(match (crate->guix-package "foo") (match (crate->guix-package "foo")
(('package (('package
@ -111,4 +284,180 @@
(x (x
(pk 'fail x #f))))) (pk 'fail x #f)))))
(test-assert "cargo-recursive-import"
;; Replace network resources with sample data.
(mock ((guix http-client) http-fetch
(lambda (url . rest)
(match url
("https://crates.io/api/v1/crates/root"
(open-input-string test-root-crate))
("https://crates.io/api/v1/crates/root/1.0.0/download"
(set! test-source-hash
(bytevector->nix-base32-string
(sha256 (string->bytevector "empty file\n" "utf-8"))))
(open-input-string "empty file\n"))
("https://crates.io/api/v1/crates/root/1.0.0/dependencies"
(open-input-string test-root-dependencies))
("https://crates.io/api/v1/crates/intermediate-1"
(open-input-string test-intermediate-1-crate))
("https://crates.io/api/v1/crates/intermediate-1/1.0.0/download"
(set! test-source-hash
(bytevector->nix-base32-string
(sha256 (string->bytevector "empty file\n" "utf-8"))))
(open-input-string "empty file\n"))
("https://crates.io/api/v1/crates/intermediate-1/1.0.0/dependencies"
(open-input-string test-intermediate-1-dependencies))
("https://crates.io/api/v1/crates/intermediate-2"
(open-input-string test-intermediate-2-crate))
("https://crates.io/api/v1/crates/intermediate-2/1.0.0/download"
(set! test-source-hash
(bytevector->nix-base32-string
(sha256 (string->bytevector "empty file\n" "utf-8"))))
(open-input-string "empty file\n"))
("https://crates.io/api/v1/crates/intermediate-2/1.0.0/dependencies"
(open-input-string test-intermediate-2-dependencies))
("https://crates.io/api/v1/crates/leaf-alice"
(open-input-string test-leaf-alice-crate))
("https://crates.io/api/v1/crates/leaf-alice/1.0.0/download"
(set! test-source-hash
(bytevector->nix-base32-string
(sha256 (string->bytevector "empty file\n" "utf-8"))))
(open-input-string "empty file\n"))
("https://crates.io/api/v1/crates/leaf-alice/1.0.0/dependencies"
(open-input-string test-leaf-alice-dependencies))
("https://crates.io/api/v1/crates/leaf-bob"
(open-input-string test-leaf-bob-crate))
("https://crates.io/api/v1/crates/leaf-bob/1.0.0/download"
(set! test-source-hash
(bytevector->nix-base32-string
(sha256 (string->bytevector "empty file\n" "utf-8"))))
(open-input-string "empty file\n"))
("https://crates.io/api/v1/crates/leaf-bob/1.0.0/dependencies"
(open-input-string test-leaf-bob-dependencies))
(_ (error "Unexpected URL: " url)))))
(match (crate-recursive-import "root")
;; rust-intermediate-2 has no dependency on the rust-leaf-alice package, so this is a valid ordering
((('package
('name "rust-leaf-alice")
('version (? string? ver))
('source
('origin
('method 'url-fetch)
('uri ('crate-uri "leaf-alice" 'version))
('file-name
('string-append 'name "-" 'version ".tar.gz"))
('sha256
('base32
(? string? hash)))))
('build-system 'cargo-build-system)
('home-page "http://example.com")
('synopsis "summary")
('description "summary")
('license ('list 'license:expat 'license:asl2.0)))
('package
('name "rust-leaf-bob")
('version (? string? ver))
('source
('origin
('method 'url-fetch)
('uri ('crate-uri "leaf-bob" 'version))
('file-name
('string-append 'name "-" 'version ".tar.gz"))
('sha256
('base32
(? string? hash)))))
('build-system 'cargo-build-system)
('home-page "http://example.com")
('synopsis "summary")
('description "summary")
('license ('list 'license:expat 'license:asl2.0)))
('package
('name "rust-intermediate-2")
('version (? string? ver))
('source
('origin
('method 'url-fetch)
('uri ('crate-uri "intermediate-2" 'version))
('file-name
('string-append 'name "-" 'version ".tar.gz"))
('sha256
('base32
(? string? hash)))))
('build-system 'cargo-build-system)
('arguments
('quasiquote
('#:cargo-inputs (("rust-leaf-bob" ('unquote rust-leaf-bob))))))
('home-page "http://example.com")
('synopsis "summary")
('description "summary")
('license ('list 'license:expat 'license:asl2.0)))
('package
('name "rust-intermediate-1")
('version (? string? ver))
('source
('origin
('method 'url-fetch)
('uri ('crate-uri "intermediate-1" 'version))
('file-name
('string-append 'name "-" 'version ".tar.gz"))
('sha256
('base32
(? string? hash)))))
('build-system 'cargo-build-system)
('arguments
('quasiquote
('#:cargo-inputs (("rust-intermediate-2" ('unquote rust-intermediate-2))
("rust-leaf-alice" ('unquote rust-leaf-alice))
("rust-leaf-bob" ('unquote rust-leaf-bob))))))
('home-page "http://example.com")
('synopsis "summary")
('description "summary")
('license ('list 'license:expat 'license:asl2.0)))
('package
('name "rust-root")
('version (? string? ver))
('source
('origin
('method 'url-fetch)
('uri ('crate-uri "root" 'version))
('file-name
('string-append 'name "-" 'version ".tar.gz"))
('sha256
('base32
(? string? hash)))))
('build-system 'cargo-build-system)
('arguments
('quasiquote
('#:cargo-inputs (("rust-intermediate-1" ('unquote rust-intermediate-1))
("rust-intermediate-2" ('unquote rust-intermediate-2))
("rust-leaf-alice" ('unquote rust-leaf-alice))
("rust-leaf-bob" ('unquote rust-leaf-bob))))))
('home-page "http://example.com")
('synopsis "summary")
('description "summary")
('license ('list 'license:expat 'license:asl2.0))))
#t)
(x
(pk 'fail x #f)))))
(test-equal "licenses: MIT OR Apache-2.0"
'(license:expat license:asl2.0)
(string->license "MIT OR Apache-2.0"))
(test-equal "licenses: Apache-2.0 / MIT"
'(license:asl2.0 license:expat)
(string->license "Apache-2.0 / MIT"))
(test-equal "licenses: Apache-2.0 WITH LLVM-exception"
'(license:asl2.0 unknown-license!)
(string->license "Apache-2.0 WITH LLVM-exception"))
(test-equal "licenses: MIT/Apache-2.0 AND BSD-2-Clause"
'(license:expat license:asl2.0 unknown-license!)
(string->license "MIT/Apache-2.0 AND BSD-2-Clause"))
(test-equal "licenses: MIT/Apache-2.0"
'(license:expat license:asl2.0)
(string->license "MIT/Apache-2.0"))
(test-end "crate") (test-end "crate")

View File

@ -24,7 +24,6 @@
#:use-module (gcrypt hash) #:use-module (gcrypt hash)
#:use-module (guix tests) #:use-module (guix tests)
#:use-module ((guix build utils) #:select (delete-file-recursively)) #:use-module ((guix build utils) #:select (delete-file-recursively))
#:use-module (srfi srfi-41)
#:use-module (srfi srfi-64) #:use-module (srfi srfi-64)
#:use-module (ice-9 match)) #:use-module (ice-9 match))
@ -121,24 +120,23 @@
(values (open-input-string test-bundler-json) (values (open-input-string test-bundler-json)
(string-length test-bundler-json))) (string-length test-bundler-json)))
(_ (error "Unexpected URL: " url))))) (_ (error "Unexpected URL: " url)))))
(match (stream->list (gem-recursive-import "foo")) (match (gem-recursive-import "foo")
((('package ((('package
('name "ruby-foo") ('name "ruby-bar")
('version "1.0.0") ('version "1.0.0")
('source ('source
('origin ('origin
('method 'url-fetch) ('method 'url-fetch)
('uri ('rubygems-uri "foo" 'version)) ('uri ('rubygems-uri "bar" 'version))
('sha256 ('sha256
('base32 ('base32
"1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk")))) "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
('build-system 'ruby-build-system) ('build-system 'ruby-build-system)
('propagated-inputs ('propagated-inputs
('quasiquote ('quasiquote
(("bundler" ('unquote 'bundler)) (('"bundler" ('unquote 'bundler)))))
("ruby-bar" ('unquote 'ruby-bar))))) ('synopsis "Another cool gem")
('synopsis "A cool gem") ('description "Another cool gem")
('description "This package provides a cool gem")
('home-page "https://example.com") ('home-page "https://example.com")
('license ('list 'license:expat 'license:asl2.0))) ('license ('list 'license:expat 'license:asl2.0)))
('package ('package
@ -157,21 +155,22 @@
('home-page "https://bundler.io/") ('home-page "https://bundler.io/")
('license 'license:expat)) ('license 'license:expat))
('package ('package
('name "ruby-bar") ('name "ruby-foo")
('version "1.0.0") ('version "1.0.0")
('source ('source
('origin ('origin
('method 'url-fetch) ('method 'url-fetch)
('uri ('rubygems-uri "bar" 'version)) ('uri ('rubygems-uri "foo" 'version))
('sha256 ('sha256
('base32 ('base32
"1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk")))) "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
('build-system 'ruby-build-system) ('build-system 'ruby-build-system)
('propagated-inputs ('propagated-inputs
('quasiquote ('quasiquote
(('"bundler" ('unquote 'bundler))))) (("bundler" ('unquote 'bundler))
('synopsis "Another cool gem") ("ruby-bar" ('unquote 'ruby-bar)))))
('description "Another cool gem") ('synopsis "A cool gem")
('description "This package provides a cool gem")
('home-page "https://example.com") ('home-page "https://example.com")
('license ('list 'license:expat 'license:asl2.0)))) ('license ('list 'license:expat 'license:asl2.0))))
#t) #t)

View File

@ -24,7 +24,8 @@
#:use-module (guix packages) #:use-module (guix packages)
#:use-module (guix build-system) #:use-module (guix build-system)
#:use-module (gnu packages) #:use-module (gnu packages)
#:use-module (srfi srfi-64)) #:use-module (srfi srfi-64)
#:use-module (ice-9 match))
(test-begin "import-utils") (test-begin "import-utils")
@ -41,6 +42,26 @@
'license:lgpl2.0 'license:lgpl2.0
(license->symbol license:lgpl2.0)) (license->symbol license:lgpl2.0))
(test-equal "recursive-import"
'((package ;package expressions in topological order
(name "bar"))
(package
(name "foo")
(inputs `(("bar" ,bar)))))
(recursive-import "foo" 'repo
#:repo->guix-package
(match-lambda*
(("foo" 'repo)
(values '(package
(name "foo")
(inputs `(("bar" ,bar))))
'("bar")))
(("bar" 'repo)
(values '(package
(name "bar"))
'())))
#:guix-name identity))
(test-assert "alist->package with simple source" (test-assert "alist->package with simple source"
(let* ((meta '(("name" . "hello") (let* ((meta '(("name" . "hello")
("version" . "2.10") ("version" . "2.10")