Merge branch 'master' into core-updates

master
Marius Bakke 2018-09-03 19:20:06 +02:00
commit 70dc8db8e7
No known key found for this signature in database
GPG Key ID: A2A06DF2A33A54FA
91 changed files with 4385 additions and 971 deletions

View File

@ -86,6 +86,8 @@ MODULES = \
guix/derivations.scm \
guix/grafts.scm \
guix/inferior.scm \
guix/describe.scm \
guix/channels.scm \
guix/gnu-maintenance.scm \
guix/self.scm \
guix/upstream.scm \

11
NEWS
View File

@ -3,6 +3,7 @@
#+STARTUP: content hidestars
Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
Copyright © 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
@ -10,6 +11,16 @@ Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
Please send Guix bug reports to bug-guix@gnu.org.
* Changes since 0.15.0
** Package management
*** guix import pypi has a new --recursive option
*** guix import hackage has a new --recursive option
*** guix import stackage has a new --recursive option
The short option for --lts-version is now -l (used to be -r).
* Changes in 0.15.0 (since 0.14.0)
** Package management

View File

@ -20,13 +20,20 @@
(use-modules (srfi srfi-26))
;; Add ~/.config/guix/latest to the search path.
(add-to-load-path
(and=> (or (getenv "XDG_CONFIG_HOME")
(and=> (getenv "HOME")
(cut string-append <> "/.config")))
(cute string-append <> "/guix/current/share/guile/site/"
(effective-version))))
;; Add ~/.config/guix/current to the search path.
(eval-when (expand load eval)
(and=> (or (getenv "XDG_CONFIG_HOME")
(and=> (getenv "HOME")
(cut string-append <> "/.config/guix/current")))
(lambda (current)
(set! %load-path
(cons (string-append current "/share/guile/site/"
(effective-version))
%load-path))
(set! %load-compiled-path
(cons (string-append current "/lib/guile/" (effective-version)
"/site-ccache")
%load-compiled-path)))))
(use-modules (guix) (guix ui)
(guix git-download)

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -128,11 +128,10 @@ paragraph."
(define (main . args)
(match args
((news-file data-directory)
;; Don't browse things listed in the user's $GUIX_PACKAGE_PATH. Here we
;; assume that the last item in (%package-module-path) is the distro
;; directory.
;; Don't browse things listed in the user's $GUIX_PACKAGE_PATH and
;; in external channels.
(parameterize ((%package-module-path
(list (last (%package-module-path)))))
%default-package-module-path))
(define (package-file version)
(string-append data-directory "/packages-"
version ".txt"))

View File

@ -146,17 +146,18 @@ Package Management
* Packages with Multiple Outputs:: Single source package, multiple outputs.
* Invoking guix gc:: Running the garbage collector.
* Invoking guix pull:: Fetching the latest Guix and distribution.
* Channels:: Customizing the package collection.
* Invoking guix pack:: Creating software bundles.
* Invoking guix archive:: Exporting and importing store files.
Substitutes
* Official Substitute Server:: One particular source of substitutes.
* Substitute Server Authorization:: How to enable or disable substitutes.
* Substitute Authentication:: How Guix verifies substitutes.
* Proxy Settings:: How to get substitutes via proxy.
* Substitution Failure:: What happens when substitution fails.
* On Trusting Binaries:: How can you trust that binary blob?
* Official Substitute Server:: One particular source of substitutes.
* Substitute Server Authorization:: How to enable or disable substitutes.
* Substitute Authentication:: How Guix verifies substitutes.
* Proxy Settings:: How to get substitutes via proxy.
* Substitution Failure:: What happens when substitution fails.
* On Trusting Binaries:: How can you trust that binary blob?
Programming Interface
@ -202,7 +203,7 @@ GNU Distribution
* System Installation:: Installing the whole operating system.
* System Configuration:: Configuring the operating system.
* Documentation:: Browsing software user manuals.
* Documentation:: Browsing software user manuals.
* Installing Debugging Files:: Feeding the debugger.
* Security Updates:: Deploying security fixes quickly.
* Package Modules:: Packages from the programmer's viewpoint.
@ -264,7 +265,7 @@ Services
* Audio Services:: The MPD.
* Virtualization Services:: Virtualization services.
* Version Control Services:: Providing remote access to Git repositories.
* Game Services:: Game servers.
* Game Services:: Game servers.
* Miscellaneous Services:: Other services.
Defining Services
@ -1694,6 +1695,7 @@ guix package -i emacs-guix
* Packages with Multiple Outputs:: Single source package, multiple outputs.
* Invoking guix gc:: Running the garbage collector.
* Invoking guix pull:: Fetching the latest Guix and distribution.
* Channels:: Customizing the package collection.
* Invoking guix pack:: Creating software bundles.
* Invoking guix archive:: Exporting and importing store files.
@end menu
@ -2276,12 +2278,12 @@ pre-built package binaries, but source tarballs, for instance, which
also result from derivation builds, can be available as substitutes.
@menu
* Official Substitute Server:: One particular source of substitutes.
* Substitute Server Authorization:: How to enable or disable substitutes.
* Substitute Authentication:: How Guix verifies substitutes.
* Proxy Settings:: How to get substitutes via proxy.
* Substitution Failure:: What happens when substitution fails.
* On Trusting Binaries:: How can you trust that binary blob?
* Official Substitute Server:: One particular source of substitutes.
* Substitute Server Authorization:: How to enable or disable substitutes.
* Substitute Authentication:: How Guix verifies substitutes.
* Proxy Settings:: How to get substitutes via proxy.
* Substitution Failure:: What happens when substitution fails.
* On Trusting Binaries:: How can you trust that binary blob?
@end menu
@node Official Substitute Server
@ -2746,7 +2748,8 @@ the distribution currently available on your local machine. To update
that distribution, along with the Guix tools, you must run @command{guix
pull}: the command downloads the latest Guix source code and package
descriptions, and deploys it. Source code is downloaded from a
@uref{https://git-scm.com, Git} repository.
@uref{https://git-scm.com, Git} repository, by default the official
GNU@tie{}Guix repository, though this can be customized.
On completion, @command{guix package} will use packages and package
versions from this just-retrieved copy of Guix. Not only that, but all
@ -2821,20 +2824,23 @@ but it supports the following options:
Produce verbose output, writing build logs to the standard error output.
@item --url=@var{url}
Download Guix from the Git repository at @var{url}.
@itemx --commit=@var{commit}
@itemx --branch=@var{branch}
Download code from the specified @var{url}, at the given @var{commit} (a valid
Git commit ID represented as a hexadecimal string), or @var{branch}.
@vindex GUIX_PULL_URL
By default, the source is taken from its canonical Git repository at
@code{gnu.org}, for the stable branch of Guix. To use a different source,
set the @code{GUIX_PULL_URL} environment variable.
@cindex @file{channels.scm}, configuration file
@cindex configuration file for channels
These options are provided for convenience, but you can also specify your
configuration in the @file{~/.config/guix/channels.scm} file or using the
@option{--channels} option (see below).
@item --commit=@var{commit}
Deploy @var{commit}, a valid Git commit ID represented as a hexadecimal
string.
@item --branch=@var{branch}
Deploy the tip of @var{branch}, the name of a Git branch available on
the repository at @var{url}.
@item --channels=@var{file}
@itemx -C @var{file}
Read the list of channels from @var{file} instead of
@file{~/.config/guix/channels.scm}. @var{file} must contain Scheme code that
evaluates to a list of channel objects. @xref{Channels}, for more
information.
@item --list-generations[=@var{pattern}]
@itemx -l [@var{pattern}]
@ -2848,9 +2854,180 @@ Use the bootstrap Guile to build the latest Guix. This option is only
useful to Guix developers.
@end table
The @dfn{channel} mechanism allows you to instruct @command{guix pull} which
repository and branch to pull from, as well as @emph{additional} repositories
containing package modules that should be deployed. @xref{Channels}, for more
information.
In addition, @command{guix pull} supports all the common build options
(@pxref{Common Build Options}).
@node Channels
@section Channels
@cindex channels
@cindex @file{channels.scm}, configuration file
@cindex configuration file for channels
@cindex @command{guix pull}, configuration file
@cindex configuration of @command{guix pull}
Guix and its package collection are updated by running @command{guix pull}
(@pxref{Invoking guix pull}). By default @command{guix pull} downloads and
deploys Guix itself from the official GNU@tie{}Guix repository. This can be
customized by defining @dfn{channels} in the
@file{~/.config/guix/channels.scm} file. A channel specifies a URL and branch
of a Git repository to be deployed, and @command{guix pull} can be instructed
to pull from one or more channels. In other words, channels can be used to
@emph{customize} and to @emph{extend} Guix, as we will see below.
@subsection Using a Custom Guix Channel
The channel called @code{guix} specifies where Guix itself---its command-line
tools as well as its package collection---should be downloaded. For instance,
suppose you want to update from your own copy of the Guix repository at
@code{example.org}, and specifically the @code{super-hacks} branch, you can
write in @code{~/.config/guix/channels.scm} this specification:
@lisp
;; Tell 'guix pull' to use my own repo.
(list (channel
(name 'guix)
(url "https://example.org/my-guix.git")
(branch "super-hacks")))
@end lisp
@noindent
From there on, @command{guix pull} will fetch code from the @code{super-hacks}
branch of the repository at @code{example.org}.
@subsection Specifying Additional Channels
@cindex extending the package collection (channels)
@cindex personal packages (channels)
@cindex channels, for personal packages
You can also specify @emph{additional channels} to pull from. Let's say you
have a bunch of custom package variants or personal packages that you think
would make little sense to contribute to the Guix project, but would like to
have these packages transparently available to you at the command line. You
would first write modules containing those package definitions (@pxref{Package
Modules}), maintain them in a Git repository, and then you and anyone else can
use it as an additional channel to get packages from. Neat, no?
@c What follows stems from discussions at
@c <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22629#134> as well as
@c earlier discussions on guix-devel@gnu.org.
@quotation Warning
Before you, dear user, shout---``woow this is @emph{soooo coool}!''---and
publish your personal channel to the world, we would like to share a few words
of caution:
@itemize
@item
Before publishing a channel, please consider contributing your package
definitions to Guix proper (@pxref{Contributing}). Guix as a project is open
to free software of all sorts, and packages in Guix proper are readily
available to all Guix users and benefit from the project's quality assurance
process.
@item
When you maintain package definitions outside Guix, we, Guix developers,
consider that @emph{the compatibility burden is on you}. Remember that
package modules and package definitions are just Scheme code that uses various
programming interfaces (APIs). We want to remain free to change these APIs to
keep improving Guix, possibly in ways that break your channel. We never
change APIs gratuitously, but we will @emph{not} commit to freezing APIs
either.
@item
Corollary: if you're using an external channel and that channel breaks, please
@emph{report the issue to the channel authors}, not to the Guix project.
@end itemize
You've been warned! Having said this, we believe external channels are a
practical way to exert your freedom to augment Guix' package collection and to
share your improvements, which are basic tenets of
@uref{https://www.gnu.org/philosophy/free-sw.html, free software}. Please
email us at @email{guix-devel@@gnu.org} if you'd like to discuss this.
@end quotation
Once you have a Git repository containing your own package modules, you can
write @code{~/.config/guix/channels.scm} to instruct @command{guix pull} to
pull from your personal channel @emph{in addition} to the default Guix
channel(s):
@vindex %default-channels
@lisp
;; Add my personal packages to those Guix provides.
(cons (channel
(name 'my-personal-packages)
(url "https://example.org/personal-packages.git"))
%default-channels)
@end lisp
@noindent
Note that the snippet above is (as always!) Scheme code; we use @code{cons} to
add a channel the list of channels that the variable @code{%default-channels}
is bound to (@pxref{Pairs, @code{cons} and lists,, guile, GNU Guile Reference
Manual}). With this file in place, @command{guix pull} builds not only Guix
but also the package modules from your own repository. The result in
@file{~/.config/guix/current} is the union of Guix with your own package
modules:
@example
$ guix pull --list-generations
@dots{}
Generation 19 Aug 27 2018 16:20:48
guix d894ab8
repository URL: https://git.savannah.gnu.org/git/guix.git
branch: master
commit: d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300
my-personal-packages dd3df5e
repository URL: https://example.org/personal-packages.git
branch: master
commit: dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb
11 new packages: my-gimp, my-emacs-with-cool-features, @dots{}
4 packages upgraded: emacs-racket-mode@@0.0.2-2.1b78827, @dots{}
@end example
@noindent
The output of @command{guix pull} above shows that Generation@tie{}19 includes
both Guix and packages from the @code{my-personal-packages} channel. Among
the new and upgraded packages that are listed, some like @code{my-gimp} and
@code{my-emacs-with-cool-features} might come from
@code{my-personal-packages}, while others come from the Guix default channel.
@subsection Replicating Guix
@cindex pinning, channels
@cindex replicating Guix
@cindex reproducibility, of Guix
The @command{guix pull --list-generations} output above shows precisely which
commits were used to build this instance of Guix. We can thus replicate it,
say, on another machine, by providing a channel specification in
@file{~/.config/guix/channels.scm} that is ``pinned'' to these commits:
@lisp
;; Deploy specific commits of my channels of interest.
(list (channel
(name 'guix)
(url "https://git.savannah.gnu.org/git/guix.git")
(commit "d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300"))
(channel
(name 'my-personal-packages)
(url "https://example.org/personal-packages.git")
(branch "dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb")))
@end lisp
At this point the two machines run the @emph{exact same Guix}, with access to
the @emph{exact same packages}. The output of @command{guix build gimp} on
one machine will be exactly the same, bit for bit, as the output of the same
command on the other machine. It also means both machines have access to all
the source code of Guix and, transitively, to all the source code of every
package it defines.
This gives you super powers, allowing you to track the provenance of binary
artifacts with very fine grain, and to reproduce software environments at
will---some sort of ``meta reproducibility'' capabilities, if you will.
@node Invoking guix pack
@section Invoking @command{guix pack}
@ -3431,9 +3608,9 @@ more information on how to test package definitions, and
@ref{Invoking guix lint}, for information on how to check a definition
for style conformance.
@vindex GUIX_PACKAGE_PATH
Lastly, @pxref{Package Modules}, for information
Lastly, @pxref{Channels}, for information
on how to extend the distribution by adding your own package definitions
to @code{GUIX_PACKAGE_PATH}.
in a ``channel''.
Finally, updating the package definition to a new upstream version
can be partly automated by the @command{guix refresh} command
@ -6255,8 +6432,8 @@ and that of Vim.
If you are using a Guix Git checkout (@pxref{Building from Git}), or
have created your own packages on @code{GUIX_PACKAGE_PATH}
(@pxref{Defining Packages}), you will be able to edit the package
recipes. Otherwise, you will be able to examine the read-only recipes
(@pxref{Package Modules}), you will be able to edit the package
recipes. In other cases, you will be able to examine the read-only recipes
for packages currently in the store.
@ -6442,6 +6619,14 @@ package:
guix import pypi itsdangerous
@end example
@table @code
@item --recursive
@itemx -r
Traverse the dependency graph of the given upstream package recursively
and generate package expressions for all those packages that are not yet
in Guix.
@end table
@item gem
@cindex gem
Import metadata from @uref{https://rubygems.org/,
@ -6699,9 +6884,14 @@ Specific command-line options are:
@itemx -t
Do not include dependencies required only by the test suites.
@item --lts-version=@var{version}
@itemx -r @var{version}
@itemx -l @var{version}
@var{version} is the desired LTS release version. If omitted the latest
release is used.
@item --recursive
@itemx -r
Traverse the dependency graph of the given upstream package recursively
and generate package expressions for all those packages that are not yet
in Guix.
@end table
The command below imports metadata for the @code{HTTP} Haskell package
@ -8363,7 +8553,7 @@ For information on porting to other architectures or kernels,
@menu
* System Installation:: Installing the whole operating system.
* System Configuration:: Configuring the operating system.
* Documentation:: Browsing software user manuals.
* Documentation:: Browsing software user manuals.
* Installing Debugging Files:: Feeding the debugger.
* Security Updates:: Deploying security fixes quickly.
* Package Modules:: Packages from the programmer's viewpoint.
@ -8402,7 +8592,7 @@ available.
@menu
* Limitations:: What you can expect.
* Hardware Considerations:: Supported hardware.
* USB Stick and DVD Installation:: Preparing the installation medium.
* USB Stick and DVD Installation:: Preparing the installation medium.
* Preparing for Installation:: Networking, partitioning, etc.
* Proceeding with the Installation:: The real thing.
* Installing GuixSD in a VM:: GuixSD playground.
@ -10083,7 +10273,7 @@ declaration.
* Audio Services:: The MPD.
* Virtualization Services:: Virtualization services.
* Version Control Services:: Providing remote access to Git repositories.
* Game Services:: Game servers.
* Game Services:: Game servers.
* Miscellaneous Services:: Other services.
@end menu
@ -11450,16 +11640,57 @@ detailed discussion of each configuration field.
@end deftp
@cindex Tor
@deffn {Scheme Procedure} tor-service [@var{config-file}] [#:tor @var{tor}]
Return a service to run the @uref{https://torproject.org, Tor} anonymous
networking daemon.
@defvr {Scheme Variable} tor-service-type
This is the type for a service that runs the @uref{https://torproject.org,
Tor} anonymous networking daemon. The service is configured using a
@code{<tor-configuration>} record. By default, the Tor daemon runs as the
@code{tor} unprivileged user, which is a member of the @code{tor} group.
The daemon runs as the @code{tor} unprivileged user. It is passed
@var{config-file}, a file-like object, with an additional @code{User tor} line
and lines for hidden services added via @code{tor-hidden-service}. Run
@command{man tor} for information about the configuration file.
@end defvr
@deffn {Scheme Procedure} tor-service [@var{config-file}] [#:tor @var{tor}]
This procedure is deprecated and will be removed in a future release. Return
a service of the @code{tor-service-type} type. @var{config-file} and
@var{tor} have the same meaning as in @code{<tor-configuration>}.
@end deffn
@deftp {Data Type} tor-configuration
@table @asis
@item @code{tor} (default: @code{tor})
The package that provides the Tor daemon. This package is expected to provide
the daemon at @file{bin/tor} relative to its output directory. The default
package is the @uref{https://www.torproject.org, Tor Project's}
implementation.
@item @code{config-file} (default: @code{(plain-file "empty" "")})
The configuration file to use. It will be appended to a default configuration
file, and the final configuration file will be passed to @code{tor} via its
@code{-f} option. This may be any ``file-like'' object (@pxref{G-Expressions,
file-like objects}). See @code{man tor} for details on the configuration file
syntax.
@item @code{hidden-services} (default: @code{'()})
The list of @code{<hidden-service>} records to use. For any hidden service
you include in this list, appropriate configuration to enable the hidden
service will be automatically added to the default configuration file. You
may conveniently create @code{<hidden-service>} records using the
@code{tor-hidden-service} procedure described below.
@item @code{socks-socket-type} (default: @code{'tcp})
The default socket type that Tor should use for its SOCKS socket. This must
be either @code{'tcp} or @code{'unix}. If it is @code{'tcp}, then by default
Tor will listen on TCP port 9050 on the loopback interface (i.e., localhost).
If it is @code{'unix}, then Tor will listen on the UNIX domain socket
@file{/var/run/tor/socks-sock}, which will be made writable by members of the
@code{tor} group.
If you want to customize the SOCKS socket in more detail, leave
@code{socks-socket-type} at its default value of @code{'tcp} and use
@code{config-file} to override the default by providing your own
@code{SocksPort} option.
@end table
@end deftp
@cindex hidden service
@deffn {Scheme Procedure} tor-hidden-service @var{name} @var{mapping}
Define a new Tor @dfn{hidden service} called @var{name} and implementing
@ -11741,6 +11972,12 @@ Additional authorized keys can be specified @i{via}
Note that this does @emph{not} interfere with the use of
@file{~/.ssh/authorized_keys}.
@item @code{log-level} (default: @code{'info})
This is a symbol specifying the logging level: @code{quiet}, @code{fatal},
@code{error}, @code{info}, @code{verbose}, @code{debug}, etc. See the man
page for @file{sshd_config} for the full list of level names.
@end table
@end deftp
@ -13302,7 +13539,7 @@ Users need to be in the @code{lp} group to access the D-Bus service.
The @code{(gnu services sound)} module provides a service to configure the
Advanced Linux Sound Architecture (ALSA) system, which making PulseAudio the
prefered ALSA output driver.
preferred ALSA output driver.
@deffn {Scheme Variable} alsa-service-type
This is the type for the @uref{https://alsa-project.org/, Advanced Linux Sound
@ -17188,7 +17425,7 @@ When true, don't read the hostnames in /etc/hosts.
@item @code{port} (default: @code{53})
The port to listen on. Setting this to zero completely disables DNS
funtion, leaving only DHCP and/or TFTP.
responses, leaving only DHCP and/or TFTP functions.
@item @code{local-service?} (default: @code{#t})
Accept DNS queries only from hosts whose address is on a local subnet,
@ -17216,6 +17453,114 @@ When false, disable negative caching.
@end table
@end deftp
@subsubheading ddclient Service
@cindex ddclient
The ddclient service described below runs the ddclient daemon, which takes
care of automatically updating DNS entries for service providers such as
@uref{https://dyn.com/dns/, Dyn}.
The following example show instantiates the service with its default
configuration:
@example
(service ddclient-service-type)
@end example
Note that ddclient needs to access credentials that are stored in a
@dfn{secret file}, by default @file{/etc/ddclient/secrets} (see
@code{secret-file} below.) You are expected to create this file manually, in
an ``out-of-band'' fashion (you @emph{could} make this file part of the
service configuration, for instance by using @code{plain-file}, but it will be
world-readable @i{via} @file{/gnu/store}.) See the examples in the
@file{share/ddclient} directory of the @code{ddclient} package.
@c %start of fragment
Available @code{ddclient-configuration} fields are:
@deftypevr {@code{ddclient-configuration} parameter} package ddclient
The ddclient package.
@end deftypevr
@deftypevr {@code{ddclient-configuration} parameter} integer daemon
The period after which ddclient will retry to check IP and domain name.
Defaults to @samp{300}.
@end deftypevr
@deftypevr {@code{ddclient-configuration} parameter} boolean syslog
Use syslog for the output.
Defaults to @samp{#t}.
@end deftypevr
@deftypevr {@code{ddclient-configuration} parameter} string mail
Mail to user.
Defaults to @samp{"root"}.
@end deftypevr
@deftypevr {@code{ddclient-configuration} parameter} string mail-failure
Mail failed update to user.
Defaults to @samp{"root"}.
@end deftypevr
@deftypevr {@code{ddclient-configuration} parameter} string pid
The ddclient PID file.
Defaults to @samp{"/var/run/ddclient/ddclient.pid"}.
@end deftypevr
@deftypevr {@code{ddclient-configuration} parameter} boolean ssl
Enable SSL support.
Defaults to @samp{#t}.
@end deftypevr
@deftypevr {@code{ddclient-configuration} parameter} string user
Specifies the user name or ID that is used when running ddclient
program.
Defaults to @samp{"ddclient"}.
@end deftypevr
@deftypevr {@code{ddclient-configuration} parameter} string group
Group of the user who will run the ddclient program.
Defaults to @samp{"ddclient"}.
@end deftypevr
@deftypevr {@code{ddclient-configuration} parameter} string secret-file
Secret file which will be appended to @file{ddclient.conf} file. This
file contains credentials for use by ddclient. You are expected to
create it manually.
Defaults to @samp{"/etc/ddclient/secrets.conf"}.
@end deftypevr
@deftypevr {@code{ddclient-configuration} parameter} list extra-options
Extra options will be appended to @file{ddclient.conf} file.
Defaults to @samp{()}.
@end deftypevr
@c %end of fragment
@node VPN Services
@subsubsection VPN Services
@cindex VPN (virtual private network)
@ -22473,16 +22818,24 @@ name and module name must match. For instance, the @code{(my-packages
emacs)} module must be stored in a @file{my-packages/emacs.scm} file
relative to the load path specified with @option{--load-path} or
@code{GUIX_PACKAGE_PATH}. @xref{Modules and the File System,,,
guile, GNU Guile Reference Manual}, for details.}. These package definitions
will not be visible by default. Users can invoke commands such as
@command{guix package} and @command{guix build} with the
@code{-e} option so that they know where to find the package. Better
yet, they can use the
@code{-L} option of these commands to make those modules visible
(@pxref{Invoking guix build, @code{--load-path}}), or define the
@code{GUIX_PACKAGE_PATH} environment variable. This environment
variable makes it easy to extend or customize the distribution and is
honored by all the user interfaces.
guile, GNU Guile Reference Manual}, for details.}. There are two ways to make
these package definitions visible to the user interfaces:
@enumerate
@item
By adding the directory containing your package modules to the search path
with the @code{-L} flag of @command{guix package} and other commands
(@pxref{Common Build Options}), or by setting the @code{GUIX_PACKAGE_PATH}
environment variable described below.
@item
By defining a @dfn{channel} and configuring @command{guix pull} so that it
pulls from it. A channel is essentially a Git repository containing package
modules. @xref{Channels}, for more information on how to define and use
channels.
@end enumerate
@code{GUIX_PACKAGE_PATH} works similarly to other search path variables:
@defvr {Environment Variable} GUIX_PACKAGE_PATH
This is a colon-separated list of directories to search for additional

View File

@ -136,7 +136,7 @@ and normalizing it."
(define (find-module-file directory module)
"Lookup module NAME under DIRECTORY, and return its absolute file name.
NAME can be a file name with or without '.ko', or it can be a module name.
Return #f if it could not be found.
Raise an error if it could not be found.
Module names can differ from file names in interesting ways; for instance,
module names usually (always?) use underscores as the inter-word separator,
@ -162,7 +162,7 @@ whereas file names often, but not always, use hyphens. Examples:
((file)
file)
(()
#f)
(error "kernel module not found" module directory))
((_ ...)
(error "several modules by that name" module directory))))

View File

@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -27,6 +28,7 @@
marionette-eval
wait-for-file
wait-for-tcp-port
wait-for-unix-socket
marionette-control
marionette-screen-text
wait-for-screen-text
@ -214,6 +216,29 @@ MARIONETTE. Raise an error on failure."
('failure
(error "nobody's listening on port" port))))
(define* (wait-for-unix-socket file-name marionette
#:key (timeout 20))
"Wait for up to TIMEOUT seconds for FILE-NAME, a Unix domain socket, to
accept connections in MARIONETTE. Raise an error on failure."
(match (marionette-eval
`(begin
(let ((sock (socket PF_UNIX SOCK_STREAM 0)))
(let loop ((i 0))
(catch 'system-error
(lambda ()
(connect sock AF_UNIX ,file-name)
'success)
(lambda args
(if (< i ,timeout)
(begin
(sleep 1)
(loop (+ 1 i)))
'failure))))))
marionette)
('success #t)
('failure
(error "nobody's listening on unix domain socket" file-name))))
(define (marionette-control command marionette)
"Run COMMAND in the QEMU monitor of MARIONETTE. COMMAND is a string such as
\"sendkey ctrl-alt-f1\" or \"screendump foo.ppm\" (info \"(qemu-doc)
@ -222,7 +247,8 @@ pcsys_monitor\")."
(($ <marionette> _ _ monitor)
(display command monitor)
(newline monitor)
(wait-for-monitor-prompt monitor))))
;; The "quit" command terminates QEMU immediately, with no output.
(unless (string=? command "quit") (wait-for-monitor-prompt monitor)))))
(define* (marionette-screen-text marionette
#:key

View File

@ -213,6 +213,7 @@ GNU_SYSTEM_MODULES = \
%D%/packages/guile-wm.scm \
%D%/packages/gv.scm \
%D%/packages/gxmessage.scm \
%D%/packages/hardware.scm \
%D%/packages/haskell.scm \
%D%/packages/haskell-check.scm \
%D%/packages/haskell-crypto.scm \
@ -650,6 +651,7 @@ dist_patch_DATA = \
%D%/packages/patches/doc++-segfault-fix.patch \
%D%/packages/patches/dovecot-trees-support-dovecot-2.3.patch \
%D%/packages/patches/doxygen-test.patch \
%D%/packages/patches/dropbear-CVE-2018-15599.patch \
%D%/packages/patches/dvd+rw-tools-add-include.patch \
%D%/packages/patches/elfutils-tests-ptrace.patch \
%D%/packages/patches/elogind-glibc-2.27.patch \
@ -793,6 +795,8 @@ dist_patch_DATA = \
%D%/packages/patches/gtkglext-disable-disable-deprecated.patch \
%D%/packages/patches/gzdoom-search-in-installed-share.patch \
%D%/packages/patches/handbrake-pkg-config-path.patch \
%D%/packages/patches/haskell-mode-unused-variables.patch \
%D%/packages/patches/haskell-mode-make-check.patch \
%D%/packages/patches/hdf4-architectures.patch \
%D%/packages/patches/hdf4-reproducibility.patch \
%D%/packages/patches/hdf4-shared-fortran.patch \
@ -999,7 +1003,6 @@ dist_patch_DATA = \
%D%/packages/patches/ola-readdir-r.patch \
%D%/packages/patches/openbabel-fix-crash-on-nwchem-output.patch \
%D%/packages/patches/opencascade-oce-glibc-2.26.patch \
%D%/packages/patches/openexr-missing-samples.patch \
%D%/packages/patches/openfoam-4.1-cleanup.patch \
%D%/packages/patches/openldap-CVE-2017-9287.patch \
%D%/packages/patches/openocd-nrf52.patch \
@ -1123,6 +1126,7 @@ dist_patch_DATA = \
%D%/packages/patches/ruby-concurrent-test-arm.patch \
%D%/packages/patches/ruby-rack-ignore-failing-test.patch \
%D%/packages/patches/ruby-tzinfo-data-ignore-broken-test.patch\
%D%/packages/patches/rust-1.19-mrustc.patch \
%D%/packages/patches/rust-bootstrap-stage0-test.patch \
%D%/packages/patches/rust-coresimd-doctest.patch \
%D%/packages/patches/rxvt-unicode-escape-sequences.patch \

View File

@ -30,6 +30,7 @@
#:select ((package-name->name+version
. hyphen-separated-name->name+version)))
#:autoload (guix profiles) (packages->manifest)
#:use-module (guix describe)
#:use-module (ice-9 vlist)
#:use-module (ice-9 match)
#:use-module (srfi srfi-1)
@ -46,6 +47,7 @@
%auxiliary-files-path
%bootstrap-binaries-path
%package-module-path
%default-package-module-path
fold-packages
@ -130,22 +132,31 @@ for system '~a'")
("gnu/packages.scm" gnu/)
("guix.scm"))))
(define %default-package-module-path
;; Default search path for package modules.
`((,%distro-root-directory . "gnu/packages")))
(define %package-module-path
;; Search path for package modules. Each item must be either a directory
;; name or a pair whose car is a directory and whose cdr is a sub-directory
;; to narrow the search.
(let* ((not-colon (char-set-complement (char-set #\:)))
(environment (string-tokenize (or (getenv "GUIX_PACKAGE_PATH") "")
not-colon)))
;; Automatically add items from $GUIX_PACKAGE_PATH to Guile's search path.
(for-each (lambda (directory)
(set! %load-path (cons directory %load-path))
(set! %load-compiled-path
(cons directory %load-compiled-path)))
environment)
not-colon))
(channels (package-path-entries)))
;; Automatically add channels and items from $GUIX_PACKAGE_PATH to Guile's
;; search path. For historical reasons, $GUIX_PACKAGE_PATH goes to the
;; front; channels go to the back so that they don't override Guix' own
;; modules.
(set! %load-path
(append environment %load-path channels))
(set! %load-compiled-path
(append environment %load-compiled-path channels))
(make-parameter
(append environment `((,%distro-root-directory . "gnu/packages"))))))
(append environment
%default-package-module-path
channels))))
(define %patch-path
;; Define it after '%package-module-path' so that '%load-path' contains user

View File

@ -963,7 +963,7 @@ system administrator.")
(define-public sudo
(package
(name "sudo")
(version "1.8.24")
(version "1.8.25")
(source (origin
(method url-fetch)
(uri
@ -973,7 +973,7 @@ system administrator.")
version ".tar.gz")))
(sha256
(base32
"1s2v49n905wf3phmdnaa6v1dwck2lrcin0flg85z7klf35x5b25l"))
"0hfw6pcwjvv1vvnhb4n1p210306jm4npz99p9cfhbd33yrhhzkwx"))
(modules '((guix build utils)))
(snippet
'(begin
@ -2750,3 +2750,81 @@ support forum. It runs with the @code{/exec} command in most IRC clients.")
(description
"@code{pscircle} visualizes Linux processes in the form of a radial tree.")
(license license:gpl2+)))
(define-public python-pyudev
(package
(name "python-pyudev")
(version "0.21.0")
(source
(origin
(method url-fetch)
(uri (pypi-uri "pyudev" version))
(sha256
(base32
"0arz0dqp75sszsmgm6vhg92n1lsx91ihddx3m944f4ah0487ljq9"))))
(build-system python-build-system)
(arguments
`(#:tests? #f ; Tests require /sys
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'patch-ctypes-udev
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((eudev (assoc-ref inputs "eudev")))
(substitute* "src/pyudev/core.py"
(("'udev'")
(string-append "'" eudev "/lib/libudev.so'")))
(substitute* "src/pyudev/_ctypeslib/utils.py"
;; Use absolute paths instead of keys.
(("= find_library") "= "))
#t))))))
(inputs
`(("eudev" ,eudev)))
(native-inputs
`(("python-docutils" ,python-docutils)
("python-hypothesis" ,python-hypothesis)
("python-mock" ,python-mock)
("python-pytest" ,python-pytest)
("python-sphinx" ,python-sphinx)))
(home-page "http://pyudev.readthedocs.org/")
(synopsis "Python udev binding")
(description "This package provides @code{udev} bindings for Python.")
(license license:lgpl2.1)))
(define-public solaar
(package
(name "solaar")
(version "0.9.2")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/pwr/Solaar.git")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32
"085mfa13dap3wqik1dqlad0d7kff4rv7j4ljh99c7l8nhczkqgwm"))))
(build-system python-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'fix-prefix-detection
(lambda _
(substitute* "setup.py"
(("'--prefix' in sys\\.argv")
"len([x.startswith('--prefix=') for x in sys.argv]) > 0"))
#t))
(replace 'build
(lambda _
(invoke "python" "setup.py" "build")))
(add-before 'check 'setenv-PATH
(lambda _
(setenv "PYTHONPATH" (string-append "lib:" (getenv "PYTHONPATH")))
#t)))))
(propagated-inputs
`(("python-pygobject" ,python-pygobject)
("python-pyudev" ,python-pyudev)))
(home-page "https://smxi.org/docs/inxi.htm")
(synopsis "Linux devices manager for the Logitech Unifying Receiver")
(description "This package provides tools to manage clients of the
Logitech Unifying Receiver.")
(license license:gpl2)))

View File

@ -324,7 +324,7 @@ engineers, musicians, soundtrack editors and composers.")
(build-system gnu-build-system)
(inputs
`(("wxwidgets" ,wxwidgets)
("gtk" ,gtk+)
("gtk+" ,gtk+)
("alsa-lib" ,alsa-lib)
("jack" ,jack-1)
("expat" ,expat)
@ -410,6 +410,15 @@ engineers, musicians, soundtrack editors and composers.")
(("../lib-src/portmidi/porttime/porttime.h") "porttime.h"))
(substitute* "src/prefs/MidiIOPrefs.cpp"
(("../../lib-src/portmidi/pm_common/portmidi.h") "portmidi.h"))
#t))
(add-after 'install 'wrap-program
(lambda* (#:key inputs outputs #:allow-other-keys)
(wrap-program (string-append (assoc-ref outputs "out")
"/bin/audacity")
;; For GtkFileChooserDialog.
`("GSETTINGS_SCHEMA_DIR" =
(,(string-append (assoc-ref inputs "gtk+")
"/share/glib-2.0/schemas"))))
#t)))
;; The test suite is not "well exercised" according to the developers,
;; and fails with various errors. See
@ -1740,11 +1749,10 @@ included are the command line utilities @code{send_osc} and @code{dump_osc}.")
#t)))))
;; Required by lilv-0.pc.
(propagated-inputs
`(("serd" ,serd)
`(("lv2" ,lv2)
("serd" ,serd)
("sord" ,sord)
("sratom" ,sratom)))
(inputs
`(("lv2" ,lv2)))
(native-inputs
`(("pkg-config" ,pkg-config)))
(home-page "https://drobilla.net/software/lilv/")

View File

@ -67,7 +67,7 @@
(define-public duplicity
(package
(name "duplicity")
(version "0.7.18")
(version "0.7.18.1")
(source
(origin
(method url-fetch)
@ -77,7 +77,7 @@
version ".tar.gz"))
(sha256
(base32
"1qlika4l1k1nx8zr657ihcy0yzr1c1cdnjlbs325l5krvc3zbc5b"))))
"17c0203y5qz9w8iyhs26l44qf6a1vp26b5ykz1ypdr2kv6g02df9"))))
(build-system python-build-system)
(native-inputs
`(("util-linux" ,util-linux) ; setsid command, for the tests
@ -99,21 +99,12 @@
#:test-target "test"
#:phases
(modify-phases %standard-phases
(add-before 'build 'patch-source
(add-before 'build 'use-store-file-names
(lambda* (#:key inputs #:allow-other-keys)
;; Embed gpg store name.
(substitute* "duplicity/gpginterface.py"
(("self.call = 'gpg'")
(string-append "self.call = '" (assoc-ref inputs "gnupg") "/bin/gpg'")))
;; This matches up with an unreleased upstream fix, it should be
;; removed when the package is updated.
;; https://bazaar.launchpad.net/~duplicity-team/duplicity/0.8-series/revision/1308
(substitute* "duplicity/gpg.py"
(("--no-secmem-warning'\\)")
"--no-secmem-warning')
gnupg.options.extra_args.append('--ignore-mdc-error')"))
(substitute* '("testing/functional/__init__.py"
"testing/overrides/bin/lftp")
(("/bin/sh") (which "sh")))

View File

@ -11,6 +11,7 @@
;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com>
;;; Copyright © 2018 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
;;;
;;; This file is part of GNU Guix.
;;;
@ -3601,7 +3602,7 @@ experiments and provide highly stable thresholds based on reproducibility.")
(define-public jellyfish
(package
(name "jellyfish")
(version "2.2.7")
(version "2.2.10")
(source (origin
(method url-fetch)
(uri (string-append "https://github.com/gmarcais/Jellyfish/"
@ -3609,7 +3610,7 @@ experiments and provide highly stable thresholds based on reproducibility.")
"/jellyfish-" version ".tar.gz"))
(sha256
(base32
"1a1iwq9pq54k2m9ypvwl5s0bqfl64gwh9dx5af9i382ajas2016q"))))
"1k4pc3fvv6w1km2yph4m5sd78fbxp21d6xyzgmy0gjihzc6mb249"))))
(build-system gnu-build-system)
(outputs '("out" ;for library
"ruby" ;for Ruby bindings
@ -3646,8 +3647,8 @@ DNA sequences. It outputs its k-mer counts in a binary format, which can be
translated into a human-readable text format using the @code{jellyfish dump}
command, or queried for specific k-mers with @code{jellyfish query}.")
(home-page "http://www.genome.umd.edu/jellyfish.html")
;; From their website: JELLYFISH runs on 64-bit Intel-compatible processors
(supported-systems '("x86_64-linux"))
;; JELLYFISH seems to be 64-bit only.
(supported-systems '("x86_64-linux" "aarch64-linux" "mips64el-linux"))
;; The combined work is published under the GPLv3 or later. Individual
;; files such as lib/jsoncpp.cpp are released under the Expat license.
(license (list license:gpl3+ license:expat))))
@ -13458,3 +13459,102 @@ conversions, region filtering, FASTA sequence extraction and more.")
spliced (back-spliced) sequencing reads, indicative of circular RNA (circRNA)
in RNA-seq data.")
(license license:gpl3))))
(define-public python-scanpy
(package
(name "python-scanpy")
(version "1.2.2")
(source
(origin
(method url-fetch)
(uri (pypi-uri "scanpy" version))
(sha256
(base32
"1ak7bxms5a0yvf65prppq2g38clkv7c7jnjbnfpkh3xxv7q512jz"))))
(build-system python-build-system)
(propagated-inputs
`(("python-anndata" ,python-anndata)
("python-igraph" ,python-igraph)
("python-numba" ,python-numba)
("python-joblib" ,python-joblib)
("python-natsort" ,python-natsort)
("python-networkx" ,python-networkx)
("python-statsmodels" ,python-statsmodels)
("python-scikit-learn" ,python-scikit-learn)
("python-matplotlib" ,python-matplotlib)
("python-pandas" ,python-pandas)
("python-scipy" ,python-scipy)
("python-seaborn" ,python-seaborn)
("python-h5py" ,python-h5py)
("python-tables" ,python-tables)))
(home-page "http://github.com/theislab/scanpy")
(synopsis "Single-Cell Analysis in Python.")
(description "Scanpy is a scalable toolkit for analyzing single-cell gene
expression data. It includes preprocessing, visualization, clustering,
pseudotime and trajectory inference and differential expression testing. The
Python-based implementation efficiently deals with datasets of more than one
million cells.")
(license license:bsd-3)))
(define-public gffcompare
(let ((commit "be56ef4349ea3966c12c6397f85e49e047361c41")
(revision "1"))
(package
(name "gffcompare")
(version (git-version "0.10.15" revision commit))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/gpertea/gffcompare/")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32 "0cp5qpxdhw4mxpya5dld8wi3jk00zyklm6rcri426wydinrnfmkg"))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f ; no check target
#:phases
(modify-phases %standard-phases
(delete 'configure)
(add-before 'build 'copy-gclib-source
(lambda* (#:key inputs #:allow-other-keys)
(mkdir "../gclib")
(copy-recursively
(assoc-ref inputs "gclib-source") "../gclib")
#t))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let ((bin (string-append (assoc-ref outputs "out") "/bin")))
(install-file "gffcompare" bin)
#t))))))
(native-inputs
`(("gclib-source" ; see 'README.md' of gffcompare
,(let ((commit "54917d0849c1e83cfb057b5f712e5cb6a35d948f")
(revision "1")
(name "gclib")
(version (git-version "0.10.3" revision commit)))
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/gpertea/gclib/")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32 "0b51lc0b8syrv7186fd7n8f15rwnf264qgfmm2palrwks1px24mr")))))))
(home-page "https://github.com/gpertea/gffcompare/")
(synopsis "Tool for comparing or classifing transcripts of RNA-Seq")
(description
"@code{gffcompare} is a tool that can:
@enumerate
@item compare and evaluate the accuracy of RNA-Seq transcript assemblers
(Cufflinks, Stringtie);
@item collapse (merge) duplicate transcripts from multiple GTF/GFF3 files (e.g.
resulted from assembly of different samples);
@item classify transcripts from one or multiple GTF/GFF3 files as they relate to
reference transcripts provided in a annotation file (also in GTF/GFF3 format).
@end enumerate")
(license
(list
license:expat ;license for gffcompare
license:artistic2.0))))) ;license for gclib

View File

@ -76,7 +76,7 @@
(define-public nss-certs
(package
(name "nss-certs")
(version "3.38")
(version "3.39")
(source (origin
(method url-fetch)
(uri (let ((version-with-underscores
@ -87,7 +87,7 @@
"nss-" version ".tar.gz")))
(sha256
(base32
"0qigcy3d169cf67jzv3rbai0m6dn34vp8h2z696mz4yn10y3sr1c"))))
"0jw6qlfl2g47hhx056nvnj6h92bk3sn46hy3ig61a911dzblvrkb"))))
(build-system gnu-build-system)
(outputs '("out"))
(native-inputs

View File

@ -269,7 +269,7 @@ problem, and shows the differences.")
(define-public cmocka
(package
(name "cmocka")
(version "1.1.1")
(version "1.1.2")
(source (origin
(method url-fetch)
(uri (string-append "https://cmocka.org/files/"
@ -277,10 +277,10 @@ problem, and shows the differences.")
version ".tar.xz"))
(sha256
(base32
"1283zi9qf5613g8iadm1fxmjh4rzxqd5np2j3lcpgairf25g8bph"))))
"1p9b6ccv939wjsgapn7wx24xw278awsw9h81lm0g4zw257hx276i"))))
(build-system cmake-build-system)
(arguments
`(#:tests? #f)) ; No test target
`(#:tests? #f)) ; no test target
(home-page "https://cmocka.org/")
(synopsis "Unit testing framework for C")
(description "Cmocka is a unit testing framework for C with support for

View File

@ -236,7 +236,7 @@ as ordering relation.")
(build-system cmake-build-system)
(synopsis "JSON parser and printer library for C++")
(description "JSON for Modern C++ is a C++ JSON library that provides
intutive syntax and trivial integration.")
intuitive syntax and trivial integration.")
(license license:expat)))
(define-public xtl

View File

@ -4944,3 +4944,47 @@ developers to generate user interfaces easy to maintain.")
models. The methods employed are applicable to virtually any predictive model
and make comparisons between different methodologies straightforward.")
(license license:gpl2+)))
(define-public r-infotheo
(package
(name "r-infotheo")
(version "1.2.0")
(source
(origin
(method url-fetch)
(uri (cran-uri "infotheo" version))
(sha256
(base32
"18xacczfq3z3xpy434js4nf3l19lczngzd0lq26wh22pvg1yniwv"))))
(build-system r-build-system)
(home-page "http://homepage.meyerp.com/software")
(synopsis "Information-theoretic measures")
(description
"This package implements various measures of information theory based on
several entropy estimators.")
(license license:gpl3+)))
(define-public r-abcoptim
(package
(name "r-abcoptim")
(version "0.15.0")
(source
(origin
(method url-fetch)
(uri (cran-uri "ABCoptim" version))
(sha256
(base32 "1ih0xk88qhsmpvnxf56041wx5sk8as2f4f2gdnpnwdym9mbr9n4b"))))
(properties `((upstream-name . "ABCoptim")))
(build-system r-build-system)
(propagated-inputs `(("r-rcpp" ,r-rcpp)))
(home-page "https://github.com/gvegayon/ABCoptim/")
(synopsis "Optimization of Artificial Bee Colony algorithm")
(description
"Artificial Bee Colony (ABC) is one of the most recently defined algorithms by Dervis
Karaboga in 2005, motivated by the intelligent behavior of honey bees. It is as
simple as Particle Swarm Optimization (PSO) and Differential Evolution (DE)
algorithms, and uses only common control parameters such as colony size and
maximum cycle number. The @code{r-abcoptim} implements the Artificial bee
colony optimization algorithm @url{http://mf.erciyes.edu.tr/abc/pub/tr06_2005.pdf}.
This version is a work-in-progress and is written in R code.")
(license license:expat)))

View File

@ -40,6 +40,7 @@
#:use-module (gnu packages gettext)
#:use-module (gnu packages gnupg)
#:use-module (gnu packages image)
#:use-module (gnu packages kerberos)
#:use-module (gnu packages libbsd)
#:use-module (gnu packages libffi)
#:use-module (gnu packages linux)
@ -277,7 +278,7 @@ the wrong hands.")
(define-public keyutils
(package
(name "keyutils")
(version "1.5.10")
(version "1.5.11")
(source
(origin
(method url-fetch)
@ -286,9 +287,9 @@ the wrong hands.")
version ".tar.bz2"))
(sha256
(base32
"1dmgjcf7mnwc6h72xkvpaqpzxw8vmlnsmzz0s27pg0giwzm3sp0i"))
"1ddig6j5xjyk6g9l2wlqc7k1cgvryxdqbsv3c9rk1p3f42448n0i"))
(modules '((guix build utils)))
;; Create relative symbolic links instead of absolute ones to /lib/*
;; Create relative symbolic links instead of absolute ones to /lib/*.
(snippet '(begin
(substitute* "Makefile" (("\\$\\(LNS\\) \\$\\(LIBDIR\\)/")
"$(LNS) "))
@ -306,6 +307,8 @@ the wrong hands.")
"MANDIR=/share/man"
"SHAREDIR=/share/keyutils")
#:test-target "test"))
(inputs
`(("mit-krb5" ,mit-krb5)))
(home-page "https://people.redhat.com/dhowells/keyutils/")
(synopsis "Linux key management utilities")
(description

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015, 2016 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015, 2016, 2018 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016, 2018 Efraim Flashner <efraim@flashner.co.il>
;;;
;;; This file is part of GNU Guix.
@ -37,14 +37,14 @@
(define-public dico
(package
(name "dico")
(version "2.5")
(version "2.6")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/dico/dico-"
version ".tar.xz"))
(sha256
(base32
"0szm3z4xvq0pjj8kxl4paq63byamf281kzn1la0cdm5ngavypxxq"))))
"0zmi041gv5nd5fmyzgdrgrsy2pvjaq9p8dvvhxwi842hiyng5b7i"))))
(build-system gnu-build-system)
(arguments
'(#:configure-flags (list (string-append "--with-guile-site-dir=" %output
@ -62,7 +62,7 @@
`(("m4" ,m4) ;used at run time
("pcre" ,pcre)
("python" ,python-2)
("guile" ,guile-2.0)
("guile" ,guile-2.2)
("gsasl" ,gsasl)
("groff" ,groff)
("readline" ,readline)

View File

@ -337,14 +337,14 @@ and can dramatically shorten the lifespan of the drive if left unchecked.")
(define-public gparted
(package
(name "gparted")
(version "0.31.0")
(version "0.32.0")
(source
(origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/gparted/gparted/gparted-"
version "/gparted-" version ".tar.gz"))
(sha256
(base32 "1fh7rpgb4xxdhgyjsirb83zvjfc5mfngb8a1pjbv7r6r6jj4jyrv"))))
(base32 "1fjp4c8jc0kjbbih1x1vs9v40d9lncma642kflnmy0bixxnvh7df"))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f ; tests require a network connection

View File

@ -646,7 +646,11 @@ only a handful of functions that are not resource-specific.")
"https://github.com/haskell/haskell-mode/archive/v"
version ".tar.gz"))
(sha256
(base32 "0g6lcjw7lcgavv3yrd8xjcyqgfyjl787y32r1z14amw2f009m78h"))))
(base32 "0g6lcjw7lcgavv3yrd8xjcyqgfyjl787y32r1z14amw2f009m78h"))
(patches
(search-patches ; backport test failure fixes
"haskell-mode-unused-variables.patch"
"haskell-mode-make-check.patch"))))
(inputs
`(("emacs-el-search" ,emacs-el-search) ; for tests
("emacs-stream" ,emacs-stream))) ; for tests
@ -686,12 +690,11 @@ only a handful of functions that are not resource-specific.")
(_ ""))
inputs)))
(substitute* (find-files "." "\\.el") (("/bin/sh") sh))
(substitute* "tests/haskell-code-conventions.el"
;; Function name recently changed in "emacs-el-search".
(("el-search--search-pattern") "el-search-forward")
;; Don't contact home.
(("\\(when \\(>= emacs-major-version 25\\)")
"(require 'el-search) (when nil"))
;; embed filename to fix test failure
(let ((file "tests/haskell-cabal-tests.el"))
(substitute* file
(("\\(buffer-file-name\\)")
(format #f "(or (buffer-file-name) ~s)" file))))
#t)))
(replace
'install
@ -1722,6 +1725,32 @@ management tasks from Emacs. To begin with, run @code{M-x guix-about} or
@code{M-x guix-help} command.")
(license license:gpl3+)))
(define-public emacs-build-farm
(package
(name "emacs-build-farm")
(version "0.2")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://gitlab.com/alezost-emacs/build-farm")
(commit "fa7fa54901416fc5c216a5014394cbd73a61efc6")))
(file-name (string-append name "-" version "-checkout"))
(sha256
(base32
"1zw3pivma6cv9j7k7qm02jd6wnxmsc1v2mjcssd50im99zzrqflh"))))
(build-system emacs-build-system)
(propagated-inputs
`(("bui" ,emacs-bui)
("magit-popup" ,emacs-magit-popup)))
(home-page "https://gitlab.com/alezost-emacs/build-farm")
(synopsis "Emacs interface for Hydra and Cuirass build farms")
(description
"This Emacs package provides an interface for Hydra and
Cuirass (build farms used by Nix and Guix). It allows you to look at
various data related to the build farm projects, jobsets, builds and
evaluations. The entry point is @code{M-x build-farm} command.")
(license license:gpl3+)))
(define-public emacs-d-mode
(package
(name "emacs-d-mode")
@ -8977,7 +9006,7 @@ continue.")
(define-public emacs-elisp-refs
(package
(name "emacs-elisp-refs")
(version "1.2")
(version "1.3")
(source
(origin
(method url-fetch)
@ -8986,14 +9015,15 @@ continue.")
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"0fj6wphwrvbslw46w7wgdk3b4bfr312ygj3lbgr9qw63lpqw26nl"))))
"02nzcn3v14n7mp7q32j5r4wdlpsw3zixzh6cf0cdyarfir6dly3p"))))
(build-system emacs-build-system)
(propagated-inputs
`(("emacs-dash" ,emacs-dash)
("emacs-f" ,emacs-f)
("emacs-list-utils" ,emacs-list-utils)
("emacs-loop" ,emacs-loop)
("emacs-s" ,emacs-s)))
("emacs-s" ,emacs-s)
("emacs-shut-up" ,emacs-shut-up)))
(home-page "https://github.com/Wilfred/elisp-refs")
(synopsis "Find callers of elisp functions or macros")
(description "Find references to functions, macros or variables. Unlike a
@ -9537,11 +9567,12 @@ duplicate hook and function names further into a single declarative call.")
"0rf2rnzg82pdqch041yyx3f9ddixffkk9s2ydzg8hwy66sg3385n"))))
(build-system emacs-build-system)
(home-page "https://github.com/Malabarba/fancy-narrow/releases")
(synopsis "Immitate narrow-to-region with more eye-candy")
(description "Unlike narrow-to-region, which completely hides text outside
the narrowed region, this package simply deemphasizes the text, makes it
readonly, and makes it unreachable. This leads to a much more natural
feeling, where the region stays static (instead of being brutally moved to a
(synopsis "Imitate @code{narrow-to-region} with more eye candy")
(description
"Unlike @code{narrow-to-region}, which completely hides text outside
the narrowed region, this package simply de-emphasizes the text, makes it
read-only, and makes it unreachable. This leads to a much more natural
feeling where the region stays static (instead of being brutally moved to a
blank slate) and is clearly highlighted with respect to the rest of the
buffer.")
(license license:gpl2+)))
@ -9633,7 +9664,7 @@ downloading manager for Emacs.")
(define-public emacs-helpful
(package
(name "emacs-helpful")
(version "0.1")
(version "0.13")
(source (origin
(method url-fetch)
(uri (string-append
@ -9642,7 +9673,7 @@ downloading manager for Emacs.")
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"16dx566qzrjj0bf43lnw7h1qlvgs94brqplamw8kppp2ylr72qs9"))))
"11kj04y1fa3vnw2991cyqf6adz6bb3hlrdkvypjnmpb0s64q64b6"))))
(build-system emacs-build-system)
(propagated-inputs
`(("emacs-elisp-refs" ,emacs-elisp-refs)))
@ -10027,7 +10058,7 @@ perform regression test for packages that provide font-lock rules.")
(license license:gpl3+))))
(define-public emacs-racket-mode
(let ((commit "add0190d3c9bdad25fee57f8efd0460c9a45c2ec")
(let ((commit "92c33487f6c707880ac3f6169e7ea65ddffd1463")
(revision "1"))
(package
(name "emacs-racket-mode")
@ -10042,7 +10073,7 @@ perform regression test for packages that provide font-lock rules.")
(file-name (string-append name "-" version "-checkout"))
(sha256
(base32
"0bf6s4nqjfacij20x9vppdnq8fq1bf53cch6p4g8xqcqri3ms4jw"))))
"19q6ym10gj2xdzzcgh3wdbq1xv8cv7nlrhv2b0bjvvdjzhiki472"))))
(build-system emacs-build-system)
(arguments
`(#:include '("\\.el$" "\\.rkt$")))

View File

@ -1055,7 +1055,7 @@ emulation community. It provides highly accurate emulation.")
(define-public retroarch
(package
(name "retroarch")
(version "1.7.3")
(version "1.7.4")
(source
(origin
(method url-fetch)
@ -1063,7 +1063,7 @@ emulation community. It provides highly accurate emulation.")
version ".tar.gz"))
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32 "1si78dbwbsq4i0r42q94nmlpaxdyqch113nxavdprf4vc1224356"))))
(base32 "0h6y2hpjg4b470jvn9ghwp0k3a527sbb6xhia17frlm9w9v5028w"))))
(build-system gnu-build-system)
(arguments
'(#:tests? #f ; no tests
@ -1175,7 +1175,7 @@ play them on systems for which they were never designed!")
(define-public mame
(package
(name "mame")
(version "0.200")
(version "0.201")
(source
(origin
(method git-fetch)
@ -1185,7 +1185,7 @@ play them on systems for which they were never designed!")
(file-name (git-file-name name version))
(sha256
(base32
"0ddw8635hdm21lgpf13k1vhfywy3460rwciv93vrqmpkq2dvpmib"))
"00whiig4ld3d4fkl34q48vlf28ygvvp5g7fp0rb5n31ymhl4kajk"))
(modules '((guix build utils)))
(snippet
;; Remove bundled libraries.
@ -1211,17 +1211,6 @@ play them on systems for which they were never designed!")
#:tests? #f ;no test in regular release
#:phases
(modify-phases %standard-phases
;; Add missing include lines for "fmin" and "ceil" functions.
;; Reported upstream. Will be fixed in 0.201.
(add-after 'unpack 'add-missing-include
(lambda _
(substitute* "src/devices/cpu/mips/mips3.cpp"
(("#include \"ps2vu.h\"" all)
(string-append all "\n#include <cmath>")))
(substitute* "src/devices/cpu/mips/ps2vif1.cpp"
(("#include \"ps2vif1.h\"" all)
(string-append all "\n#include <cmath>")))
#t))
(delete 'configure)
(add-after 'build 'build-documentation
(lambda _ (invoke "make" "-C" "docs" "man" "info")))

View File

@ -1101,7 +1101,7 @@ language, ADMS transforms Verilog-AMS code into other target languages.")
(setenv "LDFLAGS" (string-append "-Wl,-rpath="
(assoc-ref outputs "out") "/lib"))
#t)))))
(home-page "http://www.capstone-engine.org")
(home-page "https://www.capstone-engine.org")
(synopsis "Lightweight multi-platform, multi-architecture disassembly framework")
(description
"Capstone is a lightweight multi-platform, multi-architecture disassembly

View File

@ -62,7 +62,7 @@
(define-public efl
(package
(name "efl")
(version "1.20.7")
(version "1.21.0")
(source (origin
(method url-fetch)
(uri (string-append
@ -70,7 +70,7 @@
version ".tar.xz"))
(sha256
(base32
"1zkn5ix81xck3n84dxvkjh4alwc6zj8x989d0zqi5c6ppijvgadh"))))
"0jxfrcz2aq1synxzd6sh9nhxz7fg9qgz0idr8zj6gaiplmwbwrby"))))
(outputs '("out" ; 49 MB
"include")) ; 17 MB
(build-system gnu-build-system)
@ -312,35 +312,36 @@ embedded systems.")
(define-public python-efl
(package
(name "python-efl")
(version "1.20.0")
(version "1.21.0")
(source
(origin
(method url-fetch)
(uri (list
(pypi-uri "python-efl" version)
(string-append "http://download.enlightenment.org/rel/bindings/"
"python/python-efl-" version ".tar.gz")))
(uri (string-append "http://download.enlightenment.org/rel/bindings/"
"python/python-efl-" version ".tar.xz"))
(sha256
(base32
"1680pgpf501nhbc9arm0nfj6rpcw17aryh0pgmmmszxlgpifpdzy"))))
"08x2cv8hnf004c3711250wrax21ffj5y8951pvk77h98als4pq47"))))
(build-system python-build-system)
(arguments
'(#:phases
(modify-phases %standard-phases
(replace 'build
(lambda _
(zero?
(system* "env" "ENABLE_CYTHON=1" "python" "setup.py" "build"))))
(replace 'build
(lambda _
(setenv "ENABLE_CYTHON" "1")
(invoke "python" "setup.py" "build")))
(add-before 'build 'set-flags
(lambda _
(setenv "CFLAGS"
(string-append "-I" (assoc-ref %build-inputs "python-dbus")
"/include/dbus-1.0"))
#t))
(lambda _
(setenv "CFLAGS"
(string-append "-I" (assoc-ref %build-inputs "python-dbus")
"/include/dbus-1.0"))
#t))
(add-before 'check 'set-environment
(lambda _
;; Some tests require write access to HOME.
(setenv "HOME" "/tmp")
;; These tests try to connect to the internet.
(delete-file "tests/ecore/test_09_file_download.py")
(delete-file "tests/ecore/test_11_con.py")
#t)))))
(native-inputs
`(("pkg-config" ,pkg-config)
@ -421,3 +422,50 @@ and in creating applications based on the Enlightenment Foundation Library suite
"Simple PDF viewer based on the Enlightenment Foundation Libraries.")
(home-page "https://github.com/kaihu/lekha")
(license license:gpl3+)))
(define-public ephoto
(package
(name "ephoto")
(version "1.5")
(source
(origin
(method url-fetch)
(uri (list (string-append "http://www.smhouston.us/stuff/ephoto-"
version ".tar.xz")
(string-append "https://download.enlightenment.org/rel/"
"apps/ephoto/ephoto-" version ".tar.xz")))
(sha256
(base32
"04kli43sfsy6s660g13pjc0kjmgdcmq8m4qh02vvpcwv60mf9mgz"))))
(build-system gnu-build-system)
(arguments
'(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'set-home-directory
;; FATAL: Cannot create run dir '/homeless-shelter/.run' - errno=2
(lambda _ (setenv "HOME" "/tmp") #t)))))
(native-inputs
`(("check" ,check)
("pkg-config" ,pkg-config)))
(inputs
`(("efl" ,efl)))
(home-page "http://smhouston.us/ephoto/")
(synopsis "EFL image viewer/editor/manipulator/slideshow creator")
(description "Ephoto is an image viewer and editor written using the
@dfn{Enlightenment Foundation Libraries} (EFL). It focuses on simplicity and ease
of use, while taking advantage of the speed and small footprint the EFL provide.
Ephotos features include:
@enumerate
@item Browsing the filesystem and displaying images in an easy to use grid view.
@item Browsing images in a single image view format.
@item Viewing images in a slideshow.
@item Editing your image with features such as cropping, auto enhance,
blurring, sharpening, brightness/contrast/gamma adjustments, hue/saturation/value
adjustments, and color level adjustment.
@item Applying artistic filters to your image such as black and white and old photo.
@item Drag And Drop along with file operations to easy maintain your photo directories.
@end enumerate\n")
(license (list
license:bsd-2 ; Ephoto's thumbnailing code
license:bsd-3))))

View File

@ -335,7 +335,7 @@ other machines/servers. Electrum does not download the Bitcoin blockchain.")
(package
(inherit electrum)
(name "electron-cash")
(version "3.3")
(version "3.3.1")
(source
(origin
(method url-fetch)
@ -346,7 +346,7 @@ other machines/servers. Electrum does not download the Bitcoin blockchain.")
".tar.gz"))
(sha256
(base32
"1x487hyacdm1qhik1mhfimr4jwcwz7sgsbkh11awrb6j19sxdxym"))
"1jdy89rfdwc2jadx3rqj5yvynpcn90cx6482ax9f1cj9gfxp9j2b"))
(modules '((guix build utils)))
(snippet
'(begin
@ -664,23 +664,38 @@ Ledger Blue/Nano S.")
(define-public python-trezor
(package
(name "python-trezor")
(version "0.7.16")
(version "0.10.2")
(source
(origin
(method url-fetch)
(uri (pypi-uri "trezor" version))
(sha256
(base32
"055kii56wgwadl5z911s59ya2fnsqzk3n5i19s2hb9sv2by6knvb"))))
"138k6zsqqpb46k3rcpyslm9q7yq5i6k4myvr9n425jnkadf4vfjd"))))
(build-system python-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
;; Default tests run device-specific tests which fail, only run specific tests.
(replace 'check
(lambda* (#:key inputs outputs #:allow-other-keys)
(invoke "python" "-m" "pytest" "--pyarg" "trezorlib.tests.unit_tests")
(invoke "python" "-m" "pytest" "-m" "slow_cosi" "--pyarg" "trezorlib.tests.unit_tests")
)))))
(propagated-inputs
`(("python-ecdsa" ,python-ecdsa)
`(("python-click" ,python-click)
("python-ecdsa" ,python-ecdsa)
("python-hidapi" ,python-hidapi)
("python-libusb1" ,python-libusb1)
("python-mnemonic" ,python-mnemonic)
("python-protobuf" ,python-protobuf)
("python-requests" ,python-requests)))
("python-pyblake2" ,python-pyblake2)
("python-requests" ,python-requests)
("python-typing" ,python-typing)))
(native-inputs
`(("python-pyqt" ,python-pyqt))) ; Tests
`(("python-mock" ,python-mock) ; Tests
("python-pyqt" ,python-pyqt) ; Tests
("python-pytest" ,python-pytest))) ; Tests
(home-page "https://github.com/trezor/python-trezor")
(synopsis "Python library for communicating with TREZOR Hardware Wallet")
(description "@code{trezor} is a Python library for communicating with

View File

@ -1037,23 +1037,18 @@ of use.")
(license license:expat)))
(define-public openmw
;; XXX The current version does not support qt 5.11, but the upcoming
;; version (0.44) will do.
(let ((commit "5bc073603e8c7887e015a0ef41b4cefd6e688aaf")
(revision "1"))
(package
(name "openmw")
(version (git-version "0.43" revision commit))
(version "0.44.0")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://gitlab.com/OpenMW/openmw.git")
(commit commit)))
(file-name (string-append name "-" version "-checkout"))
(method url-fetch)
(uri
(string-append "https://github.com/OpenMW/openmw/archive/"
name "-" version ".tar.gz"))
(sha256
(base32
"1sp4n3f1syvv0iz7n72wh226fyc0jh98cg8bvs574jvvqx6qn851"))))
"03fgm2f2r7y0aqlgp038pdlnllgvm3jimrp968p4nhz1sffvjzcy"))))
(build-system cmake-build-system)
(arguments
`(#:tests? #f ; No test target
@ -1080,7 +1075,7 @@ the 2002 open-world RPG Morrowind. The engine comes with its own editor,
called OpenMW-CS which allows the user to edit or create their own original
games.")
(home-page "https://openmw.org")
(license license:gpl3))))
(license license:gpl3)))
(define-public godot
(package

View File

@ -793,6 +793,46 @@ role, and your gender.")
(license:fsdg-compatible
"https://nethack.org/common/license.html"))))
(define-public pipewalker
(package
(name "pipewalker")
(version "0.9.4")
(source
(origin
(method url-fetch)
(uri (string-append "http://downloads.sourceforge.net/pipewalker/"
name "-" version ".tar.gz"))
(sha256
(base32
"1x46wgk0s55562pd96cxagxkn6wpgglq779f9b64ff1k3xzp3myn"))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags
(list (string-append "--docdir=" (assoc-ref %outputs "out")
"/share/doc/" ,name "-" ,version))
#:phases
(modify-phases %standard-phases
(add-after 'configure 'patch-docdir
;; Makefile.in ignores configure's --docdir=... option. Fix that.
(lambda _
(substitute* "Makefile"
(("(pkgdocdatadir = ).*" _ assignment)
(string-append assignment "$(docdir)\n")))
#t)))))
(inputs
`(("libpng" ,libpng)
("mesa" ,mesa)
("sdl" ,sdl)))
(home-page "http://pipewalker.sourceforge.net/")
(synopsis "Logical tile puzzle")
(description
"PipeWalker is a simple puzzle game with many diffent themes: connect all
computers to one network server, bring water from a source to the taps, etc.
The underlying mechanism is always the same: you must turn each tile in the
grid in the right direction to combine all components into a single circuit.
Every puzzle has a complete solution, although there may be more than one.")
(license license:gpl3+)))
(define-public prboom-plus
(package
(name "prboom-plus")
@ -2430,7 +2470,7 @@ Transport Tycoon Deluxe.")
(define openrct2-objects
(package
(name "openrct2-objects")
(version "1.0.2")
(version "1.0.6")
(source
(origin
(method url-fetch)
@ -2439,7 +2479,7 @@ Transport Tycoon Deluxe.")
(file-name (string-append name "-" version ".zip"))
(sha256
(base32
"1z92afhbv13j1ig6fz0x8w9vdmfchssv16vwwhb0vj40pn1g1rwy"))))
"00kfy95zx6g4ldr6br5p7bwkwfx6pw9v78fd3rvghjnwyvf5fhki"))))
(build-system trivial-build-system)
(native-inputs
`(("bash" ,bash)
@ -2471,7 +2511,7 @@ Transport Tycoon Deluxe.")
(define-public openrct2
(package
(name "openrct2")
(version "0.2.0")
(version "0.2.1")
(source
(origin
(method url-fetch)
@ -2479,7 +2519,7 @@ Transport Tycoon Deluxe.")
version ".tar.gz"))
(sha256
(base32
"1yrbjra27n2xxb1x47v962lc3qi8gwm5ws4f97952nvn533zrwxz"))
"1fxzk037xphpyk7vv5jfrcz739zrj86p43pnf5gjjv9rjxwv7m8f"))
(file-name (string-append name "-" version ".tar.gz"))))
(build-system cmake-build-system)
(arguments

View File

@ -94,7 +94,7 @@ most common applications of GD involve website development.")
(define-public perl-gd
(package
(name "perl-gd")
(version "2.68")
(version "2.69")
(source
(origin
(method url-fetch)
@ -102,7 +102,7 @@ most common applications of GD involve website development.")
"GD-" version ".tar.gz"))
(sha256
(base32
"0p2ya641nl5cvcqgw829xgabh835qijfd6vq2ba12862946xx8va"))))
"0palmq7l42fibqxhrabnjm7di4q8kciq9323902d717x3i4jvc6x"))))
(build-system perl-build-system)
(inputs
`(("fontconfig" ,fontconfig)

View File

@ -787,7 +787,7 @@ programming langauage. It also contains the utility
(define-public appstream-glib
(package
(name "appstream-glib")
(version "0.7.10")
(version "0.7.12")
(source (origin
(method url-fetch)
(uri (string-append "https://people.freedesktop.org/~hughsient/"
@ -795,7 +795,7 @@ programming langauage. It also contains the utility
"appstream-glib-" version ".tar.xz"))
(sha256
(base32
"08bs0hnkvdzqv9pakv1y4c4ph77rmzjq22g760w20sv7vs63nia3"))))
"1jcb2bggcic3iczr2hn8zp8a3c2hl1xjij0aawr7kwqmzh9b3jms"))))
(build-system meson-build-system)
(native-inputs
`(("gettext" ,gettext-minimal)

View File

@ -30,7 +30,7 @@
(define-public gnu-pw-mgr
(package
(name "gnu-pw-mgr")
(version "2.3.3")
(version "2.4.2")
(source
(origin
(method url-fetch)
@ -38,7 +38,7 @@
version ".tar.xz"))
(sha256
(base32
"04xh38j7l0sfnb01kp05xc908pvqfc0lph94k7n9bi46zy3qy7ma"))))
"1yvdzc5w37qrjrkby5699ygj9bhkvgi3zk9k9jcjry1j6b7wdl17"))))
(build-system gnu-build-system)
(arguments
'(#:phases

View File

@ -220,14 +220,14 @@ compatible to GNU Pth.")
(define-public gnupg
(package
(name "gnupg")
(version "2.2.9")
(version "2.2.10")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnupg/gnupg/gnupg-" version
".tar.bz2"))
(sha256
(base32
"0r11mx8nkh7ysrnshs560amha5csx8zcaggb5kxcksx1zymyly32"))))
"05f9804g72pffdxgvxjmjzkfcpjg1x221g9rwcr8fi51hrxd77br"))))
(build-system gnu-build-system)
(native-inputs
`(("pkg-config" ,pkg-config)))

View File

@ -323,7 +323,7 @@ in C/C++.")
(define-public nspr
(package
(name "nspr")
(version "4.19")
(version "4.20")
(source (origin
(method url-fetch)
(uri (string-append
@ -331,7 +331,7 @@ in C/C++.")
version "/src/nspr-" version ".tar.gz"))
(sha256
(base32
"0agpv3f17h8kmzi0ifibaaxc1k3xc0q61wqw3l6r2xr2z8bmkn9f"))))
"0vjms4j75zvv5b2siyafg7hh924ysx2cwjad8spzp7x87n8n929c"))))
(build-system gnu-build-system)
(native-inputs
`(("perl" ,perl)))
@ -359,7 +359,7 @@ in the Mozilla clients.")
(define-public nss
(package
(name "nss")
(version "3.38")
(version "3.39")
(source (origin
(method url-fetch)
(uri (let ((version-with-underscores
@ -370,7 +370,7 @@ in the Mozilla clients.")
"nss-" version ".tar.gz")))
(sha256
(base32
"0qigcy3d169cf67jzv3rbai0m6dn34vp8h2z696mz4yn10y3sr1c"))
"0jw6qlfl2g47hhx056nvnj6h92bk3sn46hy3ig61a911dzblvrkb"))
;; Create nss.pc and nss-config.
(patches (search-patches "nss-pkgconfig.patch"
"nss-increase-test-timeout.patch"))))

View File

@ -228,14 +228,15 @@ many more.")
(define-public ilmbase
(package
(name "ilmbase")
(version "2.2.1")
(version "2.3.0")
(source (origin
(method url-fetch)
(uri (string-append "mirror://savannah/openexr/ilmbase-"
(uri (string-append "https://github.com/openexr/openexr/releases"
"/download/v" version "/ilmbase-"
version ".tar.gz"))
(sha256
(base32
"17k0hq19wplx9s029kjrq6c51x2ryrfmaavcappkd0g67gk0dhna"))
"0qiq5bqq9rxhqjiym2k36sx4vq8adgrz6xf6qwizi9bqm78phsa5"))
(patches (search-patches "ilmbase-fix-tests.patch"))))
(build-system gnu-build-system)
(home-page "http://www.openexr.com/")
@ -319,29 +320,22 @@ graphics.")
(define-public openexr
(package
(name "openexr")
(version "2.2.1")
(version "2.3.0")
(source (origin
(method url-fetch)
(uri (string-append "mirror://savannah/openexr/openexr-"
(uri (string-append "https://github.com/openexr/openexr/releases"
"/download/v" version "/openexr-"
version ".tar.gz"))
(sha256
(base32
"1kdf2gqznsdinbd5vcmqnif442nyhdf9l7ckc51410qm2gv5m6lg"))
"19jywbs9qjvsbkvlvzayzi81s976k53wg53vw4xj66lcgylb6v7x"))
(modules '((guix build utils)))
(snippet
'(begin
(substitute* (find-files "." "tmpDir\\.h")
(("\"/var/tmp/\"")
"\"/tmp/\""))
;; Install 'ImfStdIO.h'. Reported at
;; <https://lists.nongnu.org/archive/html/openexr-devel/2016-06/msg00001.html>
;; and <https://github.com/openexr/openexr/pull/184>.
(substitute* "IlmImf/Makefile.in"
(("ImfIO\\.h")
"ImfIO.h ImfStdIO.h"))
#t))
(patches (search-patches "openexr-missing-samples.patch"))))
#t))))
(build-system gnu-build-system)
(arguments
'(#:phases

View File

@ -2,6 +2,7 @@
;;; Copyright © 2012 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;;
;;; This file is part of GNU Guix.
;;;
@ -33,14 +34,14 @@
(define-public libntlm
(package
(name "libntlm")
(version "1.4")
(version "1.5")
(source (origin
(method url-fetch)
(uri (string-append "http://www.nongnu.org/libntlm/releases/"
(uri (string-append "https://www.nongnu.org/libntlm/releases/"
"libntlm-" version ".tar.gz"))
(sha256
(base32
"129532iiip2cjr5h03bgz184v64v27sfm1r70v3ms4yk65gdf5c4"))))
"1gcvv7f9rggpxay81qv6kw5hr6gd4qiyzkbwhzz02fx9jvv9kmsk"))))
(build-system gnu-build-system)
(synopsis "Library that implements NTLM authentication")
(description

124
gnu/packages/hardware.scm Normal file
View File

@ -0,0 +1,124 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages hardware)
#:use-module (gnu packages compression)
#:use-module (gnu packages glib)
#:use-module (gnu packages libusb)
#:use-module (gnu packages linux)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages xdisorg)
#:use-module (gnu packages xorg)
#:use-module (guix build-system gnu)
#:use-module (guix download)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages))
;; This is a module for packages related to physical hardware that don't (yet)
;; have a more specific home like gps.scm, security-token.scm, &c.
(define-public ddcutil
(package
(name "ddcutil")
(version "0.9.1")
(source
(origin
(method url-fetch)
(uri (string-append "https://www.ddcutil.com/tarballs/"
name "-" version ".tar.gz"))
(sha256
(base32 "1b4bm3zhk5vnad6fxf0mn8nrlj3fngifl7nzxgxw0n56hlv7ccv0"))))
(build-system gnu-build-system)
(native-inputs
`(("pkg-config" ,pkg-config)))
(inputs
`(("eudev" ,eudev)
("glib" ,glib)
("libdrm" ,libdrm) ; enhanced diagnostics
("libusb" ,libusb) ; support USB monitors
("libx11" ,libx11) ; enhanced diagnostics
("libxrandr" ,libxrandr)
("zlib" ,zlib)))
(home-page "https://www.ddcutil.com/")
(synopsis "Control external monitor settings")
(description
"ddcutil can query and modify most external monitors' settings, such as
brightness, colour levels, and input sources. Generally speaking, any setting
that can be changed by pressing buttons on the monitor can be modified by
ddcutil.
ddcutil communicates directly with monitors implementing the Monitor Control
Command Set (@dfn{MCCS}). It usually does so through the the Display Data
Channel Command Interface (@dfn{DDC/CI}) protocol on the I2C bus, but can also
communicate over USB as per the USB Monitor Control Class Specification.
One particular use case is in colour profile management. Monitor calibration
is relative to the monitor colour settings currently in effect, e.g. red gain.
ddcutil allows colour-related settings to be saved at the time a monitor is
calibrated, and restored when the calibration is applied.")
(license (list license:bsd-3 ; FindDDCUtil.cmake
license:gpl2+)))) ; everything else
(define-public msr-tools
(package
(name "msr-tools")
(version "1.3")
(source
(origin
(method url-fetch)
(uri (string-append "https://01.org/sites/default/files/downloads/"
name "/" name "-" version ".zip"))
(sha256
(base32 "07hxmddg0l31kjfmaq84ni142lbbvgq6391r8bd79wpm819pnigr"))))
(build-system gnu-build-system)
(arguments
`(#:make-flags
(list (string-append "sbindir=" (assoc-ref %outputs "out") "/sbin"))
#:phases
(modify-phases %standard-phases
(delete 'configure) ; no configure script
(add-before 'install 'create-output-directory
(lambda* (#:key outputs #:allow-other-keys)
;; 'make install' assumes that sbindir exists.
(let* ((out (assoc-ref outputs "out"))
(sbin (string-append out "/sbin")))
(mkdir-p sbin)
#t))))
#:tests? #f)) ; no test suite
(native-inputs
`(("unzip" ,unzip)))
;; These registers and the CPUID instruction only exist on (most) x86 chips.
(supported-systems (list "i686-linux" "x86_64-linux"))
(home-page "https://01.org/msr-tools/")
(synopsis "Read and write Model-Specific Registers (@dfn{MSR})")
(description
"The MSR Tools project provides console utilities to directly access the
Model-Specific Registers (@dfn{MSR}s) and CPU ID of Intel-compatible processors:
@itemize
@item @command{cpuid}: show identification and feature information of any CPU
@item @command{rdmsr}: read MSRs from any CPU or all CPUs
@item @command{wrmsr}: write to MSRs on any CPU or all CPUs
@end itemize
These tools can be used to query and modify certain low-level CPU parameters,
such as the Turbo Boost ratio and Thermal Design Power (@dfn{TDP}) limits.
MSR addresses differ (greatly) between processors, and any such modification can
be dangerous and may void your CPU or system board's warranty.")
(license license:gpl2))) ; cpuid.c is gpl2, {rd,wr}msr.c are gpl2+

View File

@ -34,6 +34,7 @@
(define-module (gnu packages haskell)
#:use-module (gnu packages)
#:use-module (gnu packages base)
#:use-module (gnu packages bootstrap)
#:use-module (gnu packages check)
#:use-module (gnu packages compression)
@ -322,7 +323,7 @@ top of CLISP.")
interactive environment for the functional language Haskell.")
(license license:bsd-3)))
(define-public ghc-8
(define-public ghc-8.0
(package
(name "ghc")
(version "8.0.2")
@ -434,7 +435,131 @@ interactive environment for the functional language Haskell.")
interactive environment for the functional language Haskell.")
(license license:bsd-3)))
(define-public ghc ghc-8)
(define-public ghc-8
(package (inherit ghc-8.0)
(name "ghc")
(version "8.4.3")
(source
(origin
(method url-fetch)
(uri (string-append "https://www.haskell.org/ghc/dist/"
version "/" name "-" version "-src.tar.xz"))
(sha256
(base32 "1mk046vb561j75saz05rghhbkps46ym5aci4264dwc2qk3dayixf"))))
(inputs
`(("gmp" ,gmp)
("ncurses" ,ncurses)
("libffi" ,libffi)
("target-binutils" ,binutils)
("target-gcc" ,gcc)
("target-ld-wrapper" ,(make-ld-wrapper "ld-wrapper"
#:binutils binutils))))
(native-inputs
`(("perl" ,perl)
("python" ,python) ; for tests
("ghostscript" ,ghostscript) ; for tests
;; GHC 8.4.3 is built with GHC 8.
("ghc-bootstrap" ,ghc-8.0)
("ghc-testsuite"
,(origin
(method url-fetch)
(uri (string-append
"https://www.haskell.org/ghc/dist/"
version "/" name "-" version "-testsuite.tar.xz"))
(sha256
(base32
"1z55b1z0m3plqd2d1ks6w5wvx7igm7zsk3i4v7cms003z0as0hzz"))))))
(arguments
`(#:test-target "test"
;; We get a smaller number of test failures by disabling parallel test
;; execution.
#:parallel-tests? #f
;; The DSOs use $ORIGIN to refer to each other, but (guix build
;; gremlin) doesn't support it yet, so skip this phase.
#:validate-runpath? #f
;; Don't pass --build=<triplet>, because the configure script
;; auto-detects slightly different triplets for --host and --target and
;; then complains that they don't match.
#:build #f
#:configure-flags
(list
(string-append "--with-gmp-libraries="
(assoc-ref %build-inputs "gmp") "/lib")
(string-append "--with-gmp-includes="
(assoc-ref %build-inputs "gmp") "/include")
"--with-system-libffi"
(string-append "--with-ffi-libraries="
(assoc-ref %build-inputs "libffi") "/lib")
(string-append "--with-ffi-includes="
(assoc-ref %build-inputs "libffi") "/include")
(string-append "--with-curses-libraries="
(assoc-ref %build-inputs "ncurses") "/lib")
(string-append "--with-curses-includes="
(assoc-ref %build-inputs "ncurses") "/include"))
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'unpack-testsuite
(lambda* (#:key inputs #:allow-other-keys)
(invoke "tar" "xvf"
(assoc-ref inputs "ghc-testsuite")
"--strip-components=1")
#t))
(add-after 'unpack-testsuite 'fix-shell-wrappers
(lambda _
(substitute* '("driver/ghci/ghc.mk"
"utils/mkdirhier/ghc.mk"
"rules/shell-wrapper.mk")
(("echo '#!/bin/sh'")
(format #f "echo '#!~a'" (which "sh"))))
#t))
;; This is necessary because the configure system no longer uses
;; “AC_PATH_” but “AC_CHECK_”, setting the variables to just the
;; plain command names.
(add-before 'configure 'set-target-programs
(lambda* (#:key inputs #:allow-other-keys)
(let ((binutils (assoc-ref inputs "target-binutils"))
(gcc (assoc-ref inputs "target-gcc"))
(ld-wrapper (assoc-ref inputs "target-ld-wrapper")))
(setenv "CC" (string-append gcc "/bin/gcc"))
(setenv "CXX" (string-append gcc "/bin/g++"))
(setenv "LD" (string-append ld-wrapper "/bin/ld"))
(setenv "NM" (string-append binutils "/bin/nm"))
(setenv "RANLIB" (string-append binutils "/bin/ranlib"))
(setenv "STRIP" (string-append binutils "/bin/strip"))
;; The 'ar' command does not follow the same pattern.
(setenv "fp_prog_ar" (string-append binutils "/bin/ar"))
#t)))
(add-before 'build 'fix-references
(lambda _
(substitute* '("testsuite/timeout/Makefile"
"testsuite/timeout/timeout.py"
"testsuite/timeout/timeout.hs"
"testsuite/tests/programs/life_space_leak/life.test"
;; libraries
"libraries/process/System/Process/Posix.hs"
"libraries/process/tests/process001.hs"
"libraries/process/tests/process002.hs"
"libraries/unix/cbits/execvpe.c")
(("/bin/sh") (which "sh"))
(("/bin/ls") (which "ls"))
(("/bin/rm") "rm"))
#t))
(add-before 'build 'fix-environment
(lambda _
(unsetenv "GHC_PACKAGE_PATH")
(setenv "CONFIG_SHELL" (which "bash"))
#t)))))
(native-search-paths (list (search-path-specification
(variable "GHC_PACKAGE_PATH")
(files (list
(string-append "lib/ghc-" version)))
(file-pattern ".*\\.conf\\.d$")
(file-type 'directory))))))
(define-public ghc ghc-8.0)
(define-public ghc-hostname
(package

View File

@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;;
@ -26,6 +26,7 @@
#:use-module (gnu packages base)
#:use-module (gnu packages compression)
#:use-module (gnu packages lisp)
#:use-module (gnu packages readline)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix git-download)
@ -412,7 +413,7 @@ external server.")
(define-public mujs
(package
(name "mujs")
(version "1.0.3")
(version "1.0.4")
(source (origin
(method git-fetch)
(uri (git-reference
@ -421,14 +422,16 @@ external server.")
(file-name (string-append name "-" version "-checkout"))
(sha256
(base32
"15ml3rzjl44lqdb1yxipdh8bhh0rvk2g6w6sjv667q8xywijwqv8"))))
"1ly0yybs66nk63517kg4dmdc7dbikhqqqf2r2kvccgzzvv6k0vs8"))))
(build-system gnu-build-system)
(arguments
'(#:phases (modify-phases %standard-phases
(delete 'configure)) ; no configure
(delete 'configure)) ; no configure
#:make-flags (list (string-append "prefix=" (assoc-ref %outputs "out"))
(string-append "CC=gcc"))
#:tests? #f)) ; no tests
#:tests? #f)) ; no tests
(inputs
`(("readline" ,readline)))
(home-page "https://artifex.com/mujs/")
(synopsis "JavaScript interpreter written in C")
(description "MuJS is a lightweight Javascript interpreter designed for

File diff suppressed because it is too large Load Diff

View File

@ -236,7 +236,7 @@ plugins, as well as code to create plugins, or complete applications.")
(define-public krita
(package
(name "krita")
(version "4.0.1")
(version "4.1.1")
(source (origin
(method url-fetch)
(uri (string-append
@ -245,7 +245,7 @@ plugins, as well as code to create plugins, or complete applications.")
"/" name "-" version ".tar.gz"))
(sha256
(base32
"0k55ybvna40dx4fqygnix7bnhjaanak3ckb108hny2k7sspy62pc"))))
"1qz9bjvnwa5gc2b0063i2p72jq6y1b6kgqdj39599acp7ws11asw"))))
(build-system cmake-build-system)
(arguments
`(#:tests? #f
@ -316,7 +316,7 @@ plugins, as well as code to create plugins, or complete applications.")
("fftw" ,fftw)
("gsl" ,gsl)
("poppler-qt5" ,poppler-qt5)
("libraw" ,libraw)
("libraw" ,libraw-0.18)
("libtiff" ,libtiff)
("perl" ,perl)
("ilmbase" ,ilmbase)
@ -329,23 +329,6 @@ illustrators, matte and texture artists, and the VFX industry. Notable
features include brush stabilizers, brush engines and wrap-around mode.")
(license license:gpl2+)))
;; Krita 3 and 4's file formats are incompatible, so we are keeping Krita 3
;; for now.
(define-public krita-3
(package
(inherit krita)
(name "krita")
(version "3.3.3")
(source (origin
(inherit (package-source krita))
(uri (string-append
"mirror://kde/stable/krita/"
(version-prefix version 3)
"/" name "-" version ".tar.gz"))
(sha256
(base32
"0pc6hnakkqy81x5b5ncivaps6hqv43i50sjwgi3i3cz9j8rlxh5y"))))))
(define-public kholidays
(package
(name "kholidays")
@ -418,7 +401,7 @@ used in KDE development tools Kompare and KDevelop.")
(define-public libksysguard
(package
(name "libksysguard")
(version "5.11.5")
(version "5.13.4")
(source
(origin
(method url-fetch)
@ -426,7 +409,7 @@ used in KDE development tools Kompare and KDevelop.")
"/libksysguard-" version ".tar.xz"))
(sha256
(base32
"0f2py4zkqzpxxf3mqaij0q8ka0v3nschj17dv6rbzzmr5mjv825f"))))
"0k8q5bxk9zyv7c3nny1c399v8acqs618nw39q20pj2qdijl9ibvh"))))
(native-inputs
`(("extra-cmake-modules" ,extra-cmake-modules)
("pkg-config" ,pkg-config)))
@ -468,7 +451,7 @@ used in KDE development tools Kompare and KDevelop.")
(lambda _
;; TODO: Fix this failing test-case
(zero? (system* "ctest" "-E" "processtest")))))))
(home-page "https://www.kde.org/info/plasma-5.11.5.php")
(home-page "https://www.kde.org/info/plasma-5.13.4.php")
(synopsis "Network enabled task and system monitoring")
(description "KSysGuard can obtain information on system load and
manage running processes. It obtains this information by interacting

View File

@ -29,6 +29,7 @@
;;; Copyright © 2017 Dave Love <fx@gnu.org>
;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
;;; Copyright © 2018 Brendan Tildesley <brendan.tildesley@openmailbox.org>
;;; Copyright © 2018 Manuel Graf <graf@init.at>
;;;
;;; This file is part of GNU Guix.
;;;
@ -445,8 +446,8 @@ It has been modified to remove all non-free binary blobs.")
#:configuration-file kernel-config))
(define-public linux-libre-4.4
(make-linux-libre "4.4.152"
"082aajyr363ca95pxlg9iascf5d7k2gbw9ggsbsa1hj6nhspsxw6"
(make-linux-libre "4.4.153"
"195vzkkmjiicqfzd38hgf381rlz665rl06abzf8cww0gbnzvrf72"
%intel-compatible-systems
#:configuration-file kernel-config))
@ -3615,10 +3616,52 @@ The following service daemons are also provided:
license:cc0 ; most files in ccan/
license:bsd-3)))) ; providers/hfi1verbs are dual GPL2/BSD-3
(define-public perftest
(package
(name "perftest")
(version "4.2-0.8")
(source
(origin
(method url-fetch)
(uri (string-append "https://github.com/linux-rdma/perftest/releases/download/V"
version "/perftest-" version ".g0e24e67.tar.gz"))
(sha256
(base32 "1r3pxn7cx3grb8myb4q1b0pk447pc06cifd0v7ym13xw00372dlx"))))
(build-system gnu-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'patch-header-paths
(lambda _
(substitute* '("src/raw_ethernet_fs_rate.c"
"src/raw_ethernet_resources.c"
"src/raw_ethernet_resources.h"
"src/raw_ethernet_send_burst_lat.c"
"src/raw_ethernet_send_bw.c"
"src/raw_ethernet_send_lat.c")
(("/usr/include/netinet/ip.h") "netinet/ip.h"))
#t)))))
(inputs `(("rdma-core" ,rdma-core)))
(home-page "https://github.com/linux-rdma/perftest/")
(synopsis "Open Fabrics Enterprise Distribution (OFED) Performance Tests")
(description "This is a collection of tests written over uverbs intended for
use as a performance micro-benchmark. The tests may be used for hardware or
software tuning as well as for functional testing.
The collection contains a set of bandwidth and latency benchmark such as:
@enumerate
@item Send - @code{ib_send_bw} and @code{ib_send_lat}
@item RDMA Read - @code{ib_read_bw} and @code{ib_read_lat}
@item RDMA Write - @code{ib_write_bw} and @code{ib_wriet_lat}
@item RDMA Atomic - @code{ib_atomic_bw} and @code{ib_atomic_lat}
@item Native Ethernet (when working with MOFED2) - @code{raw_ethernet_bw}, @code{raw_ethernet_lat}
@end enumerate")
(license license:gpl2)))
(define-public rng-tools
(package
(name "rng-tools")
(version "6.3.1")
(version "6.4")
(source (origin
(method url-fetch)
(uri (string-append "https://github.com/nhorman/rng-tools/"
@ -3626,7 +3669,7 @@ The following service daemons are also provided:
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"04p7wvcm389s21y9mq8ss6z2szxi4nfrfixzwqjkq2qciz705i4s"))))
"005krksl8iz37l5p1nx8apl1yg7q78yrsb6inby31d2g5ck8nnwa"))))
(build-system gnu-build-system)
(arguments
`(;; Avoid using OpenSSL, curl, and libxml2, reducing the closure by 166 MiB.

View File

@ -3,7 +3,7 @@
;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 Dennis Mungai <dmngaie@gmail.com>
;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
@ -30,6 +30,7 @@
#:use-module (guix utils)
#:use-module (guix build-system gnu)
#:use-module (guix build-system cmake)
#:use-module (guix build-system python)
#:use-module (gnu packages)
#:use-module (gnu packages gcc)
#:use-module (gnu packages bootstrap) ;glibc-dynamic-linker
@ -380,3 +381,53 @@ code analysis tools.")
(patches (list (search-patch "llvm-for-extempore.patch")))))
;; Extempore refuses to build on architectures other than x86_64
(supported-systems '("x86_64-linux"))))
(define-public python-llvmlite
(package
(name "python-llvmlite")
(version "0.24.0")
(source
(origin
(method url-fetch)
(uri (pypi-uri "llvmlite" version))
(sha256
(base32
"01zwjlc3c5mhrwmv4b73zgbskwqps9ly0nrh54bbj1f1l72f839j"))))
(build-system python-build-system)
(inputs
`(("llvm"
,(package
(inherit llvm)
(source (origin
(inherit (package-source llvm))
(patches
(list
(origin
(method url-fetch)
(uri (string-append "https://raw.githubusercontent.com/numba/"
"llvmlite/v" version "/conda-recipes/"
"D47188-svml.patch"))
(sha256
(base32
"0mrj24jvkv3hjcmyg98zmvmyl1znlh2j63rdr69f6g7s96d2pfv1")))
(origin
(method url-fetch)
(uri (string-append "https://raw.githubusercontent.com/numba/"
"llvmlite/v" version "/conda-recipes/"
"twine_cfg_undefined_behavior.patch"))
(sha256
(base32
"07h71n2m1mn9zcfgw04zglffknplb233zqbcd6pckq0wygkrxflp")))
(origin
(method url-fetch)
(uri (string-append "https://raw.githubusercontent.com/numba/"
"llvmlite/v" version "/conda-recipes/"
"0001-Transforms-Add-missing-header-for-InstructionCombini.patch"))
(sha256
(base32
"1pp0z9696l6j4dwz7ypjrm4vvkj0d3mlf1g8zmiyk08akw5lz0cb")))))))))))
(home-page "http://llvmlite.pydata.org")
(synopsis "Wrapper around basic LLVM functionality")
(description
"This package provides a Python binding to LLVM for use in Numba.")
(license license:bsd-3)))

View File

@ -5,6 +5,8 @@
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2017 Brendan Tildesley <brendan.tildesley@openmailbox.org>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Ison111 <ison111@protonmail.com>
;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -24,17 +26,21 @@
(define-module (gnu packages lxde)
#:use-module (gnu packages)
#:use-module (gnu packages autotools)
#:use-module (gnu packages bash)
#:use-module (gnu packages docbook)
#:use-module (gnu packages freedesktop)
#:use-module (gnu packages gettext)
#:use-module (gnu packages glib)
#:use-module (gnu packages gnome)
#:use-module (gnu packages gtk)
#:use-module (gnu packages image-viewers)
#:use-module (gnu packages linux)
#:use-module (gnu packages lsof)
#:use-module (gnu packages openbox)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages polkit)
#:use-module (gnu packages text-editors)
#:use-module (gnu packages video)
#:use-module (gnu packages wm)
#:use-module (gnu packages xml)
#:use-module (gnu packages xorg)
@ -230,6 +236,48 @@ with freedesktop.org standard.")
(home-page "https://lxde.org")
(license license:gpl2+)))
(define-public spacefm
;; SpaceFM is based on PCManFM.
(package
(name "spacefm")
(version "1.0.6")
(source (origin
(method url-fetch)
(uri (string-append
"https://github.com/IgnorantGuru/spacefm/archive/"
version ".tar.gz"))
(sha256
(base32
"1jg7xfyr7kihjnalxp8wxyb9qjk8hqf5l36rp3s0lvkpmpyakppy"))
(file-name (string-append name "-" version ".tar.gz"))))
(build-system gnu-build-system)
(native-inputs `(("pkg-config" ,pkg-config)
("intltool" ,intltool)))
(inputs `(("bash" ,bash)
("gtk+" ,gtk+)
("eudev" ,eudev)
("desktop-file-utils" ,desktop-file-utils)
("shared-mime-info" ,shared-mime-info)
("ffmpegthumbnailer" ,ffmpegthumbnailer)
("jmtpfs" ,jmtpfs)
("lsof" ,lsof)
("udisks" ,udisks)))
(arguments
`(#:configure-flags (list (string-append "--with-bash-path="
(assoc-ref %build-inputs "bash")
"/bin/bash")
(string-append "--sysconfdir="
(assoc-ref %outputs "out")
"/etc"))))
(home-page "http://ignorantguru.github.io/spacefm/")
(synopsis "Multi-panel tabbed file manager")
(description "SpaceFM is a graphical, multi-panel, tabbed file manager
based on PCManFM with built-in virtual file system, udev-based device manager,
customizable menu system, and Bash integration.")
;; The combination is GPLv3+ but src/exo is under LGPLv3+.
(license license:gpl3+)))
(define-public lxmenu-data
(package
(name "lxmenu-data")

View File

@ -706,9 +706,9 @@ attachments, create new maildirs, and so on.")
("python2-pygpgme" ,python2-pygpgme)
("python2-notmuch" ,python2-notmuch)))
(home-page "https://github.com/pazz/alot")
(synopsis "Commandline MUA using notmuch")
(synopsis "Command-line MUA using @code{notmuch}")
(description
"Alot is an experimental terminal mail user agent (MUA) based on
"Alot is an experimental terminal mail user agent (@dfn{MUA}) based on
@code{notmuch} mail. It is written in Python using the @code{urwid} toolkit.")
(license gpl3+)))
@ -1011,7 +1011,7 @@ compresses it.")
(define-public claws-mail
(package
(name "claws-mail")
(version "3.17.0")
(version "3.17.1")
(source (origin
(method url-fetch)
(uri (string-append
@ -1019,7 +1019,7 @@ compresses it.")
".tar.xz"))
(sha256
(base32
"119y6q9p8zwm2xqlbkgqd119a529kjqlyldmb4h940z6c2qyjhqm"))))
"1wknxbwyzm5xjh3cqmddcxmvp1rkp301qga5n5rgfi7vcd0myyvm"))))
(build-system gnu-build-system)
(native-inputs `(("pkg-config" ,pkg-config)))
(inputs `(("bogofilter" ,bogofilter)
@ -2596,3 +2596,29 @@ processes mailboxes based on the results. It can be used to delete, copy,
move, flag, etc. messages residing in mailboxes at the same or different mail
servers. The 4rev1 and 4 versions of IMAP are supported.")
(license license:expat)))
(define-public urlscan
(package
(name "urlscan")
(version "0.9.0")
(source
(origin
(method url-fetch)
(uri (pypi-uri "urlscan" version))
(sha256
(base32
"133f28bisr4xj0nihpwpil8dyadss62mp8qgqdyzd676hg9xjfyc"))))
(build-system python-build-system)
(propagated-inputs
`(("python-urwid" ,python-urwid)))
(home-page "https://github.com/firecat53/urlscan")
(synopsis "View/select the URLs in an email message or file")
(description
"Urlscan is a small program that is designed to integrate with the
@code{mutt} mailreader to allow you to easily launch a Web browser for URLs
contained in email messages. It parses an email message or file and scans it
for URLs and email addresses. It then displays the URLs and their context
within the message, and allows you to choose one or more URLs to send to your
Web browser. Alternatively, it send a list of all URLs to stdout. It is a
replacement for the @code{urlview} program.")
(license gpl2)))

View File

@ -459,7 +459,7 @@ computing convex hulls.")
(define-public arpack-ng
(package
(name "arpack-ng")
(version "3.5.0")
(version "3.6.2")
(home-page "https://github.com/opencollab/arpack-ng")
(source
(origin
@ -468,13 +468,8 @@ computing convex hulls.")
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"0f8jx3fifmj9qdp289zr7r651y1q48k1jya859rqxq62mvis7xsh"))))
"16jrvdl0gh78rrfnvrcxwys4slwfh6qmwwjhfc9d6vwrvq184g37"))))
(build-system gnu-build-system)
(arguments
'(#:phases (modify-phases %standard-phases
(add-after 'unpack 'autoreconf
(lambda _
(invoke "autoreconf" "-vfi"))))))
(native-inputs
`(("autoconf" ,autoconf)
("automake" ,automake)
@ -2049,12 +2044,12 @@ programming problems.")
(define-public r-pracma
(package
(name "r-pracma")
(version "2.1.4")
(version "2.1.5")
(source (origin
(method url-fetch)
(uri (cran-uri "pracma" version))
(sha256
(base32 "1ygm81i7mqvh229dp9935djjyb120p3bqvaf4k572sa4q63fzjhc"))))
(base32 "18cv7c2gvagbmggfbsy2xk9bpn47izd0qrmqnc3q7afvj6pr6nf9"))))
(build-system r-build-system)
(propagated-inputs
`(("r-quadprog" ,r-quadprog)))
@ -3517,7 +3512,7 @@ set.")
(define-public hypre
(package
(name "hypre")
(version "2.11.0")
(version "2.14.0")
(source (origin
(method url-fetch)
(uri (string-append "https://github.com/LLNL/hypre/archive/"
@ -3525,7 +3520,7 @@ set.")
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"0q69ia0jivzcr8p049dn3mg8yjpn6nwq4sw9iqac8vr63vi54l6m"))
"0v515i73bvaz378h5465b1dy9v2gf924zy2q94cpq4qqarawvkqh"))
(modules '((guix build utils)))
(snippet
'(begin
@ -3533,7 +3528,7 @@ set.")
;; substitute the tarball creation time.
(substitute* "src/utilities/HYPRE_utilities.h"
(("Date Compiled: .*$")
"Date Compiled: Mar 28 2016 20:19:59 +0000\"\n"))
"Date Compiled: Apr 11 2018 16:24:59 +0000\"\n"))
#t))))
(build-system gnu-build-system)
(outputs '("out" ;6.1 MiB of headers and libraries

View File

@ -548,14 +548,14 @@ simultaneously and therefore appear under the same nickname on IRC.")
(define-public python-nbxmpp
(package
(name "python-nbxmpp")
(version "0.6.6")
(version "0.6.7")
(source
(origin
(method url-fetch)
(uri (pypi-uri "nbxmpp" version))
(sha256
(base32
"0bp60syqc3qp2i28phvadxlpwizjbr6bxw4m363p9yn5fl687qnh"))))
"0fas4iawjfdmkz8vr042wpq6b2qispi6fy35g4a62jw50jb1saav"))))
(build-system python-build-system)
(arguments
`(#:tests? #f)) ; no tests
@ -873,7 +873,7 @@ protocols.")
(define-public c-toxcore
(package
(name "c-toxcore")
(version "0.2.6")
(version "0.2.7")
(source
(origin
(method url-fetch)
@ -882,7 +882,7 @@ protocols.")
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"04b3ifkj64yy06vph0hlq24mw9fh24zmq1qdf40fmj24vvgfmjpl"))))
"1lcw979zakyb5kzy8yfk87js3bzfz3k2jxidda6ga6ljdnqdpxmy"))))
(arguments
`(#:tests? #f)) ; FIXME: Testsuite seems to stay stuck on test 3. Disable
; for now.
@ -1565,7 +1565,7 @@ using ncurses and libmesode, inspired by Irssi.")
(define-public libircclient
(package
(name "libircclient")
(version "1.9")
(version "1.10")
(source
(origin
(method url-fetch)
@ -1573,7 +1573,7 @@ using ncurses and libmesode, inspired by Irssi.")
version "/libircclient-" version ".tar.gz"))
(sha256
(base32
"0r60i76jh4drjh2jgp5sx71chagqllmkaq49zv67nrhqwvp9ghw1"))))
"0b9wa0h3xc31wpqlvgxgnvqp5wgx3kwsf5s9432m5cj8ycx6zcmv"))))
(build-system gnu-build-system)
(inputs
`(("openssl" ,openssl)))
@ -1584,8 +1584,7 @@ using ncurses and libmesode, inspired by Irssi.")
"--enable-shared"
"--enable-ipv6"
"--enable-openssl")
;; no test suite
#:tests? #f))
#:tests? #f)) ; no test suite
(home-page "https://www.ulduzsoft.com/libircclient/")
(synopsis "Library implementing the client IRC protocol")
(description "Libircclient is a library which implements the client IRC

View File

@ -4,6 +4,7 @@
;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com>
;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -29,18 +30,25 @@
#:use-module (guix build-system python)
#:use-module (guix build-system gnu)
#:use-module (guix build-system go)
#:use-module (guix utils)
#:use-module (gnu packages admin)
#:use-module (gnu packages base)
#:use-module (gnu packages curl)
#:use-module (gnu packages check)
#:use-module (gnu packages compression)
#:use-module (gnu packages databases)
#:use-module (gnu packages django)
#:use-module (gnu packages gd)
#:use-module (gnu packages image)
#:use-module (gnu packages mail)
#:use-module (gnu packages networking)
#:use-module (gnu packages libevent)
#:use-module (gnu packages pcre)
#:use-module (gnu packages perl)
#:use-module (gnu packages python)
#:use-module (gnu packages python-web)
#:use-module (gnu packages time))
#:use-module (gnu packages time)
#:use-module (gnu packages tls))
(define-public nagios
(package
@ -138,6 +146,79 @@ etc. via a Web interface. Features include:
@end itemize\n")
(license license:gpl2)))
(define-public zabbix-agentd
(package
(name "zabbix-agentd")
(version "3.4.11")
(source
(origin
(method url-fetch)
(uri (string-append
"mirror://sourceforge/zabbix/ZABBIX%20Latest%20Stable/" version
"/zabbix-" version ".tar.gz"))
(sha256
(base32
"0qxgf6hx7ibhjmxd2sxizkjc8df4c9d31wz5hhql409ws98qf173"))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags
(list "--enable-agent"
(string-append "--with-iconv="
(assoc-ref %build-inputs "libiconv"))
(string-append "--with-libpcre="
(assoc-ref %build-inputs "pcre")))))
(inputs
`(("libiconv" ,libiconv)
("pcre" ,pcre)))
(home-page "https://www.zabbix.com/")
(synopsis "Distributed monitoring solution (client-side agent)")
(description "This package provides a distributed monitoring
solution (client-side agent)")
(license license:gpl2)))
(define-public zabbix-server
(package
(inherit zabbix-agentd)
(name "zabbix-server")
(arguments
(substitute-keyword-arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'install 'install-frontend
(lambda* (#:key outputs #:allow-other-keys)
(let* ((php (string-append (assoc-ref outputs "out")
"/share/zabbix/php"))
(front-end-conf (string-append php "/conf"))
(etc (string-append php "/etc")))
(mkdir-p php)
(copy-recursively "./frontends/php" php)
(rename-file front-end-conf
(string-append front-end-conf "-example"))
(symlink "/etc/zabbix" front-end-conf)))))
,@(package-arguments zabbix-agentd))
((#:configure-flags flags)
`(cons* "--enable-server"
"--with-postgresql"
(string-append "--with-libevent="
(assoc-ref %build-inputs "libevent"))
"--with-net-snmp"
(string-append "--with-gnutls="
(assoc-ref %build-inputs "gnutls"))
"--with-libcurl"
,flags))))
(inputs
`(("curl" ,curl)
("libevent" ,libevent)
("gnutls" ,gnutls)
("postgresql" ,postgresql)
("zlib" ,zlib)
("net-snmp" ,net-snmp)
("curl" ,curl)
,@(package-inputs zabbix-agentd)))
(synopsis "Distributed monitoring solution (server-side)")
(description "This package provides a distributed monitoring
solution (server-side)")))
(define-public darkstat
(package
(name "darkstat")

View File

@ -3685,7 +3685,7 @@ specification and header.")
(define-public rosegarden
(package
(name "rosegarden")
(version "17.04")
(version "18.06")
(source (origin
(method url-fetch)
(uri (string-append
@ -3693,7 +3693,7 @@ specification and header.")
version "/rosegarden-" version ".tar.bz2"))
(sha256
(base32
"1khfcj22asdhjh0jvhkqsz200wgmigkhsrcz09ffia5hqm0n32lq"))))
"04qc80sqb2ji42pq3mayhvqqn39hlxzymsywpbpzfpchr19chxx7"))))
(build-system cmake-build-system)
(arguments
`(#:configure-flags '("-DUSE_QT5=1") ; "-DCMAKE_BUILD_TYPE=Release"
@ -3747,6 +3747,7 @@ specification and header.")
;; Tests create files in $HOME/.local/share/rosegarden .
(mkdir-p "/tmp/foo")
(setenv "HOME" "/tmp/foo")
(setenv "XDG_RUNTIME_DIR" "/tmp/foo")
#t)))))
(inputs
`(("alsa-lib" ,alsa-lib)
@ -3773,7 +3774,7 @@ sequencer")
(description "Rosegarden is a music composition and editing environment
based around a MIDI sequencer that features a rich understanding of music
notation and includes basic support for digital audio.")
(home-page "http://www.rosegardenmusic.com/")
(home-page "https://www.rosegardenmusic.com/")
(license license:gpl2)))
(define-public patchmatrix

View File

@ -2013,7 +2013,9 @@ Features:
(list (string-append "LDFLAGS=-Wl,-rpath="
(assoc-ref %outputs "out")
"/lib")
"--with-logfile=/var/log/snmpd.log")
"--with-logfile=/var/log/snmpd.log"
(string-append "--with-openssl="
(assoc-ref %build-inputs "openssl")))
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'patch-tests

View File

@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;;
;;; This file is part of GNU Guix.
;;;
@ -57,7 +58,7 @@
(uri (git-reference
(url "https://github.com/KhronosGroup/OpenCL-Headers.git")
(commit commit)))
(file-name (string-append name "-" commit))
(file-name (git-file-name name version))
(sha256
(base32
"176ydpbyws5nr4av6hf8p41pkhc0rc4m4vrah9w6gp2fw2i32838"))))
@ -102,15 +103,15 @@ programming.")
(package
(name "opencl-clhpp")
(version "2.0.10")
(source (origin
(method url-fetch)
(uri (string-append
"https://github.com/KhronosGroup/OpenCL-CLHPP/archive/v"
version ".tar.gz"))
(sha256
(base32
"0awg6yznbz3h285kmnd47fykx2qa34a07sr4x1657yn3jmi4a9zs"))
(file-name (string-append name "-" version ".tar.gz"))))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/KhronosGroup/OpenCL-CLHPP.git")
(commit (string-append "v" version))))
(sha256
(base32 "0h5kpg5cl8wzfnqmv6i26aig2apv06ffm9p3rh35938n9r8rladm"))
(file-name (git-file-name name version))))
(native-inputs
`(("python" ,python-wrapper)))
(propagated-inputs
@ -124,7 +125,7 @@ programming.")
(string-append "-DCMAKE_INSTALL_PREFIX="
(assoc-ref %outputs "out")
"/include")))
;; regression tests requires a lot more dependencies
;; The regression tests require a lot more dependencies.
#:tests? #f))
(build-system cmake-build-system)
(home-page "http://github.khronos.org/OpenCL-CLHPP/")
@ -174,15 +175,15 @@ Loader as provided by this package.")
(package
(name "clinfo")
(version "2.2.18.04.06")
(source (origin
(method url-fetch)
(uri (string-append
"https://github.com/Oblomov/clinfo/archive/"
version ".tar.gz"))
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"0v7cy01irwdgns6lzaprkmm0502pp5a24zhhffydxz1sgfjj2w7p"))))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/Oblomov/clinfo.git")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32 "0y2q0lz5yzxy970b7w7340vp4fl25vndahsyvvrywcrn51ipgplx"))))
(build-system gnu-build-system)
(native-inputs
`(("opencl-headers" ,opencl-headers)))
@ -216,22 +217,21 @@ the system.")
(package
(name "beignet")
(version "1.3.2")
(source (origin
(method url-fetch)
(uri (string-append
"https://github.com/intel/beignet/archive/Release_v"
version
".tar.gz"))
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"18r0lq3dkd4yn6bxa45s2lrr9cjbg70nr2nn6xablvgqwzw0jb0r"))
(patches (search-patches "beignet-correct-file-names.patch"))
(modules '((guix build utils)))
(snippet
;; There's a suspicious .isa binary file under kernels/.
;; Remove it.
'(for-each delete-file (find-files "." "\\.isa$")))))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/intel/beignet.git")
(commit (string-append "Release_v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "0lpv3lvi2vrmzb8blflrpbd3jgin76zqmz6jcv17vn9mylqdrfnd"))
(patches (search-patches "beignet-correct-file-names.patch"))
(modules '((guix build utils)))
(snippet
;; There's a suspicious .isa binary file under kernels/.
;; Remove it.
'(for-each delete-file (find-files "." "\\.isa$")))))
(native-inputs `(("pkg-config" ,pkg-config)
("python" ,python)))
(inputs `(("clang@3.7" ,clang-3.7)
@ -295,15 +295,15 @@ back-end for the LLVM compiler framework.")
(package
(name "pocl")
(version "1.1")
(source (origin
(method url-fetch)
(uri (string-append
"https://github.com/pocl/pocl/archive/v"
version ".tar.gz"))
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"0lrw3hlb0w53xzmrf2hvbda406l70ar4gyadflvlkj4879lx138y"))))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/pocl/pocl.git")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "1z3sqn20ddv1030adchpzs65qng436gc2mb99p213mkh95jkh1l5"))))
(build-system cmake-build-system)
(native-inputs
`(("libltdl" ,libltdl)
@ -323,12 +323,6 @@ back-end for the LLVM compiler framework.")
(assoc-ref %build-inputs "libc") "/lib"))
#:phases
(modify-phases %standard-phases
(add-after 'install 'remove-headers
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(delete-file-recursively
(string-append out "/include"))
#t)))
(add-before 'check 'set-HOME
(lambda _
(setenv "HOME" "/tmp")

View File

@ -0,0 +1,240 @@
Fix CVE-2018-15599:
http://lists.ucc.gu.uwa.edu.au/pipermail/dropbear/2018q3/002108.html
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-15599
Patch copied from upstream source repository:
https://github.com/mkj/dropbear/commit/52adbb34c32d3e2e1bcdb941e20a6f81138b8248
From 52adbb34c32d3e2e1bcdb941e20a6f81138b8248 Mon Sep 17 00:00:00 2001
From: Matt Johnston <matt@ucc.asn.au>
Date: Thu, 23 Aug 2018 23:43:12 +0800
Subject: [PATCH] Wait to fail invalid usernames
---
auth.h | 6 +++---
svr-auth.c | 19 +++++--------------
svr-authpam.c | 26 ++++++++++++++++++++++----
svr-authpasswd.c | 27 ++++++++++++++-------------
svr-authpubkey.c | 11 ++++++++++-
5 files changed, 54 insertions(+), 35 deletions(-)
diff --git a/auth.h b/auth.h
index da498f5b..98f54683 100644
--- a/auth.h
+++ b/auth.h
@@ -37,9 +37,9 @@ void recv_msg_userauth_request(void);
void send_msg_userauth_failure(int partial, int incrfail);
void send_msg_userauth_success(void);
void send_msg_userauth_banner(const buffer *msg);
-void svr_auth_password(void);
-void svr_auth_pubkey(void);
-void svr_auth_pam(void);
+void svr_auth_password(int valid_user);
+void svr_auth_pubkey(int valid_user);
+void svr_auth_pam(int valid_user);
#if DROPBEAR_SVR_PUBKEY_OPTIONS_BUILT
int svr_pubkey_allows_agentfwd(void);
diff --git a/svr-auth.c b/svr-auth.c
index c19c0901..edde86bc 100644
--- a/svr-auth.c
+++ b/svr-auth.c
@@ -149,10 +149,8 @@ void recv_msg_userauth_request() {
if (methodlen == AUTH_METHOD_PASSWORD_LEN &&
strncmp(methodname, AUTH_METHOD_PASSWORD,
AUTH_METHOD_PASSWORD_LEN) == 0) {
- if (valid_user) {
- svr_auth_password();
- goto out;
- }
+ svr_auth_password(valid_user);
+ goto out;
}
}
#endif
@@ -164,10 +162,8 @@ void recv_msg_userauth_request() {
if (methodlen == AUTH_METHOD_PASSWORD_LEN &&
strncmp(methodname, AUTH_METHOD_PASSWORD,
AUTH_METHOD_PASSWORD_LEN) == 0) {
- if (valid_user) {
- svr_auth_pam();
- goto out;
- }
+ svr_auth_pam(valid_user);
+ goto out;
}
}
#endif
@@ -177,12 +173,7 @@ void recv_msg_userauth_request() {
if (methodlen == AUTH_METHOD_PUBKEY_LEN &&
strncmp(methodname, AUTH_METHOD_PUBKEY,
AUTH_METHOD_PUBKEY_LEN) == 0) {
- if (valid_user) {
- svr_auth_pubkey();
- } else {
- /* pubkey has no failure delay */
- send_msg_userauth_failure(0, 0);
- }
+ svr_auth_pubkey(valid_user);
goto out;
}
#endif
diff --git a/svr-authpam.c b/svr-authpam.c
index 05e4f3e5..d201bc96 100644
--- a/svr-authpam.c
+++ b/svr-authpam.c
@@ -178,13 +178,14 @@ pamConvFunc(int num_msg,
* Keyboard interactive would be a lot nicer, but since PAM is synchronous, it
* gets very messy trying to send the interactive challenges, and read the
* interactive responses, over the network. */
-void svr_auth_pam() {
+void svr_auth_pam(int valid_user) {
struct UserDataS userData = {NULL, NULL};
struct pam_conv pamConv = {
pamConvFunc,
&userData /* submitted to pamvConvFunc as appdata_ptr */
};
+ const char* printable_user = NULL;
pam_handle_t* pamHandlep = NULL;
@@ -204,12 +205,23 @@ void svr_auth_pam() {
password = buf_getstring(ses.payload, &passwordlen);
+ /* We run the PAM conversation regardless of whether the username is valid
+ in case the conversation function has an inherent delay.
+ Use ses.authstate.username rather than ses.authstate.pw_name.
+ After PAM succeeds we then check the valid_user flag too */
+
/* used to pass data to the PAM conversation function - don't bother with
* strdup() etc since these are touched only by our own conversation
* function (above) which takes care of it */
- userData.user = ses.authstate.pw_name;
+ userData.user = ses.authstate.username;
userData.passwd = password;
+ if (ses.authstate.pw_name) {
+ printable_user = ses.authstate.pw_name;
+ } else {
+ printable_user = "<invalid username>";
+ }
+
/* Init pam */
if ((rc = pam_start("sshd", NULL, &pamConv, &pamHandlep)) != PAM_SUCCESS) {
dropbear_log(LOG_WARNING, "pam_start() failed, rc=%d, %s",
@@ -242,7 +254,7 @@ void svr_auth_pam() {
rc, pam_strerror(pamHandlep, rc));
dropbear_log(LOG_WARNING,
"Bad PAM password attempt for '%s' from %s",
- ses.authstate.pw_name,
+ printable_user,
svr_ses.addrstring);
send_msg_userauth_failure(0, 1);
goto cleanup;
@@ -253,12 +265,18 @@ void svr_auth_pam() {
rc, pam_strerror(pamHandlep, rc));
dropbear_log(LOG_WARNING,
"Bad PAM password attempt for '%s' from %s",
- ses.authstate.pw_name,
+ printable_user,
svr_ses.addrstring);
send_msg_userauth_failure(0, 1);
goto cleanup;
}
+ if (!valid_user) {
+ /* PAM auth succeeded but the username isn't allowed in for another reason
+ (checkusername() failed) */
+ send_msg_userauth_failure(0, 1);
+ }
+
/* successful authentication */
dropbear_log(LOG_NOTICE, "PAM password auth succeeded for '%s' from %s",
ses.authstate.pw_name,
diff --git a/svr-authpasswd.c b/svr-authpasswd.c
index bdee2aa1..69c7d8af 100644
--- a/svr-authpasswd.c
+++ b/svr-authpasswd.c
@@ -48,22 +48,14 @@ static int constant_time_strcmp(const char* a, const char* b) {
/* Process a password auth request, sending success or failure messages as
* appropriate */
-void svr_auth_password() {
+void svr_auth_password(int valid_user) {
char * passwdcrypt = NULL; /* the crypt from /etc/passwd or /etc/shadow */
char * testcrypt = NULL; /* crypt generated from the user's password sent */
- char * password;
+ char * password = NULL;
unsigned int passwordlen;
-
unsigned int changepw;
- passwdcrypt = ses.authstate.pw_passwd;
-
-#ifdef DEBUG_HACKCRYPT
- /* debugging crypt for non-root testing with shadows */
- passwdcrypt = DEBUG_HACKCRYPT;
-#endif
-
/* check if client wants to change password */
changepw = buf_getbool(ses.payload);
if (changepw) {
@@ -73,12 +65,21 @@ void svr_auth_password() {
}
password = buf_getstring(ses.payload, &passwordlen);
-
- /* the first bytes of passwdcrypt are the salt */
- testcrypt = crypt(password, passwdcrypt);
+ if (valid_user) {
+ /* the first bytes of passwdcrypt are the salt */
+ passwdcrypt = ses.authstate.pw_passwd;
+ testcrypt = crypt(password, passwdcrypt);
+ }
m_burn(password, passwordlen);
m_free(password);
+ /* After we have got the payload contents we can exit if the username
+ is invalid. Invalid users have already been logged. */
+ if (!valid_user) {
+ send_msg_userauth_failure(0, 1);
+ return;
+ }
+
if (testcrypt == NULL) {
/* crypt() with an invalid salt like "!!" */
dropbear_log(LOG_WARNING, "User account '%s' is locked",
diff --git a/svr-authpubkey.c b/svr-authpubkey.c
index aa6087c9..ff481c87 100644
--- a/svr-authpubkey.c
+++ b/svr-authpubkey.c
@@ -79,7 +79,7 @@ static int checkfileperm(char * filename);
/* process a pubkey auth request, sending success or failure message as
* appropriate */
-void svr_auth_pubkey() {
+void svr_auth_pubkey(int valid_user) {
unsigned char testkey; /* whether we're just checking if a key is usable */
char* algo = NULL; /* pubkey algo */
@@ -102,6 +102,15 @@ void svr_auth_pubkey() {
keybloblen = buf_getint(ses.payload);
keyblob = buf_getptr(ses.payload, keybloblen);
+ if (!valid_user) {
+ /* Return failure once we have read the contents of the packet
+ required to validate a public key.
+ Avoids blind user enumeration though it isn't possible to prevent
+ testing for user existence if the public key is known */
+ send_msg_userauth_failure(0, 0);
+ goto out;
+ }
+
/* check if the key is valid */
if (checkpubkey(algo, algolen, keyblob, keybloblen) == DROPBEAR_FAILURE) {
send_msg_userauth_failure(0, 0);

View File

@ -0,0 +1,35 @@
Copied from upstream repository.
Hunk #2 is removed since it cannot be applied and it is not needed.
From 7cead7137bf54851c1b7df5a3854351296d21276 Mon Sep 17 00:00:00 2001
From: Vasantha Ganesh K <vasanthaganesh.k@tuta.io>
Date: Thu, 22 Jun 2017 23:38:40 +0530
Subject: [PATCH] removed `check-conventions' from make
---
Makefile | 7 +-
tests/haskell-code-conventions.el | 165 ------------------------------
2 files changed, 1 insertion(+), 171 deletions(-)
delete mode 100644 tests/haskell-code-conventions.el
diff --git a/Makefile b/Makefile
index b2c89d6..aa907c5 100644
--- a/Makefile
+++ b/Makefile
@@ -79,12 +79,7 @@ build-$(EMACS_VERSION)/build-flag : build-$(EMACS_VERSION) $(patsubst %.el,build
check-%: tests/%-tests.el
$(BATCH) -l "$<" -f ert-run-tests-batch-and-exit;
-check: compile $(AUTOLOADS) check-ert check-conventions
-
-check-conventions :
- $(BATCH) -l tests/haskell-code-conventions.el \
- -f haskell-check-conventions-batch-and-exit
- @echo "conventions are okay"
+check: compile $(AUTOLOADS) check-ert
check-ert: $(ELCHECKS)
$(BATCH) --eval "(when (= emacs-major-version 24) \
--
2.18.0

View File

@ -0,0 +1,44 @@
Copied verbatim from upstream repository.
From cee22450ee30e79952f594796721dc6b17798ee6 Mon Sep 17 00:00:00 2001
From: Sascha Wilde <wilde@sha-bang.de>
Date: Fri, 23 Sep 2016 15:35:59 +0200
Subject: [PATCH] Removed unused lexical variables.
---
haskell-lexeme.el | 3 +--
haskell-process.el | 4 +---
2 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/haskell-lexeme.el b/haskell-lexeme.el
index 4256a79..b832560 100644
--- a/haskell-lexeme.el
+++ b/haskell-lexeme.el
@@ -138,8 +138,7 @@ When match is successful, match-data will contain:
(match-text 2) - whole qualified identifier
(match-text 3) - unqualified part of identifier
(match-text 4) - closing backtick"
- (let ((begin (point))
- (match-data-old (match-data))
+ (let ((match-data-old (match-data))
first-backtick-start
last-backtick-start
qid-start
diff --git a/haskell-process.el b/haskell-process.el
index b4efba2..4f3f859 100644
--- a/haskell-process.el
+++ b/haskell-process.el
@@ -160,9 +160,7 @@ HPTYPE is the result of calling `'haskell-process-type`' function."
(defun haskell-process-log (msg)
"Effective append MSG to the process log (if enabled)."
(when haskell-process-log
- (let* ((append-to (get-buffer-create "*haskell-process-log*"))
- (windows (get-buffer-window-list append-to t t))
- move-point-in-windows)
+ (let* ((append-to (get-buffer-create "*haskell-process-log*")))
(with-current-buffer append-to
;; point should follow insertion so that it stays at the end
;; of the buffer
--
2.18.0

View File

@ -0,0 +1,11 @@
--- netsurf-3.8/utils/split-messages.pl.orig 1969-12-31 18:00:00.000000000 -0600
+++ netsurf-3.8/utils/split-messages.pl 2018-08-30 00:18:58.158367530 -0500
@@ -238,7 +238,7 @@
if( $opt{gzip} )
{
- $ofh = new IO::Compress::Gzip( $ofh, AutoClose => 1, -Level => 9 );
+ $ofh = new IO::Compress::Gzip( $ofh, AutoClose => 1, -Level => 9, Time => 0 );
}
return $ofh;

View File

@ -17,23 +17,23 @@ Work around upstream's lack of a pkg-config file and update API.
# Optional libraries with pkgconfig
--- netsurf-3.6/utils/idna.c
+++ netsurf-3.6/utils/idna.c
@@ -26,7 +26,7 @@
#include <stdint.h>
--- netsurf-3.8/utils/idna.c
+++ netsurf-3.8/utils/idna.c
@@ -27,7 +27,7 @@
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
-#include <libutf8proc/utf8proc.h>
+#include <utf8proc.h>
#include "utils/errors.h"
#include "utils/idna.h"
--- netsurf-3.7/test/Makefile 2017-10-15 08:39:24.000000000 -0500
+++ netsurf-3.7/test/Makefile 2017-11-05 11:14:46.219013218 -0600
@@ -139,14 +139,14 @@
-D_XOPEN_SOURCE=600 \
#include "netsurf/inttypes.h"
--- netsurf-3.8/test/Makefile
+++ netsurf-3.8/test/Makefile
@@ -142,14 +142,15 @@
-Itest -Iinclude -Icontent/handlers -Ifrontends -I. -I.. \
-Dnsgtk \
$(SAN_FLAGS) \
- $(shell pkg-config --cflags libcurl libparserutils libwapcaplet libdom libnsutils libutf8proc) \
+ $(shell pkg-config --cflags libcurl libparserutils libwapcaplet libdom libnsutils) \
$(LIB_CFLAGS)
@ -43,7 +43,8 @@ Work around upstream's lack of a pkg-config file and update API.
TESTLDFLAGS := -L$(TESTROOT) \
- $(shell pkg-config --libs libcurl libparserutils libwapcaplet libdom libnsutils libutf8proc) -lz \
+ $(shell pkg-config --libs libcurl libparserutils libwapcaplet libdom libnsutils) -lz -lutf8proc \
+ $(shell pkg-config --libs libcurl libparserutils libwapcaplet libdom libnsutils) \
+ $(LDFLAGS) \
$(SAN_FLAGS) \
$(LIB_LDFLAGS)\
$(COV_LDFLAGS)

View File

@ -1,23 +0,0 @@
This patch comments out tests that rely on files that are missing
from the source tarball.
--- openexr-2.2.0/IlmImfTest/testSampleImages.cpp 2015-02-25 16:19:21.565105625 +0100
+++ openexr-2.2.0/IlmImfTest/testSampleImages.cpp 2015-02-25 16:21:46.394128206 +0100
@@ -162,16 +162,6 @@ testSampleImages (const std::string&)
compareImages (ILM_IMF_TEST_IMAGEDIR "comp_b44.exr",
ILM_IMF_TEST_IMAGEDIR "comp_b44_piz.exr");
- compareImages (ILM_IMF_TEST_IMAGEDIR "comp_dwaa_v1.exr",
- ILM_IMF_TEST_IMAGEDIR "comp_dwaa_piz.exr");
- compareImages (ILM_IMF_TEST_IMAGEDIR "comp_dwaa_v2.exr",
- ILM_IMF_TEST_IMAGEDIR "comp_dwaa_piz.exr");
-
- compareImages (ILM_IMF_TEST_IMAGEDIR "comp_dwab_v1.exr",
- ILM_IMF_TEST_IMAGEDIR "comp_dwab_piz.exr");
- compareImages (ILM_IMF_TEST_IMAGEDIR "comp_dwab_v2.exr",
- ILM_IMF_TEST_IMAGEDIR "comp_dwab_piz.exr");
-
cout << "ok\n" << endl;
}

View File

@ -0,0 +1,28 @@
See https://github.com/thepowersgang/mrustc/archive/v0.8.0.tar.gz
--- rustc-1.19.0-src-orig/src/libcore/intrinsics.rs
+++ rustc-1.19.0-src/src/libcore/intrinsics.rs
@@ -678,5 +678,9 @@
pub fn min_align_of_val<T: ?Sized>(_: &T) -> usize;
+ /// Obtain the length of a slice pointer
+ #[cfg(rust_compiler="mrustc")]
+ pub fn mrustc_slice_len<T>(pointer: *const [T]) -> usize;
+
/// Gets a static string slice containing the name of a type.
pub fn type_name<T: ?Sized>() -> &'static str;
--- rustc-1.19.0-src-orig/src/libcore/slice/mod.rs
+++ rustc-1.19.0-src/src/libcore/slice/mod.rs
@@ -413,6 +413,8 @@
#[inline]
fn len(&self) -> usize {
- unsafe {
- mem::transmute::<&[T], Repr<T>>(self).len
- }
+ #[cfg(not(rust_compiler="mrustc"))]
+ let rv = unsafe { mem::transmute::<&[T], Repr<T>>(self).len };
+ #[cfg(rust_compiler="mrustc")]
+ let rv = unsafe { ::intrinsics::mrustc_slice_len(self) };
+ rv
}

View File

@ -7593,7 +7593,7 @@ renaming exports, if they try to use them.")
(define-public perl-sub-identify
(package
(name "perl-sub-identify")
(version "0.10")
(version "0.14")
(source
(origin
(method url-fetch)
@ -7601,7 +7601,7 @@ renaming exports, if they try to use them.")
"Sub-Identify-" version ".tar.gz"))
(sha256
(base32
"087fjcg6w576w47i1slj6mjfd3gl1b0airgddmn3prn0nff6nn2m"))))
"0vxdxyfh6037xy88ic7500wydzmsxldhp95n8bld2kaihqh2g386"))))
(build-system perl-build-system)
(home-page "https://metacpan.org/release/Sub-Identify")
(synopsis "Retrieve names of code references")

View File

@ -95,6 +95,18 @@ cameras (CRW/CR2, NEF, RAF, DNG, and others).")
;; both two licensing modes for your changes/additions."
(license (list license:lgpl2.1 license:cddl1.0))))
(define-public libraw-0.18
(package (inherit libraw)
(name "libraw")
(version "0.18.12")
(source (origin
(method url-fetch)
(uri (string-append "https://www.libraw.org/data/LibRaw-"
version ".tar.gz"))
(sha256
(base32
"1m2khr2cij8z6lawgbmdksjn14fpnjsy8ad4qahnpqapm1slsxap"))))))
(define-public libexif
(package
(name "libexif")

View File

@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;;
;;; This file is part of GNU Guix.
;;;
@ -18,7 +19,7 @@
(define-module (gnu packages printers)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module (guix build-system gnu)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (gnu packages libusb)
@ -32,15 +33,15 @@
(package
(name "robocut")
(version "1.0.11")
(source (origin
(method url-fetch)
(uri (string-append
"https://github.com/Timmmm/robocut/archive/v"
version ".tar.gz"))
(sha256
(base32
"0nmr1plq1f6sarxwqwy4vzbxkljlx8y4xalm7r05vx4lrdai5pad"))
(file-name (string-append name "-" version ".tar.gz"))))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/Timmmm/robocut.git")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "0dp9cssyik63yvkk35s51v94a873x751iqg93qzd8dpqkmz5z8gn"))))
(build-system gnu-build-system)
(arguments
'(#:phases (modify-phases %standard-phases

View File

@ -99,6 +99,7 @@
#:use-module (gnu packages libevent)
#:use-module (gnu packages libffi)
#:use-module (gnu packages linux)
#:use-module (gnu packages llvm)
#:use-module (gnu packages machine-learning)
#:use-module (gnu packages man)
#:use-module (gnu packages maths)
@ -3363,14 +3364,14 @@ convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.
(define-public python-matplotlib
(package
(name "python-matplotlib")
(version "2.2.2")
(version "2.2.3")
(source
(origin
(method url-fetch)
(uri (pypi-uri "matplotlib" version))
(sha256
(base32
"1s6dv225w3k4fv52h8lfjc7qq5y56i9755ayx0mz48ddi99fzisd"))))
"1rcc7x9ig3hpchkc4cwdvym3y451w74275fxr455zkfagrsvymbk"))))
(build-system python-build-system)
(propagated-inputs ; the following packages are all needed at run time
`(("python-cycler" ,python-cycler)
@ -3398,7 +3399,8 @@ convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.
;; object. For this reason we need to import both libraries.
;; https://pythonhosted.org/cairocffi/cffi_api.html#converting-pycairo
("python-pycairo" ,python-pycairo)
("python-pyqt" ,python-pyqt)
;; XXX: qtwebkit cannot be built reliably.
("python-pyqt" ,python-pyqt-without-qtwebkit)
("python-cairocffi" ,python-cairocffi)))
(inputs
`(("libpng" ,libpng)
@ -3649,6 +3651,18 @@ functions.")
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'disable-broken-tests
(lambda _
(substitute* "scipy/sparse/linalg/dsolve/tests/test_linsolve.py"
(("^( +)def test_threads_parallel\\(self\\):" m indent)
(string-append indent
"@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
m)))
(substitute* "scipy/sparse/linalg/eigen/arpack/tests/test_arpack.py"
(("^def test_parallel_threads\\(\\):" m)
(string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
m)))
#t))
(add-before 'build 'configure-openblas
(lambda* (#:key inputs #:allow-other-keys)
(call-with-output-file "site.cfg"
@ -7267,7 +7281,7 @@ applications.")
(description "With apipkg you can control the exported namespace of a Python
package and greatly reduce the number of imports for your users. It is a small
pure Python module that works on virtually all Python versions.")
(home-page "https://bitbucket.org/hpk42/apipkg")
(home-page "https://github.com/pytest-dev/apipkg")
(license license:expat)))
(define-public python2-apipkg
@ -13821,3 +13835,112 @@ Let's Encrypt.")
development that supports command line argument parsing, command string
validation testing and application logic.")
(license license:expat)))
;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
;; python-numba. They have a very unflexible relationship.
(define-public python-numba
(package
(name "python-numba")
(version "0.39.0")
(source
(origin
(method url-fetch)
(uri (pypi-uri "numba" version))
(sha256
(base32
"1bibvkwga1v8293i9ivl469d8bzgabn3vgr2ig7c1i68v8frsx07"))))
(build-system python-build-system)
(arguments
`(#:modules ((guix build utils)
(guix build python-build-system)
(ice-9 ftw)
(srfi srfi-1)
(srfi srfi-26))
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'disable-proprietary-features
(lambda _
(setenv "NUMBA_DISABLE_HSA" "1")
(setenv "NUMBA_DISABLE_CUDA" "1")
#t))
(add-after 'unpack 'remove-failing-tests
(lambda _
;; FIXME: these tests fail for unknown reasons:
;; test_non_writable_pycache, test_non_creatable_pycache, and
;; test_frozen (all in numba.tests.test_dispatcher.TestCache).
(substitute* "numba/tests/test_dispatcher.py"
(("def test(_non_writable_pycache)" _ m)
(string-append "def guix_skip" m))
(("def test(_non_creatable_pycache)" _ m)
(string-append "def guix_skip" m))
(("def test(_frozen)" _ m)
(string-append "def guix_skip" m)))
;; These tests fail because we don't run the tests from the build
;; directory: test_setup_py_distutils, test_setup_py_setuptools
;; They ar in numba.tests.test_pycc.TestDistutilsSupport.
(substitute* "numba/tests/test_pycc.py"
(("def test(_setup_py_distutils|_setup_py_setuptools)" _ m)
(string-append "def guix_skip" m)))
#t))
(replace 'check
(lambda _
(let ((cwd (getcwd)))
(setenv "PYTHONPATH"
(string-append cwd "/build/"
(find (cut string-prefix? "lib" <>)
(scandir (string-append cwd "/build")))
":"
(getenv "PYTHONPATH")))
;; Something is wrong with the PYTHONPATH when running the
;; tests from the build directory, as it complains about not being
;; able to import certain modules.
(with-directory-excursion "/tmp"
(invoke "python3" "-m" "numba.runtests" "-v" "-m")))
#t)))))
(propagated-inputs
`(("python-llvmlite" ,python-llvmlite)
("python-numpy" ,python-numpy)
("python-singledispatch" ,python-singledispatch)))
;; Needed for tests.
(inputs
`(("python-jinja2" ,python-jinja2)
("python-pygments" ,python-pygments)))
(home-page "https://numba.pydata.org")
(synopsis "Compile Python code using LLVM")
(description "Numba gives you the power to speed up your applications with
high performance functions written directly in Python. With a few
annotations, array-oriented and math-heavy Python code can be just-in-time
compiled to native machine instructions, similar in performance to C, C++ and
Fortran, without having to switch languages or Python interpreters.
Numba works by generating optimized machine code using the LLVM compiler
infrastructure at import time, runtime, or statically (using the included pycc
tool).")
(license license:bsd-3)))
(define-public python-anndata
(package
(name "python-anndata")
(version "0.6.9")
(source
(origin
(method url-fetch)
(uri (pypi-uri "anndata" version))
(sha256
(base32
"1fh461xyyc7pcrjfgd013bdc2alf53r46ss3gfw3431mbb1gappi"))))
(build-system python-build-system)
(propagated-inputs
`(("python-h5py" ,python-h5py)
("python-natsort" ,python-natsort)
("python-pandas" ,python-pandas)
("python-scipy" ,python-scipy)))
(home-page "https://github.com/theislab/anndata")
(synopsis "Annotated data for data analysis pipelines")
(description "Anndata is a package for simple (functional) high-level APIs
for data analysis pipelines. In this context, it provides an efficient,
scalable way of keeping track of data together with learned annotations and
reduces the code overhead typically encountered when using a mostly
object-oriented library such as @code{scikit-learn}.")
(license license:bsd-3)))

View File

@ -1834,6 +1834,15 @@ framework. The bindings are implemented as a set of Python modules and
contain over 620 classes.")
(license license:gpl3)))
;; XXX: This is useful because qtwebkit does not build reliably at this time.
;; Ultimately, it would be nicer to have a more modular set of python-pyqt-*
;; packages that could be used together.
(define-public python-pyqt-without-qtwebkit
(package (inherit python-pyqt)
(name "python-pyqt-without-qtwebkit")
(inputs
(alist-delete "qtwebkit" (package-inputs python-pyqt)))))
(define-public python2-pyqt
(package (inherit python-pyqt)
(name "python2-pyqt")

View File

@ -29,7 +29,7 @@
(define-public re2
(package
(name "re2")
(version "2018-08-01")
(version "2018-09-01")
(home-page "https://github.com/google/re2")
(source (origin
(method url-fetch)
@ -37,7 +37,7 @@
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"0lmpc3cb9bvc27fp27jacx6qjn176v8z8p7k70byc092q68mr6bw"))))
"0hygr88hvy7if1i45m5r6x60zf73439j2fwzw7wwcw9gb01v690l"))))
(build-system gnu-build-system)
(arguments
`(#:modules ((guix build gnu-build-system)

View File

@ -37,6 +37,7 @@
#:use-module (gnu packages java)
#:use-module (gnu packages libffi)
#:use-module (gnu packages maths)
#:use-module (gnu packages ncurses)
#:use-module (gnu packages networking)
#:use-module (gnu packages python)
#:use-module (gnu packages ragel)
@ -193,6 +194,25 @@ a focus on simplicity and productivity.")
(("/bin/sh") (which "sh")))
#t)))))))
(define-public ruby-concurrent
(package
(name "ruby-concurrent")
(version "1.0.5")
(source (origin
(method url-fetch)
(uri (rubygems-uri "concurrent-ruby" version))
(sha256
(base32
"183lszf5gx84kcpb779v6a2y0mx9sssy8dgppng1z9a505nj1qcf"))))
(build-system ruby-build-system)
(arguments `(#:tests? #f)); No rakefile
(home-page "https://github.com/ruby-concurrency/concurrent-ruby")
(synopsis "Concurrency tools for Ruby")
(description "This gem provides concurrency tools for Ruby. It provides
a library of common thread-safe types and data-structures as well as abstractions
for concurrency and communication between threads.")
(license license:expat)))
(define-public ruby-highline
(package
(name "ruby-highline")
@ -262,16 +282,17 @@ packaging native C and Java extensions in Ruby.")
(define-public ruby-i18n
(package
(name "ruby-i18n")
(version "0.7.0")
(version "1.1.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "i18n" version))
(sha256
(base32
"1i5z1ykl8zhszsxcs8mzl8d0dxgs3ylz8qlzrw74jb0gplkx6758"))))
"0ppvmla21hssvrfm8g1n2fnb4lxn4yhy9qmmba0imanflgldrjmr"))))
(build-system ruby-build-system)
(arguments
'(#:tests? #f)) ; no tests
(propagated-inputs `(("concurrent-ruby" ,ruby-concurrent)))
(synopsis "Internationalization library for Ruby")
(description "Ruby i18n is an internationalization and localization
solution for Ruby programs. It features translation and localization,
@ -3013,17 +3034,28 @@ you about the changes.")
(home-page "https://github.com/guard/listen")
(license license:expat)))
(define-public ruby-listen-3.0
(package
(inherit ruby-listen)
(version "3.0.8")
(source (origin
(method url-fetch)
(uri (rubygems-uri "listen" version))
(sha256
(base32
"1l0y7hbyfiwpvk172r28hsdqsifq1ls39hsfmzi1vy4ll0smd14i"))))))
(define-public ruby-activesupport
(package
(name "ruby-activesupport")
(version "5.1.4")
(version "5.2.1")
(source
(origin
(method url-fetch)
(uri (rubygems-uri "activesupport" version))
(sha256
(base32
"0sgf4rsfr7jcaqsx0wwzx4l4k9xsjlwv0mzl08pxiyp1qzyx8scr"))))
"0ziy6xk31k4fs115cdkba1ys4i8nzcyri7a2jig7nx7k5h7li6l2"))))
(build-system ruby-build-system)
(arguments
`(#:phases
@ -4658,7 +4690,7 @@ binary-to-text encoding. The main modern use of Ascii85 is in PostScript and
(define-public ruby-ttfunk
(package
(name "ruby-ttfunk")
(version "1.4.0")
(version "1.5.1")
(source
(origin
(method url-fetch)
@ -4669,12 +4701,18 @@ binary-to-text encoding. The main modern use of Ascii85 is in PostScript and
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"1izq84pnm9niyvkzp8k0vl232q9zj41hwmp9na9fzycfh1pbnsl6"))))
"1ymcn12n5iws401yz03zsj8rr653fdqq13czsrciq09phgh9jzc5"))))
(build-system ruby-build-system)
(arguments
`(#:test-target "spec"
#:phases
(modify-phases %standard-phases
(add-before 'build 'remove-ssh
(lambda _
;; remove dependency on an ssh key pair that doesn't exist
(substitute* "ttfunk.gemspec"
(("spec.signing_key.*") ""))
#t))
(add-before 'check 'remove-rubocop
(lambda _
;; remove rubocop as a dependency as not needed for testing
@ -4682,10 +4720,11 @@ binary-to-text encoding. The main modern use of Ascii85 is in PostScript and
(("spec.add_development_dependency\\('rubocop'.*") ""))
(substitute* "Rakefile"
(("require 'rubocop/rake_task'") "")
(("Rubocop::RakeTask.new") ""))
(("RuboCop::RakeTask.new") ""))
#t)))))
(native-inputs
`(("ruby-rspec" ,ruby-rspec)
("ruby-yard" ,ruby-yard)
("bundler" ,bundler)))
(synopsis "Font metrics parser for the Prawn PDF generator")
(description
@ -5070,3 +5109,821 @@ programs running in the background, in Ruby.")
(sha256
(base32
"0a61922kmvcxyj5l70fycapr87gz1dzzlkfpq85rfqk5vdh3d28p"))))))
(define-public ruby-public-suffix
(package
(name "ruby-public-suffix")
(version "3.0.3")
(source (origin
(method url-fetch)
(uri (rubygems-uri "public_suffix" version))
(sha256
(base32
"08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l"))))
(build-system ruby-build-system)
(arguments
;; Tests require network
`(#:tests? #f))
(home-page "https://simonecarletti.com/code/publicsuffix-ruby/")
(synopsis "Domain name parser")
(description "The gem @code{public_suffix} is a domain name parser,
written in Ruby, and based on the @dfn{Public Suffix List}. A public suffix
is one under which Internet users can (or historically could) directly
register names. Some examples of public suffixes are @code{.com},
@code{.co.uk} and @code{pvt.k12.ma.us}. The Public Suffix List is a list of
all known public suffixes.")
(license license:expat)))
(define-public ruby-addressable
(package
(name "ruby-addressable")
(version "2.5.2")
(source (origin
(method url-fetch)
(uri (rubygems-uri "addressable" version))
(sha256
(base32
"0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk"))))
(build-system ruby-build-system)
(propagated-inputs
`(("ruby-public-suffix" ,ruby-public-suffix)))
(arguments
;; No test target
`(#:tests? #f))
(home-page "https://github.com/sporkmonger/addressable")
(synopsis "Alternative URI implementation")
(description "Addressable is a replacement for the URI implementation that
is part of Ruby's standard library. It more closely conforms to RFC 3986,
RFC 3987, and RFC 6570 (level 4), providing support for IRIs and URI templates.")
(license license:asl2.0)))
(define-public ruby-colorator
(package
(name "ruby-colorator")
(version "1.1.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "colorator" version))
(sha256
(base32
"0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72"))))
(build-system ruby-build-system)
(arguments
;; No test target
`(#:tests? #f))
(home-page "http://octopress.org/colorator/")
(synopsis "Terminal color library")
(description "Colorator is a Ruby gem that helps you colorize your text
for the terminal.")
(license license:expat)))
(define-public ruby-command-line-reporter
(package
(name "ruby-command-line-reporter")
(version "4.0.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "command_line_reporter" version))
(sha256
(base32
"1qma35xrb772whxwy1rs9bicb9d6lvz0s2dd2dnn4fr6zcbcxc0a"))))
(build-system ruby-build-system)
(arguments
;; No Rakefile
`(#:tests? #f
#:phases
(modify-phases %standard-phases
(add-before 'build 'fix-dependencies
(lambda _
(substitute* ".gemspec"
;; colored is unmaintained
(("colored") "colorator")
;; colorator version
(("= 1.2") "= 1.1"))
#t)))))
(propagated-inputs `(("ruby-colorator" ,ruby-colorator)))
(home-page "https://github.com/wbailey/command_line_reporter")
(synopsis "Report production while executing Ruby scripts")
(description "This gem provides a DSL that makes it easy to write reports
of various types in ruby. It eliminates the need to litter your source with
puts statements, instead providing a more readable, expressive interface to
your application.")
(license license:asl2.0)))
(define-public ruby-command-line-reporter-3
(package
(inherit ruby-command-line-reporter)
(version "3.3.6")
(source (origin
(method url-fetch)
(uri (rubygems-uri "command_line_reporter" version))
(sha256
(base32
"1h39zqqxp3k4qk49ajpx0jps1vmvxgkh43mqkb6znk583bl0fv71"))))))
(define-public ruby-rdoc
(package
(name "ruby-rdoc")
(version "6.0.4")
(source
(origin
(method url-fetch)
(uri (rubygems-uri "rdoc" version))
(sha256
(base32
"0anv42cqcdc6g4n386mrva7mgav5i0c2ry3yzvzzc6z6hymkmcr7"))))
(build-system ruby-build-system)
(native-inputs
`(("bundler" ,bundler)))
(home-page "https://ruby.github.io/rdoc/")
(synopsis "HTML and command-line documentation utility")
(description "RDoc produces HTML and command-line documentation for Ruby
projects. RDoc includes the +rdoc+ and +ri+ tools for generating and displaying
documentation from the command-line.")
(license license:gpl2+)))
(define-public ruby-sass-listen
(package
(name "ruby-sass-listen")
(version "4.0.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "sass-listen" version))
(sha256
(base32
"0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df"))))
(build-system ruby-build-system)
(arguments
;; No test target
`(#:tests? #f))
(propagated-inputs
`(("ruby-rb-fsevent" ,ruby-rb-fsevent)
("ruby-rb-inotify" ,ruby-rb-inotify)))
(home-page "https://github.com/sass/listen")
(synopsis "File modification notification library")
(description "The Listen gem listens to file modifications and notifies you
about the changes.")
(license license:expat)))
(define-public ruby-terminfo
(package
(name "ruby-terminfo")
(version "0.1.1")
(source
(origin
(method url-fetch)
(uri (rubygems-uri "ruby-terminfo" version))
(sha256
(base32
"0rl4ic5pzvrpgd42z0c1s2n3j39c9znksblxxvmhkzrc0ckyg2cm"))))
(build-system ruby-build-system)
(arguments
`(#:test-target "test"
;; Rakefile requires old packages and would need modification to
;; work with current software.
#:tests? #f))
(inputs
`(("ncurses" ,ncurses)))
(native-inputs
`(("ruby-rubygems-tasks" ,ruby-rubygems-tasks)
("ruby-rdoc" ,ruby-rdoc)))
(home-page "http://www.a-k-r.org/ruby-terminfo/")
(synopsis "Terminfo binding for Ruby")
(description "Ruby-terminfo provides terminfo binding for Ruby.")
(license license:bsd-3)))
(define-public ruby-diffy
(package
(name "ruby-diffy")
(version "3.2.1")
(source
(origin
(method url-fetch)
(uri (rubygems-uri "diffy" version))
(sha256
(base32
"119imrkn01agwhx5raxhknsi331y5i4yda7r0ws0an6905ximzjg"))))
(build-system ruby-build-system)
(arguments
;; No tests
`(#:tests? #f))
(native-inputs
`(("ruby-rspec" ,ruby-rspec)))
(home-page "https://github.com/samg/diffy")
(synopsis "Convenient diffing in ruby")
(description "Diffy provides a convenient way to generate a diff from two
strings or files.")
(license license:expat)))
(define-public ruby-sass-spec
(package
(name "ruby-sass-spec")
(version "3.5.4")
(source (origin
(method url-fetch)
(uri (string-append "https://github.com/sass/sass-spec/archive/v"
version ".tar.gz"))
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"0nx8lp7c9qa58w489crgqa3c489xsyarn1a8h4np9mwwfqm1h3rr"))))
(build-system ruby-build-system)
(propagated-inputs
`(("ruby-command-line-reporter-3" ,ruby-command-line-reporter-3)
("ruby-diffy" ,ruby-diffy)
("ruby-terminfo" ,ruby-terminfo)))
(arguments
;; No Rakefile
`(#:tests? #f))
(home-page "https://github.com/sass/sass-spec")
(synopsis "Test suite for Sass")
(description "Sass Spec is a test suite for Sass. Test cases are all in
the @file{spec} directory.")
(license license:expat)))
(define-public ruby-sass
(package
(name "ruby-sass")
(version "3.5.7")
(source (origin
(method url-fetch)
(uri (rubygems-uri "sass" version))
(sha256
(base32
"1sy7xsbgpcy90j5ynbq967yplffp74pvph3r8ivn2sv2b44q6i61"))))
(build-system ruby-build-system)
(propagated-inputs
`(("ruby-sass-listen" ,ruby-sass-listen)))
(native-inputs
`(("ruby-sass-spec" ,ruby-sass-spec)))
(home-page "http://sass-lang.com/")
(synopsis "CSS extension language")
(description "Sass is a CSS extension language. It extends CSS with
features that don't exist yet like variables, nesting, mixins and inheritance.")
(license license:expat)))
(define-public ruby-jekyll-sass-converter
(package
(name "ruby-jekyll-sass-converter")
(version "1.5.2")
(source (origin
(method url-fetch)
(uri (rubygems-uri "jekyll-sass-converter" version))
(sha256
(base32
"008ikh5fk0n6ri54mylcl8jn0mq8p2nfyfqif2q3pp0lwilkcxsk"))))
(build-system ruby-build-system)
(propagated-inputs
`(("ruby-sass" ,ruby-sass)))
(arguments
;; No rakefile
`(#:tests? #f))
(home-page "https://github.com/jekyll/jekyll-sass-converter")
(synopsis "Sass converter for Jekyll")
(description "This gem provide built-in support for the Sass converter
in Jekyll.")
(license license:expat)))
(define-public ruby-jekyll-watch
(package
(name "ruby-jekyll-watch")
(version "2.0.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "jekyll-watch" version))
(sha256
(base32
"0m7scvj3ki8bmyx5v8pzibpg6my10nycnc28lip98dskf8iakprp"))))
(build-system ruby-build-system)
(propagated-inputs
`(("ruby-listen-3.0" ,ruby-listen-3.0)))
(arguments
;; No rakefile
`(#:tests? #f))
(home-page "https://github.com/jekyll/jekyll-watch")
(synopsis "Jekyll auto-rebuild support")
(description "This gems add the @code{--watch} switch to the jekyll CLI
interface. It allows Jekyll to rebuild your site when a file changes.")
(license license:expat)))
(define-public ruby-parallel
(package
(name "ruby-parallel")
(version "1.12.1")
(source (origin
(method url-fetch)
(uri (rubygems-uri "parallel" version))
(sha256
(base32
"01hj8v1qnyl5ndrs33g8ld8ibk0rbcqdpkpznr04gkbxd11pqn67"))))
(build-system ruby-build-system)
(arguments `(#:tests? #f)); No rakefile
(home-page "https://github.com/grosser/parallel")
(synopsis "Parallel processing in Ruby")
(description "Parallel allows you to run any code in parallel Processes
(to use all CPUs) or Threads(to speedup blocking operations). It is best
suited for map-reduce or e.g. parallel downloads/uploads.")
(license license:expat)))
(define-public ruby-cane
(package
(name "ruby-cane")
(version "3.0.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "cane" version))
(sha256
(base32
"0yf5za3l7lhrqa3g56sah73wh33lbxy5y3cb7ij0a2bp1b4kwhih"))))
(build-system ruby-build-system)
(arguments `(#:tests? #f)); No rakefile
(home-page "https://github.com/square/cane")
(propagated-inputs
`(("ruby-parallel" ,ruby-parallel)))
(synopsis "Code quality threshold checking")
(description "Cane fails your build if code quality thresholds are not met.")
(license license:asl2.0)))
(define-public ruby-morecane
(package
(name "ruby-morecane")
(version "0.2.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "morecane" version))
(sha256
(base32
"0w70vb8z5bdhvr21h660aa43m5948pv0bd27z7ngai2iwdvqd771"))))
(build-system ruby-build-system)
(home-page "https://github.com/yob/morecane")
(arguments `(#:tests? #f)); No rakefile
(propagated-inputs
`(("ruby-parallel" ,ruby-parallel)))
(synopsis "Extra checks for cane")
(description "The cane gem provides a great framework for running quality
checks over your ruby project as part of continuous integration build. It
comes with a few checks out of the box, but also provides an API for loading
custom checks. This gem provides a set of additional checks.")
(license license:expat)))
(define-public ruby-pdf-reader
(package
(name "ruby-pdf-reader")
(version "2.1.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "pdf-reader" version))
(sha256
(base32
"1b3ig4wpcgdbqa7yw0ahwbmikkkywn2a22bfmrknl5ls7g066x45"))))
(build-system ruby-build-system)
(arguments `(#:test-target "spec"))
(native-inputs
`(("bundler" ,bundler)
("ruby-rspec" ,ruby-rspec)
("ruby-cane" ,ruby-cane)
("ruby-morecane" ,ruby-morecane)))
(propagated-inputs
`(("ruby-afm" ,ruby-afm)
("ruby-ascii85" ,ruby-ascii85)
("ruby-hashery" ,ruby-hashery)
("ruby-rc4" ,ruby-rc4)
("ruby-ttfunk" ,ruby-ttfunk)))
(home-page "https://github.com/yob/pdf-reader")
(synopsis "PDF parser in Ruby")
(description "The PDF::Reader library implements a PDF parser conforming as
much as possible to the PDF specification from Adobe. It provides programmatic
access to the contents of a PDF file with a high degree of flexibility.")
(license license:gpl3+)))
(define-public ruby-pdf-inspector
(package
(name "ruby-pdf-inspector")
(version "1.3.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "pdf-inspector" version))
(sha256
(base32
"1g853az4xzgqxr5xiwhb76g4sqmjg4s79mm35mp676zjsrwpa47w"))))
(build-system ruby-build-system)
(propagated-inputs
`(("ruby-pdf-reader" ,ruby-pdf-reader)))
(arguments `(#:tests? #f)); No rakefile
(home-page "https://github.com/prawnpdf/pdf-inspector")
(synopsis "Analysis classes for inspecting PDF output")
(description "This library provides a number of PDF::Reader based tools for
use in testing PDF output. Presently, the primary purpose of this tool is to
support the tests found in Prawn, a pure Ruby PDF generation library.")
(license license:gpl3+)))
(define-public ruby-pdf-core
(package
(name "ruby-pdf-core")
(version "0.8.1")
(source (origin
(method url-fetch)
(uri (rubygems-uri "pdf-core" version))
(sha256
(base32
"15d6m99bc8bbzlkcg13qfpjjzphfg5x905pjbfygvpcxsm8gnsvg"))))
(build-system ruby-build-system)
(arguments
; No test target
`(#:tests? #f))
(home-page "https://github.com/prawnpdf/pdf-core")
(synopsis "Low level PDF features for Prawn")
(description "This is an experimental gem that extracts low-level PDF
functionality from Prawn.")
(license license:gpl3+)))
(define-public ruby-yard
(package
(name "ruby-yard")
(version "0.9.16")
(source (origin
(method url-fetch)
(uri (rubygems-uri "yard" version))
(sha256
(base32
"0lmmr1839qgbb3zxfa7jf5mzy17yjl1yirwlgzdhws4452gqhn67"))))
(build-system ruby-build-system)
(arguments `(#:test-target "spec"))
(home-page "https://yardoc.org/")
(synopsis "Ruby documentation tool")
(description "YARD is a documentation generation tool for the Ruby
programming language. It enables the user to generate consistent, usable
documentation that can be exported to a number of formats very easily, and
also supports extending for custom Ruby constructs such as custom class level
definitions.")
(license license:expat)))
(define-public ruby-prawn
(package
(name "ruby-prawn")
(version "2.2.2")
(source (origin
(method url-fetch)
(uri (rubygems-uri "prawn" version))
(sha256
(base32
"1qdjf1v6sfl44g3rqxlg8k4jrzkwaxgvh2l4xws97a8f3xv4na4m"))))
(build-system ruby-build-system)
(arguments
; No tests
`(#:tests? #f
#:phases
(modify-phases %standard-phases
(add-before 'build 'fix-dependencies
(lambda _
(substitute* "prawn.gemspec"
(("~> 0.7.0") "~> 0.7"))
#t)))))
(propagated-inputs
`(("ruby-pdf-core" ,ruby-pdf-core)
("ruby-ttfunk" ,ruby-ttfunk)))
(native-inputs
`(("bundler" ,bundler)
("ruby-pdf-inspector" ,ruby-pdf-inspector)
("ruby-rspec" ,ruby-rspec)
("ruby-simplecov" ,ruby-simplecov)
("ruby-yard" ,ruby-yard)))
(home-page "http://prawnpdf.org/api-docs/2.0/")
(synopsis "PDF generation for Ruby")
(description "Prawn is a pure Ruby PDF generation library.")
(license license:gpl3+)))
(define-public ruby-prawn-table
(package
(name "ruby-prawn-table")
(version "0.2.2")
(source (origin
(method url-fetch)
(uri (rubygems-uri "prawn-table" version))
(sha256
(base32
"1nxd6qmxqwl850icp18wjh5k0s3amxcajdrkjyzpfgq0kvilcv9k"))))
(build-system ruby-build-system)
(arguments `(#:tests? #f)); No rakefile
(propagated-inputs
`(("ruby-prawn" ,ruby-prawn)))
(home-page "https://github.com/prawnpdf/prawn-table")
(synopsis "Tables support for Prawn")
(description "This gem provides tables support for Prawn.")
(license license:gpl3+)))
(define-public ruby-kramdown
(package
(name "ruby-kramdown")
(version "1.17.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "kramdown" version))
(sha256
(base32
"1n1c4jmrh5ig8iv1rw81s4mw4xsp4v97hvf8zkigv4hn5h542qjq"))))
(build-system ruby-build-system)
(arguments `(#:tests? #f)); FIXME: some test failures
(native-inputs
`(("ruby-prawn" ,ruby-prawn)
("ruby-prawn-table" ,ruby-prawn-table)))
(home-page "https://kramdown.gettalong.org/")
(synopsis "Markdown parsing and converting library")
(description "Kramdown is a library for parsing and converting a superset
of Markdown. It is completely written in Ruby, supports standard Markdown
(with some minor modifications) and various extensions that have been made
popular by the PHP @code{Markdown Extra} package and @code{Maruku}.")
(license license:expat)))
(define-public ruby-http-parser.rb
(package
(name "ruby-http-parser.rb")
(version "0.6.0")
(source
(origin
(method url-fetch)
(uri (rubygems-uri "http_parser.rb" version))
(sha256
(base32
"15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi"))))
(build-system ruby-build-system)
(arguments
;; No tests
`(#:tests? #f))
(native-inputs
`(("ruby-rake-compiler" ,ruby-rake-compiler)
("ruby-rspec" ,ruby-rspec)))
(home-page "https://github.com/tmm1/http_parser.rb")
(synopsis "HTTP parser un Ruby")
(description "This gem is a simple callback-based HTTP request/response
parser for writing http servers, clients and proxies.")
(license license:expat)))
(define-public ruby-em-websocket
(package
(name "ruby-em-websocket")
(version "0.5.1")
(source
(origin
(method url-fetch)
(uri (rubygems-uri "em-websocket" version))
(sha256
(base32
"1bsw8vjz0z267j40nhbmrvfz7dvacq4p0pagvyp17jif6mj6v7n3"))))
(build-system ruby-build-system)
(arguments
;; No tests
`(#:tests? #f))
(propagated-inputs
`(("ruby-eventmachine" ,ruby-eventmachine)
("ruby-http-parser.rb" ,ruby-http-parser.rb)))
(native-inputs
`(("bundler" ,bundler)
("ruby-rspec" ,ruby-rspec)))
(home-page "https://github.com/igrigorik/em-websocket")
(synopsis "EventMachine based WebSocket server")
(description "Em-websocket is an EventMachine based WebSocket server
implementation.")
(license license:expat)))
(define-public ruby-rouge
(package
(name "ruby-rouge")
(version "3.2.1")
(source (origin
(method url-fetch)
(uri (rubygems-uri "rouge" version))
(sha256
(base32
"0h79gn2wmn1wix2d27lgiaimccyj8gvizrllyym500pir408x62f"))))
(build-system ruby-build-system)
(arguments `(#:tests? #f)); No rakefile
(home-page "http://rouge.jneen.net/")
(synopsis "Code highlighter")
(description "Rouge is a code highlighter written in Ruby. It supports more
than 100 languages and outputs HTML or ANSI 256-color text. Its HTML output
is compatible with stylesheets designed for pygments.")
(license (list
;; rouge is licensed under expat
license:expat
;; pygments is licensed under bsd-2
license:bsd-2))))
(define-public ruby-rouge-2
(package
(inherit ruby-rouge)
(version "2.2.1")
(source (origin
(method url-fetch)
(uri (rubygems-uri "rouge" version))
(sha256
(base32
"02kpahk5nkc33yxnn75649kzxaz073wvazr2zyg491nndykgnvcs"))))))
(define-public ruby-hashie
(package
(name "ruby-hashie")
(version "3.6.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "hashie" version))
(sha256
(base32
"13bdzfp25c8k51ayzxqkbzag3wj5gc1jd8h7d985nsq6pn57g5xh"))))
(build-system ruby-build-system)
(native-inputs
`(("bundler" ,bundler)))
(arguments `(#:tests? #f)); FIXME: Could not locate Gemfile or .bundle/ directory
(home-page "https://github.com/intridea/hashie")
(synopsis "Extensions to Ruby Hashes")
(description "Hashie is a collection of classes and mixins that make Ruby
hashes more powerful.")
(license license:expat)))
(define-public ruby-heredoc-unindent
(package
(name "ruby-heredoc-unindent")
(version "1.2.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "heredoc_unindent" version))
(sha256
(base32
"14ijr2fsjwhrkjkcaz81d5xnfa4vvgvcflrff83avqw9klm011yw"))))
(build-system ruby-build-system)
(native-inputs
`(("ruby-hoe" ,ruby-hoe)))
(home-page "https://github.com/adrianomitre/heredoc_unindent")
(synopsis "Heredoc indentation cleaner")
(description "This gem removes common margin from indented strings, such
as the ones produced by indented heredocs. In other words, it strips out
leading whitespace chars at the beggining of each line, but only as much as
the line with the smallest margin.
It is acknowledged that many strings defined by heredocs are just code and
fact is that most parsers are insensitive to indentation. If, however, the
strings are to be used otherwise, be it for printing or testing, the extra
indentation will probably be an issue and hence this gem.")
(license license:expat)))
(define-public ruby-safe-yaml
(package
(name "ruby-safe-yaml")
(version "1.0.4")
(source (origin
(method url-fetch)
(uri (rubygems-uri "safe_yaml" version))
(sha256
(base32
"1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094"))))
(build-system ruby-build-system)
(native-inputs
`(("ruby-rspec" ,ruby-rspec)
("ruby-hashie" ,ruby-hashie)
("ruby-heredoc-unindent" ,ruby-heredoc-unindent)))
(arguments `(#:test-target "spec"
#:tests? #f));; FIXME: one failure
(home-page "https://github.com/dtao/safe_yaml")
(synopsis "YAML parser")
(description "The SafeYAML gem provides an alternative implementation of
YAML.load suitable for accepting user input in Ruby applications.")
(license license:expat)))
(define-public ruby-mercenary
(package
(name "ruby-mercenary")
(version "0.3.6")
(source (origin
(method url-fetch)
(uri (rubygems-uri "mercenary" version))
(sha256
(base32
"10la0xw82dh5mqab8bl0dk21zld63cqxb1g16fk8cb39ylc4n21a"))))
(build-system ruby-build-system)
(arguments `(#:test-target "spec"))
(native-inputs
`(("bundler" ,bundler)))
(home-page "https://github.com/jekyll/mercenary")
(synopsis "Command-line apps library in Ruby")
(description "Mercenary is a lightweight and flexible library for writing
command-line apps in Ruby.")
(license license:expat)))
(define-public ruby-liquid
(package
(name "ruby-liquid")
(version "4.0.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "liquid" version))
(sha256
(base32
"17fa0jgwm9a935fyvzy8bysz7j5n1vf1x2wzqkdfd5k08dbw3x2y"))))
(build-system ruby-build-system)
(arguments `(#:tests? #f)); No rakefile
(home-page "https://shopify.github.io/liquid/")
(synopsis "Template language")
(description "Liquid is a template language written in Ruby. It is used
to load dynamic content on storefronts.")
(license license:expat)))
(define-public ruby-forwardable-extended
(package
(name "ruby-forwardable-extended")
(version "2.6.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "forwardable-extended" version))
(sha256
(base32
"15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v"))))
(build-system ruby-build-system)
(arguments `(#:tests? #f)); Cyclic dependency on luna-rspec-formatters
(home-page "https://github.com/envygeeks/forwardable-extended")
(synopsis "Delegation to hashes and instance variables in Forwardable")
(description "Forwardable Extended provides more @code{Forwardable}
methods for your source as @code{Forwardable::Extended}.")
(license license:expat)))
(define-public ruby-pathutil
(package
(name "ruby-pathutil")
(version "0.16.1")
(source (origin
(method url-fetch)
(uri (rubygems-uri "pathutil" version))
(sha256
(base32
"0wc18ms1rzi44lpjychyw2a96jcmgxqdvy2949r4vvb5f4p0lgvz"))))
(build-system ruby-build-system)
(propagated-inputs
`(("ruby-forwardable-extended" ,ruby-forwardable-extended)))
(native-inputs
`(("bundler" ,bundler)
("ruby-rspec" ,ruby-rspec)))
;; Fails with: cannot load such file --
;; /tmp/guix-build-ruby-pathutil-0.16.0.drv-0/gem/benchmark/support/task
(arguments `(#:tests? #f))
(home-page "https://github.com/envygeeks/pathutil")
(synopsis "Extended implementation of Pathname")
(description "Pathutil tries to be a faster pure Ruby implementation of
Pathname.")
(license license:expat)))
(define-public jekyll
(package
(name "jekyll")
(version "3.8.3")
(source (origin
(method url-fetch)
(uri (rubygems-uri "jekyll" version))
(sha256
(base32
"1iw90wihk9dscgmppf5v6lysg3kjmnx50mjyl4gghkdb4spw97xk"))))
(build-system ruby-build-system)
(arguments
;; No rakefile, but a test subdirectory
`(#:tests? #f
#:phases
(modify-phases %standard-phases
(add-before 'build 'fix-i18n
(lambda _
(substitute* ".gemspec"
(("~> 0.7") ">= 0.7"))
#t)))))
(propagated-inputs
`(("ruby-addressable" ,ruby-addressable)
("ruby-colorator" ,ruby-colorator)
("ruby-em-websocket" ,ruby-em-websocket)
("ruby-i18n" ,ruby-i18n)
("ruby-jekyll-sass-converter" ,ruby-jekyll-sass-converter)
("ruby-jekyll-watch" ,ruby-jekyll-watch)
("ruby-kramdown" ,ruby-kramdown)
("ruby-liquid" ,ruby-liquid)
("ruby-mercenary" ,ruby-mercenary)
("ruby-pathutil" ,ruby-pathutil)
("ruby-rouge" ,ruby-rouge-2)
("ruby-safe-yaml" ,ruby-safe-yaml)))
(home-page "https://jekyllrb.com/")
(synopsis "Static site generator")
(description "Jekyll is a simple, blog aware, static site generator.")
(license license:expat)))
(define-public ruby-jekyll-paginate-v2
(package
(name "ruby-jekyll-paginate-v2")
(version "2.0.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "jekyll-paginate-v2" version))
(sha256
(base32
"154bfpyml6abxww9868hhyfvxasl8qhsc5zy2q30c7dxaj0igdib"))))
(build-system ruby-build-system)
(propagated-inputs
`(("jekyll" ,jekyll)))
(home-page "https://github.com/sverrirs/jekyll-paginate-v2")
(synopsis "Pagination Generator for Jekyll 3")
(description "The Pagination Generator forms the core of the pagination
logic in Jekyll. It calculates and generates the pagination pages.")
(license license:expat)))

View File

@ -167,128 +167,6 @@ in turn be used to build the final Rust.")
(snippet '(begin (delete-file-recursively "src/llvm") #t))
(patches (map search-patch patches))))
(define rust-1.19
(package
(name "rust")
(version "1.19.0")
(source (rust-source version "0l8c14qsf42rmkqy92ahij4vf356dbyspxcips1aswpvad81y8qm"))
(outputs '("out" "cargo"))
(arguments
`(#:imported-modules ,%cargo-build-system-modules ;for `generate-checksums'
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'set-env
(lambda* (#:key inputs #:allow-other-keys)
;; Disable test for cross compilation support.
(setenv "CFG_DISABLE_CROSS_TESTS" "1")
(setenv "SHELL" (which "sh"))
(setenv "CONFIG_SHELL" (which "sh"))
(setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))
;; guix llvm-3.9.1 package installs only shared libraries
(setenv "LLVM_LINK_SHARED" "1")
#t))
(add-after 'unpack 'patch-tests
(lambda* (#:key inputs #:allow-other-keys)
(let ((bash (assoc-ref inputs "bash")))
(substitute* "src/libstd/process.rs"
;; The newline is intentional.
;; There's a line length "tidy" check in Rust which would
;; fail otherwise.
(("\"/bin/sh\"") (string-append "\n\"" bash "/bin/sh\"")))
(substitute* "src/libstd/net/tcp.rs"
;; There is no network in build environment
(("fn connect_timeout_unroutable")
"#[ignore]\nfn connect_timeout_unroutable"))
;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00222.html>
(substitute* "src/libstd/sys/unix/process/process_common.rs"
(("fn test_process_mask") "#[allow(unused_attributes)]
#[ignore]
fn test_process_mask"))
#t)))
(add-after 'patch-tests 'patch-aarch64-test
(lambda* _
(substitute* "src/librustc_back/dynamic_lib.rs"
;; This test is known to fail on aarch64 and powerpc64le:
;; https://github.com/rust-lang/rust/issues/45410
(("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))
#t))
(add-after 'patch-tests 'use-readelf-for-tests
(lambda* _
;; nm doesn't recognize the file format because of the
;; nonstandard sections used by the Rust compiler, but readelf
;; ignores them.
(substitute* "src/test/run-make/atomic-lock-free/Makefile"
(("\tnm ")
"\treadelf -c "))
#t))
(add-after 'patch-tests 'remove-unsupported-tests
(lambda* _
;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH.
;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>
(delete-file-recursively "src/test/run-make/linker-output-non-utf8")
#t))
(add-after 'patch-source-shebangs 'patch-cargo-checksums
(lambda* _
(substitute* "src/Cargo.lock"
(("(\"checksum .* = )\".*\"" all name)
(string-append name "\"" ,%cargo-reference-hash "\"")))
(for-each
(lambda (filename)
(use-modules (guix build cargo-build-system))
(delete-file filename)
(let* ((dir (dirname filename)))
(display (string-append
"patch-cargo-checksums: generate-checksums for "
dir "\n"))
(generate-checksums dir ,%cargo-reference-project-file)))
(find-files "src/vendor" ".cargo-checksum.json"))
#t))
(replace 'configure
(const #t))
(replace 'check
(const #t))
(replace 'install
(const #t)))))
(build-system gnu-build-system)
(native-inputs
`(("bison" ,bison) ; For the tests
("cmake" ,cmake)
("flex" ,flex) ; For the tests
("gdb" ,gdb) ; For the tests
("git" ,git)
("procps" ,procps) ; For the tests
("python-2" ,python-2)
("rustc-bootstrap" ,rust-bootstrap)
("cargo-bootstrap" ,rust-bootstrap "cargo")
("pkg-config" ,pkg-config) ; For "cargo"
("which" ,which)))
(inputs
`(("jemalloc" ,jemalloc-4.5.0)
("llvm" ,llvm-3.9.1)
("openssl" ,openssl)
("libcurl" ,curl))) ; For "cargo"
;; rustc invokes gcc, so we need to set its search paths accordingly.
;; Note: duplicate its value here to cope with circular dependencies among
;; modules (see <https://bugs.gnu.org/31392>).
(native-search-paths
(list (search-path-specification
(variable "C_INCLUDE_PATH")
(files '("include")))
(search-path-specification
(variable "CPLUS_INCLUDE_PATH")
(files '("include")))
(search-path-specification
(variable "LIBRARY_PATH")
(files '("lib" "lib64")))))
(synopsis "Compiler for the Rust progamming language")
(description "Rust is a systems programming language that provides memory
safety and thread safety guarantees.")
(home-page "https://www.rust-lang.org")
;; Dual licensed.
(license (list license:asl2.0 license:expat))))
(define* (rust-bootstrapped-package base-rust version checksum
#:key (patches '()))
"Bootstrap rust VERSION with source checksum CHECKSUM patched with PATCHES using BASE-RUST."
@ -393,6 +271,233 @@ safety and thread safety guarantees.")
;; Dual licensed.
(license (list license:asl2.0 license:expat)))))
(define rust-1.19
(package
(name "rust")
(version "1.19.0")
(source (rust-source version "0l8c14qsf42rmkqy92ahij4vf356dbyspxcips1aswpvad81y8qm"
#:patches '("rust-1.19-mrustc.patch")))
(outputs '("out" "cargo"))
(arguments
`(#:imported-modules ,%cargo-build-system-modules ;for `generate-checksums'
#:modules ((guix build utils) (ice-9 match) (guix build gnu-build-system))
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'set-env
(lambda* (#:key inputs #:allow-other-keys)
;; Disable test for cross compilation support.
(setenv "CFG_DISABLE_CROSS_TESTS" "1")
(setenv "SHELL" (which "sh"))
(setenv "CONFIG_SHELL" (which "sh"))
(setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))
;; guix llvm-3.9.1 package installs only shared libraries
(setenv "LLVM_LINK_SHARED" "1")
#t))
(add-after 'unpack 'patch-cargo-tomls
(lambda* (#:key inputs outputs #:allow-other-keys)
(substitute* "src/librustc_errors/Cargo.toml"
(("[[]dependencies[]]") "
[dependencies]
term = \"0.4.4\"
"))
(substitute* "src/librustc/Cargo.toml"
(("[[]dependencies[]]") "
[dependencies]
getopts = { path = \"../libgetopts\" }
"))
(substitute* "src/librustdoc/Cargo.toml"
(("[[]dependencies[]]") "
[dependencies]
test = { path = \"../libtest\" }
"))
#t))
(add-after 'unpack 'patch-tests
(lambda* (#:key inputs #:allow-other-keys)
(let ((bash (assoc-ref inputs "bash")))
(substitute* "src/libstd/process.rs"
;; The newline is intentional.
;; There's a line length "tidy" check in Rust which would
;; fail otherwise.
(("\"/bin/sh\"") (string-append "\n\"" bash "/bin/sh\"")))
(substitute* "src/libstd/net/tcp.rs"
;; There is no network in build environment
(("fn connect_timeout_unroutable")
"#[ignore]\nfn connect_timeout_unroutable"))
;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00222.html>
(substitute* "src/libstd/sys/unix/process/process_common.rs"
(("fn test_process_mask") "#[allow(unused_attributes)]
#[ignore]
fn test_process_mask"))
#t)))
(add-after 'patch-tests 'patch-aarch64-test
(lambda* _
(substitute* "src/librustc_back/dynamic_lib.rs"
;; This test is known to fail on aarch64 and powerpc64le:
;; https://github.com/rust-lang/rust/issues/45410
(("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))
#t))
(add-after 'patch-tests 'use-readelf-for-tests
(lambda* _
;; nm doesn't recognize the file format because of the
;; nonstandard sections used by the Rust compiler, but readelf
;; ignores them.
(substitute* "src/test/run-make/atomic-lock-free/Makefile"
(("\tnm ")
"\treadelf -c "))
#t))
(add-after 'patch-tests 'remove-unsupported-tests
(lambda* _
;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH.
;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>
(delete-file-recursively "src/test/run-make/linker-output-non-utf8")
#t))
(add-after 'patch-source-shebangs 'patch-cargo-checksums
(lambda* _
(substitute* "src/Cargo.lock"
(("(\"checksum .* = )\".*\"" all name)
(string-append name "\"" ,%cargo-reference-hash "\"")))
(for-each
(lambda (filename)
(use-modules (guix build cargo-build-system))
(delete-file filename)
(let* ((dir (dirname filename)))
(display (string-append
"patch-cargo-checksums: generate-checksums for "
dir "\n"))
(generate-checksums dir ,%cargo-reference-project-file)))
(find-files "src/vendor" ".cargo-checksum.json"))
#t))
;; This phase is overridden by newer versions.
(replace 'configure
(const #t))
;; This phase is overridden by newer versions.
(replace 'build
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((rustc-bootstrap (assoc-ref inputs "rustc-bootstrap")))
(setenv "CFG_COMPILER_HOST_TRIPLE"
,(nix-system->gnu-triplet (%current-system)))
(setenv "CFG_RELEASE" "")
(setenv "CFG_RELEASE_CHANNEL" "stable")
(setenv "CFG_LIBDIR_RELATIVE" "lib")
(setenv "CFG_VERSION" "1.19.0-stable-mrustc")
; bad: (setenv "CFG_PREFIX" "mrustc") ; FIXME output path.
(mkdir-p "output")
(invoke (string-append rustc-bootstrap "/tools/bin/minicargo")
"src/rustc" "--vendor-dir" "src/vendor"
"--output-dir" "output/rustc-build"
"-L" (string-append rustc-bootstrap "/lib/mrust")
"-j" "1")
(install-file "output/rustc-build/rustc" "output") ; FIXME: Remove?
(setenv "CFG_COMPILER_HOST_TRIPLE" #f)
(setenv "CFG_RELEASE" #f)
(setenv "CFG_RELEASE_CHANNEL" #f)
(setenv "CFG_VERSION" #f)
(setenv "CFG_PREFIX" #f)
(setenv "CFG_LIBDIR_RELATIVE" #f)
(invoke (string-append rustc-bootstrap "/tools/bin/minicargo")
"src/tools/cargo" "--vendor-dir" "src/vendor"
"--output-dir" "output/cargo-build"
"-L" "output/"
"-L" (string-append rustc-bootstrap "/lib/mrust")
"-j" "1")
;; Now use the newly-built rustc to build the libraries.
;; One day that could be replaced by:
;; (invoke "output/cargo-build/cargo" "build"
;; "--manifest-path" "src/bootstrap/Cargo.toml"
;; "--verbose") ; "--locked" "--frozen"
;; but right now, Cargo has problems with libstd's circular
;; dependencies.
(mkdir-p "output/target-libs")
(for-each ((@ (ice-9 match) match-lambda)
((name . flags)
(write name)
(newline)
(apply invoke
"output/rustc-build/rustc"
"-C" (string-append "linker="
(getenv "CC"))
"-L" "output/target-libs"
(string-append "src/" name "/lib.rs")
"-o"
(string-append "output/target-libs/"
(car (string-split name #\/))
".rlib")
flags)))
'(("libcore")
("libstd_unicode")
("liballoc")
("libcollections")
("librand")
("liblibc/src" "--cfg" "stdbuild")
("libunwind" "-l" "gcc_s")
("libcompiler_builtins")
("liballoc_system")
("libpanic_unwind")
;; Uses "cc" to link.
("libstd" "-l" "dl" "-l" "rt" "-l" "pthread")
("libarena")))
#t)))
;; This phase is overridden by newer versions.
(replace 'check
(const #t))
;; This phase is overridden by newer versions.
(replace 'install
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(target-system ,(or (%current-target-system)
(nix-system->gnu-triplet
(%current-system))))
(out-libs (string-append out "/lib/rustlib/"
target-system "/lib")))
;(setenv "CFG_PREFIX" out)
(mkdir-p out-libs)
(copy-recursively "output/target-libs" out-libs)
(install-file "output/rustc-build/rustc"
(string-append out "/bin"))
(install-file "output/cargo-build/cargo"
(string-append (assoc-ref outputs "cargo")
"/bin")))
#t)))))
(build-system gnu-build-system)
(native-inputs
`(("bison" ,bison) ; For the tests
("cmake" ,cmake)
("flex" ,flex) ; For the tests
("gdb" ,gdb) ; For the tests
("git" ,git)
("procps" ,procps) ; For the tests
("python-2" ,python-2)
("rustc-bootstrap" ,mrustc)
("cargo-bootstrap" ,mrustc "cargo")
("pkg-config" ,pkg-config) ; For "cargo"
("which" ,which)))
(inputs
`(("jemalloc" ,jemalloc-4.5.0)
("llvm" ,llvm-3.9.1)
("openssl" ,openssl)
("libcurl" ,curl))) ; For "cargo"
;; rustc invokes gcc, so we need to set its search paths accordingly.
;; Note: duplicate its value here to cope with circular dependencies among
;; modules (see <https://bugs.gnu.org/31392>).
(native-search-paths
(list (search-path-specification
(variable "C_INCLUDE_PATH")
(files '("include")))
(search-path-specification
(variable "CPLUS_INCLUDE_PATH")
(files '("include")))
(search-path-specification
(variable "LIBRARY_PATH")
(files '("lib" "lib64")))))
(synopsis "Compiler for the Rust progamming language")
(description "Rust is a systems programming language that provides memory
safety and thread safety guarantees.")
(home-page "https://www.rust-lang.org")
;; Dual licensed.
(license (list license:asl2.0 license:expat))))
(define-public rust-1.23
(package
(inherit rust-1.19)
@ -400,6 +505,18 @@ safety and thread safety guarantees.")
(version "1.23.0")
(source (rust-source version "14fb8vhjzsxlbi6yrn1r6fl5dlbdd1m92dn5zj5gmzfwf4w9ar3l"))
(outputs '("out" "doc" "cargo"))
(native-inputs
`(("bison" ,bison) ; For the tests
("cmake" ,cmake)
("flex" ,flex) ; For the tests
("gdb" ,gdb) ; For the tests
("git" ,git)
("procps" ,procps) ; For the tests
("python-2" ,python-2)
("rustc-bootstrap" ,rust-bootstrap)
("cargo-bootstrap" ,rust-bootstrap "cargo")
("pkg-config" ,pkg-config) ; For "cargo"
("which" ,which)))
(arguments
(substitute-keyword-arguments (package-arguments rust-1.19)
((#:phases phases)
@ -410,6 +527,8 @@ safety and thread safety guarantees.")
(substitute* "src/binaryen/CMakeLists.txt"
(("ADD_COMPILE_FLAG\\(\\\"-march=native\\\"\\)") ""))
#t))
;; TODO: Revisit this and find out whether that's needed after all.
(delete 'patch-cargo-tomls)
(add-after 'patch-tests 'patch-cargo-tests
(lambda _
(substitute* "src/tools/cargo/tests/build.rs"

View File

@ -150,14 +150,14 @@ anywhere.")
(define-public samba
(package
(name "samba")
(version "4.8.4")
(version "4.8.5")
(source (origin
(method url-fetch)
(uri (string-append "https://download.samba.org/pub/samba/stable/"
"samba-" version ".tar.gz"))
(sha256
(base32
"01jlk8xlawfp3yyhi5migcd1fy7dkavbh56in444m281kqa4s17m"))))
"0mailvhjsma19k6b6zjl02z9n2hbbyfybvicjfw2hh9d4sqyd3p5"))))
(build-system gnu-build-system)
(arguments
`(#:phases
@ -341,14 +341,14 @@ many event types, including timers, signals, and the classic file descriptor eve
(define-public ldb
(package
(name "ldb")
(version "1.3.3")
(version "1.3.6")
(source (origin
(method url-fetch)
(uri (string-append "https://www.samba.org/ftp/ldb/ldb-"
version ".tar.gz"))
(sha256
(base32
"14gsrm7dvyjpbpnc60z75j6fz2p187abm2h353lq95kx2bv70c1b"))
"16lkz3gyvsm9als1wyimsl573hclr72xy6454mshwjanncs33lji"))
(modules '((guix build utils)))
(snippet
'(begin
@ -417,7 +417,8 @@ key-value pair databases and a real LDAP database.")
(("/usr/include/crypt\\.h")
(string-append libc "/include/crypt.h"))
(("/usr/include/pcap-bpf.h")
(string-append libpcap "/include/pcap-bpf.h")))))))))
(string-append libpcap "/include/pcap-bpf.h")))
#t))))))
(inputs
`(("libpcap" ,libpcap)))
(synopsis "Implementation of the Point-to-Point Protocol")

View File

@ -427,6 +427,7 @@ TCP, not the SSH protocol.")
(uri (string-append
"https://matt.ucc.asn.au/" name "/releases/"
name "-" version ".tar.bz2"))
(patches (search-patches "dropbear-CVE-2018-15599.patch"))
(sha256
(base32
"0rgavbzw7jrs5wslxm0dnwx2m409yzxd9hazd92r7kx8xikr3yzj"))))

View File

@ -2455,13 +2455,13 @@ disk (or a connection).")
(define-public r-plotrix
(package
(name "r-plotrix")
(version "3.7-2")
(version "3.7-3")
(source (origin
(method url-fetch)
(uri (cran-uri "plotrix" version))
(sha256
(base32
"0hx3xv94gzlyy7ny5k4mzs7w1798h1zka175m5bkzc524493cm88"))))
"18702y1gbyis56mh219z5ww0nrkh6qx7bgqv3khyn80g2giwk7cf"))))
(build-system r-build-system)
(home-page "https://cran.r-project.org/web/packages/plotrix")
(synopsis "Various plotting functions")
@ -5172,14 +5172,14 @@ Companion to Applied Regression, Third Edition, Sage.")
(define-public r-car
(package
(name "r-car")
(version "3.0-1")
(version "3.0-2")
(source
(origin
(method url-fetch)
(uri (cran-uri "car" version))
(sha256
(base32
"0rdk7hgahs38j6yv861i31wpmsmyvksxcv8jarvvcjl60whizhb2"))))
"0l3wyc9ia0ypcbap2p39slazfpbl84mjzydqvpsywrzdiyxajnfz"))))
(build-system r-build-system)
(propagated-inputs
`(("r-abind" ,r-abind)

View File

@ -122,7 +122,7 @@ in intelligent transportation networks.")
(define-public p11-kit
(package
(name "p11-kit")
(version "0.23.13")
(version "0.23.14")
(source
(origin
(method url-fetch)
@ -130,7 +130,7 @@ in intelligent transportation networks.")
"download/" version "/p11-kit-" version ".tar.gz"))
(sha256
(base32
"1w92k6p4bhg8p24igfb6ifc6vixr2zdjh3x6gjhsphy778z40rda"))))
"0w0dkq9388grbbn4bv2p55vy1j51f7nd9hzlc9gz4fbm4dnzmf8w"))))
(build-system gnu-build-system)
(native-inputs
`(("pkg-config" ,pkg-config)))

View File

@ -2217,7 +2217,8 @@ making @dfn{screencasts}.")
("jack" ,jack-1)
("libxi" ,libxi)
("pulseaudio" ,pulseaudio)
("qt" ,qt)))
("qtbase" ,qtbase)
("qtx11extras" ,qtx11extras)))
(native-inputs `(("pkg-config" ,pkg-config)))
(arguments
`(#:configure-flags

View File

@ -6,7 +6,7 @@
;;; Copyright © 2015, 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2018 Raoul Jean Pierre Bonnal <ilpuccio.febo@gmail.com>
;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
;;; Copyright © 2015, 2016, 2017 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2015, 2016, 2017, 2018 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
;;; Copyright © 2016 Jelle Licht <jlicht@fsfe.org>
@ -4275,7 +4275,7 @@ tools they trust (e.g. wget).")
(define netsurf-buildsystem
(package
(name "netsurf-buildsystem")
(version "1.6")
(version "1.7")
(source
(origin
(method url-fetch)
@ -4283,7 +4283,7 @@ tools they trust (e.g. wget).")
"buildsystem-" version ".tar.gz"))
(sha256
(base32
"0p5k708lcq8dip9xxck6hml32bjrbyipprm22bbsvdnsc0pqm71x"))))
"1q23aaycv35ma5471l1gxib8lfq2s9kprrkaqgfc926d04rlbmhw"))))
(build-system gnu-build-system)
(inputs `(("perl" ,perl)))
(arguments
@ -4314,7 +4314,7 @@ libraries.")
(define-public libparserutils
(package
(name "libparserutils")
(version "0.2.3")
(version "0.2.4")
(source
(origin
(method url-fetch)
@ -4322,7 +4322,7 @@ libraries.")
name "-" version "-src.tar.gz"))
(sha256
(base32
"01gzlsabgl6x0icd8758d9jqs8rrf9574bdkjainn04w3fs3znf5"))))
"1n2794y2l0c8nv8z2pxwfnbn882987ifmxjv60zdxkhcndhswarj"))))
(build-system gnu-build-system)
(native-inputs
`(("netsurf-buildsystem" ,netsurf-buildsystem)
@ -4339,7 +4339,7 @@ C. It is developed as part of the NetSurf project.")
(define-public hubbub
(package
(name "hubbub")
(version "0.3.4")
(version "0.3.5")
(source
(origin
(method url-fetch)
@ -4347,7 +4347,7 @@ C. It is developed as part of the NetSurf project.")
"lib" name "-" version "-src.tar.gz"))
(sha256
(base32
"1shi4hv8drn9zy8f2f6yhnz2dqnpg5jkybvqhzggfjx1q35fbxz3"))
"13yq1k96a7972x4r71i9bcsz9yiglj0yx7lj0ziq5r94w5my70ma"))
(patches (search-patches "hubbub-sort-entities.patch"))))
(build-system gnu-build-system)
(native-inputs
@ -4453,7 +4453,7 @@ commenting.")
(define-public libwapcaplet
(package
(name "libwapcaplet")
(version "0.4.0")
(version "0.4.1")
(source
(origin
(method url-fetch)
@ -4461,7 +4461,7 @@ commenting.")
name "-" version "-src.tar.gz"))
(sha256
(base32
"15yr0pl6qa6biy36qkmd949ydbjzpqiaccpx3sprh4jknabsk1vv"))))
"134pljlm8kby1yy49826f0ixnpig8iqak6xpyl3aivagnsjnxzy8"))))
(build-system gnu-build-system)
(native-inputs
`(("netsurf-buildsystem" ,netsurf-buildsystem)
@ -4479,7 +4479,7 @@ developed as part of the Netsurf project.")
(define-public libcss
(package
(name "libcss")
(version "0.7.0")
(version "0.8.0")
(source
(origin
(method url-fetch)
@ -4487,7 +4487,7 @@ developed as part of the Netsurf project.")
name "-" version "-src.tar.gz"))
(sha256
(base32
"16mns3h8vj7iw8myvgnw58q84irvbjlvfkxh8mdw6fbkjvaa7cnz"))))
"0pxdqbxn6brj03nv57bsvac5n70k4scn3r5msaw0jgn2k06lk81m"))))
(build-system gnu-build-system)
(native-inputs
`(("netsurf-buildsystem" ,netsurf-buildsystem)
@ -4507,7 +4507,7 @@ written in C. It is developed as part of the NetSurf project.")
(define-public libdom
(package
(name "libdom")
(version "0.3.2")
(version "0.3.3")
(source
(origin
(method url-fetch)
@ -4515,7 +4515,7 @@ written in C. It is developed as part of the NetSurf project.")
name "-" version "-src.tar.gz"))
(sha256
(base32
"1zb7x2qwm6p11lph6j2vcyp4a0a8i1klkqilnk5vb4qmlzzpcv7i"))))
"1919757mdl3gii2pl6kzm8b1cal0h06r5nqd2y0kny6hc5yrhsp0"))))
(build-system gnu-build-system)
(native-inputs
`(("netsurf-buildsystem" ,netsurf-buildsystem)
@ -4543,7 +4543,7 @@ developed as part of the NetSurf project.")
(define-public libsvgtiny
(package
(name "libsvgtiny")
(version "0.1.6")
(version "0.1.7")
(source
(origin
(method url-fetch)
@ -4551,7 +4551,7 @@ developed as part of the NetSurf project.")
name "-" version "-src.tar.gz"))
(sha256
(base32
"12ppy2r7m21ykrjgbf067cgi6dn48fkj7i4b7m64xl4dc13y0ah6"))))
"10bpkmvfpydj74im3r6kqm9vnvgib6afy0alx71q5n0w5yawy39c"))))
(build-system gnu-build-system)
(native-inputs
`(("netsurf-buildsystem" ,netsurf-buildsystem)
@ -4574,7 +4574,7 @@ project.")
(define-public libnsbmp
(package
(name "libnsbmp")
(version "0.1.4")
(version "0.1.5")
(source
(origin
(method url-fetch)
@ -4582,7 +4582,7 @@ project.")
name "-" version "-src.tar.gz"))
(sha256
(base32
"0y4a0gn4l6lq4z9183wix0mdsgalqyw24k19k8jr8sz4h3lb7jrb"))))
"0lib2m07d1i0k80m4blkwnj0g7rha4jbm5vrgd0wwbkyfa0hvk35"))))
(build-system gnu-build-system)
(native-inputs
`(("netsurf-buildsystem" ,netsurf-buildsystem)))
@ -4597,7 +4597,7 @@ written in C. It is developed as part of the NetSurf project.")
(define-public libnsgif
(package
(name "libnsgif")
(version "0.2.0")
(version "0.2.1")
(source
(origin
(method url-fetch)
@ -4605,7 +4605,7 @@ written in C. It is developed as part of the NetSurf project.")
name "-" version "-src.tar.gz"))
(sha256
(base32
"1phwf0m24m6nd7096fw14hanl4f8gr9bcppi834lbik04agxk38a"))))
"0jwshypgmx16xlsbx3d8njk8a5khazlplca5mxd3rdbhrlsabbly"))))
(build-system gnu-build-system)
(native-inputs
`(("netsurf-buildsystem" ,netsurf-buildsystem)))
@ -4620,7 +4620,7 @@ C. It is developed as part of the NetSurf project.")
(define-public libnsutils
(package
(name "libnsutils")
(version "0.0.3")
(version "0.0.5")
(source
(origin
(method url-fetch)
@ -4628,7 +4628,7 @@ C. It is developed as part of the NetSurf project.")
name "-" version "-src.tar.gz"))
(sha256
(base32
"0wrxn4rcn7xrfnkmf60jafqn3n1kicgsdpnakd821q56bmqvzf0m"))))
"09w1rixps1iiq6wirjwxmd6h87llvjzvw565rahjb3rlyhcplfqf"))))
(build-system gnu-build-system)
(native-inputs
`(("netsurf-buildsystem" ,netsurf-buildsystem)))
@ -4643,7 +4643,7 @@ developed as part of the NetSurf project.")
(define-public libnspsl
(package
(name "libnspsl")
(version "0.1.2")
(version "0.1.3")
(source
(origin
(method url-fetch)
@ -4651,7 +4651,7 @@ developed as part of the NetSurf project.")
name "-" version "-src.tar.gz"))
(sha256
(base32
"0wim5hwzwrfrvvap096whf79m2mnfivbqhqlh03ci9d89xb1w0y9"))))
"1rsk1k2a495axxgv8060s0p1phhhcxrv75252kllbkvr8id5kqld"))))
(build-system gnu-build-system)
(native-inputs
`(("netsurf-buildsystem" ,netsurf-buildsystem)))
@ -4666,7 +4666,7 @@ Public Suffix List. It is developed as part of the NetSurf project.")
(define-public nsgenbind
(package
(name "nsgenbind")
(version "0.5")
(version "0.6")
(source
(origin
(method url-fetch)
@ -4674,7 +4674,7 @@ Public Suffix List. It is developed as part of the NetSurf project.")
name "-" version "-src.tar.gz"))
(sha256
(base32
"1iwjpdaan0njlhb9ir6a2q5vpxfmkqfldkvnqszqdz50b44vd1jv"))))
"0v1cb1rz5fix9ql31nzmglj7sybya6d12b2fkaypm1avcca59xwj"))))
(build-system gnu-build-system)
(native-inputs
`(("netsurf-buildsystem" ,netsurf-buildsystem)
@ -4694,7 +4694,7 @@ w3c webidl files and a binding configuration file.")
(define-public netsurf
(package
(name "netsurf")
(version "3.7")
(version "3.8")
(source
(origin
(method url-fetch)
@ -4702,10 +4702,11 @@ w3c webidl files and a binding configuration file.")
"releases/source/netsurf-" version "-src.tar.gz"))
(sha256
(base32
"05kynfzzwd4fc03vbqdjpghh5xnk2yrh43w7vikak89vla30mhpg"))
"0hjm1h4m1i913y4mhkl7yqdifn8k70fwi58zdh6faypawzryc3m0"))
(patches (search-patches "netsurf-system-utf8proc.patch"
"netsurf-y2038-tests.patch"
"netsurf-longer-test-timeout.patch"))))
"netsurf-longer-test-timeout.patch"
"netsurf-message-timestamp.patch"))))
(build-system glib-or-gtk-build-system)
(native-inputs
`(("netsurf-buildsystem" ,netsurf-buildsystem)

View File

@ -225,7 +225,7 @@ integrate Windows applications into your desktop.")
(define-public wine-staging-patchset-data
(package
(name "wine-staging-patchset-data")
(version "3.14")
(version "3.15")
(source
(origin
(method git-fetch)
@ -235,7 +235,7 @@ integrate Windows applications into your desktop.")
(file-name (git-file-name name version))
(sha256
(base32
"0h6gck0p92hin0m13q1hnlfnqs4vy474w66ppinvqms2zn3vibgi"))))
"1rgbx4qnxaarkq5n8nvj57q0rhxcqbwm5897ws962fgxh6zymg9n"))))
(build-system trivial-build-system)
(native-inputs
`(("bash" ,bash)
@ -281,7 +281,7 @@ integrate Windows applications into your desktop.")
(file-name (string-append name "-" version ".tar.xz"))
(sha256
(base32
"01dhn3a6k3dwnrbz4bxvszhh5sxwy6s89y459g805hjmq8s6d2a7"))))
"07mmd8r70ciqrxzdg2m2mg34kcnb43dk9nw1ljm8jbcznsawv8ic"))))
(inputs `(("autoconf" ,autoconf) ; for autoreconf
("gtk+" ,gtk+)
("libva" ,libva)

View File

@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -45,7 +46,10 @@
zone-entry
dnsmasq-service-type
dnsmasq-configuration))
dnsmasq-configuration
ddclient-service-type
ddclient-configuration))
;;;
;;; Knot DNS.
@ -670,3 +674,165 @@
(compose list dnsmasq-shepherd-service))))
(default-value (dnsmasq-configuration))
(description "Run the dnsmasq DNS server.")))
;;;
;;; ddclient
;;;
(define (uglify-field-name field-name)
(string-delete #\? (symbol->string field-name)))
(define (serialize-field field-name val)
(format #t "~a=~a\n" (uglify-field-name field-name) val))
(define (serialize-boolean field-name val)
(serialize-field field-name (if val "yes" "no")))
(define (serialize-integer field-name val)
(serialize-field field-name (number->string val)))
(define (serialize-string field-name val)
(if (and (string? val) (string=? val ""))
""
(serialize-field field-name val)))
(define (serialize-list field-name val)
(if (null? val) "" (serialize-field field-name (string-join val))))
(define (serialize-extra-options extra-options)
(string-join extra-options "\n" 'suffix))
(define-configuration ddclient-configuration
(ddclient
(package ddclient)
"The ddclient package.")
(daemon
(integer 300)
"The period after which ddclient will retry to check IP and domain name.")
(syslog
(boolean #t)
"Use syslog for the output.")
(mail
(string "root")
"Mail to user.")
(mail-failure
(string "root")
"Mail failed update to user.")
(pid
(string "/var/run/ddclient/ddclient.pid")
"The ddclient PID file.")
(ssl
(boolean #t)
"Enable SSL support.")
(user
(string "ddclient")
"Specifies the user name or ID that is used when running ddclient
program.")
(group
(string "ddclient")
"Group of the user who will run the ddclient program.")
(secret-file
(string "/etc/ddclient/secrets.conf")
"Secret file which will be appended to @file{ddclient.conf} file. This
file contains credentials for use by ddclient. You are expected to create it
manually.")
(extra-options
(list '())
"Extra options will be appended to @file{ddclient.conf} file."))
(define (ddclient-account config)
"Return the user accounts and user groups for CONFIG."
(let ((ddclient-user (ddclient-configuration-user config))
(ddclient-group (ddclient-configuration-group config)))
(list (user-group
(name ddclient-group)
(system? #t))
(user-account
(name ddclient-user)
(system? #t)
(group ddclient-group)
(comment "ddclientd privilege separation user")
(home-directory (string-append "/var/run/" ddclient-user))))))
(define (ddclient-activation config)
"Return the activation GEXP for CONFIG."
(with-imported-modules '((guix build utils)
(ice-9 rdelim))
#~(begin
(use-modules (guix build utils)
(ice-9 rdelim))
(let ((ddclient-user
#$(passwd:uid (getpw (ddclient-configuration-user config))))
(ddclient-group
#$(passwd:gid (getpw (ddclient-configuration-group config))))
(ddclient-secret-file
#$(ddclient-configuration-secret-file config)))
;; 'ddclient' complains about ddclient.conf file permissions, which
;; rules out /gnu/store. Thus we copy the ddclient.conf to /etc.
(for-each (lambda (dir)
(mkdir-p dir)
(chmod dir #o700)
(chown dir ddclient-user ddclient-group))
'("/var/cache/ddclient" "/var/run/ddclient"
"/etc/ddclient"))
(with-output-to-file "/etc/ddclient/ddclient.conf"
(lambda ()
(display
(string-append
"# Generated by 'ddclient-service'.\n\n"
#$(with-output-to-string
(lambda ()
(serialize-configuration config
ddclient-configuration-fields)))
(if (string-null? ddclient-secret-file)
""
(format #f "\n\n# Appended from '~a'.\n\n~a"
ddclient-secret-file
(with-input-from-file ddclient-secret-file
read-string)))))))
(chmod "/etc/ddclient/ddclient.conf" #o600)
(chown "/etc/ddclient/ddclient.conf"
ddclient-user ddclient-group)))))
(define (ddclient-shepherd-service config)
"Return a <shepherd-service> for ddclient with CONFIG."
(let ((ddclient (ddclient-configuration-ddclient config))
(ddclient-pid (ddclient-configuration-pid config))
(ddclient-user (ddclient-configuration-user config))
(ddclient-group (ddclient-configuration-group config)))
(list (shepherd-service
(provision '(ddclient))
(documentation "Run ddclient daemon.")
(start #~(make-forkexec-constructor
(list #$(file-append ddclient "/bin/ddclient")
"-foreground"
"-file" "/etc/ddclient/ddclient.conf")
#:pid-file #$ddclient-pid
#:environment-variables
(list "SSL_CERT_DIR=/run/current-system/profile\
/etc/ssl/certs"
"SSL_CERT_FILE=/run/current-system/profile\
/etc/ssl/certs/ca-certificates.crt")
#:user #$ddclient-user
#:group #$ddclient-group))
(stop #~(make-kill-destructor))))))
(define ddclient-service-type
(service-type
(name 'ddclient)
(extensions
(list (service-extension account-service-type
ddclient-account)
(service-extension shepherd-root-service-type
ddclient-shepherd-service)
(service-extension activation-service-type
ddclient-activation)))
(default-value (ddclient-configuration))
(description "Configure address updating utility for dynamic DNS services,
ddclient.")))
(define (generate-ddclient-documentation)
(generate-documentation
`((ddclient-configuration ,ddclient-configuration-fields))
'ddclient-configuration))

View File

@ -7,6 +7,7 @@
;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -576,7 +577,9 @@ demand.")))
(config-file tor-configuration-config-file
(default (plain-file "empty" "")))
(hidden-services tor-configuration-hidden-services
(default '())))
(default '()))
(socks-socket-type tor-configuration-socks-socket-type ; 'tcp or 'unix
(default 'tcp)))
(define %tor-accounts
;; User account and groups for Tor.
@ -598,7 +601,7 @@ demand.")))
(define (tor-configuration->torrc config)
"Return a 'torrc' file for CONFIG."
(match config
(($ <tor-configuration> tor config-file services)
(($ <tor-configuration> tor config-file services socks-socket-type)
(computed-file
"torrc"
(with-imported-modules '((guix build utils))
@ -612,7 +615,12 @@ demand.")))
### These lines were generated from your system configuration:
User tor
DataDirectory /var/lib/tor
PidFile /var/run/tor/tor.pid
Log notice syslog\n" port)
(when (eq? 'unix '#$socks-socket-type)
(display "\
SocksPort unix:/var/run/tor/socks-sock
UnixSocksGroupWritable 1\n" port))
(for-each (match-lambda
((service (ports hosts) ...)
@ -639,7 +647,7 @@ HiddenServicePort ~a ~a~%"
#t))))))))
(define (tor-shepherd-service config)
"Return a <shepherd-service> running TOR."
"Return a <shepherd-service> running Tor."
(match config
(($ <tor-configuration> tor)
(let ((torrc (tor-configuration->torrc config)))
@ -665,12 +673,17 @@ HiddenServicePort ~a ~a~%"
(writable? #t))
(file-system-mapping
(source "/dev/log") ;for syslog
(target source)))))
(target source))
(file-system-mapping
(source "/var/run/tor")
(target source)
(writable? #t)))
#:pid-file "/var/run/tor/tor.pid"))
(stop #~(make-kill-destructor))
(documentation "Run the Tor anonymous network overlay."))))))))
(define (tor-hidden-service-activation config)
"Return the activation gexp for SERVICES, a list of hidden services."
(define (tor-activation config)
"Set up directories for Tor and its hidden services, if any."
#~(begin
(use-modules (guix build utils))
@ -686,6 +699,15 @@ HiddenServicePort ~a ~a~%"
;; The daemon bails out if we give wider permissions.
(chmod directory #o700)))
;; Allow Tor to write its PID file.
(mkdir-p "/var/run/tor")
(chown "/var/run/tor" (passwd:uid %user) (passwd:gid %user))
;; Set the group permissions to rw so that if the system administrator
;; has specified UnixSocksGroupWritable=1 in their torrc file, members
;; of the "tor" group will be able to use the SOCKS socket.
(chmod "/var/run/tor" #o750)
;; Allow Tor to access the hidden services' directories.
(mkdir-p "/var/lib/tor")
(chown "/var/lib/tor" (passwd:uid %user) (passwd:gid %user))
(chmod "/var/lib/tor" #o700)
@ -705,7 +727,7 @@ HiddenServicePort ~a ~a~%"
(service-extension account-service-type
(const %tor-accounts))
(service-extension activation-service-type
tor-hidden-service-activation)))
tor-activation)))
;; This can be extended with hidden services.
(compose concatenate)

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 David Craven <david@craven.ch>
;;; Copyright © 2016 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
@ -319,6 +319,10 @@ The other options should be self-descriptive."
(accepted-environment openssh-configuration-accepted-environment
(default '()))
;; symbol
(log-level openssh-configuration-log-level
(default 'info))
;; list of user-name/file-like tuples
(authorized-keys openssh-authorized-keys
(default '()))
@ -451,6 +455,10 @@ of user-name/file-like tuples."
(format port "PrintLastLog ~a\n"
#$(if (openssh-configuration-print-last-log? config)
"yes" "no"))
(format port "LogLevel ~a\n"
#$(string-upcase
(symbol->string
(openssh-configuration-log-level config))))
;; Add '/etc/authorized_keys.d/%u', which we populate.
(format port "AuthorizedKeysFile \

View File

@ -599,19 +599,33 @@ of index files."
<nginx-configuration>
(nginx file run-directory)
(let* ((nginx-binary (file-append nginx "/sbin/nginx"))
(pid-file (in-vicinity run-directory "pid"))
(nginx-action
(lambda args
#~(lambda _
(invoke #$nginx-binary "-c"
#$(or file
(default-nginx-config config))
#$@args)))))
#$@args)
(match '#$args
(("-s" . _) #t)
(_
(let loop ((duration 0))
;; https://bugs.launchpad.net/ubuntu/+source/nginx/+bug/1581864/comments/7
(sleep duration)
(if (file-exists? #$pid-file)
(let ((pid (call-with-input-file #$pid-file read)))
;; it could be #<eof>
(if (integer? pid) pid (loop 1)))
(loop 1)))))))))
;; TODO: Add 'reload' action.
(list (shepherd-service
(provision '(nginx))
(documentation "Run the nginx daemon.")
(requirement '(user-processes loopback))
(modules `((ice-9 match)
,@%default-modules))
(start (nginx-action "-p" run-directory))
(stop (nginx-action "-s" "stop")))))))

View File

@ -22,6 +22,7 @@
#:use-module (guix gexp)
#:use-module (guix utils)
#:use-module (guix records)
#:use-module ((guix ui) #:select (warn-about-load-error))
#:use-module (gnu bootloader)
#:use-module (gnu bootloader grub)
#:use-module (gnu system)
@ -258,7 +259,8 @@ the system under test."
(define (test-modules)
"Return the list of modules that define system tests."
(scheme-modules (dirname (search-path %load-path "guix.scm"))
"gnu/tests"))
"gnu/tests"
#:warn warn-about-load-error))
(define (fold-system-tests proc seed)
"Invoke PROC on each system test, passing it the test and the previous

View File

@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -30,7 +31,7 @@
#:use-module (gnu packages bash)
#:use-module (gnu packages networking)
#:use-module (gnu services shepherd)
#:export (%test-inetd %test-openvswitch %test-dhcpd))
#:export (%test-inetd %test-openvswitch %test-dhcpd %test-tor))
(define %inetd-os
;; Operating system with 2 inetd services.
@ -339,3 +340,97 @@ subnet 192.168.1.0 netmask 255.255.255.0 {
(name "dhcpd")
(description "Test a running DHCP daemon configuration.")
(value (run-dhcpd-test))))
;;;
;;; Services related to Tor
;;;
(define %tor-os
(simple-operating-system
(tor-service)))
(define %tor-os/unix-socks-socket
(simple-operating-system
(service tor-service-type
(tor-configuration
(socks-socket-type 'unix)))))
(define (run-tor-test)
(define os
(marionette-operating-system %tor-os
#:imported-modules '((gnu services herd))
#:requirements '(tor)))
(define os/unix-socks-socket
(marionette-operating-system %tor-os/unix-socks-socket
#:imported-modules '((gnu services herd))
#:requirements '(tor)))
(define test
(with-imported-modules '((gnu build marionette))
#~(begin
(use-modules (gnu build marionette)
(ice-9 popen)
(ice-9 rdelim)
(srfi srfi-64))
(define marionette
(make-marionette (list #$(virtual-machine os))))
(define (tor-is-alive? marionette)
(marionette-eval
'(begin
(use-modules (gnu services herd)
(srfi srfi-1))
(live-service-running
(find (lambda (live)
(memq 'tor
(live-service-provision live)))
(current-services))))
marionette))
(mkdir #$output)
(chdir #$output)
(test-begin "tor")
;; Test the usual Tor service.
(test-assert "tor is alive"
(tor-is-alive? marionette))
(test-assert "tor is listening"
(let ((default-port 9050))
(wait-for-tcp-port default-port marionette)))
;; Don't run two VMs at once.
(marionette-control "quit" marionette)
;; Test the Tor service using a SOCKS socket.
(let* ((socket-directory "/tmp/more-sockets")
(_ (mkdir socket-directory))
(marionette/unix-socks-socket
(make-marionette
(list #$(virtual-machine os/unix-socks-socket))
;; We can't use the same socket directory as the first
;; marionette.
#:socket-directory socket-directory)))
(test-assert "tor is alive, even when using a SOCKS socket"
(tor-is-alive? marionette/unix-socks-socket))
(test-assert "tor is listening, even when using a SOCKS socket"
(wait-for-unix-socket "/var/run/tor/socks-sock"
marionette/unix-socks-socket)))
(test-end)
(exit (= (test-runner-fail-count (test-runner-current)) 0)))))
(gexp->derivation "tor-test" test))
(define %test-tor
(system-test
(name "tor")
(description "Test a running Tor daemon configuration.")
(value (run-tor-test))))

292
guix/channels.scm Normal file
View File

@ -0,0 +1,292 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (guix channels)
#:use-module (guix git)
#:use-module (guix records)
#:use-module (guix gexp)
#:use-module (guix discovery)
#:use-module (guix monads)
#:use-module (guix profiles)
#:use-module (guix derivations)
#:use-module (guix store)
#:use-module (guix i18n)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-9)
#:use-module (srfi srfi-11)
#:autoload (guix self) (whole-package)
#:use-module (ice-9 match)
#:export (channel
channel?
channel-name
channel-url
channel-branch
channel-commit
channel-location
%default-channels
channel-instance?
channel-instance-channel
channel-instance-commit
channel-instance-checkout
latest-channel-instances
channel-instance-derivations
latest-channel-derivations
channel-instances->manifest))
;;; Commentary:
;;;
;;; This module implements "channels." A channel is usually a source of
;;; package definitions. There's a special channel, the 'guix' channel, that
;;; provides all of Guix, including its commands and its documentation.
;;; User-defined channels are expected to typically provide a bunch of .scm
;;; files meant to be added to the '%package-search-path'.
;;;
;;; This module provides tools to fetch and update channels from a Git
;;; repository and to build them.
;;;
;;; Code:
(define-record-type* <channel> channel make-channel
channel?
(name channel-name)
(url channel-url)
(branch channel-branch (default "master"))
(commit channel-commit (default #f))
(location channel-location
(default (current-source-location)) (innate)))
;; TODO: Add a way to express dependencies among channels.
(define %default-channels
;; Default list of channels.
(list (channel
(name 'guix)
(branch "origin/master")
(url "https://git.savannah.gnu.org/git/guix.git"))))
(define (guix-channel? channel)
"Return true if CHANNEL is the 'guix' channel."
(eq? 'guix (channel-name channel)))
(define-record-type <channel-instance>
(channel-instance channel commit checkout)
channel-instance?
(channel channel-instance-channel)
(commit channel-instance-commit)
(checkout channel-instance-checkout))
(define (channel-reference channel)
"Return the \"reference\" for CHANNEL, an sexp suitable for
'latest-repository-commit'."
(match (channel-commit channel)
(#f `(branch . ,(channel-branch channel)))
(commit `(commit . ,(channel-commit channel)))))
(define (latest-channel-instances store channels)
"Return a list of channel instances corresponding to the latest checkouts of
CHANNELS."
(map (lambda (channel)
(format (current-error-port)
(G_ "Updating channel '~a' from Git repository at '~a'...~%")
(channel-name channel)
(channel-url channel))
(let-values (((checkout commit)
(latest-repository-commit store (channel-url channel)
#:ref (channel-reference
channel))))
(channel-instance channel commit checkout)))
channels))
(define %self-build-file
;; The file containing code to build Guix. This serves the same purpose as
;; a makefile, and, similarly, is intended to always keep this name.
"build-aux/build-self.scm")
(define %pull-version
;; This is the version of the 'guix pull' protocol. It specifies what's
;; expected from %SELF-BUILD-FILE. The initial version ("0") was when we'd
;; place a set of compiled Guile modules in ~/.config/guix/latest.
1)
(define (standard-module-derivation name source dependencies)
"Return a derivation that builds the Scheme modules in SOURCE and that
depend on DEPENDENCIES, a list of lowerable objects. The assumption is that
SOURCE contains package modules to be added to '%package-module-path'."
(define modules
(scheme-modules* source))
;; FIXME: We should load, say SOURCE/.guix-channel.scm, which would allow
;; channel publishers to specify things such as the sub-directory where .scm
;; files live, files to exclude from the channel, preferred substitute URLs,
;; etc.
(mlet* %store-monad ((compiled
(compiled-modules modules
#:name name
#:module-path (list source)
#:extensions dependencies)))
(gexp->derivation name
(with-extensions dependencies
(with-imported-modules '((guix build utils))
#~(begin
(use-modules (guix build utils))
(let ((go (string-append #$output "/lib/guile/"
(effective-version)
"/site-ccache"))
(scm (string-append #$output
"/share/guile/site/"
(effective-version))))
(mkdir-p (dirname go))
(symlink #$compiled go)
(mkdir-p (dirname scm))
(symlink #$source scm))))))))
(define* (build-from-source name source
#:key verbose? commit
(dependencies '()))
"Return a derivation to build Guix from SOURCE, using the self-build script
contained therein. Use COMMIT as the version string."
;; Running the self-build script makes it easier to update the build
;; procedure: the self-build script of the Guix-to-be-installed contains the
;; right dependencies, build procedure, etc., which the Guix-in-use may not
;; be know.
(define script
(string-append source "/" %self-build-file))
(if (file-exists? script)
(let ((build (save-module-excursion
(lambda ()
(primitive-load script)))))
;; BUILD must be a monadic procedure of at least one argument: the
;; source tree.
;;
;; Note: BUILD can return #f if it does not support %PULL-VERSION. In
;; the future we'll fall back to a previous version of the protocol
;; when that happens.
(build source #:verbose? verbose? #:version commit
#:pull-version %pull-version))
;; Build a set of modules that extend Guix using the standard method.
(standard-module-derivation name source dependencies)))
(define* (build-channel-instance instance #:optional (dependencies '()))
"Return, as a monadic value, the derivation for INSTANCE, a channel
instance. DEPENDENCIES is a list of extensions providing Guile modules that
INSTANCE depends on."
(build-from-source (symbol->string
(channel-name (channel-instance-channel instance)))
(channel-instance-checkout instance)
#:commit (channel-instance-commit instance)
#:dependencies dependencies))
(define (channel-instance-derivations instances)
"Return the list of derivations to build INSTANCES, in the same order as
INSTANCES."
(define core-instance
;; The 'guix' channel is treated specially: it's an implicit dependency of
;; all the other channels.
(find (lambda (instance)
(guix-channel? (channel-instance-channel instance)))
instances))
(mlet %store-monad ((core (build-channel-instance core-instance)))
(mapm %store-monad
(lambda (instance)
(if (eq? instance core-instance)
(return core)
(build-channel-instance instance
(list core))))
instances)))
(define latest-channel-derivations
(let ((latest-channel-instances (store-lift latest-channel-instances)))
(lambda (channels)
"Return, as a monadic value, the list of derivations for the latest
instances of CHANNELS."
(mlet %store-monad ((instances (latest-channel-instances channels)))
(channel-instance-derivations instances)))))
(define (whole-package-for-legacy name modules)
"Return a full-blown Guix package for MODULES, a derivation that builds Guix
modules in the old ~/.config/guix/latest style."
(define packages
(resolve-interface '(gnu packages guile)))
(letrec-syntax ((list (syntax-rules (->)
((_)
'())
((_ (module -> variable) rest ...)
(cons (module-ref (resolve-interface
'(gnu packages module))
'variable)
(list rest ...)))
((_ variable rest ...)
(cons (module-ref packages 'variable)
(list rest ...))))))
(whole-package name modules
;; In the "old style", %SELF-BUILD-FILE would simply return a
;; derivation that builds modules. We have to infer what the
;; dependencies of these modules were.
(list guile-json guile-git guile-bytestructures
(ssh -> guile-ssh) (tls -> gnutls)))))
(define (old-style-guix? drv)
"Return true if DRV corresponds to a ~/.config/guix/latest style of
derivation."
;; Here we rely on a gross historical fact: that derivations produced by the
;; "old style" (before commit 8a0d9bc8a3f153159d9e239a151c0fa98f1e12d8,
;; dated May 30, 2018) did not depend on "guix-command.drv".
(not (find (lambda (input)
(string-suffix? "-guix-command.drv"
(derivation-input-path input)))
(derivation-inputs drv))))
(define (channel-instances->manifest instances)
"Return a profile manifest with entries for all of INSTANCES, a list of
channel instances."
(define instance->entry
(match-lambda
((instance drv)
(let ((commit (channel-instance-commit instance))
(channel (channel-instance-channel instance)))
(with-monad %store-monad
(return (manifest-entry
(name (symbol->string (channel-name channel)))
(version (string-take commit 7))
(item (if (guix-channel? channel)
(if (old-style-guix? drv)
(whole-package-for-legacy
(string-append name "-" version)
drv)
drv)
drv))
(properties
`((source (repository
(version 0)
(url ,(channel-url channel))
(branch ,(channel-branch channel))
(commit ,commit))))))))))))
(mlet* %store-monad ((derivations (channel-instance-derivations instances))
(entries (mapm %store-monad instance->entry
(zip instances derivations))))
(return (manifest entries))))

73
guix/describe.scm Normal file
View File

@ -0,0 +1,73 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (guix describe)
#:use-module (guix memoization)
#:use-module (guix profiles)
#:use-module (srfi srfi-1)
#:use-module (ice-9 match)
#:export (package-path-entries))
;;; Commentary:
;;;
;;; This module provides supporting code to allow a Guix instance to find, at
;;; run time, which profile it's in (profiles created by 'guix pull'). That
;;; allows it to read meta-information about itself (e.g., repository URL and
;;; commit ID) and to find other channels available in the same profile. It's
;;; a bit like ELPA's pkg-info.el.
;;;
;;; Code:
(define current-profile
(mlambda ()
"Return the profile (created by 'guix pull') the calling process lives in,
or #f if this is not applicable."
(match (command-line)
((program . _)
(and (string-suffix? "/bin/guix" program)
;; Note: We want to do _lexical dot-dot resolution_. Using ".."
;; for real would instead take us into the /gnu/store directory
;; that ~/.config/guix/current/bin points to, whereas we want to
;; obtain ~/.config/guix/current.
(let ((candidate (dirname (dirname program))))
(and (file-exists? (string-append candidate "/manifest"))
candidate)))))))
(define current-profile-entries
(mlambda ()
"Return the list of entries in the 'guix pull' profile the calling process
lives in, or #f if this is not applicable."
(match (current-profile)
(#f '())
(profile
(let ((manifest (profile-manifest profile)))
(manifest-entries manifest))))))
(define package-path-entries
(mlambda ()
"Return a list of package path entries to be added to the package search
path. These entries are taken from the 'guix pull' profile the calling
process lives in, when applicable."
;; Filter out Guix itself.
(filter-map (lambda (entry)
(and (not (string=? (manifest-entry-name entry)
"guix"))
(string-append (manifest-entry-item entry)
"/share/guile/site/"
(effective-version))))
(current-profile-entries))))

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -27,6 +27,7 @@
#:use-module (ice-9 ftw)
#:export (scheme-files
scheme-modules
scheme-modules*
fold-modules
all-modules
fold-module-public-variables))
@ -115,6 +116,16 @@ name and the exception key and arguments."
(string-append directory "/" sub-directory)
directory))))
(define* (scheme-modules* directory #:optional sub-directory)
"Return the list of module names found under SUB-DIRECTORY in DIRECTORY.
This is a source-only variant that does not try to load files."
(let ((prefix (string-length directory)))
(map (lambda (file)
(file-name->module-name (string-drop file prefix)))
(scheme-files (if sub-directory
(string-append directory "/" sub-directory)
directory)))))
(define* (fold-modules proc init path #:key (warn (const #f)))
"Fold over all the Scheme modules present in PATH, a list of directories.
Call (PROC MODULE RESULT) for each module that is found."

View File

@ -44,6 +44,7 @@
%hackage-updater
guix-package->hackage-name
hackage-name->package-name
hackage-fetch
hackage-source-url
hackage-cabal-url

View File

@ -3,6 +3,7 @@
;;; Copyright © 2015 Cyril Roelandt <tipecaml@gmail.com>
;;; Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;;
;;; This file is part of GNU Guix.
;;;
@ -24,6 +25,7 @@
#:use-module (ice-9 match)
#:use-module (ice-9 pretty-print)
#:use-module (ice-9 regex)
#:use-module (ice-9 receive)
#:use-module ((ice-9 rdelim) #:select (read-line))
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
@ -36,7 +38,8 @@
#:use-module (guix utils)
#:use-module ((guix build utils)
#:select ((package-name->name+version
. hyphen-package-name->name+version)))
. hyphen-package-name->name+version)
find-files))
#:use-module (guix import utils)
#:use-module ((guix download) #:prefix download:)
#:use-module (guix import json)
@ -45,6 +48,7 @@
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix build-system python)
#:export (guix-package->pypi-name
pypi-recursive-import
pypi->guix-package
%pypi-updater))
@ -114,9 +118,9 @@ package definition."
`((propagated-inputs (,'quasiquote ,package-inputs))))))
(define (guess-requirements source-url wheel-url tarball)
"Given SOURCE-URL, WHEEL-URL and a TARBALL of the package, return a list of
the required packages specified in the requirements.txt file. TARBALL will be
extracted in the current directory, and will be deleted."
"Given SOURCE-URL, WHEEL-URL and a TARBALL of the package, return a list
of the required packages specified in the requirements.txt file. TARBALL will
be extracted in a temporary directory."
(define (tarball-directory url)
;; Given the URL of the package's tarball, return the name of the directory
@ -140,8 +144,8 @@ cannot determine package dependencies"))
;; file, remove everything other than the actual name of the required
;; package, and return it.
(string-take s
(or (string-index s #\space)
(string-length s))))
(or (string-index s (lambda (chr) (member chr '(#\space #\> #\= #\<))))
(string-length s))))
(define (comment? line)
;; Return #t if the given LINE is a comment, #f otherwise.
@ -160,7 +164,7 @@ cannot determine package dependencies"))
((or (string-null? line) (comment? line))
(loop result))
(else
(loop (cons (python->package-name (clean-requirement line))
(loop (cons (clean-requirement line)
result))))))))))
(define (read-wheel-metadata wheel-archive)
@ -180,9 +184,7 @@ cannot determine package dependencies"))
(hash-ref (list-ref run_requires 0)
"requires")
'())))
(map (lambda (r)
(python->package-name (clean-requirement r)))
requirements)))))
(map clean-requirement requirements)))))
(lambda ()
(delete-file json-file)
(rmdir dirname))))))
@ -197,31 +199,37 @@ cannot determine package dependencies"))
(read-wheel-metadata temp))
#f))))
(define (guess-requirements-from-source)
;; Return the package's requirements by guessing them from the source.
(let ((dirname (tarball-directory source-url)))
(if (string? dirname)
(let* ((req-file (string-append dirname "/requirements.txt"))
(exit-code (system* "tar" "xf" tarball req-file)))
;; TODO: support more formats.
(if (zero? exit-code)
(dynamic-wind
(const #t)
(lambda ()
(read-requirements req-file))
(lambda ()
(delete-file req-file)
(rmdir dirname)))
(begin
(warning (G_ "'tar xf' failed with exit code ~a\n")
exit-code)
'())))
(call-with-temporary-directory
(lambda (dir)
(let* ((pypi-name (string-take dirname (string-rindex dirname #\-)))
(req-files (list (string-append dirname "/requirements.txt")
(string-append dirname "/" pypi-name ".egg-info"
"/requires.txt")))
(exit-codes (map (lambda (file-name)
(parameterize ((current-error-port (%make-void-port "rw+"))
(current-output-port (%make-void-port "rw+")))
(system* "tar" "xf" tarball "-C" dir file-name)))
req-files)))
;; Only one of these files needs to exist.
(if (any zero? exit-codes)
(match (find-files dir)
((file . _)
(read-requirements file))
(()
(warning (G_ "No requirements file found.\n"))))
(begin
(warning (G_ "Failed to extract requirements files\n"))
'())))))
'())))
;; First, try to compute the requirements using the wheel, since that is the
;; most reliable option. If a wheel is not provided for this package, try
;; getting them by reading the "requirements.txt" file from the source. Note
;; getting them by reading either the "requirements.txt" file or the
;; "requires.txt" from the egg-info directory from the source tarball. Note
;; that "requirements.txt" is not mandatory, so this is likely to fail.
(or (guess-requirements-from-wheel)
(guess-requirements-from-source)))
@ -229,16 +237,21 @@ cannot determine package dependencies"))
(define (compute-inputs source-url wheel-url tarball)
"Given the SOURCE-URL of an already downloaded TARBALL, return a list of
name/variable pairs describing the required inputs of this package."
(sort
(map (lambda (input)
(list input (list 'unquote (string->symbol input))))
(remove (cut string=? "python-argparse" <>)
(guess-requirements source-url wheel-url tarball)))
(lambda args
(match args
(((a _ ...) (b _ ...))
(string-ci<? a b))))))
name/variable pairs describing the required inputs of this package. Also
return the unaltered list of upstream dependency names."
(let ((dependencies
(remove (cut string=? "argparse" <>)
(guess-requirements source-url wheel-url tarball))))
(values (sort
(map (lambda (input)
(let ((guix-name (python->package-name input)))
(list guix-name (list 'unquote (string->symbol guix-name)))))
dependencies)
(lambda args
(match args
(((a _ ...) (b _ ...))
(string-ci<? a b)))))
dependencies)))
(define (make-pypi-sexp name version source-url wheel-url home-page synopsis
description license)
@ -247,46 +260,58 @@ VERSION, SOURCE-URL, HOME-PAGE, SYNOPSIS, DESCRIPTION, and LICENSE."
(call-with-temporary-output-file
(lambda (temp port)
(and (url-fetch source-url temp)
`(package
(name ,(python->package-name name))
(version ,version)
(source (origin
(method url-fetch)
(receive (input-package-names upstream-dependency-names)
(compute-inputs source-url wheel-url temp)
(values
`(package
(name ,(python->package-name name))
(version ,version)
(source (origin
(method url-fetch)
;; Sometimes 'pypi-uri' doesn't quite work due to mixed
;; cases in NAME, for instance, as is the case with
;; "uwsgi". In that case, fall back to a full URL.
(uri (pypi-uri ,(string-downcase name) version))
(sha256
(base32
,(guix-hash-url temp)))))
(build-system python-build-system)
,@(maybe-inputs (compute-inputs source-url wheel-url temp))
(home-page ,home-page)
(synopsis ,synopsis)
(description ,description)
(license ,(license->symbol license)))))))
;; Sometimes 'pypi-uri' doesn't quite work due to mixed
;; cases in NAME, for instance, as is the case with
;; "uwsgi". In that case, fall back to a full URL.
(uri (pypi-uri ,(string-downcase name) version))
(sha256
(base32
,(guix-hash-url temp)))))
(build-system python-build-system)
,@(maybe-inputs input-package-names)
(home-page ,home-page)
(synopsis ,synopsis)
(description ,description)
(license ,(license->symbol license)))
upstream-dependency-names))))))
(define (pypi->guix-package package-name)
"Fetch the metadata for PACKAGE-NAME from pypi.org, and return the
(define pypi->guix-package
(memoize
(lambda* (package-name)
"Fetch the metadata for PACKAGE-NAME from pypi.org, and return the
`package' s-expression corresponding to that package, or #f on failure."
(let ((package (pypi-fetch package-name)))
(and package
(guard (c ((missing-source-error? c)
(let ((package (missing-source-error-package c)))
(leave (G_ "no source release for pypi package ~a ~a~%")
(assoc-ref* package "info" "name")
(assoc-ref* package "info" "version")))))
(let ((name (assoc-ref* package "info" "name"))
(version (assoc-ref* package "info" "version"))
(release (assoc-ref (latest-source-release package) "url"))
(wheel (assoc-ref (latest-wheel-release package) "url"))
(synopsis (assoc-ref* package "info" "summary"))
(description (assoc-ref* package "info" "summary"))
(home-page (assoc-ref* package "info" "home_page"))
(license (string->license (assoc-ref* package "info" "license"))))
(make-pypi-sexp name version release wheel home-page synopsis
description license))))))
(let ((package (pypi-fetch package-name)))
(and package
(guard (c ((missing-source-error? c)
(let ((package (missing-source-error-package c)))
(leave (G_ "no source release for pypi package ~a ~a~%")
(assoc-ref* package "info" "name")
(assoc-ref* package "info" "version")))))
(let ((name (assoc-ref* package "info" "name"))
(version (assoc-ref* package "info" "version"))
(release (assoc-ref (latest-source-release package) "url"))
(wheel (assoc-ref (latest-wheel-release package) "url"))
(synopsis (assoc-ref* package "info" "summary"))
(description (assoc-ref* package "info" "summary"))
(home-page (assoc-ref* package "info" "home_page"))
(license (string->license (assoc-ref* package "info" "license"))))
(make-pypi-sexp name version release wheel home-page synopsis
description license))))))))
(define (pypi-recursive-import package-name)
(recursive-import package-name #f
#:repo->guix-package (lambda (name repo)
(pypi->guix-package name))
#:guix-name python->package-name))
(define (string->license str)
"Convert the string STR into a license object."

View File

@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017 Federico Beffa <beffa@fbengineering.ch>
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;;
;;; This file is part of GNU Guix.
;;;
@ -25,10 +26,12 @@
#:use-module (srfi srfi-35)
#:use-module (guix import json)
#:use-module (guix import hackage)
#:use-module (guix import utils)
#:use-module (guix memoization)
#:use-module (guix packages)
#:use-module (guix upstream)
#:export (stackage->guix-package
stackage-recursive-import
%stackage-updater))
@ -45,9 +48,9 @@
(_ #f)))
(define (lts-info-packages lts-info)
"Retruns the alist of packages contained in LTS-INFO."
"Returns the alist of packages contained in LTS-INFO."
(match lts-info
((_ ("packages" pkg ...)) pkg)
((("packages" pkg ...) . _) pkg)
(_ '())))
(define (leave-with-message fmt . args)
@ -85,25 +88,33 @@
(define (hackage-name-version name version)
(and version (string-append name "@" version)))
(define* (stackage->guix-package package-name ; upstream name
#:key
(include-test-dependencies? #t)
(lts-version "")
(packages-info
(lts-info-packages
(stackage-lts-info-fetch lts-version))))
"Fetch Cabal file for PACKAGE-NAME from hackage.haskell.org. The retrieved
(define stackage->guix-package
(memoize
(lambda* (package-name ; upstream name
#:key
(include-test-dependencies? #t)
(lts-version "")
(packages-info
(lts-info-packages
(stackage-lts-info-fetch lts-version))))
"Fetch Cabal file for PACKAGE-NAME from hackage.haskell.org. The retrieved
vesion corresponds to the version of PACKAGE-NAME specified in the LTS-VERSION
release at stackage.org. Return the `package' S-expression corresponding to
that package, or #f on failure. PACKAGES-INFO is the alist with the packages
included in the Stackage LTS release."
(let* ((version (lts-package-version packages-info package-name))
(name-version (hackage-name-version package-name version)))
(if name-version
(hackage->guix-package name-version
#:include-test-dependencies?
include-test-dependencies?)
(leave-with-message "~a: Stackage package not found" package-name))))
(let* ((version (lts-package-version packages-info package-name))
(name-version (hackage-name-version package-name version)))
(if name-version
(hackage->guix-package name-version
#:include-test-dependencies?
include-test-dependencies?)
(leave-with-message "~a: Stackage package not found" package-name))))))
(define (stackage-recursive-import package-name . args)
(recursive-import package-name #f
#:repo->guix-package (lambda (name repo)
(apply stackage->guix-package (cons name args)))
#:guix-name hackage-name->package-name))
;;;

View File

@ -52,17 +52,6 @@
((weird _ ...) ;weird!
(syntax-violation name "invalid field specifier" #'weird)))))
(define (print-record-abi-mismatch-error port key args
default-printer)
(match args
((rtd . _)
;; The source file where this exception is thrown must be recompiled.
(format port "ERROR: ~a: record ABI mismatch; recompilation needed"
rtd))))
(set-exception-printer! 'record-abi-mismatch-error
print-record-abi-mismatch-error)
(eval-when (expand load eval)
;; The procedures below are needed both at run time and at expansion time.
@ -81,7 +70,11 @@
interface\" (ABI) for TYPE is equal to COOKIE."
(with-syntax ((current-abi (current-abi-identifier type)))
#`(unless (eq? current-abi #,cookie)
(throw 'record-abi-mismatch-error #,type)))))
;; The source file where this exception is thrown must be
;; recompiled.
(throw 'record-abi-mismatch-error 'abi-check
"~a: record ABI mismatch; recompilation needed"
(list #,type) '())))))
(define-syntax make-syntactic-constructor
(syntax-rules ()

View File

@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014 David Thompson <davet@gnu.org>
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;;
;;; This file is part of GNU Guix.
;;;
@ -25,6 +26,7 @@
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-11)
#:use-module (srfi srfi-37)
#:use-module (srfi srfi-41)
#:use-module (ice-9 match)
#:use-module (ice-9 format)
#:export (guix-import-pypi))
@ -43,6 +45,8 @@ Import and convert the PyPI package for PACKAGE-NAME.\n"))
(display (G_ "
-h, --help display this help and exit"))
(display (G_ "
-r, --recursive import packages recursively"))
(display (G_ "
-V, --version display version information and exit"))
(newline)
(show-bug-report-information))
@ -56,6 +60,9 @@ Import and convert the PyPI package for PACKAGE-NAME.\n"))
(option '(#\V "version") #f #f
(lambda args
(show-version-and-exit "guix import pypi")))
(option '(#\r "recursive") #f #f
(lambda (opt name arg result)
(alist-cons 'recursive #t result)))
%standard-import-options))
@ -81,11 +88,22 @@ Import and convert the PyPI package for PACKAGE-NAME.\n"))
(reverse opts))))
(match args
((package-name)
(let ((sexp (pypi->guix-package package-name)))
(unless sexp
(leave (G_ "failed to download meta-data for package '~a'~%")
package-name))
sexp))
(if (assoc-ref opts 'recursive)
;; Recursive import
(map (match-lambda
((and ('package ('name name) . rest) pkg)
`(define-public ,(string->symbol name)
,pkg))
(_ #f))
(reverse
(stream->list
(pypi-recursive-import package-name))))
;; Single import
(let ((sexp (pypi->guix-package package-name)))
(unless sexp
(leave (G_ "failed to download meta-data for package '~a'~%")
package-name))
sexp)))
(()
(leave (G_ "too few arguments~%")))
((many ...)

View File

@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017 Federico Beffa <beffa@fbengineering.ch>
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;;
;;; This file is part of GNU Guix.
;;;
@ -26,6 +27,7 @@
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-11)
#:use-module (srfi srfi-37)
#:use-module (srfi srfi-41)
#:use-module (ice-9 match)
#:use-module (ice-9 format)
#:export (guix-import-stackage))
@ -43,11 +45,13 @@
(display (G_ "Usage: guix import stackage PACKAGE-NAME
Import and convert the LTS Stackage package for PACKAGE-NAME.\n"))
(display (G_ "
-r VERSION, --lts-version=VERSION
-l VERSION, --lts-version=VERSION
specify the LTS version to use"))
(display (G_ "
-h, --help display this help and exit"))
(display (G_ "
-r, --recursive import packages recursively"))
(display (G_ "
-t, --no-test-dependencies don't include test-only dependencies"))
(display (G_ "
-V, --version display version information and exit"))
@ -68,11 +72,14 @@ Import and convert the LTS Stackage package for PACKAGE-NAME.\n"))
(alist-cons 'include-test-dependencies? #f
(alist-delete 'include-test-dependencies?
result))))
(option '(#\r "lts-version") #t #f
(option '(#\l "lts-version") #t #f
(lambda (opt name arg result)
(alist-cons 'lts-version arg
(alist-delete 'lts-version
result))))
(option '(#\r "recursive") #f #f
(lambda (opt name arg result)
(alist-cons 'recursive #t result)))
%standard-import-options))
@ -90,6 +97,27 @@ Import and convert the LTS Stackage package for PACKAGE-NAME.\n"))
(alist-cons 'argument arg result))
%default-options))
(define (run-importer package-name opts error-fn)
(let* ((arguments (list
package-name
#:include-test-dependencies?
(assoc-ref opts 'include-test-dependencies?)
#:lts-version (assoc-ref opts 'lts-version)))
(sexp (if (assoc-ref opts 'recursive)
;; Recursive import
(map (match-lambda
((and ('package ('name name) . rest) pkg)
`(define-public ,(string->symbol name)
,pkg))
(_ #f))
(reverse
(stream->list
(apply stackage-recursive-import arguments))))
;; Single import
(apply stackage->guix-package arguments))))
(unless sexp (error-fn))
sexp))
(let* ((opts (parse-options))
(args (filter-map (match-lambda
(('argument . value)
@ -99,15 +127,11 @@ Import and convert the LTS Stackage package for PACKAGE-NAME.\n"))
(match args
((package-name)
(with-error-handling
(let ((sexp (stackage->guix-package
package-name
#:include-test-dependencies?
(assoc-ref opts 'include-test-dependencies?)
#:lts-version (assoc-ref opts 'lts-version))))
(unless sexp
(leave (G_ "failed to download cabal file for package '~a'~%")
package-name))
sexp)))
(run-importer package-name opts
(lambda ()
(leave (G_ "failed to download cabal file \
for package '~a'~%")
package-name)))))
(()
(leave (G_ "too few arguments~%")))
((many ...)

View File

@ -748,8 +748,8 @@ Create a bundle of PACKAGE.\n"))
(build-image (match (assq-ref %formats pack-format)
((? procedure? proc) proc)
(#f
(leave (G_ "~a: unknown pack format")
format))))
(leave (G_ "~a: unknown pack format~%")
pack-format))))
(localstatedir? (assoc-ref opts 'localstatedir?)))
(run-with-store store
(mlet* %store-monad ((profile (profile-derivation

View File

@ -30,26 +30,19 @@
#:use-module (guix grafts)
#:use-module (guix memoization)
#:use-module (guix monads)
#:use-module (guix channels)
#:autoload (guix inferior) (open-inferior)
#:use-module (guix scripts build)
#:autoload (guix self) (whole-package)
#:use-module (guix git)
#:use-module (git)
#:use-module (gnu packages)
#:autoload (gnu packages ssh) (guile-ssh)
#:autoload (gnu packages tls) (gnutls)
#:use-module ((guix scripts package) #:select (build-and-use-profile))
#:use-module ((guix build utils)
#:select (with-directory-excursion delete-file-recursively))
#:use-module ((guix build download)
#:select (%x509-certificate-directory))
#:use-module (gnu packages base)
#:use-module (gnu packages guile)
#:use-module ((gnu packages bootstrap)
#:select (%bootstrap-guile))
#:use-module ((gnu packages certs) #:select (le-certs))
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-11)
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-35)
#:use-module (srfi srfi-37)
@ -57,9 +50,6 @@
#:use-module (ice-9 vlist)
#:export (guix-pull))
(define %repository-url
(or (getenv "GUIX_PULL_URL") "https://git.savannah.gnu.org/git/guix.git"))
;;;
;;; Command-line options.
@ -67,9 +57,7 @@
(define %default-options
;; Alist of default option values.
`((repository-url . ,%repository-url)
(ref . (branch . "origin/master"))
(system . ,(%current-system))
`((system . ,(%current-system))
(substitutes? . #t)
(build-hook? . #t)
(graft? . #t)
@ -80,6 +68,8 @@
Download and deploy the latest version of Guix.\n"))
(display (G_ "
--verbose produce verbose output"))
(display (G_ "
-C, --channels=FILE deploy the channels defined in FILE"))
(display (G_ "
--url=URL download from the Git repository at URL"))
(display (G_ "
@ -105,6 +95,9 @@ Download and deploy the latest version of Guix.\n"))
(cons* (option '("verbose") #f #f
(lambda (opt name arg result)
(alist-cons 'verbose? #t result)))
(option '(#\C "channels") #t #f
(lambda (opt name arg result)
(alist-cons 'channel-file arg result)))
(option '(#\l "list-generations") #f #t
(lambda (opt name arg result)
(cons `(query list-generations ,(or arg ""))
@ -142,70 +135,6 @@ Download and deploy the latest version of Guix.\n"))
(define indirect-root-added
(store-lift add-indirect-root))
(define %self-build-file
;; The file containing code to build Guix. This serves the same purpose as
;; a makefile, and, similarly, is intended to always keep this name.
"build-aux/build-self.scm")
(define %pull-version
;; This is the version of the 'guix pull' protocol. It specifies what's
;; expected from %SELF-BUILD-FILE. The initial version ("0") was when we'd
;; place a set of compiled Guile modules in ~/.config/guix/latest.
1)
(define* (build-from-source source
#:key verbose? commit)
"Return a derivation to build Guix from SOURCE, using the self-build script
contained therein. Use COMMIT as the version string."
;; Running the self-build script makes it easier to update the build
;; procedure: the self-build script of the Guix-to-be-installed contains the
;; right dependencies, build procedure, etc., which the Guix-in-use may not
;; be know.
(let* ((script (string-append source "/" %self-build-file))
(build (primitive-load script)))
;; BUILD must be a monadic procedure of at least one argument: the source
;; tree.
;;
;; Note: BUILD can return #f if it does not support %PULL-VERSION. In the
;; future we'll fall back to a previous version of the protocol when that
;; happens.
(build source #:verbose? verbose? #:version commit
#:pull-version %pull-version)))
(define (whole-package-for-legacy name modules)
"Return a full-blown Guix package for MODULES, a derivation that builds Guix
modules in the old ~/.config/guix/latest style."
(whole-package name modules
;; In the "old style", %SELF-BUILD-FILE would simply return a
;; derivation that builds modules. We have to infer what the
;; dependencies of these modules were.
(list guile-json guile-git guile-bytestructures
guile-ssh gnutls)))
(define* (derivation->manifest-entry drv
#:key url branch commit)
"Return a manifest entry for DRV, which represents Guix at COMMIT. Record
URL, BRANCH, and COMMIT as a property in the manifest entry."
(mbegin %store-monad
(what-to-build (list drv))
(built-derivations (list drv))
(let ((out (derivation->output-path drv)))
(return (manifest-entry
(name "guix")
(version (string-take commit 7))
(item (if (file-exists? (string-append out "/bin/guix"))
drv
(whole-package-for-legacy (string-append name "-"
version)
drv)))
(properties
`((source (repository
(version 0)
(url ,url)
(branch ,branch)
(commit ,commit))))))))))
(define (display-profile-news profile)
"Display what's up in PROFILE--new packages, and all that."
(match (memv (generation-number profile)
@ -223,8 +152,8 @@ URL, BRANCH, and COMMIT as a property in the manifest entry."
#:heading (G_ "New in this revision:\n"))))
(_ #t)))
(define* (build-and-install source config-dir
#:key verbose? url branch commit)
(define* (build-and-install instances config-dir
#:key verbose?)
"Build the tool from SOURCE, and install it in CONFIG-DIR."
(define update-profile
(store-lift build-and-use-profile))
@ -232,15 +161,9 @@ URL, BRANCH, and COMMIT as a property in the manifest entry."
(define profile
(string-append config-dir "/current"))
(mlet* %store-monad ((drv (build-from-source source
#:commit commit
#:verbose? verbose?))
(entry (derivation->manifest-entry drv
#:url url
#:branch branch
#:commit commit)))
(mlet %store-monad ((manifest (channel-instances->manifest instances)))
(mbegin %store-monad
(update-profile profile (manifest (list entry)))
(update-profile profile manifest)
(return (display-profile-news profile)))))
(define (honor-lets-encrypt-certificates! store)
@ -426,45 +349,106 @@ and ALIST2 differ, display HEADING upfront."
((numbers ...)
(list-generations profile numbers)))))))))
(define (channel-list opts)
"Return the list of channels to use. If OPTS specify a channel file,
channels are read from there; otherwise, if ~/.config/guix/channels.scm
exists, read it; otherwise %DEFAULT-CHANNELS is used. Apply channel
transformations specified in OPTS (resulting from '--url', '--commit', or
'--branch'), if any."
(define file
(assoc-ref opts 'channel-file))
(define default-file
(string-append (config-directory) "/channels.scm"))
(define (load-channels file)
(let ((result (load* file (make-user-module '((guix channels))))))
(if (and (list? result) (every channel? result))
result
(leave (G_ "'~a' did not return a list of channels~%") file))))
(define channels
(cond (file
(load-channels file))
((file-exists? default-file)
(load-channels default-file))
(else
%default-channels)))
(define (environment-variable)
(match (getenv "GUIX_PULL_URL")
(#f #f)
(url
(warning (G_ "The 'GUIX_PULL_URL' environment variable is deprecated.
Use '~/.config/guix/channels.scm' instead."))
url)))
(let ((ref (assoc-ref opts 'ref))
(url (or (assoc-ref opts 'repository-url)
(environment-variable))))
(if (or ref url)
(match channels
((one)
;; When there's only one channel, apply '--url', '--commit', and
;; '--branch' to this specific channel.
(let ((url (or url (channel-url one))))
(list (match ref
(('commit . commit)
(channel (inherit one)
(url url) (commit commit) (branch #f)))
(('branch . branch)
(channel (inherit one)
(url url) (commit #f) (branch branch)))
(#f
(channel (inherit one) (url url)))))))
(_
;; Otherwise bail out.
(leave
(G_ "'--url', '--commit', and '--branch' are not applicable~%"))))
channels)))
(define (guix-pull . args)
(define (use-le-certs? url)
(string-prefix? "https://git.savannah.gnu.org/" url))
(with-error-handling
(with-git-error-handling
(let* ((opts (parse-command-line args %options
(list %default-options)))
(url (assoc-ref opts 'repository-url))
(ref (assoc-ref opts 'ref))
(cache (string-append (cache-directory) "/pull")))
(let* ((opts (parse-command-line args %options
(list %default-options)))
(cache (string-append (cache-directory) "/pull"))
(channels (channel-list opts)))
(cond ((assoc-ref opts 'query)
(process-query opts))
((assoc-ref opts 'dry-run?)
#t) ;XXX: not very useful
(else
(with-store store
(parameterize ((%graft? (assoc-ref opts 'graft?)))
(parameterize ((%graft? (assoc-ref opts 'graft?))
(%repository-cache-directory cache))
(set-build-options-from-command-line store opts)
;; For reproducibility, always refer to the LE certificates
;; when we know we're talking to Savannah.
(when (use-le-certs? url)
(honor-lets-encrypt-certificates! store))
(format (current-error-port)
(G_ "Updating from Git repository at '~a'...~%")
url)
(let-values (((checkout commit)
(latest-repository-commit store url
#:ref ref
#:cache-directory
cache)))
;; When certificates are already installed, use them.
;; Otherwise, use the Let's Encrypt certificates, which we
;; know Savannah uses.
(let ((certs (or (getenv "SSL_CERT_DIR") "/etc/ssl/certs")))
(unless (file-exists? certs)
(honor-lets-encrypt-certificates! store)))
(let ((instances (latest-channel-instances store channels)))
(format (current-error-port)
(G_ "Building from Git commit ~a...~%")
commit)
(N_ "Building from this channel:~%"
"Building from these channels:~%"
(length instances)))
(for-each (lambda (instance)
(let ((channel
(channel-instance-channel instance)))
(format (current-error-port)
" ~10a~a\t~a~%"
(channel-name channel)
(channel-url channel)
(string-take
(channel-instance-commit instance)
7))))
instances)
(parameterize ((%guile-for-build
(package-derivation
store
@ -472,13 +456,7 @@ and ALIST2 differ, display HEADING upfront."
%bootstrap-guile
(canonical-package guile-2.2)))))
(run-with-store store
(build-and-install checkout (config-directory)
#:url url
#:branch (match ref
(('branch . branch)
branch)
(_ #f))
#:commit commit
(build-and-install instances (config-directory)
#:verbose?
(assoc-ref opts 'verbose?)))))))))))))

View File

@ -206,13 +206,6 @@ list of file-name/file-like objects suitable as inputs to 'imported-files'."
(local-file file #:recursive? #t)))
(find-files (string-append directory "/" sub-directory) pred)))
(define (scheme-modules* directory sub-directory)
"Return the list of module names found under SUB-DIRECTORY in DIRECTORY."
(let ((prefix (string-length directory)))
(map (lambda (file)
(file-name->module-name (string-drop file prefix)))
(scheme-files (string-append directory "/" sub-directory)))))
(define* (sub-directory item sub-directory)
"Return SUB-DIRECTORY within ITEM, which may be a file name or a file-like
object."

View File

@ -38,4 +38,5 @@ guix/upstream.scm
guix/ui.scm
guix/http-client.scm
guix/nar.scm
guix/channels.scm
nix/nix-daemon/guix-daemon.cc

View File

@ -313,8 +313,9 @@
(lambda ()
(eval '(foo? (make-me-a-record)) module)
#f)
(lambda (key rtd . _)
(eq? rtd (eval '<foo> module))))))
(match-lambda*
((key 'abi-check (? string? message) (rtd) . _)
(eq? rtd (eval '<foo> module)))))))
(test-equal "recutils->alist"
'((("Name" . "foo")