Merge branch 'master' into core-updates

This commit is contained in:
Mark H Weaver 2018-05-24 02:34:08 -04:00
commit 9d10a63402
No known key found for this signature in database
GPG Key ID: 7CEF29847562C516
30 changed files with 738 additions and 162 deletions

View File

@ -265,7 +265,8 @@ actual /dev name based on DEVICE."
#:key label uuid)
"Create an ext-family file system of TYPE on PARTITION. If LABEL is true,
use that as the volume name. If UUID is true, use it as the partition UUID."
(format #t "creating ~a partition...\n" type)
(format #t "creating ~a partition... ~@[label: ~s~] ~@[uuid: ~s~]\n"
type label (and uuid (uuid->string uuid)))
(apply invoke (string-append "mkfs." type)
"-F" partition
`(,@(if label

View File

@ -226,7 +226,6 @@ GNU_SYSTEM_MODULES = \
%D%/packages/image-processing.scm \
%D%/packages/image-viewers.scm \
%D%/packages/imagemagick.scm \
%D%/packages/indent.scm \
%D%/packages/inklingreader.scm \
%D%/packages/inkscape.scm \
%D%/packages/irc.scm \

View File

@ -11634,6 +11634,9 @@ Browser.")
"filter_non_conversion"
"bam2nuc"
"bismark2summary")))
(substitute* "bismark2report"
(("\\$RealBin/bismark_sitrep")
(string-append share "/bismark_sitrep")))
(mkdir-p share)
(mkdir-p docdir)
(mkdir-p bin)
@ -11642,10 +11645,6 @@ Browser.")
(for-each (lambda (file) (install-file file docdir))
docs)
(copy-recursively "Docs/Images" (string-append docdir "/Images"))
(substitute* "bismark2report"
(("\\$RealBin/bismark_sitrep")
(string-append share "/bismark_sitrep")))
(copy-recursively "bismark_sitrep"
(string-append share "/bismark_sitrep"))
@ -13008,7 +13007,7 @@ methylation and segmentation.")
(define-public pigx-scrnaseq
(package
(name "pigx-scrnaseq")
(version "0.0.3")
(version "0.0.4")
(source (origin
(method url-fetch)
(uri (string-append "https://github.com/BIMSBbioinfo/pigx_scrnaseq/"
@ -13016,7 +13015,7 @@ methylation and segmentation.")
"/pigx_scrnaseq-" version ".tar.gz"))
(sha256
(base32
"12qdq0nj1wdkyighdxj6924bmbpd1a0b3gam6w64l4hiqrv5sijz"))))
"1pvjm6f3mascprs65vflggwwg5v925knvgal7k7a6nnlmw5qndrf"))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags

View File

@ -29,6 +29,7 @@
#:use-module (guix download)
#:use-module (guix utils)
#:use-module (guix build-system gnu)
#:use-module (guix build-system emacs)
#:use-module (gnu packages)
#:use-module (gnu packages backup)
#:use-module (gnu packages compression)
@ -154,3 +155,20 @@ and workspaces that can be used in the compiler environment of your choice.")
license:bsd-2 ; cmlibarchive
license:expat ; cmjsoncpp is dual MIT/public domain
license:public-domain)))) ; cmlibarchive/archive_getdate.c
(define-public emacs-cmake-mode
(package
(inherit cmake)
(name "emacs-cmake-mode")
(build-system emacs-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'chdir-elisp
;; Elisp directory is not in root of the source.
(lambda _
(chdir "Auxiliary"))))))
(synopsis "Emacs major mode for editing Cmake expressions")
(description "@code{cmakeos-mode} provides an Emacs major mode for editing
Cmake files. It supports syntax highlighting, indenting and refilling of
comments.")))

View File

@ -7,6 +7,10 @@
;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
;;; Copyright © 2017 Andy Wingo <wingo@igalia.com>
;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
;;; Copyright © 2018 Pierre Neidhardt <ambrevar@gmail.com>
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -529,3 +533,118 @@ produce colored output.")
output is a graphviz-dot file, a Gexf-XML file or a list of the deepest
independent targets.")
(license license:expat)))
(define-public uncrustify
(package
(name "uncrustify")
(version "0.67")
(source (origin
(method url-fetch)
(uri (string-append
"https://github.com/uncrustify/uncrustify/archive/"
"uncrustify-" version ".zip"))
(sha256
(base32
"0n13kq0nsm35fxhdp0f275n4x0w88hdv3bdjy0hgvv42x0dx5zyp"))))
(build-system cmake-build-system)
(native-inputs
`(("unzip" ,unzip)))
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'unpack-etc
(lambda* (#:key inputs outputs #:allow-other-keys)
;; Configuration samples are not installed by default.
(let* ((output (assoc-ref outputs "out"))
(etcdir (string-append output "/etc")))
(for-each (lambda (l)
(install-file l etcdir))
(find-files "etc" "\\.cfg$")))
#t)))))
(home-page "http://uncrustify.sourceforge.net/")
(synopsis "Code formatter for C and other related languages")
(description
"Beautify source code in many languages of the C family (C, C++, C#,
Objective@tie{}C, D, Java, Pawn, and Vala). Features:
@itemize
@item Indent and align code.
@item Reformat comments (a little bit).
@item Fix inter-character spacing.
@item Add or remove parens / braces.
@item Supports embedded SQL @code{EXEC SQL} stuff.
@item Highly configurable - More than 600 configurable options.
@end itemize\n")
(license license:gpl2+)))
(define-public astyle
(package
(name "astyle")
(version "2.05")
(source
(origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/astyle/astyle/astyle%20"
version "/astyle_" version "_linux.tar.gz"))
(sha256
(base32
"0f9sh9kq5ajp1yz133h00fr9235p1m698x7n3h7zbrhjiwgynd6s"))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f ;no tests
#:make-flags (list (string-append "prefix=" %output)
"INSTALL=install"
"all")
#:phases
(modify-phases %standard-phases
(replace 'configure
(lambda _ (chdir "build/gcc") #t))
(add-after 'install 'install-libs
(lambda* (#:key outputs #:allow-other-keys)
;; Libraries are not installed by default
(let* ((output (assoc-ref outputs "out"))
(libdir (string-append output "/lib")))
(begin
(mkdir-p libdir)
(for-each (lambda (l)
(copy-file
l (string-append libdir "/" (basename l))))
(find-files "bin" "lib*"))))
#t)))))
(home-page "http://astyle.sourceforge.net/")
(synopsis "Source code indenter, formatter, and beautifier")
(description
"Artistic Style is a source code indenter, formatter, and beautifier for
the C, C++, C++/CLI, ObjectiveC, C#, and Java programming languages.")
(license license:lgpl3+)))
(define-public indent
(package
(name "indent")
(version "2.2.10")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/indent/indent-" version
".tar.gz"))
(sha256 (base32
"0f9655vqdvfwbxvs1gpa7py8k1z71aqh8hp73f65vazwbfz436wa"))))
(build-system gnu-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'fix-docdir
(lambda _
;; Although indent uses a modern autoconf in which docdir
;; defaults to PREFIX/share/doc, the doc/Makefile.am
;; overrides this to be in PREFIX/doc. Fix this.
(substitute* "doc/Makefile.in"
(("^docdir = .*$") "docdir = @docdir@\n"))
#t)))))
(synopsis "Code reformatter")
(description
"Indent is a program that makes source code easier to read by
reformatting it in a consistent style. It can change the style to one of
several different styles such as GNU, BSD or K&R. It has some flexibility to
deal with incomplete or malformed syntax. GNU indent offers several
extensions over the standard utility.")
(license license:gpl3+)
(home-page "https://www.gnu.org/software/indent/")))

View File

@ -30,7 +30,7 @@
#:use-module (gnu packages bash)
#:use-module (gnu packages gcc)
#:use-module (gnu packages m4)
#:use-module (gnu packages indent)
#:use-module (gnu packages code)
#:use-module (gnu packages file)
#:use-module (gnu packages gawk)
#:use-module (gnu packages bison)

View File

@ -3,7 +3,7 @@
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;;
;;; This file is part of GNU Guix.
;;;
@ -43,7 +43,7 @@
(define-public connman
(package
(name "connman")
(version "1.35")
(version "1.36")
(source
(origin
(method url-fetch)
@ -51,7 +51,7 @@
name "-" version ".tar.xz"))
(sha256
(base32
"1apj5j25kj7v1bsfv3nh54aiq873nfrsjfbj85p5qm3ihfwxxmv6"))))
"0x00dq5c2frz06md3g5y0jh5kbcj2hrfl5qjcqga8gs4ri0xp2f7"))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags

View File

@ -3974,3 +3974,55 @@ including the ability to summarize or get a high-level view of code,
determining dependencies between variables, code improvement suggestions.")
;; Any version of the GPL
(license (list license:gpl2+ license:gpl3+))))
(define-public r-rappdirs
(package
(name "r-rappdirs")
(version "0.3.1")
(source
(origin
(method url-fetch)
(uri (cran-uri "rappdirs" version))
(sha256
(base32
"0ji6sg3bdn5gazkq14xmmcq7jnbsyxw4lzmmbgv6526j2vn93n1g"))))
(build-system r-build-system)
(home-page "https://cran.r-project.org/web/packages/rappdirs/")
(synopsis "Determine where to save data, caches, and logs")
(description
"This package provides an easy way to determine which directories on the
user's computer should be used to save data, caches and logs. It is a port of
Python's @url{https://github.com/ActiveState/appdirs,Appdirs} to R.")
(license license:expat)))
(define-public r-learnr
(package
(name "r-learnr")
(version "0.9.2")
(source
(origin
(method url-fetch)
(uri (cran-uri "learnr" version))
(sha256
(base32
"1z04c1djg7ghsl7p9ypc6k5m7snahnmjy10xmrzqfayx1wkfkn9n"))))
(build-system r-build-system)
(propagated-inputs
`(("r-evaluate" ,r-evaluate)
("r-htmltools" ,r-htmltools)
("r-htmlwidgets" ,r-htmlwidgets)
("r-jsonlite" ,r-jsonlite)
("r-knitr" ,r-knitr)
("r-markdown" ,r-markdown)
("r-rappdirs" ,r-rappdirs)
("r-rmarkdown" ,r-rmarkdown)
("r-rprojroot" ,r-rprojroot)
("r-shiny" ,r-shiny)
("r-withr" ,r-withr)))
(home-page "https://rstudio.github.io/learnr/")
(synopsis "Interactive tutorials for R")
(description
"This package provides tools to create interactive tutorials using R
Markdown. Use a combination of narrative, figures, videos, exercises, and
quizzes to create self-paced tutorials for learning about R and R packages.")
(license license:asl2.0)))

View File

@ -31,7 +31,7 @@
#:use-module (gnu packages bash)
#:use-module (gnu packages flex)
#:use-module (gnu packages golang)
#:use-module (gnu packages indent)
#:use-module (gnu packages code)
#:use-module (gnu packages llvm)
#:use-module (gnu packages perl)
#:use-module (gnu packages pretty-print)

View File

@ -34,6 +34,7 @@
;;; Copyright © 2017, 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2018 Sohom Bhattacharjee <soham.bhattacharjee15@gmail.com>
;;; Copyright © 2018 Mathieu Lirzin <mthl@gnu.org>
;;; Copyright © 2018 Pierre Neidhardt <ambrevar@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -10480,3 +10481,56 @@ Dumb Jump performs best with The Silver Searcher @command{ag} or ripgrep
"This package provides an Emacs minor mode for highlighting
device tree files.")
(license license:gpl3+))))
(define-public emacs-daemons
(package
(name "emacs-daemons")
(version "1.2.0")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/cbowdon/daemons.el")
(commit version)))
(file-name (string-append name "-" version "-checkout"))
(sha256
(base32
"00ijgm22ck76gw0x79krl05yy0m8a502yfakazfy5xhpn1zi6ab7"))))
(build-system emacs-build-system)
(home-page "https://github.com/cbowdon/daemons.el")
(synopsis "Emacs UI for managing init system services")
(description
"This is an Emacs mode to give you a UI for managing init system
daemons (services) for those getting tired of typing out @code{sudo service
my_thing reload} all the time. It offers a consistent UI over different init
systems.")
(license license:gpl3+)))
(define-public emacs-esh-autosuggest
(package
(name "emacs-esh-autosuggest")
(version "2.0.0")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/dieggsy/esh-autosuggest")
(commit version)))
(file-name (string-append name "-" version "-checkout"))
(sha256
(base32
"116pdjgpjy9b0psm5kzwkwy7dq8vn0p6dy75dl1zsy2xrjf1iqdw"))))
(build-system emacs-build-system)
(propagated-inputs `(("emacs-company" ,emacs-company)))
(home-page "https://github.com/dieggsy/esh-autosuggest")
(synopsis "Fish-like autosuggestions in Eshell")
(description
"This package assumes you use something other than company for eshell
completion (e.g. @code{eshell-pcomplete}, @code{completion-at-point},
@code{helm-esh-pcomplete}). @code{company-mode} is used solely as a mechanism
for history autosuggestions.
Unless you're using @code{use-package}'s hook keyword, you can enable the
autosuggestions with:
@code{(add-hook 'eshell-mode-hook #'esh-autosuggest-mode)}")
(license license:gpl3+)))

View File

@ -26,7 +26,7 @@
#:use-module (gnu packages m4)
#:use-module (gnu packages man)
#:use-module (gnu packages bison)
#:use-module (gnu packages indent)
#:use-module (gnu packages code)
#:use-module (srfi srfi-1))
(define-public flex

View File

@ -6,6 +6,7 @@
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
;;;
;;; This file is part of GNU Guix.
;;;
@ -43,6 +44,8 @@
#:use-module (gnu packages gtk)
#:use-module (gnu packages image)
#:use-module (gnu packages icu4c)
#:use-module (gnu packages pcre)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages python)
#:use-module (gnu packages statistics)
@ -612,3 +615,148 @@ spatial data and models on top of static maps from various online sources (e.g
Google Maps and Stamen Maps). It includes tools common to those tasks,
including functions for geolocation and routing.")
(license license:gpl2)))
(define-public gdal
(package
(name "gdal")
(version "2.2.4")
(source (origin
(method url-fetch)
(uri (string-append
"http://download.osgeo.org/gdal/" version "/gdal-"
version ".tar.gz"))
(sha256
(base32
"1951f7b69x3d1vic0rmq92q8f4bj3hbxnxmj5jl0cc3zg0isgmdr"))
(modules '((guix build utils)))
(snippet
`(begin
;; TODO: frmts contains a lot more bundled code.
(for-each delete-file-recursively
;; bundled code
'("frmts/png/libpng"
"frmts/gif/giflib"
"frmts/jpeg/libjpeg"
"frmts/jpeg/libjpeg12"
"frmts/gtiff/libtiff"
"frmts/gtiff/libgeotiff"
"frmts/zlib"
"ogr/ogrsf_frmts/geojson/libjson"))))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f
#:configure-flags
(let-syntax ((with (syntax-rules ()
((_ option input)
(string-append option "="
(assoc-ref %build-inputs input))))))
(list
;; TODO: --with-pcidsk, --with-pcraster
(with "--with-freexl" "freexl")
(with "--with-libjson-c" "json-c")
(with "--with-png" "libpng")
(with "--with-webp" "libwebp")
(with "--with-gif" "giflib")
(with "--with-jpeg" "libjpeg")
(with "--with-libtiff" "libtiff")
(with "--with-geotiff" "libgeotiff")
(with "--with-libz" "zlib")
"--with-pcre"))
#:phases
(modify-phases %standard-phases
(add-before 'build 'fix-path
(lambda _
(substitute* "frmts/mrf/mrf_band.cpp"
(("\"../zlib/zlib.h\"") "<zlib.h>")))))))
(inputs
`(("freexl" ,freexl)
("geos" ,geos)
("giflib" ,giflib)
("json-c" ,json-c)
("libgeotiff" ,libgeotiff)
("libjpeg-turbo" ,libjpeg-turbo)
("libpng" ,libpng)
("libtiff" ,libtiff)
("libwebp" ,libwebp)
("pcre" ,pcre)
("zlib" ,zlib)))
(home-page "http://www.gdal.org/")
(synopsis "Raster and vector geospatial data format library")
(description "GDAL is a translator library for raster and vector geospatial
data formats. As a library, it presents a single raster abstract data model
and single vector abstract data model to the calling application for all
supported formats. It also comes with a variety of useful command line
utilities for data translation and processing.")
(license (list
;; general license
license:expat
;; frmts/gtiff/tif_float.c, frmts/pcraster/libcsf,
;; ogr/ogrsf_frmts/dxf/intronurbs.cpp, frmts/pdf/pdfdataset.cpp
;; frmts/mrf/
license:bsd-3
;; frmts/hdf4/hdf-eos/*
;; similar to the expat license, but without guarantee exclusion
(license:non-copyleft "file://frmts/hdf4/hdf-eos/README")
;; frmts/grib/degrib/
license:public-domain ; with guarantee exclusion
;; port/cpl_minizip*
;; Some bsd-inspired license
(license:non-copyleft "file://port/LICENCE_minizip")
;; alg/internal_libqhull
;; Some 5-clause license
(license:non-copyleft "file://alg/internal_libqhull/COPYING.txt")
;; frmts/mrf/libLERC
license:asl2.0))))
(define-public postgis
(package
(name "postgis")
(version "2.4.4")
(source (origin
(method url-fetch)
(uri (string-append "https://download.osgeo.org/postgis/source/postgis-"
version ".tar.gz"))
(sha256
(base32
"1hm8migjb53cymp4qvg1h20yqllmy9f7x0awv5450391i6syyqq6"))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f
#:make-flags
(list (string-append "datadir=" (assoc-ref %outputs "out") "/share")
(string-append "docdir="(assoc-ref %outputs "out") "/share/doc")
(string-append "pkglibdir="(assoc-ref %outputs "out") "/lib")
(string-append "bindir=" (assoc-ref %outputs "out") "/bin"))
#:phases
(modify-phases %standard-phases
(add-before 'build 'fix-install-path
(lambda* (#:key outputs #:allow-other-keys)
(substitute* '("raster/loader/Makefile" "raster/scripts/python/Makefile")
(("\\$\\(DESTDIR\\)\\$\\(PGSQL_BINDIR\\)")
(string-append (assoc-ref outputs "out") "/bin"))))))))
(inputs
`(("gdal" ,gdal)
("geos" ,geos)
("libxml2" ,libxml2)
("pcre" ,pcre)
("postgresql" ,postgresql)
("proj.4" ,proj.4)))
(native-inputs
`(("perl" ,perl)
("pkg-config" ,pkg-config)))
(home-page "https://postgis.net")
(synopsis "Spatial database extender for PostgreSQL")
(description "PostGIS is a spatial database extender for PostgreSQL
object-relational database. It adds support for geographic objects allowing
location queries to be run in SQL.")
(license (list
;; General license
license:gpl2+
;; loader/dbfopen, safileio.*, shapefil.h, shpopen.c
license:expat
;; loader/getopt.*
license:public-domain
;; doc/xsl
license:bsd-3 ; files only say "BSD"
;; doc
license:cc-by-sa3.0))))

View File

@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Leo Famulari <leo@famulari.name>
@ -196,7 +196,18 @@ that is extensible via a plugin system.")
`(#:tests? #f ;no tests
#:phases
(modify-phases %standard-phases
(delete 'configure)
;; FIXME: The gegl package only installs "gegl-0.4.pc", but
;; "gimp-2.0.pc" requires "gegl-0.3.pc", so we just copy it.
(replace 'configure
(lambda* (#:key inputs #:allow-other-keys)
(mkdir-p "tmppkgconfig")
(copy-file (string-append (assoc-ref inputs "gegl")
"/lib/pkgconfig/gegl-0.4.pc")
"tmppkgconfig/gegl-0.3.pc")
(setenv "PKG_CONFIG_PATH"
(string-append "tmppkgconfig:"
(or (getenv "PKG_CONFIG_PATH") "")))
#t))
(add-after 'unpack 'set-prefix
(lambda* (#:key outputs #:allow-other-keys)
;; gimptool-2.0 does not allow us to install to any target
@ -215,6 +226,7 @@ that is extensible via a plugin system.")
("gimp" ,gimp)
;; needed by gimp-2.0.pc
("gdk-pixbuf" ,gdk-pixbuf)
("gegl" ,gegl)
("cairo" ,cairo)
("glib" ,glib)
;; needed by gimpui-2.0.pc

View File

@ -10,6 +10,7 @@
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Christopher Baines <mail@cbaines.net>
;;; Copyright © 2018 Tomáš Čech <sleep_walker@gnu.org>
;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
;;;
;;; This file is part of GNU Guix.
;;;
@ -1300,3 +1301,173 @@ support functions for dealing with terminals, as commonly found on UNIX
systems.")
(home-page "https://go.googlesource.com/crypto/")
(license license:bsd-3))))
(define-public go-github-com-burntsushi-toml
(let ((commit
"a368813c5e648fee92e5f6c30e3944ff9d5e8895")
(revision "0"))
(package
(name "go-github-com-burntsushi-toml")
(version (git-version "0.0.0" revision commit))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/BurntSushi/toml.git")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"1sjxs2lwc8jpln80s4rlzp7nprbcljhy5mz4rf9995gq93wqnym5"))))
(build-system go-build-system)
(arguments
'(#:import-path "github.com/BurntSushi/toml"))
(home-page "https://github.com/BurntSushi/toml")
(synopsis "Toml parser and encoder for Go")
(description "This package is toml parser and encoder for Go. The
interface is similar to Go's standard library @code{json} and @code{xml}
package.")
(license license:expat))))
(define-public go-github-com-getsentry-raven-go
(let ((commit
"dffeb57df75d6a911f00232155194e43d79d38d7")
(revision "0"))
(package
(name "go-github-com-getsentry-raven-go")
(version (git-version "0.0.0" revision commit))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/getsentry/raven-go.git")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"13sb9rvl3369m7fah3ss9g0hwky259snqfn8gmbr0h5zvp651lja"))))
(build-system go-build-system)
(arguments
'(#:import-path "github.com/getsentry/raven-go"))
(home-page
"https://github.com/getsentry/raven-go")
(synopsis "Sentry client in Go")
(description "This package is Go client API for the Sentry event/error
logging system.")
(license license:bsd-3))))
(define-public go-github-com-hashicorp-go-version
(let ((commit
"03c5bf6be031b6dd45afec16b1cf94fc8938bc77")
(revision "0"))
(package
(name "go-github-com-hashicorp-go-version")
(version (git-version "0.0.0" revision commit))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/hashicorp/go-version.git")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"0sjq57gpfznaqdrbyb2p0bn90g9h661cvr0jrk6ngags4pbw14ik"))))
(build-system go-build-system)
(arguments
'(#:import-path "github.com/hashicorp/go-version"))
(home-page
"https://github.com/hashicorp/go-version")
(synopsis "Go library for parsing and verifying versions and version
constraints")
(description "This package is a library for parsing versions and version
constraints, and verifying versions against a set of constraints. It can sort
a collection of versions properly, handles prerelease/beta versions, can
increment versions.")
(license license:mpl2.0))))
(define-public go-github-com-jpillora-backoff
(let ((commit
"06c7a16c845dc8e0bf575fafeeca0f5462f5eb4d")
(revision "0"))
(package
(name "go-github-com-jpillora-backoff")
(version (git-version "0.0.0" revision commit))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/jpillora/backoff.git")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"0xhvxr7bm47czdc5hy3kl508z3y4j91i2jm7vg774i52zych6k4l"))))
(build-system go-build-system)
(arguments
'(#:import-path "github.com/jpillora/backoff"))
(home-page "https://github.com/jpillora/backoff")
(synopsis "Simple exponential backoff counter in Go")
(description "This package is a simple exponential backoff counter in
Go.")
(license license:expat))))
(define-public go-github-com-stretchr-testify
(let ((commit
"b1f989447a57594c728884458a39abf3a73447f7")
(revision "0"))
(package
(name "go-github-com-stretchr-testify")
(version (git-version "1.1.4" revision commit))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/stretchr/testify.git")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"0p0gkqzh2p8r5g0rxm885ljl7ghih7h7hx9w562imx5ka0vdgixv"))))
(build-system go-build-system)
(arguments
'(#:import-path "github.com/stretchr/testify"))
(home-page "https://github.com/stretchr/testify")
(synopsis "Go helper library for tests and invariant checking")
(description "This package provide many tools for testifying that your
code will behave as you intend.
Features include:
@itemize
@item Easy assertions
@item Mocking
@item HTTP response trapping
@item Testing suite interfaces and functions.
@end itemize")
(license license:expat))))
(define-public go-github-com-tevino-abool
(let ((commit
"3c25f2fe7cd0ef3eabefce1d90efd69a65d35b12")
(revision "0"))
(package
(name "go-github-com-tevino-abool")
(version (git-version "0.0.0" revision commit))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/tevino/abool.git")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"1wxqrclxk93q0aj15z596dx2y57x9nkhi64nbrr5cxnhxn8vwixm"))))
(build-system go-build-system)
(arguments
'(#:import-path "github.com/tevino/abool"))
(home-page "https://github.com/tevino/abool")
(synopsis "Atomic boolean library for Go code")
(description "This package is atomic boolean library for Go code,
optimized for performance yet simple to use.")
(license license:expat))))

View File

@ -1,58 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;;
;;; 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 (gnu packages indent)
#:use-module (gnu packages)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix build-system gnu))
(define-public indent
(package
(name "indent")
(version "2.2.10")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/indent/indent-" version
".tar.gz"))
(sha256 (base32
"0f9655vqdvfwbxvs1gpa7py8k1z71aqh8hp73f65vazwbfz436wa"))))
(build-system gnu-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'fix-docdir
(lambda _
;; Although indent uses a modern autoconf in which docdir
;; defaults to PREFIX/share/doc, the doc/Makefile.am
;; overrides this to be in PREFIX/doc. Fix this.
(substitute* "doc/Makefile.in"
(("^docdir = .*$") "docdir = @docdir@\n"))
#t)))))
(synopsis "Code reformatter")
(description
"Indent is a program that makes source code easier to read by
reformatting it in a consistent style. It can change the style to one of
several different styles such as GNU, BSD or K&R. It has some flexibility to
deal with incomplete or malformed syntax. GNU indent offers several
extensions over the standard utility.")
(license license:gpl3+)
(home-page "https://www.gnu.org/software/indent/")))

View File

@ -394,8 +394,8 @@ It has been modified to remove all non-free binary blobs.")
;; supports qemu "virt" machine and possibly a large number of ARM boards.
;; See : https://wiki.debian.org/DebianKernel/ARMMP.
(define %linux-libre-version "4.16.10")
(define %linux-libre-hash "028xl0jj7wibd8v93r1r0vnw5iifin46p6ghd9m3w095lailqlsi")
(define %linux-libre-version "4.16.11")
(define %linux-libre-hash "0dc6kwpzncg2a8haf081i5si4ry9y3x6m39bjblbx9c809hdls6g")
(define-public linux-libre
(make-linux-libre %linux-libre-version
@ -403,8 +403,8 @@ It has been modified to remove all non-free binary blobs.")
%linux-compatible-systems
#:configuration-file kernel-config))
(define %linux-libre-4.14-version "4.14.42")
(define %linux-libre-4.14-hash "12vjzb5g1abg5d5w6z65n1ixw7c3y9f5zwx3gd3854dgnynbq708")
(define %linux-libre-4.14-version "4.14.43")
(define %linux-libre-4.14-hash "0mqgxp0001j11m5s82s7j4398443zx474a5kpzql7cqf3aljfybm")
(define-public linux-libre-4.14
(make-linux-libre %linux-libre-4.14-version
@ -413,8 +413,8 @@ It has been modified to remove all non-free binary blobs.")
#:configuration-file kernel-config))
(define-public linux-libre-4.9
(make-linux-libre "4.9.101"
"1s8zpl3dnz0nrg0by6hnss5z20iwlcwdg5x4251w0l9la81p05v5"
(make-linux-libre "4.9.102"
"1y32rc2zi2is4yl184i1vbbvc7gvkyr15r325g2syascxqzxarn0"
%intel-compatible-systems
#:configuration-file kernel-config))
@ -670,14 +670,14 @@ by Robert Shea and Robert Anton Wilson.")
(define-public procps
(package
(name "procps")
(version "3.3.14")
(version "3.3.15")
(source (origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/procps-ng/Production/"
"procps-ng-" version ".tar.xz"))
(sha256
(base32
"0v3j6rkzzscqds37i105cxx3q4dk04rsgpqfd5p7hzcvk59h5njy"))))
"0r84kwa5fl0sjdashcn4vh7hgfm7ahdcysig3mcjvpmkzi7p9g8h"))))
(build-system gnu-build-system)
(arguments
'(#:modules ((guix build utils)

View File

@ -259,14 +259,14 @@ aliasing facilities to work just as they would on normal mail.")
(define-public mutt
(package
(name "mutt")
(version "1.9.5")
(version "1.10.0")
(source (origin
(method url-fetch)
(uri (string-append "https://bitbucket.org/mutt/mutt/downloads/"
"mutt-" version ".tar.gz"))
(sha256
(base32
"0lsp72lm3cw490x7lhzia7h8f591bab2mr7qpscaj22fmrj7wqdz"))
"0nskymwr2cdapxlfv0ysz3bjwhb4kcvl5a3c39237k7r1vwva582"))
(patches (search-patches "mutt-store-references.patch"))))
(build-system gnu-build-system)
(inputs

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2017,2018 Jan Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;;
@ -56,11 +56,24 @@ extensive examples, including parsers for the Javascript and C99 languages.")
(home-page "https://savannah.nongnu.org/projects/nyacc")
(license (list gpl3+ lgpl3+))))
(define-public nyacc-for-mes
(package
(inherit nyacc)
(version "0.80.42")
(source (origin
(method url-fetch)
(uri (string-append "https://gitlab.com/janneke/nyacc"
"/-/archive/v" version
"/nyacc-" version ".tar.gz"))
(sha256
(base32
"0c8c8kxir0h2d4nxr131xbkfs7c80haipmkp2g6677sh14wn0b3y"))))))
(define-public mes
(let ((triplet "i686-unknown-linux-gnu"))
(package
(name "mes")
(version "0.13")
(version "0.14")
(source (origin
(method url-fetch)
(uri (string-append "https://gitlab.com/janneke/mes"
@ -68,12 +81,12 @@ extensive examples, including parsers for the Javascript and C99 languages.")
"/mes-" version ".tar.gz"))
(sha256
(base32
"0db4f32rak839ff3n7ywkkng9672457pd2pvvgvcsyndqmmdsqw0"))))
"1i23jk61iibjza2s3lka56ry4ma424g2fyk8pjd5bd1dyjd0yrzf"))))
(build-system gnu-build-system)
(supported-systems '("i686-linux" "x86_64-linux"))
(propagated-inputs
`(("mescc-tools" ,mescc-tools)
("nyacc" ,nyacc)))
("nyacc" ,nyacc-for-mes)))
(native-inputs
`(("guile" ,guile-2.2)
,@(if (not (string-prefix? "i686-linux" (or (%current-target-system)
@ -85,7 +98,9 @@ extensive examples, including parsers for the Javascript and C99 languages.")
'())
("perl" ,perl))) ;build-aux/gitlog-to-changelog
(arguments
`(#:phases
`(#:make-flags (list
(string-append "PREFIX=" (assoc-ref %outputs "out")))
#:phases
(modify-phases %standard-phases
(add-before 'install 'generate-changelog
(lambda _
@ -107,7 +122,7 @@ Guile-] Scheme interpreter prototype in C and a Nyacc-based C compiler in
(define-public mescc-tools
(package
(name "mescc-tools")
(version "0.3")
(version "0.4")
(source (origin
(method url-fetch)
(uri (string-append
@ -117,13 +132,18 @@ Guile-] Scheme interpreter prototype in C and a Nyacc-based C compiler in
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"04lvyyp7isamgddrnfpi92lgqdflzdzx5kc2x8fxmgsjisy0dgr4"))))
"1iwc8xqwzdaqckb4jkkisljrgn8ii4bl7dzk1l2kpv98hsyq9vi1"))))
(build-system gnu-build-system)
(supported-systems '("i686-linux" "x86_64-linux"))
(arguments
`(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
#:test-target "test"
#:phases (modify-phases %standard-phases
(delete 'configure))))
(delete 'configure)
(add-after 'install 'install-2
(lambda _
(let ((out (assoc-ref %outputs "out")))
(copy-file "bin/blood-elf" (string-append out "/bin/blood-elf"))))))))
(synopsis "Tools for the full source bootstrapping process")
(description
"Mescc-tools is a collection of tools for use in a full source

View File

@ -47,7 +47,7 @@
(define-public parallel
(package
(name "parallel")
(version "20180422")
(version "20180522")
(source
(origin
(method url-fetch)
@ -55,7 +55,7 @@
version ".tar.bz2"))
(sha256
(base32
"0xsfpbxwgd4197gra981iv0nmjfk58c0d88dxx6dh6yrqz523klx"))))
"1khcz9pm7rjnq4gw8pn30k1d40x337a204dxj4y4qijpx8m7w0gb"))))
(build-system gnu-build-system)
(arguments
`(#:phases

View File

@ -1,8 +1,8 @@
diff -rpu4 libusb-1.0.22.orig/libusb/descriptor.c libusb-1.0.22/libusb/descriptor.c
--- libusb-1.0.22.orig/libusb/descriptor.c 2018-03-17 08:23:37.000000000 +0100
+++ libusb-1.0.22/libusb/descriptor.c 2018-03-29 10:36:09.968429473 +0200
@@ -1173,9 +1173,9 @@ int API_EXPORTED libusb_get_string_descr
if (tbuf[1] != LIBUSB_DT_STRING)
diff --git a/libusb/descriptor.c b/libusb/descriptor.c
index 74d6de5..0b0e314 100644
--- a/libusb/descriptor.c
+++ b/libusb/descriptor.c
@@ -1174,7 +1174,7 @@ int API_EXPORTED libusb_get_string_descriptor_ascii(libusb_device_handle *dev_ha
return LIBUSB_ERROR_IO;
if (tbuf[0] > r)
@ -11,4 +11,6 @@ diff -rpu4 libusb-1.0.22.orig/libusb/descriptor.c libusb-1.0.22/libusb/descripto
di = 0;
for (si = 2; si < tbuf[0]; si += 2) {
if (di >= (length - 1))
--
2.17.0

View File

@ -1,5 +1,4 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
@ -283,44 +282,3 @@ seen in a terminal.")
TeX, SVG, BBCode and terminal escape sequences with colored syntax
highlighting. Language definitions and color themes are customizable.")
(license gpl3+)))
(define-public astyle
(package
(name "astyle")
(version "2.05")
(source
(origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/astyle/astyle/astyle%20"
version "/astyle_" version "_linux.tar.gz"))
(sha256
(base32
"0f9sh9kq5ajp1yz133h00fr9235p1m698x7n3h7zbrhjiwgynd6s"))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f ;no tests
#:make-flags (list (string-append "prefix=" %output)
"INSTALL=install"
"all")
#:phases
(modify-phases %standard-phases
(replace 'configure
(lambda _ (chdir "build/gcc") #t))
(add-after 'install 'install-libs
(lambda* (#:key outputs #:allow-other-keys)
;; Libraries are not installed by default
(let* ((output (assoc-ref outputs "out"))
(libdir (string-append output "/lib")))
(begin
(mkdir-p libdir)
(for-each (lambda (l)
(copy-file
l (string-append libdir "/" (basename l))))
(find-files "bin" "lib*"))))
#t)))))
(home-page "http://astyle.sourceforge.net/")
(synopsis "Source code indenter, formatter, and beautifier")
(description
"Artistic Style is a source code indenter, formatter, and beautifier for
the C, C++, C++/CLI, ObjectiveC, C#, and Java programming languages.")
(license lgpl3+)))

View File

@ -47,14 +47,14 @@
(define-public tor
(package
(name "tor")
(version "0.3.2.10")
(version "0.3.3.6")
(source (origin
(method url-fetch)
(uri (string-append "https://dist.torproject.org/tor-"
version ".tar.gz"))
(sha256
(base32
"1vnb2wkcmm8rnz0fqi3k7arl60mpycs8rjn8hvbgv56g3p1pgpv0"))))
"1drk2h8zd05xrfpx7xn77pcxz0hs4nrq6figw56qk5gkvgv5kg4r"))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags (list "--enable-gcc-hardening"

View File

@ -729,13 +729,13 @@ allowing to handle large objects with a small memory footprint.")
(define-public python-gitpython
(package
(name "python-gitpython")
(version "2.1.9")
(version "2.1.10")
(source (origin
(method url-fetch)
(uri (pypi-uri "GitPython" version))
(sha256
(base32
"0a9in1jfv9ssxhckl6sasw45bhm762y2r5ikgb2pk2g8yqdc6z64"))))
"00bk48s5szh296r7zyvdpv3sd7q9j2cb9sqdc9diwcjayrf082xn"))))
(build-system python-build-system)
(arguments
`(#:tests? #f ;XXX: Tests can only be run within the GitPython repository.

View File

@ -379,7 +379,7 @@ and creating Matroska files from other media files (@code{mkvmerge}).")
(define-public x265
(package
(name "x265")
(version "2.6")
(version "2.7")
(source
(origin
(method url-fetch)
@ -387,7 +387,7 @@ and creating Matroska files from other media files (@code{mkvmerge}).")
"x265_" version ".tar.gz"))
(sha256
(base32
"1gyd94jkwdii9308m07nymsbxrmrcl81c0j8i10zhslr2mj07w0v"))
"18llni1m8kfvdwy5bp950z6gyd0nijmvi3hzd6gd8vpy5yk5zrym"))
(modules '((guix build utils)))
(snippet '(begin
(delete-file-recursively "source/compat/getopt")
@ -395,7 +395,7 @@ and creating Matroska files from other media files (@code{mkvmerge}).")
(build-system cmake-build-system)
(arguments
`(#:tests? #f ; tests are skipped if cpu-optimized code isn't built
;; Currently the source code doesn't check for aarch64
;; Currently the source code doesn't check for aarch64.
,@(if (string-prefix? "aarch64" (or (%current-target-system) (%current-system)))
'(#:configure-flags '("-DENABLE_PIC=TRUE"))
'())
@ -2073,7 +2073,7 @@ making @dfn{screencasts}.")
(define-public simplescreenrecorder
(package
(name "simplescreenrecorder")
(version "0.3.10")
(version "0.3.11")
(source
(origin
(method url-fetch)
@ -2082,14 +2082,14 @@ making @dfn{screencasts}.")
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"02rl9yyx3hlz9fqvgzv7ipmvx2qahj7ws5wx2m7zs3lssq3qag3g"))))
"0l6irdadqpajvv0dj3ngs1231n559l0y1pykhs2h7526qm4w7xal"))))
(build-system cmake-build-system)
;; Although libx11, libxfixes, libxext are listed as build dependencies in
;; README.md, the program builds and functions properly without them.
;; As a result, they are omitted. Please add them back if problems appear.
(inputs
`(("alsa-lib" ,alsa-lib)
("ffmpeg" ,ffmpeg-3.4)
("ffmpeg" ,ffmpeg)
("glu" ,glu)
("jack" ,jack-1)
("libxi" ,libxi)

View File

@ -4900,7 +4900,7 @@ tools like SSH (Secure Shell) to reach the outside world.")
(define-public stunnel
(package
(name "stunnel")
(version "5.44")
(version "5.45")
(source
(origin
(method url-fetch)
@ -4908,7 +4908,7 @@ tools like SSH (Secure Shell) to reach the outside world.")
version ".tar.gz"))
(sha256
(base32
"1692y69wl7j6yjgnrrzclgzb34bxsaxjzl1dfy47vms7pdfk42lr"))))
"1qrfb418skdcm7b3v30ixng1ng907f4rfv54zvgz8jwakf1l90jl"))))
(build-system gnu-build-system)
(inputs `(("openssl" ,openssl)))
(arguments

View File

@ -950,7 +950,7 @@ the X.Org X Server version 1.7 and later (X11R7.5 or later).")
(define-public redshift
(package
(name "redshift")
(version "1.11")
(version "1.12")
(source
(origin
(method url-fetch)
@ -960,7 +960,7 @@ the X.Org X Server version 1.7 and later (X11R7.5 or later).")
"/redshift-" version ".tar.xz"))
(sha256
(base32
"0ngkwj7rg8nfk806w0sg443w6wjr91xdc0zisqfm5h2i77wm1qqh"))))
"1fi27b73x85qqar526dbd33av7mahca2ykaqwr7siqiw1qqcby6j"))))
(build-system gnu-build-system)
(native-inputs
`(("pkg-config" ,pkg-config)

View File

@ -283,7 +283,7 @@ FILE-SYSTEMS."
(define virtio-modules
;; Modules for Linux para-virtualized devices, for use in QEMU guests.
'("virtio_pci" "virtio_balloon" "virtio_blk" "virtio_net"
"virtio_console"))
"virtio_console" "virtio-rng"))
`("ahci" ;for SATA controllers
"usb-storage" "uas" ;for the installation image etc.

View File

@ -752,6 +752,10 @@ with the host.
When FULL-BOOT? is true, return an image that does a complete boot sequence,
bootloaded included; thus, make a disk image that contains everything the
bootloader refers to: OS kernel, initrd, bootloader data, etc."
(define root-uuid
;; Use a fixed UUID to improve determinism.
(operating-system-uuid os 'dce))
(mlet* %store-monad ((os-drv (operating-system-derivation os))
(bootcfg (operating-system-bootcfg os)))
;; XXX: When FULL-BOOT? is true, we end up creating an image that contains
@ -763,6 +767,7 @@ bootloader refers to: OS kernel, initrd, bootloader data, etc."
#:bootloader (bootloader-configuration-bootloader
(operating-system-bootloader os))
#:disk-image-size disk-image-size
#:file-system-uuid root-uuid
#:inputs (if full-boot?
`(("bootcfg" ,bootcfg))
'())

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -52,13 +52,45 @@
((weird _ ...) ;weird!
(syntax-violation name "invalid field specifier" #'weird)))))
(define (print-record-abi-mismatch-error port key args
default-printer)
(match args
((rtd . _)
;; The source file where this exception is thrown must be recompiled.
(format port "ERROR: ~a: record ABI mismatch; recompilation needed"
rtd))))
(set-exception-printer! 'record-abi-mismatch-error
print-record-abi-mismatch-error)
(define (current-abi-identifier type)
"Return an identifier unhygienically derived from TYPE for use as its
\"current ABI\" variable."
(let ((type-name (syntax->datum type)))
(datum->syntax
type
(string->symbol
(string-append "% " (symbol->string type-name)
" abi-cookie")))))
(define (abi-check type cookie)
"Return syntax that checks that the current \"application binary
interface\" (ABI) for TYPE is equal to COOKIE."
(with-syntax ((current-abi (current-abi-identifier type)))
#`(unless (eq? current-abi #,cookie)
(throw 'record-abi-mismatch-error #,type))))
(define-syntax make-syntactic-constructor
(syntax-rules ()
"Make the syntactic constructor NAME for TYPE, that calls CTOR, and
expects all of EXPECTED fields to be initialized. DEFAULTS is the list of
FIELD/DEFAULT-VALUE tuples, THUNKED is the list of identifiers of thunked
fields, and DELAYED is the list of identifiers of delayed fields."
fields, and DELAYED is the list of identifiers of delayed fields.
ABI-COOKIE is the cookie (an integer) against which to check the run-time ABI
of TYPE matches the expansion-time ABI."
((_ type name ctor (expected ...)
#:abi-cookie abi-cookie
#:thunked thunked
#:delayed delayed
#:innate innate
@ -130,6 +162,7 @@ fields, and DELAYED is the list of identifiers of delayed fields."
(syntax-case s (inherit expected ...)
((_ (inherit orig-record) (field value) (... ...))
#`(let* #,(field-bindings #'((field value) (... ...)))
#,(abi-check #'type abi-cookie)
#,(record-inheritance #'orig-record
#'((field value) (... ...)))))
((_ (field value) (... ...))
@ -144,6 +177,7 @@ fields, and DELAYED is the list of identifiers of delayed fields."
(cond ((lset= eq? fields '(expected ...))
#`(let* #,(field-bindings
#'((field value) (... ...)))
#,(abi-check #'type abi-cookie)
(ctor #,@(map field-value '(expected ...)))))
((pair? (lset-difference eq? fields
'(expected ...)))
@ -270,6 +304,16 @@ inherited."
;; The real value of that field is a promise, so force it.
(force (real-get x)))))))
(define (compute-abi-cookie field-specs)
;; Compute an "ABI cookie" for the given FIELD-SPECS. We use
;; 'string-hash' because that's a better hash function that 'hash' on a
;; list of symbols.
(syntax-case field-specs ()
(((field get properties ...) ...)
(string-hash (object->string
(syntax->datum #'((field properties ...) ...)))
most-positive-fixnum))))
(syntax-case s ()
((_ type syntactic-ctor ctor pred
(field get properties ...) ...)
@ -278,7 +322,8 @@ inherited."
(delayed (filter-map delayed-field? field-spec))
(innate (filter-map innate-field? field-spec))
(defaults (filter-map field-default-value
#'((field properties ...) ...))))
#'((field properties ...) ...)))
(cookie (compute-abi-cookie field-spec)))
(with-syntax (((field-spec* ...)
(map field-spec->srfi-9 field-spec))
((thunked-field-accessor ...)
@ -298,10 +343,13 @@ inherited."
(ctor field ...)
pred
field-spec* ...)
(define #,(current-abi-identifier #'type)
#,cookie)
thunked-field-accessor ...
delayed-field-accessor ...
(make-syntactic-constructor type syntactic-ctor ctor
(field ...)
#:abi-cookie #,cookie
#:thunked #,thunked
#:delayed #,delayed
#:innate #,innate

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2018 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -288,6 +288,34 @@
(and (string-match "extra.*initializer.*baz" message)
(eq? proc 'foo)))))
(test-assert "ABI checks"
(let ((module (test-module)))
(eval '(begin
(define-record-type* <foo> foo make-foo
foo?
(bar foo-bar (default 42)))
(define (make-me-a-record) (foo)))
module)
(unless (eval '(foo? (make-me-a-record)) module)
(error "what?" (eval '(make-me-a-record) module)))
;; Redefine <foo> with an additional field.
(eval '(define-record-type* <foo> foo make-foo
foo?
(baz foo-baz)
(bar foo-bar (default 42)))
module)
;; Now 'make-me-a-record' is out of sync because it does an
;; 'allocate-struct' that corresponds to the previous definition of <foo>.
(catch 'record-abi-mismatch-error
(lambda ()
(eval '(foo? (make-me-a-record)) module)
#f)
(lambda (key rtd . _)
(eq? rtd (eval '<foo> module))))))
(test-equal "recutils->alist"
'((("Name" . "foo")
("Version" . "0.1")