diff options
author | Ludovic Courtès <ludo@gnu.org> | 2021-12-13 11:49:15 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2021-12-13 11:49:15 +0100 |
commit | 1052ae5f03de931b52c7a638c8e4f8d8d7093af3 (patch) | |
tree | 4913e4a7834f4ad6e44906d814cd46e7c21d981b | |
parent | 869d69ad3248288ffe30264f5e5bd760792ca758 (diff) | |
parent | 788f56b4dc0729e07ad546c5bc9694759c271f09 (diff) | |
download | guix-1052ae5f03de931b52c7a638c8e4f8d8d7093af3.tar.gz |
Merge branch 'master' into core-updates-frozen
47 files changed, 2404 insertions, 721 deletions
diff --git a/doc/build.scm b/doc/build.scm index bf32f85436..eebb493a2e 100644 --- a/doc/build.scm +++ b/doc/build.scm @@ -449,6 +449,7 @@ its <pre class=\"lisp\"> blocks (as produced by 'makeinfo --html')." ("rarr" "→") ("hellip" "…") ("rsquo" "’") + ("nbsp" " ") (e (pk 'unknown-entity e) (primitive-exit 2)))) (define (concatenate-snippets pieces) diff --git a/doc/guix.texi b/doc/guix.texi index 58625666c1..49dd80e9dc 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -346,7 +346,8 @@ Services * Base Services:: Essential system services. * Scheduled Job Execution:: The mcron service. * Log Rotation:: The rottlog service. -* Networking Services:: Network setup, SSH daemon, etc. +* Networking Setup:: Setting up network interfaces. +* Networking Services:: Firewall, SSH daemon, etc. * Unattended Upgrades:: Automated system upgrades. * X Window:: Graphical display. * Printing Services:: Local and remote printer support. @@ -15816,7 +15817,8 @@ declaration. * Base Services:: Essential system services. * Scheduled Job Execution:: The mcron service. * Log Rotation:: The rottlog service. -* Networking Services:: Network setup, SSH daemon, etc. +* Networking Setup:: Setting up network interfaces. +* Networking Services:: Firewall, SSH daemon, etc. * Unattended Upgrades:: Automated system upgrades. * X Window:: Graphical display. * Printing Services:: Local and remote printer support. @@ -17038,167 +17040,210 @@ The list of syslog-controlled files to be rotated. By default it is: "/var/log/maillog")}. @end defvr -@node Networking Services -@subsection Networking Services +@node Networking Setup +@subsection Networking Setup -The @code{(gnu services networking)} module provides services to configure -the network interface. +The @code{(gnu services networking)} module provides services to +configure network interfaces and set up networking on your machine. +Those services provide different ways for you to set up your machine: by +declaring a static network configuration, by running a Dynamic Host +Configuration Protocol (DHCP) client, or by running daemons such as +NetworkManager and Connman that automate the whole process, +automatically adapt to connectivity changes, and provide a high-level +user interface. -@cindex DHCP, networking service -@defvr {Scheme Variable} dhcp-client-service-type -This is the type of services that run @var{dhcp}, a Dynamic Host Configuration -Protocol (DHCP) client, on all the non-loopback network interfaces. Its value -is the DHCP client package to use, @code{isc-dhcp} by default. -@end defvr +On a laptop, NetworkManager and Connman are by far the most convenient +options, which is why the default desktop services include +NetworkManager (@pxref{Desktop Services, @code{%desktop-services}}). +For a server, or for a virtual machine or a container, static network +configuration or a simple DHCP client are often more appropriate. -@deffn {Scheme Procedure} dhcpd-service-type -This type defines a service that runs a DHCP daemon. To create a -service of this type, you must supply a @code{<dhcpd-configuration>}. -For example: - -@lisp -(service dhcpd-service-type - (dhcpd-configuration - (config-file (local-file "my-dhcpd.conf")) - (interfaces '("enp0s25")))) -@end lisp -@end deffn - -@deftp {Data Type} dhcpd-configuration -@table @asis -@item @code{package} (default: @code{isc-dhcp}) -The package that provides the DHCP daemon. This package is expected to -provide the daemon at @file{sbin/dhcpd} relative to its output -directory. The default package is the -@uref{https://www.isc.org/products/DHCP, ISC's DHCP server}. -@item @code{config-file} (default: @code{#f}) -The configuration file to use. This is required. It will be passed to -@code{dhcpd} via its @code{-cf} option. This may be any ``file-like'' -object (@pxref{G-Expressions, file-like objects}). See @code{man -dhcpd.conf} for details on the configuration file syntax. -@item @code{version} (default: @code{"4"}) -The DHCP version to use. The ISC DHCP server supports the values ``4'', -``6'', and ``4o6''. These correspond to the @code{dhcpd} program -options @code{-4}, @code{-6}, and @code{-4o6}. See @code{man dhcpd} for -details. -@item @code{run-directory} (default: @code{"/run/dhcpd"}) -The run directory to use. At service activation time, this directory -will be created if it does not exist. -@item @code{pid-file} (default: @code{"/run/dhcpd/dhcpd.pid"}) -The PID file to use. This corresponds to the @code{-pf} option of -@code{dhcpd}. See @code{man dhcpd} for details. -@item @code{interfaces} (default: @code{'()}) -The names of the network interfaces on which dhcpd should listen for -broadcasts. If this list is not empty, then its elements (which must be -strings) will be appended to the @code{dhcpd} invocation when starting -the daemon. It may not be necessary to explicitly specify any -interfaces here; see @code{man dhcpd} for details. -@end table -@end deftp +This section describes the various network setup services available, +starting with static network configuration. @defvr {Scheme Variable} static-networking-service-type -This is the type for statically-configured network interfaces. -@c TODO Document <static-networking> data structures. +This is the type for statically-configured network interfaces. Its +value must be a list of @code{static-networking} records. Each of them +declares a set of @dfn{addresses}, @dfn{routes}, and @dfn{links}, as +show below. + +@cindex network interface controller (NIC) +@cindex NIC, networking interface controller +Here is the simplest configuration, with only one network interface +controller (NIC) and only IPv4 connectivity: + +@example +;; Static networking for one NIC, IPv4-only. +(service static-networking-service-type + (list (static-networking + (addresses + (list (network-address + (device "eno1") + (value "10.0.2.15/24")))) + (routes + (list (network-route + (destination "default") + (gateway "10.0.2.2")))) + (name-servers '("10.0.2.3"))))) +@end example + +The snippet above can be added to the @code{services} field of your +operating system configuration (@pxref{Using the Configuration System}). +It will configure your machine to have 10.0.2.15 as its IP address, with +a 24-bit netmask for the local network---meaning that any 10.0.2.@var{x} +address is on the local area network (LAN). Traffic to addresses +outside the local network is routed @i{via} 10.0.2.2. Host names are +resolved by sending domain name system (DNS) queries to 10.0.2.3. @end defvr -@deffn {Scheme Procedure} static-networking-service @var{interface} @var{ip} @ - [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}] @ - [#:requirement @code{'(udev)}] -Return a service that starts @var{interface} with address @var{ip}. If -@var{netmask} is true, use it as the network mask. If @var{gateway} is true, -it must be a string specifying the default network gateway. @var{requirement} -can be used to declare a dependency on another service before configuring the -interface. - -This procedure can be called several times, one for each network -interface of interest. Behind the scenes what it does is extend -@code{static-networking-service-type} with additional network interfaces -to handle. +@deftp {Data Type} static-networking +This is the data type representing a static network configuration. -For example: +As an example, here is how you would declare the configuration of a +machine with a single network interface controller (NIC) available as +@code{eno1}, and with one IPv4 and one IPv6 address: @lisp -(static-networking-service "eno1" "192.168.1.82" - #:gateway "192.168.1.2" - #:name-servers '("192.168.1.2")) +;; Network configuration for one NIC, IPv4 + IPv6. +(static-networking + (addresses (list (network-address + (device "eno1") + (value "10.0.2.15/24")) + (network-address + (device "eno1") + (value "2001:123:4567:101::1/64")))) + (routes (list (network-route + (destination "default") + (gateway "10.0.2.2")) + (network-route + (destination "default") + (gateway "2020:321:4567:42::1")))) + (name-servers '("10.0.2.3"))) @end lisp -@end deffn -@cindex wicd -@cindex wireless -@cindex WiFi -@cindex network management -@deffn {Scheme Procedure} wicd-service [#:wicd @var{wicd}] -Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network -management daemon that aims to simplify wired and wireless networking. +If you are familiar with the @command{ip} command of the +@uref{https://wiki.linuxfoundation.org/networking/iproute2, +@code{iproute2} package} found on Linux-based systems, the declaration +above is equivalent to typing: -This service adds the @var{wicd} package to the global profile, providing -several commands to interact with the daemon and configure networking: -@command{wicd-client}, a graphical user interface, and the @command{wicd-cli} -and @command{wicd-curses} user interfaces. -@end deffn +@example +ip address add 10.0.2.15/24 dev eno1 +ip address add 2001:123:4567:101::1/64 dev eno1 +ip route add default via inet 10.0.2.2 +ip route add default via inet6 2020:321:4567:42::1 +@end example -@cindex ModemManager +Run @command{man 8 ip} for more info. Venerable GNU/Linux users will +certainly know how to do it with @command{ifconfig} and @command{route}, +but we'll spare you that. -@defvr {Scheme Variable} modem-manager-service-type -This is the service type for the -@uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager} -service. The value for this service type is a -@code{modem-manager-configuration} record. +The available fields of this data type are as follows: -This service is part of @code{%desktop-services} (@pxref{Desktop -Services}). -@end defvr +@table @asis +@item @code{addresses} +@itemx @code{links} (default: @code{'()}) +@itemx @code{routes} (default: @code{'()}) +The list of @code{network-address}, @code{network-link}, and +@code{network-route} records for this network (see below). -@deftp {Data Type} modem-manager-configuration -Data type representing the configuration of ModemManager. +@item @code{name-servers} (default: @code{'()}) +The list of IP addresses (strings) of domain name servers. These IP +addresses go to @file{/etc/resolv.conf}. -@table @asis -@item @code{modem-manager} (default: @code{modem-manager}) -The ModemManager package to use. +@item @code{provision} (default: @code{'(networking)}) +If true, this should be a list of symbols for the Shepherd service +corresponding to this network configuration. +@item @code{requirement} (default @code{'()}) +The list of Shepherd services depended on. @end table @end deftp -@cindex USB_ModeSwitch -@cindex Modeswitching +@deftp {Data Type} network-address +This is the data type representing the IP address of a network +interface. -@defvr {Scheme Variable} usb-modeswitch-service-type -This is the service type for the -@uref{https://www.draisberghof.de/usb_modeswitch/, USB_ModeSwitch} -service. The value for this service type is -a @code{usb-modeswitch-configuration} record. +@table @code +@item device +The name of the network interface for this address---e.g., +@code{"eno1"}. -When plugged in, some USB modems (and other USB devices) initially present -themselves as a read-only storage medium and not as a modem. They need to be -@dfn{modeswitched} before they are usable. The USB_ModeSwitch service type -installs udev rules to automatically modeswitch these devices when they are -plugged in. +@item value +The actual IP address and network mask, in +@uref{https://en.wikipedia.org/wiki/CIDR#CIDR_notation, @acronym{CIDR, +Classless Inter-Domain Routing} notation}, as a string. -This service is part of @code{%desktop-services} (@pxref{Desktop -Services}). -@end defvr +For example, @code{"10.0.2.15/24"} denotes IPv4 address 10.0.2.15 on a +24-bit sub-network---all 10.0.2.@var{x} addresses are on the same local +network. -@deftp {Data Type} usb-modeswitch-configuration -Data type representing the configuration of USB_ModeSwitch. +@item ipv6? +Whether @code{value} denotes an IPv6 address. By default this is +automatically determined. +@end table +@end deftp + +@deftp {Data Type} network-route +This is the data type representing a network route. @table @asis -@item @code{usb-modeswitch} (default: @code{usb-modeswitch}) -The USB_ModeSwitch package providing the binaries for modeswitching. +@item @code{destination} +The route destination (a string), either an IP address or +@code{"default"} to denote the default route. -@item @code{usb-modeswitch-data} (default: @code{usb-modeswitch-data}) -The package providing the device data and udev rules file used by -USB_ModeSwitch. +@item @code{source} (default: @code{#f}) +The route source. -@item @code{config-file} (default: @code{#~(string-append #$usb-modeswitch:dispatcher "/etc/usb_modeswitch.conf")}) -Which config file to use for the USB_ModeSwitch dispatcher. By default the -config file shipped with USB_ModeSwitch is used which disables logging to -@file{/var/log} among other default settings. If set to @code{#f}, no config -file is used. +@item @code{device} (default: @code{#f}) +The device used for this route---e.g., @code{"eno2"}. + +@item @code{ipv6?} (default: auto) +Whether this is an IPv6 route. By default this is automatically +determined based on @code{destination} or @code{gateway}. + +@item @code{gateway} (default: @code{#f}) +IP address (a string) through which traffic is routed. +@end table +@end deftp + +@deftp {Data Type} network-link +Data type for a network link (@pxref{Link,,, guile-netlink, +Guile-Netlink Manual}). + +@table @code +@item name +The name of the link---e.g., @code{"v0p0"}. + +@item type +A symbol denoting the type of the link---e.g., @code{'veth}. +@item arguments +List of arguments for this type of link. @end table @end deftp +@cindex loopback device +@defvr {Scheme Variable} %loopback-static-networking +This is the @code{static-networking} record representing the ``loopback +device'', @code{lo}, for IP addresses 127.0.0.1 and ::1, and providing +the @code{loopback} Shepherd service. +@end defvr + +@cindex networking, with QEMU +@cindex QEMU, networking +@defvr {Scheme Variable} %qemu-static-networking +This is the @code{static-networking} record representing network setup +when using QEMU's user-mode network stack on @code{eth0} (@pxref{Using +the user mode network stack,,, QEMU, QEMU Documentation}). +@end defvr + +@cindex DHCP, networking service +@defvr {Scheme Variable} dhcp-client-service-type +This is the type of services that run @var{dhcp}, a Dynamic Host Configuration +Protocol (DHCP) client, on all the non-loopback network interfaces. Its value +is the DHCP client package to use, @code{isc-dhcp} by default. +@end defvr + @cindex NetworkManager @defvr {Scheme Variable} network-manager-service-type @@ -17335,6 +17380,139 @@ List of additional command-line arguments to pass to the daemon. @end table @end deftp +@cindex wicd +@cindex wireless +@cindex WiFi +@cindex network management +@deffn {Scheme Procedure} wicd-service [#:wicd @var{wicd}] +Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network +management daemon that aims to simplify wired and wireless networking. + +This service adds the @var{wicd} package to the global profile, providing +several commands to interact with the daemon and configure networking: +@command{wicd-client}, a graphical user interface, and the @command{wicd-cli} +and @command{wicd-curses} user interfaces. +@end deffn + +@cindex ModemManager +Some networking devices such as modems require special care, and this is +what the services below focus on. + +@defvr {Scheme Variable} modem-manager-service-type +This is the service type for the +@uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager} +service. The value for this service type is a +@code{modem-manager-configuration} record. + +This service is part of @code{%desktop-services} (@pxref{Desktop +Services}). +@end defvr + +@deftp {Data Type} modem-manager-configuration +Data type representing the configuration of ModemManager. + +@table @asis +@item @code{modem-manager} (default: @code{modem-manager}) +The ModemManager package to use. + +@end table +@end deftp + +@cindex USB_ModeSwitch +@cindex Modeswitching + +@defvr {Scheme Variable} usb-modeswitch-service-type +This is the service type for the +@uref{https://www.draisberghof.de/usb_modeswitch/, USB_ModeSwitch} +service. The value for this service type is +a @code{usb-modeswitch-configuration} record. + +When plugged in, some USB modems (and other USB devices) initially present +themselves as a read-only storage medium and not as a modem. They need to be +@dfn{modeswitched} before they are usable. The USB_ModeSwitch service type +installs udev rules to automatically modeswitch these devices when they are +plugged in. + +This service is part of @code{%desktop-services} (@pxref{Desktop +Services}). +@end defvr + +@deftp {Data Type} usb-modeswitch-configuration +Data type representing the configuration of USB_ModeSwitch. + +@table @asis +@item @code{usb-modeswitch} (default: @code{usb-modeswitch}) +The USB_ModeSwitch package providing the binaries for modeswitching. + +@item @code{usb-modeswitch-data} (default: @code{usb-modeswitch-data}) +The package providing the device data and udev rules file used by +USB_ModeSwitch. + +@item @code{config-file} (default: @code{#~(string-append #$usb-modeswitch:dispatcher "/etc/usb_modeswitch.conf")}) +Which config file to use for the USB_ModeSwitch dispatcher. By default the +config file shipped with USB_ModeSwitch is used which disables logging to +@file{/var/log} among other default settings. If set to @code{#f}, no config +file is used. + +@end table +@end deftp + + +@node Networking Services +@subsection Networking Services + +The @code{(gnu services networking)} module discussed in the previous +section provides services for more advanced setups: providing a DHCP +service for others to use, filtering packets with iptables or nftables, +running a WiFi access point with @command{hostapd}, running the +@command{inetd} ``superdaemon'', and more. This section describes +those. + +@deffn {Scheme Procedure} dhcpd-service-type +This type defines a service that runs a DHCP daemon. To create a +service of this type, you must supply a @code{<dhcpd-configuration>}. +For example: + +@lisp +(service dhcpd-service-type + (dhcpd-configuration + (config-file (local-file "my-dhcpd.conf")) + (interfaces '("enp0s25")))) +@end lisp +@end deffn + +@deftp {Data Type} dhcpd-configuration +@table @asis +@item @code{package} (default: @code{isc-dhcp}) +The package that provides the DHCP daemon. This package is expected to +provide the daemon at @file{sbin/dhcpd} relative to its output +directory. The default package is the +@uref{https://www.isc.org/products/DHCP, ISC's DHCP server}. +@item @code{config-file} (default: @code{#f}) +The configuration file to use. This is required. It will be passed to +@code{dhcpd} via its @code{-cf} option. This may be any ``file-like'' +object (@pxref{G-Expressions, file-like objects}). See @code{man +dhcpd.conf} for details on the configuration file syntax. +@item @code{version} (default: @code{"4"}) +The DHCP version to use. The ISC DHCP server supports the values ``4'', +``6'', and ``4o6''. These correspond to the @code{dhcpd} program +options @code{-4}, @code{-6}, and @code{-4o6}. See @code{man dhcpd} for +details. +@item @code{run-directory} (default: @code{"/run/dhcpd"}) +The run directory to use. At service activation time, this directory +will be created if it does not exist. +@item @code{pid-file} (default: @code{"/run/dhcpd/dhcpd.pid"}) +The PID file to use. This corresponds to the @code{-pf} option of +@code{dhcpd}. See @code{man dhcpd} for details. +@item @code{interfaces} (default: @code{'()}) +The names of the network interfaces on which dhcpd should listen for +broadcasts. If this list is not empty, then its elements (which must be +strings) will be appended to the @code{dhcpd} invocation when starting +the daemon. It may not be necessary to explicitly specify any +interfaces here; see @code{man dhcpd} for details. +@end table +@end deftp + @cindex hostapd service, for Wi-Fi access points @cindex Wi-Fi access points, hostapd service @defvr {Scheme Variable} hostapd-service-type @@ -17397,6 +17575,7 @@ network that can be seen on @code{wlan0}, by default. The service's value is a @code{hostapd-configuration} record. @end defvr + @cindex iptables @defvr {Scheme Variable} iptables-service-type This is the service type to set up an iptables configuration. iptables is a @@ -20530,7 +20709,7 @@ a system which relies on @code{%desktop-services}, you may use (operating-system @dots{} - (services %my-desktop-services) + (services %my-desktop-services)) @end lisp @end defvr @@ -30642,11 +30821,18 @@ cluster node that supports multiple storage backends, and installs the "ganeti-instance-guix" "ganeti-instance-debootstrap")) %base-packages)) (services - (append (list (static-networking-service "eth0" "192.168.1.201" - #:netmask "255.255.255.0" - #:gateway "192.168.1.254" - #:name-servers '("192.168.1.252" - "192.168.1.253")) + (append (list (service static-networking-service-type + (list (static-networking + (addresses + (list (network-address + (device "eth0") + (value "192.168.1.201/24")))) + (routes + (list (network-route + (destination "default") + (gateway "192.168.1.254")))) + (name-servers '("192.168.1.252" + "192.168.1.253"))))) ;; Ganeti uses SSH to communicate between nodes. (service openssh-service-type diff --git a/etc/news.scm b/etc/news.scm index ff81e4d246..46bac0b625 100644 --- a/etc/news.scm +++ b/etc/news.scm @@ -25,6 +25,59 @@ (channel-news (version 0) + (entry (commit "223f1b1eb3707f1d3ef91200dd616ee6c8b77db0") + (title + (en "Improved static networking support on Guix System") + (fr "Meilleure prise en charge de réseaux statiques sur Guix System")) + (body + (en "Support for declarative static networking setup on Guix System +has been improved. It now allows you to list IPv4 and IPv6 addresses in +routes in a flexible way, similar to what you would do with the @command{ip} +command, but in a declarative fashion, as in this example: + +@lisp +;; Static networking for one NIC, IPv4-only. +(service static-networking-service-type + (list (static-networking + (addresses + (list (network-address + (device \"eno1\") + (value \"10.0.2.15/24\")))) + (routes + (list (network-route + (destination \"default\") + (gateway \"10.0.2.2\")))) + (name-servers '(\"10.0.2.3\"))))) +@end lisp + +The @code{static-networking-service} procedure remains available but is +deprecated. Run @command{info \"(guix) Networking Setup\"} for more +information.") + (fr "La configuration déclarative et statique du réseau est mieux +prise en charge sur Guix System. Il est maintenant possible d'énumérer des +adresses IPv6 et IPv4 et les chemins avec plus de flexibilité, un peu comme ce +qu'on peut faire avec la commande @command{ip} mais de manière déclarative, +comme dans cet exemple : + +@lisp +;; Réseau statique à une seule interface, IPv4 seulement. +(service static-networking-service-type + (list (static-networking + (addresses + (list (network-address + (device \"eno1\") + (value \"10.0.2.15/24\")))) + (routes + (list (network-route + (destination \"default\") + (gateway \"10.0.2.2\")))) + (name-servers '(\"10.0.2.3\"))))) +@end lisp + +La procédure @code{static-networking-service} reste disponible mais elle est +obsolète. Lancer @command{info \"(guix) Networking Setup\"} pour plus +d'informations."))) + (entry (commit "52cb5cf5b852117b5151a67af187d80764849ad3") (title (en "Icedove 91: profile folder moved to @file{~/.thunderbird}") diff --git a/gnu/build/hurd-boot.scm b/gnu/build/hurd-boot.scm index 8b27995438..ac36bd17d4 100644 --- a/gnu/build/hurd-boot.scm +++ b/gnu/build/hurd-boot.scm @@ -185,13 +185,9 @@ set." ("servers/crash-suspend" ("/hurd/crash" "--suspend")) ("servers/password" ("/hurd/password")) ("servers/socket/1" ("/hurd/pflocal")) - ("servers/socket/2" ("/hurd/pfinet" - "--interface" "eth0" - "--address" - "10.0.2.15" ;the default QEMU guest IP - "--netmask" "255.255.255.0" - "--gateway" "10.0.2.2" - "--ipv6" "/servers/socket/26")) + ;; /servers/socket/2 and /26 are created by 'static-networking-service'. + ;; XXX: Spawn pfinet without arguments on these nodes so that a DHCP + ;; client has someone to talk to? ("proc" ("/hurd/procfs" "--stat-mode=444")))) (define devices diff --git a/gnu/build/secret-service.scm b/gnu/build/secret-service.scm index 46dcf1b9c3..4e183e11e8 100644 --- a/gnu/build/secret-service.scm +++ b/gnu/build/secret-service.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2020 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2020, 2021 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> ;;; ;;; This file is part of GNU Guix. @@ -111,6 +111,15 @@ wait for at most HANDSHAKE-TIMEOUT seconds for handshake to complete. Return (close-port sock) #f)))) +(define (delete-file* file) + "Ensure FILE does not exist." + (catch 'system-error + (lambda () + (delete-file file)) + (lambda args + (unless (= ENOENT (system-error-errno args)) + (apply throw args))))) + (define (secret-service-receive-secrets port) "Listen to local PORT and wait for a secret service client to send secrets. Write them to the file system. Return the list of files installed on success, @@ -170,6 +179,12 @@ and #f otherwise." (log "installing file '~a' (~a bytes)...~%" file size) (mkdir-p (dirname file)) + + ;; It could be that FILE already exists, for instance + ;; because it has been created by a service's activation + ;; snippet (e.g., SSH host keys). Delete it. + (delete-file* file) + (call-with-output-file file (lambda (output) (dump port output size) diff --git a/gnu/local.mk b/gnu/local.mk index faaf428e9d..7e1cedf186 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1747,6 +1747,7 @@ dist_patch_DATA = \ %D%/packages/patches/rustc-1.39.0-src.patch \ %D%/packages/patches/rust-adblock-ignore-live-tests.patch \ %D%/packages/patches/rust-coresimd-doctest.patch \ + %D%/packages/patches/i3status-rust-enable-unstable-features.patch \ %D%/packages/patches/rust-ndarray-remove-blas-src-dep.patch \ %D%/packages/patches/rust-ndarray-0.13-remove-blas-src.patch \ %D%/packages/patches/rust-nettle-disable-vendor.patch \ @@ -1754,6 +1755,8 @@ dist_patch_DATA = \ %D%/packages/patches/rust-openssl-sys-no-vendor.patch \ %D%/packages/patches/rust-shell2batch-lint-fix.patch \ %D%/packages/patches/sbc-fix-build-non-x86.patch \ + %D%/packages/patches/sbcl-aserve-add-HTML-5-elements.patch \ + %D%/packages/patches/sbcl-aserve-fix-rfe12668.patch \ %D%/packages/patches/sbcl-burgled-batteries3-fix-signals.patch \ %D%/packages/patches/sbcl-clml-fix-types.patch \ %D%/packages/patches/sbcl-png-fix-sbcl-compatibility.patch \ diff --git a/gnu/packages/astronomy.scm b/gnu/packages/astronomy.scm index 0f0390054b..9675d09c6e 100644 --- a/gnu/packages/astronomy.scm +++ b/gnu/packages/astronomy.scm @@ -8,6 +8,7 @@ ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com> ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net> ;;; Copyright © 2021 Greg Hogan <code@greghogan.com> +;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -1099,6 +1100,68 @@ more.") license:lgpl2.0+ license:lgpl2.1+)))) +(define-public sunclock + (let ((commit "f4106eb0a81f7594726d6b2859efd8fc64cc1225") + (revision "1")) + (package + (name "sunclock") + (version (git-version "3.57" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/nongiach/Sunclock") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1rczdpmhvfw57b9r793vq8vqlbdhlkgj52fxwrdfl6cwj95a9kv2")))) + (build-system gnu-build-system) + (arguments + `(#:make-flags + (list (string-append "DESTDIR=" %output) + ;; Fix incorrect argument given to gcc. Error message: + ;; "gcc: error: DefaultGcc2AMD64Opt: No such file or directory" + "CDEBUGFLAGS=") + #:phases + (modify-phases %standard-phases + (replace 'configure + (lambda _ + (chdir "sunclock-3.57") + (substitute* "Imakefile" + (("^MANDIR=/X11R6/man/man1") + "MANDIR=/share/man/man1") + (("^BINDIR=/X11R6/bin") + "BINDIR=/bin") + ;; Disable ZLIB support for vmf files because zlib implements + ;; `gzgetc` as a macro instead of a function, which results in + ;; a compilation error. + ((" -DZLIB") "") + ((" -lz") "") + (("cd \\$\\(DESTDIR\\)\\$\\(SHAREDIR\\)/earthmaps/vmf ; \ +gzip -f \\*.vmf") + "")) + ;; Generate Makefile. + (invoke "xmkmf")))) + #:tests? #f)) ; No check target. + (inputs + `(("libjpeg-turbo" ,libjpeg-turbo) + ("libpng" ,libpng) + ("libx11" ,libx11) + ("libxpm" ,libxpm))) + (native-inputs + `(("imake" ,imake))) + (home-page "https://github.com/nongiach/Sunclock") + (synopsis + "Map of the Earth that shows which portion is illuminated by the Sun") + (description + "Sunclock displays a map of the Earth and shows which portion is +illuminated by the Sun. It can commute between two states, the \"clock window\" +and the \"map window\". The clock window displays a small map of the Earth and +therefore occupies little space on the screen, while the \"map window\" displays +a large map and offers more advanced functions: local time of cities, Sun and +Moon position, etc.") + (license license:gpl2+)))) + (define-public python-jplephem (package (name "python-jplephem") diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm index 4dd813b73a..43259c5989 100644 --- a/gnu/packages/audio.scm +++ b/gnu/packages/audio.scm @@ -4948,7 +4948,7 @@ as is the case with audio plugins.") (define-public carla (package (name "carla") - (version "2.1.1") + (version "2.4.1") (source (origin (method git-fetch) @@ -4958,8 +4958,7 @@ as is the case with audio plugins.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 - "0c3y4a6cgi4bv1mg57i3qn5ia6pqjqlaylvkapj6bmpsw71ig22g")))) + (base32 "01ngkmfcxyg1bb4qmfvlkkjbx4lx62akxqhizl8zmqnhfcy4p9bx")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; no "check" target diff --git a/gnu/packages/bioconductor.scm b/gnu/packages/bioconductor.scm index a25f56ad02..44bf5c7d24 100644 --- a/gnu/packages/bioconductor.scm +++ b/gnu/packages/bioconductor.scm @@ -1518,6 +1518,36 @@ data. In addition, provides numerous plotting functions for commonly used visualizations.") (license license:artistic2.0))) +(define-public r-dearseq + (package + (name "r-dearseq") + (version "1.6.0") + (source + (origin + (method url-fetch) + (uri (bioconductor-uri "dearseq" version)) + (sha256 + (base32 + "07vr27rv3z86ajd62c0ilvfgz9z35qsiwwi5pv4sygbhnnjwh3rc")))) + (build-system r-build-system) + (propagated-inputs + `(("r-ggplot2" ,r-ggplot2) + ("r-kernsmooth" ,r-kernsmooth) + ("r-matrixstats" ,r-matrixstats) + ("r-patchwork" ,r-patchwork) + ("r-pbapply" ,r-pbapply) + ("r-statmod" ,r-statmod) + ("r-survey" ,r-survey) + ("r-viridislite" ,r-kernsmooth))) + (home-page "https://github.com/borishejblum/dearseq") + (synopsis "DEA for RNA-seq data through a robust variance component test") + (description + "This is a package for Differential Expression Analysis of RNA-seq data. +It features a variance component score test accounting for data +heteroscedasticity through precision weights. Perform both gene-wise and gene +set analyses, and can deal with repeated or longitudinal data.") + (license license:gpl2))) + (define-public r-decipher (package (name "r-decipher") @@ -1638,6 +1668,41 @@ spent loading the full derfinder package when running the F-statistics calculation in parallel.") (license license:artistic2.0))) +(define-public r-drimseq + (package + (name "r-drimseq") + (version "1.22.0") + (source + (origin + (method url-fetch) + (uri (bioconductor-uri "DRIMSeq" version)) + (sha256 + (base32 "0y2jb0hb633id038zmwnfny6h4ai77fdyy02f77vha1z8xg5nl02")))) + (properties `((upstream-name . "DRIMSeq"))) + (build-system r-build-system) + (propagated-inputs + `(("r-biocgenerics" ,r-biocgenerics) + ("r-biocparallel" ,r-biocparallel) + ("r-edger" ,r-edger) + ("r-genomicranges" ,r-genomicranges) + ("r-ggplot2" ,r-ggplot2) + ("r-iranges" ,r-iranges) + ("r-limma" ,r-limma) + ("r-mass" ,r-mass) + ("r-reshape2" ,r-reshape2) + ("r-s4vectors" ,r-s4vectors))) + (native-inputs `(("r-knitr" ,r-knitr))) + (home-page "https://bioconductor.org/packages/DRIMSeq") + (synopsis "Differential transcript usage and tuQTL analyses with Dirichlet-multinomial model in RNA-seq") + (description + "The package provides two frameworks. One for the differential +transcript usage analysis between different conditions and one for the tuQTL +analysis. Both are based on modeling the counts of genomic features (i.e., +transcripts) with the Dirichlet-multinomial distribution. The package also +makes available functions for visualization and exploration of the data and +results.") + (license license:gpl3+))) + (define-public r-bluster (package (name "r-bluster") @@ -1721,6 +1786,59 @@ naming and share the same rich and consistent \"Vector API\" as much as possible.") (license license:artistic2.0))) +(define-public r-isoformswitchanalyzer + (package + (name "r-isoformswitchanalyzer") + (version "1.16.0") + (source + (origin + (method url-fetch) + (uri (bioconductor-uri "IsoformSwitchAnalyzeR" version)) + (sha256 + (base32 "14bqf39gw5ab5r9sr3afkig1jbzdvds1bmcvc6bpb45kschx7fwf")))) + (properties `((upstream-name . "IsoformSwitchAnalyzeR"))) + (build-system r-build-system) + (propagated-inputs + `(("r-biobase" ,r-biobase) + ("r-biocgenerics" ,r-biocgenerics) + ("r-biostrings" ,r-biostrings) + ("r-bsgenome" ,r-bsgenome) + ("r-dbi" ,r-dbi) + ("r-dexseq" ,r-dexseq) + ("r-dplyr" ,r-dplyr) + ("r-drimseq" ,r-drimseq) + ("r-edger" ,r-edger) + ("r-futile-logger" ,r-futile-logger) + ("r-genomeinfodb" ,r-genomeinfodb) + ("r-genomicranges" ,r-genomicranges) + ("r-ggplot2" ,r-ggplot2) + ("r-gridextra" ,r-gridextra) + ("r-iranges" ,r-iranges) + ("r-limma" ,r-limma) + ("r-magrittr" ,r-magrittr) + ("r-plyr" ,r-plyr) + ("r-rcolorbrewer" ,r-rcolorbrewer) + ("r-rcurl" ,r-rcurl) + ("r-readr" ,r-readr) + ("r-reshape2" ,r-reshape2) + ("r-rtracklayer" ,r-rtracklayer) + ("r-stringr" ,r-stringr) + ("r-tibble" ,r-tibble) + ("r-tximeta" ,r-tximeta) + ("r-tximport" ,r-tximport) + ("r-venndiagram" ,r-venndiagram) + ("r-xvector" ,r-xvector))) + (native-inputs + `(("r-knitr" ,r-knitr))) + (home-page "https://bioconductor.org/packages/IsoformSwitchAnalyzeR/") + (synopsis "Analyze alternative splicing in RNA-seq data") + (description + "This is a package for the analysis of alternative splicing and isoform +switches with predicted functional consequences (e.g. gain/loss of protein +domains etc.) from quantification of all types of RNASeq by tools such as +Kallisto, Salmon, StringTie, Cufflinks/Cuffdiff etc.") + (license license:gpl2+))) + ;; This is a CRAN package, but it depends on r-biobase and r-limma from Bioconductor. (define-public r-absfiltergsea (package @@ -6734,6 +6852,37 @@ required source code files from the official Leidenalg distribution and several functions from the R igraph package.") (license license:gpl3+)))) +(define-public r-sanssouci + ;; sansscouci doesn't have a (versioned) release yet. + ;; This is the latest commit as of packaging for Guix. + (let ((commit "5fe20a9aaf4ac637fa83d9cc73ff1c22de97ca6f") + (revision "1")) + (package + (name "r-sanssouci") + (version (git-version "0" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/pneuvial/sanssouci.git") + (commit commit))) + (sha256 + (base32 + "13ycdd790qw64qy2zdvcrpj3fc8as628rsly32438d3rifnlc5sk")))) + (build-system r-build-system) + (propagated-inputs + `(("r-generics" ,r-generics) + ("r-matrix" ,r-matrix) + ("r-matrixstats" ,r-matrixstats) + ("r-rcpp" ,r-rcpp) + ("r-rcpparmadillo" ,r-rcpparmadillo))) + (home-page "https://pneuvial.github.io/sanssouci") + (synopsis "Post Hoc multiple testing inference") + (description + "The goal of sansSouci is to perform post hoc inference: in a multiple +testing context, sansSouci provides statistical guarantees on possibly +user-defined and/or data-driven sets of hypotheses.") + (license license:gpl3)))) + (define-public r-monocle3 (package (name "r-monocle3") diff --git a/gnu/packages/dunst.scm b/gnu/packages/dunst.scm index 9a9783a1ce..2449620891 100644 --- a/gnu/packages/dunst.scm +++ b/gnu/packages/dunst.scm @@ -39,7 +39,7 @@ (define-public dunst (package (name "dunst") - (version "1.7.1") + (version "1.7.3") (source (origin (method git-fetch) (uri (git-reference @@ -48,7 +48,7 @@ (file-name (git-file-name name version)) (sha256 (base32 - "0v15fhwzcg7zfn092sry0f4qb6dccz9bb312y9dadg745wf3n9qw")))) + "1ra0ii805w3rrs0qqbjxzl6i79ksz42lnvbglw18h4igkza21kzj")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; no check target diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 392b4a5d8f..71d1885079 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -13863,6 +13863,39 @@ commands are bound to keys reachable with the left hand and movement keys are reached with the right hand.") (license license:gpl3+))) +(define-public emacs-cc-mode + (package + (name "emacs-cc-mode") + (version "5.35") + (source + (origin + (method hg-fetch) + (uri (hg-reference + (url "http://hg.code.sf.net/p/cc-mode/cc-mode") + (changeset + (string-append "Release_" + (string-replace-substring version "." "_"))))) + (file-name (hg-file-name name version)) + (sha256 + (base32 "03cvl61baccx57zd62nz2wy4hvij5hl2syg7byaxgrs4c7grr414")))) + (build-system emacs-build-system) + (arguments + '(#:tests? #t + #:test-command '("make" "test") + #:phases + (modify-phases %standard-phases + (add-before 'install 'make-info + (lambda _ + (invoke "make" "info")))))) + (native-inputs + `(("texinfo" ,texinfo))) + (home-page "http://cc-mode.sourceforge.net/") + (synopsis "Framework for creating major modes for C-style languages") + (description + "CC Mode is an Emacs and XEmacs mode for editing C and other languages with +similar syntax; currently C++, Objective-C, Java, CORBA's IDL, Pike, and AWK.") + (license license:gpl3+))) + (define-public emacs-csharp-mode (package (name "emacs-csharp-mode") @@ -21400,30 +21433,27 @@ package recipes.") (license license:gpl3+))) (define-public emacs-dpd - ;; XXX: Upstream does not use tag yet. Version is extracted from "dpd.el". - (let ((commit "f53f251a58859f375617ce4f257fecc83c8ca5da") - (revision "0")) - (package - (name "emacs-dpd") - (version (git-version "0.1.0" revision commit)) - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://gitlab.com/lilyp/emacs-dpd") - (commit commit))) - (file-name (git-file-name name version)) - (sha256 - (base32 "1nislvaxjb53x2ah330szcca4d595npx6zxrrwa5xximj6365wk0")))) - (build-system emacs-build-system) - (propagated-inputs - `(("emacs-packed" ,emacs-packed))) - (home-page "https://gitlab.com/lilyp/emacs-dpd") - (synopsis "Deliver packages to package.el") - (description - "This package provides tools for generating package-desc structures and + (package + (name "emacs-dpd") + (version "0.2.1") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://gitlab.com/lilyp/emacs-dpd") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0wrqmpfcqp87dr5blpskf9kvm9slvffldqfxx77n15gcw516zzc8")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-packed" ,emacs-packed))) + (home-page "https://gitlab.com/lilyp/emacs-dpd") + (synopsis "Deliver packages to package.el") + (description + "This package provides tools for generating package-desc structures and feeding them to package.el library.") - (license license:gpl3+)))) + (license license:gpl3+))) (define-public emacs-picpocket (let ((version "41") @@ -27135,55 +27165,57 @@ other @code{helm-type-file} sources such as @code{helm-locate}.") (license license:gpl3+))) (define-public emacs-telega-server - (package - (name "emacs-telega-server") - (version "0.7.031") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/zevlg/telega.el") - (commit (string-append "v" version)))) - (sha256 - (base32 "05j82796s4k3yr0igl6hir3p8qj0cw66vvhbpbcy28d6q9v9vjjz")) - (file-name (git-file-name "emacs-telega" version)) - (patches - (search-patches "emacs-telega-path-placeholder.patch" - "emacs-telega-test-env.patch")))) - (build-system gnu-build-system) - (arguments - `(#:make-flags - (list (string-append "CC=" ,(cc-for-target)) - (string-append "INSTALL_PREFIX=" - (assoc-ref %outputs "out") "/bin")) - #:phases - (modify-phases %standard-phases - (add-before 'configure 'enter-subdirectory - (lambda _ (chdir "server") #t)) - (replace 'configure - (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) - (substitute* "run_tests.py" - (("^(TELEGA_SERVER = ).*$" _all prefix) - (string-append prefix - "\"" out "/bin/telega-server\"\n")))))) - (delete 'check) - (add-after 'install 'check - (assoc-ref %standard-phases 'check)) - (add-before 'install-license-files 'leave-subdirectory - (lambda _ (chdir "..") #t))) - #:test-target "test")) - (inputs - `(("tdlib" ,tdlib) - ("libappindicator" ,libappindicator))) - (native-inputs - `(("python" ,python) - ("pkg-config" ,pkg-config))) - (home-page "https://zevlg.github.io/telega.el/") - (synopsis "Server process of Telega") - (description "Telega-server is helper program to interact with Telegram + (let ((commit "b4a5e206bd259f3d7f7633a725b2990704d6a1e8") + (revision "1")) + (package + (name "emacs-telega-server") + (version (git-version "0.7.15" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/zevlg/telega.el") + (commit commit))) + (sha256 + (base32 "0gr4nmpk175hxmj357bpzaqywbjc6dmmvfxnyzkh884vyzbwdxlc")) + (file-name (git-file-name "emacs-telega" version)) + (patches + (search-patches "emacs-telega-path-placeholder.patch" + "emacs-telega-test-env.patch")))) + (build-system gnu-build-system) + (arguments + `(#:make-flags + (list (string-append "CC=" ,(cc-for-target)) + (string-append "INSTALL_PREFIX=" + (assoc-ref %outputs "out") "/bin")) + #:phases + (modify-phases %standard-phases + (add-before 'configure 'enter-subdirectory + (lambda _ (chdir "server"))) + (replace 'configure + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (substitute* "run_tests.py" + (("^(TELEGA_SERVER = ).*$" _all prefix) + (string-append prefix + "\"" out "/bin/telega-server\"\n")))))) + (delete 'check) + (add-after 'install 'check + (assoc-ref %standard-phases 'check)) + (add-before 'install-license-files 'leave-subdirectory + (lambda _ (chdir "..")))) + #:test-target "test")) + (inputs + `(("tdlib" ,tdlib) + ("libappindicator" ,libappindicator))) + (native-inputs + `(("python" ,python) + ("pkg-config" ,pkg-config))) + (home-page "https://zevlg.github.io/telega.el/") + (synopsis "Server process of Telega") + (description "Telega-server is helper program to interact with Telegram service, and connect it with Emacs via inter-process communication.") - (license license:gpl3+))) + (license license:gpl3+)))) (define-public emacs-telega (package @@ -27217,7 +27249,7 @@ service, and connect it with Emacs via inter-process communication.") "\"" ffmpeg-bin "\")")))))) (add-after 'unpack 'configure (lambda* (#:key inputs outputs #:allow-other-keys) - (substitute* "telega-server.el" + (substitute* "telega-customize.el" (("@TELEGA_SERVER_BIN@") (search-input-file inputs "/bin/telega-server"))) (substitute* "telega-util.el" @@ -29737,7 +29769,7 @@ released, and track their progress in watching a series.") (define-public emacs-webpaste (package (name "emacs-webpaste") - (version "3.2.1") + (version "3.2.2") (source (origin (method git-fetch) @@ -29746,8 +29778,7 @@ released, and track their progress in watching a series.") (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 - "1d481pdnh7cnbyka7wn59czlci63zwfqms8n515svg92qm573ckd")))) + (base32 "07hj9nr7x6c9w2dnvc58cfbprgp9cqzdxflp5qlpglzdw0bi9s3c")))) (build-system emacs-build-system) (arguments `(#:tests? #t diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm index 9ab860c9a1..6686ab482c 100644 --- a/gnu/packages/finance.scm +++ b/gnu/packages/finance.scm @@ -92,7 +92,9 @@ #:use-module (gnu packages libusb) #:use-module (gnu packages linux) #:use-module (gnu packages man) + #:use-module (gnu packages maths) #:use-module (gnu packages multiprecision) + #:use-module (gnu packages ncurses) #:use-module (gnu packages networking) #:use-module (gnu packages pkg-config) #:use-module (gnu packages popt) @@ -106,6 +108,7 @@ #:use-module (gnu packages qt) #:use-module (gnu packages readline) #:use-module (gnu packages sphinx) + #:use-module (gnu packages tex) #:use-module (gnu packages texinfo) #:use-module (gnu packages textutils) #:use-module (gnu packages time) @@ -1839,6 +1842,37 @@ local, single-user UI, or as a multi-user UI for viewing, adding, and editing on the Web.") (license license:gpl3))) +(define-public optionmatrix + (package + (name "optionmatrix") + (version "1.4.3") + (source + (origin + (method url-fetch) + (uri (string-append + "mirror://sourceforge/optionmatrix/optionmatrix-" + version ".tar.xz")) + (sha256 + (base32 "1zd0pfiphnijh1l94swb3mjrpmjsn37z11mklamd7zw6h2d4zh4d")))) + (build-system gnu-build-system) + (inputs + `(("gsl" ,gsl) + ("gtk3" ,gtk+) + ("ncurses" ,ncurses))) + (native-inputs + `(("pkg-config" ,pkg-config) + ("texinfo" ,texinfo) + ("texlive" ,(texlive-union (list texlive-epsf + texlive-tex-texinfo))))) + (home-page "https://anthonybradford.github.io/optionmatrix/") + (synopsis "Financial derivative calculator") + (description + "The OptionMatrix programs are financial derivative calculators. These +calculators are real-time multi-model option chain pricers with analytics and +interactive controls. This package provides a GTK+ graphical user interface +(@code{optionmatrix}) and a curses interface (@code{optionmatrix_console}).") + (license license:gpl3+))) + (define-public python-ta-lib (package (name "python-ta-lib") diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm index 0cd8dbd788..bbc6b53677 100644 --- a/gnu/packages/gnuzilla.scm +++ b/gnu/packages/gnuzilla.scm @@ -1335,11 +1335,11 @@ standards of the IceCat project.") (cpe-version . ,(first (string-split version #\-))))))) ;; Update this together with icecat! -(define %icedove-build-id "20211119000000") ;must be of the form YYYYMMDDhhmmss +(define %icedove-build-id "20211207000000") ;must be of the form YYYYMMDDhhmmss (define-public icedove (package (name "icedove") - (version "91.3.2") + (version "91.4.0") (source icecat-source) (properties `((cpe-name . "thunderbird_esr"))) @@ -1620,7 +1620,7 @@ standards of the IceCat project.") ;; in the Thunderbird release tarball. We don't use the release ;; tarball because it duplicates the Icecat sources and only adds the ;; "comm" directory, which is provided by this repository. - ,(let ((changeset "c35def313c0c2bd0341e3e058f862f02390269c4")) + ,(let ((changeset "ab6dfcf3a37bf53aac1a9d632d45ee51047050bb")) (origin (method hg-fetch) (uri (hg-reference @@ -1629,7 +1629,7 @@ standards of the IceCat project.") (file-name (string-append "thunderbird-" version "-checkout")) (sha256 (base32 - "0rp4i353dskx065a6hskvfpf0l2qywqnivks9qc6a85h4yah4rvq"))))) + "00zj1k3c8p66ylf9n7xp42y6kiv3h6hf8ba7bk6f8wj3hh0r2hrd"))))) ("cargo" ,rust "cargo") ("clang" ,clang) ("llvm" ,llvm) diff --git a/gnu/packages/graphviz.scm b/gnu/packages/graphviz.scm index 16fbfb6842..19a777fec9 100644 --- a/gnu/packages/graphviz.scm +++ b/gnu/packages/graphviz.scm @@ -10,6 +10,7 @@ ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com> ;;; Copyright © 2020 Pjotr Prins <pjotr.guix@thebird.nl> ;;; Copyright © 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com> +;;; Copyright © 2021 Giacomo Leidi <goodoldpaul@autistici.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -442,3 +443,45 @@ This approach allows: @item Using backend specific styles to customize the output @end itemize") (license license:expat))) + +(define-public gprof2dot + (package + (name "gprof2dot") + (version "2021.02.21") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/jrfonseca/gprof2dot") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1jjhsjf5fdi1fkn7mvhnzkh6cynl8gcjrygd3cya5mmda3akhzic")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda* (#:key inputs outputs tests? #:allow-other-keys) + (when tests? + (add-installed-pythonpath inputs outputs) + (invoke "python" "tests/test.py"))))))) + (native-inputs + `(("graphviz" ,graphviz))) + (home-page "https://github.com/jrfonseca/gprof2dot") + (synopsis "Generate a dot graph from the output of several profilers") + (description "This package provides a Python script to convert the output +from many profilers into a dot graph. + +It can: + +@itemize + +@item prune nodes and edges below a certain threshold; +@item use an heuristic to propagate time inside mutually recursive functions; +@item use color efficiently to draw attention to hot-spots; +@item work on any platform where Python and Graphviz is available. + +@end itemize") + (license license:lgpl3+))) diff --git a/gnu/packages/groovy.scm b/gnu/packages/groovy.scm index 73a62e1045..ecbd0cb0bd 100644 --- a/gnu/packages/groovy.scm +++ b/gnu/packages/groovy.scm @@ -102,7 +102,7 @@ ("java-asm-util" ,java-asm-util-8) ("java-classpathx-servletapi" ,java-classpathx-servletapi) ("java-commons-cli" ,java-commons-cli) - ("java-jansi" ,java-jansi) + ("java-jansi" ,java-jansi-1) ("java-jline-2" ,java-jline-2) ("java-picocli" ,java-picocli) ("java-xstream" ,java-xstream))) diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm index 03c3c08171..01a25abee9 100644 --- a/gnu/packages/guile-xyz.scm +++ b/gnu/packages/guile-xyz.scm @@ -556,7 +556,7 @@ you send to a FIFO file.") (define-public guile-dsv (package (name "guile-dsv") - (version "0.4.0") + (version "0.5.0") (source (origin (method git-fetch) (uri (git-reference @@ -565,7 +565,7 @@ you send to a FIFO file.") (file-name (string-append name "-" version "-checkout")) (sha256 (base32 - "1mvyc8i38j56frjh3p6vwziv8lrzlyqndz30663h5nwcp0044sdn")))) + "0s9zan08ala7432pn44z3vmb3sc19rf18zfr9mskydnam5xn6qlw")))) (build-system gnu-build-system) (native-inputs `(("autoconf" ,autoconf) @@ -581,21 +581,6 @@ you send to a FIFO file.") #:imported-modules ((guix build guile-build-system) ,@%gnu-build-system-modules) #:phases (modify-phases %standard-phases - (add-before 'configure 'set-guilesitedir - (lambda _ - (substitute* "Makefile.in" - (("^guilesitedir =.*$") - "guilesitedir = \ -$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n")) - (substitute* "modules/Makefile.in" - (("^guilesitedir =.*$") - "guilesitedir = \ -$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n")) - (substitute* "modules/dsv/Makefile.in" - (("^guilesitedir =.*$") - "guilesitedir = \ -$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n")) - #t)) (add-after 'install 'wrap-program (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) @@ -4783,14 +4768,13 @@ locations.") (base32 "0jcl6mzqy04if5drflmygmggbgzsxa42mlmskqb3cfqmksq0zj0y")))) (build-system gnu-build-system) - (arguments - `(#:tests? #f)); no tests (inputs `(("guile" ,guile-3.0))) (native-inputs `(("automake" ,automake) ("autoconf" ,autoconf) ("pkg-config" ,pkg-config) + ("guile" ,guile-3.0) ;for 'guild compile' + guile.m4 ("texinfo" ,texinfo))) (home-page "https://git.lepiller.eu/guile-netlink") (synopsis "Netlink protocol implementation for Guile") diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm index b929cb9381..c5f78750e3 100644 --- a/gnu/packages/java.scm +++ b/gnu/packages/java.scm @@ -7901,14 +7901,14 @@ JavaMail API.") (define-public java-log4j-api (package (name "java-log4j-api") - (version "2.4.1") + (version "2.15.0") (source (origin (method url-fetch) (uri (string-append "mirror://apache/logging/log4j/" version "/apache-log4j-" version "-src.tar.gz")) (sha256 (base32 - "0j5p9gik0jysh37nlrckqbky12isy95cpwg2gv5fas1rcdqbraxd")))) + "0h4ndw096h9cql0kyi1zd0ymp8hqxc1jdgdxkn0kxf8vd9b4dx14")))) (build-system ant-build-system) (arguments `(#:tests? #f ; tests require unpackaged software @@ -7929,6 +7929,7 @@ JavaMail API.") `(("java-osgi-core" ,java-osgi-core) ("java-hamcrest-core" ,java-hamcrest-core) ("java-junit" ,java-junit))) + (properties '((cpe-name . "log4j"))) (home-page "https://logging.apache.org/log4j/2.x/") (synopsis "API module of the Log4j logging framework for Java") (description @@ -7946,7 +7947,11 @@ Java.") ("java-log4j-api" ,java-log4j-api) ("java-mail" ,java-mail) ("java-jboss-jms-api-spec" ,java-jboss-jms-api-spec) + ("java-conversant-disruptor" ,java-conversant-disruptor) ("java-lmax-disruptor" ,java-lmax-disruptor) + ("java-jctools-core" ,java-jctools-core-1) + ("java-stax2-api" ,java-stax2-api) + ("java-jansi" ,java-jansi) ("java-kafka" ,java-kafka-clients) ("java-datanucleus-javax-persistence" ,java-datanucleus-javax-persistence) ("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations) @@ -7993,6 +7998,7 @@ logging framework for Java."))) (inputs `(("log4j-api" ,java-log4j-api) ("log4j-core" ,java-log4j-core) + ("java-jboss-jms-api-spec" ,java-jboss-jms-api-spec) ("osgi-core" ,java-osgi-core) ("eclipse-osgi" ,java-eclipse-osgi) ("java-lmax-disruptor" ,java-lmax-disruptor))))) @@ -11377,15 +11383,16 @@ programming language.") (define-public java-lmax-disruptor (package (name "java-lmax-disruptor") - (version "3.3.7") + (version "3.4.4") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/LMAX-Exchange/disruptor/" - "archive/" version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/LMAX-Exchange/disruptor") + (commit version))) + (file-name (git-file-name name version)) (sha256 (base32 - "17da2gwj5abnlsfgn2xqjk5lgzbg4vkb0hdv2dvc8r2fx4bi7w3g")))) + "02c5kp3n8a73dq9ay7ar53s1k3x61z9yzc5ikqb03m6snr1wpfqn")))) (build-system ant-build-system) (arguments `(#:jar-name "java-lmax-disruptor.jar" @@ -11409,6 +11416,68 @@ for high performance inter-thread communication that avoids the need for message queues or resource locking.") (license license:asl2.0))) +(define-public java-conversant-disruptor + (package + (name "java-conversant-disruptor") + (version "1.2.19") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/conversant/disruptor") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0gx1dm7sfg7pa05cs4qby10gfcplai5b5lf1f7ik1a76dh3vhl0g")))) + (build-system ant-build-system) + (arguments + `(#:jar-name "java-conversant-disruptor.jar" + #:source-dir "src/main/java" + #:phases + (modify-phases %standard-phases + (add-before 'build 'copy-resources + (lambda _ + (copy-recursively "src/main/resources" "build/classes"))) + (add-before 'build 'remove-module + (lambda _ + (delete-file "src/main/java/module-info.java")))))) + (native-inputs + `(("java-junit" ,java-junit))) + (home-page "https://github.com/conversant/disruptor") + (synopsis "High performance intra-thread communication") + (description "Conversant Disruptor is the highest performing intra-thread +transfer mechanism available in Java. Conversant Disruptor is an implementation +of this type of ring buffer that has almost no overhead and that exploits a +particularly simple design.") + (license license:asl2.0))) + +(define-public java-jctools-core-1 + (package + (name "java-jctools-core") + (version "1.2.1") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/JCTools/JCTools") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "105my29nwd4djvdllmq8s3jdzbyplbkxzwmddxiiilb4yqr1pghb")))) + (build-system ant-build-system) + (arguments + `(#:jar-name "java-jctools-core.jar" + #:source-dir "jctools-core/src/main/java" + #:test-dir "jctools-core/src/test")) + (native-inputs + `(("java-junit" ,java-junit) + ("java-hamcrest-all" ,java-hamcrest-all))) + (home-page "https://github.com/JCTools/JCTools") + (synopsis "Concurrency tools for Java") + (description "This library implements concurrent data structures that are +not natively available in Java.") + (license license:asl2.0))) + (define-public java-commons-bcel (package (name "java-commons-bcel") @@ -12193,17 +12262,81 @@ console output.") (define-public java-jansi (package (name "java-jansi") - (version "1.16") + (version "2.4.0") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/fusesource/jansi/archive/" - "jansi-project-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/fusesource/jansi") + (commit (string-append "jansi-" version)))) + (file-name (git-file-name name version)) (sha256 (base32 - "11kh3144i3fzp21dpy8zg52mjmsr214k7km9p8ly0rqk2px0qq2z")))) + "1s6fva06990798b5fyxqzr30zwyj1byq5wrm54j2larcydaryggf")) + (modules '((guix build utils))) + (snippet + ;; contains pre-compiled libraries + '(delete-file-recursively + "src/main/resources/org/fusesource/jansi/internal")))) (build-system ant-build-system) (arguments `(#:jar-name "jansi.jar" + #:source-dir "src/main/java" + #:test-dir "src/test" + #:tests? #f; require junit 3 + #:phases + (modify-phases %standard-phases + (add-before 'build 'build-native + (lambda* (#:key inputs #:allow-other-keys) + (with-directory-excursion "src/main/native" + (for-each + (lambda (cfile) + (let ((cfile (basename cfile)) + (ofile (string-append (basename cfile ".c") ".o"))) + (invoke ,(cc-for-target) "-c" cfile "-o" ofile + (string-append "-I" (assoc-ref inputs "jdk") + "/include/linux") + "-fPIC" "-O2"))) + (find-files "." "\\.c$")) + (apply invoke ,(cc-for-target) "-o" "libjansi.so" "-shared" + (find-files "." "\\.o$"))))) + (add-before 'build 'install-native + (lambda _ + (let ((dir (string-append "build/classes/org/fusesource/" + "jansi/internal/native/" + ,(match (or (%current-target-system) (%current-system)) + ("i686-linux" "Linux/x86") + ("x86_64-linux" "Linux/x86_64") + ("armhf-linux" "Linux/armv7") + ("aarch64-linux" "Linux/arm64") + ("mips64el-linux" "Linux/mips64") + (_ "unknown-kernel"))))) + (install-file "src/main/native/libjansi.so" dir)))) + (add-before 'build 'copy-resources + (lambda _ + (copy-recursively "src/main/resources" "build/classes"))) + (replace 'install + (install-from-pom "pom.xml"))))) + (home-page "https://fusesource.github.io/jansi/") + (synopsis "Portable ANSI escape sequences") + (description "Jansi is a Java library that allows you to use ANSI escape +sequences to format your console output which works on every platform.") + (license license:asl2.0))) + +(define-public java-jansi-1 + (package + (inherit java-jansi) + (version "1.16") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/fusesource/jansi") + (commit (string-append "jansi-project-" version)))) + (file-name (git-file-name "jansi" version)) + (sha256 + (base32 + "0ikk0x352gh30b42qn1jd89xwsjj0mavrc5kms7fss15bd8vsayx")))) + (arguments + `(#:jar-name "jansi.jar" #:source-dir "jansi/src/main/java" #:test-dir "jansi/src/test" #:phases @@ -12232,12 +12365,7 @@ console output.") `(("java-jansi-native" ,java-jansi-native))) (native-inputs `(("java-junit" ,java-junit) - ("java-hamcrest-core" ,java-hamcrest-core))) - (home-page "https://fusesource.github.io/jansi/") - (synopsis "Portable ANSI escape sequences") - (description "Jansi is a Java library that allows you to use ANSI escape -sequences to format your console output which works on every platform.") - (license license:asl2.0))) + ("java-hamcrest-core" ,java-hamcrest-core))))) (define-public java-jboss-el-api-spec (package @@ -12600,7 +12728,7 @@ features that bring it on par with the Z shell line editor.") `(#:jdk ,icedtea-8 ,@(package-arguments java-jline))) (inputs - `(("java-jansi" ,java-jansi) + `(("java-jansi" ,java-jansi-1) ("java-jansi-native" ,java-jansi-native))) (native-inputs `(("java-powermock-modules-junit4" ,java-powermock-modules-junit4) diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index 4866f6bf05..7dd565bff8 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -355,7 +355,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS." ;; The current "stable" kernels. That is, the most recently released major ;; versions that are still supported upstream. -(define-public linux-libre-5.15-version "5.15.6") +(define-public linux-libre-5.15-version "5.15.7") (define-public linux-libre-5.15-gnu-revision "gnu") (define deblob-scripts-5.15 (linux-libre-deblob-scripts @@ -365,7 +365,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS." (base32 "04fj1x3zmi310cr3m9hxpi26gdcmwfsqciv5yb6q6rrnqjqs1pc0"))) (define-public linux-libre-5.15-pristine-source (let ((version linux-libre-5.15-version) - (hash (base32 "1w0plw9rzk2c0g8yxzwj7c6wkq538sy56mx1skmf58wrl83bmsdk"))) + (hash (base32 "1caxpqmik6gkhk3437pcgfq6vvlbs962hylgbh64iizd76l5142x"))) (make-linux-libre-source version (%upstream-linux-source version hash) deblob-scripts-5.15))) @@ -373,7 +373,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS." ;; The "longterm" kernels — the older releases with long-term upstream support. ;; Here are the support timelines: ;; <https://www.kernel.org/category/releases.html> -(define-public linux-libre-5.10-version "5.10.83") +(define-public linux-libre-5.10-version "5.10.84") (define-public linux-libre-5.10-gnu-revision "gnu1") (define deblob-scripts-5.10 (linux-libre-deblob-scripts @@ -383,12 +383,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS." (base32 "024rz0bp3n3r5nkwbib7byx10d72c2fh5cw9iv00diyzgnp819g7"))) (define-public linux-libre-5.10-pristine-source (let ((version linux-libre-5.10-version) - (hash (base32 "0w4vq8wby3m9f5ryssh6z948m6zj1bjz9x432805dnrxyd1rl9gg"))) + (hash (base32 "0g935v0khv0i2qlrwr656hxl28m6zlbclc9rv15nq46xf8fjg5kf"))) (make-linux-libre-source version (%upstream-linux-source version hash) deblob-scripts-5.10))) -(define-public linux-libre-5.4-version "5.4.163") +(define-public linux-libre-5.4-version "5.4.164") (define-public linux-libre-5.4-gnu-revision "gnu1") (define deblob-scripts-5.4 (linux-libre-deblob-scripts @@ -398,12 +398,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS." (base32 "1a0k9i8gnzkyvfr80f8xw2fnxfwddhz1pzicz9fh0y3jzzkzk45p"))) (define-public linux-libre-5.4-pristine-source (let ((version linux-libre-5.4-version) - (hash (base32 "1glh0azkrqdwydvbz9rp3czc5ppb72gq7svl3zbkjc6qfqbzwik2"))) + (hash (base32 "0142nic300xjdz9s6w1cp6cyhk2c2wpks9wxzqca6jz4da7k0l9r"))) (make-linux-libre-source version (%upstream-linux-source version hash) deblob-scripts-5.4))) -(define-public linux-libre-4.19-version "4.19.219") +(define-public linux-libre-4.19-version "4.19.220") (define-public linux-libre-4.19-gnu-revision "gnu1") (define deblob-scripts-4.19 (linux-libre-deblob-scripts @@ -413,12 +413,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS." (base32 "1a0k9i8gnzkyvfr80f8xw2fnxfwddhz1pzicz9fh0y3jzzkzk45p"))) (define-public linux-libre-4.19-pristine-source (let ((version linux-libre-4.19-version) - (hash (base32 "1nq9228zm24d8azvv6d6r5iw8lfkb7z5lblyhk137mydzdqwsklg"))) + (hash (base32 "0q5hrh6q2f2r97nff136db7367p3hn0la2gl7q4knms3g8fis1jq"))) (make-linux-libre-source version (%upstream-linux-source version hash) deblob-scripts-4.19))) -(define-public linux-libre-4.14-version "4.14.256") +(define-public linux-libre-4.14-version "4.14.257") (define-public linux-libre-4.14-gnu-revision "gnu1") (define deblob-scripts-4.14 (linux-libre-deblob-scripts @@ -428,12 +428,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS." (base32 "1a0k9i8gnzkyvfr80f8xw2fnxfwddhz1pzicz9fh0y3jzzkzk45p"))) (define-public linux-libre-4.14-pristine-source (let ((version linux-libre-4.14-version) - (hash (base32 "180s2zmkfxk7af9nnkmfi2cs56af6vwyd21hjcfdxiygjm7j114p"))) + (hash (base32 "0jnw02jphvm9zcviwwymxyhq8kd0bk0v1827ninnv6bdy3140izv"))) (make-linux-libre-source version (%upstream-linux-source version hash) deblob-scripts-4.14))) -(define-public linux-libre-4.9-version "4.9.291") +(define-public linux-libre-4.9-version "4.9.292") (define-public linux-libre-4.9-gnu-revision "gnu1") (define deblob-scripts-4.9 (linux-libre-deblob-scripts @@ -443,12 +443,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS." (base32 "1a0k9i8gnzkyvfr80f8xw2fnxfwddhz1pzicz9fh0y3jzzkzk45p"))) (define-public linux-libre-4.9-pristine-source (let ((version linux-libre-4.9-version) - (hash (base32 "0lwb9mb4s6qnwklygvfsr5ap85k83w1apkbbfdzzacfn9rvpfpdm"))) + (hash (base32 "0y3b6qqv6vrh2p5wwv5bicvbqrvxf1y5xm4myy5pk6yp2igws3kd"))) (make-linux-libre-source version (%upstream-linux-source version hash) deblob-scripts-4.9))) -(define-public linux-libre-4.4-version "4.4.293") +(define-public linux-libre-4.4-version "4.4.294") (define-public linux-libre-4.4-gnu-revision "gnu1") (define deblob-scripts-4.4 (linux-libre-deblob-scripts @@ -458,7 +458,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS." (base32 "1a0k9i8gnzkyvfr80f8xw2fnxfwddhz1pzicz9fh0y3jzzkzk45p"))) (define-public linux-libre-4.4-pristine-source (let ((version linux-libre-4.4-version) - (hash (base32 "1z9hc68v8fvph29l2w3md4734hhgp36sy8mzdlkmdrlkjihq6bvd"))) + (hash (base32 "0k0h5m1ng2049d5ggrq4q81vgsfmdpkqla73vg2a3bf2v6ycjmc7"))) (make-linux-libre-source version (%upstream-linux-source version hash) deblob-scripts-4.4))) diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm index 465b0829c6..1a902842af 100644 --- a/gnu/packages/lisp-xyz.scm +++ b/gnu/packages/lisp-xyz.scm @@ -93,6 +93,7 @@ #:use-module (gnu packages sdl) #:use-module (gnu packages serialization) #:use-module (gnu packages sqlite) + #:use-module (gnu packages statistics) #:use-module (gnu packages tcl) #:use-module (gnu packages tls) #:use-module (gnu packages video) @@ -2112,7 +2113,7 @@ writing code that contains string literals that contain code themselves.") (define-public sbcl-slime-swank (package (name "sbcl-slime-swank") - (version "2.26") + (version "2.26.1") (source (origin (file-name (git-file-name "slime-swank" version)) @@ -2122,7 +2123,7 @@ writing code that contains string literals that contain code themselves.") (commit (string-append "v" version)))) (sha256 (base32 - "0mxb1wnw19v0s72w2wkz5afdlzvpy5nn7pr4vav403qybac0sw5c")))) + "1a25ixb7q4svqabxnhwkk43v47mbsh13qwm7qlazkd3zkr8j3cli")))) (build-system asdf-build-system/sbcl) (arguments '(#:asd-systems '("swank"))) @@ -2185,7 +2186,7 @@ With the simplistic tools provided, one may accomplish similar effects as with Literate Programming, but documentation is generated from code, not vice versa and there is no support for chunking yet. Code is first, code must look pretty, documentation is code.") - (home-page "http://quotenil.com/") + (home-page "https://melisgl.github.io/mgl-pax/") (license license:expat)))) (define-public cl-mgl-pax @@ -12638,25 +12639,28 @@ XML to Lisp structures or s-expressions and back.") ((#:tests? _ #f) #f)))))) (define-public sbcl-geco - (package - (name "sbcl-geco") - (version "2.1.1") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/gpwwjr/GECO") - (commit (string-append "v" version)))) - (file-name (git-file-name "geco" version)) - (sha256 - (base32 "1rc8a4mk40hjx5qy980hjylv6xxqdbq38hg8c4w30y93abfd519s")))) - (build-system asdf-build-system/sbcl) - (home-page "http://hiwaay.net/~gpw/geco/geco.html") - (synopsis "Genetic algorithm toolkit for Common Lisp") - (description - "GECO (Genetic Evolution through Combination of Objects) is an extensible, -object-oriented framework for prototyping genetic algorithms in Common Lisp.") - (license license:lgpl2.1+))) + (let ((commit "db13c9384491092975f46f6a837ccdc04681a93a") + (revision "1")) + (package + (name "sbcl-geco") + (version (git-version "2.1.2" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/gpwwjr/GECO") + (commit commit))) + (file-name (git-file-name "cl-geco" version)) + (sha256 + (base32 "1ncaf9ab7jz59zmga0p97blsjjb1m6db0qih57wipfhqdb5ylz17")))) + (build-system asdf-build-system/sbcl) + (home-page "https://github.com/gpwwjr/GECO") + (synopsis "Genetic algorithm toolkit for Common Lisp") + (description + "GECO (Genetic Evolution through Combination of Objects) is an +extensible, object-oriented framework for prototyping genetic algorithms in +Common Lisp.") + (license license:lgpl2.0+)))) (define-public cl-geco (sbcl-package->cl-source-package sbcl-geco)) @@ -17890,10 +17894,11 @@ functions allow Lisp programs to explore the web.") (define-public sbcl-aserve ;; There does not seem to be proper releases. - (let ((commit "cac1d6920998ddcbee8310a873414732e707d8e5")) + (let ((commit "cac1d6920998ddcbee8310a873414732e707d8e5") + (revision "2")) (package (name "sbcl-aserve") - (version (git-version "1.2.50" "1" commit)) + (version (git-version "1.2.50" revision commit)) (source (origin (method git-fetch) @@ -17904,7 +17909,14 @@ functions allow Lisp programs to explore the web.") (commit commit))) (file-name (git-file-name "aserve" version)) (sha256 - (base32 "0ak6mqp84sjr0a7h5svr16vra4bf4fcx6wpir0n88dc1vjwy5xqa")))) + (base32 "0ak6mqp84sjr0a7h5svr16vra4bf4fcx6wpir0n88dc1vjwy5xqa")) + (patches (search-patches + ;; Add HTML5 elements to htmlgen. + ;; Adapted from https://github.com/franzinc/aserve/ commits: + ;; * e47bd763: "rfe12668: add HTML 5 elements to htmlgen" + ;; * 7371ce59: "fix bugs in rfe12668 implementation" + "sbcl-aserve-add-HTML-5-elements.patch" + "sbcl-aserve-fix-rfe12668.patch")))) (build-system asdf-build-system/sbcl) (arguments `(#:phases @@ -17925,7 +17937,8 @@ functions allow Lisp programs to explore the web.") #t))))) (inputs `(("acl-compat" ,sbcl-acl-compat))) - (home-page "https://franz.com/support/documentation/current/doc/aserve/aserve.html") + (home-page + "https://franz.com/support/documentation/current/doc/aserve/aserve.html") (synopsis "AllegroServe, a web server written in Common Lisp") (description "The server part of AllegroServe can be used either as a standalone web @@ -19349,6 +19362,225 @@ command in Common Lisp.") (define-public ecl-which (sbcl-package->ecl-package sbcl-which)) +(define-public sbcl-cl-num-utils + (let ((commit "97a88cd34540acf52e872a82ebfef3da0a34fa12") + (revision "1")) + (package + (name "sbcl-cl-num-utils") + (version (git-version "0.1" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/tpapp/cl-num-utils") + (commit commit))) + (file-name (git-file-name "cl-num-utils" version)) + (sha256 + (base32 "15ihsxxs76xnldmqfsbxybckqjwrxwcpphgghiwzr2mnbqjpdqkh")))) + (build-system asdf-build-system/sbcl) + (inputs + `(("anaphora" ,sbcl-anaphora) + ("alexandria" ,sbcl-alexandria) + ("array-operations" ,sbcl-array-operations) + ("cl-slice" ,sbcl-cl-slice) + ("let-plus" ,sbcl-let-plus))) + (native-inputs + `(("clunit" ,sbcl-clunit))) + (home-page "https://github.com/tpapp/cl-num-utils") + (synopsis "Numerical utilities for Common Lisp") + (description + "@code{cl-num-utils} implements simple numerical functions for Common +Lisp, including: +@itemize +@item @code{num=}, a comparison operator for floats +@item simple arithmeric functions, like @code{sum} and @code{l2norm} +@item elementwise operations for arrays +@item intervals +@item special matrices and shorthand for their input +@item sample statistics +@item Chebyshev polynomials +@item univariate rootfinding +@end itemize") + (license license:boost1.0)))) + +(define-public cl-num-utils + (sbcl-package->cl-source-package sbcl-cl-num-utils)) + +(define-public ecl-cl-num-utils + (sbcl-package->ecl-package sbcl-cl-num-utils)) + +(define-public sbcl-lla + (let ((commit "ded805d1e9b1493e17b601116ba9bd8a3de3024f") + (revision "1")) + (package + (name "sbcl-lla") + (version (git-version "0.2" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/tpapp/lla") + (commit commit))) + (file-name (git-file-name "cl-lla" version)) + (sha256 + (base32 "0n9vc7dnyjbbsv1n7rd8sylwda5fsdf8f890g4nachanyx0xps9k")))) + (build-system asdf-build-system/sbcl) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'fix-paths + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "src/configuration.lisp" + (("\"libblas.so.3gf\"") + (string-append "\"" (assoc-ref inputs "lapack") + "/lib/libblas.so\"")) + (("\"liblapack.so.3gf\"") + (string-append "\"" (assoc-ref inputs "lapack") + "/lib/liblapack.so\"")))))))) + (inputs + `(("anaphora" ,sbcl-anaphora) + ("alexandria" ,sbcl-alexandria) + ("cffi" ,sbcl-cffi) + ("cl-num-utils" ,sbcl-cl-num-utils) + ("cl-slice" ,sbcl-cl-slice) + ("lapack" ,lapack) + ("let-plus" ,sbcl-let-plus))) + (native-inputs + `(("clunit" ,sbcl-clunit))) + (home-page "https://github.com/tpapp/lla") + (synopsis "Linear algebra library for Common Lisp") + (description + "LLA is a high-level Common Lisp library built on BLAS and LAPACK, but +providing a much more abstract interface with the purpose of freeing the user +from low-level concerns and reducing the number of bugs in numerical code.") + (license license:boost1.0)))) + +(define-public cl-lla + (sbcl-package->cl-source-package sbcl-lla)) + +(define-public ecl-lla + (sbcl-package->ecl-package sbcl-lla)) + +(define-public sbcl-cl-rmath + (let ((commit "f6add1edda31547691d08e36ccf6c17305161aca") + (revision "1")) + (package + (name "sbcl-cl-rmath") + (version (git-version "0.0.1" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/tpapp/cl-rmath") + (commit commit))) + (file-name (git-file-name "cl-rmath" version)) + (sha256 + (base32 "1ld8vbpy10paymx2hn0mcgd21i7cjhdrayln1jx0kayqxm12mmk4")))) + (build-system asdf-build-system/sbcl) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'fix-paths + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "cl-rmath.lisp" + (("\\(cffi:define-foreign-library librmath" all) + (string-append all "\n" + " (:unix \"" + (assoc-ref inputs "librmath") + "/lib/libRmath.so\")")))))))) + (inputs + `(("cffi" ,sbcl-cffi) + ("librmath" ,rmath-standalone))) + (home-page "https://github.com/tpapp/cl-rmath") + (synopsis "Common Lisp wrapper for libRmath") + (description + "@code{cl-rmath} is a simple, autogenerated foreign interface for the +standalone R API @code{libRmath}. There has been no effort to provide a +high-level interface for the original library, instead, this library is meant +to serve as a building block for such an interface.") + (license license:boost1.0)))) + +(define-public cl-rmath + (sbcl-package->cl-source-package sbcl-cl-rmath)) + +(define-public ecl-cl-rmath + (sbcl-package->ecl-package sbcl-cl-rmath)) + +(define-public sbcl-cl-random + (let ((commit "5bb65911037f95a4260bd29a594a09df3849f4ea") + (revision "1")) + (package + (name "sbcl-cl-random") + (version (git-version "0.0.1" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/tpapp/cl-random") + (commit commit))) + (file-name (git-file-name "cl-random" version)) + (sha256 + (base32 "0jn80xphyvyp2v72acr6b8a2f6dw06myr5vrjfl14brsvks7wr89")))) + (build-system asdf-build-system/sbcl) + (inputs + `(("alexandria" ,sbcl-alexandria) + ("anaphora" ,sbcl-anaphora) + ("array-operations" ,sbcl-array-operations) + ("cl-num-utils" ,sbcl-cl-num-utils) + ("cl-rmath" ,sbcl-cl-rmath) + ("cl-slice" ,sbcl-cl-slice) + ("gsll" ,sbcl-gsll) + ("let-plus" ,sbcl-let-plus) + ("lla" ,sbcl-lla))) + (native-inputs + `(("clunit" ,sbcl-clunit))) + (home-page "https://github.com/tpapp/cl-random") + (synopsis "Random variates for Common Lisp") + (description + "@code{cl-random} is a library for generating random draws from various +commonly used distributions, and for calculating statistical functions, such as +density, distribution and quantiles for these distributions.") + (license license:expat)))) + +(define-public cl-random + (sbcl-package->cl-source-package sbcl-cl-random)) + +(define-public ecl-cl-random + (sbcl-package->ecl-package sbcl-cl-random)) + +(define-public sbcl-mgl-gpr + (let ((commit "cb6ce51e2f87bf1d589f3703c13eea6e25780afe") + (revision "1")) + (package + (name "sbcl-mgl-gpr") + (version (git-version "0.0.1" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/melisgl/mgl-gpr") + (commit commit))) + (file-name (git-file-name "cl-mgl-gpr" version)) + (sha256 + (base32 "0w51dqixh277k6sl8bqvvp1400y6kd1l5h3d9q2f40l9bpxy8gjx")))) + (build-system asdf-build-system/sbcl) + (inputs + `(("cl-random" ,sbcl-cl-random) + ("mgl-pax" ,sbcl-mgl-pax))) + (home-page "https://melisgl.github.io/mgl-gpr/") + (synopsis "Common Lisp library of evolutionary algorithms") + (description + "@code{MGL-GPR} is a library of evolutionary algorithms such as +Genetic Programming (evolving typed expressions from a set of operators and +constants) and Differential Evolution.") + (license license:expat)))) + +(define-public cl-mgl-gpr + (sbcl-package->cl-source-package sbcl-mgl-gpr)) + +(define-public ecl-mgl-gpr + (sbcl-package->ecl-package sbcl-mgl-gpr)) + (define-public sbcl-cl-tld ;; No release. (let ((commit "f5014da8d831fa9481d4181d4450f10a52850c75")) @@ -19768,6 +20000,36 @@ score. When evaluated, the musical score is rendered to an image.") (define-public ecl-cmn (sbcl-package->ecl-package sbcl-cmn)) +(define-public sbcl-core-gp + (let ((commit "90ec1c4599a19c5a911be1f703f78d5108aee160") + (revision "1")) + (package + (name "sbcl-core-gp") + (version (git-version "0.1" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/jorgetavares/core-gp") + (commit commit))) + (file-name (git-file-name "cl-core-gp" version)) + (sha256 + (base32 "0nzlb2gwqisa1amlpl4zc5xxph2g3qwhfyaxchci67d31rzws6l3")))) + (build-system asdf-build-system/sbcl) + (home-page "https://github.com/jorgetavares/core-gp") + (synopsis "Common Lisp library for genetic programming") + (description + "@code{core-gp} is a Common Lisp library for genetic programming (GP) +algorithms. It allows standard GP, strongly-typed GP, grammatical evolution as +well as standard genetic algorithms.") + (license license:expat)))) + +(define-public cl-core-gp + (sbcl-package->cl-source-package sbcl-core-gp)) + +(define-public ecl-core-gp + (sbcl-package->ecl-package sbcl-core-gp)) + (define-public sbcl-data-sift (let ((commit "fd617d8200cdcc1b87ecf45ab59bb38e8b16ef7e") (revision "1")) @@ -19854,6 +20116,40 @@ library inspired by @code{cl-data-format-validation} and WTForms validators.") (define-public ecl-restas (sbcl-package->ecl-package sbcl-restas)) +(define-public sbcl-zsort + (let ((commit "f6724a6fff7662a942195cedb0d7f00da59c74ed") + (revision "1")) + (package + (name "sbcl-zsort") + (version (git-version "0.1" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/jorgetavares/zsort") + (commit commit))) + (file-name (git-file-name "cl-zsort" version)) + (sha256 + (base32 "1vyklyh99712zsll4qi0m4mm8yb1nz04403vl8i57bjv5p5max49")))) + (build-system asdf-build-system/sbcl) + (inputs + `(("alexandria" ,sbcl-alexandria))) + (home-page "https://github.com/jorgetavares/zsort") + (synopsis "Collection of portable sorting algorithms in Common Lisp") + (description + "@code{zsort} is a collection of portable sorting algorithms. Common +Lisp provides the @code{sort} and @code{stable-sort} functions but these can +have different algorithms implemented according to each implementation. Also, +the standard sorting functions might not be the best for a certain situations. +This library aims to provide developers with more options.") + (license license:expat)))) + +(define-public cl-zsort + (sbcl-package->cl-source-package sbcl-zsort)) + +(define-public ecl-zsort + (sbcl-package->ecl-package sbcl-zsort)) + (define-public sbcl-cl-https-everywhere ;; No release. ;; Don't forget to update the https-everywhere input. diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm index 3ed454d92d..a81214947c 100644 --- a/gnu/packages/messaging.scm +++ b/gnu/packages/messaging.scm @@ -2656,48 +2656,49 @@ replacement.") (license license:gpl2+))) (define-public tdlib - (package - (name "tdlib") - (version "1.7.0") - (source (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/tdlib/td") - (commit (string-append "v" version)))) - (sha256 - (base32 - "0dfir57ljcn98mkg061c5642qb93wh2lm1n4nngpl3na9vvfk75i")) - (file-name (git-file-name name version)))) - (build-system cmake-build-system) - (arguments - `(#:tests? #t - #:configure-flags - (list "-DCMAKE_BUILD_TYPE=Release" - "-DTD_ENABLE_LTO=OFF") ; FIXME: Get LTO to work. - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'remove-failing-tests - (lambda _ - (substitute* "test/CMakeLists.txt" - ;; The test cases are compiled into a distinct binary - ;; which uses mtproto.cpp to attempt to connect to - ;; a remote server. Removing this file from the sources - ;; list disables those specific test cases. - (("\\$\\{CMAKE_CURRENT_SOURCE_DIR\\}/mtproto.cpp") "")) - #t))))) - (native-inputs - `(("gperf" ,gperf) - ("openssl" ,openssl) - ("zlib" ,zlib) - ("php" ,php) - ("doxygen" ,doxygen))) - (synopsis "Cross-platform library for building Telegram clients") - (description "Tdlib is a cross-platform library for creating custom + (let ((commit "34ba9b21f365b8d3bdc36808c2d665ca5cd128f6")) + (package + (name "tdlib") + (version "1.7.10") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/tdlib/td") + (commit commit))) + (sha256 + (base32 "06fbdh1jypz0p1rf6xbpias4kx7xplq9xjd9vz177vwj9icq3wki")) + (file-name (git-file-name name version)))) + (build-system cmake-build-system) + (arguments + `(#:tests? #t + #:configure-flags + (list "-DCMAKE_BUILD_TYPE=Release" + "-DTD_ENABLE_LTO=OFF") ; FIXME: Get LTO to work. + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'remove-failing-tests + (lambda _ + (substitute* "test/CMakeLists.txt" + ;; The test cases are compiled into a distinct binary + ;; which uses mtproto.cpp to attempt to connect to + ;; a remote server. Removing this file from the sources + ;; list disables those specific test cases. + (("\\$\\{CMAKE_CURRENT_SOURCE_DIR\\}/mtproto.cpp") "")) + #t))))) + (native-inputs + `(("gperf" ,gperf) + ("openssl" ,openssl) + ("zlib" ,zlib) + ("php" ,php) + ("doxygen" ,doxygen))) + (synopsis "Cross-platform library for building Telegram clients") + (description "Tdlib is a cross-platform library for creating custom Telegram clients following the official Telegram API. It can be easily used from almost any programming language with a C-FFI and features first-class support for high performance Telegram Bot creation.") - (home-page "https://core.telegram.org/tdlib") - (license license:boost1.0))) + (home-page "https://core.telegram.org/tdlib") + (license license:boost1.0)))) (define-public purple-mm-sms (package diff --git a/gnu/packages/patches/emacs-telega-path-placeholder.patch b/gnu/packages/patches/emacs-telega-path-placeholder.patch index c20be36712..5829edd22a 100644 --- a/gnu/packages/patches/emacs-telega-path-placeholder.patch +++ b/gnu/packages/patches/emacs-telega-path-placeholder.patch @@ -1,36 +1,31 @@ -From 865b8c553722a971c68742c2e849e41eb0e2360c Mon Sep 17 00:00:00 2001 -From: Zhu Zihao <all_but_last@163.com> -Date: Thu, 24 Jun 2021 23:43:50 +0800 -Subject: [PATCH] Replace code that search path with placeholder for - configuration. +From bf95de21faa623e48bca00d6a2c9b33ab2c5d812 Mon Sep 17 00:00:00 2001 +From: Andrew Tropin <andrew@trop.in> +Date: Wed, 8 Dec 2021 11:01:31 +0300 +Subject: [PATCH] Use absolute path for telega-server-command. --- - telega-server.el | 6 +----- - telega-util.el | 2 +- - 2 files changed, 2 insertions(+), 6 deletions(-) + telega-customize.el | 2 +- + telega-util.el | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) -diff --git a/telega-server.el b/telega-server.el -index 999125d..0fa0817 100644 ---- a/telega-server.el -+++ b/telega-server.el -@@ -142,11 +142,7 @@ Otherwise query user about building flags." - (defun telega-server--find-bin () - "Find telega-server executable. - Raise error if not found." -- (let ((exec-path (cons telega-directory exec-path))) -- (or (executable-find "telega-server") -- (progn (telega-server-build) -- (executable-find "telega-server")) -- (error "`telega-server' not found in exec-path")))) -+ "@TELEGA_SERVER_BIN@") +diff --git a/telega-customize.el b/telega-customize.el +index 0af343f..cc2938c 100644 +--- a/telega-customize.el ++++ b/telega-customize.el +@@ -591,7 +591,7 @@ In range [1..3]. Use 1." + :prefix "telega-server-" + :group 'telega) - (defun telega-server-version () - "Return telega-server version." +-(defcustom telega-server-command "telega-server" ++(defcustom telega-server-command "@TELEGA_SERVER_BIN@" + "Command to run as telega server. + It should be absolute path or binary file searchable in `exec-path'." + :type 'string diff --git a/telega-util.el b/telega-util.el -index 73a46b1..f53e20a 100644 +index 6340c27..01e3cb7 100644 --- a/telega-util.el +++ b/telega-util.el -@@ -464,7 +464,7 @@ N can't be 0." +@@ -587,7 +587,7 @@ N can't be 0." (defun telega-etc-file (filename) "Return absolute path to FILENAME from etc/ directory in telega." @@ -40,5 +35,5 @@ index 73a46b1..f53e20a 100644 (defun telega-link-props (link-type link-to &optional face) "Generate props for link button openable with `telega-link--button-action'." -- -2.32.0 +2.34.0 diff --git a/gnu/packages/patches/emacs-telega-test-env.patch b/gnu/packages/patches/emacs-telega-test-env.patch index 75fe2e12fc..c6b02be6ff 100644 --- a/gnu/packages/patches/emacs-telega-test-env.patch +++ b/gnu/packages/patches/emacs-telega-test-env.patch @@ -1,14 +1,24 @@ -Test Emacs environment on startup. +From 237ea2471bb6521390bbac174ac2a8a5e9683e4d Mon Sep 17 00:00:00 2001 +From: Andrew Tropin <andrew@trop.in> +Date: Tue, 7 Dec 2021 16:20:38 +0300 +Subject: [PATCH] Test Emacs environment on startup. -Patch by Diego N. Barbato +--- + telega.el | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) ---- a/telega.el 2020-02-07 17:07:18.549970090 +0100 -+++ b/telega.el 2020-02-07 17:10:08.383499765 +0100 -@@ -82,6 +82,7 @@ - "Start telegramming. - If prefix ARG is given, then will not pop to telega root buffer." +diff --git a/telega.el b/telega.el +index d6b28b5..40854ec 100644 +--- a/telega.el ++++ b/telega.el +@@ -181,7 +181,7 @@ can't write to `telega-server-logfile'" logfile-dir))) + Pop to root buffer. + If `\\[universal-argument]' is specified, then do not pop to root buffer." (interactive "P") +- + (telega-test-env t) - (telega--create-hier) - - (unless (telega-server-live-p) + ;; For multiple accounts setup possibly select (if there is no + ;; default account declared) an account to use + (if (and telega-accounts (not (telega-account-current))) +-- +2.34.0 diff --git a/gnu/packages/patches/sbcl-aserve-add-HTML-5-elements.patch b/gnu/packages/patches/sbcl-aserve-add-HTML-5-elements.patch new file mode 100644 index 0000000000..93962e10ec --- /dev/null +++ b/gnu/packages/patches/sbcl-aserve-add-HTML-5-elements.patch @@ -0,0 +1,63 @@ +From 940679fb75073a59186099e3dd7fb381e727db6b Mon Sep 17 00:00:00 2001 +From: Kevin Layer <layer@franz.com> +Date: Thu, 31 Oct 2013 04:27:29 -0700 +Subject: [PATCH 1/2] rfe12668: add HTML 5 elements to htmlgen + +Add the new elements listed here: + http://www.w3.org/TR/html5-diff/#new-elements + +Change-Id: I7f64363751130644caf90ecdd65c13175d77ae97 +--- + aserve/htmlgen/htmlgen.cl | 38 ++++++++++++++++++++++++++++++++++++-- + 1 file changed, 36 insertions(+), 2 deletions(-) + +diff --git a/aserve/htmlgen/htmlgen.cl b/aserve/htmlgen/htmlgen.cl +index 59248ef..0c0d6e8 100644 +--- a/aserve/htmlgen/htmlgen.cl ++++ b/aserve/htmlgen/htmlgen.cl +@@ -747,6 +747,40 @@ + + (def-std-html :var t nil) + +-(def-std-html :wbr nil nil) +- + (def-std-html :xmp t nil) ++ ++;; html 5 ++ ++(def-std-html :section t nil) ++(def-std-html :article t nil) ++(def-std-html :main t nil) ++(def-std-html :aside t nil) ++(def-std-html :hgroup t nil) ++(def-std-html :header t nil) ++(def-std-html :footer t nil) ++(def-std-html :nav t nil) ++(def-std-html :figure t nil) ++(def-std-html :figcaption t nil) ++ ++(def-std-html :video t nil) ++(def-std-html :audio t nil) ++(def-std-html :source t nil) ++(def-std-html :track t nil) ++(def-std-html :embed t nil) ++(def-std-html :mark t nil) ++(def-std-html :progress t nil) ++(def-std-html :meter t nil) ++(def-std-html :time t nil) ++(def-std-html :data t nil) ++(def-std-html :dialog t nil) ++(def-std-html :ruby t nil) ++(def-std-html :rt t nil) ++(def-std-html :rp t nil) ++(def-std-html :bdi t nil) ++(def-std-html :wbr nil nil) ++(def-std-html :canvas t nil) ++(def-std-html :menuitem t nil) ++(def-std-html :details t nil) ++(def-std-html :datalist t nil) ++(def-std-html :keygen t nil) ++(def-std-html :output t nil) +-- +2.25.1 + diff --git a/gnu/packages/patches/sbcl-aserve-fix-rfe12668.patch b/gnu/packages/patches/sbcl-aserve-fix-rfe12668.patch new file mode 100644 index 0000000000..c7a8e05aae --- /dev/null +++ b/gnu/packages/patches/sbcl-aserve-fix-rfe12668.patch @@ -0,0 +1,43 @@ +From 8110ebd55d5bf659cd40dab2df59d80dafdb367a Mon Sep 17 00:00:00 2001 +From: Kevin Layer <layer@franz.com> +Date: Mon, 10 Feb 2014 11:10:42 -0800 +Subject: [PATCH 2/2] fix bugs in rfe12668 implementation + +The previous commit added :embed and :keygen but they were already +there. Resolve this issue. + +Change-Id: Ieb962a12880394e67d973835945005446833fab7 +--- + aserve/htmlgen/htmlgen.cl | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/aserve/htmlgen/htmlgen.cl b/aserve/htmlgen/htmlgen.cl +index 0c0d6e8..f77d6de 100644 +--- a/aserve/htmlgen/htmlgen.cl ++++ b/aserve/htmlgen/htmlgen.cl +@@ -658,7 +658,6 @@ + (def-std-html :dt t nil) + + (def-std-html :em t nil) +-(def-std-html :embed t nil) + + (def-std-html :fieldset t nil) + (def-std-html :font t nil) +@@ -685,7 +684,6 @@ + (def-std-html :isindex nil nil) + + (def-std-html :kbd t nil) +-(def-std-html :keygen nil nil) + + (def-std-html :label t nil) + (def-std-html :layer t nil) +@@ -782,5 +780,5 @@ + (def-std-html :menuitem t nil) + (def-std-html :details t nil) + (def-std-html :datalist t nil) +-(def-std-html :keygen t nil) ++(def-std-html :keygen nil nil) + (def-std-html :output t nil) +-- +2.25.1 + diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm index dcc314c4fc..f08347e61c 100644 --- a/gnu/packages/pdf.scm +++ b/gnu/packages/pdf.scm @@ -1278,7 +1278,7 @@ python-pypdf2 instead.") (define-public pdfarranger (package (name "pdfarranger") - (version "1.8.0") + (version "1.8.1") (source (origin (method git-fetch) @@ -1287,7 +1287,7 @@ python-pypdf2 instead.") (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "0xfxcwb24rp0kni2b4wdk6fvhqnhd6fh559ag6wdr4sspzkqwdjf")))) + (base32 "1lcmlr7x4143f7wcn0m1ijlvch07nww2qfp3jfnacgy889ijvbfx")))) (build-system python-build-system) (arguments '(#:tests? #f ;no tests diff --git a/gnu/packages/python-check.scm b/gnu/packages/python-check.scm index 8f527ef628..4327d216ed 100644 --- a/gnu/packages/python-check.scm +++ b/gnu/packages/python-check.scm @@ -228,25 +228,44 @@ result documents that can be read by tools such as Jenkins or Bamboo.") (define-public python-vcrpy (package (name "python-vcrpy") - (version "2.0.1") + (version "4.1.1") (source - (origin - (method url-fetch) - (uri (pypi-uri "vcrpy" version)) - (sha256 - (base32 - "0kws7l3hci1dvjv01nxw3805q9v2mwldw58bgl8s90wqism69gjp")))) + (origin + (method url-fetch) + (uri (pypi-uri "vcrpy" version)) + (sha256 + (base32 "16gmzxs3lzbgf1828n0q61vbmwyhpvzdlk37x6gdk8n05zr5n2ap")))) (build-system python-build-system) - (arguments `(#:tests? #f)) ; tests require more packages for python-pytest-httpbin + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda* (#:key tests? outputs #:allow-other-keys) + (when tests? + (substitute* "tox.ini" + (("AWS_ACCESS_KEY_ID") "PYTHONPATH")) + (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH"))) + ;; These tests require network access. + (delete-file "tests/unit/test_stubs.py") + (invoke "pytest" "tests/unit"))))))) (propagated-inputs `(("python-pyyaml" ,python-pyyaml) ("python-six" ,python-six) ("python-wrapt" ,python-wrapt) ("python-yarl" ,python-yarl))) (native-inputs - `(("python-mock" ,python-mock) + `(("python-black" ,python-black) + ("python-coverage" ,python-coverage) + ("python-flake8" ,python-flake8) + ("python-flask" ,python-flask) + ("python-httplib2" ,python-httplib2) + ("python-ipaddress" ,python-ipaddress) + ("python-mock" ,python-mock) ("python-pytest" ,python-pytest) - ("python-pytest-httpbin" ,python-pytest-httpbin))) + ("python-pytest-cov" ,python-pytest-cov) + ("python-pytest-httpbin" ,python-pytest-httpbin) + ("python-tox" ,python-tox) + ("python-urllib3" ,python-urllib3))) (home-page "https://github.com/kevin1024/vcrpy") (synopsis "Automatically mock your HTTP interactions") (description diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm index ad7e9dd94d..60f1f348b8 100644 --- a/gnu/packages/python-web.scm +++ b/gnu/packages/python-web.scm @@ -396,13 +396,13 @@ WSGI. This package includes libraries for implementing ASGI servers.") (define-public python-aws-sam-translator (package (name "python-aws-sam-translator") - (version "1.38.0") + (version "1.40.0") (source (origin (method url-fetch) (uri (pypi-uri "aws-sam-translator" version)) (sha256 (base32 - "1djwlsjpbh13m4biglimrm9lq7hmla0k29giay7k3cjsrylxvjhf")))) + "1hq5ggbzcq4k3ks439hki493w4sasgaxns6j5x57xsj822acalmf")))) (build-system python-build-system) (arguments `(;; XXX: Tests are not distributed with the PyPI archive, and would @@ -415,13 +415,12 @@ WSGI. This package includes libraries for implementing ASGI servers.") ;; of dependencies, when it works fine with others. (substitute* "requirements/base.txt" (("(.*)(~=[0-9\\.]+)" all package version) - package)) - #t))))) + package))))))) (propagated-inputs `(("python-boto3" ,python-boto3) ("python-jsonschema" ,python-jsonschema) ("python-six" ,python-six))) - (home-page "https://github.com/awslabs/serverless-application-model") + (home-page "https://github.com/aws/serverless-application-model") (synopsis "Transform AWS SAM templates into AWS CloudFormation templates") (description "AWS SAM Translator is a library that transform @dfn{Serverless Application @@ -496,8 +495,8 @@ emit information from within their applications to the AWS X-Ray service.") (define-public python-cfn-lint (package (name "python-cfn-lint") - (version "0.54.1") - (home-page "https://github.com/aws-cloudformation/cfn-python-lint") + (version "0.54.3") + (home-page "https://github.com/aws-cloudformation/cfn-lint") (source (origin (method git-fetch) (uri (git-reference @@ -506,21 +505,26 @@ emit information from within their applications to the AWS X-Ray service.") (file-name (git-file-name name version)) (sha256 (base32 - "161mzzlpbi85q43kwzrj39qb32l6wg6xhnbbd4z860yrfbymsn87")))) + "106qf19n2k6sdjkb4006aidibd24qqiw901c1613xgjpnyw4dyl6")))) (build-system python-build-system) (arguments - `(#:phases (modify-phases %standard-phases - (replace 'check - (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) - ;; Remove test for the documentation update scripts - ;; to avoid a dependency on 'git'. - (delete-file - "test/unit/module/maintenance/test_update_documentation.py") - (delete-file - "test/unit/module/maintenance/test_update_resource_specs.py") - (invoke "python" "-m" "unittest" "discover" "-v" - "-s" "test"))))))) + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda* (#:key inputs outputs tests? #:allow-other-keys) + (when tests? + (let ((out (assoc-ref outputs "out"))) + ;; Remove test for the documentation update scripts + ;; to avoid a dependency on 'git'. + (delete-file + "test/unit/module/maintenance/test_update_documentation.py") + (delete-file + "test/unit/module/maintenance/test_update_resource_specs.py") + (add-installed-pythonpath inputs outputs) + (setenv "PATH" (string-append out "/bin:" + (getenv "PATH"))) + (invoke "python" "-m" "unittest" "discover" + "-s" "test")))))))) (native-inputs `(("python-pydot" ,python-pydot) ("python-mock" ,python-mock))) @@ -2838,14 +2842,14 @@ supports url redirection and retries, and also gzip and deflate decoding.") (package ;; Note: updating awscli typically requires updating botocore as well. (name "awscli") - (version "1.20.64") + (version "1.21.11") (source (origin (method url-fetch) (uri (pypi-uri name version)) (sha256 (base32 - "0pl88y70rgwfprgv5gqkc2fcbasc9d0qyffl98l82bsc24d4c8b9")))) + "0fkivwbx4nind5b7l4jhqm5bb9drgqsclcslrg4aggf9rcs4g4s0")))) (build-system python-build-system) (arguments ;; FIXME: The 'pypi' release does not contain tests. @@ -3384,10 +3388,11 @@ Betamax that may possibly end up in the main package.") `(#:phases (modify-phases %standard-phases (replace 'check - (lambda _ - ;; Some of the 'integration' tests require network access or - ;; login credentials. - (invoke "nosetests" "--exclude=integration")))))) + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + ;; Some of the 'integration' tests require network access or + ;; login credentials. + (invoke "nosetests" "--exclude=integration"))))))) (native-inputs `(("python-docutils" ,python-docutils) ("python-mock" ,python-mock) diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm index 2035714023..f52a1fed74 100644 --- a/gnu/packages/python-xyz.scm +++ b/gnu/packages/python-xyz.scm @@ -11416,9 +11416,9 @@ implementations of ASN.1-based codecs and protocols.") (define-public python2-pyasn1-modules (package-with-python2 python-pyasn1-modules)) -(define-public python2-ipaddress +(define-public python-ipaddress (package - (name "python2-ipaddress") + (name "python-ipaddress") (version "1.0.23") (source (origin (method url-fetch) @@ -11427,17 +11427,17 @@ implementations of ASN.1-based codecs and protocols.") (base32 "1qp743h30s04m3cg3yk3fycad930jv17q7dsslj4mfw0jlvf1y5p")))) (build-system python-build-system) - (arguments - `(#:python ,python-2)) (home-page "https://github.com/phihag/ipaddress") (synopsis "IP address manipulation library") (description "This package provides a fast, lightweight IPv4/IPv6 manipulation library in Python. This library is used to create, poke at, and manipulate IPv4 and - IPv6 addresses and networks. This is a port of the Python 3.3 ipaddress - module to older versions of Python.") + IPv6 addresses and networks.") (license license:psfl))) +(define-public python2-ipaddress + (package-with-python2 python-ipaddress)) + (define-public python-asn1tools (package (name "python-asn1tools") @@ -13385,32 +13385,40 @@ text.") (define-public python-moto (package (name "python-moto") - ;; XXX: Use a pre-release for compatibility with latest botocore & friends. - (version "1.3.16.dev134") + (version "2.2.12") (source (origin (method url-fetch) (uri (pypi-uri "moto" version)) (sha256 (base32 - "1pix0c7zszjwzfy88n1rpih9vkdm25nqcvz93z850xvgwb4v81bd")))) + "0pvay0jp119lzzwf5qj5h6311271yq0w2i6344ds20grpf6g6gz8")))) (build-system python-build-system) (arguments - `(#:phases (modify-phases %standard-phases - (add-after 'unpack 'patch-hardcoded-executable-names - (lambda _ - (substitute* "moto/batch/models.py" - (("/bin/sh") - (which "sh"))) - (substitute* (find-files "tests" "\\.py$") - (("#!/bin/bash") - (string-append "#!" (which "bash")))) - #t)) - (replace 'check - (lambda _ - (invoke "pytest" "-vv" "-m" "not network" - ;; These tests require Docker. - "-k" "not test_terminate_job \ -and not test_invoke_function_from_sqs_exception")))))) + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-hardcoded-executable-names + (lambda* (#:key inputs #:allow-other-keys) + (let ((bash-exec (search-input-file inputs "/bin/sh"))) + (substitute* "moto/batch/models.py" + (("/bin/sh") bash-exec)) + (substitute* (find-files "tests" "\\.py$") + (("#!/bin/bash") (string-append "#!" bash-exec)))))) + (replace 'check + (lambda* (#:key inputs outputs tests? #:allow-other-keys) + (when tests? + (add-installed-pythonpath inputs outputs) + (invoke "pytest" "-vv" "-m" "not network" "-k" + (string-append + ;; These tests require Docker. + "not test_terminate_job" + " and not test_invoke_function_from_sqs_exception" + " and not test_rotate_secret_lambda_invocations" + ;; These tests also require the network. + " and not test_put_record_batch_http_destination" + " and not test_put_record_http_destination" + " and not test_dependencies" + " and not test_cancel_running_job" + " and not test_container_overrides")))))))) (native-inputs `(("python-flask" ,python-flask) ("python-flask-cors" ,python-flask-cors) @@ -13418,6 +13426,8 @@ and not test_invoke_function_from_sqs_exception")))))) ("python-parameterized" ,python-parameterized) ("python-pytest" ,python-pytest) ("python-sure" ,python-sure))) + (inputs + `(("bash" ,bash-minimal))) (propagated-inputs `(("python-aws-xray-sdk" ,python-aws-xray-sdk) ("python-boto" ,python-boto) @@ -13761,14 +13771,14 @@ This software is unmaintained, and new projects should use @code{boto3} instead. ;; are compatible. (package (name "python-botocore") - (version "1.21.64") + (version "1.22.11") (source (origin (method url-fetch) (uri (pypi-uri "botocore" version)) (sha256 (base32 - "0z8cdv3lyr8vw452zqm1r8k4gz4sbzlsqwg6avc3zm6pvajdqc0a")))) + "1z7g2scyzvfq4yj9b4w911k7802ry1v6lqfnwq12l0ak7ywmsvrh")))) (build-system python-build-system) (arguments ;; FIXME: Many tests are failing. @@ -13789,7 +13799,7 @@ interface to the Amazon Web Services (AWS) API.") (define-public python-boto3 (package (name "python-boto3") - (version "1.18.64") + (version "1.19.11") (home-page "https://github.com/boto/boto3") (source (origin (method git-fetch) @@ -13797,14 +13807,14 @@ interface to the Amazon Web Services (AWS) API.") (file-name (git-file-name name version)) (sha256 (base32 - "02hy80xfyxln5yr43cbrmq3kpkdijv8v228alz1x92y4gghnb8cj")))) + "1wv0ci2z5ywvm63dh4mp64vqyyvkm4qxc8dxv8ncrqiiphpgr9aq")))) (arguments `(#:phases (modify-phases %standard-phases (add-after 'unpack 'delete-network-tests ;; Deleting integration tests because they are trying to connect to AWS. - (lambda _ - (delete-file-recursively "tests/integration")))))) + (lambda _ + (delete-file-recursively "tests/integration")))))) (build-system python-build-system) (native-inputs `(("python-nose" ,python-nose) diff --git a/gnu/packages/rust-apps.scm b/gnu/packages/rust-apps.scm index 2b4b0e8eb0..5ad8fbd2cc 100644 --- a/gnu/packages/rust-apps.scm +++ b/gnu/packages/rust-apps.scm @@ -39,16 +39,22 @@ #:use-module (guix utils) #:use-module (gnu packages) #:use-module (gnu packages admin) + #:use-module (gnu packages base) + #:use-module (gnu packages bash) #:use-module (gnu packages compression) #:use-module (gnu packages crates-io) #:use-module (gnu packages crates-graphics) #:use-module (gnu packages curl) #:use-module (gnu packages documentation) #:use-module (gnu packages fontutils) + #:use-module (gnu packages freedesktop) #:use-module (gnu packages glib) #:use-module (gnu packages gtk) + #:use-module (gnu packages ibus) #:use-module (gnu packages jemalloc) + #:use-module (gnu packages kde) #:use-module (gnu packages linux) + #:use-module (gnu packages networking) #:use-module (gnu packages ssh) #:use-module (gnu packages pcre) #:use-module (gnu packages pkg-config) @@ -56,7 +62,8 @@ #:use-module (gnu packages python-xyz) #:use-module (gnu packages rust) #:use-module (gnu packages tls) - #:use-module (gnu packages version-control)) + #:use-module (gnu packages version-control) + #:use-module (gnu packages xorg)) (define-public agate (package @@ -526,24 +533,16 @@ characters, ASCII whitespace characters, other ASCII characters and non-ASCII.") (name "i3status-rust") (version "0.20.1") (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/greshake/i3status-rust") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (patches (search-patches "i3status-rust-enable-unstable-features.patch")) - (sha256 - (base32 "00gzm3g297s9bfp13vnb623p7dfac3g6cdhz2b3lc6l0kmnnqs1s")))) + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/greshake/i3status-rust") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (patches (search-patches "i3status-rust-enable-unstable-features.patch")) + (sha256 + (base32 "00gzm3g297s9bfp13vnb623p7dfac3g6cdhz2b3lc6l0kmnnqs1s")))) (build-system cargo-build-system) - (native-inputs - `(("pkg-config" ,pkg-config))) - (inputs - `(("curl" ,curl) - ("dbus" ,dbus) - ("pulseaudio" ,pulseaudio) - ("openssl" ,openssl) - ("zlib" ,zlib))) (arguments `(#:features '("pulseaudio" "libpulse-binding") #:install-source? #f @@ -573,6 +572,9 @@ characters, ASCII whitespace characters, other ASCII characters and non-ASCII.") (("rust-assert-fs" ,rust-assert-fs-1)) #:phases (modify-phases %standard-phases + (add-after 'unpack 'enable-unstable-features + (lambda _ + (setenv "RUSTC_BOOTSTRAP" "1"))) (add-after 'unpack 'fix-resources-path (lambda* (#:key outputs #:allow-other-keys) (let ((resources (string-append %output "/share"))) @@ -581,10 +583,38 @@ characters, ASCII whitespace characters, other ASCII characters and non-ASCII.") (add-after 'install 'install-resources (lambda* (#:key outputs #:allow-other-keys) (copy-recursively "files" (string-append %output "/share")))) - (add-after 'unpack 'enable-unstable-features - (lambda _ - (setenv "RUSTC_BOOTSTRAP" "1") - #t))))) + (add-after 'install 'wrap-i3status + (lambda* (#:key outputs inputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (paths (map + (lambda (input) + (string-append (assoc-ref inputs input) "/bin")) + '("alsa-utils" "coreutils" "curl" "dbus" "ibus" "iproute" + "kdeconnect" "lm-sensors" "pulseaudio" + "openssl" + "setxkbmap" "speedtest-cli" "xdg-utils" "xrandr" + "zlib")))) + (wrap-program (string-append out "/bin/i3status-rs") + `("PATH" prefix ,paths)))))))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("alsa-utils" ,alsa-utils) + ("bash-minimal" ,bash-minimal) + ("coreutils" ,coreutils) + ("curl" ,curl) + ("dbus" ,dbus) + ("ibus" ,ibus) + ("iproute" ,iproute) + ("kdeconnect" ,kdeconnect) + ("lm-sensors" ,lm-sensors) + ("pulseaudio" ,pulseaudio) + ("openssl" ,openssl) + ("setxkbmap" ,setxkbmap) + ("speedtest-cli" ,speedtest-cli) + ("xdg-utils" ,xdg-utils) + ("xrandr" ,xrandr) + ("zlib" ,zlib))) (home-page "https://github.com/greshake/i3status-rust") (synopsis "i3status, written in pure Rust") (description "@code{i3status-rs} is a feature-rich and resource-friendly @@ -1051,6 +1081,41 @@ show number of files, total lines within those files and code, comments, and blanks grouped by language.") (license (list license:expat license:asl2.0)))) +(define-public vivid + (package + (name "vivid") + (version "0.7.0") + (source + (origin + (method url-fetch) + (uri (crate-uri "vivid" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 "01fds6dm19bqgqydaa6n051v9l4wh9rb5d6sr9akwp2cc0fs43b7")))) + (build-system cargo-build-system) + (arguments + `(#:cargo-inputs + (("rust-ansi-colours" ,rust-ansi-colours-1) + ("rust-clap" ,rust-clap-2) + ("rust-dirs" ,rust-dirs-3) + ("rust-lazy-static" ,rust-lazy-static-1) + ("rust-rust-embed" ,rust-rust-embed-5) + ("rust-yaml-rust" ,rust-yaml-rust-0.4)))) + (home-page "https://github.com/sharkdp/vivid") + (synopsis "LS_COLORS environment variable manager") + (description + "vivid is a generator for the @code{LS_COLORS} environment variable that +controls the colorized output of ls, tree, fd, bfs, dust and many other tools. + +It uses a YAML configuration format for the filetype-database and the color +themes. In contrast to @command{dircolors}, the database and the themes are +organized in different files. This allows users to choose and customize color +themes independent from the collection of file extensions. Instead of using +cryptic ANSI escape codes, colors can be specified in the RRGGBB format and +will be translated to either truecolor (24-bit) ANSI codes or 8-bit codes for +older terminal emulators.") + (license (list license:expat license:asl2.0)))) + (define-public watchexec (package (name "watchexec") diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm index 4bced0a611..8fd3dfaea2 100644 --- a/gnu/packages/scheme.scm +++ b/gnu/packages/scheme.scm @@ -16,6 +16,7 @@ ;;; Copyright © 2020 Edouard Klein <edk@beaver-labs.com> ;;; Copyright © 2021 Philip McGrath <philip@philipmcgrath.com> ;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net> +;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -36,7 +37,7 @@ #:use-module (gnu packages) #:use-module ((guix licenses) #:select (gpl2+ lgpl2.0+ lgpl2.1 lgpl2.1+ lgpl3+ asl2.0 bsd-3 - cc-by-sa4.0 non-copyleft expat)) + cc-by-sa4.0 non-copyleft expat public-domain)) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix git-download) @@ -792,6 +793,45 @@ program-point-specific low-level representation selection and code generation.") (license gpl2+)))) +(define-public s9fes + (package + (name "s9fes") + (version "20181205") + (source + (origin + (method url-fetch) + (uri (string-append "https://www.t3x.org/s9fes/s9fes-" version ".tgz")) + (sha256 + (base32 "0ynpl707bc9drwkdpdgvw14bz9zmwd3wffl1k02sxppjl28xm7rf")))) + (build-system gnu-build-system) + (arguments + `(#:make-flags + (list (string-append "CC=" ,(cc-for-target)) + (string-append "PREFIX=" %output)) + #:phases + (modify-phases %standard-phases + (replace 'install + (lambda* (#:key make-flags #:allow-other-keys) + (apply invoke "make" "install-all" make-flags)))) + #:tests? #f)) ; No check target. + (inputs + `(("ncurses" ,ncurses))) + (home-page "https://www.t3x.org/s9fes/") + (synopsis "Interpreter for R4RS Scheme") + (description + "Scheme 9 from Empty Space (S9fES) is a mature, portable, and +comprehensible public-domain interpreter for R4RS Scheme offering: +@itemize +@item bignum arithmetics +@item decimal-based real number arithmetics +@item support for low-level Unix programming +@item cursor addressing with Curses +@item basic networking procedures +@item an integrated online help system +@item loads of useful library functions +@end itemize") + (license public-domain))) + (define-public femtolisp (let ((commit "ec7601076a976f845bc05ad6bd3ed5b8cde58a97") (revision "2")) diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm index bdc9a5b39f..7e9dcd9ba2 100644 --- a/gnu/packages/sdl.scm +++ b/gnu/packages/sdl.scm @@ -3,7 +3,7 @@ ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2015, 2017 Sou Bunnbu <iyzsong@member.fsf.org> ;;; Copyright © 2015 Alex Kost <alezost@gmail.com> -;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2016, 2017, 2021 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com> ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net> @@ -34,7 +34,7 @@ #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (gnu packages) - #:use-module ((guix licenses) #:hide (freetype)) + #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix git-download) @@ -43,6 +43,7 @@ #:use-module (guix build-system trivial) #:use-module (gnu packages audio) #:use-module (gnu packages autotools) + #:use-module (gnu packages compression) #:use-module (gnu packages fcitx) #:use-module (gnu packages fontutils) #:use-module (gnu packages freedesktop) @@ -110,7 +111,7 @@ library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware.") (home-page "https://libsdl.org/") - (license lgpl2.1))) + (license license:lgpl2.1))) (define-public sdl2 (package (inherit sdl) @@ -153,7 +154,7 @@ joystick, and graphics hardware.") ("wayland" ,wayland) ("wayland-protocols" ,wayland-protocols)) (package-inputs sdl))) - (license bsd-3))) + (license license:bsd-3))) (define-public libmikmod (package @@ -182,7 +183,7 @@ joystick, and graphics hardware.") "MikMod is able to play a wide range of module formats, as well as digital sound files. It can take advantage of particular features of your system, such as sound redirection over the network.") - (license lgpl2.1) + (license license:lgpl2.1) (home-page "http://mikmod.sourceforge.net/"))) (define-public sdl-gfx @@ -211,7 +212,7 @@ system, such as sound redirection over the network.") (description "SDL_gfx provides graphics drawing primitives, rotozoom and other supporting functions for SDL.") (home-page "http://www.ferzkopp.net/joomla/software-mainmenu-14/4-ferzkopps-linux-software/19-sdlgfx") - (license zlib))) + (license license:zlib))) (define-public sdl-image (package @@ -248,7 +249,7 @@ other supporting functions for SDL.") supports the following formats: BMP, GIF, JPEG, LBM, PCX, PNG, PNM, TGA, TIFF, WEBP, XCF, XPM, and XV.") (home-page "https://www.libsdl.org/projects/SDL_image/") - (license zlib))) + (license license:zlib))) (define-public sdl-mixer (package @@ -303,7 +304,7 @@ and specify it using the @code{SDL_SOUNDFONTS} environment variable. For the legacy @code{timidity} backend, install a patch set such as @code{freepats} and set the path to the configuration file with @code{TIMIDITY_CFG}.") (home-page "https://www.libsdl.org/projects/SDL_mixer/") - (license zlib))) + (license license:zlib))) (define-public sdl-net (package @@ -325,7 +326,7 @@ and set the path to the configuration file with @code{TIMIDITY_CFG}.") (description "SDL_net is a small, cross-platform networking library for SDL.") (home-page "https://www.libsdl.org/projects/SDL_net/") - (license zlib))) + (license license:zlib))) (define-public sdl-pango (package @@ -371,7 +372,7 @@ SDL.") (description "This library is a wrapper around the Pango library. It allows you to use TrueType fonts to render internationalized and tagged text in SDL applications.") - (license lgpl2.1))) + (license license:lgpl2.1))) (define-public sdl-ttf (package @@ -400,7 +401,7 @@ tagged text in SDL applications.") (synopsis "SDL TrueType font library") (description "SDL_ttf is a TrueType font rendering library for SDL.") (home-page "https://www.libsdl.org/projects/SDL_ttf/") - (license zlib))) + (license license:zlib))) (define* (sdl-union #:optional (packages (list sdl sdl-gfx sdl-net sdl-ttf sdl-image sdl-mixer))) @@ -546,21 +547,22 @@ directory.") (define-public guile-sdl (package (name "guile-sdl") - (version "0.5.2") + (version "0.5.3") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/guile-sdl/guile-sdl-" - version ".tar.xz")) + version ".tar.lz")) (sha256 (base32 - "0cjgs012a9922hn6xqwj66w6qmfs3nycnm56hyykx5n3g5p7ag01")))) + "040gyk3n3yp8i30ngdg97n3083g8b6laky2nlh10jqcyjdd550d6")))) (build-system gnu-build-system) (native-inputs - `(("pkg-config" ,pkg-config) + `(("lzip" ,lzip) + ("pkg-config" ,pkg-config) ;; Required by test suite. - ("xorg-server" ,xorg-server) - ("libjpeg" ,libjpeg-turbo))) + ("libjpeg" ,libjpeg-turbo) + ("xorg-server" ,xorg-server))) (inputs `(("guile" ,guile-2.2) ("sdl-union" ,(sdl-union)))) @@ -621,7 +623,7 @@ directory.") Layer (SDL). With them, Guile programmers can have easy access to graphics, sound and device input (keyboards, joysticks, mice, etc.).") (home-page "https://www.gnu.org/software/guile-sdl/") - (license gpl3+))) + (license license:gpl3+))) (define-public guile-sdl2 (package @@ -651,7 +653,7 @@ sound and device input (keyboards, joysticks, mice, etc.).") "Guile-SDL2 provides Guile Scheme bindings for the SDL2 C shared library. The bindings are written in pure Scheme using Guile's foreign function interface.") - (license lgpl3+))) + (license license:lgpl3+))) (define-public guile2.2-sdl2 (package/inherit guile-sdl2 @@ -704,4 +706,4 @@ interface.") "SDL2-CS provides C# bindings for the SDL2 C shared library. The C# wrapper was written to be used for FNA's platform support. However, this is written in a way that can be used for any general C# application.") - (license zlib)))) + (license license:zlib)))) diff --git a/gnu/packages/serveez.scm b/gnu/packages/serveez.scm index 871fb00d3b..981d70ef70 100644 --- a/gnu/packages/serveez.scm +++ b/gnu/packages/serveez.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013 Eric Bavier <bavier@member.fsf.org> +;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -22,22 +23,22 @@ #:use-module (guix download) #:use-module (guix build-system gnu) #:use-module (gnu packages) + #:use-module (gnu packages compression) #:use-module (gnu packages guile)) (define-public serveez (package (name "serveez") - (version "0.2.2") + (version "0.3.0") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/serveez/serveez-" - version ".tar.xz")) + version ".tar.lz")) (sha256 (base32 - "09a5jh762ps71ivlg7vdlzp3y29ncl3nsad7qbcni78bq2mzwxsc")))) + "0capm8i6fyjvh5rflxkfd07llfaa0kk4i3y836qpld9vzy49q6ky")))) (build-system gnu-build-system) - (inputs `(("guile" ,guile-2.0))) (arguments `(#:configure-flags '("--enable-libserveez-install") #:phases @@ -48,6 +49,10 @@ (find-files "test" "^t[0-9]{3}$") (("/bin/sh") (which "sh"))) #t))))) + (native-inputs + `(("lzip" ,lzip))) + (inputs + `(("guile" ,guile-2.2))) (home-page "https://www.gnu.org/software/serveez/") (synopsis "Framework for implementing IP-based servers") (description diff --git a/gnu/packages/shellutils.scm b/gnu/packages/shellutils.scm index 70443f5019..61cc124815 100644 --- a/gnu/packages/shellutils.scm +++ b/gnu/packages/shellutils.scm @@ -55,6 +55,44 @@ #:use-module (gnu packages tmux) #:use-module (gnu packages vim)) +(define-public ascii + (package + (name "ascii") + (version "3.18") + (source (origin + (method url-fetch) + (uri (string-append "http://www.catb.org/~esr/ascii/" + "ascii-" version ".tar.gz")) + (sha256 + (base32 + "0b87vy06s8s3a8q70pqavsbk4m4ff034sdml2xxa6qfsykaj513j")))) + (build-system gnu-build-system) + (arguments `(#:make-flags + (list (string-append "CC=" ,(cc-for-target)) + (string-append "PREFIX=" %output)) + #:phases + (modify-phases %standard-phases + (delete 'configure) + (add-before 'install 'create-directories + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (man1 (string-append out "/share/man/man1"))) + (mkdir-p bin) + (mkdir-p man1))))) + #:tests? #f)) + (home-page "http://www.catb.org/~esr/ascii/") + (synopsis "ASCII name and synonym chart") + (description + "The @code{ascii} utility provides easy conversion between various byte +representations and the American Standard Code for Information Interchange +(ASCII) character table. It knows about a wide variety of hex, binary, octal, +Teletype mnemonic, ISO/ECMA code point, slang names, XML entity names, and +other representations. Given any one on the command line, it will try to +display all others. Called with no arguments it displays a handy small ASCII +chart.") + (license license:bsd-2))) + (define-public boxes (package (name "boxes") diff --git a/gnu/packages/suckless.scm b/gnu/packages/suckless.scm index b6e7a63d30..1b339e88fa 100644 --- a/gnu/packages/suckless.scm +++ b/gnu/packages/suckless.scm @@ -10,6 +10,7 @@ ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name> ;;; Copyright © 2021 Alexandru-Sergiu Marton <brown121407@posteo.ro> +;;; Copyright © 2021 Nikolay Korotkiy <sikmir@disroot.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -963,3 +964,31 @@ running a command.") Single daemon and configuration file. Log to stdout or syslog. No mail support.") (license license:expat))) + +(define-public sfm + (package + (name "sfm") + (version "0.4") + (source + (origin + (method git-fetch) + (uri + (git-reference + (url "git://git.afify.dev/sfm.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0g6k884mggryld0k054sjcj6kpkbca9cvr50w98klszym73yw0sp")))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ;no check target + #:make-flags + (list (string-append "CC=" ,(cc-for-target)) + (string-append "PREFIX=" %output)) + #:phases + (modify-phases %standard-phases + (delete 'configure)))) ;no configure script + (home-page "https://github.com/afify/sfm") + (synopsis "Simple file manager") + (description "sfm is a simple file manager.") + (license license:isc))) diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm index a44c553c71..10a2e240dc 100644 --- a/gnu/packages/version-control.scm +++ b/gnu/packages/version-control.scm @@ -2715,7 +2715,7 @@ a built-in wiki, built-in file browsing, built-in tickets system, etc.") (define-public stagit (package (name "stagit") - (version "0.9.6") + (version "1.0") (source (origin (method git-fetch) (uri (git-reference @@ -2724,7 +2724,7 @@ a built-in wiki, built-in file browsing, built-in tickets system, etc.") (file-name (git-file-name name version)) (sha256 (base32 - "0hcf1rmsp9s6jjg1dypq7sa3dqmqg2q3x1kj23rb5gwrsb31vyfj")))) + "0j2242vx5pbwdv79gcjxdbrwii48qphr8gk1lk7szj2irxdql171")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; No tests diff --git a/gnu/packages/web-browsers.scm b/gnu/packages/web-browsers.scm index a3457cb62f..945dc72847 100644 --- a/gnu/packages/web-browsers.scm +++ b/gnu/packages/web-browsers.scm @@ -695,7 +695,7 @@ is fully configurable and extensible in Common Lisp.") (define-public lagrange (package (name "lagrange") - (version "1.8.2") + (version "1.9.2") (source (origin (method url-fetch) @@ -703,7 +703,7 @@ is fully configurable and extensible in Common Lisp.") (string-append "https://git.skyjake.fi/skyjake/lagrange/releases/" "download/v" version "/lagrange-" version ".tar.gz")) (sha256 - (base32 "1wb4gqn32sja2qik04chlcl743arr6c844zczy1a2aad5103cnip")) + (base32 "1j4r2c6f9fqc22f14fjh28s324kfbb9ahf08nv0xlazy1y5g7f6d")) (modules '((guix build utils))) (snippet '(begin diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm index d28c60e576..7ea3217481 100644 --- a/gnu/packages/web.scm +++ b/gnu/packages/web.scm @@ -7952,39 +7952,37 @@ solution for any project's interface needs: (license license:expat))) (define-public gmnisrv - (let ((commit "32854b79c73b278bf33eb5123abf1c36abdc7c01") - (revision "2")) - (package - (name "gmnisrv") - (version (git-version "0" revision commit)) - (home-page "https://git.sr.ht/~sircmpwn/gmnisrv") - (source (origin - (method git-fetch) - (uri (git-reference - (url home-page) - (commit commit))) - (sha256 - (base32 - "0lbb3ablwkdcgm1cjr1hikr55y8gpl420nh8b8g9wn4abhm2xgr9")) - (file-name (git-file-name name version)))) - (build-system gnu-build-system) - (arguments - `(#:tests? #f ; no check target - #:configure-flags (list "--sysconfdir=/etc" - (string-append "--with-mimedb=" - (assoc-ref %build-inputs "mailcap") - "/etc/mime.types")) - #:make-flags (list (string-append "CC=" ,(cc-for-target))))) - (inputs - `(("mailcap" ,mailcap) - ("openssl" ,openssl))) - (native-inputs - `(("pkg-config" ,pkg-config) - ("scdoc" ,scdoc))) - (synopsis "Simple Gemini protocol server") - (description "gmnisrv is a simple Gemini protocol server written in C.") - (license (list license:gpl3+ - license:bsd-3))))) ;; for ini.c and ini.h + (package + (name "gmnisrv") + (version "1.0") + (home-page "https://git.sr.ht/~sircmpwn/gmnisrv") + (source + (origin + (method git-fetch) + (uri (git-reference + (url home-page) + (commit version))) + (sha256 + (base32 "115r1dw9k08r2nvygy8ll21qvsc5kmzi5jcqm7g7r8q8hifxglap")) + (file-name (git-file-name name version)))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ;no check target + #:configure-flags (list "--sysconfdir=/etc" + (string-append "--with-mimedb=" + (assoc-ref %build-inputs "mailcap") + "/etc/mime.types")) + #:make-flags (list (string-append "CC=" ,(cc-for-target))))) + (inputs + `(("mailcap" ,mailcap) + ("openssl" ,openssl))) + (native-inputs + `(("pkg-config" ,pkg-config) + ("scdoc" ,scdoc))) + (synopsis "Simple Gemini protocol server") + (description "gmnisrv is a simple Gemini protocol server written in C.") + (license (list license:gpl3+ + license:bsd-3)))) ;; for ini.c and ini.h (define-public libzim (package diff --git a/gnu/services/base.scm b/gnu/services/base.scm index 2631478b9e..5f93483dda 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -35,6 +35,8 @@ (define-module (gnu services base) #:use-module (guix store) #:use-module (guix deprecation) + #:autoload (guix diagnostics) (warning) + #:autoload (guix i18n) (G_) #:use-module (gnu services) #:use-module (gnu services admin) #:use-module (gnu services shepherd) @@ -53,6 +55,8 @@ #:use-module (gnu packages bash) #:use-module ((gnu packages base) #:select (coreutils glibc glibc-utf8-locales)) + #:autoload (gnu packages guile-xyz) (guile-netlink) + #:autoload (gnu packages hurd) (hurd) #:use-module (gnu packages package-management) #:use-module ((gnu packages gnupg) #:select (guile-gcrypt)) #:use-module (gnu packages linux) @@ -83,17 +87,38 @@ virtual-terminal-service-type static-networking - static-networking? - static-networking-interface - static-networking-ip - static-networking-netmask - static-networking-gateway + static-networking-addresses + static-networking-links + static-networking-routes static-networking-requirement + network-address + network-address? + network-address-device + network-address-value + network-address-ipv6? + + network-link + network-link? + network-link-name + network-link-type + network-link-arguments + + network-route + network-route? + network-route-destination + network-route-source + network-route-device + network-route-ipv6? + network-route-gateway + static-networking-service static-networking-service-type + %loopback-static-networking + %qemu-static-networking + udev-configuration udev-configuration? udev-configuration-rules @@ -2354,72 +2379,267 @@ notably to select, copy, and paste text. The default options use the (description "Start the @command{kmscon} virtual terminal emulator for the Linux @dfn{kernel mode setting} (KMS)."))) + +;;; +;;; Static networking. +;;; + +(define (ipv6-address? str) + "Return true if STR denotes an IPv6 address." + (false-if-exception (->bool (inet-pton AF_INET6 str)))) + (define-record-type* <static-networking> static-networking make-static-networking static-networking? - (interface static-networking-interface) - (ip static-networking-ip) - (netmask static-networking-netmask - (default #f)) - (gateway static-networking-gateway ;FIXME: doesn't belong here - (default #f)) + (addresses static-networking-addresses) ;list of <network-address> + (links static-networking-links (default '())) ;list of <network-link> + (routes static-networking-routes (default '())) ;list of <network-routes> (provision static-networking-provision - (default #f)) + (default '(networking))) (requirement static-networking-requirement - (default '())) + (default '(udev))) (name-servers static-networking-name-servers ;FIXME: doesn't belong here (default '()))) -(define static-networking-shepherd-service +(define-record-type* <network-address> + network-address make-network-address + network-address? + (device network-address-device) ;string--e.g., "en01" + (value network-address-value) ;string--CIDR notation + (ipv6? network-address-ipv6? ;Boolean + (thunked) + (default + (ipv6-address? (cidr->ip (network-address-value this-record)))))) + +(define-record-type* <network-link> + network-link make-network-link + network-link? + (name network-link-name) ;string--e.g, "v0p0" + (type network-link-type) ;symbol--e.g.,'veth + (arguments network-link-arguments)) ;list + +(define-record-type* <network-route> + network-route make-network-route + network-route? + (destination network-route-destination) + (source network-route-source (default #f)) + (device network-route-device (default #f)) + (ipv6? network-route-ipv6? (thunked) + (default + (or (ipv6-address? (network-route-destination this-record)) + (and=> (network-route-gateway this-record) + ipv6-address?)))) + (gateway network-route-gateway (default #f))) + +(define* (cidr->netmask str #:optional (family AF_INET)) + "Given @var{str}, a string in CIDR notation (e.g., \"1.2.3.4/24\"), return +the netmask as a string like \"255.255.255.0\"." + (match (string-split str #\/) + ((ip (= string->number bits)) + (let ((mask (ash (- (expt 2 bits) 1) + (- (if (= family AF_INET6) 128 32) + bits)))) + (inet-ntop family mask))) + (_ #f))) + +(define (cidr->ip str) + "Strip the netmask bit of @var{str}, a CIDR-notation IP/netmask address." + (match (string-split str #\/) + ((or (ip _) (ip)) + ip))) + +(define* (ip+netmask->cidr ip netmask #:optional (family AF_INET)) + "Return the CIDR notation (a string) for @var{ip} and @var{netmask}, two +@var{family} address strings, where @var{family} is @code{AF_INET} or +@code{AF_INET6}." + (let* ((netmask (inet-pton family netmask)) + (bits (logcount netmask))) + (string-append ip "/" (number->string bits)))) + +(define (static-networking->hurd-pfinet-options config) + "Return command-line options for the Hurd's pfinet translator corresponding +to CONFIG." + (unless (null? (static-networking-links config)) + ;; XXX: Presumably this is not supported, or perhaps could be approximated + ;; by running separate pfinet instances in some cases? + (warning (G_ "network links are currently ignored on GNU/Hurd~%"))) + + (match (static-networking-addresses config) + ((and addresses (first _ ...)) + `("--ipv6" "/servers/socket/26" + "--interface" ,(network-address-device first) + ,@(append-map (lambda (address) + `(,(if (network-address-ipv6? address) + "--address6" + "--address") + ,(cidr->ip (network-address-value address)) + ,@(match (cidr->netmask (network-address-value address) + (if (network-address-ipv6? address) + AF_INET6 + AF_INET)) + (#f '()) + (mask (list "--netmask" mask))))) + addresses) + ,@(append-map (lambda (route) + (match route + (($ <network-route> "default" #f device _ gateway) + (if (network-route-ipv6? route) + `("--gateway6" ,gateway) + `("--gateway" ,gateway))) + (($ <network-route> destination) + (warning (G_ "ignoring network route for '~a'~%") + destination) + '()))) + (static-networking-routes config)))))) + +(define (network-set-up/hurd config) + "Set up networking for the Hurd." + ;; The Hurd implements SIOCGIFADDR and other old-style ioctls, but the only + ;; way to set up IPv6 is by starting pfinet with the right options. + (if (equal? (static-networking-provision config) '(loopback)) + (scheme-file "set-up-pflocal" #~(begin 'nothing-to-do! #t)) + (scheme-file "set-up-pfinet" + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils) + (ice-9 format)) + + ;; TODO: Do that without forking. + (let ((options '#$(static-networking->hurd-pfinet-options + config))) + (format #t "starting '~a~{ ~s~}'~%" + #$(file-append hurd "/hurd/pfinet") + options) + (apply invoke #$(file-append hurd "/bin/settrans") "-fac" + "/servers/socket/2" + #$(file-append hurd "/hurd/pfinet") + options))))))) + +(define (network-tear-down/hurd config) + (scheme-file "tear-down-pfinet" + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + + ;; Forcefully terminate pfinet. XXX: In theory this + ;; should just undo the addresses and routes of CONFIG; + ;; this could be done using ioctls like SIOCDELRT, but + ;; these are IPv4-only; another option would be to use + ;; fsysopts but that seems to crash pfinet. + (invoke #$(file-append hurd "/bin/settrans") "-fg" + "/servers/socket/2") + #f)))) + +(define network-set-up/linux + (match-lambda + (($ <static-networking> addresses links routes) + (scheme-file "set-up-network" + (with-extensions (list guile-netlink) + #~(begin + (use-modules (ip addr) (ip link) (ip route)) + + #$@(map (lambda (address) + #~(begin + (addr-add #$(network-address-device address) + #$(network-address-value address) + #:ipv6? + #$(network-address-ipv6? address)) + ;; FIXME: loopback? + (link-set #$(network-address-device address) + #:up #t))) + addresses) + #$@(map (match-lambda + (($ <network-link> name type arguments) + #~(link-add #$name #$type + #:type-args '#$arguments))) + links) + #$@(map (lambda (route) + #~(route-add #$(network-route-destination route) + #:device + #$(network-route-device route) + #:ipv6? + #$(network-route-ipv6? route) + #:via + #$(network-route-gateway route) + #:src + #$(network-route-source route))) + routes) + #t)))))) + +(define network-tear-down/linux (match-lambda - (($ <static-networking> interface ip netmask gateway provision - requirement name-servers) + (($ <static-networking> addresses links routes) + (scheme-file "tear-down-network" + (with-extensions (list guile-netlink) + #~(begin + (use-modules (ip addr) (ip link) (ip route) + (netlink error) + (srfi srfi-34)) + + (define-syntax-rule (false-if-netlink-error exp) + (guard (c ((netlink-error? c) #f)) + exp)) + + ;; Wrap calls in 'false-if-netlink-error' so this + ;; script goes as far as possible undoing the effects + ;; of "set-up-network". + + #$@(map (lambda (route) + #~(false-if-netlink-error + (route-del #$(network-route-destination route) + #:device + #$(network-route-device route) + #:ipv6? + #$(network-route-ipv6? route) + #:via + #$(network-route-gateway route) + #:src + #$(network-route-source route)))) + routes) + #$@(map (match-lambda + (($ <network-link> name type arguments) + #~(false-if-netlink-error + (link-del #$name)))) + links) + #$@(map (lambda (address) + #~(false-if-netlink-error + (addr-del #$(network-address-device + address) + #$(network-address-value address) + #:ipv6? + #$(network-address-ipv6? address)))) + addresses) + #f)))))) + +(define (static-networking-shepherd-service config) + (match config + (($ <static-networking> addresses links routes + provision requirement name-servers) (let ((loopback? (and provision (memq 'loopback provision)))) (shepherd-service (documentation "Bring up the networking interface using a static IP address.") (requirement requirement) - (provision (or provision - (list (symbol-append 'networking- - (string->symbol interface))))) + (provision provision) (start #~(lambda _ ;; Return #t if successfully started. - (let* ((addr (inet-pton AF_INET #$ip)) - (sockaddr (make-socket-address AF_INET addr 0)) - (mask (and #$netmask - (inet-pton AF_INET #$netmask))) - (maskaddr (and mask - (make-socket-address AF_INET - mask 0))) - (gateway (and #$gateway - (inet-pton AF_INET #$gateway))) - (gatewayaddr (and gateway - (make-socket-address AF_INET - gateway 0)))) - (configure-network-interface #$interface sockaddr - (logior IFF_UP - #$(if loopback? - #~IFF_LOOPBACK - 0)) - #:netmask maskaddr) - (when gateway - (let ((sock (socket AF_INET SOCK_DGRAM 0))) - (add-network-route/gateway sock gatewayaddr) - (close-port sock)))))) + (load #$(let-system (system target) + (if (string-contains (or target system) "-linux") + (network-set-up/linux config) + (network-set-up/hurd config)))))) (stop #~(lambda _ ;; Return #f is successfully stopped. - (let ((sock (socket AF_INET SOCK_STREAM 0))) - (when #$gateway - (delete-network-route sock - (make-socket-address - AF_INET INADDR_ANY 0))) - (set-network-interface-flags sock #$interface 0) - (close-port sock) - #f))) + (load #$(let-system (system target) + (if (string-contains (or target system) "-linux") + (network-tear-down/linux config) + (network-tear-down/hurd config)))))) (respawn? #f)))))) +(define (static-networking-shepherd-services networks) + (map static-networking-shepherd-service networks)) + (define (static-networking-etc-files interfaces) "Return a /etc/resolv.conf entry for INTERFACES or the empty list." (match (delete-duplicates @@ -2438,30 +2658,6 @@ Linux @dfn{kernel mode setting} (KMS)."))) # Generated by 'static-networking-service'.\n" content)))))))) -(define (static-networking-shepherd-services interfaces) - "Return the list of Shepherd services to bring up INTERFACES, a list of -<static-networking> objects." - (define (loopback? service) - (memq 'loopback (shepherd-service-provision service))) - - (let ((services (map static-networking-shepherd-service interfaces))) - (match (remove loopback? services) - (() - ;; There's no interface other than 'loopback', so we assume that the - ;; 'networking' service will be provided by dhclient or similar. - services) - ((non-loopback ...) - ;; Assume we're providing all the interfaces, and thus, provide a - ;; 'networking' service. - (cons (shepherd-service - (provision '(networking)) - (requirement (append-map shepherd-service-provision - services)) - (start #~(const #t)) - (stop #~(const #f)) - (documentation "Bring up all the networking interfaces.")) - services))))) - (define static-networking-service-type ;; The service type for statically-defined network interfaces. (service-type (name 'static-networking) @@ -2479,12 +2675,13 @@ with the given IP address, gateway, netmask, and so on. The value for services of this type is a list of @code{static-networking} objects, one per network interface."))) -(define* (static-networking-service interface ip - #:key - netmask gateway provision - ;; Most interfaces require udev to be usable. - (requirement '(udev)) - (name-servers '())) +(define-deprecated (static-networking-service interface ip + #:key + netmask gateway provision + ;; Most interfaces require udev to be usable. + (requirement '(udev)) + (name-servers '())) + static-networking-service-type "Return a service that starts @var{interface} with address @var{ip}. If @var{netmask} is true, use it as the network mask. If @var{gateway} is true, it must be a string specifying the default network gateway. @@ -2495,11 +2692,47 @@ interface of interest. Behind the scenes what it does is extend to handle." (simple-service 'static-network-interface static-networking-service-type - (list (static-networking (interface interface) (ip ip) - (netmask netmask) (gateway gateway) - (provision provision) - (requirement requirement) - (name-servers name-servers))))) + (list (static-networking + (addresses + (list (network-address + (device interface) + (value (if netmask + (ip+netmask->cidr ip netmask) + ip)) + (ipv6? #f)))) + (routes + (if gateway + (list (network-route + (destination "default") + (gateway gateway) + (ipv6? #f))) + '())) + (requirement requirement) + (provision (or provision '(networking))) + (name-servers name-servers))))) + +(define %loopback-static-networking + ;; The loopback device. + (static-networking + (addresses (list (network-address + (device "lo") + (value "127.0.0.1")))) + (requirement '()) + (provision '(loopback)))) + +(define %qemu-static-networking + ;; Networking configuration for QEMU's user-mode network stack (info "(QEMU) + ;; Using the user mode network stack"). + (static-networking + (addresses (list (network-address + (device "eth0") + (value "10.0.2.15/24")))) + (routes (list (network-route + (destination "default") + (gateway "10.0.2.2")))) + (requirement '()) + (provision '(networking)) + (name-servers '("10.0.2.3")))) (define %base-services @@ -2531,10 +2764,7 @@ to handle." (tty "tty6"))) (service static-networking-service-type - (list (static-networking (interface "lo") - (ip "127.0.0.1") - (requirement '()) - (provision '(loopback))))) + (list %loopback-static-networking)) (syslog-service) (service urandom-seed-service-type) (service guix-service-type) diff --git a/gnu/services/virtualization.scm b/gnu/services/virtualization.scm index 4222bb4353..66ae1a1565 100644 --- a/gnu/services/virtualization.scm +++ b/gnu/services/virtualization.scm @@ -898,23 +898,44 @@ specified, the QEMU default path is used.")) ;;; Secrets for guest VMs. ;;; -(define (secret-service-activation port) - "Return an activation snippet that fetches sensitive material at local PORT, +(define (secret-service-shepherd-services port) + "Return a Shepherd service that fetches sensitive material at local PORT, over TCP. Reboot upon failure." - (with-imported-modules '((gnu build secret-service) - (guix build utils)) - #~(begin - (use-modules (gnu build secret-service)) - (let ((sent (secret-service-receive-secrets #$port))) - (unless sent - (sleep 3) - (reboot)))))) + ;; This is a Shepherd service, rather than an activation snippet, to make + ;; sure it is started once 'networking' is up so it can accept incoming + ;; connections. + (list + (shepherd-service + (documentation "Fetch secrets from the host at startup time.") + (provision '(secret-service-client)) + (requirement '(loopback networking)) + (modules '((gnu build secret-service) + (guix build utils))) + (start (with-imported-modules '((gnu build secret-service) + (guix build utils)) + #~(lambda () + ;; Since shepherd's output port goes to /dev/log, write this + ;; message to stderr so it's visible on the Mach console. + (format (current-error-port) + "receiving secrets from the host...~%") + (force-output (current-error-port)) + + (let ((sent (secret-service-receive-secrets #$port))) + (unless sent + (sleep 3) + (reboot)))))) + (stop #~(const #f))))) (define secret-service-type (service-type (name 'secret-service) - (extensions (list (service-extension activation-service-type - secret-service-activation))) + (extensions (list (service-extension shepherd-root-service-type + secret-service-shepherd-services) + + ;; Make every Shepherd service depend on + ;; 'secret-service-client'. + (service-extension user-processes-service-type + (const '(secret-service-client))))) (description "This service fetches secret key and other sensitive material over TCP at boot time. This service is meant to be used by virtual machines (VMs) that diff --git a/gnu/system/hurd.scm b/gnu/system/hurd.scm index 0794671ce4..2acc7b7e11 100644 --- a/gnu/system/hurd.scm +++ b/gnu/system/hurd.scm @@ -79,11 +79,13 @@ (service hurd-getty-service-type (hurd-getty-configuration (tty "tty2"))) (service static-networking-service-type - (list (static-networking (interface "lo") - (ip "127.0.0.1") - (requirement '()) - (provision '(loopback networking)) - (name-servers '("10.0.2.3"))))) + (list %loopback-static-networking + + ;; QEMU user-mode networking. To get "eth0", you need + ;; QEMU to emulate a device for which Mach has an + ;; in-kernel driver, for instance with: + ;; --device rtl8139,netdev=net0 --netdev user,id=net0 + %qemu-static-networking)) (syslog-service) (service guix-service-type (guix-configuration diff --git a/gnu/system/install.scm b/gnu/system/install.scm index 7b394184ad..073d7df1db 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -408,10 +408,7 @@ Access documentation at any time by pressing Alt-F2.\x1b[0m ;; Loopback device, needed by OpenSSH notably. (service static-networking-service-type - (list (static-networking (interface "lo") - (ip "127.0.0.1") - (requirement '()) - (provision '(loopback))))) + (list %loopback-static-networking)) (service wpa-supplicant-service-type) (dbus-service) diff --git a/gnu/tests/ganeti.scm b/gnu/tests/ganeti.scm index 41996678dd..f647e9554c 100644 --- a/gnu/tests/ganeti.scm +++ b/gnu/tests/ganeti.scm @@ -59,11 +59,8 @@ (packages (append (list ganeti-instance-debootstrap ganeti-instance-guix) %base-packages)) (services - (append (list (static-networking-service "eth0" "10.0.2.15" - #:netmask "255.255.255.0" - #:gateway "10.0.2.2" - #:name-servers '("10.0.2.3")) - + (append (list (service static-networking-service-type + (list %qemu-static-networking)) (service openssh-service-type (openssh-configuration (permit-root-login 'prohibit-password))) diff --git a/gnu/tests/networking.scm b/gnu/tests/networking.scm index cebba7c7ca..2bcc7f70dc 100644 --- a/gnu/tests/networking.scm +++ b/gnu/tests/networking.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com> ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net> ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be> +;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -37,8 +38,100 @@ #:use-module (gnu packages guile) #:use-module (gnu services shepherd) #:use-module (ice-9 match) - #:export (%test-inetd %test-openvswitch %test-dhcpd %test-tor %test-iptables - %test-ipfs)) + #:export (%test-static-networking + %test-inetd + %test-openvswitch + %test-dhcpd + %test-tor + %test-iptables + %test-ipfs)) + + +;;; +;;; Static networking. +;;; + +(define (run-static-networking-test vm) + (define test + (with-imported-modules '((gnu build marionette) + (guix build syscalls)) + #~(begin + (use-modules (gnu build marionette) + (guix build syscalls) + (srfi srfi-64)) + + (define marionette + (make-marionette + '(#$vm "-nic" "user,model=virtio-net-pci"))) + + (mkdir #$output) + (chdir #$output) + + (test-begin "static-networking") + + (test-assert "service is up" + (marionette-eval + '(begin + (use-modules (gnu services herd)) + (start-service 'networking)) + marionette)) + + (test-assert "network interfaces" + (marionette-eval + '(begin + (use-modules (guix build syscalls)) + (network-interface-names)) + marionette)) + + (test-equal "address of eth0" + "10.0.2.15" + (marionette-eval + '(let* ((sock (socket AF_INET SOCK_STREAM 0)) + (addr (network-interface-address sock "eth0"))) + (close-port sock) + (inet-ntop (sockaddr:fam addr) (sockaddr:addr addr))) + marionette)) + + (test-equal "netmask of eth0" + "255.255.255.0" + (marionette-eval + '(let* ((sock (socket AF_INET SOCK_STREAM 0)) + (mask (network-interface-netmask sock "eth0"))) + (close-port sock) + (inet-ntop (sockaddr:fam mask) (sockaddr:addr mask))) + marionette)) + + (test-equal "eth0 is up" + IFF_UP + (marionette-eval + '(let* ((sock (socket AF_INET SOCK_STREAM 0)) + (flags (network-interface-flags sock "eth0"))) + (logand flags IFF_UP)) + marionette)) + + (test-end) + + (exit (= (test-runner-fail-count (test-runner-current)) 0))))) + + (gexp->derivation "static-networking" test)) + +(define %test-static-networking + (system-test + (name "static-networking") + (description "Test the 'static-networking' service.") + (value + (let ((os (marionette-operating-system + (simple-operating-system + (service static-networking-service-type + (list %qemu-static-networking))) + #:imported-modules '((gnu services herd) + (guix combinators))))) + (run-static-networking-test (virtual-machine os)))))) + + +;;; +;;; Inetd. +;;; (define %inetd-os ;; Operating system with 2 inetd services. @@ -177,9 +270,13 @@ port 7, and a dict service on port 2628." (define %openvswitch-os (operating-system (inherit (simple-operating-system - (static-networking-service "ovs0" "10.1.1.1" - #:netmask "255.255.255.252" - #:requirement '(openvswitch-configuration)) + (simple-service 'openswitch-networking + static-networking-service-type + (list (static-networking + (addresses (list (network-address + (value "10.1.1.1/24") + (device "ovs0")))) + (requirement '(openvswitch-configuration))))) (service openvswitch-service-type) openvswitch-configuration-service)) ;; Ensure the interface name does not change depending on the driver. @@ -188,12 +285,15 @@ port 7, and a dict service on port 2628." (define (run-openvswitch-test) (define os (marionette-operating-system %openvswitch-os - #:imported-modules '((gnu services herd)))) + #:imported-modules '((gnu services herd) + (guix build syscalls)))) (define test - (with-imported-modules '((gnu build marionette)) + (with-imported-modules '((gnu build marionette) + (guix build syscalls)) #~(begin (use-modules (gnu build marionette) + (guix build syscalls) (ice-9 popen) (ice-9 rdelim) (srfi srfi-64)) @@ -234,11 +334,23 @@ port 7, and a dict service on port 2628." (srfi srfi-1)) (live-service-running (find (lambda (live) - (memq 'networking-ovs0 + (memq 'networking (live-service-provision live))) (current-services)))) marionette)) + (test-equal "ovs0 is up" + IFF_UP + (marionette-eval + '(begin + (use-modules (guix build syscalls)) + + (let* ((sock (socket AF_INET SOCK_STREAM 0)) + (flags (network-interface-flags sock "ovs0"))) + (close-port sock) + (logand flags IFF_UP))) + marionette)) + (test-end)))) (gexp->derivation "openvswitch-test" test)) @@ -276,10 +388,15 @@ subnet 192.168.1.0 netmask 255.255.255.0 { (define %dhcpd-os (simple-operating-system - (static-networking-service "ens3" "192.168.1.4" - #:netmask "255.255.255.0" - #:gateway "192.168.1.1" - #:name-servers '("192.168.1.2" "192.168.1.3")) + (service static-networking-service-type + (list (static-networking + (addresses (list (network-address + (value "192.168.1.4/24") + (device "ens3")))) + (routes (list (network-route + (destination "default") + (gateway "192.168.1.1")))) + (name-servers '("192.168.1.2" "192.168.1.3"))))) (service dhcpd-service-type dhcpd-v4-configuration))) (define (run-dhcpd-test) diff --git a/guix/narinfo.scm b/guix/narinfo.scm index 72e0f75fda..4fc550aa6c 100644 --- a/guix/narinfo.scm +++ b/guix/narinfo.scm @@ -144,7 +144,9 @@ must contain the original contents of a narinfo file." (map (lambda (url) (or (string->uri url) (string->uri - (string-append cache-url "/" url)))) + (if (string-suffix? "/" cache-url) + (string-append cache-url url) + (string-append cache-url "/" url))))) urls) compressions (match file-sizes diff --git a/guix/progress.scm b/guix/progress.scm index 0cbc804ec1..4f8e98edc0 100644 --- a/guix/progress.scm +++ b/guix/progress.scm @@ -270,19 +270,25 @@ ABBREVIATION used to shorten FILE for display." tasks is performed. Write PREFIX at the beginning of the line." (define done 0) + (define (draw-bar) + (let* ((ratio (* 100. (/ done total)))) + (erase-current-line port) + (if (string-null? prefix) + (display (progress-bar ratio (current-terminal-columns)) port) + (let ((width (- (current-terminal-columns) + (string-length prefix) 3))) + (display prefix port) + (display " " port) + (display (progress-bar ratio width) port))) + (force-output port))) + + (define draw-bar/rate-limited + (rate-limited draw-bar %progress-interval)) + (define (report-progress) (set! done (+ 1 done)) (unless (> done total) - (let* ((ratio (* 100. (/ done total)))) - (erase-current-line port) - (if (string-null? prefix) - (display (progress-bar ratio (current-terminal-columns)) port) - (let ((width (- (current-terminal-columns) - (string-length prefix) 3))) - (display prefix port) - (display " " port) - (display (progress-bar ratio width) port))) - (force-output port)))) + (draw-bar/rate-limited))) (progress-reporter (start (lambda () diff --git a/guix/scripts/challenge.scm b/guix/scripts/challenge.scm index 69c2781abb..c29d5105ae 100644 --- a/guix/scripts/challenge.scm +++ b/guix/scripts/challenge.scm @@ -35,10 +35,10 @@ #:use-module (gcrypt hash) #:use-module (srfi srfi-1) #:use-module (srfi srfi-9) - #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) #:use-module (srfi srfi-34) #:use-module (srfi srfi-37) + #:use-module (srfi srfi-71) #:use-module (ice-9 match) #:use-module (ice-9 vlist) #:use-module (ice-9 format) @@ -196,65 +196,68 @@ taken since we do not import the archives." (define (port-sha256* port size) ;; Like 'port-sha256', but limited to SIZE bytes. - (let-values (((out get) (open-sha256-port))) + (let ((out get (open-sha256-port))) (dump-port* port out size) (close-port out) (get))) (define (archive-contents port) - "Return a list representing the files contained in the nar read from PORT." - (fold-archive (lambda (file type contents result) - (match type - ((or 'regular 'executable) - (match contents - ((port . size) - (cons `(,file ,type ,(port-sha256* port size)) - result)))) - ('directory result) - ('directory-complete result) - ('symlink - (cons `(,file ,type ,contents) result)))) - '() - port - "")) + "Return a list representing the files contained in the nar read from PORT. +The list is sorted in canonical order--i.e., the order in which entries appear +in the nar." + (reverse + (fold-archive (lambda (file type contents result) + (match type + ((or 'regular 'executable) + (match contents + ((port . size) + (cons `(,file ,type ,(port-sha256* port size)) + result)))) + ('directory result) + ('directory-complete result) + ('symlink + (cons `(,file ,type ,contents) result)))) + '() + port + ""))) (define (store-item-contents item) "Return a list of files and contents for ITEM in the same format as 'archive-contents'." - (file-system-fold (const #t) ;enter? - (lambda (file stat result) ;leaf - (define short - (string-drop file (string-length item))) - - (match (stat:type stat) - ('regular - (let ((size (stat:size stat)) - (type (if (zero? (logand (stat:mode stat) - #o100)) - 'regular - 'executable))) - (cons `(,short ,type - ,(call-with-input-file file - (cut port-sha256* <> size))) - result))) - ('symlink - (cons `(,short symlink ,(readlink file)) - result)))) - (lambda (directory stat result) result) ;down - (lambda (directory stat result) result) ;up - (lambda (file stat result) result) ;skip - (lambda (file stat errno result) result) ;error - '() - item - lstat)) + (let loop ((file item)) + (define stat + (lstat file)) + + (define short + (string-drop file (string-length item))) + + (match (stat:type stat) + ('regular + (let ((size (stat:size stat)) + (type (if (zero? (logand (stat:mode stat) + #o100)) + 'regular + 'executable))) + `((,short ,type + ,(call-with-input-file file + (cut port-sha256* <> size)))))) + ('symlink + `((,short symlink ,(readlink file)))) + ('directory + (append-map (match-lambda + ((or "." "..") + '()) + (entry + (loop (string-append file "/" entry)))) + ;; Traverse entries in canonical order, the same as the + ;; order of entries in nars. + (scandir file (const #t) string<?)))))) (define (call-with-nar narinfo proc) "Call PROC with an input port from which it can read the nar pointed to by NARINFO." - (let*-values (((uri compression size) - (narinfo-best-uri narinfo)) - ((port actual-size) - (http-fetch uri))) + (let* ((uri compression size (narinfo-best-uri narinfo)) + (port actual-size (http-fetch uri))) (define reporter (progress-reporter/file (narinfo-path narinfo) (and size diff --git a/guix/substitutes.scm b/guix/substitutes.scm index a5c554acff..9014cf61ec 100644 --- a/guix/substitutes.scm +++ b/guix/substitutes.scm @@ -156,7 +156,11 @@ indicates that PATH is unavailable at CACHE-URL." (define (narinfo-request cache-url path) "Return an HTTP request for the narinfo of PATH at CACHE-URL." - (let* ((base (string->uri cache-url)) + ;; Ensure BASE has a trailing slash so that REF is correct regardless of + ;; whether the user-provided CACHE-URL has a trailing slash. + (let* ((base (string->uri (if (string-suffix? "/" cache-url) + cache-url + (string-append cache-url "/")))) (ref (build-relative-ref #:path (string-append (store-path-hash-part path) ".narinfo"))) (url (resolve-uri-reference ref base)) |