diff options
184 files changed, 8112 insertions, 2377 deletions
diff --git a/Makefile.am b/Makefile.am index c2c571cf3b..50cde52701 100644 --- a/Makefile.am +++ b/Makefile.am @@ -174,8 +174,8 @@ dist_noinst_DATA = guix/tests.scm # Linux-Libre configurations. KCONFIGS = \ - gnu/packages/linux-libre-4.5-i686.conf \ - gnu/packages/linux-libre-4.5-x86_64.conf \ + gnu/packages/linux-libre-4.6-i686.conf \ + gnu/packages/linux-libre-4.6-x86_64.conf \ gnu/packages/linux-libre-4.4-i686.conf \ gnu/packages/linux-libre-4.4-x86_64.conf \ gnu/packages/linux-libre-4.1-i686.conf \ @@ -248,6 +248,7 @@ SCM_TESTS = \ tests/profiles.scm \ tests/syscalls.scm \ tests/gremlin.scm \ + tests/bournish.scm \ tests/lint.scm \ tests/publish.scm \ tests/scripts.scm \ diff --git a/doc/guix.texi b/doc/guix.texi index d88cc256d7..b9bf986640 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -336,6 +336,13 @@ manager, which can be done on top of a running GNU/Linux system. If, instead, you want to install the complete GNU operating system, @pxref{System Installation}. +@cindex foreign distro +When installed on a running GNU/Linux system---thereafter called a +@dfn{foreign distro}---GNU@tie{}Guix complements the available tools +without interference. Its data lives exclusively in two directories, +usually @file{/gnu/store} and @file{/var/guix}; other files on your +system, such as @file{/etc}, are left untouched. + @menu * Binary Installation:: Getting Guix running in no time! * Requirements:: Software needed to build and run Guix. @@ -375,7 +382,7 @@ If that command fails because you do not have the required public key, then run this command to import it: @example -$ gpg --keyserver keys.gnupg.net --recv-keys 090B11993D9AEBB5 +$ gpg --keyserver pgp.mit.edu --recv-keys 090B11993D9AEBB5 @end example @noindent @@ -998,6 +1005,10 @@ consecutive build results are not bit-for-bit identical. Note that this setting can be overridden by clients such as @command{guix build} (@pxref{Invoking guix build}). +When used in conjunction with @option{--keep-failed}, the differing +output is kept in the store, under @file{/gnu/store/@dots{}-check}. +This makes it easy to look for differences between the two results. + @item --debug Produce debugging output. @@ -1092,6 +1103,7 @@ daemons on the same machine. @node Application Setup @section Application Setup +@cindex foreign distro When using Guix on top of GNU/Linux distribution other than GuixSD---a so-called @dfn{foreign distro}---a few additional steps are needed to get everything in place. Here are some of them. @@ -3082,7 +3094,7 @@ Store Monad}). @cindex derivations Low-level build actions and the environment in which they are performed -are represented by @dfn{derivations}. A derivation contain the +are represented by @dfn{derivations}. A derivation contains the following pieces of information: @itemize @@ -4332,6 +4344,10 @@ substitutes are genuine (@pxref{Substitutes}), or whether the build result of a package is deterministic. @xref{Invoking guix challenge}, for more background information and tools. +When used in conjunction with @option{--keep-failed}, the differing +output is kept in the store, under @file{/gnu/store/@dots{}-check}. +This makes it easy to look for differences between the two results. + @item --derivations @itemx -d Return the derivation paths, not the output paths, of the given @@ -5058,6 +5074,24 @@ reports information based on the available substitutes (@pxref{Substitutes}). This makes it possible it to profile disk usage of store items that are not even on disk, only available remotely. +You can also specify several package names: + +@example +$ guix size coreutils grep sed bash +store item total self +/gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4% +/gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8% +/gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6% +/gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2% +@dots{} +total: 102.3 MiB +@end example + +@noindent +In this example we see that the combination of the four packages takes +102.3@tie{}MiB in total, which is much less than the sum of each closure +since they have a lot of dependencies in common. + The available options are: @table @option @@ -5948,6 +5982,11 @@ dependencies of your system configuration can be downloaded. See the ``Networking'' section below. @end quotation +The installation system includes many common tools needed for this task. +But it is also a full-blown GuixSD system, which means that you can +install additional packages, should you need it, using @command{guix +package} (@pxref{Invoking guix package}). + @subsubsection Keyboard Layout @cindex keyboard layout @@ -5971,6 +6010,13 @@ Run the following command see what your network interfaces are called: ifconfig -a @end example +@noindent +@dots{} or, using the GNU/Linux-specific @command{ip} command: + +@example +ip a +@end example + @c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20 Wired interfaces have a name starting with @samp{e}; for example, the interface corresponding to the first on-board Ethernet controller is @@ -7337,6 +7383,17 @@ Return a service that runs the Guix build daemon according to Run @var{udev}, which populates the @file{/dev} directory dynamically. @end deffn +@deffn {Scheme Procedure} urandom-seed-service @var{#f} +Save some entropy in @var{%random-seed-file} to seed @file{/dev/urandom} +when rebooting. +@end deffn + +@defvr {Scheme Variable} %random-seed-file +This is the name of the file where some random bytes are saved by +@var{urandom-seed-service} to seed @file{/dev/urandom} when rebooting. +It defaults to @file{/var/lib/random-seed}. +@end defvr + @deffn {Scheme Procedure} console-keymap-service @var{files} ... @cindex keyboard layout Return a service to load console keymaps from @var{files} using @@ -9338,6 +9395,55 @@ Finally, @var{extra-options} is a list of additional command-line options passed to @command{lircd}. @end deffn +@subsubsection Dictionary Services +The @code{(gnu services dict)} module provides the following service: + +@deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)] +Return a service that runs the @command{dicod} daemon, an implementation +of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}). + +The optional @var{config} argument specifies the configuration for +@command{dicod}, which should be a @code{<dicod-configuration>} object, by +default it serves the GNU Collaborative International Dictonary of English. + +You can add @command{open localhost} to your @file{~/.dico} file to make +@code{localhost} the default server for @command{dico} client +(@pxref{Initialization File,,, dico, GNU Dico Manual}). +@end deffn + +@deftp {Data Type} dicod-configuration +Data type representing the configuration of dicod. + +@table @asis +@item @code{dico} (default: @var{dico}) +Package object of the GNU Dico dictionary server. + +@item @code{databases} (default: @var{(list %dicod-database:gcide)}) +List of @code{<dicod-database>} objects denoting dictionaries to be served. +@end table +@end deftp + +@deftp {Data Type} dicod-database +Data type representing a dictionary database. + +@table @asis +@item @code{name} +Name of the database, will be used in DICT commands. + +@item @code{module} +Name of the dicod module used by this database +(@pxref{Modules,,, dico, GNU Dico Manual}). + +@item @code{options} +List of strings or gexps representing the arguments for the module handler +(@pxref{Handlers,,, dico, GNU Dico Manual}). +@end table +@end deftp + +@defvr {Scheme Variable} %dicod-database:gcide +A @code{<dicod-database>} object serving the GNU Collaborative International +Dictonary of English using the @code{gcide} package. +@end defvr @node Setuid Programs @subsection Setuid Programs @@ -11068,7 +11174,9 @@ packages with the corresponding names. If a project already contains the word @code{python}, we drop this; for instance, the module python-dateutil is packaged under the names -@code{python-dateutil} and @code{python2-dateutil}. +@code{python-dateutil} and @code{python2-dateutil}. If the project name +starts with @code{py} (e.g. @code{pytz}), we keep it and prefix it as +described above. @node Perl Modules diff --git a/doc/local.mk b/doc/local.mk index b9f07c3590..64bd2a5169 100644 --- a/doc/local.mk +++ b/doc/local.mk @@ -20,49 +20,49 @@ # You should have received a copy of the GNU General Public License # along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. -info_TEXINFOS = doc/guix.texi +info_TEXINFOS = %D%/guix.texi DOT_FILES = \ - doc/images/bootstrap-graph.dot \ - doc/images/bootstrap-packages.dot \ - doc/images/coreutils-graph.dot \ - doc/images/coreutils-bag-graph.dot \ - doc/images/service-graph.dot \ - doc/images/shepherd-graph.dot + %D%/images/bootstrap-graph.dot \ + %D%/images/bootstrap-packages.dot \ + %D%/images/coreutils-graph.dot \ + %D%/images/coreutils-bag-graph.dot \ + %D%/images/service-graph.dot \ + %D%/images/shepherd-graph.dot DOT_VECTOR_GRAPHICS = \ $(DOT_FILES:%.dot=%.eps) \ $(DOT_FILES:%.dot=%.pdf) EXTRA_DIST += \ - doc/htmlxref.cnf \ - doc/contributing.texi \ - doc/emacs.texi \ - doc/fdl-1.3.texi \ + %D%/htmlxref.cnf \ + %D%/contributing.texi \ + %D%/emacs.texi \ + %D%/fdl-1.3.texi \ $(DOT_FILES) \ $(DOT_VECTOR_GRAPHICS) \ - doc/images/coreutils-size-map.eps \ - doc/environment-gdb.scm \ - doc/package-hello.scm + %D%/images/coreutils-size-map.eps \ + %D%/environment-gdb.scm \ + %D%/package-hello.scm OS_CONFIG_EXAMPLES_TEXI = \ - doc/os-config-bare-bones.texi \ - doc/os-config-desktop.texi \ - doc/os-config-lightweight-desktop.texi + %D%/os-config-bare-bones.texi \ + %D%/os-config-desktop.texi \ + %D%/os-config-lightweight-desktop.texi # Bundle this file so that makeinfo finds it in out-of-source-tree builds. BUILT_SOURCES += $(OS_CONFIG_EXAMPLES_TEXI) EXTRA_DIST += $(OS_CONFIG_EXAMPLES_TEXI) MAINTAINERCLEANFILES = $(OS_CONFIG_EXAMPLES_TEXI) -doc/os-config-%.texi: gnu/system/examples/%.tmpl +%D%/os-config-%.texi: gnu/system/examples/%.tmpl $(AM_V_GEN)$(MKDIR_P) "`dirname $@`"; \ cp "$<" "$@" infoimagedir = $(infodir)/images dist_infoimage_DATA = \ $(DOT_FILES:%.dot=%.png) \ - doc/images/coreutils-size-map.png + %D%/images/coreutils-size-map.png # Try hard to obtain an image size and aspect that's reasonable for inclusion # in an Info or PDF document. @@ -86,13 +86,13 @@ DOT_OPTIONS = \ $(AM_V_GEN)convert "$<" "$@-tmp.eps"; \ mv "$@-tmp.eps" "$@" -# We cannot add new dependencies to `doc/guix.pdf' & co. (info "(automake) +# We cannot add new dependencies to `%D%/guix.pdf' & co. (info "(automake) # Extending"). Using the `-local' rules is imperfect, because they may be # triggered after the main rule. Oh, well. pdf-local: $(DOT_FILES=%.dot=$(top_srcdir)/%.pdf) info-local: $(DOT_FILES=%.dot=$(top_srcdir)/%.png) ps-local: $(DOT_FILES=%.dot=$(top_srcdir)/%.eps) \ - $(top_srcdir)/doc/images/coreutils-size-map.eps + $(top_srcdir)/%D%/images/coreutils-size-map.eps dvi-local: ps-local ## ----------- ## @@ -106,25 +106,25 @@ dvi-local: ps-local # They are built in $(srcdir) like info manuals. sub_commands_mans = \ - $(srcdir)/doc/guix-archive.1 \ - $(srcdir)/doc/guix-build.1 \ - $(srcdir)/doc/guix-challenge.1 \ - $(srcdir)/doc/guix-download.1 \ - $(srcdir)/doc/guix-edit.1 \ - $(srcdir)/doc/guix-environment.1 \ - $(srcdir)/doc/guix-gc.1 \ - $(srcdir)/doc/guix-hash.1 \ - $(srcdir)/doc/guix-import.1 \ - $(srcdir)/doc/guix-lint.1 \ - $(srcdir)/doc/guix-package.1 \ - $(srcdir)/doc/guix-publish.1 \ - $(srcdir)/doc/guix-pull.1 \ - $(srcdir)/doc/guix-refresh.1 \ - $(srcdir)/doc/guix-size.1 \ - $(srcdir)/doc/guix-system.1 + $(srcdir)/%D%/guix-archive.1 \ + $(srcdir)/%D%/guix-build.1 \ + $(srcdir)/%D%/guix-challenge.1 \ + $(srcdir)/%D%/guix-download.1 \ + $(srcdir)/%D%/guix-edit.1 \ + $(srcdir)/%D%/guix-environment.1 \ + $(srcdir)/%D%/guix-gc.1 \ + $(srcdir)/%D%/guix-hash.1 \ + $(srcdir)/%D%/guix-import.1 \ + $(srcdir)/%D%/guix-lint.1 \ + $(srcdir)/%D%/guix-package.1 \ + $(srcdir)/%D%/guix-publish.1 \ + $(srcdir)/%D%/guix-pull.1 \ + $(srcdir)/%D%/guix-refresh.1 \ + $(srcdir)/%D%/guix-size.1 \ + $(srcdir)/%D%/guix-system.1 dist_man1_MANS = \ - $(srcdir)/doc/guix.1 \ + $(srcdir)/%D%/guix.1 \ $(sub_commands_mans) gen_man = \ @@ -133,14 +133,14 @@ gen_man = \ HELP2MANFLAGS = --source=GNU --info-page=$(PACKAGE_TARNAME) -$(srcdir)/doc/guix.1: scripts/guix.in $(sub_commands_mans) +$(srcdir)/%D%/guix.1: scripts/guix.in $(sub_commands_mans) -$(AM_V_HELP2MAN)$(gen_man) --output="$@" `basename "$@" .1` # The 'case' ensures the man pages are only generated if the corresponding # source script (the first prerequisite) has been changed. The $(GOBJECTS) # prerequisite is solely meant to force these docs to be made only after all # Guile modules have been compiled. -$(srcdir)/doc/guix-%.1: guix/scripts/%.scm $(GOBJECTS) +$(srcdir)/%D%/guix-%.1: guix/scripts/%.scm $(GOBJECTS) -@case '$?' in \ *$<*) $(AM_V_P) && set -x || echo " HELP2MAN $@"; \ $(gen_man) --output="$@" "guix $*";; \ @@ -149,9 +149,9 @@ $(srcdir)/doc/guix-%.1: guix/scripts/%.scm $(GOBJECTS) if BUILD_DAEMON -dist_man1_MANS += $(srcdir)/doc/guix-daemon.1 +dist_man1_MANS += $(srcdir)/%D%/guix-daemon.1 -$(srcdir)/doc/guix-daemon.1: nix/nix-daemon/guix-daemon.cc +$(srcdir)/%D%/guix-daemon.1: nix/nix-daemon/guix-daemon.cc -$(AM_V_HELP2MAN)$(gen_man) --output="$@" `basename "$@" .1` endif diff --git a/emacs/guix-base.el b/emacs/guix-base.el index 888836428f..658cfdb5fa 100644 --- a/emacs/guix-base.el +++ b/emacs/guix-base.el @@ -207,6 +207,13 @@ Ask a user with PROMPT for continuing an operation." (guix-make-guile-expression 'package-source-path package-id))) +(defun guix-package-store-path (package-id) + "Return a list of store directories of outputs of package PACKAGE-ID." + (message "Calculating the package derivation ...") + (guix-eval-read + (guix-make-guile-expression + 'package-store-path package-id))) + (defvar guix-after-source-download-hook nil "Hook run after successful performing a 'source-download' operation.") @@ -224,6 +231,20 @@ Ask a user with PROMPT for continuing an operation." :dry-run? (or guix-dry-run 'f)) nil 'source-download))) +(defun guix-build-package (package-id &optional prompt) + "Build package with PACKAGE-ID. +Ask a user with PROMPT for continuing the build operation." + (when (or (not guix-operation-confirm) + (guix-operation-prompt (or prompt "Build package?"))) + (guix-eval-in-repl + (format (concat ",run-in-store " + "(build-package (package-by-id %d)" + " #:use-substitutes? %s" + " #:dry-run? %s)") + package-id + (guix-guile-boolean guix-use-substitutes) + (guix-guile-boolean guix-dry-run))))) + ;;;###autoload (defun guix-apply-manifest (profile file &optional operation-buffer) "Apply manifest from FILE to PROFILE. diff --git a/emacs/guix-main.scm b/emacs/guix-main.scm index e645a85e7d..cbf7cdc474 100644 --- a/emacs/guix-main.scm +++ b/emacs/guix-main.scm @@ -51,6 +51,7 @@ (guix licenses) (guix utils) (guix ui) + (guix scripts) (guix scripts package) (gnu packages) (gnu system)) @@ -953,6 +954,17 @@ GENERATIONS is a list of generation numbers." ((package _ ...) package))) (compose location->string package-location))) +(define (package-store-path package-id) + "Return a list of store directories of outputs of package PACKAGE-ID." + (match (package-by-id package-id) + (#f '()) + (package + (with-store store + (map (match-lambda + ((_ . drv) + (derivation-output-path drv))) + (derivation-outputs (package-derivation store package))))))) + (define (package-source-derivation->store-path derivation) "Return a store path of the package source DERIVATION." (match (derivation-outputs derivation) @@ -988,6 +1000,16 @@ GENERATIONS is a list of generation numbers." (format #t "The source store path: ~a~%" (package-source-derivation->store-path derivation)))))) +(define (package-build-log-file package-id) + "Return the build log file of a package PACKAGE-ID. +Return #f if the build log is not found." + (and-let* ((package (package-by-id package-id))) + (with-store store + (let* ((derivation (package-derivation store package)) + (file (derivation-file-name derivation))) + (or (log-file store file) + ((@@ (guix scripts build) log-url) store file)))))) + ;;; Executing guix commands diff --git a/emacs/guix-ui-package.el b/emacs/guix-ui-package.el index edc36486fc..4280246bb8 100644 --- a/emacs/guix-ui-package.el +++ b/emacs/guix-ui-package.el @@ -111,6 +111,19 @@ is found and `guix-package-list-single' is nil." (list (if (= 0 package-id) package-id-str package-id) output)))) +(defun guix-package-build-log-file (id) + "Return build log file name of a package defined by ID." + (guix-eval-read + (guix-make-guile-expression 'package-build-log-file id))) + +(defun guix-package-find-build-log (id) + "Show build log of a package defined by ID." + (require 'guix-build-log) + (let ((file (guix-package-build-log-file id))) + (if file + (guix-build-log-find-file file) + (message "Couldn't find the package build log.")))) + ;;; Processing package actions @@ -222,6 +235,7 @@ ENTRIES is a list of package entries to get info about packages." (description ignore (simple guix-package-info-description)) ignore (outputs simple guix-package-info-insert-outputs) + guix-package-info-insert-misc (source simple guix-package-info-insert-source) (location simple guix-package-info-insert-location) (home-url format (format guix-url)) @@ -309,9 +323,15 @@ ENTRIES is a list of package entries to get info about packages." "Face used if a package is obsolete." :group 'guix-package-info-faces) +(defcustom guix-package-info-auto-find-package t + "If non-nil, open store directory after pressing \"Show\" package button. +If nil, just display the store directory (or directories) without finding." + :type 'boolean + :group 'guix-package-info) + (defcustom guix-package-info-auto-find-source nil - "If non-nil, find a source file after pressing a \"Show\" button. -If nil, just display the source file path without finding." + "If non-nil, open source file after pressing \"Show\" source button. +If nil, just display the source file name without finding." :type 'boolean :group 'guix-package-info) @@ -325,6 +345,14 @@ prompt depending on `guix-operation-confirm' variable)." :type 'boolean :group 'guix-package-info) +(defcustom guix-package-info-button-functions + '(guix-package-info-insert-build-button + guix-package-info-insert-build-log-button) + "List of functions used to insert package buttons in Info buffer. +Each function is called with 2 arguments: package ID and full name." + :type '(repeat function) + :group 'guix-package-info) + (defvar guix-package-info-download-buffer nil "Buffer from which a current download operation was performed.") @@ -521,6 +549,78 @@ ENTRY is an alist with package info." (guix-entry-id entry)) 'output output))) +(defun guix-package-info-show-store-path (entry-id package-id) + "Show store directories of the package outputs in the current buffer. +ENTRY-ID is an ID of the current entry (package or output). +PACKAGE-ID is an ID of the package which store path to show." + (let* ((entries (guix-buffer-current-entries)) + (entry (guix-entry-by-id entry-id entries)) + (dirs (guix-package-store-path package-id))) + (or dirs + (error "Couldn't define store directory of the package")) + (let* ((new-entry (cons (cons 'store-path dirs) + entry)) + (new-entries (guix-replace-entry entry-id new-entry entries))) + (setf (guix-buffer-item-entries guix-buffer-item) + new-entries) + (guix-buffer-redisplay-goto-button) + (let ((dir (car dirs))) + (if (file-exists-p dir) + (if guix-package-info-auto-find-package + (find-file dir) + (message nil)) + (message "'%s' does not exist.\nTry to build this package." + dir)))))) + +(defun guix-package-info-insert-misc (entry) + "Insert various buttons and other info for package ENTRY at point." + (if (guix-entry-value entry 'obsolete) + (guix-format-insert nil) + (let* ((entry-id (guix-entry-id entry)) + (package-id (or (guix-entry-value entry 'package-id) + entry-id)) + (full-name (guix-package-entry->name-specification entry)) + (store-path (guix-entry-value entry 'store-path))) + (guix-info-insert-title-simple "Package") + (if store-path + (guix-info-insert-value-indent store-path 'guix-file) + (guix-info-insert-action-button + "Show" + (lambda (btn) + (guix-package-info-show-store-path + (button-get btn 'entry-id) + (button-get btn 'package-id))) + "Show the store directory of the current package" + 'entry-id entry-id + 'package-id package-id)) + (when guix-package-info-button-functions + (insert "\n") + (guix-mapinsert (lambda (fun) + (funcall fun package-id full-name)) + guix-package-info-button-functions + (guix-info-get-indent) + :indent guix-info-indent + :column (guix-info-fill-column)))))) + +(defun guix-package-info-insert-build-button (id full-name) + "Insert button to build a package defined by ID." + (guix-info-insert-action-button + "Build" + (lambda (btn) + (guix-build-package (button-get btn 'id) + (format "Build '%s' package?" full-name))) + (format "Build the current package") + 'id id)) + +(defun guix-package-info-insert-build-log-button (id _name) + "Insert button to show build log of a package defined by ID." + (guix-info-insert-action-button + "Build Log" + (lambda (btn) + (guix-package-find-build-log (button-get btn 'id))) + "View build log of the current package" + 'id id)) + (defun guix-package-info-show-source (entry-id package-id) "Show file name of a package source in the current info buffer. Find the file if needed (see `guix-package-info-auto-find-source'). @@ -817,6 +917,7 @@ for all ARGS." (version format guix-output-info-insert-version) (output format guix-output-info-insert-output) (synopsis simple (indent guix-package-info-synopsis)) + guix-package-info-insert-misc (source simple guix-package-info-insert-source) (path simple (indent guix-file)) (dependencies simple (indent guix-file)) diff --git a/emacs/guix-utils.el b/emacs/guix-utils.el index ea9933f5c3..3e4ecc36ab 100644 --- a/emacs/guix-utils.el +++ b/emacs/guix-utils.el @@ -84,16 +84,33 @@ If FORMAT is non-nil, format VAL with FORMAT." (format format str) str)))) -(defun guix-mapinsert (function sequence separator) +(cl-defun guix-mapinsert (function sequence separator &key indent column) "Like `mapconcat' but for inserting text. Apply FUNCTION to each element of SEQUENCE, and insert SEPARATOR -at point between each FUNCTION call." - (when sequence - (funcall function (car sequence)) - (mapc (lambda (obj) - (insert separator) - (funcall function obj)) - (cdr sequence)))) +at point between each FUNCTION call. + +If INDENT is non-nil, it should be a number of spaces used to +indent each line of the inserted text. + +If COLUMN is non-nil, it should be a column number which +shouldn't be exceeded by the inserted text." + (pcase sequence + (`(,first . ,rest) + (let* ((indent (or indent 0)) + (max-column (and column (- column indent)))) + (guix-with-indent indent + (funcall function first) + (dolist (element rest) + (let ((before-sep-pos (and column (point)))) + (insert separator) + (let ((after-sep-pos (and column (point)))) + (funcall function element) + (when (and column + (> (current-column) max-column)) + (save-excursion + (delete-region before-sep-pos after-sep-pos) + (goto-char before-sep-pos) + (insert "\n"))))))))))) (defun guix-insert-button (label &optional type &rest properties) "Make button of TYPE with LABEL and insert it at point. diff --git a/emacs/local.mk b/emacs/local.mk index f83063cf5f..959ec2dd34 100644 --- a/emacs/local.mk +++ b/emacs/local.mk @@ -17,51 +17,51 @@ # You should have received a copy of the GNU General Public License # along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. -AUTOLOADS = emacs/guix-autoloads.el +AUTOLOADS = %D%/guix-autoloads.el ELFILES = \ - emacs/guix-about.el \ - emacs/guix-backend.el \ - emacs/guix-base.el \ - emacs/guix-build-log.el \ - emacs/guix-buffer.el \ - emacs/guix-command.el \ - emacs/guix-devel.el \ - emacs/guix-emacs.el \ - emacs/guix-entry.el \ - emacs/guix-external.el \ - emacs/guix-geiser.el \ - emacs/guix-guile.el \ - emacs/guix-help-vars.el \ - emacs/guix-history.el \ - emacs/guix-hydra.el \ - emacs/guix-hydra-build.el \ - emacs/guix-hydra-jobset.el \ - emacs/guix-info.el \ - emacs/guix-init.el \ - emacs/guix-license.el \ - emacs/guix-list.el \ - emacs/guix-location.el \ - emacs/guix-messages.el \ - emacs/guix-pcomplete.el \ - emacs/guix-popup.el \ - emacs/guix-prettify.el \ - emacs/guix-profiles.el \ - emacs/guix-read.el \ - emacs/guix-ui.el \ - emacs/guix-ui-license.el \ - emacs/guix-ui-location.el \ - emacs/guix-ui-package.el \ - emacs/guix-ui-generation.el \ - emacs/guix-ui-system-generation.el \ - emacs/guix-utils.el + %D%/guix-about.el \ + %D%/guix-backend.el \ + %D%/guix-base.el \ + %D%/guix-build-log.el \ + %D%/guix-buffer.el \ + %D%/guix-command.el \ + %D%/guix-devel.el \ + %D%/guix-emacs.el \ + %D%/guix-entry.el \ + %D%/guix-external.el \ + %D%/guix-geiser.el \ + %D%/guix-guile.el \ + %D%/guix-help-vars.el \ + %D%/guix-history.el \ + %D%/guix-hydra.el \ + %D%/guix-hydra-build.el \ + %D%/guix-hydra-jobset.el \ + %D%/guix-info.el \ + %D%/guix-init.el \ + %D%/guix-license.el \ + %D%/guix-list.el \ + %D%/guix-location.el \ + %D%/guix-messages.el \ + %D%/guix-pcomplete.el \ + %D%/guix-popup.el \ + %D%/guix-prettify.el \ + %D%/guix-profiles.el \ + %D%/guix-read.el \ + %D%/guix-ui.el \ + %D%/guix-ui-license.el \ + %D%/guix-ui-location.el \ + %D%/guix-ui-package.el \ + %D%/guix-ui-generation.el \ + %D%/guix-ui-system-generation.el \ + %D%/guix-utils.el if HAVE_EMACS dist_lisp_DATA = $(ELFILES) nodist_lisp_DATA = \ - emacs/guix-config.el \ + %D%/guix-config.el \ $(AUTOLOADS) $(AUTOLOADS): $(ELFILES) diff --git a/gnu/build/linux-container.scm b/gnu/build/linux-container.scm index ec68679f0b..91996d06ca 100644 --- a/gnu/build/linux-container.scm +++ b/gnu/build/linux-container.scm @@ -205,32 +205,53 @@ host user identifiers to map into the user namespace." ;; The parent process must initialize the user namespace for the child ;; before it can boot. To negotiate this, a pipe is used such that the ;; child process blocks until the parent writes to it. - (match (pipe) - ((in . out) + (match (socketpair PF_UNIX SOCK_STREAM 0) + ((child . parent) (let ((flags (namespaces->bit-mask namespaces))) (match (clone flags) (0 (call-with-clean-exit (lambda () - (close out) + (close-port parent) ;; Wait for parent to set things up. - (read in) - (close in) - (purify-environment) - (when (memq 'mnt namespaces) - (mount-file-systems root mounts - #:mount-/proc? (memq 'pid namespaces) - #:mount-/sys? (memq 'net namespaces))) - ;; TODO: Manage capabilities. - (thunk)))) + (match (read child) + ('ready + (purify-environment) + (when (memq 'mnt namespaces) + (catch #t + (lambda () + (mount-file-systems root mounts + #:mount-/proc? (memq 'pid namespaces) + #:mount-/sys? (memq 'net + namespaces))) + (lambda args + ;; Forward the exception to the parent process. + (write args child) + (primitive-exit 3)))) + ;; TODO: Manage capabilities. + (write 'ready child) + (close-port child) + (thunk)) + (_ ;parent died or something + (primitive-exit 2)))))) (pid + (close-port child) (when (memq 'user namespaces) (initialize-user-namespace pid host-uids)) ;; TODO: Initialize cgroups. - (close in) - (write 'ready out) - (close out) - pid)))))) + (write 'ready parent) + (newline parent) + + ;; Check whether the child process' setup phase succeeded. + (let ((message (read parent))) + (close-port parent) + (match message + ('ready ;success + pid) + (((? symbol? key) args ...) ;exception + (apply throw key args)) + (_ ;unexpected termination + #f))))))))) (define* (call-with-container mounts thunk #:key (namespaces %namespaces) (host-uids 1)) diff --git a/gnu/local.mk b/gnu/local.mk index 9121b1df40..ef7b4df7f9 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -26,814 +26,844 @@ GNU_SYSTEM_MODULES = \ gnu.scm \ - gnu/artwork.scm \ - gnu/packages.scm \ - gnu/packages/abduco.scm \ - gnu/packages/abiword.scm \ - gnu/packages/acct.scm \ - gnu/packages/acl.scm \ - gnu/packages/admin.scm \ - gnu/packages/adns.scm \ - gnu/packages/algebra.scm \ - gnu/packages/aidc.scm \ - gnu/packages/animation.scm \ - gnu/packages/anthy.scm \ - gnu/packages/apl.scm \ - gnu/packages/apr.scm \ - gnu/packages/aspell.scm \ - gnu/packages/attr.scm \ - gnu/packages/audacity.scm \ - gnu/packages/audio.scm \ - gnu/packages/augeas.scm \ - gnu/packages/autogen.scm \ - gnu/packages/autotools.scm \ - gnu/packages/avahi.scm \ - gnu/packages/avr.scm \ - gnu/packages/backup.scm \ - gnu/packages/base.scm \ - gnu/packages/bash.scm \ - gnu/packages/bdw-gc.scm \ - gnu/packages/bioinformatics.scm \ - gnu/packages/bittorrent.scm \ - gnu/packages/bison.scm \ - gnu/packages/boost.scm \ - gnu/packages/bootstrap.scm \ - gnu/packages/busybox.scm \ - gnu/packages/c.scm \ - gnu/packages/calcurse.scm \ - gnu/packages/ccache.scm \ - gnu/packages/cdrom.scm \ - gnu/packages/certs.scm \ - gnu/packages/check.scm \ - gnu/packages/ci.scm \ - gnu/packages/cmake.scm \ - gnu/packages/code.scm \ - gnu/packages/commencement.scm \ - gnu/packages/compression.scm \ - gnu/packages/conkeror.scm \ - gnu/packages/conky.scm \ - gnu/packages/connman.scm \ - gnu/packages/cook.scm \ - gnu/packages/cpio.scm \ - gnu/packages/cppi.scm \ - gnu/packages/cross-base.scm \ - gnu/packages/crypto.scm \ - gnu/packages/cryptsetup.scm \ - gnu/packages/cups.scm \ - gnu/packages/curl.scm \ - gnu/packages/cyrus-sasl.scm \ - gnu/packages/databases.scm \ - gnu/packages/datamash.scm \ - gnu/packages/datastructures.scm \ - gnu/packages/dav.scm \ - gnu/packages/dc.scm \ - gnu/packages/debug.scm \ - gnu/packages/dejagnu.scm \ - gnu/packages/dico.scm \ - gnu/packages/dictionaries.scm \ - gnu/packages/dillo.scm \ - gnu/packages/disk.scm \ - gnu/packages/djvu.scm \ - gnu/packages/dns.scm \ - gnu/packages/docbook.scm \ - gnu/packages/docker.scm \ - gnu/packages/documentation.scm \ - gnu/packages/dunst.scm \ - gnu/packages/dvtm.scm \ - gnu/packages/ebook.scm \ - gnu/packages/ed.scm \ - gnu/packages/elf.scm \ - gnu/packages/emacs.scm \ - gnu/packages/enchant.scm \ - gnu/packages/engineering.scm \ - gnu/packages/enlightenment.scm \ - gnu/packages/entr.scm \ - gnu/packages/fcitx.scm \ - gnu/packages/feh.scm \ - gnu/packages/figlet.scm \ - gnu/packages/file.scm \ - gnu/packages/finance.scm \ - gnu/packages/firmware.scm \ - gnu/packages/fish.scm \ - gnu/packages/flashing-tools.scm \ - gnu/packages/flex.scm \ - gnu/packages/fltk.scm \ - gnu/packages/fonts.scm \ - gnu/packages/fontutils.scm \ - gnu/packages/freedesktop.scm \ - gnu/packages/freeipmi.scm \ - gnu/packages/ftp.scm \ - gnu/packages/fribidi.scm \ - gnu/packages/fvwm.scm \ - gnu/packages/game-development.scm \ - gnu/packages/games.scm \ - gnu/packages/gawk.scm \ - gnu/packages/gcal.scm \ - gnu/packages/gcc.scm \ - gnu/packages/gd.scm \ - gnu/packages/gdb.scm \ - gnu/packages/geeqie.scm \ - gnu/packages/gettext.scm \ - gnu/packages/ghostscript.scm \ - gnu/packages/gimp.scm \ - gnu/packages/gkrellm.scm \ - gnu/packages/gl.scm \ - gnu/packages/glib.scm \ - gnu/packages/gnome.scm \ - gnu/packages/gnu-doc.scm \ - gnu/packages/gnucash.scm \ - gnu/packages/gnunet.scm \ - gnu/packages/gnupg.scm \ - gnu/packages/gnustep.scm \ - gnu/packages/gnuzilla.scm \ - gnu/packages/gnu-pw-mgr.scm \ - gnu/packages/gperf.scm \ - gnu/packages/gprolog.scm \ - gnu/packages/gps.scm \ - gnu/packages/graphics.scm \ - gnu/packages/graphviz.scm \ - gnu/packages/groff.scm \ - gnu/packages/grub.scm \ - gnu/packages/grue-hunter.scm \ - gnu/packages/gsasl.scm \ - gnu/packages/gstreamer.scm \ - gnu/packages/gtk.scm \ - gnu/packages/guile.scm \ - gnu/packages/guile-wm.scm \ - gnu/packages/gv.scm \ - gnu/packages/gxmessage.scm \ - gnu/packages/haskell.scm \ - gnu/packages/hugs.scm \ - gnu/packages/hurd.scm \ - gnu/packages/ibus.scm \ - gnu/packages/icu4c.scm \ - gnu/packages/idutils.scm \ - gnu/packages/image.scm \ - gnu/packages/imagemagick.scm \ - gnu/packages/indent.scm \ - gnu/packages/inklingreader.scm \ - gnu/packages/inkscape.scm \ - gnu/packages/irc.scm \ - gnu/packages/iso-codes.scm \ - gnu/packages/java.scm \ - gnu/packages/jemalloc.scm \ - gnu/packages/jrnl.scm \ - gnu/packages/julia.scm \ - gnu/packages/kde.scm \ - gnu/packages/kde-frameworks.scm \ - gnu/packages/key-mon.scm \ - gnu/packages/kodi.scm \ - gnu/packages/language.scm \ - gnu/packages/ldc.scm \ - gnu/packages/lego.scm \ - gnu/packages/less.scm \ - gnu/packages/lesstif.scm \ - gnu/packages/libbsd.scm \ - gnu/packages/libcanberra.scm \ - gnu/packages/libdaemon.scm \ - gnu/packages/libedit.scm \ - gnu/packages/libevent.scm \ - gnu/packages/libffcall.scm \ - gnu/packages/libffi.scm \ - gnu/packages/libftdi.scm \ - gnu/packages/calendar.scm \ - gnu/packages/libidn.scm \ - gnu/packages/libphidget.scm \ - gnu/packages/libreoffice.scm \ - gnu/packages/libsigsegv.scm \ - gnu/packages/libunistring.scm \ - gnu/packages/libusb.scm \ - gnu/packages/libunwind.scm \ - gnu/packages/libupnp.scm \ - gnu/packages/lightning.scm \ - gnu/packages/links.scm \ - gnu/packages/linux.scm \ - gnu/packages/lirc.scm \ - gnu/packages/lisp.scm \ - gnu/packages/llvm.scm \ - gnu/packages/lout.scm \ - gnu/packages/lsh.scm \ - gnu/packages/lsof.scm \ - gnu/packages/lua.scm \ - gnu/packages/lxde.scm \ - gnu/packages/lxqt.scm \ - gnu/packages/lynx.scm \ - gnu/packages/m4.scm \ - gnu/packages/machine-learning.scm \ - gnu/packages/man.scm \ - gnu/packages/mail.scm \ - gnu/packages/make-bootstrap.scm \ - gnu/packages/markdown.scm \ - gnu/packages/marst.scm \ - gnu/packages/mate.scm \ - gnu/packages/maths.scm \ - gnu/packages/mc.scm \ - gnu/packages/mcrypt.scm \ - gnu/packages/messaging.scm \ - gnu/packages/mg.scm \ - gnu/packages/mit-krb5.scm \ - gnu/packages/moe.scm \ - gnu/packages/moreutils.scm \ - gnu/packages/mpd.scm \ - gnu/packages/mp3.scm \ - gnu/packages/mpi.scm \ - gnu/packages/multiprecision.scm \ - gnu/packages/music.scm \ - gnu/packages/mtools.scm \ - gnu/packages/nano.scm \ - gnu/packages/ncdu.scm \ - gnu/packages/ncurses.scm \ - gnu/packages/netpbm.scm \ - gnu/packages/nettle.scm \ - gnu/packages/networking.scm \ - gnu/packages/ninja.scm \ - gnu/packages/node.scm \ - gnu/packages/noweb.scm \ - gnu/packages/ntp.scm \ - gnu/packages/nutrition.scm \ - gnu/packages/nvi.scm \ - gnu/packages/ocaml.scm \ - gnu/packages/ocr.scm \ - gnu/packages/onc-rpc.scm \ - gnu/packages/openbox.scm \ - gnu/packages/openldap.scm \ - gnu/packages/openstack.scm \ - gnu/packages/orpheus.scm \ - gnu/packages/ots.scm \ - gnu/packages/owncloud.scm \ - gnu/packages/package-management.scm \ - gnu/packages/parallel.scm \ - gnu/packages/password-utils.scm \ - gnu/packages/patchutils.scm \ - gnu/packages/pciutils.scm \ - gnu/packages/pcre.scm \ - gnu/packages/pdf.scm \ - gnu/packages/pem.scm \ - gnu/packages/perl.scm \ - gnu/packages/photo.scm \ - gnu/packages/pkg-config.scm \ - gnu/packages/plotutils.scm \ - gnu/packages/polkit.scm \ - gnu/packages/popt.scm \ - gnu/packages/pth.scm \ - gnu/packages/pulseaudio.scm \ - gnu/packages/pumpio.scm \ - gnu/packages/pretty-print.scm \ - gnu/packages/protobuf.scm \ - gnu/packages/pv.scm \ - gnu/packages/python.scm \ - gnu/packages/qemu.scm \ - gnu/packages/qt.scm \ - gnu/packages/ragel.scm \ - gnu/packages/ratpoison.scm \ - gnu/packages/rc.scm \ - gnu/packages/rdesktop.scm \ - gnu/packages/rdf.scm \ - gnu/packages/readline.scm \ - gnu/packages/rrdtool.scm \ - gnu/packages/rsync.scm \ - gnu/packages/ruby.scm \ - gnu/packages/rush.scm \ - gnu/packages/samba.scm \ - gnu/packages/sawfish.scm \ - gnu/packages/scanner.scm \ - gnu/packages/scheme.scm \ - gnu/packages/screen.scm \ - gnu/packages/scribus.scm \ - gnu/packages/sdl.scm \ - gnu/packages/search.scm \ - gnu/packages/serialization.scm \ - gnu/packages/serveez.scm \ - gnu/packages/shellutils.scm \ - gnu/packages/shishi.scm \ - gnu/packages/skarnet.scm \ - gnu/packages/skribilo.scm \ - gnu/packages/slang.scm \ - gnu/packages/slim.scm \ - gnu/packages/smalltalk.scm \ - gnu/packages/ssh.scm \ - gnu/packages/stalonetray.scm \ - gnu/packages/statistics.scm \ - gnu/packages/suckless.scm \ - gnu/packages/swig.scm \ - gnu/packages/sxiv.scm \ - gnu/packages/synergy.scm \ - gnu/packages/task-management.scm \ - gnu/packages/tbb.scm \ - gnu/packages/tcl.scm \ - gnu/packages/tcsh.scm \ - gnu/packages/telephony.scm \ - gnu/packages/terminals.scm \ - gnu/packages/texinfo.scm \ - gnu/packages/texlive.scm \ - gnu/packages/textutils.scm \ - gnu/packages/time.scm \ - gnu/packages/tls.scm \ - gnu/packages/tmux.scm \ - gnu/packages/tor.scm \ - gnu/packages/tre.scm \ - gnu/packages/tv.scm \ - gnu/packages/unrtf.scm \ - gnu/packages/upnp.scm \ - gnu/packages/uucp.scm \ - gnu/packages/valgrind.scm \ - gnu/packages/version-control.scm \ - gnu/packages/video.scm \ - gnu/packages/vim.scm \ - gnu/packages/vpn.scm \ - gnu/packages/vtk.scm \ - gnu/packages/w3m.scm \ - gnu/packages/wdiff.scm \ - gnu/packages/web.scm \ - gnu/packages/webkit.scm \ - gnu/packages/wget.scm \ - gnu/packages/wicd.scm \ - gnu/packages/wine.scm \ - gnu/packages/wm.scm \ - gnu/packages/wordnet.scm \ - gnu/packages/wv.scm \ - gnu/packages/wxwidgets.scm \ - gnu/packages/xfig.scm \ - gnu/packages/xiph.scm \ - gnu/packages/xml.scm \ - gnu/packages/xnee.scm \ - gnu/packages/xdisorg.scm \ - gnu/packages/xorg.scm \ - gnu/packages/xfce.scm \ - gnu/packages/yasm.scm \ - gnu/packages/yubico.scm \ - gnu/packages/zile.scm \ - gnu/packages/zip.scm \ - gnu/packages/zsh.scm \ + %D%/artwork.scm \ + %D%/packages.scm \ + %D%/packages/abduco.scm \ + %D%/packages/abiword.scm \ + %D%/packages/acct.scm \ + %D%/packages/acl.scm \ + %D%/packages/admin.scm \ + %D%/packages/adns.scm \ + %D%/packages/algebra.scm \ + %D%/packages/aidc.scm \ + %D%/packages/animation.scm \ + %D%/packages/anthy.scm \ + %D%/packages/apl.scm \ + %D%/packages/apr.scm \ + %D%/packages/aspell.scm \ + %D%/packages/attr.scm \ + %D%/packages/audacity.scm \ + %D%/packages/audio.scm \ + %D%/packages/augeas.scm \ + %D%/packages/autogen.scm \ + %D%/packages/autotools.scm \ + %D%/packages/avahi.scm \ + %D%/packages/avr.scm \ + %D%/packages/backup.scm \ + %D%/packages/base.scm \ + %D%/packages/bash.scm \ + %D%/packages/bdw-gc.scm \ + %D%/packages/bioinformatics.scm \ + %D%/packages/bittorrent.scm \ + %D%/packages/bison.scm \ + %D%/packages/boost.scm \ + %D%/packages/bootstrap.scm \ + %D%/packages/busybox.scm \ + %D%/packages/c.scm \ + %D%/packages/calcurse.scm \ + %D%/packages/ccache.scm \ + %D%/packages/cdrom.scm \ + %D%/packages/certs.scm \ + %D%/packages/check.scm \ + %D%/packages/ci.scm \ + %D%/packages/cmake.scm \ + %D%/packages/code.scm \ + %D%/packages/commencement.scm \ + %D%/packages/compression.scm \ + %D%/packages/conkeror.scm \ + %D%/packages/conky.scm \ + %D%/packages/connman.scm \ + %D%/packages/cook.scm \ + %D%/packages/cpio.scm \ + %D%/packages/cppi.scm \ + %D%/packages/cross-base.scm \ + %D%/packages/crypto.scm \ + %D%/packages/cryptsetup.scm \ + %D%/packages/cups.scm \ + %D%/packages/curl.scm \ + %D%/packages/cyrus-sasl.scm \ + %D%/packages/databases.scm \ + %D%/packages/datamash.scm \ + %D%/packages/datastructures.scm \ + %D%/packages/dav.scm \ + %D%/packages/dc.scm \ + %D%/packages/debug.scm \ + %D%/packages/dejagnu.scm \ + %D%/packages/dico.scm \ + %D%/packages/dictionaries.scm \ + %D%/packages/dillo.scm \ + %D%/packages/disk.scm \ + %D%/packages/djvu.scm \ + %D%/packages/dns.scm \ + %D%/packages/docbook.scm \ + %D%/packages/docker.scm \ + %D%/packages/documentation.scm \ + %D%/packages/dunst.scm \ + %D%/packages/dvtm.scm \ + %D%/packages/ebook.scm \ + %D%/packages/ed.scm \ + %D%/packages/elf.scm \ + %D%/packages/emacs.scm \ + %D%/packages/enchant.scm \ + %D%/packages/engineering.scm \ + %D%/packages/enlightenment.scm \ + %D%/packages/entr.scm \ + %D%/packages/fcitx.scm \ + %D%/packages/feh.scm \ + %D%/packages/figlet.scm \ + %D%/packages/file.scm \ + %D%/packages/finance.scm \ + %D%/packages/firmware.scm \ + %D%/packages/fish.scm \ + %D%/packages/flashing-tools.scm \ + %D%/packages/flex.scm \ + %D%/packages/fltk.scm \ + %D%/packages/fonts.scm \ + %D%/packages/fontutils.scm \ + %D%/packages/freedesktop.scm \ + %D%/packages/freeipmi.scm \ + %D%/packages/ftp.scm \ + %D%/packages/fribidi.scm \ + %D%/packages/fvwm.scm \ + %D%/packages/game-development.scm \ + %D%/packages/games.scm \ + %D%/packages/gawk.scm \ + %D%/packages/gcal.scm \ + %D%/packages/gcc.scm \ + %D%/packages/gd.scm \ + %D%/packages/gdb.scm \ + %D%/packages/geeqie.scm \ + %D%/packages/gettext.scm \ + %D%/packages/ghostscript.scm \ + %D%/packages/gimp.scm \ + %D%/packages/gkrellm.scm \ + %D%/packages/gl.scm \ + %D%/packages/glib.scm \ + %D%/packages/gnome.scm \ + %D%/packages/gnu-doc.scm \ + %D%/packages/gnucash.scm \ + %D%/packages/gnunet.scm \ + %D%/packages/gnupg.scm \ + %D%/packages/gnustep.scm \ + %D%/packages/gnuzilla.scm \ + %D%/packages/gnu-pw-mgr.scm \ + %D%/packages/gperf.scm \ + %D%/packages/gprolog.scm \ + %D%/packages/gps.scm \ + %D%/packages/graphics.scm \ + %D%/packages/graphviz.scm \ + %D%/packages/groff.scm \ + %D%/packages/grub.scm \ + %D%/packages/grue-hunter.scm \ + %D%/packages/gsasl.scm \ + %D%/packages/gstreamer.scm \ + %D%/packages/gtk.scm \ + %D%/packages/guile.scm \ + %D%/packages/guile-wm.scm \ + %D%/packages/gv.scm \ + %D%/packages/gxmessage.scm \ + %D%/packages/haskell.scm \ + %D%/packages/hugs.scm \ + %D%/packages/hurd.scm \ + %D%/packages/ibus.scm \ + %D%/packages/icu4c.scm \ + %D%/packages/idutils.scm \ + %D%/packages/image.scm \ + %D%/packages/imagemagick.scm \ + %D%/packages/indent.scm \ + %D%/packages/inklingreader.scm \ + %D%/packages/inkscape.scm \ + %D%/packages/irc.scm \ + %D%/packages/iso-codes.scm \ + %D%/packages/java.scm \ + %D%/packages/jemalloc.scm \ + %D%/packages/jrnl.scm \ + %D%/packages/julia.scm \ + %D%/packages/kde.scm \ + %D%/packages/kde-frameworks.scm \ + %D%/packages/key-mon.scm \ + %D%/packages/kodi.scm \ + %D%/packages/language.scm \ + %D%/packages/ldc.scm \ + %D%/packages/lego.scm \ + %D%/packages/less.scm \ + %D%/packages/lesstif.scm \ + %D%/packages/libbsd.scm \ + %D%/packages/libcanberra.scm \ + %D%/packages/libdaemon.scm \ + %D%/packages/libedit.scm \ + %D%/packages/libevent.scm \ + %D%/packages/libffcall.scm \ + %D%/packages/libffi.scm \ + %D%/packages/libftdi.scm \ + %D%/packages/calendar.scm \ + %D%/packages/libidn.scm \ + %D%/packages/libphidget.scm \ + %D%/packages/libreoffice.scm \ + %D%/packages/libsigsegv.scm \ + %D%/packages/libunistring.scm \ + %D%/packages/libusb.scm \ + %D%/packages/libunwind.scm \ + %D%/packages/libupnp.scm \ + %D%/packages/lightning.scm \ + %D%/packages/links.scm \ + %D%/packages/linux.scm \ + %D%/packages/lirc.scm \ + %D%/packages/lisp.scm \ + %D%/packages/llvm.scm \ + %D%/packages/lout.scm \ + %D%/packages/lsh.scm \ + %D%/packages/lsof.scm \ + %D%/packages/lua.scm \ + %D%/packages/lxde.scm \ + %D%/packages/lxqt.scm \ + %D%/packages/lynx.scm \ + %D%/packages/m4.scm \ + %D%/packages/machine-learning.scm \ + %D%/packages/man.scm \ + %D%/packages/mail.scm \ + %D%/packages/make-bootstrap.scm \ + %D%/packages/markdown.scm \ + %D%/packages/marst.scm \ + %D%/packages/mate.scm \ + %D%/packages/maths.scm \ + %D%/packages/mc.scm \ + %D%/packages/mcrypt.scm \ + %D%/packages/messaging.scm \ + %D%/packages/mg.scm \ + %D%/packages/mit-krb5.scm \ + %D%/packages/moe.scm \ + %D%/packages/moreutils.scm \ + %D%/packages/mpd.scm \ + %D%/packages/mp3.scm \ + %D%/packages/mpi.scm \ + %D%/packages/multiprecision.scm \ + %D%/packages/music.scm \ + %D%/packages/mtools.scm \ + %D%/packages/nano.scm \ + %D%/packages/ncdu.scm \ + %D%/packages/ncurses.scm \ + %D%/packages/netpbm.scm \ + %D%/packages/nettle.scm \ + %D%/packages/networking.scm \ + %D%/packages/ninja.scm \ + %D%/packages/node.scm \ + %D%/packages/noweb.scm \ + %D%/packages/ntp.scm \ + %D%/packages/nutrition.scm \ + %D%/packages/nvi.scm \ + %D%/packages/ocaml.scm \ + %D%/packages/ocr.scm \ + %D%/packages/onc-rpc.scm \ + %D%/packages/openbox.scm \ + %D%/packages/openldap.scm \ + %D%/packages/openstack.scm \ + %D%/packages/orpheus.scm \ + %D%/packages/ots.scm \ + %D%/packages/owncloud.scm \ + %D%/packages/package-management.scm \ + %D%/packages/parallel.scm \ + %D%/packages/password-utils.scm \ + %D%/packages/patchutils.scm \ + %D%/packages/pciutils.scm \ + %D%/packages/pcre.scm \ + %D%/packages/pdf.scm \ + %D%/packages/pem.scm \ + %D%/packages/perl.scm \ + %D%/packages/photo.scm \ + %D%/packages/pkg-config.scm \ + %D%/packages/plotutils.scm \ + %D%/packages/polkit.scm \ + %D%/packages/popt.scm \ + %D%/packages/pth.scm \ + %D%/packages/pulseaudio.scm \ + %D%/packages/pumpio.scm \ + %D%/packages/pretty-print.scm \ + %D%/packages/protobuf.scm \ + %D%/packages/pv.scm \ + %D%/packages/python.scm \ + %D%/packages/qemu.scm \ + %D%/packages/qt.scm \ + %D%/packages/ragel.scm \ + %D%/packages/rails.scm \ + %D%/packages/ratpoison.scm \ + %D%/packages/rc.scm \ + %D%/packages/rdesktop.scm \ + %D%/packages/rdf.scm \ + %D%/packages/readline.scm \ + %D%/packages/rrdtool.scm \ + %D%/packages/rsync.scm \ + %D%/packages/ruby.scm \ + %D%/packages/rush.scm \ + %D%/packages/samba.scm \ + %D%/packages/sawfish.scm \ + %D%/packages/scanner.scm \ + %D%/packages/scheme.scm \ + %D%/packages/screen.scm \ + %D%/packages/scribus.scm \ + %D%/packages/sdl.scm \ + %D%/packages/search.scm \ + %D%/packages/serialization.scm \ + %D%/packages/serveez.scm \ + %D%/packages/shellutils.scm \ + %D%/packages/shishi.scm \ + %D%/packages/skarnet.scm \ + %D%/packages/skribilo.scm \ + %D%/packages/slang.scm \ + %D%/packages/slim.scm \ + %D%/packages/smalltalk.scm \ + %D%/packages/speech.scm \ + %D%/packages/ssh.scm \ + %D%/packages/stalonetray.scm \ + %D%/packages/statistics.scm \ + %D%/packages/suckless.scm \ + %D%/packages/swig.scm \ + %D%/packages/sxiv.scm \ + %D%/packages/synergy.scm \ + %D%/packages/task-management.scm \ + %D%/packages/tbb.scm \ + %D%/packages/tcl.scm \ + %D%/packages/tcsh.scm \ + %D%/packages/telephony.scm \ + %D%/packages/terminals.scm \ + %D%/packages/texinfo.scm \ + %D%/packages/tex.scm \ + %D%/packages/textutils.scm \ + %D%/packages/time.scm \ + %D%/packages/tls.scm \ + %D%/packages/tmux.scm \ + %D%/packages/tor.scm \ + %D%/packages/tre.scm \ + %D%/packages/tv.scm \ + %D%/packages/unrtf.scm \ + %D%/packages/upnp.scm \ + %D%/packages/uucp.scm \ + %D%/packages/valgrind.scm \ + %D%/packages/version-control.scm \ + %D%/packages/video.scm \ + %D%/packages/vim.scm \ + %D%/packages/vpn.scm \ + %D%/packages/vtk.scm \ + %D%/packages/w3m.scm \ + %D%/packages/wdiff.scm \ + %D%/packages/web.scm \ + %D%/packages/webkit.scm \ + %D%/packages/wget.scm \ + %D%/packages/wicd.scm \ + %D%/packages/wine.scm \ + %D%/packages/wm.scm \ + %D%/packages/wordnet.scm \ + %D%/packages/wv.scm \ + %D%/packages/wxwidgets.scm \ + %D%/packages/xfig.scm \ + %D%/packages/xiph.scm \ + %D%/packages/xml.scm \ + %D%/packages/xnee.scm \ + %D%/packages/xdisorg.scm \ + %D%/packages/xorg.scm \ + %D%/packages/xfce.scm \ + %D%/packages/yasm.scm \ + %D%/packages/yubico.scm \ + %D%/packages/zile.scm \ + %D%/packages/zip.scm \ + %D%/packages/zsh.scm \ \ - gnu/services.scm \ - gnu/services/avahi.scm \ - gnu/services/base.scm \ - gnu/services/databases.scm \ - gnu/services/dbus.scm \ - gnu/services/desktop.scm \ - gnu/services/lirc.scm \ - gnu/services/mail.scm \ - gnu/services/networking.scm \ - gnu/services/shepherd.scm \ - gnu/services/herd.scm \ - gnu/services/ssh.scm \ - gnu/services/web.scm \ - gnu/services/xorg.scm \ + %D%/services.scm \ + %D%/services/avahi.scm \ + %D%/services/base.scm \ + %D%/services/databases.scm \ + %D%/services/dbus.scm \ + %D%/services/desktop.scm \ + %D%/services/dict.scm \ + %D%/services/lirc.scm \ + %D%/services/mail.scm \ + %D%/services/networking.scm \ + %D%/services/shepherd.scm \ + %D%/services/herd.scm \ + %D%/services/ssh.scm \ + %D%/services/web.scm \ + %D%/services/xorg.scm \ \ - gnu/system.scm \ - gnu/system/file-systems.scm \ - gnu/system/grub.scm \ - gnu/system/install.scm \ - gnu/system/linux-container.scm \ - gnu/system/linux-initrd.scm \ - gnu/system/locale.scm \ - gnu/system/mapped-devices.scm \ - gnu/system/nss.scm \ - gnu/system/pam.scm \ - gnu/system/shadow.scm \ - gnu/system/vm.scm \ + %D%/system.scm \ + %D%/system/file-systems.scm \ + %D%/system/grub.scm \ + %D%/system/install.scm \ + %D%/system/linux-container.scm \ + %D%/system/linux-initrd.scm \ + %D%/system/locale.scm \ + %D%/system/mapped-devices.scm \ + %D%/system/nss.scm \ + %D%/system/pam.scm \ + %D%/system/shadow.scm \ + %D%/system/vm.scm \ \ - gnu/build/activation.scm \ - gnu/build/file-systems.scm \ - gnu/build/install.scm \ - gnu/build/linux-boot.scm \ - gnu/build/linux-container.scm \ - gnu/build/linux-initrd.scm \ - gnu/build/linux-modules.scm \ - gnu/build/marionette.scm \ - gnu/build/vm.scm \ + %D%/build/activation.scm \ + %D%/build/file-systems.scm \ + %D%/build/install.scm \ + %D%/build/linux-boot.scm \ + %D%/build/linux-container.scm \ + %D%/build/linux-initrd.scm \ + %D%/build/linux-modules.scm \ + %D%/build/marionette.scm \ + %D%/build/vm.scm \ \ - gnu/tests.scm \ - gnu/tests/base.scm + %D%/tests.scm \ + %D%/tests/base.scm -patchdir = $(guilemoduledir)/gnu/packages/patches +patchdir = $(guilemoduledir)/%D%/packages/patches dist_patch_DATA = \ - gnu/packages/patches/4store-fix-buildsystem.patch \ - gnu/packages/patches/abiword-explictly-cast-bools.patch \ - gnu/packages/patches/abiword-wmf-version-lookup-fix.patch \ - gnu/packages/patches/acl-hurd-path-max.patch \ - gnu/packages/patches/aegis-constness-error.patch \ - gnu/packages/patches/aegis-perl-tempdir1.patch \ - gnu/packages/patches/aegis-perl-tempdir2.patch \ - gnu/packages/patches/aegis-test-fixup-1.patch \ - gnu/packages/patches/aegis-test-fixup-2.patch \ - gnu/packages/patches/agg-am_c_prototype.patch \ - gnu/packages/patches/alsa-lib-mips-atomic-fix.patch \ - gnu/packages/patches/apr-skip-getservbyname-test.patch \ - gnu/packages/patches/arb-ldconfig.patch \ - gnu/packages/patches/ath9k-htc-firmware-binutils.patch \ - gnu/packages/patches/ath9k-htc-firmware-gcc.patch \ - gnu/packages/patches/ath9k-htc-firmware-objcopy.patch \ - gnu/packages/patches/audacity-fix-ffmpeg-binding.patch \ - gnu/packages/patches/automake-skip-amhello-tests.patch \ - gnu/packages/patches/automake-regexp-syntax.patch \ - gnu/packages/patches/avahi-localstatedir.patch \ - gnu/packages/patches/avidemux-install-to-lib.patch \ - gnu/packages/patches/avrdude-fix-libusb.patch \ - gnu/packages/patches/bash-completion-directories.patch \ - gnu/packages/patches/bigloo-gc-shebangs.patch \ - gnu/packages/patches/binutils-ld-new-dtags.patch \ - gnu/packages/patches/binutils-loongson-workaround.patch \ - gnu/packages/patches/byobu-writable-status.patch \ - gnu/packages/patches/calibre-drop-unrar.patch \ - gnu/packages/patches/calibre-no-updates-dialog.patch \ - gnu/packages/patches/cdparanoia-fpic.patch \ - gnu/packages/patches/chmlib-inttypes.patch \ - gnu/packages/patches/clang-libc-search-path.patch \ - gnu/packages/patches/clucene-pkgconfig.patch \ - gnu/packages/patches/cmake-fix-tests.patch \ - gnu/packages/patches/cpio-gets-undeclared.patch \ - gnu/packages/patches/cpio-CVE-2016-2037.patch \ - gnu/packages/patches/cpufrequtils-fix-aclocal.patch \ - gnu/packages/patches/crda-optional-gcrypt.patch \ - gnu/packages/patches/crossmap-allow-system-pysam.patch \ - gnu/packages/patches/csound-header-ordering.patch \ - gnu/packages/patches/cssc-gets-undeclared.patch \ - gnu/packages/patches/cssc-missing-include.patch \ - gnu/packages/patches/clucene-contribs-lib.patch \ - gnu/packages/patches/cursynth-wave-rand.patch \ - gnu/packages/patches/dbus-helper-search-path.patch \ - gnu/packages/patches/dealii-p4est-interface.patch \ - gnu/packages/patches/devil-fix-libpng.patch \ - gnu/packages/patches/dico-libtool-deterministic.patch \ - gnu/packages/patches/diffutils-gets-undeclared.patch \ - gnu/packages/patches/dfu-programmer-fix-libusb.patch \ - gnu/packages/patches/doc++-include-directives.patch \ - gnu/packages/patches/doc++-segfault-fix.patch \ - gnu/packages/patches/doxygen-test.patch \ - gnu/packages/patches/duplicity-piped-password.patch \ - gnu/packages/patches/duplicity-test_selection-tmp.patch \ - gnu/packages/patches/elfutils-tests-ptrace.patch \ - gnu/packages/patches/einstein-build.patch \ - gnu/packages/patches/emacs-exec-path.patch \ - gnu/packages/patches/emacs-scheme-complete-scheme-r5rs-info.patch \ - gnu/packages/patches/emacs-source-date-epoch.patch \ - gnu/packages/patches/eudev-rules-directory.patch \ - gnu/packages/patches/evilwm-lost-focus-bug.patch \ - gnu/packages/patches/fastcap-mulGlobal.patch \ - gnu/packages/patches/fastcap-mulSetup.patch \ - gnu/packages/patches/fasthenry-spAllocate.patch \ - gnu/packages/patches/fasthenry-spBuild.patch \ - gnu/packages/patches/fasthenry-spUtils.patch \ - gnu/packages/patches/fasthenry-spSolve.patch \ - gnu/packages/patches/fasthenry-spFactor.patch \ - gnu/packages/patches/findutils-localstatedir.patch \ - gnu/packages/patches/findutils-test-xargs.patch \ - gnu/packages/patches/flashrom-use-libftdi1.patch \ - gnu/packages/patches/flint-ldconfig.patch \ - gnu/packages/patches/fltk-shared-lib-defines.patch \ - gnu/packages/patches/fltk-xfont-on-demand.patch \ - gnu/packages/patches/fontforge-svg-modtime.patch \ - gnu/packages/patches/fossil-test-fixes.patch \ - gnu/packages/patches/freeimage-CVE-2015-0852.patch \ - gnu/packages/patches/gawk-fts-test.patch \ - gnu/packages/patches/gawk-shell.patch \ - gnu/packages/patches/gcc-arm-link-spec-fix.patch \ - gnu/packages/patches/gcc-cross-environment-variables.patch \ - gnu/packages/patches/gcc-libvtv-runpath.patch \ - gnu/packages/patches/gcc-5.0-libvtv-runpath.patch \ - gnu/packages/patches/gd-CVE-2016-3074.patch \ - gnu/packages/patches/geoclue-config.patch \ - gnu/packages/patches/ghostscript-CVE-2015-3228.patch \ - gnu/packages/patches/ghostscript-runpath.patch \ - gnu/packages/patches/glib-networking-ssl-cert-file.patch \ - gnu/packages/patches/glib-tests-timer.patch \ - gnu/packages/patches/glibc-bootstrap-system.patch \ - gnu/packages/patches/glibc-ldd-x86_64.patch \ - gnu/packages/patches/glibc-locales.patch \ - gnu/packages/patches/glibc-o-largefile.patch \ - gnu/packages/patches/glibc-versioned-locpath.patch \ - gnu/packages/patches/gmp-arm-asm-nothumb.patch \ - gnu/packages/patches/gmp-faulty-test.patch \ - gnu/packages/patches/gnome-tweak-tool-search-paths.patch \ - gnu/packages/patches/gnucash-price-quotes-perl.patch \ - gnu/packages/patches/gobject-introspection-absolute-shlib-path.patch \ - gnu/packages/patches/gobject-introspection-cc.patch \ - gnu/packages/patches/gobject-introspection-girepository.patch \ - gnu/packages/patches/grep-timing-sensitive-test.patch \ - gnu/packages/patches/grub-CVE-2015-8370.patch \ - gnu/packages/patches/grub-gets-undeclared.patch \ - gnu/packages/patches/grub-freetype.patch \ - gnu/packages/patches/guile-1.8-cpp-4.5.patch \ - gnu/packages/patches/guile-arm-fixes.patch \ - gnu/packages/patches/guile-default-utf8.patch \ - gnu/packages/patches/guile-linux-syscalls.patch \ - gnu/packages/patches/guile-present-coding.patch \ - gnu/packages/patches/guile-relocatable.patch \ - gnu/packages/patches/guile-rsvg-pkgconfig.patch \ - gnu/packages/patches/gtk2-respect-GUIX_GTK2_PATH.patch \ - gnu/packages/patches/gtk2-theme-paths.patch \ - gnu/packages/patches/gtk3-respect-GUIX_GTK3_PATH.patch \ - gnu/packages/patches/gtkglext-disable-disable-deprecated.patch \ - gnu/packages/patches/hdf5-config-date.patch \ - gnu/packages/patches/hop-bigloo-4.0b.patch \ - gnu/packages/patches/hop-linker-flags.patch \ - gnu/packages/patches/hydra-automake-1.15.patch \ - gnu/packages/patches/hydra-disable-darcs-test.patch \ - gnu/packages/patches/hypre-doc-tables.patch \ - gnu/packages/patches/hypre-ldflags.patch \ - gnu/packages/patches/icecat-avoid-bundled-includes.patch \ - gnu/packages/patches/icu4c-CVE-2014-6585.patch \ - gnu/packages/patches/icu4c-CVE-2015-1270.patch \ - gnu/packages/patches/icu4c-CVE-2015-4760.patch \ - gnu/packages/patches/ilmbase-fix-tests.patch \ - gnu/packages/patches/inkscape-drop-wait-for-targets.patch \ - gnu/packages/patches/irrlicht-mesa-10.patch \ - gnu/packages/patches/jasper-CVE-2007-2721.patch \ - gnu/packages/patches/jasper-CVE-2008-3520.patch \ - gnu/packages/patches/jasper-CVE-2008-3522.patch \ - gnu/packages/patches/jasper-CVE-2011-4516-and-CVE-2011-4517.patch \ - gnu/packages/patches/jasper-CVE-2014-8137.patch \ - gnu/packages/patches/jasper-CVE-2014-8138.patch \ - gnu/packages/patches/jasper-CVE-2014-8157.patch \ - gnu/packages/patches/jasper-CVE-2014-8158.patch \ - gnu/packages/patches/jasper-CVE-2014-9029.patch \ - gnu/packages/patches/jasper-CVE-2016-1577.patch \ - gnu/packages/patches/jasper-CVE-2016-1867.patch \ - gnu/packages/patches/jasper-CVE-2016-2089.patch \ - gnu/packages/patches/jasper-CVE-2016-2116.patch \ - gnu/packages/patches/jbig2dec-ignore-testtest.patch \ - gnu/packages/patches/kmod-module-directory.patch \ - gnu/packages/patches/ldc-disable-tests.patch \ - gnu/packages/patches/lftp-dont-save-unknown-host-fingerprint.patch \ - gnu/packages/patches/liba52-enable-pic.patch \ - gnu/packages/patches/liba52-link-with-libm.patch \ - gnu/packages/patches/liba52-set-soname.patch \ - gnu/packages/patches/liba52-use-mtune-not-mcpu.patch \ - gnu/packages/patches/libbonobo-activation-test-race.patch \ - gnu/packages/patches/libcanberra-sound-theme-freedesktop.patch \ - gnu/packages/patches/libcmis-fix-test-onedrive.patch \ - gnu/packages/patches/libdrm-symbol-check.patch \ - gnu/packages/patches/libevent-dns-tests.patch \ - gnu/packages/patches/libextractor-ffmpeg-3.patch \ - gnu/packages/patches/libmtp-devices.patch \ - gnu/packages/patches/liboop-mips64-deplibs-fix.patch \ - gnu/packages/patches/libotr-test-auth-fix.patch \ - gnu/packages/patches/liblxqt-include.patch \ - gnu/packages/patches/libmad-armv7-thumb-pt1.patch \ - gnu/packages/patches/libmad-armv7-thumb-pt2.patch \ - gnu/packages/patches/libmad-frame-length.patch \ - gnu/packages/patches/libmad-mips-newgcc.patch \ - gnu/packages/patches/libssh-0.6.5-CVE-2016-0739.patch \ - gnu/packages/patches/libtheora-config-guess.patch \ - gnu/packages/patches/libtiff-CVE-2015-8665+CVE-2015-8683.patch \ - gnu/packages/patches/libtiff-oob-accesses-in-decode.patch \ - gnu/packages/patches/libtiff-oob-write-in-nextdecode.patch \ - gnu/packages/patches/libtool-skip-tests2.patch \ - gnu/packages/patches/libunwind-CVE-2015-3239.patch \ - gnu/packages/patches/libwmf-CAN-2004-0941.patch \ - gnu/packages/patches/libwmf-CVE-2006-3376.patch \ - gnu/packages/patches/libwmf-CVE-2007-0455.patch \ - gnu/packages/patches/libwmf-CVE-2007-2756.patch \ - gnu/packages/patches/libwmf-CVE-2007-3472.patch \ - gnu/packages/patches/libwmf-CVE-2007-3473.patch \ - gnu/packages/patches/libwmf-CVE-2007-3477.patch \ - gnu/packages/patches/libwmf-CVE-2009-1364.patch \ - gnu/packages/patches/libwmf-CVE-2009-3546.patch \ - gnu/packages/patches/libwmf-CVE-2015-0848+CVE-2015-4588.patch \ - gnu/packages/patches/libwmf-CVE-2015-4695.patch \ - gnu/packages/patches/libwmf-CVE-2015-4696.patch \ - gnu/packages/patches/libxslt-CVE-2015-7995.patch \ - gnu/packages/patches/libxslt-generated-ids.patch \ - gnu/packages/patches/libxslt-remove-date-timestamps.patch \ - gnu/packages/patches/lirc-localstatedir.patch \ - gnu/packages/patches/lm-sensors-hwmon-attrs.patch \ - gnu/packages/patches/lua-pkgconfig.patch \ - gnu/packages/patches/lua51-liblua-so.patch \ - gnu/packages/patches/lua52-liblua-so.patch \ - gnu/packages/patches/luajit-no_ldconfig.patch \ - gnu/packages/patches/luajit-symlinks.patch \ - gnu/packages/patches/luit-posix.patch \ - gnu/packages/patches/m4-gets-undeclared.patch \ - gnu/packages/patches/make-impure-dirs.patch \ - gnu/packages/patches/mars-install.patch \ - gnu/packages/patches/mars-sfml-2.3.patch \ - gnu/packages/patches/matplotlib-setupext-tk.patch \ - gnu/packages/patches/maxima-defsystem-mkdir.patch \ - gnu/packages/patches/mcron-install.patch \ - gnu/packages/patches/mhash-keygen-test-segfault.patch \ - gnu/packages/patches/mit-krb5-CVE-2015-8629.patch \ - gnu/packages/patches/mit-krb5-CVE-2015-8630.patch \ - gnu/packages/patches/mit-krb5-CVE-2015-8631.patch \ - gnu/packages/patches/mit-krb5-init-context-null-spnego.patch \ - gnu/packages/patches/mpc123-initialize-ao.patch \ - gnu/packages/patches/mplayer2-theora-fix.patch \ - gnu/packages/patches/module-init-tools-moduledir.patch \ - gnu/packages/patches/mumps-build-parallelism.patch \ - gnu/packages/patches/mupen64plus-ui-console-notice.patch \ - gnu/packages/patches/mutt-store-references.patch \ - gnu/packages/patches/net-tools-bitrot.patch \ - gnu/packages/patches/netcdf-config-date.patch \ - gnu/packages/patches/ngircd-handle-zombies.patch \ - gnu/packages/patches/ngircd-no-dns-in-tests.patch \ - gnu/packages/patches/ninja-tests.patch \ - gnu/packages/patches/ninja-zero-mtime.patch \ - gnu/packages/patches/nss-pkgconfig.patch \ - gnu/packages/patches/nvi-assume-preserve-path.patch \ - gnu/packages/patches/nvi-dbpagesize-binpower.patch \ - gnu/packages/patches/nvi-db4.patch \ - gnu/packages/patches/ocaml-CVE-2015-8869.patch \ - gnu/packages/patches/ocaml-findlib-make-install.patch \ - gnu/packages/patches/openexr-missing-samples.patch \ - gnu/packages/patches/openimageio-boost-1.60.patch \ - gnu/packages/patches/openjpeg-CVE-2015-6581.patch \ - gnu/packages/patches/openjpeg-use-after-free-fix.patch \ - gnu/packages/patches/openssh-CVE-2015-8325.patch \ - gnu/packages/patches/openssl-runpath.patch \ - gnu/packages/patches/openssl-c-rehash-in.patch \ - gnu/packages/patches/orpheus-cast-errors-and-includes.patch \ - gnu/packages/patches/ots-no-include-missing-file.patch \ - gnu/packages/patches/patchelf-page-size.patch \ - gnu/packages/patches/patchelf-rework-for-arm.patch \ - gnu/packages/patches/patchutils-xfail-gendiff-tests.patch \ - gnu/packages/patches/patch-hurd-path-max.patch \ - gnu/packages/patches/pcre-CVE-2016-3191.patch \ - gnu/packages/patches/perl-CVE-2015-8607.patch \ - gnu/packages/patches/perl-CVE-2016-2381.patch \ - gnu/packages/patches/perl-autosplit-default-time.patch \ - gnu/packages/patches/perl-deterministic-ordering.patch \ - gnu/packages/patches/perl-finance-quote-unuse-mozilla-ca.patch \ - gnu/packages/patches/perl-gd-options-passthrough-and-fontconfig.patch \ - gnu/packages/patches/perl-io-socket-ssl-openssl-1.0.2f-fix.patch \ - gnu/packages/patches/perl-net-amazon-s3-moose-warning.patch \ - gnu/packages/patches/perl-net-ssleay-disable-ede-test.patch \ - gnu/packages/patches/perl-no-build-time.patch \ - gnu/packages/patches/perl-no-sys-dirs.patch \ - gnu/packages/patches/perl-module-pluggable-search.patch \ - gnu/packages/patches/perl-source-date-epoch.patch \ - gnu/packages/patches/pidgin-add-search-path.patch \ - gnu/packages/patches/pinball-const-fix.patch \ - gnu/packages/patches/pinball-cstddef.patch \ - gnu/packages/patches/pinball-missing-separators.patch \ - gnu/packages/patches/pinball-src-deps.patch \ - gnu/packages/patches/pinball-system-ltdl.patch \ - gnu/packages/patches/pingus-sdl-libs-config.patch \ - gnu/packages/patches/plink-1.07-unclobber-i.patch \ - gnu/packages/patches/plotutils-libpng-jmpbuf.patch \ - gnu/packages/patches/polkit-drop-test.patch \ - gnu/packages/patches/portaudio-audacity-compat.patch \ - gnu/packages/patches/portmidi-modular-build.patch \ - gnu/packages/patches/procmail-ambiguous-getline-debian.patch \ - gnu/packages/patches/procps-non-linux.patch \ - gnu/packages/patches/pt-scotch-build-parallelism.patch \ - gnu/packages/patches/pulseaudio-fix-mult-test.patch \ - gnu/packages/patches/pulseaudio-longer-test-timeout.patch \ - gnu/packages/patches/pycairo-wscript.patch \ - gnu/packages/patches/pybugz-encode-error.patch \ - gnu/packages/patches/pybugz-stty.patch \ - gnu/packages/patches/pygpgme-disable-problematic-tests.patch \ - gnu/packages/patches/pyqt-configure.patch \ - gnu/packages/patches/python-2-deterministic-build-info.patch \ - gnu/packages/patches/python-2.7-search-paths.patch \ - gnu/packages/patches/python-2.7-source-date-epoch.patch \ - gnu/packages/patches/python-3-deterministic-build-info.patch \ - gnu/packages/patches/python-3-search-paths.patch \ - gnu/packages/patches/python-disable-ssl-test.patch \ - gnu/packages/patches/python-fix-tests.patch \ - gnu/packages/patches/python-ipython-inputhook-ctype.patch \ - gnu/packages/patches/python-rarfile-fix-tests.patch \ - gnu/packages/patches/python2-rdflib-drop-sparqlwrapper.patch \ - gnu/packages/patches/python-configobj-setuptools.patch \ - gnu/packages/patches/python-paste-remove-website-test.patch \ - gnu/packages/patches/python-paste-remove-timing-test.patch \ - gnu/packages/patches/python2-pygobject-2-gi-info-type-error-domain.patch \ - gnu/packages/patches/qt4-ldflags.patch \ - gnu/packages/patches/ratpoison-shell.patch \ - gnu/packages/patches/readline-link-ncurses.patch \ - gnu/packages/patches/ripperx-missing-file.patch \ - gnu/packages/patches/rsem-makefile.patch \ - gnu/packages/patches/ruby-symlinkfix.patch \ - gnu/packages/patches/sed-hurd-path-max.patch \ - gnu/packages/patches/scheme48-tests.patch \ - gnu/packages/patches/scotch-test-threading.patch \ - gnu/packages/patches/sdl-libx11-1.6.patch \ - gnu/packages/patches/serf-comment-style-fix.patch \ - gnu/packages/patches/serf-deflate-buckets-test-fix.patch \ - gnu/packages/patches/slim-session.patch \ - gnu/packages/patches/slim-config.patch \ - gnu/packages/patches/slim-sigusr1.patch \ - gnu/packages/patches/slurm-configure-remove-nonfree-contribs.patch \ - gnu/packages/patches/soprano-find-clucene.patch \ - gnu/packages/patches/sudo-CVE-2015-5602.patch \ - gnu/packages/patches/superlu-dist-scotchmetis.patch \ - gnu/packages/patches/synfig-build-fix.patch \ - gnu/packages/patches/tar-skip-unreliable-tests.patch \ - gnu/packages/patches/tcl-mkindex-deterministic.patch \ - gnu/packages/patches/tclxml-3.2-install.patch \ - gnu/packages/patches/tcsh-fix-autotest.patch \ - gnu/packages/patches/texi2html-document-encoding.patch \ - gnu/packages/patches/texi2html-i18n.patch \ - gnu/packages/patches/tidy-CVE-2015-5522+5523.patch \ - gnu/packages/patches/tinyxml-use-stl.patch \ - gnu/packages/patches/tk-find-library.patch \ - gnu/packages/patches/ttf2eot-cstddef.patch \ - gnu/packages/patches/ttfautohint-source-date-epoch.patch \ - gnu/packages/patches/tophat-build-with-later-seqan.patch \ - gnu/packages/patches/torsocks-dns-test.patch \ - gnu/packages/patches/totem-debug-format-fix.patch \ - gnu/packages/patches/unzip-CVE-2014-8139.patch \ - gnu/packages/patches/unzip-CVE-2014-8140.patch \ - gnu/packages/patches/unzip-CVE-2014-8141.patch \ - gnu/packages/patches/unzip-CVE-2014-9636.patch \ - gnu/packages/patches/unzip-CVE-2015-7696.patch \ - gnu/packages/patches/unzip-CVE-2015-7697.patch \ - gnu/packages/patches/unzip-allow-greater-hostver-values.patch \ - gnu/packages/patches/unzip-attribs-overflow.patch \ - gnu/packages/patches/unzip-overflow-on-invalid-input.patch \ - gnu/packages/patches/unzip-format-secure.patch \ - gnu/packages/patches/unzip-initialize-symlink-flag.patch \ - gnu/packages/patches/unzip-overflow-long-fsize.patch \ - gnu/packages/patches/unzip-remove-build-date.patch \ - gnu/packages/patches/util-linux-tests.patch \ - gnu/packages/patches/upower-builddir.patch \ - gnu/packages/patches/valgrind-enable-arm.patch \ - gnu/packages/patches/vorbis-tools-CVE-2015-6749.patch \ - gnu/packages/patches/vpnc-script.patch \ - gnu/packages/patches/vtk-mesa-10.patch \ - gnu/packages/patches/w3m-libgc.patch \ - gnu/packages/patches/w3m-force-ssl_verify_server-on.patch \ - gnu/packages/patches/w3m-disable-sslv2-and-sslv3.patch \ - gnu/packages/patches/w3m-disable-weak-ciphers.patch \ - gnu/packages/patches/weechat-python.patch \ - gnu/packages/patches/weex-vacopy.patch \ - gnu/packages/patches/wicd-bitrate-none-fix.patch \ - gnu/packages/patches/wicd-get-selected-profile-fix.patch \ - gnu/packages/patches/wicd-urwid-1.3.patch \ - gnu/packages/patches/wicd-wpa2-ttls.patch \ - gnu/packages/patches/wmctrl-64-fix.patch \ - gnu/packages/patches/woff2-libbrotli.patch \ - gnu/packages/patches/wpa-supplicant-CVE-2015-5310.patch \ - gnu/packages/patches/wpa-supplicant-CVE-2015-5314.patch \ - gnu/packages/patches/wpa-supplicant-CVE-2015-5315.patch \ - gnu/packages/patches/wpa-supplicant-CVE-2015-5316.patch \ - gnu/packages/patches/wpa-supplicant-CVE-2016-4476.patch \ - gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt1.patch \ - gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt2.patch \ - gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt3.patch \ - gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt4.patch \ - gnu/packages/patches/xdotool-fix-makefile.patch \ - gnu/packages/patches/xf86-video-ark-remove-mibstore.patch \ - gnu/packages/patches/xf86-video-ast-remove-mibstore.patch \ - gnu/packages/patches/xf86-video-geode-glibc-2.20.patch \ - gnu/packages/patches/xf86-video-glint-remove-mibstore.patch \ - gnu/packages/patches/xf86-video-i128-remove-mibstore.patch \ - gnu/packages/patches/xf86-video-intel-compat-api.patch \ - gnu/packages/patches/xf86-video-intel-glibc-2.20.patch \ - gnu/packages/patches/xf86-video-mach64-glibc-2.20.patch \ - gnu/packages/patches/xf86-video-nv-remove-mibstore.patch \ - gnu/packages/patches/xf86-video-openchrome-glibc-2.20.patch \ - gnu/packages/patches/xf86-video-tga-remove-mibstore.patch \ - gnu/packages/patches/xfce4-panel-plugins.patch \ - gnu/packages/patches/xfce4-session-fix-xflock4.patch \ - gnu/packages/patches/xfce4-settings-defaults.patch \ - gnu/packages/patches/xmodmap-asprintf.patch \ - gnu/packages/patches/zathura-plugindir-environment-variable.patch + %D%/packages/patches/4store-fix-buildsystem.patch \ + %D%/packages/patches/a2ps-CVE-2001-1593.patch \ + %D%/packages/patches/a2ps-CVE-2014-0466.patch \ + %D%/packages/patches/abiword-explictly-cast-bools.patch \ + %D%/packages/patches/abiword-wmf-version-lookup-fix.patch \ + %D%/packages/patches/acl-hurd-path-max.patch \ + %D%/packages/patches/aegis-constness-error.patch \ + %D%/packages/patches/aegis-perl-tempdir1.patch \ + %D%/packages/patches/aegis-perl-tempdir2.patch \ + %D%/packages/patches/aegis-test-fixup-1.patch \ + %D%/packages/patches/aegis-test-fixup-2.patch \ + %D%/packages/patches/agg-am_c_prototype.patch \ + %D%/packages/patches/alsa-lib-mips-atomic-fix.patch \ + %D%/packages/patches/antiword-CVE-2014-8123.patch \ + %D%/packages/patches/apr-skip-getservbyname-test.patch \ + %D%/packages/patches/arb-ldconfig.patch \ + %D%/packages/patches/ath9k-htc-firmware-binutils.patch \ + %D%/packages/patches/ath9k-htc-firmware-gcc.patch \ + %D%/packages/patches/ath9k-htc-firmware-objcopy.patch \ + %D%/packages/patches/audacity-fix-ffmpeg-binding.patch \ + %D%/packages/patches/automake-skip-amhello-tests.patch \ + %D%/packages/patches/automake-regexp-syntax.patch \ + %D%/packages/patches/avahi-localstatedir.patch \ + %D%/packages/patches/avidemux-install-to-lib.patch \ + %D%/packages/patches/avrdude-fix-libusb.patch \ + %D%/packages/patches/bash-completion-directories.patch \ + %D%/packages/patches/bigloo-gc-shebangs.patch \ + %D%/packages/patches/binutils-ld-new-dtags.patch \ + %D%/packages/patches/binutils-loongson-workaround.patch \ + %D%/packages/patches/byobu-writable-status.patch \ + %D%/packages/patches/calibre-drop-unrar.patch \ + %D%/packages/patches/calibre-no-updates-dialog.patch \ + %D%/packages/patches/cdparanoia-fpic.patch \ + %D%/packages/patches/chmlib-inttypes.patch \ + %D%/packages/patches/clang-libc-search-path.patch \ + %D%/packages/patches/clucene-pkgconfig.patch \ + %D%/packages/patches/cmake-fix-tests.patch \ + %D%/packages/patches/cpio-gets-undeclared.patch \ + %D%/packages/patches/cpio-CVE-2016-2037.patch \ + %D%/packages/patches/cpufrequtils-fix-aclocal.patch \ + %D%/packages/patches/crda-optional-gcrypt.patch \ + %D%/packages/patches/crossmap-allow-system-pysam.patch \ + %D%/packages/patches/csound-header-ordering.patch \ + %D%/packages/patches/cssc-gets-undeclared.patch \ + %D%/packages/patches/cssc-missing-include.patch \ + %D%/packages/patches/clucene-contribs-lib.patch \ + %D%/packages/patches/cursynth-wave-rand.patch \ + %D%/packages/patches/dbus-helper-search-path.patch \ + %D%/packages/patches/dealii-p4est-interface.patch \ + %D%/packages/patches/devil-CVE-2009-3994.patch \ + %D%/packages/patches/devil-fix-libpng.patch \ + %D%/packages/patches/dico-libtool-deterministic.patch \ + %D%/packages/patches/diffutils-gets-undeclared.patch \ + %D%/packages/patches/dfu-programmer-fix-libusb.patch \ + %D%/packages/patches/doc++-include-directives.patch \ + %D%/packages/patches/doc++-segfault-fix.patch \ + %D%/packages/patches/doxygen-test.patch \ + %D%/packages/patches/duplicity-piped-password.patch \ + %D%/packages/patches/duplicity-test_selection-tmp.patch \ + %D%/packages/patches/elfutils-tests-ptrace.patch \ + %D%/packages/patches/einstein-build.patch \ + %D%/packages/patches/emacs-exec-path.patch \ + %D%/packages/patches/emacs-fix-scheme-indent-function.patch \ + %D%/packages/patches/emacs-scheme-complete-scheme-r5rs-info.patch \ + %D%/packages/patches/emacs-source-date-epoch.patch \ + %D%/packages/patches/eudev-rules-directory.patch \ + %D%/packages/patches/evilwm-lost-focus-bug.patch \ + %D%/packages/patches/expat-CVE-2015-1283-refix.patch \ + %D%/packages/patches/expat-CVE-2016-0718.patch \ + %D%/packages/patches/fastcap-mulGlobal.patch \ + %D%/packages/patches/fastcap-mulSetup.patch \ + %D%/packages/patches/fasthenry-spAllocate.patch \ + %D%/packages/patches/fasthenry-spBuild.patch \ + %D%/packages/patches/fasthenry-spUtils.patch \ + %D%/packages/patches/fasthenry-spSolve.patch \ + %D%/packages/patches/fasthenry-spFactor.patch \ + %D%/packages/patches/findutils-localstatedir.patch \ + %D%/packages/patches/findutils-test-xargs.patch \ + %D%/packages/patches/flashrom-use-libftdi1.patch \ + %D%/packages/patches/flint-ldconfig.patch \ + %D%/packages/patches/fltk-shared-lib-defines.patch \ + %D%/packages/patches/fltk-xfont-on-demand.patch \ + %D%/packages/patches/fontforge-svg-modtime.patch \ + %D%/packages/patches/fossil-test-fixes.patch \ + %D%/packages/patches/freeimage-CVE-2015-0852.patch \ + %D%/packages/patches/gawk-fts-test.patch \ + %D%/packages/patches/gawk-shell.patch \ + %D%/packages/patches/gcc-arm-link-spec-fix.patch \ + %D%/packages/patches/gcc-cross-environment-variables.patch \ + %D%/packages/patches/gcc-libvtv-runpath.patch \ + %D%/packages/patches/gcc-5.0-libvtv-runpath.patch \ + %D%/packages/patches/gegl-CVE-2012-4433.patch \ + %D%/packages/patches/geoclue-config.patch \ + %D%/packages/patches/ghostscript-CVE-2015-3228.patch \ + %D%/packages/patches/ghostscript-runpath.patch \ + %D%/packages/patches/glib-networking-ssl-cert-file.patch \ + %D%/packages/patches/glib-tests-timer.patch \ + %D%/packages/patches/glibc-bootstrap-system.patch \ + %D%/packages/patches/glibc-ldd-x86_64.patch \ + %D%/packages/patches/glibc-locales.patch \ + %D%/packages/patches/glibc-o-largefile.patch \ + %D%/packages/patches/glibc-versioned-locpath.patch \ + %D%/packages/patches/gmp-arm-asm-nothumb.patch \ + %D%/packages/patches/gmp-faulty-test.patch \ + %D%/packages/patches/gnome-tweak-tool-search-paths.patch \ + %D%/packages/patches/gnucash-price-quotes-perl.patch \ + %D%/packages/patches/gobject-introspection-absolute-shlib-path.patch \ + %D%/packages/patches/gobject-introspection-cc.patch \ + %D%/packages/patches/gobject-introspection-girepository.patch \ + %D%/packages/patches/grep-timing-sensitive-test.patch \ + %D%/packages/patches/grub-CVE-2015-8370.patch \ + %D%/packages/patches/grub-gets-undeclared.patch \ + %D%/packages/patches/grub-freetype.patch \ + %D%/packages/patches/guile-1.8-cpp-4.5.patch \ + %D%/packages/patches/guile-arm-fixes.patch \ + %D%/packages/patches/guile-default-utf8.patch \ + %D%/packages/patches/guile-linux-syscalls.patch \ + %D%/packages/patches/guile-present-coding.patch \ + %D%/packages/patches/guile-relocatable.patch \ + %D%/packages/patches/guile-rsvg-pkgconfig.patch \ + %D%/packages/patches/gtk2-respect-GUIX_GTK2_PATH.patch \ + %D%/packages/patches/gtk2-theme-paths.patch \ + %D%/packages/patches/gtk3-respect-GUIX_GTK3_PATH.patch \ + %D%/packages/patches/gtkglext-disable-disable-deprecated.patch \ + %D%/packages/patches/hdf5-config-date.patch \ + %D%/packages/patches/hop-bigloo-4.0b.patch \ + %D%/packages/patches/hop-linker-flags.patch \ + %D%/packages/patches/hydra-automake-1.15.patch \ + %D%/packages/patches/hydra-disable-darcs-test.patch \ + %D%/packages/patches/hypre-doc-tables.patch \ + %D%/packages/patches/hypre-ldflags.patch \ + %D%/packages/patches/icecat-avoid-bundled-includes.patch \ + %D%/packages/patches/icedtea-remove-overrides.patch \ + %D%/packages/patches/icu4c-CVE-2014-6585.patch \ + %D%/packages/patches/icu4c-CVE-2015-1270.patch \ + %D%/packages/patches/icu4c-CVE-2015-4760.patch \ + %D%/packages/patches/id3lib-CVE-2007-4460.patch \ + %D%/packages/patches/ilmbase-fix-tests.patch \ + %D%/packages/patches/inkscape-drop-wait-for-targets.patch \ + %D%/packages/patches/irrlicht-mesa-10.patch \ + %D%/packages/patches/jansson-CVE-2016-4425.patch \ + %D%/packages/patches/jasper-CVE-2007-2721.patch \ + %D%/packages/patches/jasper-CVE-2008-3520.patch \ + %D%/packages/patches/jasper-CVE-2008-3522.patch \ + %D%/packages/patches/jasper-CVE-2011-4516-and-CVE-2011-4517.patch \ + %D%/packages/patches/jasper-CVE-2014-8137.patch \ + %D%/packages/patches/jasper-CVE-2014-8138.patch \ + %D%/packages/patches/jasper-CVE-2014-8157.patch \ + %D%/packages/patches/jasper-CVE-2014-8158.patch \ + %D%/packages/patches/jasper-CVE-2014-9029.patch \ + %D%/packages/patches/jasper-CVE-2016-1577.patch \ + %D%/packages/patches/jasper-CVE-2016-1867.patch \ + %D%/packages/patches/jasper-CVE-2016-2089.patch \ + %D%/packages/patches/jasper-CVE-2016-2116.patch \ + %D%/packages/patches/jbig2dec-ignore-testtest.patch \ + %D%/packages/patches/kmod-module-directory.patch \ + %D%/packages/patches/ldc-disable-tests.patch \ + %D%/packages/patches/lftp-dont-save-unknown-host-fingerprint.patch \ + %D%/packages/patches/liba52-enable-pic.patch \ + %D%/packages/patches/liba52-link-with-libm.patch \ + %D%/packages/patches/liba52-set-soname.patch \ + %D%/packages/patches/liba52-use-mtune-not-mcpu.patch \ + %D%/packages/patches/libbonobo-activation-test-race.patch \ + %D%/packages/patches/libcanberra-sound-theme-freedesktop.patch \ + %D%/packages/patches/libcmis-fix-test-onedrive.patch \ + %D%/packages/patches/libdrm-symbol-check.patch \ + %D%/packages/patches/libevent-dns-tests.patch \ + %D%/packages/patches/libextractor-ffmpeg-3.patch \ + %D%/packages/patches/libmtp-devices.patch \ + %D%/packages/patches/liboop-mips64-deplibs-fix.patch \ + %D%/packages/patches/libotr-test-auth-fix.patch \ + %D%/packages/patches/liblxqt-include.patch \ + %D%/packages/patches/libmad-armv7-thumb-pt1.patch \ + %D%/packages/patches/libmad-armv7-thumb-pt2.patch \ + %D%/packages/patches/libmad-frame-length.patch \ + %D%/packages/patches/libmad-mips-newgcc.patch \ + %D%/packages/patches/libssh-0.6.5-CVE-2016-0739.patch \ + %D%/packages/patches/libtar-CVE-2013-4420.patch \ + %D%/packages/patches/libtheora-config-guess.patch \ + %D%/packages/patches/libtiff-CVE-2015-8665+CVE-2015-8683.patch \ + %D%/packages/patches/libtiff-oob-accesses-in-decode.patch \ + %D%/packages/patches/libtiff-oob-write-in-nextdecode.patch \ + %D%/packages/patches/libtool-skip-tests2.patch \ + %D%/packages/patches/libunwind-CVE-2015-3239.patch \ + %D%/packages/patches/libwmf-CAN-2004-0941.patch \ + %D%/packages/patches/libwmf-CVE-2006-3376.patch \ + %D%/packages/patches/libwmf-CVE-2007-0455.patch \ + %D%/packages/patches/libwmf-CVE-2007-2756.patch \ + %D%/packages/patches/libwmf-CVE-2007-3472.patch \ + %D%/packages/patches/libwmf-CVE-2007-3473.patch \ + %D%/packages/patches/libwmf-CVE-2007-3477.patch \ + %D%/packages/patches/libwmf-CVE-2009-1364.patch \ + %D%/packages/patches/libwmf-CVE-2009-3546.patch \ + %D%/packages/patches/libwmf-CVE-2015-0848+CVE-2015-4588.patch \ + %D%/packages/patches/libwmf-CVE-2015-4695.patch \ + %D%/packages/patches/libwmf-CVE-2015-4696.patch \ + %D%/packages/patches/libxslt-CVE-2015-7995.patch \ + %D%/packages/patches/lirc-localstatedir.patch \ + %D%/packages/patches/lm-sensors-hwmon-attrs.patch \ + %D%/packages/patches/lua-CVE-2014-5461.patch \ + %D%/packages/patches/lua-pkgconfig.patch \ + %D%/packages/patches/lua51-liblua-so.patch \ + %D%/packages/patches/lua52-liblua-so.patch \ + %D%/packages/patches/luajit-no_ldconfig.patch \ + %D%/packages/patches/luajit-symlinks.patch \ + %D%/packages/patches/luit-posix.patch \ + %D%/packages/patches/m4-gets-undeclared.patch \ + %D%/packages/patches/make-impure-dirs.patch \ + %D%/packages/patches/mars-install.patch \ + %D%/packages/patches/mars-sfml-2.3.patch \ + %D%/packages/patches/matplotlib-setupext-tk.patch \ + %D%/packages/patches/maxima-defsystem-mkdir.patch \ + %D%/packages/patches/mcron-install.patch \ + %D%/packages/patches/mcrypt-CVE-2012-4409.patch \ + %D%/packages/patches/mcrypt-CVE-2012-4426.patch \ + %D%/packages/patches/mcrypt-CVE-2012-4527.patch \ + %D%/packages/patches/mhash-keygen-test-segfault.patch \ + %D%/packages/patches/mit-krb5-CVE-2015-8629.patch \ + %D%/packages/patches/mit-krb5-CVE-2015-8630.patch \ + %D%/packages/patches/mit-krb5-CVE-2015-8631.patch \ + %D%/packages/patches/mit-krb5-init-context-null-spnego.patch \ + %D%/packages/patches/mpc123-initialize-ao.patch \ + %D%/packages/patches/mplayer2-theora-fix.patch \ + %D%/packages/patches/module-init-tools-moduledir.patch \ + %D%/packages/patches/mumps-build-parallelism.patch \ + %D%/packages/patches/mupen64plus-ui-console-notice.patch \ + %D%/packages/patches/mutt-store-references.patch \ + %D%/packages/patches/net-tools-bitrot.patch \ + %D%/packages/patches/netcdf-config-date.patch \ + %D%/packages/patches/ngircd-handle-zombies.patch \ + %D%/packages/patches/ngircd-no-dns-in-tests.patch \ + %D%/packages/patches/ninja-tests.patch \ + %D%/packages/patches/ninja-zero-mtime.patch \ + %D%/packages/patches/nss-pkgconfig.patch \ + %D%/packages/patches/nvi-assume-preserve-path.patch \ + %D%/packages/patches/nvi-dbpagesize-binpower.patch \ + %D%/packages/patches/nvi-db4.patch \ + %D%/packages/patches/ocaml-CVE-2015-8869.patch \ + %D%/packages/patches/ocaml-findlib-make-install.patch \ + %D%/packages/patches/openexr-missing-samples.patch \ + %D%/packages/patches/openimageio-boost-1.60.patch \ + %D%/packages/patches/openjpeg-CVE-2015-6581.patch \ + %D%/packages/patches/openjpeg-use-after-free-fix.patch \ + %D%/packages/patches/openssh-CVE-2015-8325.patch \ + %D%/packages/patches/openssl-runpath.patch \ + %D%/packages/patches/openssl-c-rehash-in.patch \ + %D%/packages/patches/orpheus-cast-errors-and-includes.patch \ + %D%/packages/patches/ots-no-include-missing-file.patch \ + %D%/packages/patches/patchelf-page-size.patch \ + %D%/packages/patches/patchelf-rework-for-arm.patch \ + %D%/packages/patches/patchutils-xfail-gendiff-tests.patch \ + %D%/packages/patches/patch-hurd-path-max.patch \ + %D%/packages/patches/pcre-CVE-2016-3191.patch \ + %D%/packages/patches/pcre2-CVE-2016-3191.patch \ + %D%/packages/patches/perl-CVE-2015-8607.patch \ + %D%/packages/patches/perl-CVE-2016-2381.patch \ + %D%/packages/patches/perl-autosplit-default-time.patch \ + %D%/packages/patches/perl-deterministic-ordering.patch \ + %D%/packages/patches/perl-finance-quote-unuse-mozilla-ca.patch \ + %D%/packages/patches/perl-gd-options-passthrough-and-fontconfig.patch \ + %D%/packages/patches/perl-io-socket-ssl-openssl-1.0.2f-fix.patch \ + %D%/packages/patches/perl-net-amazon-s3-moose-warning.patch \ + %D%/packages/patches/perl-net-ssleay-disable-ede-test.patch \ + %D%/packages/patches/perl-no-build-time.patch \ + %D%/packages/patches/perl-no-sys-dirs.patch \ + %D%/packages/patches/perl-module-pluggable-search.patch \ + %D%/packages/patches/perl-source-date-epoch.patch \ + %D%/packages/patches/pidgin-add-search-path.patch \ + %D%/packages/patches/pinball-const-fix.patch \ + %D%/packages/patches/pinball-cstddef.patch \ + %D%/packages/patches/pinball-missing-separators.patch \ + %D%/packages/patches/pinball-src-deps.patch \ + %D%/packages/patches/pinball-system-ltdl.patch \ + %D%/packages/patches/pingus-sdl-libs-config.patch \ + %D%/packages/patches/plink-1.07-unclobber-i.patch \ + %D%/packages/patches/plotutils-libpng-jmpbuf.patch \ + %D%/packages/patches/polkit-drop-test.patch \ + %D%/packages/patches/portaudio-audacity-compat.patch \ + %D%/packages/patches/portmidi-modular-build.patch \ + %D%/packages/patches/procmail-ambiguous-getline-debian.patch \ + %D%/packages/patches/procmail-CVE-2014-3618.patch \ + %D%/packages/patches/pt-scotch-build-parallelism.patch \ + %D%/packages/patches/pulseaudio-fix-mult-test.patch \ + %D%/packages/patches/pulseaudio-longer-test-timeout.patch \ + %D%/packages/patches/pycairo-wscript.patch \ + %D%/packages/patches/pybugz-encode-error.patch \ + %D%/packages/patches/pybugz-stty.patch \ + %D%/packages/patches/pygpgme-disable-problematic-tests.patch \ + %D%/packages/patches/pyqt-configure.patch \ + %D%/packages/patches/python-2-deterministic-build-info.patch \ + %D%/packages/patches/python-2.7-search-paths.patch \ + %D%/packages/patches/python-2.7-source-date-epoch.patch \ + %D%/packages/patches/python-3-deterministic-build-info.patch \ + %D%/packages/patches/python-3-search-paths.patch \ + %D%/packages/patches/python-disable-ssl-test.patch \ + %D%/packages/patches/python-fix-tests.patch \ + %D%/packages/patches/python-ipython-inputhook-ctype.patch \ + %D%/packages/patches/python-rarfile-fix-tests.patch \ + %D%/packages/patches/python2-rdflib-drop-sparqlwrapper.patch \ + %D%/packages/patches/python-configobj-setuptools.patch \ + %D%/packages/patches/python-paste-remove-website-test.patch \ + %D%/packages/patches/python-paste-remove-timing-test.patch \ + %D%/packages/patches/python2-pygobject-2-gi-info-type-error-domain.patch \ + %D%/packages/patches/qt4-ldflags.patch \ + %D%/packages/patches/ratpoison-shell.patch \ + %D%/packages/patches/readline-link-ncurses.patch \ + %D%/packages/patches/ripperx-missing-file.patch \ + %D%/packages/patches/rpm-CVE-2014-8118.patch \ + %D%/packages/patches/rsem-makefile.patch \ + %D%/packages/patches/ruby-symlinkfix.patch \ + %D%/packages/patches/rush-CVE-2013-6889.patch \ + %D%/packages/patches/sed-hurd-path-max.patch \ + %D%/packages/patches/scheme48-tests.patch \ + %D%/packages/patches/scotch-test-threading.patch \ + %D%/packages/patches/sdl-libx11-1.6.patch \ + %D%/packages/patches/serf-comment-style-fix.patch \ + %D%/packages/patches/serf-deflate-buckets-test-fix.patch \ + %D%/packages/patches/slim-session.patch \ + %D%/packages/patches/slim-config.patch \ + %D%/packages/patches/slim-sigusr1.patch \ + %D%/packages/patches/slurm-configure-remove-nonfree-contribs.patch \ + %D%/packages/patches/soprano-find-clucene.patch \ + %D%/packages/patches/sudo-CVE-2015-5602.patch \ + %D%/packages/patches/superlu-dist-scotchmetis.patch \ + %D%/packages/patches/synfig-build-fix.patch \ + %D%/packages/patches/t1lib-CVE-2010-2642.patch \ + %D%/packages/patches/t1lib-CVE-2011-0764.patch \ + %D%/packages/patches/t1lib-CVE-2011-1552+CVE-2011-1553+CVE-2011-1554.patch \ + %D%/packages/patches/tar-skip-unreliable-tests.patch \ + %D%/packages/patches/tcl-mkindex-deterministic.patch \ + %D%/packages/patches/tclxml-3.2-install.patch \ + %D%/packages/patches/tcsh-fix-autotest.patch \ + %D%/packages/patches/texi2html-document-encoding.patch \ + %D%/packages/patches/texi2html-i18n.patch \ + %D%/packages/patches/tidy-CVE-2015-5522+5523.patch \ + %D%/packages/patches/tinyxml-use-stl.patch \ + %D%/packages/patches/tk-find-library.patch \ + %D%/packages/patches/ttf2eot-cstddef.patch \ + %D%/packages/patches/ttfautohint-source-date-epoch.patch \ + %D%/packages/patches/tophat-build-with-later-seqan.patch \ + %D%/packages/patches/torsocks-dns-test.patch \ + %D%/packages/patches/totem-debug-format-fix.patch \ + %D%/packages/patches/unzip-CVE-2014-8139.patch \ + %D%/packages/patches/unzip-CVE-2014-8140.patch \ + %D%/packages/patches/unzip-CVE-2014-8141.patch \ + %D%/packages/patches/unzip-CVE-2014-9636.patch \ + %D%/packages/patches/unzip-CVE-2015-7696.patch \ + %D%/packages/patches/unzip-CVE-2015-7697.patch \ + %D%/packages/patches/unzip-allow-greater-hostver-values.patch \ + %D%/packages/patches/unzip-attribs-overflow.patch \ + %D%/packages/patches/unzip-overflow-on-invalid-input.patch \ + %D%/packages/patches/unzip-format-secure.patch \ + %D%/packages/patches/unzip-initialize-symlink-flag.patch \ + %D%/packages/patches/unzip-overflow-long-fsize.patch \ + %D%/packages/patches/unzip-remove-build-date.patch \ + %D%/packages/patches/util-linux-tests.patch \ + %D%/packages/patches/upower-builddir.patch \ + %D%/packages/patches/valgrind-enable-arm.patch \ + %D%/packages/patches/vorbis-tools-CVE-2014-9638+CVE-2014-9639.patch \ + %D%/packages/patches/vorbis-tools-CVE-2014-9640.patch \ + %D%/packages/patches/vorbis-tools-CVE-2015-6749.patch \ + %D%/packages/patches/vpnc-script.patch \ + %D%/packages/patches/vte-CVE-2012-2738-pt1.patch \ + %D%/packages/patches/vte-CVE-2012-2738-pt2.patch \ + %D%/packages/patches/vtk-mesa-10.patch \ + %D%/packages/patches/w3m-libgc.patch \ + %D%/packages/patches/w3m-force-ssl_verify_server-on.patch \ + %D%/packages/patches/w3m-disable-sslv2-and-sslv3.patch \ + %D%/packages/patches/w3m-disable-weak-ciphers.patch \ + %D%/packages/patches/weechat-python.patch \ + %D%/packages/patches/weex-vacopy.patch \ + %D%/packages/patches/wicd-bitrate-none-fix.patch \ + %D%/packages/patches/wicd-get-selected-profile-fix.patch \ + %D%/packages/patches/wicd-urwid-1.3.patch \ + %D%/packages/patches/wicd-wpa2-ttls.patch \ + %D%/packages/patches/wmctrl-64-fix.patch \ + %D%/packages/patches/woff2-libbrotli.patch \ + %D%/packages/patches/wordnet-CVE-2008-2149.patch \ + %D%/packages/patches/wordnet-CVE-2008-3908-pt1.patch \ + %D%/packages/patches/wordnet-CVE-2008-3908-pt2.patch \ + %D%/packages/patches/wpa-supplicant-CVE-2015-5310.patch \ + %D%/packages/patches/wpa-supplicant-CVE-2015-5314.patch \ + %D%/packages/patches/wpa-supplicant-CVE-2015-5315.patch \ + %D%/packages/patches/wpa-supplicant-CVE-2015-5316.patch \ + %D%/packages/patches/wpa-supplicant-CVE-2016-4476.patch \ + %D%/packages/patches/wpa-supplicant-CVE-2016-4477-pt1.patch \ + %D%/packages/patches/wpa-supplicant-CVE-2016-4477-pt2.patch \ + %D%/packages/patches/wpa-supplicant-CVE-2016-4477-pt3.patch \ + %D%/packages/patches/wpa-supplicant-CVE-2016-4477-pt4.patch \ + %D%/packages/patches/xdotool-fix-makefile.patch \ + %D%/packages/patches/xf86-video-ark-remove-mibstore.patch \ + %D%/packages/patches/xf86-video-ast-remove-mibstore.patch \ + %D%/packages/patches/xf86-video-geode-glibc-2.20.patch \ + %D%/packages/patches/xf86-video-glint-remove-mibstore.patch \ + %D%/packages/patches/xf86-video-i128-remove-mibstore.patch \ + %D%/packages/patches/xf86-video-intel-compat-api.patch \ + %D%/packages/patches/xf86-video-intel-glibc-2.20.patch \ + %D%/packages/patches/xf86-video-mach64-glibc-2.20.patch \ + %D%/packages/patches/xf86-video-nv-remove-mibstore.patch \ + %D%/packages/patches/xf86-video-openchrome-glibc-2.20.patch \ + %D%/packages/patches/xf86-video-tga-remove-mibstore.patch \ + %D%/packages/patches/xfce4-panel-plugins.patch \ + %D%/packages/patches/xfce4-session-fix-xflock4.patch \ + %D%/packages/patches/xfce4-settings-defaults.patch \ + %D%/packages/patches/xmodmap-asprintf.patch \ + %D%/packages/patches/libyaml-CVE-2014-9130.patch \ + %D%/packages/patches/zathura-plugindir-environment-variable.patch MISC_DISTRO_FILES = \ - gnu/packages/ld-wrapper.in + %D%/packages/ld-wrapper.in -bootstrapdir = $(guilemoduledir)/gnu/packages/bootstrap +bootstrapdir = $(guilemoduledir)/%D%/packages/bootstrap bootstrap_x86_64_linuxdir = $(bootstrapdir)/x86_64-linux bootstrap_i686_linuxdir = $(bootstrapdir)/i686-linux bootstrap_armhf_linuxdir = $(bootstrapdir)/armhf-linux bootstrap_mips64el_linuxdir = $(bootstrapdir)/mips64el-linux dist_bootstrap_x86_64_linux_DATA = \ - gnu/packages/bootstrap/x86_64-linux/bash \ - gnu/packages/bootstrap/x86_64-linux/mkdir \ - gnu/packages/bootstrap/x86_64-linux/tar \ - gnu/packages/bootstrap/x86_64-linux/xz + %D%/packages/bootstrap/x86_64-linux/bash \ + %D%/packages/bootstrap/x86_64-linux/mkdir \ + %D%/packages/bootstrap/x86_64-linux/tar \ + %D%/packages/bootstrap/x86_64-linux/xz dist_bootstrap_i686_linux_DATA = \ - gnu/packages/bootstrap/i686-linux/bash \ - gnu/packages/bootstrap/i686-linux/mkdir \ - gnu/packages/bootstrap/i686-linux/tar \ - gnu/packages/bootstrap/i686-linux/xz + %D%/packages/bootstrap/i686-linux/bash \ + %D%/packages/bootstrap/i686-linux/mkdir \ + %D%/packages/bootstrap/i686-linux/tar \ + %D%/packages/bootstrap/i686-linux/xz dist_bootstrap_armhf_linux_DATA = \ - gnu/packages/bootstrap/armhf-linux/bash \ - gnu/packages/bootstrap/armhf-linux/mkdir \ - gnu/packages/bootstrap/armhf-linux/tar \ - gnu/packages/bootstrap/armhf-linux/xz + %D%/packages/bootstrap/armhf-linux/bash \ + %D%/packages/bootstrap/armhf-linux/mkdir \ + %D%/packages/bootstrap/armhf-linux/tar \ + %D%/packages/bootstrap/armhf-linux/xz dist_bootstrap_mips64el_linux_DATA = \ - gnu/packages/bootstrap/mips64el-linux/bash \ - gnu/packages/bootstrap/mips64el-linux/mkdir \ - gnu/packages/bootstrap/mips64el-linux/tar \ - gnu/packages/bootstrap/mips64el-linux/xz + %D%/packages/bootstrap/mips64el-linux/bash \ + %D%/packages/bootstrap/mips64el-linux/mkdir \ + %D%/packages/bootstrap/mips64el-linux/tar \ + %D%/packages/bootstrap/mips64el-linux/xz # Big bootstrap binaries are not included in the tarball. Instead, they # are downloaded. nodist_bootstrap_x86_64_linux_DATA = \ - gnu/packages/bootstrap/x86_64-linux/guile-2.0.9.tar.xz + %D%/packages/bootstrap/x86_64-linux/guile-2.0.9.tar.xz nodist_bootstrap_i686_linux_DATA = \ - gnu/packages/bootstrap/i686-linux/guile-2.0.9.tar.xz + %D%/packages/bootstrap/i686-linux/guile-2.0.9.tar.xz nodist_bootstrap_armhf_linux_DATA = \ - gnu/packages/bootstrap/armhf-linux/guile-2.0.11.tar.xz + %D%/packages/bootstrap/armhf-linux/guile-2.0.11.tar.xz nodist_bootstrap_mips64el_linux_DATA = \ - gnu/packages/bootstrap/mips64el-linux/guile-2.0.9.tar.xz + %D%/packages/bootstrap/mips64el-linux/guile-2.0.9.tar.xz # Those files must remain executable, so they remain executable once # imported into the store. @@ -852,19 +882,19 @@ DOWNLOAD_FILE = \ $(GUILE) --no-auto-compile -L "$(top_builddir)" -L "$(top_srcdir)" \ "$(top_srcdir)/build-aux/download.scm" -gnu/packages/bootstrap/x86_64-linux/guile-2.0.9.tar.xz: +%D%/packages/bootstrap/x86_64-linux/guile-2.0.9.tar.xz: $(AM_V_DL)$(MKDIR_P) `dirname "$@"`; \ $(DOWNLOAD_FILE) "$@" \ "037b103522a2d0d7d69c7ffd8de683dfe5bb4b59c1fafd70b4ffd397fd2f57f0" -gnu/packages/bootstrap/i686-linux/guile-2.0.9.tar.xz: +%D%/packages/bootstrap/i686-linux/guile-2.0.9.tar.xz: $(AM_V_DL)$(MKDIR_P) `dirname "$@"`; \ $(DOWNLOAD_FILE) "$@" \ "b757cd46bf13ecac83fb8e955fb50096ac2d17bb610ca8eb816f29302a00a846" -gnu/packages/bootstrap/armhf-linux/guile-2.0.11.tar.xz: +%D%/packages/bootstrap/armhf-linux/guile-2.0.11.tar.xz: $(AM_V_DL)$(MKDIR_P) `dirname "$@"`; \ $(DOWNLOAD_FILE) "$@" \ "e551d05d4d385d6706ab8d574856a087758294dc90ab4c06e70a157a685e23d6" -gnu/packages/bootstrap/mips64el-linux/guile-2.0.9.tar.xz: +%D%/packages/bootstrap/mips64el-linux/guile-2.0.9.tar.xz: $(AM_V_DL)$(MKDIR_P) `dirname "$@"`; \ $(DOWNLOAD_FILE) "$@" \ "994680f0001346864aa2c2cc5110f380ee7518dcd701c614291682b8e948f73b" diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm index 633606e840..abfef36660 100644 --- a/gnu/packages/admin.scm +++ b/gnu/packages/admin.scm @@ -619,7 +619,8 @@ connection alive.") "ISC's Dynamic Host Configuration Protocol (DHCP) distribution provides a reference implementation of all aspects of DHCP, through a suite of DHCP tools: server, client, and relay agent.") - (license license:isc)))) + (license license:isc) + (properties '((cpe-name . "dhcp")))))) (define-public libpcap (package @@ -1252,7 +1253,7 @@ various ways that may be running with too much privilege.") (define-public smartmontools (package (name "smartmontools") - (version "6.3") + (version "6.5") (source (origin (method url-fetch) (uri (string-append @@ -1260,7 +1261,7 @@ various ways that may be running with too much privilege.") version "/smartmontools-" version ".tar.gz")) (sha256 (base32 - "06gy71jh2d3gcfmlbbrsqw7215knkfq59q3j6qdxfrar39fhcxx7")))) + "1g25r6sx85b5lay5n6sbnqv05qxzj6xsafsp93hnrg1h044bps49")))) (build-system gnu-build-system) (inputs `(("libcap-ng" ,libcap-ng))) (home-page "http://www.smartmontools.org/") @@ -1504,20 +1505,20 @@ displays a table of current bandwidth usage by pairs of hosts.") (define-public munge (package (name "munge") - (version "0.5.11") + (version "0.5.12") (source (origin (method url-fetch) - (uri (string-append "https://github.com/dun/munge/archive/munge-" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (uri (string-append "https://github.com/dun/munge/releases/" + "download/munge-" version "/munge-" + version ".tar.xz")) (sha256 (base32 - "0njplyalwwqh7xr7xc7klc6x06mq0ak8w2pxh85w8n4hxkmqqnf5")))) + "1s0vlwgm3hcx75vcmjf2y3icy5nv8y07bx93w2cmm6a7x71y6wp9")))) (inputs `(("openssl" ,openssl) ("libgcrypt" ,libgcrypt))) (build-system gnu-build-system) - (home-page "http://dun.github.io/munge/") + (home-page "https://dun.github.io/munge/") (synopsis "Cluster computing authentication service") (description "Munge is an authentication service for creating and validating diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm index 53f6f3e3d2..9518e65db6 100644 --- a/gnu/packages/algebra.scm +++ b/gnu/packages/algebra.scm @@ -37,7 +37,7 @@ #:use-module (gnu packages flex) #:use-module (gnu packages python) #:use-module (gnu packages tcsh) - #:use-module (gnu packages texlive) + #:use-module (gnu packages tex) #:use-module (gnu packages xiph) #:use-module (gnu packages xorg) #:use-module ((guix licenses) #:prefix license:) diff --git a/gnu/packages/autogen.scm b/gnu/packages/autogen.scm index 238c66fe33..4cbc215070 100644 --- a/gnu/packages/autogen.scm +++ b/gnu/packages/autogen.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013,2014 Eric Bavier <bavier@member.fsf.org> -;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2013, 2014 Eric Bavier <bavier@member.fsf.org> +;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -31,31 +31,31 @@ (define-public autogen (package (name "autogen") - (version "5.18.7") + (version "5.18.10") (source (origin (method url-fetch) - (uri (string-append "mirror://gnu/autogen" + (uri (string-append "mirror://gnu/autogen/rel" version "/autogen-" version ".tar.xz")) (sha256 (base32 - "01d4m8ckww12sy50vgyxlnz83z9dxqpyqp153cscncc9w6jq19d7")))) + "0j61mf3qab5ya7w5xsp7xalrby00cv92g462bxffl104ql18w92f")))) (build-system gnu-build-system) (native-inputs `(("perl" ,perl) ;for doc generator mdoc ("pkg-config" ,pkg-config))) (inputs `(("which" ,which) ("guile" ,guile-2.0))) (arguments - '(#:phases (alist-cons-before - 'patch-source-shebangs 'patch-test-scripts - (lambda _ - (let ((sh (which "sh"))) - (substitute* - (append (find-files "agen5/test" "\\.test$") - (find-files "autoopts/test" "\\.(test|in)$")) - (("/bin/sh") sh) - (("/usr/bin/tr") "tr")))) - %standard-phases))) + '(#:phases + (modify-phases %standard-phases + (add-before 'patch-source-shebangs 'patch-test-scripts + (lambda _ + (let ((sh (which "sh"))) + (substitute* + (append (find-files "agen5/test" "\\.test$") + (find-files "autoopts/test" "\\.(test|in)$")) + (("/bin/sh") sh) + (("/usr/bin/tr") "tr")))))))) (home-page "http://www.gnu.org/software/autogen/") (synopsis "Automated program generator") (description diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm index ddc628d005..de7f1f6d15 100644 --- a/gnu/packages/autotools.scm +++ b/gnu/packages/autotools.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org> ;;; Copyright © 2014 Manolis Fragkiskos Ragkousis <manolis837@gmail.com> ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org> +;;; Copyright © 2016 David Thompson <davet@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -159,6 +160,27 @@ exec ~a --no-auto-compile \"$0\" \"$@\" port))) (chmod (string-append bin "/autoconf") #o555))))))) +(define-public autoconf-archive + (package + (name "autoconf-archive") + (version "2016.03.20") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://gnu/autoconf-archive/autoconf-archive-" + version ".tar.xz")) + (sha256 + (base32 + "0dz4fnc723jqn3by22ds5fys7g31apzm1r9allldvva0yvzjxyw8")))) + (build-system gnu-build-system) + (home-page "https://www.gnu.org/software/autoconf-archive") + (synopsis "Collection of freely reusable Autoconf macros") + (description + "Autoconf Archive is a collection of over 450 new macros for Autoconf, +greatly expanding the domain of its functionality. These macros have been +contributed as free software by the community.") + (license gpl3+))) + (define-public autobuild (package (name "autobuild") diff --git a/gnu/packages/avr.scm b/gnu/packages/avr.scm index d59816b6b8..987347713c 100644 --- a/gnu/packages/avr.scm +++ b/gnu/packages/avr.scm @@ -1,6 +1,8 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2014 Manolis Fragkiskos Ragkousis <manolis837@gmail.com> +;;; Copyright © 2014, 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com> ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2016 David Thompson <davet@gnu.org> +;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -19,52 +21,128 @@ (define-module (gnu packages avr) #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix utils) #:use-module (guix download) #:use-module (guix packages) #:use-module (guix build-system gnu) + #:use-module (guix build-system trivial) #:use-module (gnu packages) #:use-module (gnu packages cross-base) + #:use-module (gnu packages flashing-tools) + #:use-module (gnu packages gcc) #:use-module (gnu packages vim) #:use-module (gnu packages zip)) +(define-public avr-binutils + (package + (inherit (cross-binutils "avr")) + (name "avr-binutils"))) + +(define-public avr-gcc-4.9 + (let ((xgcc (cross-gcc "avr" avr-binutils))) + (package + (inherit xgcc) + (name "avr-gcc") + (arguments + (substitute-keyword-arguments (package-arguments xgcc) + ((#:phases phases) + `(modify-phases ,phases + ;; Without a working multilib build, the resulting GCC lacks + ;; support for nearly every AVR chip. + (add-after 'unpack 'fix-genmultilib + (lambda _ + ;; patch-shebang doesn't work here because there are actually + ;; several scripts inside this script, each with a #!/bin/sh + ;; that needs patching. + (substitute* "gcc/genmultilib" + (("#!/bin/sh") (string-append "#!" (which "sh")))) + #t)))) + ((#:configure-flags flags) + `(delete "--disable-multilib" ,flags)))) + (native-search-paths + (list (search-path-specification + (variable "CROSS_CPATH") + (files '("avr/include"))) + (search-path-specification + (variable "CROSS_LIBRARY_PATH") + (files '("avr/lib")))))))) + +(define-public avr-gcc-5 + (package + (inherit avr-gcc-4.9) + (version (package-version gcc-5)) + (source (package-source gcc-5)))) + (define-public avr-libc (package (name "avr-libc") - (version "1.8.1") + (version "2.0.0") (source (origin (method url-fetch) - (uri (string-append - "mirror://savannah//avr-libc/avr-libc-" - version ".tar.bz2")) + (uri (string-append "mirror://savannah//avr-libc/avr-libc-" + version ".tar.bz2")) (sha256 (base32 - "0sd9qkvhmk9av4g1f8dsjwc309hf1g0731bhvicnjb3b3d42l1n3")))) + "15svr2fx8j6prql2il2fc0ppwlv50rpmyckaxx38d3gxxv97zpdj")))) (build-system gnu-build-system) (arguments - `(#:out-of-source? #t - #:configure-flags '("--host=avr"))) - - (native-inputs `(("cross-binutils" ,(cross-binutils "avr")) - ("cross-gcc" ,xgcc-avr))) + '(#:out-of-source? #t + #:configure-flags '("--host=avr") + #:phases + (modify-phases %standard-phases + (add-before 'unpack 'fix-cpath + (lambda _ + ;; C_INCLUDE_PATH poses issues for cross-building, leading to + ;; failures when building avr-libc on 64-bit systems. Simply + ;; unsetting it allows the build to succeed because it doesn't + ;; try to use any of the native system's headers. + (unsetenv "C_INCLUDE_PATH") + #t))))) + (native-inputs `(("avr-binutils" ,avr-binutils) + ("avr-gcc" ,avr-gcc-4.9))) (home-page "http://www.nongnu.org/avr-libc/") (synopsis "The AVR C Library") (description "AVR Libc is a project whose goal is to provide a high quality C library for use with GCC on Atmel AVR microcontrollers.") - (license (license:non-copyleft "http://www.nongnu.org/avr-libc/LICENSE.txt")))) + (license + (license:non-copyleft "http://www.nongnu.org/avr-libc/LICENSE.txt")))) + +(define (avr-toolchain avr-gcc) + (package + (name "avr-toolchain") + (version (package-version avr-gcc)) + (source #f) + (build-system trivial-build-system) + (arguments '(#:builder (mkdir %output))) + (propagated-inputs + `(("avrdude" ,avrdude) + ("binutils" ,avr-binutils) + ("gcc" ,avr-gcc) + ("libc" ,avr-libc))) + (synopsis "Complete GCC tool chain for AVR microcontroller development") + (description "This package provides a complete GCC tool chain for AVR +microcontroller development. This includes the GCC AVR cross compiler and +avrdude for firmware flashing. The supported programming languages are C and +C++.") + (home-page (package-home-page avr-libc)) + (license (package-license avr-gcc)))) + +(define-public avr-toolchain-4.9 (avr-toolchain avr-gcc-4.9)) +(define-public avr-toolchain-5 (avr-toolchain avr-gcc-5)) (define-public microscheme (package (name "microscheme") - (version "0.9.2") + (version "0.9.3") (source (origin (method url-fetch) (uri (string-append "https://github.com/ryansuchocki/" - "microscheme/archive/v" version ".zip")) + "microscheme/archive/v" version ".tar.gz")) (sha256 (base32 - "0cmp1c6ilcib4w9ysqghav310g8jsq9gdfpfa9sd23wgl7mlncxf")) - (file-name (string-append name "-" version ".zip")))) + "1n404mh7z2icy3ga1mx249lk9x091k7idj6xpcf20hnmzabd0k0x")) + (file-name (string-append name "-" version ".tar.gz")))) (build-system gnu-build-system) (arguments `(#:parallel-build? #f ; fails to build otherwise diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm index 05423f1401..a0ff535dfe 100644 --- a/gnu/packages/backup.scm +++ b/gnu/packages/backup.scm @@ -404,13 +404,17 @@ detection, and lossless compression.") (define-public borg (package (name "borg") - (version "1.0.2") + (version "1.0.3") (source (origin (method url-fetch) - (uri (pypi-uri "borgbackup" version)) + (uri (string-append + "https://pypi.python.org/packages/" + "c9/c6/1efc338724b054d4d264dfeadfcba11cefa6c3c50f474cec91b8f0c21d3a" + "/borgbackup-" version ".tar.gz")) + (sha256 (base32 - "1myz10pwxnac9z59gw1w3xjhz6ghx03vngpl97ca527pj0r39shi")))) + "0kzr0xa00yjfxx27aipli67qg5ffj52yrnqhpf3sdy6k5wzwaybs")))) (build-system python-build-system) (arguments `(#:phases diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm index 689ab2d3c3..d0ef06209f 100644 --- a/gnu/packages/base.scm +++ b/gnu/packages/base.scm @@ -530,7 +530,10 @@ store.") ,version) (string-append "--with-headers=" - (assoc-ref %build-inputs "kernel-headers") + (assoc-ref ,(if (%current-target-system) + '%build-target-inputs + '%build-inputs) + "kernel-headers") "/include") ;; This is the default for most architectures as of GNU libc 2.21, diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm index d404ff839c..6a90aa9456 100644 --- a/gnu/packages/bioinformatics.scm +++ b/gnu/packages/bioinformatics.scm @@ -1482,7 +1482,7 @@ identify enrichments with functional annotations of the genome.") (define-public diamond (package (name "diamond") - (version "0.8.1") + (version "0.8.5") (source (origin (method url-fetch) (uri (string-append @@ -1491,7 +1491,7 @@ identify enrichments with functional annotations of the genome.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "1dqancz32c2l7w1b2vkvh5zqa2jnf99j1c41djnx1l8pxn044zdc")))) + "18zx8k3axnsrg016kikl8xs1ifnjmj36dk1sv3fq1jgpg9j9584b")))) (build-system cmake-build-system) (arguments '(#:tests? #f ; no "check" target @@ -2670,10 +2670,10 @@ the phenotype as it models the data.") (license license:asl2.0))) (define-public pbtranscript-tofu - (let ((commit "8f5467fe6")) + (let ((commit "8f5467fe6a4472bcfb4226c8720993c8507adfe4")) (package (name "pbtranscript-tofu") - (version (string-append "2.2.3." commit)) + (version (string-append "2.2.3." (string-take commit 7))) (source (origin (method git-fetch) (uri (git-reference @@ -3009,7 +3009,7 @@ viewer.") (delete 'configure)))))))) (define-public mosaik - (let ((commit "5c25216d")) + (let ((commit "5c25216d3522d6a33e53875cd76a6d65001e4e67")) (package (name "mosaik") (version "2.2.30") @@ -3259,10 +3259,10 @@ subsequent visualization, annotation and storage of results.") (define-public smithlab-cpp (let ((revision "1") - (commit "728a097")) + (commit "728a097bec88c6f4b8528b685932049e660eff2e")) (package (name "smithlab-cpp") - (version (string-append "0." revision "." commit)) + (version (string-append "0." revision "." (string-take commit 7))) (source (origin (method git-fetch) (uri (git-reference @@ -3885,6 +3885,47 @@ Needleman-Wunsch).") ;; Dual licensed; also includes public domain source. (license (list license:gpl3 license:bsd-2)))) +(define-public pardre + (package + (name "pardre") + (version "1.1.5") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/pardre/ParDRe-rel" + version ".tar.gz")) + (sha256 + (base32 + "0zkyjzv4s8q2h5npalhirbk17r5b1h0n2a42mh7njzlf047h9bhy")))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ; no tests included + #:phases + (modify-phases %standard-phases + (delete 'configure) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((bin (string-append (assoc-ref outputs "out") "/bin"))) + (mkdir-p bin) + (install-file "ParDRe" bin) + #t)))))) + (inputs + `(("openmpi" ,openmpi) + ("zlib" ,zlib))) + (synopsis "Parallel tool to remove duplicate DNA reads") + (description + "ParDRe is a parallel tool to remove duplicate genetic sequence reads. +Duplicate reads can be seen as identical or nearly identical sequences with +some mismatches. This tool lets users avoid the analysis of unnecessary +reads, reducing the time of subsequent procedures with the +dataset (e.g. assemblies, mappings, etc.). The tool is implemented with MPI +in order to exploit the parallel capabilities of multicore clusters. It is +faster than multithreaded counterparts (end of 2015) for the same number of +cores and, thanks to the message-passing technology, it can be executed on +clusters.") + (home-page "https://sourceforge.net/projects/pardre/") + (license license:gpl3+))) + (define-public bio-locus (package (name "bio-locus") @@ -4735,6 +4776,34 @@ genomic feature data as long as it has minimal information on the locations of genomic intervals. In addition, it can use BAM or BigWig files as input.") (license license:artistic2.0))) +(define-public r-genomationdata + (package + (name "r-genomationdata") + (version "1.4.0") + (source (origin + (method url-fetch) + ;; We cannot use bioconductor-uri here because this tarball is + ;; located under "data/annotation/" instead of "bioc/". + (uri (string-append "https://bioconductor.org/packages/" + "release/data/experiment/src/contrib/" + "genomationData_" version ".tar.gz")) + (sha256 + (base32 + "1xzq2j722d8lcn5bc3aq3yb34xwis2d0bpsf6jsq4xw1bg0bsy79")))) + (build-system r-build-system) + ;; As this package provides little more than large data files, it doesn't + ;; make sense to build substitutes. + (arguments `(#:substitutable? #f)) + (native-inputs + `(("r-knitr" ,r-knitr))) + (home-page "http://bioinformatics.mdc-berlin.de/genomation/") + (synopsis "Experimental data for use with the genomation package") + (description + "This package contains experimental genetic data for use with the +genomation package. Included are Chip Seq, Methylation and Cage data, +downloaded from Encode.") + (license license:gpl3+))) + (define-public r-org-hs-eg-db (package (name "r-org-hs-eg-db") @@ -5100,7 +5169,7 @@ libraries for systems that do not have these available via other means.") ("samtools" ,samtools-0.1) ("gsl" ,gsl) ("smithlab-cpp" - ,(let ((commit "3723e2d")) + ,(let ((commit "3723e2db438c51501d0423429ff396c3035ba46a")) (origin (method git-fetch) (uri (git-reference diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm index d8252c8b37..409731d1d6 100644 --- a/gnu/packages/bittorrent.scm +++ b/gnu/packages/bittorrent.scm @@ -207,7 +207,7 @@ interface, for the Transmission BitTorrent daemon.") (define-public aria2 (package (name "aria2") - (version "1.22.0") + (version "1.23.0") (source (origin (method url-fetch) (uri (string-append "https://github.com/tatsuhiro-t/aria2/" @@ -215,7 +215,7 @@ interface, for the Transmission BitTorrent daemon.") name "-" version ".tar.xz")) (sha256 (base32 - "12agwdvvkr34wqhyyfp418dj0k7nbr297qmcd3wj5kkn7brv6gxc")))) + "14qz7686zxnhbaqj6l1hqpkykhpygm74h2mzwhh13gqmcj38alaq")))) (build-system gnu-build-system) (arguments `(#:configure-flags '("--enable-libaria2") @@ -230,10 +230,10 @@ interface, for the Transmission BitTorrent daemon.") (("CPPUNIT_TEST_SUITE_REGISTRATION\\(LpdMessageReceiverTest\\);" text) (string-append "// " text)))))))) (native-inputs - `(("pkg-config" ,pkg-config))) + `(("cppunit" ,cppunit) ; for the tests + ("pkg-config" ,pkg-config))) (inputs `(("c-ares" ,c-ares) - ("cppunit" ,cppunit) ; for the tests ("gnutls" ,gnutls) ("gmp" ,gmp) ("libssh2" ,libssh2) @@ -241,7 +241,7 @@ interface, for the Transmission BitTorrent daemon.") ("nettle" ,nettle) ("sqlite" ,sqlite) ("zlib" ,zlib))) - (home-page "http://aria2.sourceforge.net/") + (home-page "https://aria2.github.io/") (synopsis "Utility for parallel downloading files") (description "Aria2 is a lightweight, multi-protocol & multi-source command-line diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm index be18ebd29f..e0ff873b3e 100644 --- a/gnu/packages/ci.scm +++ b/gnu/packages/ci.scm @@ -39,10 +39,10 @@ #:use-module (guix build-system gnu)) (define-public hydra - (let ((commit "4c0e3e4")) + (let ((commit "4c0e3e47034545ad3e9e86dd069138bcebb8ccee")) (package (name "hydra") - (version (string-append "20150407." commit)) + (version (string-append "20150407." (string-take commit 7))) (source (origin (method git-fetch) (uri (git-reference diff --git a/gnu/packages/code.scm b/gnu/packages/code.scm index 7e8a361967..c3efd15e44 100644 --- a/gnu/packages/code.scm +++ b/gnu/packages/code.scm @@ -54,7 +54,7 @@ (build-system gnu-build-system) ;; Needed to have cflow-mode.el installed. - (native-inputs `(("emacs" ,emacs-no-x))) + (native-inputs `(("emacs" ,emacs-minimal))) (home-page "http://www.gnu.org/software/cflow/") (synopsis "Create a graph of control flow within a program") diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm index e5cacf5ca7..0fc61d3927 100644 --- a/gnu/packages/compression.scm +++ b/gnu/packages/compression.scm @@ -34,6 +34,7 @@ #:use-module (guix git-download) #:use-module (guix build-system gnu) #:use-module (guix build-system perl) + #:use-module (gnu packages) #:use-module (gnu packages autotools) #:use-module (gnu packages backup) #:use-module (gnu packages base) @@ -110,22 +111,38 @@ utility. Instead of being written in Java, FastJar is written in C.") (define-public libtar (package (name "libtar") - (version "1.2.11") + (version "1.2.20") (source (origin (method url-fetch) - (uri (string-append - "ftp://ftp.feep.net/pub/software/libtar/libtar-" - version ".tar.gz")) + (uri (list + (string-append + "ftp://ftp.feep.net/pub/software/libtar/libtar-" + version ".tar.gz") + (string-append + "mirror://debian/pool/main/libt/libtar/libtar_" + version ".orig.tar.gz"))) (sha256 (base32 - "1f3vx1wa69a6c5y0z0aakd81gygirdcm0vimazg433q8nyvfybja")))) + "02cihzl77ia0dcz7z2cga2412vyhhs5pa2355q4wpwbyga2lrwjh")) + (patches (search-patches "libtar-CVE-2013-4420.patch")))) (build-system gnu-build-system) - (arguments `(#:tests? #f)) ;no "check" target + (arguments + `(#:tests? #f ;no "check" target + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'autoconf + (lambda _ (zero? (system* "sh" "autoreconf" "-vfi"))))))) + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("libtool" ,libtool))) + (inputs + `(("zlib" ,zlib))) (synopsis "C library for manipulating POSIX tar files") (description "libtar is a C library for manipulating POSIX tar files. It handles adding and extracting files to/from a tar archive.") - (home-page "http://www.feep.net/libtar/") + (home-page "https://repo.or.cz/libtar.git") (license license:bsd-3))) (define-public gzip @@ -426,16 +443,17 @@ with the sfArk algorithm.") (license license:gpl3+))) (define-public sfarkxtc + (let ((commit "b5e0a2ba3921f019d74d4b92bd31c36dd19d2cf1")) (package (name "sfarkxtc") - (version "b5e0a2ba39") + (version (string-take commit 10)) (source (origin ;; There are no release tarballs, so we just fetch the latest ;; commit at this time. (method git-fetch) (uri (git-reference (url "https://github.com/raboof/sfarkxtc.git") - (commit version))) + (commit commit))) (sha256 (base32 "0f5x6i46qfl6ry21s7g2p4sd4b2r1g4fb03yqi2vv4kq3saryhvj")))) @@ -456,7 +474,7 @@ with the sfArk algorithm.") (synopsis "Basic sfArk decompressor") (description "SfArk extractor converts SoundFonts in the compressed legacy sfArk file format to the uncompressed sf2 format.") - (license license:gpl3+))) + (license license:gpl3+)))) (define-public libmspack (package diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm index 58cd38beca..9d0f86af86 100644 --- a/gnu/packages/cross-base.scm +++ b/gnu/packages/cross-base.scm @@ -376,12 +376,6 @@ XBINUTILS and the cross tool chain." (package-supported-systems xgcc) '("mips64el-linux" "i686-linux")))))) -(define-public xgcc-avr - ;; AVR cross-compiler, used to build AVR-Libc. - (let ((triplet "avr")) - (cross-gcc triplet - (cross-binutils triplet)))) - (define-public xgcc-xtensa ;; Bare-bones Xtensa cross-compiler, used to build the Atheros firmware. (cross-gcc "xtensa-elf")) diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm index 08eb146cf7..b2ea848937 100644 --- a/gnu/packages/crypto.scm +++ b/gnu/packages/crypto.scm @@ -30,7 +30,7 @@ (define-public libsodium (package (name "libsodium") - (version "1.0.0") + (version "1.0.10") (source (origin (method url-fetch) (uri (list (string-append @@ -41,7 +41,7 @@ "releases/old/libsodium-" version ".tar.gz"))) (sha256 (base32 - "19f9vf0shfp4rc4l791r6xjg06z4i8psj1zkjkm3z5b640yzxlff")))) + "1gn45g956lyz8l6iq187yc6l627vyivyp8qc5dkr6dnhdnlqddvi")))) (build-system gnu-build-system) (synopsis "Portable NaCl-based crypto library") (description diff --git a/gnu/packages/cyrus-sasl.scm b/gnu/packages/cyrus-sasl.scm index 8f3e1a1b70..99ff1e228e 100644 --- a/gnu/packages/cyrus-sasl.scm +++ b/gnu/packages/cyrus-sasl.scm @@ -34,7 +34,7 @@ (source (origin (method url-fetch) (uri (list (string-append - "http://cyrusimap.org/releases/cyrus-sasl-" + "https://cyrusimap.org/releases/cyrus-sasl-" version ".tar.gz") (string-append "ftp://ftp.cyrusimap.org/cyrus-sasl/cyrus-sasl-" @@ -63,4 +63,4 @@ library makes supporting various SASL mechanisms easy for both client and server writers.") (license (license:non-copyleft "file://COPYING" "See COPYING in the distribution.")) - (home-page "http://cyrusimap.web.cmu.edu/index.php"))) + (home-page "http://cyrusimap.web.cmu.edu"))) diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm index 501377b7b7..80aa54f7a2 100644 --- a/gnu/packages/databases.scm +++ b/gnu/packages/databases.scm @@ -55,7 +55,7 @@ #:use-module (gnu packages bison) #:use-module (gnu packages jemalloc) #:use-module ((guix licenses) - #:select (gpl2 gpl3+ lgpl2.1+ lgpl3+ x11-style non-copyleft + #:select (gpl2 gpl3 gpl3+ lgpl2.1+ lgpl3+ x11-style non-copyleft bsd-2 bsd-3 public-domain)) #:use-module (guix packages) #:use-module (guix download) @@ -386,7 +386,7 @@ pictures, sounds, or video.") (assoc-ref %build-inputs "bash:include") "/include/bash")))) - (native-inputs `(("emacs" ,emacs-no-x) + (native-inputs `(("emacs" ,emacs-minimal) ("bc" ,bc) ("bash:include" ,bash "include") ("libuuid" ,util-linux))) @@ -919,3 +919,41 @@ sets, bitmaps and hyperloglogs.") and B+ Tree data storage models. It is a fast key-value lightweight database and supports many programming languages. It is a NoSQL database.") (license gpl3+))) + +(define-public wiredtiger + (package + (name "wiredtiger") + (version "2.8.0") + (source (origin + (method url-fetch) + (uri (string-append + "http://source.wiredtiger.com/releases/wiredtiger-" + version ".tar.bz2")) + (sha256 + (base32 + "1qh7y5paisdxq19jgg81ld7i32lz920n5k30hdpxnr8ll9c4hgjr")))) + (build-system gnu-build-system) + (arguments + '(#:configure-flags '("--enable-lz4" "--enable-zlib") + #:phases + (modify-phases %standard-phases + (add-before 'check 'disable-test/fops + (lambda _ + ;; XXX: timed out after 3600 seconds of silence + (substitute* "Makefile" + (("test/fops") "")) + #t))))) + (inputs + `(("lz4" ,lz4) + ("zlib" ,zlib))) + (home-page "http://source.wiredtiger.com/") + (synopsis "NoSQL data engine") + (description + "WiredTiger is an extensible platform for data management. It supports +row-oriented storage (where all columns of a row are stored together), +column-oriented storage (where columns are stored in groups, allowing for +more efficient access and storage of column subsets) and log-structured merge +trees (LSM), for sustained throughput under random insert workloads.") + (license gpl3) ; or GPL-2 + ;; configure.ac: WiredTiger requires a 64-bit build. + (supported-systems '("x86_64-linux" "mips64el-linux")))) diff --git a/gnu/packages/dav.scm b/gnu/packages/dav.scm index 2bbc069472..126a21bf66 100644 --- a/gnu/packages/dav.scm +++ b/gnu/packages/dav.scm @@ -52,16 +52,16 @@ clients.") (define-public vdirsyncer (package (name "vdirsyncer") - (version "0.10.0") + (version "0.11.0") (source (origin (method url-fetch) - (uri (string-append "https://pypi.python.org/packages/0b/fb/" - "c42223e1e9169e4770194e62143d431755724b080d8cb" - "77f14705b634815/" - "vdirsyncer-" version ".tar.gz")) + (uri (string-append + "https://pypi.python.org/packages/" + "39/e5/1e7097b5f0cd6de79ec9014f162a6000b77ca2a369ea8a1588a2eebff570/" + name "-" version ".tar.gz")) (sha256 (base32 - "1gf86sbd6w0w4zayh9r3irlp5jwrzbjikjc0vs5zkdpa5c199f78")))) + "1bf0vk29qdswar0q4267aamfriq3134302i2p3qcqxpmmcwx3qfv")))) (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases diff --git a/gnu/packages/dictionaries.scm b/gnu/packages/dictionaries.scm index ac020b27c8..5aea716150 100644 --- a/gnu/packages/dictionaries.scm +++ b/gnu/packages/dictionaries.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -76,3 +77,41 @@ "V.E.R.A. (Virtual Entity of Relevant Acronyms) is a list of computing acronyms distributed as an info document.") (license fdl1.3+))) + +(define-public gcide + (package + (name "gcide") + (version "0.51") + (source (origin + (method url-fetch) + (uri (string-append + "mirror://gnu/gcide/gcide-" version ".tar.xz")) + (sha256 + (base32 + "1wm0s51ygc6480dq8gwahzr35ls8jgpf34yiwl5yqcaa0i19fdv7")))) + (build-system trivial-build-system) + (arguments + '(#:builder (begin + (use-modules (guix build utils)) + (let* ((src (assoc-ref %build-inputs "source")) + (tar (assoc-ref %build-inputs "tar")) + (xz (assoc-ref %build-inputs "xz")) + (out (assoc-ref %outputs "out")) + (datadir (string-append out "/share/gcide"))) + (set-path-environment-variable "PATH" '("bin") + (list tar xz)) + (mkdir-p datadir) + (zero? (system* "tar" "-C" datadir + "--strip-components=1" + "-xvf" src)))) + #:modules ((guix build utils)))) + (native-inputs + `(("tar" ,tar) + ("xz" ,xz))) + (synopsis "GNU Collaborative International Dictionary of English") + (description + "GCIDE is a free dictionary based on a combination of sources. It can +be used via the GNU Dico program or accessed online at +http://gcide.gnu.org.ua/") + (home-page "http://gcide.gnu.org.ua/") + (license gpl3+))) diff --git a/gnu/packages/disk.scm b/gnu/packages/disk.scm index c7aa0dc556..c60eacb15e 100644 --- a/gnu/packages/disk.scm +++ b/gnu/packages/disk.scm @@ -123,7 +123,7 @@ to recover data more efficiently by only reading the necessary blocks.") (define-public dosfstools (package (name "dosfstools") - (version "3.0.28") + (version "4.0") (source (origin (method url-fetch) @@ -132,14 +132,12 @@ to recover data more efficiently by only reading the necessary blocks.") name "-" version ".tar.xz")) (sha256 (base32 - "1qkya6lald91c8nsf29jwnk0k5v42wlj24gacfdp3wpc8hq935gf")))) + "1bvxbv1w6vhbx0nx7ygp700wq5k2hjv0hm7w0kz1x7amaf4p6dwh")))) (build-system gnu-build-system) (arguments `(#:make-flags (list (string-append "PREFIX=" %output) "CC=gcc") - #:tests? #f ;no tests - #:phases (modify-phases %standard-phases - (delete 'configure)))) + #:tests? #f)) ;no tests (home-page "https://github.com/dosfstools/dosfstools") (synopsis "Utilities for making and checking MS-DOS FAT filesystems") (description diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm index e92d8d26b8..819343ad42 100644 --- a/gnu/packages/dns.scm +++ b/gnu/packages/dns.scm @@ -33,7 +33,7 @@ (define-public dnsmasq (package (name "dnsmasq") - (version "2.72") + (version "2.76") (source (origin (method url-fetch) (uri (string-append @@ -41,7 +41,7 @@ version ".tar.xz")) (sha256 (base32 - "1c80hq09hfm8cp5pirfb8wdlc7dqkp7zzmbmdaradcvlblzx42vx")))) + "15lzih6671gh9knzpl8mxchiml7z5lfqzr7jm2r0rjhrxs6nk4jb")))) (build-system gnu-build-system) (arguments `(#:phases diff --git a/gnu/packages/docbook.scm b/gnu/packages/docbook.scm index 2bd86fe5d2..b8a8ba69dc 100644 --- a/gnu/packages/docbook.scm +++ b/gnu/packages/docbook.scm @@ -23,7 +23,7 @@ #:use-module (gnu packages compression) #:use-module (gnu packages imagemagick) #:use-module (gnu packages inkscape) - #:use-module (gnu packages texlive) + #:use-module (gnu packages tex) #:use-module (gnu packages python) #:use-module (gnu packages base) #:use-module (gnu packages xml) diff --git a/gnu/packages/ebook.scm b/gnu/packages/ebook.scm index f972d8831f..2b450cabd6 100644 --- a/gnu/packages/ebook.scm +++ b/gnu/packages/ebook.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015, 2016 Andreas Enge <andreas@enge.fr> +;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -60,7 +61,7 @@ (define-public calibre (package (name "calibre") - (version "2.51.0") + (version "2.58.0") (source (origin (method url-fetch) @@ -68,8 +69,8 @@ version "/calibre-" version ".tar.xz")) (sha256 - (base32 - "1rhpcxic4g2zyr5s3xn8dayyb45l9r8zyniaig8j7pl5kmsfjijn")) + (base32 + "0npqvfjqj1vwa7nmnsyd4d30z40brydw275ldf1jankrp6dr9dyd")) ;; Remove non-free or doubtful code, see ;; https://lists.gnu.org/archive/html/guix-devel/2015-02/msg00478.html (modules '((guix build utils))) diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm index 82604c4e30..674b8ac7a1 100644 --- a/gnu/packages/elf.scm +++ b/gnu/packages/elf.scm @@ -30,7 +30,7 @@ (define-public elfutils (package (name "elfutils") - (version "0.161") + (version "0.166") (source (origin (method url-fetch) (uri (string-append @@ -38,7 +38,7 @@ version "/elfutils-" version ".tar.bz2")) (sha256 (base32 - "0w50szymyqvx8g0vkwrvnv17grqxva6x1z9dm9m3i99zg2hr232p")) + "0c5s9klq1zyb0zkmrw636k97kz30p5ih8y8dpq8b4f54r0a6j19w")) (patches (search-patches "elfutils-tests-ptrace.patch")))) (build-system gnu-build-system) diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm index 6d80d37d27..386f91aebc 100644 --- a/gnu/packages/emacs.scm +++ b/gnu/packages/emacs.scm @@ -9,6 +9,9 @@ ;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com> ;;; Copyright © 2015, 2016 Christopher Allan Webber <cwebber@dustycloud.org> ;;; Copyright © 2016 humanitiesNerd <catonano@gmail.com> +;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2016 David Thompson <davet@gnu.org> +;;; Copyright © 2016 Matthew Jordan <matthewjordandevops@yandex.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -80,7 +83,19 @@ (base32 "0kn3rzm91qiswi0cql89kbv6mqn27rwsyjfb8xmwy9m5s8fxfiyx")) (patches (search-patches "emacs-exec-path.patch" - "emacs-source-date-epoch.patch")))) + "emacs-fix-scheme-indent-function.patch" + "emacs-source-date-epoch.patch")) + (modules '((guix build utils))) + (snippet + ;; Delete the bundled byte-compiled elisp files and + ;; generated autoloads. + '(with-directory-excursion "lisp" + (for-each delete-file + (append (find-files "." "\\.elc$") + (find-files "." "loaddefs\\.el$") + ;; This is the only "autoloads" file that + ;; does not have "*loaddefs.el" name. + '("eshell/esh-groups.el"))))))) (build-system glib-or-gtk-build-system) (arguments `(#:phases @@ -159,10 +174,25 @@ large Lisp programs. It has full Unicode support for nearly all human languages.") (license license:gpl3+))) -(define-public emacs-no-x +(define-public emacs-minimal ;; This is the version that you should use as an input to packages that just ;; need to byte-compile .el files. (package (inherit emacs) + (name "emacs-minimal") + (synopsis "The extensible text editor (used only for byte-compilation)") + (build-system gnu-build-system) + (arguments + (substitute-keyword-arguments (package-arguments emacs) + ((#:phases phases) + `(modify-phases ,phases + (delete 'install-site-start))))) + (inputs + `(("ncurses" ,ncurses))) + (native-inputs + `(("pkg-config" ,pkg-config))))) + +(define-public emacs-no-x + (package (inherit emacs) (name "emacs-no-x") (synopsis "The extensible, customizable, self-documenting text editor (console only)") @@ -241,8 +271,8 @@ editor (without an X toolkit)" ) "/share/emacs/site-lisp/" "geiser-autoloads.el"))) %standard-phases))) - (inputs `(("guile" ,guile-2.0) - ("emacs" ,emacs-no-x))) + (inputs `(("guile" ,guile-2.0))) + (native-inputs `(("emacs" ,emacs-minimal))) (home-page "http://nongnu.org/geiser/") (synopsis "Collection of Emacs modes for Guile and Racket hacking") (description @@ -296,7 +326,7 @@ metadata.") (base32 "0pp3n8q6kc70blqsaw0zlzp6bc327dpgdrjr0cnh7hqg1lras7ka")))) (build-system trivial-build-system) - (inputs `(("emacs" ,emacs-no-x))) + (native-inputs `(("emacs" ,emacs-minimal))) (arguments `(#:modules ((guix build utils) (guix build emacs-utils)) @@ -367,7 +397,7 @@ when typing parentheses directly or commenting out code line by line.") (lisp (string-append out "/share/emacs/site-lisp/"))) (emacs-generate-autoloads ,name lisp))))))) - (native-inputs `(("emacs" ,emacs-no-x))) + (native-inputs `(("emacs" ,emacs-minimal))) (home-page "https://github.com/magit/git-modes") (synopsis "Emacs major modes for Git configuration files") (description @@ -403,7 +433,7 @@ on stdout instead of using a socket as the Emacsclient does.") (define-public magit (package (name "magit") - (version "2.6.2") + (version "2.7.0") (source (origin (method url-fetch) (uri (string-append @@ -411,10 +441,10 @@ on stdout instead of using a socket as the Emacsclient does.") version "/" name "-" version ".tar.gz")) (sha256 (base32 - "0im1jrqw29g5anrrjflj6b2gpyqkvpghnq8zvywxyhmjwzar4rn7")))) + "1kzd8k2n0lcr04jvn5b6d29zf765mxgshfhzflkzndwmvyxmlqpl")))) (build-system gnu-build-system) (native-inputs `(("texinfo" ,texinfo) - ("emacs" ,emacs-no-x))) + ("emacs" ,emacs-minimal))) (inputs `(("git" ,git))) (propagated-inputs `(("dash" ,emacs-dash) @@ -476,7 +506,7 @@ operations.") (base32 "04y88j7q9h8xjbx5dbick6n5nr1522sn9i1znp0qwk3vjb4b5mzz")))) (build-system trivial-build-system) - (native-inputs `(("emacs" ,emacs-no-x) + (native-inputs `(("emacs" ,emacs-minimal) ("tar" ,tar) ("gzip" ,gzip))) (propagated-inputs `(("dash" ,emacs-dash) @@ -534,9 +564,9 @@ support for Git-SVN.") version ".tar.gz")) (sha256 (base32 "1kxc2yj8vb122dv91r68h7c5ladcryx963fr16plfhg71fv7f9av")))) - (inputs `(("emacs" ,emacs-no-x))) (native-inputs - `(("texinfo" ,texinfo))) + `(("emacs" ,emacs-minimal) + ("texinfo" ,texinfo))) (build-system gnu-build-system) (arguments `(#:make-flags (list (string-append "EMACS=" @@ -616,7 +646,7 @@ programs.") (setenv "PATH" (string-append emacs "/bin")) (emacs-byte-compile-directory lispdir) #t)))) - (native-inputs `(("emacs" ,emacs-no-x))) + (native-inputs `(("emacs" ,emacs-minimal))) (home-page "http://elpa.gnu.org/packages/let-alist.html") (synopsis "Easily let-bind values of an assoc-list by their names") (description @@ -675,10 +705,10 @@ provides an optional IDE-like error list.") (base32 "0zfxmq86pwk64yv0426gnjrvhjrgrjqn08sdcdhmmjmfpmqvm79y")))) (build-system gnu-build-system) - (native-inputs `(("autoconf" ,autoconf))) + (native-inputs `(("autoconf" ,autoconf) + ("emacs" ,emacs-minimal))) (inputs `(("w3m" ,w3m) - ("imagemagick" ,imagemagick) - ("emacs" ,emacs-no-x))) + ("imagemagick" ,imagemagick))) (arguments `(#:modules ((guix build gnu-build-system) (guix build utils) @@ -747,8 +777,8 @@ provides an optional IDE-like error list.") (sha256 (base32 "10byvyv9dk0ib55gfqm7bcpxmx2qbih1jd03gmihrppr2mn52nff")))) (build-system gnu-build-system) - (inputs `(("wget" ,wget) - ("emacs" ,emacs-no-x))) + (inputs `(("wget" ,wget))) + (native-inputs `(("emacs" ,emacs-minimal))) (arguments `(#:modules ((guix build gnu-build-system) (guix build utils) @@ -790,14 +820,14 @@ provides an optional IDE-like error list.") (define-public emms (package (name "emms") - (version "4.0") + (version "4.1") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/emms/emms-" version ".tar.gz")) (sha256 (base32 - "1q0n3iwva8bvai2rl9sm49sdjmk0wi7vajz4knz01l7g67nrp87l")) + "0ay6631p3dr6xnhkm7skwn0gp317r1mxbip28m126w4zqf05cbh3")) (modules '((guix build utils))) (snippet '(substitute* "Makefile" @@ -823,71 +853,68 @@ provides an optional IDE-like error list.") #:imported-modules (,@%gnu-build-system-modules (guix build emacs-utils)) - #:phases (alist-replace - 'configure - (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out")) - (vorbis (assoc-ref inputs "vorbis-tools")) - (alsa (assoc-ref inputs "alsa-utils")) - (mpg321 (assoc-ref inputs "mpg321")) - (mp3info (assoc-ref inputs "mp3info"))) - ;; Specify the installation directory. - (substitute* "Makefile" - (("PREFIX=.*$") - (string-append "PREFIX := " out "\n"))) - - (setenv "SHELL" (which "sh")) - (setenv "CC" "gcc") - - ;; Specify the absolute file names of the various - ;; programs so that everything works out-of-the-box. - (with-directory-excursion "lisp" - (emacs-substitute-variables - "emms-player-mpg321-remote.el" - ("emms-player-mpg321-remote-command" - (string-append mpg321 "/bin/mpg321"))) - (substitute* "emms-player-simple.el" - (("\"ogg123\"") - (string-append "\"" vorbis "/bin/ogg123\""))) - (emacs-substitute-variables "emms-info-ogginfo.el" - ("emms-info-ogginfo-program-name" - (string-append vorbis "/bin/ogginfo"))) - (emacs-substitute-variables "emms-info-libtag.el" - ("emms-info-libtag-program-name" - (string-append out "/bin/emms-print-metadata"))) - (emacs-substitute-variables "emms-info-mp3info.el" - ("emms-info-mp3info-program-name" - (string-append mp3info "/bin/mp3info"))) - (substitute* "emms-volume-amixer.el" - (("\"amixer\"") - (string-append "\"" alsa "/bin/amixer\""))) - (substitute* "emms-tag-editor.el" - (("\"mp3info\"") - (string-append "\"" mp3info "/bin/mp3info\"")))))) - (alist-cons-before - 'install 'pre-install - (lambda* (#:key outputs #:allow-other-keys) - ;; The 'install' rule expects the target directory to - ;; exist. - (let* ((out (assoc-ref outputs "out")) - (man1 (string-append out "/share/man/man1"))) - (mkdir-p man1) - #t)) - (alist-cons-after - 'install 'post-install - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (target (string-append - out "/bin/emms-print-metadata"))) - (symlink "emms-auto.el" - (string-append out "/share/emacs/site-lisp/" - "emms-autoloads.el")) - (mkdir-p (dirname target)) - (copy-file "src/emms-print-metadata" target) - (chmod target #o555))) - %standard-phases))) + #:phases + (modify-phases %standard-phases + (replace 'configure + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (vorbis (assoc-ref inputs "vorbis-tools")) + (alsa (assoc-ref inputs "alsa-utils")) + (mpg321 (assoc-ref inputs "mpg321")) + (mp3info (assoc-ref inputs "mp3info"))) + ;; Specify the installation directory. + (substitute* "Makefile" + (("PREFIX=.*$") + (string-append "PREFIX := " out "\n"))) + + (setenv "SHELL" (which "sh")) + (setenv "CC" "gcc") + + ;; Specify the absolute file names of the various + ;; programs so that everything works out-of-the-box. + (with-directory-excursion "lisp" + (emacs-substitute-variables + "emms-player-mpg321-remote.el" + ("emms-player-mpg321-remote-command" + (string-append mpg321 "/bin/mpg321"))) + (substitute* "emms-player-simple.el" + (("\"ogg123\"") + (string-append "\"" vorbis "/bin/ogg123\""))) + (emacs-substitute-variables "emms-info-ogginfo.el" + ("emms-info-ogginfo-program-name" + (string-append vorbis "/bin/ogginfo"))) + (emacs-substitute-variables "emms-info-libtag.el" + ("emms-info-libtag-program-name" + (string-append out "/bin/emms-print-metadata"))) + (emacs-substitute-variables "emms-info-mp3info.el" + ("emms-info-mp3info-program-name" + (string-append mp3info "/bin/mp3info"))) + (substitute* "emms-volume-amixer.el" + (("\"amixer\"") + (string-append "\"" alsa "/bin/amixer\""))) + (substitute* "emms-tag-editor.el" + (("\"mp3info\"") + (string-append "\"" mp3info "/bin/mp3info\""))))))) + (add-before 'install 'pre-install + (lambda* (#:key outputs #:allow-other-keys) + ;; The 'install' rule expects the target directory to exist. + (let* ((out (assoc-ref outputs "out")) + (man1 (string-append out "/share/man/man1"))) + (mkdir-p man1) + #t))) + (add-after 'install 'post-install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (target (string-append + out "/bin/emms-print-metadata"))) + (symlink "emms-auto.el" + (string-append out "/share/emacs/site-lisp/" + "emms-autoloads.el")) + (mkdir-p (dirname target)) + (copy-file "src/emms-print-metadata" target) + (chmod target #o555))))) #:tests? #f)) - (native-inputs `(("emacs" ,emacs-no-x) ;for (guix build emacs-utils) + (native-inputs `(("emacs" ,emacs-minimal) ;for (guix build emacs-utils) ("texinfo" ,texinfo))) (inputs `(("alsa-utils" ,alsa-utils) ("vorbis-tools" ,vorbis-tools) @@ -937,7 +964,7 @@ light user interface.") (with-directory-excursion site (symlink "bbdb-loaddefs.el" "bbdb-autoloads.el")))) %standard-phases))) - (native-inputs `(("emacs" ,emacs-no-x))) + (native-inputs `(("emacs" ,emacs-minimal))) (home-page "http://savannah.nongnu.org/projects/bbdb/") (synopsis "Contact management utility for Emacs") (description @@ -950,14 +977,14 @@ mode, Rmail, Gnus, MH-E, and VM). BBDB is fully customizable.") (define-public emacs-async (package (name "emacs-async") - (version "1.6") + (version "1.9") (source (origin (method url-fetch) (uri (string-append "http://elpa.gnu.org/packages/async-" version ".tar")) (sha256 (base32 - "17psvz75n42x33my967wkgi7r0blx46n3jdv510j0z5jswv66039")))) + "1ip5nc8xyln5szvqwp6wqva9xr84pn8ssn3nnphrszr19y4js2bm")))) (build-system emacs-build-system) (home-page "http://elpa.gnu.org/packages/async.html") (synopsis "Asynchronous processing in Emacs") @@ -983,6 +1010,9 @@ as a library for other Emacs packages.") (base32 "1pmki8hdjjikxlvip3pzi350bln3gcimr27yjf0xfwjvnp5hh9nc")))) (build-system emacs-build-system) + ;; We use 'emacs' because AUCTeX requires dbus at compile time + ;; ('emacs-minimal' does not provide dbus). + (arguments `(#:emacs ,emacs)) (native-inputs `(("perl" ,perl))) (home-page "http://www.gnu.org/software/auctex/") @@ -1017,7 +1047,7 @@ or XEmacs.") (native-inputs `(("autoconf" ,autoconf) ("automake" ,automake) - ("emacs" ,emacs-no-x) + ("emacs" ,emacs-minimal) ("texinfo" ,texinfo))) (home-page "https://github.com/purcell/mmm-mode") (synopsis "Allow multiple major modes in an Emacs buffer") @@ -1081,7 +1111,7 @@ single buffer.") (native-inputs `(("autoconf" ,autoconf) ("automake" ,automake) ("pkg-config" ,pkg-config) - ("emacs" ,emacs-no-x))) + ("emacs" ,emacs-minimal))) (propagated-inputs `(("let-alist" ,let-alist))) (inputs `(("poppler" ,poppler) @@ -1200,7 +1230,7 @@ files and directories.") (source (origin (method git-fetch) (uri (git-reference - (commit "8807064693") + (commit "880706469338ab59b5bb7dbe8460016f89755364") (url "https://github.com/gregsexton/ob-ipython.git"))) (sha256 (base32 @@ -1385,20 +1415,6 @@ to a key in your preferred mode.") identifiers in the MIT-Scheme documentation.") (license license:gpl2+))) -;;; XXX: move this procedure to an utility module -(define* (uncompressed-file-fetch url hash-algo hash - #:optional name - #:key (system (%current-system)) - (guile (default-guile))) - (mlet %store-monad ((drv (url-fetch url hash-algo hash name - #:system system - #:guile guile))) - (gexp->derivation (or name (basename url)) - #~(begin - (mkdir #$output) - (chdir #$output) - (copy-file #$drv (basename #$url)))))) - (define-public emacs-constants (package (name "emacs-constants") @@ -1406,7 +1422,7 @@ identifiers in the MIT-Scheme documentation.") (home-page "https://staff.fnwi.uva.nl/c.dominik/Tools/constants") (source (origin - (file-name (string-append name "-" version ".el")) + (file-name (string-append name "-" version ".tar.gz")) (method url-fetch) (uri (string-append "https://github.com/fedeinthemix/emacs-constants" "/archive/v" version ".tar.gz")) @@ -1493,8 +1509,6 @@ debugging, documentation lookup, and so on.") (base32 "1yrgfj8y69xmcb6kwgplhq68ndm9410qwh7sd2knnd1gchpphdc0")))) (build-system emacs-build-system) - (native-inputs - `(("emacs" ,emacs-no-x))) (home-page "https://github.com/auto-complete/popup-el") (synopsis "Visual Popup User Interface for Emacs") (description @@ -1536,14 +1550,12 @@ insertion mode. When enabled all keys are implicitly prefixed with (version "0.13") (home-page "http://www.loveshack.ukfsn.org/emacs") (source (origin - (method uncompressed-file-fetch) + (method url-fetch) (uri "http://www.loveshack.ukfsn.org/emacs/rfcview.el") (sha256 (base32 "0ympj5rxig383zl2jf0pzdsa80nnq0dpvjiriq0ivfi98fj7kxbz")))) (build-system emacs-build-system) - (native-inputs - `(("emacs" ,emacs-no-x))) (synopsis "Prettify Request for Comments (RFC) documents") (description "The Internet Engineering Task Force (IETF) and the Internet Society (ISOC) publish various Internet-related protocols and specifications @@ -1562,14 +1574,12 @@ local directories.") (version "12") (home-page "http://user42.tuxfamily.org/ffap-rfc-space/index.html") (source (origin - (method uncompressed-file-fetch) + (method url-fetch) (uri "http://download.tuxfamily.org/user42/ffap-rfc-space.el") (sha256 (base32 "1iv61dv57a73mdps7rn6zmgz7nqh14v0ninidyrasy45b1nv6gck")))) (build-system emacs-build-system) - (native-inputs - `(("emacs" ,emacs-no-x))) (synopsis "Make ffap recognize an RFC with a space before its number") (description "The Internet Engineering Task Force (IETF) and the Internet Society (ISOC) publish various Internet-related protocols and @@ -1631,3 +1641,443 @@ wrap-region, electric-pair-mode, paredit and others. With the basic features found in other packages it also brings many improvements as well as completely new features.") (license license:gpl3+))) + +(define-public emacs-clojure-mode + (package + (name "emacs-clojure-mode") + (version "5.3.0") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/clojure-emacs/clojure-mode/archive/" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0gi8ra3ap5m3mz4qh1yxp2cldn7z9xcxvypznr6rrlc6a9l8s5a6")))) + (build-system emacs-build-system) + (home-page "http://github.com/clojure-emacs/clojure-mode") + (synopsis "Major mode for Clojure code") + (description + "This Emacs package provides font-lock, indentation, navigation and basic +refactoring for the @uref{http://clojure.org, Clojure programming language}. +It is recommended to use @code{clojure-mode} with paredit or smartparens.") + (license license:gpl3+))) + +(define-public emacs-epl + (package + (name "emacs-epl") + (version "0.8") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/cask/epl/archive/" + version ".tar.gz")) + (sha256 + (base32 + "1511n3a3f5gvaf2b4nh018by61ciyzi3y3603fzqma7p9hrckarc")))) + (build-system emacs-build-system) + (home-page "http://github.com/cask/epl") + (synopsis "Emacs Package Library") + (description + "A package management library for Emacs, based on @code{package.el}. + +The purpose of this library is to wrap all the quirks and hassle of +@code{package.el} into a sane API.") + (license license:gpl3+))) + +(define-public emacs-queue + (package + (name "emacs-queue") + (version "0.1.1") + (source (origin + (method url-fetch) + (uri (string-append "http://elpa.gnu.org/packages/queue-" + version ".el")) + (sha256 + (base32 + "0jw24fxqnf9qcaf2nh09cnds1kqfk7hal35dw83x1ari95say391")))) + (build-system emacs-build-system) + (home-page "http://www.dr-qubit.org/tags/computing-code-emacs.html") + (synopsis "Queue data structure for Emacs") + (description + "This Emacs library provides queue data structure. These queues can be +used both as a first-in last-out (FILO) and as a first-in first-out (FIFO) +stack, i.e. elements can be added to the front or back of the queue, and can +be removed from the front. This type of data structure is sometimes called an +\"output-restricted deque\".") + (license license:gpl3+))) + +(define-public emacs-pkg-info + (package + (name "emacs-pkg-info") + (version "0.6") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/lunaryorn/pkg-info.el/archive/" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1gy1jks5mmm02gg1c8gcyr4f8a9s5ggzhk56gv33b9mzjqzi5rd5")))) + (build-system emacs-build-system) + (propagated-inputs `(("emacs-epl" ,emacs-epl))) + (home-page "https://github.com/lunaryorn/pkg-info.el") + (synopsis "Information about Emacs packages") + (description + "This library extracts information from the installed Emacs packages.") + (license license:gpl3+))) + +(define-public emacs-spinner + (package + (name "emacs-spinner") + (version "1.7.1") + (source (origin + (method url-fetch) + (uri (string-append "http://elpa.gnu.org/packages/spinner-" + version ".el")) + (sha256 + (base32 + "1fmwzdih0kbyvs8bn38mpm4sbs2mikqy2vdykfy9g20wpa8vb681")))) + (build-system emacs-build-system) + (home-page "https://github.com/Malabarba/spinner.el") + (synopsis "Emacs mode-line spinner for operations in progress") + (description + "This Emacs package adds spinners and progress-bars to the mode-line for +ongoing operations.") + (license license:gpl3+))) + +(define-public emacs-seq + (package + (name "emacs-seq") + (version "2.15") + (source (origin + (method url-fetch) + (uri (string-append "http://elpa.gnu.org/packages/seq-" + version ".tar")) + (sha256 + (base32 + "09wi1765bmn7i8fg6ajjfaxgs4ipc42d58zx2fdqpidrdg9c7q73")))) + (build-system emacs-build-system) + (home-page "http://elpa.gnu.org/packages/seq.html") + (synopsis "Sequence manipulation functions for Emacs") + (description + "This Emacs library provides sequence-manipulation functions that +complement basic functions provided by @code{subr.el}. All provided functions +work on lists, strings and vectors.") + (license license:gpl3+))) + +(define-public emacs-better-defaults + (package + (name "emacs-better-defaults") + (version "0.1.3") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/technomancy/better-defaults" + "/archive/" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "08fg4zslzlxbvyil5g4gwvwd22fh4zsgqprs5wh9hv1rgc6757m2")))) + (build-system emacs-build-system) + (home-page "https://github.com/technomancy/better-defaults") + (synopsis "Better defaults for Emacs") + (description + "Better defaults attempts to address the most obvious deficiencies of the +Emacs default configuration in uncontroversial ways that nearly everyone can +agree upon.") + (license license:gpl3+))) + +(define-public emacs-smex + (package + (name "emacs-smex") + (version "3.0") + (source (origin + (method url-fetch) + (uri (string-append "https://raw.githubusercontent.com" + "/nonsequitur/smex/" version "/smex.el")) + (file-name (string-append "smex-" version ".el")) + (sha256 + (base32 + "0ar310zx9k5y4i1vl2rawvi712xj9gx77160860jbs691p77cxqp")))) + (build-system emacs-build-system) + (home-page "http://github.com/nonsequitur/smex/") + (synopsis "M-x interface with Ido-style fuzzy matching") + (description + "Smex is a M-x enhancement for Emacs. Built on top of Ido, it provides a +convenient interface to your recently and most frequently used commands. And +to all the other commands, too.") + (license license:gpl3+))) + +(define-public emacs-js2-mode + (package + (name "emacs-js2-mode") + (version "20150909") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/mooz/js2-mode/archive/" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1nsm36c4kwb473p13i58fgrnlk8fbn3rdhj47d9xz70az4ra44q0")))) + (build-system emacs-build-system) + (home-page "https://github.com/mooz/js2-mode/") + (synopsis "Improved JavaScript editing mode for Emacs") + (description + "Js2-mode provides a JavaScript major mode for Emacs that is more +advanced than the built-in javascript-mode. Features include accurate syntax +highlighting using a recursive-descent parser, on-the-fly reporting of syntax +errors and strict-mode warnings, smart line-wrapping within comments and +strings, and code folding.") + (license license:gpl3+))) + +(define-public emacs-markdown-mode + (package + (name "emacs-markdown-mode") + (version "2.1") + (source (origin + (method url-fetch) + (uri (string-append "https://raw.githubusercontent.com/jrblevin" + "/markdown-mode/v" version + "/markdown-mode.el")) + (file-name (string-append "markdown-mode-" version ".el")) + (sha256 + (base32 + "1faibar32jnjia9202swblw91q6z1g5s4k9xmypwjahfh8yznl6w")))) + (build-system emacs-build-system) + (home-page "http://jblevins.org/projects/markdown-mode/") + (synopsis "Emacs Major mode for Markdown files") + (description + "Markdown-mode is a major mode for editing Markdown-formatted text files +in Emacs.") + (license license:gpl3+))) + +(define-public emacs-projectile + (package + (name "emacs-projectile") + (version "0.13.0") + (source (origin + (method url-fetch) + (uri (string-append "https://raw.githubusercontent.com/bbatsov" + "/projectile/v" version "/projectile.el")) + (file-name (string-append "projectile-" version ".el")) + (sha256 + (base32 + "1pc6xb61hzxzc5hkqkli1ab0s7wz0rfgx4kcn9y30ksvhw18smbz")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-dash" ,emacs-dash) + ("emacs-pkg-info" ,emacs-pkg-info))) + (home-page "https://github.com/bbatsov/projectile") + (synopsis "Manage and navigate projects in Emacs easily") + (description + "This library provides easy project management and navigation. The +concept of a project is pretty basic - just a folder containing special file. +Currently git, mercurial and bazaar repos are considered projects by default. +If you want to mark a folder manually as a project just create an empty +.projectile file in it.") + (license license:gpl3+))) + +(define-public emacs-elfeed + (package + (name "emacs-elfeed") + (version "1.4.1") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/skeeto/elfeed/archive/" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0i75r8x9ypbfjlnym04h16ikcrlks86p7wsgawrx7mh1lk4inp89")))) + (build-system emacs-build-system) + (home-page "https://github.com/skeeto/elfeed") + (synopsis "Atom/RSS feed reader for Emacs") + (description + "Elfeed is an extensible web feed reader for Emacs, supporting both Atom +and RSS, with a user interface inspired by notmuch.") + (license license:gpl3+))) + +(define-public emacs-rainbow-delimiters + (package + (name "emacs-rainbow-delimiters") + (version "2.1.3") + (source (origin + (method url-fetch) + (uri (string-append "https://raw.githubusercontent.com/Fanael" + "/rainbow-delimiters/" version + "/rainbow-delimiters.el")) + (file-name (string-append "rainbow-delimiters-" version ".el")) + (sha256 + (base32 + "1b3kampwsjabhcqdp0khgff13wc5jqhy3rbvaa12vnv7qy22l9ck")))) + (build-system emacs-build-system) + (home-page "https://github.com/Fanael/rainbow-delimiters") + (synopsis "Highlight brackets according to their depth") + (description + "Rainbow-delimiters is a \"rainbow parentheses\"-like mode for Emacs which +highlights parentheses, brackets, and braces according to their depth. Each +successive level is highlighted in a different color, making it easy to spot +matching delimiters, orient yourself in the code, and tell which statements +are at a given level.") + (license license:gpl3+))) + +(define-public emacs-ido-completing-read+ + (package + (name "emacs-ido-completing-read+") + (version "3.12") + (source (origin + (method url-fetch) + (uri (string-append "https://raw.githubusercontent.com" + "/DarwinAwardWinner/ido-ubiquitous/v" + version "/ido-completing-read+.el")) + (file-name (string-append "ido-completing-read+-" version ".el")) + (sha256 + (base32 + "1cyalb0p7nfsm4n6n9q6rjmvn6adqc0fq8ybnlj3n41n289dkfjf")))) + (build-system emacs-build-system) + (home-page "https://github.com/DarwinAwardWinner/ido-ubiquitous") + (synopsis "Replacement for completing-read using ido") + (description + "The ido-completing-read+ function is a wrapper for ido-completing-read. +Importantly, it detects edge cases that ordinary ido cannot handle and either +adjusts them so ido can handle them, or else simply falls back to the standard +Emacs completion function instead.") + (license license:gpl3+))) + +(define-public emacs-ido-ubiquitous + (package + (name "emacs-ido-ubiquitous") + (version "3.12") + (source (origin + (method url-fetch) + (uri (string-append "https://raw.githubusercontent.com" + "/DarwinAwardWinner/ido-ubiquitous/v" + version "/ido-ubiquitous.el")) + (file-name (string-append "ido-ubiquitous-" version ".el")) + (sha256 + (base32 + "197ypji0fb6jsdcq40rpnknwlh3imas6s6jbsvkfm0pz9988c3q2")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-ido-completing-read+" ,emacs-ido-completing-read+))) + (home-page "https://github.com/DarwinAwardWinner/ido-ubiquitous") + (synopsis "Use ido (nearly) everywhere") + (description + "Ido-ubiquitous enables ido-style completion for almost every function +that uses the standard completion function completing-read.") + (license license:gpl3+))) + +(define-public emacs-yaml-mode + (package + (name "emacs-yaml-mode") + (version "0.0.12") + (source (origin + (method url-fetch) + (uri (string-append "https://raw.githubusercontent.com/yoshiki" + "/yaml-mode/v" version "/yaml-mode.el")) + (file-name (string-append "yaml-mode-" version ".el")) + (sha256 + (base32 + "17wq433ycli0qx4gdhgrmb392qblm6y2dwcyn38j5ja1lasfb0ax")))) + (build-system emacs-build-system) + (home-page "https://github.com/yoshiki/yaml-mode") + (synopsis "Major mode for editing YAML files") + (description + "Yaml-mode is an Emacs major mode for editing files in the YAML data +serialization format. It was initially developed by Yoshiki Kurihara and many +features were added by Marshall Vandegrift. As YAML and Python share the fact +that indentation determines structure, this mode provides indentation and +indentation command behavior very similar to that of python-mode.") + (license license:gpl3+))) + +(define-public emacs-web-mode + (package + (name "emacs-web-mode") + (version "14") + (source (origin + (method url-fetch) + (uri (string-append "https://raw.githubusercontent.com/fxbois" + "/web-mode/v" version "/web-mode.el")) + (file-name (string-append "web-mode-" version ".el")) + (sha256 + (base32 + "086hik5fmxg3kx74qmransx9cz961qd22d4m6ah2dw6cwaj1s3s5")))) + (build-system emacs-build-system) + (synopsis "Major mode for editing web templates") + (description "Web-mode is an Emacs major mode for editing web templates +aka HTML files embedding parts (CSS/JavaScript) and blocks (pre rendered by +client/server side engines). Web-mode is compatible with many template +engines: PHP, JSP, ASP, Django, Twig, Jinja, Mustache, ERB, FreeMarker, +Velocity, Cheetah, Smarty, CTemplate, Mustache, Blade, ErlyDTL, Go Template, +Dust.js, React/JSX, Angularjs, ejs, etc.") + (home-page "http://web-mode.org/") + (license license:gpl3+))) + +(define-public emacs-helm + (package + (name "emacs-helm") + (version "1.9.6") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/" name "/helm/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0fc897rwf1fm2m7jrsikkgcyzhngfcysxfmzchpwzfj6v9sb5rl9")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-async" ,emacs-async) + ("emacs-popup" ,emacs-popup))) + (home-page "https://emacs-helm.github.io/helm/") + (synopsis "Incremental completion and selection narrowing +framework for Emacs") + (description "Helm is incremental completion and selection narrowing +framework for Emacs. It will help steer you in the right direction when +you're looking for stuff in Emacs (like buffers, files, etc). Helm is a fork +of @code{anything.el} originally written by Tamas Patrovic and can be +considered to be its successor. Helm sets out to clean up the legacy code in +@code{anything.el} and provide a cleaner, leaner and more modular tool, that's +not tied in the trap of backward compatibility.") + (license license:gpl3+))) + +(define-public emacs-cider + (package + (name "emacs-cider") + (version "0.12.0") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/clojure-emacs/cider/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "00qzbfjy3w6bcnki7gw0clmi0cc5yqjdrcyhgv4ymijjs79h9p5s")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-clojure-mode" ,emacs-clojure-mode) + ("emacs-spinner" ,emacs-spinner) + ("emacs-pkg-info" ,emacs-pkg-info) + ("emacs-queue" ,emacs-queue) + ("emacs-seq" ,emacs-seq))) + (home-page "https://cider.readthedocs.org/") + (synopsis "Clojure development environment for Emacs") + (description + "CIDER (Clojure Interactive Development Environment that Rocks) aims to +provide an interactive development experience similar to the one you'd get +when programming in Emacs Lisp, Common Lisp (with SLIME or Sly), Scheme (with +Geiser) and Smalltalk. + +CIDER is the successor to the now deprecated combination of using SLIME + +swank-clojure for Clojure development. + +There are plenty of differences between CIDER and SLIME, but the core ideas +are pretty much the same (and SLIME served as the principle inspiration for +CIDER).") + (license license:gpl3+))) diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm index c519ca59e7..02b1c4e9eb 100644 --- a/gnu/packages/engineering.scm +++ b/gnu/packages/engineering.scm @@ -52,13 +52,13 @@ #:use-module (gnu packages pkg-config) #:use-module (gnu packages qt) #:use-module (gnu packages tcl) - #:use-module (gnu packages texlive) + #:use-module (gnu packages tex) #:use-module (srfi srfi-1)) (define-public librecad (package (name "librecad") - (version "2.0.9") + (version "2.0.11") (source (origin (method url-fetch) (uri (string-append @@ -67,7 +67,7 @@ (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0xyn4ps9ia94h0vg53rsww8xfd1bgp4200phl8ihyhv7w5v4d8d0")))) + "0jda23qspziph6fwgq1q3nmnllbgn9kwfpjylv1f0wa7c5l85gh5")))) (build-system gnu-build-system) (arguments '(#:phases diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm index cc7f788c9e..c487fc1020 100644 --- a/gnu/packages/enlightenment.scm +++ b/gnu/packages/enlightenment.scm @@ -54,7 +54,7 @@ (define-public efl (package (name "efl") - (version "1.17.0") + (version "1.17.1") (source (origin (method url-fetch) (uri (string-append @@ -62,7 +62,7 @@ version ".tar.xz")) (sha256 (base32 - "1zisnz4x54mn9sm46kcr571faqnazkcglyf0lbz19l34syx40df1")))) + "0d58bhvwg7c5hp07wywlwnqi01k4jhmpgac7gkx9lil1x6kmahqs")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) @@ -137,7 +137,7 @@ removable devices or support for multimedia.") (define-public elementary (package (name "elementary") - (version "1.17.0") + (version "1.17.1") (source (origin (method url-fetch) (uri @@ -145,7 +145,7 @@ removable devices or support for multimedia.") "elementary/elementary-" version ".tar.xz")) (sha256 (base32 - "0avb0d6nk4d88l81c2j6py13vdfnvg080ycw2y3qvawyjf1mhska")))) + "149xjq4z71l44w1kd8zks9b2g0wjc9656w46hzd27b58afj1dqc5")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) @@ -273,7 +273,7 @@ Libraries with some extra bells and whistles.") (define-public enlightenment (package (name "enlightenment") - (version "0.20.6") + (version "0.20.8") (source (origin (method url-fetch) (uri @@ -281,7 +281,7 @@ Libraries with some extra bells and whistles.") name "/" name "-" version ".tar.xz")) (sha256 (base32 - "11ahll68nlci214ka05whp5l32hy9lznmcdfqx3hxsmq2p7bl7zj")))) + "17fi3frq4a73i0x7v7244g9m0fbjfamw0cfb4zhqs2rp1z8nq1iy")))) (build-system gnu-build-system) (arguments `(#:configure-flags '("--enable-mount-eeze"))) diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm index b511d2c951..23faead747 100644 --- a/gnu/packages/finance.scm +++ b/gnu/packages/finance.scm @@ -158,7 +158,7 @@ line client and a client based on Qt.") ("tzdata" ,tzdata) ("utfcpp" ,utfcpp))) (native-inputs - `(("emacs" ,emacs-no-x) + `(("emacs" ,emacs-minimal) ("groff" ,groff) ("texinfo" ,texinfo))) (home-page "http://ledger-cli.org/") diff --git a/gnu/packages/flashing-tools.scm b/gnu/packages/flashing-tools.scm index 9f9f1b9c6a..37a10726e3 100644 --- a/gnu/packages/flashing-tools.scm +++ b/gnu/packages/flashing-tools.scm @@ -1,6 +1,8 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2014 Manolis Fragkiskos Ragkousis <manolis837@gmail.com> +;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com> +;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -30,6 +32,7 @@ #:use-module (gnu packages libusb) #:use-module (gnu packages libftdi) #:use-module (gnu packages pciutils) + #:use-module (gnu packages autotools) #:use-module (gnu packages admin)) (define-public flashrom @@ -130,3 +133,30 @@ technique (ISP).") Atmel (8051, AVR, XMEGA & AVR32) chips with a USB bootloader supporting ISP.") (license gpl2+))) + +(define-public dfu-util + (package + (name "dfu-util") + (version "0.9") + (source (origin + (method url-fetch) + (uri (string-append + "http://dfu-util.sourceforge.net/releases/dfu-util-" + version ".tar.gz")) + (sha256 + (base32 + "0czq73m92ngf30asdzrfkzraag95hlrr74imbanqq25kdim8qhin")))) + (build-system gnu-build-system) + (inputs + `(("libusb" ,libusb))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (synopsis "Host side of the USB Device Firmware Upgrade (DFU) protocol") + (description + "The DFU (Universal Serial Bus Device Firmware Upgrade) protocol is +intended to download and upload firmware to devices connected over USB. It +ranges from small devices like micro-controller boards up to mobile phones. +With dfu-util you are able to download firmware to your device or upload +firmware from it.") + (home-page "http://dfu-util.sourceforge.net/") + (license gpl2+))) diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm index 3dfff146cd..38068008ca 100644 --- a/gnu/packages/fontutils.scm +++ b/gnu/packages/fontutils.scm @@ -281,9 +281,16 @@ high quality, anti-aliased and subpixel rendered text on a display.") (version "5.1.2") (source (origin (method url-fetch) - (uri "ftp://sunsite.unc.edu/pub/Linux/libs/graphics/t1lib-5.1.2.tar.gz") + (uri (list (string-append "ftp://sunsite.unc.edu/pub/Linux/libs/" + "graphics/" name "-" version ".tar.gz") + (string-append "https://fossies.org/linux/misc/old/" + name "-" version ".tar.gz"))) (sha256 (base32 - "0nbvjpnmcznib1nlgg8xckrmsw3haa154byds2h90y2g0nsjh4w2")))) + "0nbvjpnmcznib1nlgg8xckrmsw3haa154byds2h90y2g0nsjh4w2")) + (patches (search-patches + "t1lib-CVE-2010-2642.patch" + "t1lib-CVE-2011-0764.patch" + "t1lib-CVE-2011-1552+CVE-2011-1553+CVE-2011-1554.patch")))) (build-system gnu-build-system) (arguments ;; Making the documentation requires latex, but t1lib is also an input @@ -386,7 +393,7 @@ and returns a sequence of positioned glyphids from the font.") (define-public potrace (package (name "potrace") - (version "1.11") + (version "1.13") (source (origin (method url-fetch) @@ -394,7 +401,7 @@ and returns a sequence of positioned glyphids from the font.") version ".tar.gz")) (sha256 (base32 - "1bbyl7jgigawmwc8r14znv8lb6lrcxh8zpvynrl6s800dr4yp9as")))) + "115p2vgyq7p2mf4nidk2x3aa341nvv2v8ml056vbji36df5l6lk2")))) (build-system gnu-build-system) (native-inputs `(("ghostscript" ,ghostscript))) ;for tests (inputs `(("zlib" ,zlib))) diff --git a/gnu/packages/freeipmi.scm b/gnu/packages/freeipmi.scm index 6cbad6b1b6..ea81b1af8d 100644 --- a/gnu/packages/freeipmi.scm +++ b/gnu/packages/freeipmi.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> -;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -28,14 +28,14 @@ (define-public freeipmi (package (name "freeipmi") - (version "1.5.1") + (version "1.5.2") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/freeipmi/freeipmi-" version ".tar.gz")) (sha256 (base32 - "0lhjxlha4j5rx11d81y1rgp9j18rlpxsjc0flsmj6bm60awmm627")))) + "0xgfwk6lxwwzq8pbyxjl5xxpybs9p4qwgb7q0ykf048xwxha4kvk")))) (build-system gnu-build-system) (inputs `(("readline" ,readline) ("libgcrypt" ,libgcrypt))) diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index fc16862471..368f09632c 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -5,7 +5,7 @@ ;;; Copyright © 2014 Cyrill Schenkel <cyrill.schenkel@gmail.com> ;;; Copyright © 2014 Sylvain Beucler <beuc@beuc.net> ;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org> -;;; Copyright © 2014, 2015 Sou Bunnbu <iyzsong@gmail.com> +;;; Copyright © 2014, 2015, 2016 Sou Bunnbu <iyzsong@gmail.com> ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2015, 2016 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com> @@ -590,11 +590,11 @@ for common mesh file formats, and collision detection.") ;; The latest release on SourceForge relies on an unreleased version of SFML ;; with a different API, so we take the latest version from the official ;; repository on Github. - (let ((commit "c855d04409") + (let ((commit "c855d044094a1d92317e38935d81ba938946132e") (revision "1")) (package (name "mars") - (version (string-append "0.7.5." revision "." commit )) + (version (string-append "0.7.5." revision "." (string-take commit 7) )) (source (origin (method git-fetch) (uri (git-reference @@ -856,7 +856,7 @@ either by Infocom or created using the Inform compiler.") (define-public retroarch (package (name "retroarch") - (version "1.3.1") + (version "1.3.4") (source (origin (method url-fetch) @@ -864,7 +864,7 @@ either by Infocom or created using the Inform compiler.") version ".tar.gz")) (file-name (string-append name "-" version ".tar.gz")) (sha256 - (base32 "1wydzvligyby05x8c4lpg6xcnw9qkmvkskyhzc28xq10vm3q57fv")))) + (base32 "077v1sj000y3csjw9vradba3k2aknvg5k8521z8aya6q987klwx5")))) (build-system gnu-build-system) (arguments '(#:tests? #f ; no tests @@ -1833,36 +1833,37 @@ emulation community. It provides highly accurate emulation.") (license license:gpl2+))) (define-public emulation-station - (package - (name "emulation-station") - (version "2.0.1") - (source (origin - (method git-fetch) ; no tarball available - (uri (git-reference - (url "https://github.com/Aloshi/EmulationStation.git") - (commit "646bede"))) ; no version tag - (sha256 - (base32 - "0cm0sq2wri2l9cvab1l0g02za59q7klj0h3p028vr96n6njj4w9v")))) - (build-system cmake-build-system) - (arguments - '(#:tests? #f)) ; no tests - (inputs - `(("alsa-lib" ,alsa-lib) - ("boost" ,boost) - ("curl" ,curl) - ("eigin" ,eigen) - ("freeimage" ,freeimage) - ("freetype" ,freetype) - ("mesa" ,mesa) - ("sdl2" ,sdl2))) - (synopsis "Video game console emulator front-end") - (description "EmulationStation provides a graphical front-end to a large + (let ((commit "646bede3d9ec0acf0ae378415edac136774a66c5")) + (package + (name "emulation-station") + (version "2.0.1") + (source (origin + (method git-fetch) ; no tarball available + (uri (git-reference + (url "https://github.com/Aloshi/EmulationStation.git") + (commit commit))) ; no version tag + (sha256 + (base32 + "0cm0sq2wri2l9cvab1l0g02za59q7klj0h3p028vr96n6njj4w9v")))) + (build-system cmake-build-system) + (arguments + '(#:tests? #f)) ; no tests + (inputs + `(("alsa-lib" ,alsa-lib) + ("boost" ,boost) + ("curl" ,curl) + ("eigin" ,eigen) + ("freeimage" ,freeimage) + ("freetype" ,freetype) + ("mesa" ,mesa) + ("sdl2" ,sdl2))) + (synopsis "Video game console emulator front-end") + (description "EmulationStation provides a graphical front-end to a large number of video game console emulators. It features an interface that is usable with any game controller that has at least 4 buttons, theming support, and a game metadata scraper.") - (home-page "http://www.emulationstation.org") - (license license:expat))) + (home-page "http://www.emulationstation.org") + (license license:expat)))) (define openttd-engine (package diff --git a/gnu/packages/gd.scm b/gnu/packages/gd.scm index e52a030f86..4d6b1a3c89 100644 --- a/gnu/packages/gd.scm +++ b/gnu/packages/gd.scm @@ -37,20 +37,19 @@ (package (name "gd") - ;; Note: With libgd.org now pointing to bitbucket.org, genuine old + ;; Note: With libgd.org now pointing to github.com, genuine old ;; tarballs are no longer available. Notably, versions 2.0.x are ;; missing. - (version "2.1.1") + (version "2.2.1") (source (origin (method url-fetch) (uri (string-append - "https://bitbucket.org/libgd/gd-libgd/downloads/" - "libgd-" version ".tar.xz")) + "https://github.com/libgd/libgd/releases/download/gd-" + version "/libgd-" version ".tar.xz")) (sha256 (base32 - "11djy9flzxczphigqgp7fbbblbq35gqwwhn9xfcckawlapa1xnls")) - (patches (search-patches "gd-CVE-2016-3074.patch")))) + "0xmrqka1ggqgml84xbmkw1y0r0lg7qn657v5b1my8pry92p651vh")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) diff --git a/gnu/packages/gdb.scm b/gnu/packages/gdb.scm index 9065732c78..80d53935e2 100644 --- a/gnu/packages/gdb.scm +++ b/gnu/packages/gdb.scm @@ -37,14 +37,14 @@ (define-public gdb (package (name "gdb") - (version "7.11") + (version "7.11.1") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/gdb/gdb-" version ".tar.xz")) (sha256 (base32 - "1hg5kwwdvi9b9nxzxfjnx8fx3gip75fqyvkp82xpf3b3rcb42hvs")))) + "0w7wi1llznlqdqk2lmzygz2xylb2c9mh580s9i0rypkmwfj6s8g9")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; FIXME "make check" fails on single-processor systems. diff --git a/gnu/packages/gettext.scm b/gnu/packages/gettext.scm index 50d480a4ad..34338f936b 100644 --- a/gnu/packages/gettext.scm +++ b/gnu/packages/gettext.scm @@ -28,7 +28,7 @@ #:use-module (guix build-system perl) #:use-module (gnu packages docbook) #:use-module (gnu packages perl) - #:use-module (gnu packages texlive) + #:use-module (gnu packages tex) #:use-module (gnu packages xml)) ;; Use that name to avoid clashes with Guile's 'gettext' procedure. diff --git a/gnu/packages/gimp.scm b/gnu/packages/gimp.scm index bd2794305b..1cd779a9b0 100644 --- a/gnu/packages/gimp.scm +++ b/gnu/packages/gimp.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -24,6 +25,7 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (guix build-system gnu) #:use-module (guix build-system glib-or-gtk) + #:use-module (gnu packages) #:use-module (gnu packages algebra) #:use-module (gnu packages pkg-config) #:use-module (gnu packages glib) @@ -75,7 +77,8 @@ provided as well as the framework to add new color models and data types.") "/" name "-" version ".tar.bz2"))) (sha256 (base32 - "09nlv06li9nrn74ifpm7223mxpg0s7cii702z72cpbwrjh6nlbnz")))) + "09nlv06li9nrn74ifpm7223mxpg0s7cii702z72cpbwrjh6nlbnz")) + (patches (search-patches "gegl-CVE-2012-4433.patch")))) (build-system gnu-build-system) (arguments `(;; More than just the one test disabled below now fails; disable them @@ -121,14 +124,15 @@ buffers.") (define-public gimp (package (name "gimp") - (version "2.8.14") + (version "2.8.16") (source (origin (method url-fetch) - (uri (string-append "http://download.gimp.org/pub/gimp/v2.8/gimp-" - version ".tar.bz2")) + (uri (string-append "http://download.gimp.org/pub/gimp/v" + (version-major+minor version) + "/gimp-" version ".tar.bz2")) (sha256 (base32 - "0bdj0l7a94jqhjnj40m9rqaf622wj905iximivb55iy98639aanq")))) + "1dsgazia9hmab8cw3iis7s69dvqyfj5wga7ds7w2q5mms1xqbqwm")))) (build-system gnu-build-system) (outputs '("out" "doc")) ;8 MiB of gtk-doc HTML diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm index c5d53d1e0a..8384c76d66 100644 --- a/gnu/packages/gnome.scm +++ b/gnu/packages/gnome.scm @@ -97,7 +97,7 @@ #:use-module (gnu packages geeqie) #:use-module (gnu packages gl) #:use-module (gnu packages compression) - #:use-module (gnu packages texlive) + #:use-module (gnu packages tex) #:use-module (gnu packages tls) #:use-module (gnu packages web) #:use-module (gnu packages webkit) @@ -1787,6 +1787,39 @@ gnome-terminal, but can also be used to embed a console/terminal in games, editors, IDEs, etc.") (license license:lgpl2.1+))) +(define-public vte-ng + (package + (inherit vte) + (name "vte-ng") + (version "0.44.1.b") + (native-inputs + `(("gtk-doc" ,gtk-doc) + ("gperf" ,gperf) + ("autoconf" ,autoconf) + ("automake" ,automake) + ("libtool" ,libtool) + ,@(package-native-inputs vte))) + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/thestinger/" + name "/archive/" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1mhz4i1qkdlrs49vgm7nsrb60lry9v6wsgwsmji7fln1nyrp1pag")))) + (arguments + `(#:configure-flags '("CXXFLAGS=-Wformat=0") + #:phases (modify-phases %standard-phases + (add-after 'unpack 'bootstrap + (lambda _ + (setenv "NOCONFIGURE" "true") + (zero? (system* "sh" "autogen.sh"))))))) + (synopsis "Enhanced VTE terminal widget") + (description + "VTE is a library (libvte) implementing a terminal emulator widget for +GTK+, this fork provides additional functions exposed for keyboard text +selection and URL hints."))) + ;; provides vte 2.90, required for some terminal emulators ;; tilda bug: https://github.com/lanoxx/tilda/issues/94 ;; pantheon-terminal bug: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=788021 @@ -1820,7 +1853,10 @@ editors, IDEs, etc.") name "-" version ".tar.xz")) (sha256 (base32 - "1bmhahkf8wdsra9whd3k5l5z4rv7r58ksr8mshzajgq2ma0hpkw6")))) + "1bmhahkf8wdsra9whd3k5l5z4rv7r58ksr8mshzajgq2ma0hpkw6")) + (patches (search-patches + "vte-CVE-2012-2738-pt1.patch" + "vte-CVE-2012-2738-pt2.patch")))) (arguments '(#:configure-flags '("--disable-python"))) (native-inputs diff --git a/gnu/packages/gnunet.scm b/gnu/packages/gnunet.scm index b5a2685f65..0819c485cb 100644 --- a/gnu/packages/gnunet.scm +++ b/gnu/packages/gnunet.scm @@ -266,10 +266,10 @@ privacy-preserving, decentralized public key infrastructure.") (home-page "https://gnunet.org/"))) (define-public guile-gnunet ;GSoC 2015! - (let ((commit "383eac2")) + (let ((commit "383eac2aab175d8d9ea5315c2f1c8a5055c76a52")) (package (name "guile-gnunet") - (version (string-append "0.0." commit)) + (version (string-append "0.0." (string-take commit 7))) (source (origin (method git-fetch) (uri (git-reference diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm index 7e52534b8f..4ffa3ac165 100644 --- a/gnu/packages/gnuzilla.scm +++ b/gnu/packages/gnuzilla.scm @@ -448,6 +448,8 @@ standards.") ) #:modules ((ice-9 ftw) + (ice-9 rdelim) + (ice-9 match) ,@%gnu-build-system-modules) #:phases (modify-phases %standard-phases @@ -509,7 +511,48 @@ standards.") (format #t "configure flags: ~s~%" flags) (zero? (apply system* bash (string-append srcdir "/configure") - flags)))))))) + flags))))) + (add-before 'configure 'install-desktop-entry + (lambda* (#:key outputs #:allow-other-keys) + ;; Install the '.desktop' file. + (define (swallow-%%-directives input output) + ;; Interpret '%%ifdef' directives found in the '.desktop' file. + (let loop ((state 'top)) + (match (read-line input 'concat) + ((? eof-object?) + #t) + ((? string? line) + (cond ((string-prefix? "%%ifdef" line) + (loop 'ifdef)) + ((string-prefix? "%%else" line) + (loop 'else)) + ((string-prefix? "%%endif" line) + (loop 'top)) + (else + (case state + ((top else) + (display line output) + (loop state)) + (else + (loop state))))))))) + + (let* ((out (assoc-ref outputs "out")) + (applications (string-append out "/share/applications"))) + (call-with-input-file "debian/icecat.desktop.in" + (lambda (input) + (call-with-output-file "debian/icecat.desktop" + (lambda (output) + (swallow-%%-directives input output))))) + + (substitute* "debian/icecat.desktop" + (("@MOZ_DISPLAY_NAME@") + "GNU IceCat") + (("^Exec=@MOZ_APP_NAME@") + (string-append "Exec=" out "/bin/icecat")) + (("@MOZ_APP_NAME@") + "icecat")) + (install-file "debian/icecat.desktop" applications) + #t)))))) (home-page "http://www.gnu.org/software/gnuzilla/") (synopsis "Entirely free browser derived from Mozilla Firefox") (description diff --git a/gnu/packages/gprolog.scm b/gnu/packages/gprolog.scm index 1d9b9943bc..87c833e947 100644 --- a/gnu/packages/gprolog.scm +++ b/gnu/packages/gprolog.scm @@ -38,7 +38,10 @@ "13miyas47bmijmadm68cbvb21n4s156gjafz7kfx9brk9djfkh0q")))) (build-system gnu-build-system) (arguments - `(#:phases (alist-cons-before + `(#:configure-flags + (list (string-append + "--with-install-dir=" %output "/share/gprolog")) + #:phases (alist-cons-before 'configure 'change-dir-n-fix-shells (lambda _ (chdir "src") diff --git a/gnu/packages/grub.scm b/gnu/packages/grub.scm index ec2feebbf4..31b270c0d8 100644 --- a/gnu/packages/grub.scm +++ b/gnu/packages/grub.scm @@ -25,6 +25,7 @@ #:use-module (guix build-system gnu) #:use-module (gnu packages) #:use-module (gnu packages flex) + #:use-module (gnu packages disk) #:use-module (gnu packages bison) #:use-module (gnu packages gettext) #:use-module (gnu packages fontutils) @@ -99,11 +100,6 @@ ;; Make the font visible. (copy-file (assoc-ref inputs "unifont") "unifont.bdf.gz") (system* "gunzip" "unifont.bdf.gz") - - ;; TODO: Re-enable this test when we have Parted. - (substitute* "tests/partmap_test.in" - (("set -e") "exit 77")) - #t))))) (inputs `(;; ("lvm2" ,lvm2) @@ -121,6 +117,7 @@ ;; Dependencies for the test suite. The "real" QEMU is needed here, ;; because several targets are used. + ("parted" ,parted) ("qemu" ,qemu-for-tests) ("xorriso" ,xorriso))) (home-page "http://www.gnu.org/software/grub/") diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm index 1fe52a4b83..e237c6a66d 100644 --- a/gnu/packages/gtk.scm +++ b/gnu/packages/gtk.scm @@ -11,6 +11,7 @@ ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016 Fabian Harfert <fhmgufs@web.de> ;;; Copyright © 2016 Kei Kebreau <kei@openmailbox.org> +;;; Copyright © 2016 Patrick Hetu <patrick.hetu@auf.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -51,6 +52,7 @@ #:use-module (gnu packages gnome) #:use-module (gnu packages icu4c) #:use-module (gnu packages image) + #:use-module (gnu packages libffi) #:use-module (gnu packages pdf) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) @@ -822,6 +824,60 @@ includes a tools to generate PDF presentations out of Org mode and Texinfo documents.") (license license:lgpl3+))) +(define-public guile-gnome + (package + (name "guile-gnome") + (version "2.16.4") + (source (origin + (method url-fetch) + (uri + (string-append "mirror://gnu/" name + "/guile-gnome-platform/guile-gnome-platform-" + version ".tar.gz")) + (sha256 + (base32 + "1hqnqbb2lmr3hgbcv9kds1himn3av6h0lkk0zll8agcrsn7d9axd")))) + (build-system gnu-build-system) + (native-inputs + `(("pkg-config" ,pkg-config) + ("atk" ,atk) + ;;("corba" ,corba) ; not packaged yet + ("gconf" ,gconf) + ("gobject-introspection" ,gobject-introspection) + ;;("gthread" ,gthread) ; not packaged yet + ("gnome-vfs" ,gnome-vfs) + ("gdk-pixbuf" ,gdk-pixbuf) + ("gtk+" ,gtk+-2) + ("libglade" ,libglade) + ("libgnome" ,libgnome) + ("libgnomecanvas" ,libgnomecanvas) + ("libgnomeui" ,libgnomeui) + ("pango" ,pango) + ("libffi" ,libffi) + ("glib" ,glib))) + (inputs `(("guile" ,guile-2.0))) + (propagated-inputs + `(("guile-cairo" ,guile-cairo) + ("g-wrap" ,g-wrap) + ("guile-lib" ,guile-lib))) + (arguments + `(#:tests? #f ;FIXME + #:phases (modify-phases %standard-phases + (add-before 'configure 'pre-configure + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (substitute* (find-files "." "^Makefile.in$") + (("guilesite :=.*guile/site" all) + (string-append all "/2.0"))) + #t)))))) + (outputs '("out" "debug")) + (synopsis "Guile interface for GTK+ programming for GNOME") + (description + "Includes guile-clutter, guile-gnome-gstreamer, +guile-gnome-platform (GNOME developer libraries), and guile-gtksourceview.") + (home-page "http://www.gnu.org/software/guile-gnome/") + (license license:gpl2+))) + ;;; ;;; C++ bindings. ;;; diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm index c3e0a6100b..b043e03ea4 100644 --- a/gnu/packages/haskell.scm +++ b/gnu/packages/haskell.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2015 Siniša Biđin <sinisa@bidin.eu> ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org> ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org> +;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -731,6 +732,28 @@ tool lex or flex for C/C++.") "This library provides an easy way to define command line parsers.") (license license:bsd-3))) +(define-public ghc-concatenative + (package + (name "ghc-concatenative") + (version "1.0.1") + (source (origin + (method url-fetch) + (uri (string-append + "http://hackage.haskell.org/package/concatenative/concatenative-" + version ".tar.gz")) + (sha256 + (base32 + "05xwqvcdnk8bsyj698ab9jxpa1nk23pf3m7wi9mwmw0q8n99fngd")))) + (build-system haskell-build-system) + (home-page + "https://patch-tag.com/r/salazar/concatenative/snapshot/current/content/pretty") + (synopsis "Library for postfix control flow") + (description + "Concatenative gives Haskell Factor-style combinators and arrows for +postfix notation. For more information on stack based languages, see +@uref{http://concatenative.org}.") + (license license:bsd-3))) + (define-public ghc-happy (package (name "ghc-happy") @@ -1979,6 +2002,31 @@ isn't available, portable implementations are used.") both client and server code).") (license license:bsd-3))) +(define-public ghc-indents + (package + (name "ghc-indents") + (version "0.3.3") + (source (origin + (method url-fetch) + (uri (string-append + "http://hackage.haskell.org/package/indents/indents-" + version ".tar.gz")) + (sha256 + (base32 + "16lz21bp9j14xilnq8yym22p3saxvc9fsgfcf5awn2a6i6n527xn")))) + (build-system haskell-build-system) + (inputs + `(("ghc-parsec" ,ghc-parsec) + ("ghc-concatenative" ,ghc-concatenative) + ("ghc-mtl" ,ghc-mtl))) + (home-page "http://patch-tag.com/r/salazar/indents") + (synopsis "Indentation sensitive parser-combinators for parsec") + (description + "This library provides functions for use in parsing indentation sensitive +contexts. It parses blocks of lines all indented to the same level as well as +lines continued at an indented level below.") + (license license:bsd-3))) + (define-public ghc-iproute (package (name "ghc-iproute") @@ -3150,6 +3198,27 @@ to annotate the text with semantic information, which can later be rendered in a variety of ways.") (license license:bsd-3))) +(define-public ghc-wl-pprint + (package + (name "ghc-wl-pprint") + (version "1.2") + (source (origin + (method url-fetch) + (uri (string-append + "http://hackage.haskell.org/package/wl-pprint/wl-pprint-" + version ".tar.gz")) + (sha256 + (base32 + "166zvk4zwn2zaa9kx66m1av38m34qp6h4i65bri2sfnxgvx0700r")))) + (build-system haskell-build-system) + (home-page "http://hackage.haskell.org/package/wl-pprint") + (synopsis "Wadler/Leijen pretty printer") + (description + "This is a pretty printing library based on Wadler's paper @i{A Prettier +Printer}. This version allows the library user to declare overlapping +instances of the @code{Pretty} class.") + (license license:bsd-3))) + (define-public ghc-ansi-wl-pprint (package (name "ghc-ansi-wl-pprint") @@ -4856,6 +4925,39 @@ for Haskell, optimized for ease of use and high performance. (A note on naming: in Greek mythology, Aeson was the father of Jason.)") (license license:bsd-3))) +(define-public ghc-aeson-pretty + (package + (name "ghc-aeson-pretty") + (version "0.7.2") + (source (origin + (method url-fetch) + (uri (string-append + "http://hackage.haskell.org/package/aeson-pretty/aeson-pretty-" + version ".tar.gz")) + (sha256 + (base32 + "03ap81853qi8yd9kdgczllrrni23a6glsfxrwj8zab6ipjrbh234")))) + (build-system haskell-build-system) + (inputs + `(("ghc-aeson" ,ghc-aeson) + ("ghc-vector" ,ghc-vector) + ("ghc-text" ,ghc-text) + ("ghc-unordered-containers" + ,ghc-unordered-containers) + ("ghc-attoparsec" ,ghc-attoparsec) + ("ghc-cmdargs" ,ghc-cmdargs))) + (home-page "http://github.com/informatikr/aeson-pretty") + (synopsis "JSON pretty-printing library and command-line tool") + (description + "This package provides a JSON pretty-printing library compatible with aeson +as well as a command-line tool to improve readabilty of streams of JSON data. +The library provides the function @code{encodePretty}. It is a drop-in +replacement for aeson's @code{encode} function, producing JSON-ByteStrings for +human readers. The command-line tool reads JSON from stdin and writes +prettified JSON to stdout. It also offers a complementary \"compact\"-mode, +essentially the opposite of pretty-printing.") + (license license:bsd-3))) + (define-public ghc-wai (package (name "ghc-wai") @@ -6242,6 +6344,31 @@ definition lists, tables, and other features. A compatibility mode is provided for those who need a drop-in replacement for Markdown.pl.") (license license:gpl2+))) +(define-public ghc-union-find + (package + (name "ghc-union-find") + (version "0.2") + (source (origin + (method url-fetch) + (uri (string-append + "http://hackage.haskell.org/package/union-find/union-find-" + version ".tar.gz")) + (sha256 + (base32 + "1v7hj42j9w6jlzi56jg8rh4p58gfs1c5dx30wd1qqvn0p0mnihp6")))) + (build-system haskell-build-system) + (home-page "http://github.com/nominolo/union-find") + (synopsis "Efficient union and equivalence testing of sets") + (description + "The Union/Find algorithm implements these operations in (effectively) +constant-time: +@enumerate +@item Check whether two elements are in the same equivalence class. +@item Create a union of two equivalence classes. +@item Look up the descriptor of the equivalence class. +@end enumerate\n") + (license license:bsd-3))) + (define-public idris (package (name "idris") diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm index 7a0a158899..2b2e162107 100644 --- a/gnu/packages/hurd.scm +++ b/gnu/packages/hurd.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2014, 2015 Manolis Fragkiskos Ragkousis <manolis837@gmail.com> +;;; Copyright © 2014, 2015, 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -22,6 +22,7 @@ #:use-module (guix packages) #:use-module (gnu packages) #:use-module (guix build-system gnu) + #:use-module (guix build-system trivial) #:use-module (gnu packages flex) #:use-module (gnu packages bison) #:use-module (gnu packages perl) @@ -185,3 +186,28 @@ Library and other user programs.") "This package provides libihash, needed to build the GNU C Library for GNU/Hurd.") (license gpl2+))) + +(define-public hurd-core-headers + (package + (name "hurd-core-headers") + (version (package-version hurd-headers)) + (source #f) + (build-system trivial-build-system) + (arguments + '(#:modules ((guix build union)) + #:builder (begin + (use-modules (ice-9 match) + (guix build union)) + (match %build-inputs + (((names . directories) ...) + (union-build (assoc-ref %outputs "out") + directories)))))) + (inputs `(("gnumach-headers" ,gnumach-headers) + ("hurd-headers" ,hurd-headers) + ("hurd-minimal" ,hurd-minimal))) + (synopsis "Union of the Hurd headers and libraries") + (description + "This package contains the union of the Mach and Hurd headers and the +Hurd-minimal package which are needed for both glibc and GCC.") + (home-page (package-home-page hurd-headers)) + (license (package-license hurd-headers)))) diff --git a/gnu/packages/idutils.scm b/gnu/packages/idutils.scm index 7a8e1c6752..63760c84e9 100644 --- a/gnu/packages/idutils.scm +++ b/gnu/packages/idutils.scm @@ -37,7 +37,7 @@ "1hmai3422iaqnp34kkzxdnywl7n7pvlxp11vrw66ybxn9wxg90c1")) (patches (search-patches "diffutils-gets-undeclared.patch")))) (build-system gnu-build-system) - (native-inputs `(("emacs" ,emacs-no-x))) + (native-inputs `(("emacs" ,emacs-minimal))) (home-page "http://www.gnu.org/software/idutils/") (synopsis "Identifier database utilities") (description diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm index 3651e97f3e..0ab3f60c5e 100644 --- a/gnu/packages/image.scm +++ b/gnu/packages/image.scm @@ -693,7 +693,8 @@ channels.") "1zd850nn7nvkkhasrv7kn17kzgslr5ry933v6db62s4lr0zzlbv8")) ;; Backported from upstream: ;; https://github.com/DentonW/DevIL/commit/724194d7a9a91221a564579f64bdd6f0abd64219.patch - (patches (search-patches "devil-fix-libpng.patch")) + (patches (search-patches "devil-fix-libpng.patch" + "devil-CVE-2009-3994.patch")) (modules '((guix build utils))) (snippet ;; Fix old lcms include directives and lib flags. @@ -766,3 +767,37 @@ implementation of the codec specified in the JPEG-2000 Part-1 standard (i.e., ISO/IEC 15444-1).") (home-page "https://www.ece.uvic.ca/~frodo/jasper/") (license (license:x11-style "file://LICENSE")))) + +(define-public zimg + (package + (name "zimg") + (version "2.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/sekrit-twc/zimg/archive/" + "release-" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1hqp1gcsa2zhypms5dnasb1srjgxdqm7cip3w5i571kk9nxkn289")))) + (build-system gnu-build-system) + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("libtool" ,libtool))) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'autogen + (lambda _ + (zero? (system* "sh" "autogen.sh"))))))) + (synopsis "Scaling, colorspace conversion, and dithering library") + (description "Zimg implements the commonly required image processing basics +of scaling, colorspace conversion, and depth conversion. A simple API enables +conversion between any supported formats to operate with minimal knowledge from +the programmer.") + (home-page "https://github.com/sekrit-twc/zimg") + ;; test/extra/ contains musl-libm, + ;; which is MIT/expat licensed, but only used for tests + (license (license:fsf-free "file://COPYING")))) ;WTFPL version 2 diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm index a7bbe0cce0..5231200919 100644 --- a/gnu/packages/imagemagick.scm +++ b/gnu/packages/imagemagick.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org> ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2016 Leo Famulari <leo@famulari.name> ;;; ;;; This file is part of GNU Guix. ;;; @@ -40,14 +41,14 @@ (define-public imagemagick (package (name "imagemagick") - (version "6.9.4-4") + (version "6.9.4-7") (source (origin (method url-fetch) (uri (string-append "mirror://imagemagick/ImageMagick-" version ".tar.xz")) (sha256 (base32 - "005nnp0masv59yfcdip6qld86567zjbz59c9lkcqrxclm27vmx0p")))) + "11jcbc9phx37m7ra4v3qsfa2iqh3srsvxplxz38h911jvgfchkzm")))) (build-system gnu-build-system) (arguments `(#:configure-flags '("--with-frozenpaths") @@ -154,7 +155,7 @@ script.") (define-public graphicsmagick (package (name "graphicsmagick") - (version "1.3.23") + (version "1.3.24") (source (origin (method url-fetch) (uri (string-append "ftp://ftp.graphicsmagick.org/pub/" @@ -162,7 +163,7 @@ script.") "/GraphicsMagick-" version ".tar.xz")) (sha256 (base32 - "03g6l2h8cmf231y1vma0z7x85070jm1ysgs9ppqcd3jj56jka9gx")))) + "1q40w5hcl8rcpszm0r7rpr3a9lj390p39zfvavkvlgxyyk7bmgsj")))) (build-system gnu-build-system) (arguments `(#:configure-flags diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm index ff785efad6..fa6109a07d 100644 --- a/gnu/packages/java.scm +++ b/gnu/packages/java.scm @@ -181,15 +181,16 @@ build process and its dependencies, whereas Make uses Makefile format.") (define-public icedtea-6 (package (name "icedtea") - (version "1.13.10") + (version "1.13.11") (source (origin (method url-fetch) (uri (string-append "http://icedtea.wildebeest.org/download/source/icedtea6-" version ".tar.xz")) + (patches (search-patches "icedtea-remove-overrides.patch")) (sha256 (base32 - "1mq08sfyfjlfw0c1czjs47303zv4h91s1jc0nhdlra4rbbx0g2d0")) + "1grki39a4rf8n74zc0iglcggxxbpniyfh1gk1lb10p63zvvcsvjj")) (modules '((guix build utils))) (snippet '(substitute* "Makefile.in" @@ -539,6 +540,7 @@ build process and its dependencies, whereas Make uses Makefile format.") ("mit-krb5" ,mit-krb5) ("nss" ,nss) ("libx11" ,libx11) + ("libxcomposite" ,libxcomposite) ("libxt" ,libxt) ("libxtst" ,libxtst) ("libxi" ,libxi) @@ -552,10 +554,10 @@ build process and its dependencies, whereas Make uses Makefile format.") ("openjdk6-src" ,(origin (method url-fetch) - (uri "https://java.net/downloads/openjdk6/openjdk-6-src-b38-20_jan_2016.tar.gz") + (uri "https://java.net/downloads/openjdk6/openjdk-6-src-b39-03_may_2016.tar.gz") (sha256 (base32 - "1fapj9w4ahzf5nwvdgi1dsxjyh9dqbcvf9638r60h1by13wjqk5p")))) + "1brxbsgwcj4js26y5lk6capc3pvghgjidvv9cavw6z8n7c7aw8af")))) ("lcms" ,lcms) ("zlib" ,zlib) ("gtk" ,gtk+-2) diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm index 4e6b87116a..d358a003e7 100644 --- a/gnu/packages/julia.scm +++ b/gnu/packages/julia.scm @@ -43,8 +43,8 @@ #:use-module (ice-9 match)) (define libuv-julia - (let ((commit "07730c4bd595b4d45a498a8ee0bcd53878ff7c10") - (revision "2")) + (let ((commit "efb40768b7c7bd9f173a7868f74b92b1c5a61a0e") + (revision "3")) (package (inherit libuv) (name "libuv-julia") (version (string-append "0.11.26." revision "-" (string-take commit 8))) @@ -56,7 +56,7 @@ (file-name (string-append name "-" version "-checkout")) (sha256 (base32 - "1r0d4wb41w8k3bi9sjr7kapk1ag131ss2fbqa4jz4gnrzvw94sqx")))) + "16k6pm2jl0ymz5j4ldxn94imdimahqqfd2izgr3zf1vwyyay77w3")))) (build-system gnu-build-system) (arguments (substitute-keyword-arguments (package-arguments libuv) @@ -68,7 +68,7 @@ (define-public julia (package (name "julia") - (version "0.4.3") + (version "0.4.5") (source (origin (method url-fetch) (uri (string-append @@ -76,7 +76,7 @@ version "/julia-" version "-full.tar.gz")) (sha256 (base32 - "1i8k847d8n9v37xg69grpl51dysx36p0phwf0d1qxpsqixdg579b")))) + "1nbi78fav5f4zj5332iwm4mfk0qhd5qh61z881q69rvp7b163wyb")))) (build-system gnu-build-system) (arguments `(#:test-target "test" diff --git a/gnu/packages/linux-libre-4.5-i686.conf b/gnu/packages/linux-libre-4.6-i686.conf index 3d09b49117..25cb00a6bd 100644 --- a/gnu/packages/linux-libre-4.5-i686.conf +++ b/gnu/packages/linux-libre-4.6-i686.conf @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 4.5.0-gnu Kernel Configuration +# Linux/x86 4.6.0-gnu Kernel Configuration # # CONFIG_64BIT is not set CONFIG_X86_32=y @@ -40,6 +40,7 @@ CONFIG_X86_32_SMP=y CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx" CONFIG_ARCH_SUPPORTS_UPROBES=y CONFIG_FIX_EARLYCON_MEM=y +CONFIG_DEBUG_RODATA=y CONFIG_PGTABLE_LEVELS=3 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" CONFIG_IRQ_WORK=y @@ -195,6 +196,8 @@ CONFIG_SYSFS_SYSCALL=y CONFIG_SYSCTL_SYSCALL=y CONFIG_KALLSYMS=y CONFIG_KALLSYMS_ALL=y +# CONFIG_KALLSYMS_ABSOLUTE_PERCPU is not set +CONFIG_KALLSYMS_BASE_RELATIVE=y CONFIG_PRINTK=y CONFIG_BUG=y CONFIG_ELF_CORE=y @@ -378,6 +381,7 @@ CONFIG_X86_FEATURE_NAMES=y CONFIG_X86_FAST_FEATURE_TESTS=y CONFIG_X86_MPPARSE=y # CONFIG_X86_BIGSMP is not set +# CONFIG_GOLDFISH is not set CONFIG_X86_EXTENDED_PLATFORM=y # CONFIG_X86_GOLDFISH is not set CONFIG_X86_INTEL_MID=y @@ -481,6 +485,7 @@ CONFIG_MICROCODE=y CONFIG_MICROCODE_INTEL=y CONFIG_MICROCODE_AMD=y CONFIG_MICROCODE_OLD_INTERFACE=y +CONFIG_PERF_EVENTS_AMD_POWER=m CONFIG_X86_MSR=m CONFIG_X86_CPUID=m # CONFIG_NOHIGHMEM is not set @@ -765,10 +770,21 @@ CONFIG_PCI_IOV=y CONFIG_PCI_PRI=y CONFIG_PCI_PASID=y CONFIG_PCI_LABEL=y +CONFIG_HOTPLUG_PCI=y +CONFIG_HOTPLUG_PCI_COMPAQ=m +CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM=y +CONFIG_HOTPLUG_PCI_IBM=m +CONFIG_HOTPLUG_PCI_ACPI=y +CONFIG_HOTPLUG_PCI_ACPI_IBM=m +CONFIG_HOTPLUG_PCI_CPCI=y +CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m +CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m +CONFIG_HOTPLUG_PCI_SHPC=m # # PCI host controller drivers # +# CONFIG_PCIE_DW_PLAT is not set CONFIG_ISA_DMA_API=y CONFIG_ISA=y CONFIG_EISA=y @@ -802,16 +818,6 @@ CONFIG_I82365=m CONFIG_TCIC=m CONFIG_PCMCIA_PROBE=y CONFIG_PCCARD_NONSTATIC=y -CONFIG_HOTPLUG_PCI=y -CONFIG_HOTPLUG_PCI_COMPAQ=m -CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM=y -CONFIG_HOTPLUG_PCI_IBM=m -CONFIG_HOTPLUG_PCI_ACPI=y -CONFIG_HOTPLUG_PCI_ACPI_IBM=m -CONFIG_HOTPLUG_PCI_CPCI=y -CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m -CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m -CONFIG_HOTPLUG_PCI_SHPC=m CONFIG_RAPIDIO=y CONFIG_RAPIDIO_TSI721=m CONFIG_RAPIDIO_DISC_TIMEOUT=30 @@ -819,6 +825,7 @@ CONFIG_RAPIDIO_DISC_TIMEOUT=30 CONFIG_RAPIDIO_DMA_ENGINE=y # CONFIG_RAPIDIO_DEBUG is not set CONFIG_RAPIDIO_ENUM_BASIC=m +CONFIG_RAPIDIO_MPORT_CDEV=m # # RapidIO Switch drivers @@ -896,7 +903,6 @@ CONFIG_INET_TUNNEL=m CONFIG_INET_XFRM_MODE_TRANSPORT=m CONFIG_INET_XFRM_MODE_TUNNEL=m CONFIG_INET_XFRM_MODE_BEET=m -CONFIG_INET_LRO=y CONFIG_INET_DIAG=m CONFIG_INET_TCP_DIAG=m CONFIG_INET_UDP_DIAG=m @@ -1445,11 +1451,15 @@ CONFIG_NET_ACT_CSUM=m CONFIG_NET_ACT_VLAN=m CONFIG_NET_ACT_BPF=m CONFIG_NET_ACT_CONNMARK=m +CONFIG_NET_ACT_IFE=m +CONFIG_NET_IFE_SKBMARK=m +CONFIG_NET_IFE_SKBPRIO=m # CONFIG_NET_CLS_IND is not set CONFIG_NET_SCH_FIFO=y CONFIG_DCB=y CONFIG_DNS_RESOLVER=y CONFIG_BATMAN_ADV=m +# CONFIG_BATMAN_ADV_BATMAN_V is not set CONFIG_BATMAN_ADV_BLA=y CONFIG_BATMAN_ADV_DAT=y CONFIG_BATMAN_ADV_NC=y @@ -1461,7 +1471,6 @@ CONFIG_OPENVSWITCH_VXLAN=m CONFIG_OPENVSWITCH_GENEVE=m CONFIG_VSOCKETS=m CONFIG_VMWARE_VMCI_VSOCKETS=m -CONFIG_NETLINK_MMAP=y CONFIG_NETLINK_DIAG=m CONFIG_MPLS=y CONFIG_NET_MPLS_GSO=m @@ -1525,6 +1534,14 @@ CONFIG_CAN_CALC_BITTIMING=y CONFIG_CAN_LEDS=y CONFIG_CAN_JANZ_ICAN3=m CONFIG_PCH_CAN=m +CONFIG_CAN_C_CAN=m +CONFIG_CAN_C_CAN_PLATFORM=m +CONFIG_CAN_C_CAN_PCI=m +CONFIG_CAN_CC770=m +CONFIG_CAN_CC770_ISA=m +CONFIG_CAN_CC770_PLATFORM=m +CONFIG_CAN_IFI_CANFD=m +CONFIG_CAN_M_CAN=m CONFIG_CAN_SJA1000=m CONFIG_CAN_SJA1000_ISA=m CONFIG_CAN_SJA1000_PLATFORM=m @@ -1536,13 +1553,8 @@ CONFIG_CAN_PEAK_PCIEC=y CONFIG_CAN_KVASER_PCI=m CONFIG_CAN_PLX_PCI=m CONFIG_CAN_TSCAN1=m -CONFIG_CAN_C_CAN=m -CONFIG_CAN_C_CAN_PLATFORM=m -CONFIG_CAN_C_CAN_PCI=m -CONFIG_CAN_M_CAN=m -CONFIG_CAN_CC770=m -CONFIG_CAN_CC770_ISA=m -CONFIG_CAN_CC770_PLATFORM=m +CONFIG_CAN_SOFTING=m +CONFIG_CAN_SOFTING_CS=m # # CAN SPI interfaces @@ -1558,8 +1570,6 @@ CONFIG_CAN_GS_USB=m CONFIG_CAN_KVASER_USB=m CONFIG_CAN_PEAK_USB=m CONFIG_CAN_8DEV_USB=m -CONFIG_CAN_SOFTING=m -CONFIG_CAN_SOFTING_CS=m # CONFIG_CAN_DEBUG_DEVICES is not set CONFIG_IRDA=m @@ -1630,6 +1640,7 @@ CONFIG_BT_HIDP=m CONFIG_BT_HS=y CONFIG_BT_LE=y CONFIG_BT_6LOWPAN=m +# CONFIG_BT_LEDS is not set # CONFIG_BT_SELFTEST is not set CONFIG_BT_DEBUGFS=y @@ -1653,6 +1664,7 @@ CONFIG_BT_HCIUART_3WIRE=y CONFIG_BT_HCIUART_INTEL=y CONFIG_BT_HCIUART_BCM=y CONFIG_BT_HCIUART_QCA=y +CONFIG_BT_HCIUART_AG6XX=y CONFIG_BT_HCIBCM203X=m CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBFUSB=m @@ -1668,6 +1680,7 @@ CONFIG_BT_WILINK=m CONFIG_AF_RXRPC=m # CONFIG_AF_RXRPC_DEBUG is not set CONFIG_RXKAD=m +CONFIG_AF_KCM=m CONFIG_FIB_RULES=y CONFIG_WIRELESS=y CONFIG_WIRELESS_EXT=y @@ -1678,7 +1691,6 @@ CONFIG_WEXT_PRIV=y CONFIG_CFG80211=m # CONFIG_NL80211_TESTMODE is not set # CONFIG_CFG80211_DEVELOPER_WARNINGS is not set -# CONFIG_CFG80211_REG_DEBUG is not set # CONFIG_CFG80211_CERTIFICATION_ONUS is not set CONFIG_CFG80211_DEFAULT_PS=y CONFIG_CFG80211_DEBUGFS=y @@ -1763,6 +1775,9 @@ CONFIG_NFC_S3FWRN5=m CONFIG_NFC_S3FWRN5_I2C=m CONFIG_NFC_ST95HF=m CONFIG_LWTUNNEL=y +CONFIG_DST_CACHE=y +CONFIG_NET_DEVLINK=m +CONFIG_MAY_USE_DEVLINK=m # # Device Drivers @@ -2031,6 +2046,7 @@ CONFIG_VIRTIO_BLK=y # CONFIG_BLK_DEV_HD is not set CONFIG_BLK_DEV_RBD=m CONFIG_BLK_DEV_RSXX=m +CONFIG_NVME_CORE=m CONFIG_BLK_DEV_NVME=m # CONFIG_BLK_DEV_NVME_SCSI is not set @@ -2063,13 +2079,17 @@ CONFIG_HMC6352=m CONFIG_DS1682=m CONFIG_TI_DAC7512=m CONFIG_VMWARE_BALLOON=m -CONFIG_BMP085=y +CONFIG_BMP085=m CONFIG_BMP085_I2C=m CONFIG_BMP085_SPI=m CONFIG_PCH_PHUB=m CONFIG_USB_SWITCH_FSA9480=m CONFIG_LATTICE_ECP3_CONFIG=m CONFIG_SRAM=y +CONFIG_PANEL=m +CONFIG_PANEL_PARPORT=0 +CONFIG_PANEL_PROFILE=5 +# CONFIG_PANEL_CHANGE_MESSAGE is not set CONFIG_C2PORT=m CONFIG_C2PORT_DURAMAR_2150=m @@ -2110,6 +2130,10 @@ CONFIG_VMWARE_VMCI=m # # +# VOP Bus Driver +# + +# # Intel MIC Host Driver # @@ -2124,6 +2148,10 @@ CONFIG_VMWARE_VMCI=m # # Intel MIC Coprocessor State Management (COSM) Drivers # + +# +# VOP Driver +# CONFIG_ECHO=m # CONFIG_CXL_BASE is not set # CONFIG_CXL_KERNEL_API is not set @@ -2431,7 +2459,6 @@ CONFIG_DM_CRYPT=m CONFIG_DM_SNAPSHOT=m CONFIG_DM_THIN_PROVISIONING=m CONFIG_DM_CACHE=m -CONFIG_DM_CACHE_MQ=m CONFIG_DM_CACHE_SMQ=m CONFIG_DM_CACHE_CLEANER=m CONFIG_DM_ERA=m @@ -2496,6 +2523,7 @@ CONFIG_MACVTAP=m CONFIG_IPVLAN=m CONFIG_VXLAN=m CONFIG_GENEVE=m +CONFIG_MACSEC=m CONFIG_NETCONSOLE=m CONFIG_NETCONSOLE_DYNAMIC=y CONFIG_NETPOLL=y @@ -2619,6 +2647,7 @@ CONFIG_TIGON3=m CONFIG_BNX2X=m CONFIG_BNX2X_SRIOV=y CONFIG_BNX2X_VXLAN=y +# CONFIG_BNX2X_GENEVE is not set CONFIG_BNXT=m CONFIG_BNXT_SRIOV=y CONFIG_NET_VENDOR_BROCADE=y @@ -2630,6 +2659,7 @@ CONFIG_CHELSIO_T1_1G=y CONFIG_CHELSIO_T3=m CONFIG_CHELSIO_T4=m CONFIG_CHELSIO_T4_DCB=y +# CONFIG_CHELSIO_T4_UWIRE is not set CONFIG_CHELSIO_T4_FCOE=y CONFIG_CHELSIO_T4VF=m CONFIG_NET_VENDOR_CIRRUS=y @@ -2673,6 +2703,7 @@ CONFIG_NET_VENDOR_INTEL=y CONFIG_E100=m CONFIG_E1000=m CONFIG_E1000E=m +CONFIG_E1000E_HWTS=y CONFIG_IGB=m CONFIG_IGB_HWMON=y CONFIG_IGBVF=m @@ -2694,6 +2725,7 @@ CONFIG_NET_VENDOR_I825XX=y CONFIG_JME=m CONFIG_NET_VENDOR_MARVELL=y CONFIG_MVMDIO=m +# CONFIG_MVNETA_BM is not set CONFIG_SKGE=m # CONFIG_SKGE_DEBUG is not set CONFIG_SKGE_GENESIS=y @@ -2707,6 +2739,8 @@ CONFIG_MLX4_CORE=m CONFIG_MLX4_DEBUG=y CONFIG_MLX5_CORE=m CONFIG_MLX5_CORE_EN=y +CONFIG_MLX5_CORE_EN_DCB=y +CONFIG_MLX5_CORE_EN_VXLAN=y CONFIG_MLXSW_CORE=m CONFIG_MLXSW_CORE_HWMON=y CONFIG_MLXSW_PCI=m @@ -3041,6 +3075,7 @@ CONFIG_IWLMVM=m CONFIG_IWLWIFI_OPMODE_MODULAR=y # CONFIG_IWLWIFI_BCAST_FILTERING is not set # CONFIG_IWLWIFI_UAPSD is not set +# CONFIG_IWLWIFI_PCIE_RTPM is not set # # Debugging Options @@ -3158,7 +3193,6 @@ CONFIG_WL1251_SDIO=m CONFIG_WL12XX=m CONFIG_WL18XX=m CONFIG_WLCORE=m -CONFIG_WLCORE_SPI=m CONFIG_WLCORE_SDIO=m CONFIG_WILINK_PLATFORM_DATA=y CONFIG_WLAN_VENDOR_ZYDAS=y @@ -3302,13 +3336,6 @@ CONFIG_HISAX_ST5481=m CONFIG_HISAX_HFCUSB=m CONFIG_HISAX_HFC4S8S=m CONFIG_HISAX_FRITZ_PCIPNP=m - -# -# Active cards -# -CONFIG_ISDN_DRV_ICN=m -CONFIG_ISDN_DRV_PCBIT=m -CONFIG_ISDN_DRV_ACT2000=m CONFIG_ISDN_CAPI=m CONFIG_CAPI_TRACE=y CONFIG_ISDN_CAPI_CAPI20=m @@ -3421,6 +3448,7 @@ CONFIG_KEYBOARD_CROS_EC=m CONFIG_INPUT_MOUSE=y CONFIG_MOUSE_PS2=m CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_BYD=y CONFIG_MOUSE_PS2_LOGIPS2PP=y CONFIG_MOUSE_PS2_SYNAPTICS=y CONFIG_MOUSE_PS2_CYPRESS=y @@ -3519,6 +3547,7 @@ CONFIG_TOUCHSCREEN_WACOM_I2C=m CONFIG_TOUCHSCREEN_MAX11801=m CONFIG_TOUCHSCREEN_MCS5000=m CONFIG_TOUCHSCREEN_MMS114=m +CONFIG_TOUCHSCREEN_MELFAS_MIP4=m CONFIG_TOUCHSCREEN_MTOUCH=m CONFIG_TOUCHSCREEN_INEXIO=m CONFIG_TOUCHSCREEN_INTEL_MID=m @@ -3629,6 +3658,13 @@ CONFIG_INPUT_SOC_BUTTON_ARRAY=m CONFIG_INPUT_DRV260X_HAPTICS=m CONFIG_INPUT_DRV2665_HAPTICS=m CONFIG_INPUT_DRV2667_HAPTICS=m +CONFIG_RMI4_CORE=m +CONFIG_RMI4_I2C=m +CONFIG_RMI4_SPI=m +CONFIG_RMI4_2D_SENSOR=y +CONFIG_RMI4_F11=y +CONFIG_RMI4_F12=y +CONFIG_RMI4_F30=y # # Hardware I/O ports @@ -3713,6 +3749,7 @@ CONFIG_SERIAL_8250_DW=m CONFIG_SERIAL_8250_RT288X=y CONFIG_SERIAL_8250_FINTEK=m CONFIG_SERIAL_8250_MID=m +CONFIG_SERIAL_8250_MOXA=m # # Non-8250 serial port support @@ -3744,6 +3781,7 @@ CONFIG_SERIAL_RP2=m CONFIG_SERIAL_RP2_NR_UARTS=32 CONFIG_SERIAL_FSL_LPUART=m CONFIG_SERIAL_MEN_Z135=m +# CONFIG_SERIAL_MVEBU_UART is not set CONFIG_TTY_PRINTK=y CONFIG_PRINTER=m # CONFIG_LP_CONSOLE is not set @@ -3913,14 +3951,18 @@ CONFIG_SPI_MASTER=y # SPI Master Controller Drivers # CONFIG_SPI_ALTERA=m +CONFIG_SPI_AXI_SPI_ENGINE=m CONFIG_SPI_BITBANG=m CONFIG_SPI_BUTTERFLY=m CONFIG_SPI_CADENCE=m +CONFIG_SPI_DESIGNWARE=m +CONFIG_SPI_DW_PCI=m +CONFIG_SPI_DW_MID_DMA=y +CONFIG_SPI_DW_MMIO=m CONFIG_SPI_DLN2=m CONFIG_SPI_GPIO=m CONFIG_SPI_LM70_LLP=m CONFIG_SPI_OC_TINY=m -CONFIG_SPI_PXA2XX_DMA=y CONFIG_SPI_PXA2XX=m CONFIG_SPI_PXA2XX_PCI=m CONFIG_SPI_SC18IS602=m @@ -3928,10 +3970,6 @@ CONFIG_SPI_TOPCLIFF_PCH=m CONFIG_SPI_XCOMM=m # CONFIG_SPI_XILINX is not set CONFIG_SPI_ZYNQMP_GQSPI=m -CONFIG_SPI_DESIGNWARE=m -CONFIG_SPI_DW_PCI=m -CONFIG_SPI_DW_MID_DMA=y -CONFIG_SPI_DW_MMIO=m # # SPI Protocol Masters @@ -4012,18 +4050,21 @@ CONFIG_GPIO_DWAPB=m CONFIG_GPIO_GENERIC_PLATFORM=m CONFIG_GPIO_ICH=m CONFIG_GPIO_LYNXPOINT=y +CONFIG_GPIO_MENZ127=m CONFIG_GPIO_VX855=m CONFIG_GPIO_ZX=y # # Port-mapped I/O GPIO drivers # +CONFIG_GPIO_104_DIO_48E=m CONFIG_GPIO_104_IDIO_16=m CONFIG_GPIO_104_IDI_48=m CONFIG_GPIO_F7188X=m CONFIG_GPIO_IT87=m CONFIG_GPIO_SCH=m CONFIG_GPIO_SCH311X=m +CONFIG_GPIO_WS16C48=m # # I2C GPIO expanders @@ -4034,6 +4075,7 @@ CONFIG_GPIO_MAX732X=m CONFIG_GPIO_PCA953X=m CONFIG_GPIO_PCF857X=m CONFIG_GPIO_SX150X=y +CONFIG_GPIO_TPIC2810=m # # MFD GPIO expanders @@ -4052,6 +4094,8 @@ CONFIG_GPIO_MSIC=y CONFIG_GPIO_PALMAS=y CONFIG_GPIO_RC5T583=y CONFIG_GPIO_TIMBERDALE=y +CONFIG_GPIO_TPS65086=m +CONFIG_GPIO_TPS65218=m CONFIG_GPIO_TPS6586X=y CONFIG_GPIO_TPS65910=y CONFIG_GPIO_TPS65912=m @@ -4076,6 +4120,7 @@ CONFIG_GPIO_RDC321X=m # CONFIG_GPIO_MAX7301=m CONFIG_GPIO_MC33880=m +CONFIG_GPIO_PISOSR=m # # SPI or I2C GPIO expanders @@ -4231,6 +4276,7 @@ CONFIG_SENSORS_JC42=m CONFIG_SENSORS_POWR1220=m CONFIG_SENSORS_LINEAGE=m CONFIG_SENSORS_LTC2945=m +CONFIG_SENSORS_LTC2990=m CONFIG_SENSORS_LTC4151=m CONFIG_SENSORS_LTC4215=m CONFIG_SENSORS_LTC4222=m @@ -4388,6 +4434,7 @@ CONFIG_ACQUIRE_WDT=m CONFIG_ADVANTECH_WDT=m CONFIG_ALIM1535_WDT=m CONFIG_ALIM7101_WDT=m +CONFIG_EBC_C384_WDT=m CONFIG_F71808E_WDT=m CONFIG_SP5100_TCO=m CONFIG_SBC_FITPC2_WATCHDOG=m @@ -4422,7 +4469,8 @@ CONFIG_W83877F_WDT=m CONFIG_W83977F_WDT=m CONFIG_MACHZ_WDT=m CONFIG_SBC_EPX_C3_WATCHDOG=m -CONFIG_BCM7038_WDT=m +CONFIG_INTEL_MEI_WDT=m +CONFIG_NI903X_WDT=m CONFIG_MEN_A21_WDT=m CONFIG_XEN_WDT=m @@ -4487,7 +4535,8 @@ CONFIG_MFD_AS3711=y CONFIG_PMIC_ADP5520=y CONFIG_MFD_AAT2870_CORE=y CONFIG_MFD_BCM590XX=m -CONFIG_MFD_AXP20X=y +CONFIG_MFD_AXP20X=m +CONFIG_MFD_AXP20X_I2C=m CONFIG_MFD_CROS_EC=m CONFIG_MFD_CROS_EC_I2C=m CONFIG_MFD_CROS_EC_SPI=m @@ -4557,6 +4606,7 @@ CONFIG_MFD_PALMAS=y CONFIG_TPS6105X=m CONFIG_TPS65010=m CONFIG_TPS6507X=m +CONFIG_MFD_TPS65086=m CONFIG_MFD_TPS65090=y CONFIG_MFD_TPS65217=m CONFIG_MFD_TPS65218=m @@ -4658,6 +4708,7 @@ CONFIG_REGULATOR_TPS6105X=m CONFIG_REGULATOR_TPS62360=m CONFIG_REGULATOR_TPS65023=m CONFIG_REGULATOR_TPS6507X=m +CONFIG_REGULATOR_TPS65086=m CONFIG_REGULATOR_TPS65090=m CONFIG_REGULATOR_TPS65217=m CONFIG_REGULATOR_TPS6524X=m @@ -4985,7 +5036,6 @@ CONFIG_DVB_NETUP_UNIDVB=m CONFIG_V4L_PLATFORM_DRIVERS=y CONFIG_VIDEO_CAFE_CCIC=m CONFIG_VIDEO_VIA_CAMERA=m -CONFIG_VIDEO_TIMBERDALE=m CONFIG_SOC_CAMERA=m CONFIG_SOC_CAMERA_PLATFORM=m CONFIG_V4L_MEM2MEM_DRIVERS=y @@ -5378,6 +5428,7 @@ CONFIG_VGA_ARB_MAX_GPUS=16 CONFIG_VGA_SWITCHEROO=y CONFIG_DRM=m CONFIG_DRM_MIPI_DSI=y +# CONFIG_DRM_DP_AUX_CHARDEV is not set CONFIG_DRM_KMS_HELPER=m CONFIG_DRM_KMS_FB_HELPER=y CONFIG_DRM_FBDEV_EMULATION=y @@ -5399,6 +5450,11 @@ CONFIG_DRM_AMDGPU=m # CONFIG_DRM_AMDGPU_CIK is not set CONFIG_DRM_AMDGPU_USERPTR=y # CONFIG_DRM_AMD_POWERPLAY is not set + +# +# ACP (Audio CoProcessor) Configuration +# +# CONFIG_DRM_AMD_ACP is not set CONFIG_DRM_NOUVEAU=m CONFIG_NOUVEAU_DEBUG=5 CONFIG_NOUVEAU_DEBUG_DEFAULT=3 @@ -5406,6 +5462,7 @@ CONFIG_DRM_NOUVEAU_BACKLIGHT=y CONFIG_DRM_I810=m CONFIG_DRM_I915=m # CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT is not set +CONFIG_DRM_I915_USERPTR=y CONFIG_DRM_MGA=m CONFIG_DRM_SIS=m CONFIG_DRM_VIA=m @@ -5624,11 +5681,13 @@ CONFIG_SOUND_OSS_CORE=y CONFIG_SND=m CONFIG_SND_TIMER=m CONFIG_SND_PCM=m +CONFIG_SND_PCM_ELD=y CONFIG_SND_DMAENGINE_PCM=m CONFIG_SND_HWDEP=m CONFIG_SND_RAWMIDI=m CONFIG_SND_COMPRESS_OFFLOAD=m CONFIG_SND_JACK=y +CONFIG_SND_JACK_INPUT_DEV=y CONFIG_SND_SEQUENCER=m CONFIG_SND_SEQ_DUMMY=m CONFIG_SND_OSSEMUL=y @@ -5917,11 +5976,14 @@ CONFIG_SND_SOC_CS4349=m CONFIG_SND_SOC_DMIC=m CONFIG_SND_SOC_ES8328=m CONFIG_SND_SOC_GTM601=m +CONFIG_SND_SOC_HDAC_HDMI=m CONFIG_SND_SOC_INNO_RK3036=m CONFIG_SND_SOC_MAX98090=m CONFIG_SND_SOC_MAX98357A=m CONFIG_SND_SOC_PCM1681=m CONFIG_SND_SOC_PCM179X=m +CONFIG_SND_SOC_PCM179X_I2C=m +CONFIG_SND_SOC_PCM179X_SPI=m CONFIG_SND_SOC_PCM3168A=m CONFIG_SND_SOC_PCM3168A_I2C=m CONFIG_SND_SOC_PCM3168A_SPI=m @@ -5931,6 +5993,7 @@ CONFIG_SND_SOC_PCM512x_SPI=m CONFIG_SND_SOC_RL6231=m CONFIG_SND_SOC_RL6347A=m CONFIG_SND_SOC_RT286=m +CONFIG_SND_SOC_RT5616=m CONFIG_SND_SOC_RT5631=m CONFIG_SND_SOC_RT5640=m CONFIG_SND_SOC_RT5645=m @@ -6010,6 +6073,7 @@ CONFIG_HID_CHERRY=m CONFIG_HID_CHICONY=m CONFIG_HID_CORSAIR=m CONFIG_HID_PRODIKEYS=m +CONFIG_HID_CMEDIA=m CONFIG_HID_CP2112=m CONFIG_HID_CYPRESS=m CONFIG_HID_DRAGONRISE=m @@ -6592,6 +6656,7 @@ CONFIG_INFINIBAND_MTHCA=m CONFIG_INFINIBAND_CXGB3=m # CONFIG_INFINIBAND_CXGB3_DEBUG is not set CONFIG_INFINIBAND_CXGB4=m +CONFIG_INFINIBAND_I40IW=m CONFIG_MLX4_INFINIBAND=m CONFIG_MLX5_INFINIBAND=m CONFIG_INFINIBAND_NES=m @@ -6655,10 +6720,10 @@ CONFIG_RTC_DRV_88PM80X=m CONFIG_RTC_DRV_ABB5ZES3=m CONFIG_RTC_DRV_ABX80X=m CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS1307_HWMON=y CONFIG_RTC_DRV_DS1374=m CONFIG_RTC_DRV_DS1374_WDT=y CONFIG_RTC_DRV_DS1672=m -CONFIG_RTC_DRV_DS3232=m CONFIG_RTC_DRV_LP8788=m CONFIG_RTC_DRV_MAX6900=m CONFIG_RTC_DRV_MAX8907=m @@ -6670,16 +6735,15 @@ CONFIG_RTC_DRV_ISL1208=m CONFIG_RTC_DRV_ISL12022=m CONFIG_RTC_DRV_ISL12057=m CONFIG_RTC_DRV_X1205=m -CONFIG_RTC_DRV_PALMAS=m -CONFIG_RTC_DRV_PCF2127=m CONFIG_RTC_DRV_PCF8523=m -CONFIG_RTC_DRV_PCF8563=m CONFIG_RTC_DRV_PCF85063=m +CONFIG_RTC_DRV_PCF8563=m CONFIG_RTC_DRV_PCF8583=m CONFIG_RTC_DRV_M41T80=m CONFIG_RTC_DRV_M41T80_WDT=y CONFIG_RTC_DRV_BQ32K=m CONFIG_RTC_DRV_TWL4030=m +CONFIG_RTC_DRV_PALMAS=m CONFIG_RTC_DRV_TPS6586X=m CONFIG_RTC_DRV_TPS65910=m CONFIG_RTC_DRV_TPS80031=m @@ -6691,6 +6755,7 @@ CONFIG_RTC_DRV_RX8581=m CONFIG_RTC_DRV_RX8025=m CONFIG_RTC_DRV_EM3027=m CONFIG_RTC_DRV_RV3029C2=m +CONFIG_RTC_DRV_RV3029_HWMON=y CONFIG_RTC_DRV_RV8803=m CONFIG_RTC_DRV_S5M=m @@ -6703,13 +6768,20 @@ CONFIG_RTC_DRV_DS1305=m CONFIG_RTC_DRV_DS1343=m CONFIG_RTC_DRV_DS1347=m CONFIG_RTC_DRV_DS1390=m -CONFIG_RTC_DRV_MAX6902=m CONFIG_RTC_DRV_R9701=m +CONFIG_RTC_DRV_RX4581=m +CONFIG_RTC_DRV_RX6110=m CONFIG_RTC_DRV_RS5C348=m -CONFIG_RTC_DRV_DS3234=m +CONFIG_RTC_DRV_MAX6902=m CONFIG_RTC_DRV_PCF2123=m -CONFIG_RTC_DRV_RX4581=m CONFIG_RTC_DRV_MCP795=m +CONFIG_RTC_I2C_AND_SPI=y + +# +# SPI and I2C RTC drivers +# +CONFIG_RTC_DRV_DS3232=m +CONFIG_RTC_DRV_PCF2127=m # # Platform RTC drivers @@ -6768,6 +6840,8 @@ CONFIG_DMA_ACPI=y CONFIG_INTEL_IDMA64=m CONFIG_PCH_DMA=m CONFIG_TIMB_DMA=m +CONFIG_QCOM_HIDMA_MGMT=m +CONFIG_QCOM_HIDMA=m CONFIG_DW_DMAC_CORE=m CONFIG_DW_DMAC=m CONFIG_DW_DMAC_PCI=m @@ -6803,6 +6877,7 @@ CONFIG_VFIO_PCI=m CONFIG_VFIO_PCI_VGA=y CONFIG_VFIO_PCI_MMAP=y CONFIG_VFIO_PCI_INTX=y +CONFIG_VFIO_PCI_IGD=y CONFIG_IRQ_BYPASS_MANAGER=m CONFIG_VIRT_DRIVERS=y CONFIG_VIRTIO=y @@ -6993,10 +7068,6 @@ CONFIG_COMEDI_ISADMA=m CONFIG_COMEDI_NI_LABPC=m CONFIG_COMEDI_NI_LABPC_ISADMA=m CONFIG_COMEDI_NI_TIO=m -CONFIG_PANEL=m -CONFIG_PANEL_PARPORT=0 -CONFIG_PANEL_PROFILE=5 -# CONFIG_PANEL_CHANGE_MESSAGE is not set CONFIG_RTL8192U=m CONFIG_RTLLIB=m CONFIG_RTLLIB_CRYPTO_CCMP=m @@ -7079,13 +7150,6 @@ CONFIG_TSL2583=m CONFIG_TSL2x7x=m # -# Magnetometer sensors -# -CONFIG_SENSORS_HMC5843=m -CONFIG_SENSORS_HMC5843_I2C=m -CONFIG_SENSORS_HMC5843_SPI=m - -# # Active energy metering IC # CONFIG_ADE7753=m @@ -7106,7 +7170,6 @@ CONFIG_AD2S1210=m # # Triggers - standalone # -CONFIG_IIO_PERIODIC_RTC_TRIGGER=m CONFIG_FB_SM750=m CONFIG_FB_XGI=m @@ -7129,12 +7192,11 @@ CONFIG_SPEAKUP_SYNTH_SOFT=m CONFIG_SPEAKUP_SYNTH_SPKOUT=m CONFIG_SPEAKUP_SYNTH_TXPRT=m CONFIG_SPEAKUP_SYNTH_DUMMY=m -CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4=m CONFIG_STAGING_MEDIA=y CONFIG_I2C_BCM2048=m CONFIG_DVB_CXD2099=m CONFIG_DVB_MN88472=m -CONFIG_DVB_MN88473=m +CONFIG_VIDEO_TIMBERDALE=m CONFIG_LIRC_STAGING=y CONFIG_LIRC_BT829=m CONFIG_LIRC_IMON=m @@ -7149,22 +7211,18 @@ CONFIG_STAGING_RDMA=m # # Android # -CONFIG_WIMAX_GDM72XX=m -CONFIG_WIMAX_GDM72XX_QOS=y -CONFIG_WIMAX_GDM72XX_K_MODE=y -CONFIG_WIMAX_GDM72XX_WIMAX2=y -CONFIG_WIMAX_GDM72XX_USB=y -# CONFIG_WIMAX_GDM72XX_SDIO is not set -CONFIG_WIMAX_GDM72XX_USB_PM=y CONFIG_LTE_GDM724X=m CONFIG_FIREWIRE_SERIAL=m CONFIG_FWTTY_MAX_TOTAL_PORTS=64 CONFIG_FWTTY_MAX_CARD_PORTS=32 CONFIG_MTD_SPINAND_MT29F=m CONFIG_MTD_SPINAND_ONDIEECC=y +CONFIG_LNET=m +CONFIG_LNET_MAX_PAYLOAD=1048576 +# CONFIG_LNET_SELFTEST is not set +CONFIG_LNET_XPRT_IB=m # CONFIG_LUSTRE_FS is not set CONFIG_DGNC=m -CONFIG_DGAP=m CONFIG_GS_FPGABOOT=m CONFIG_FB_TFT=m CONFIG_FB_TFT_AGM1264K_FL=m @@ -7185,7 +7243,9 @@ CONFIG_FB_TFT_RA8875=m CONFIG_FB_TFT_S6D02A1=m CONFIG_FB_TFT_S6D1121=m CONFIG_FB_TFT_SSD1289=m +CONFIG_FB_TFT_SSD1305=m CONFIG_FB_TFT_SSD1306=m +CONFIG_FB_TFT_SSD1325=m CONFIG_FB_TFT_SSD1331=m CONFIG_FB_TFT_SSD1351=m CONFIG_FB_TFT_ST7735R=m @@ -7211,11 +7271,19 @@ CONFIG_AIM_V4L2=m CONFIG_HDM_DIM2=m CONFIG_HDM_I2C=m CONFIG_HDM_USB=m + +# +# Old ISDN4Linux (deprecated) +# +CONFIG_ISDN_DRV_ICN=m +CONFIG_ISDN_DRV_PCBIT=m +CONFIG_ISDN_DRV_ACT2000=m CONFIG_X86_PLATFORM_DEVICES=y CONFIG_ACER_WMI=m CONFIG_ACERHDF=m CONFIG_ALIENWARE_WMI=m CONFIG_ASUS_LAPTOP=m +CONFIG_DELL_SMBIOS=m CONFIG_DELL_LAPTOP=m CONFIG_DELL_WMI=m CONFIG_DELL_WMI_AIO=m @@ -7291,6 +7359,7 @@ CONFIG_COMMON_CLK=y # CONFIG_COMMON_CLK_WM831X=m CONFIG_COMMON_CLK_SI5351=m +CONFIG_COMMON_CLK_CDCE706=m CONFIG_COMMON_CLK_CS2000_CP=m CONFIG_COMMON_CLK_S2MPS11=m CONFIG_CLK_TWL6040=m @@ -7298,7 +7367,6 @@ CONFIG_CLK_TWL6040=m CONFIG_COMMON_CLK_PALMAS=m CONFIG_COMMON_CLK_PWM=m # CONFIG_COMMON_CLK_PXA is not set -CONFIG_COMMON_CLK_CDCE706=m # # Hardware Spinlock drivers @@ -7446,7 +7514,9 @@ CONFIG_PALMAS_GPADC=m CONFIG_QCOM_SPMI_IADC=m CONFIG_QCOM_SPMI_VADC=m CONFIG_TI_ADC081C=m +CONFIG_TI_ADC0832=m CONFIG_TI_ADC128S052=m +CONFIG_TI_ADS1015=m CONFIG_TI_AM335X_ADC=m CONFIG_TWL4030_MADC=m CONFIG_TWL6030_GPADC=m @@ -7460,6 +7530,7 @@ CONFIG_AD8366=m # # Chemical Sensors # +CONFIG_ATLAS_PH_SENSOR=m CONFIG_IAQCORE=m CONFIG_VZ89X=m @@ -7492,6 +7563,7 @@ CONFIG_AD5504=m CONFIG_AD5624R_SPI=m CONFIG_AD5686=m CONFIG_AD5755=m +CONFIG_AD5761=m CONFIG_AD5764=m CONFIG_AD5791=m CONFIG_AD7303=m @@ -7499,6 +7571,7 @@ CONFIG_M62332=m CONFIG_MAX517=m CONFIG_MCP4725=m CONFIG_MCP4922=m +CONFIG_STX104=m # # IIO dummy driver @@ -7539,8 +7612,14 @@ CONFIG_IIO_ST_GYRO_SPI_3AXIS=m CONFIG_ITG3200=m # -# Health sensors +# Health Sensors # + +# +# Heart Rate Monitors +# +CONFIG_AFE4403=m +CONFIG_AFE4404=m CONFIG_MAX30100=m # @@ -7559,6 +7638,8 @@ CONFIG_ADIS16400=m CONFIG_ADIS16480=m CONFIG_KMX61=m CONFIG_INV_MPU6050_IIO=m +CONFIG_INV_MPU6050_I2C=m +CONFIG_INV_MPU6050_SPI=m CONFIG_IIO_ADIS_LIB=m CONFIG_IIO_ADIS_LIB_BUFFER=y @@ -7605,6 +7686,9 @@ CONFIG_MMC35240=m CONFIG_IIO_ST_MAGN_3AXIS=m CONFIG_IIO_ST_MAGN_I2C_3AXIS=m CONFIG_IIO_ST_MAGN_SPI_3AXIS=m +CONFIG_SENSORS_HMC5843=m +CONFIG_SENSORS_HMC5843_I2C=m +CONFIG_SENSORS_HMC5843_SPI=m # # Inclinometer sensors @@ -7623,6 +7707,7 @@ CONFIG_IIO_SYSFS_TRIGGER=m # Digital potentiometers # CONFIG_MCP4531=m +CONFIG_TPL0102=m # # Pressure sensors @@ -7630,6 +7715,8 @@ CONFIG_MCP4531=m CONFIG_BMP280=m CONFIG_HID_SENSOR_PRESS=m CONFIG_MPL115=m +CONFIG_MPL115_I2C=m +CONFIG_MPL115_SPI=m CONFIG_MPL3115=m CONFIG_MS5611=m CONFIG_MS5611_I2C=m @@ -7692,7 +7779,6 @@ CONFIG_PWM_PCA9685=m CONFIG_PWM_TWL=m CONFIG_PWM_TWL_LED=m CONFIG_ARM_GIC_MAX_NR=1 -CONFIG_TS4800_IRQ=m CONFIG_IPACK_BUS=m CONFIG_BOARD_TPCI200=m CONFIG_SERIAL_IPOCTAL=m @@ -7741,6 +7827,7 @@ CONFIG_NVMEM=m CONFIG_STM=m CONFIG_STM_DUMMY=m CONFIG_STM_SOURCE_CONSOLE=m +CONFIG_STM_SOURCE_HEARTBEAT=m CONFIG_INTEL_TH=m CONFIG_INTEL_TH_PCI=m CONFIG_INTEL_TH_GTH=m @@ -7768,6 +7855,8 @@ CONFIG_DMI_SYSFS=m CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y CONFIG_ISCSI_IBFT_FIND=y CONFIG_ISCSI_IBFT=m +CONFIG_FW_CFG_SYSFS=m +# CONFIG_FW_CFG_SYSFS_CMDLINE is not set # CONFIG_GOOGLE_FIRMWARE is not set # @@ -7843,6 +7932,7 @@ CONFIG_FS_POSIX_ACL=y CONFIG_EXPORTFS=y CONFIG_FILE_LOCKING=y CONFIG_MANDATORY_FILE_LOCKING=y +CONFIG_FS_ENCRYPTION=m CONFIG_FSNOTIFY=y CONFIG_DNOTIFY=y CONFIG_INOTIFY_USER=y @@ -7890,6 +7980,7 @@ CONFIG_MSDOS_FS=m CONFIG_VFAT_FS=y CONFIG_FAT_DEFAULT_CODEPAGE=437 CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_FAT_DEFAULT_UTF8 is not set CONFIG_NTFS_FS=m # CONFIG_NTFS_DEBUG is not set # CONFIG_NTFS_RW is not set @@ -7913,6 +8004,7 @@ CONFIG_HUGETLB_PAGE=y CONFIG_CONFIGFS_FS=m CONFIG_EFIVAR_FS=y CONFIG_MISC_FILESYSTEMS=y +CONFIG_ORANGEFS_FS=m CONFIG_ADFS_FS=m # CONFIG_ADFS_FS_RW is not set CONFIG_AFFS_FS=m @@ -8012,7 +8104,8 @@ CONFIG_NFSD_V2_ACL=y CONFIG_NFSD_V3=y CONFIG_NFSD_V3_ACL=y CONFIG_NFSD_V4=y -CONFIG_NFSD_PNFS=y +# CONFIG_NFSD_BLOCKLAYOUT is not set +# CONFIG_NFSD_SCSILAYOUT is not set CONFIG_NFSD_V4_SECURITY_LABEL=y # CONFIG_NFSD_FAULT_INJECTION is not set CONFIG_GRACE_PERIOD=m @@ -8155,6 +8248,8 @@ CONFIG_DEBUG_KERNEL=y # CONFIG_PAGE_EXTENSION=y # CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_PAGE_POISONING is not set +# CONFIG_DEBUG_PAGE_REF is not set # CONFIG_DEBUG_OBJECTS is not set # CONFIG_SLUB_DEBUG_ON is not set # CONFIG_SLUB_STATS is not set @@ -8230,6 +8325,7 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=60 # CONFIG_RCU_EQS_DEBUG is not set # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set CONFIG_NOTIFIER_ERROR_INJECTION=m CONFIG_CPU_NOTIFIER_ERROR_INJECT=m CONFIG_PM_NOTIFIER_ERROR_INJECT=m @@ -8303,6 +8399,7 @@ CONFIG_TEST_HEXDUMP=m CONFIG_TEST_STRING_HELPERS=m CONFIG_TEST_KSTRTOX=m CONFIG_TEST_PRINTF=m +CONFIG_TEST_BITMAP=m # CONFIG_TEST_RHASHTABLE is not set # CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set # CONFIG_DMA_API_DEBUG is not set @@ -8335,7 +8432,6 @@ CONFIG_EARLY_PRINTK_EFI=y # CONFIG_X86_PTDUMP_CORE is not set # CONFIG_X86_PTDUMP is not set # CONFIG_EFI_PGT_DUMP is not set -CONFIG_DEBUG_RODATA=y # CONFIG_DEBUG_RODATA_TEST is not set # CONFIG_DEBUG_WX is not set CONFIG_DEBUG_SET_MODULE_RONX=y @@ -8359,7 +8455,6 @@ CONFIG_DEFAULT_IO_DELAY_TYPE=1 CONFIG_OPTIMIZE_INLINING=y # CONFIG_DEBUG_ENTRY is not set # CONFIG_DEBUG_NMI_SELFTEST is not set -# CONFIG_X86_DEBUG_STATIC_CPU_HAS is not set CONFIG_X86_DEBUG_FPU=y CONFIG_PUNIT_ATOM_DEBUG=m @@ -8455,11 +8550,9 @@ CONFIG_CRYPTO_HASH2=y CONFIG_CRYPTO_RNG=y CONFIG_CRYPTO_RNG2=y CONFIG_CRYPTO_RNG_DEFAULT=m -CONFIG_CRYPTO_PCOMP=m -CONFIG_CRYPTO_PCOMP2=y CONFIG_CRYPTO_AKCIPHER2=y -CONFIG_CRYPTO_AKCIPHER=m -CONFIG_CRYPTO_RSA=m +CONFIG_CRYPTO_AKCIPHER=y +CONFIG_CRYPTO_RSA=y CONFIG_CRYPTO_MANAGER=y CONFIG_CRYPTO_MANAGER2=y CONFIG_CRYPTO_USER=m @@ -8560,7 +8653,6 @@ CONFIG_CRYPTO_TWOFISH_586=m # Compression # CONFIG_CRYPTO_DEFLATE=m -CONFIG_CRYPTO_ZLIB=m CONFIG_CRYPTO_LZO=y CONFIG_CRYPTO_842=m CONFIG_CRYPTO_LZ4=m @@ -8599,7 +8691,6 @@ CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m CONFIG_CRYPTO_DEV_QAT_C62XVF=m CONFIG_ASYMMETRIC_KEY_TYPE=y CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y -CONFIG_PUBLIC_KEY_ALGO_RSA=y CONFIG_X509_CERTIFICATE_PARSER=y CONFIG_PKCS7_MESSAGE_PARSER=y CONFIG_PKCS7_TEST_KEY=m @@ -8610,6 +8701,7 @@ CONFIG_SIGNED_PE_FILE_VERIFICATION=y # CONFIG_SYSTEM_TRUSTED_KEYRING=y CONFIG_SYSTEM_TRUSTED_KEYS="" +# CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set CONFIG_HAVE_KVM=y CONFIG_HAVE_KVM_IRQCHIP=y CONFIG_HAVE_KVM_IRQFD=y diff --git a/gnu/packages/linux-libre-4.5-x86_64.conf b/gnu/packages/linux-libre-4.6-x86_64.conf index 8625ce6af5..a7c11eeae3 100644 --- a/gnu/packages/linux-libre-4.5-x86_64.conf +++ b/gnu/packages/linux-libre-4.6-x86_64.conf @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 4.5.0-gnu Kernel Configuration +# Linux/x86 4.6.0-gnu Kernel Configuration # CONFIG_64BIT=y CONFIG_X86_64=y @@ -43,6 +43,7 @@ CONFIG_X86_64_SMP=y CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-rdi -fcall-saved-rsi -fcall-saved-rdx -fcall-saved-rcx -fcall-saved-r8 -fcall-saved-r9 -fcall-saved-r10 -fcall-saved-r11" CONFIG_ARCH_SUPPORTS_UPROBES=y CONFIG_FIX_EARLYCON_MEM=y +CONFIG_DEBUG_RODATA=y CONFIG_PGTABLE_LEVELS=4 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" CONFIG_IRQ_WORK=y @@ -204,6 +205,8 @@ CONFIG_SYSFS_SYSCALL=y CONFIG_SYSCTL_SYSCALL=y CONFIG_KALLSYMS=y CONFIG_KALLSYMS_ALL=y +CONFIG_KALLSYMS_ABSOLUTE_PERCPU=y +CONFIG_KALLSYMS_BASE_RELATIVE=y CONFIG_PRINTK=y CONFIG_BUG=y CONFIG_ELF_CORE=y @@ -301,6 +304,7 @@ CONFIG_ARCH_MMAP_RND_BITS=28 CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y CONFIG_ARCH_MMAP_RND_COMPAT_BITS=8 CONFIG_HAVE_COPY_THREAD_TLS=y +CONFIG_HAVE_STACK_VALIDATION=y CONFIG_OLD_SIGSUSPEND3=y CONFIG_COMPAT_OLD_SIGACTION=y @@ -393,6 +397,7 @@ CONFIG_X86_FEATURE_NAMES=y CONFIG_X86_FAST_FEATURE_TESTS=y CONFIG_X86_X2APIC=y CONFIG_X86_MPPARSE=y +# CONFIG_GOLDFISH is not set CONFIG_X86_EXTENDED_PLATFORM=y CONFIG_X86_NUMACHIP=y # CONFIG_X86_VSMP is not set @@ -471,6 +476,7 @@ CONFIG_MICROCODE=y CONFIG_MICROCODE_INTEL=y CONFIG_MICROCODE_AMD=y CONFIG_MICROCODE_OLD_INTERFACE=y +CONFIG_PERF_EVENTS_AMD_POWER=m CONFIG_X86_MSR=m CONFIG_X86_CPUID=m CONFIG_ARCH_PHYS_ADDR_T_64BIT=y @@ -544,6 +550,8 @@ CONFIG_ARCH_SUPPORTS_DEFERRED_STRUCT_PAGE_INIT=y CONFIG_IDLE_PAGE_TRACKING=y CONFIG_ZONE_DEVICE=y CONFIG_FRAME_VECTOR=y +CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y +CONFIG_ARCH_HAS_PKEYS=y CONFIG_X86_PMEM_LEGACY_DEVICE=y CONFIG_X86_PMEM_LEGACY=y CONFIG_X86_CHECK_BIOS_CORRUPTION=y @@ -558,6 +566,7 @@ CONFIG_ARCH_USES_PG_UNCACHED=y CONFIG_ARCH_RANDOM=y CONFIG_X86_SMAP=y CONFIG_X86_INTEL_MPX=y +CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y CONFIG_EFI=y CONFIG_EFI_STUB=y CONFIG_EFI_MIXED=y @@ -755,10 +764,19 @@ CONFIG_PCI_IOV=y CONFIG_PCI_PRI=y CONFIG_PCI_PASID=y CONFIG_PCI_LABEL=y +CONFIG_PCI_HYPERV=m +CONFIG_HOTPLUG_PCI=y +CONFIG_HOTPLUG_PCI_ACPI=y +CONFIG_HOTPLUG_PCI_ACPI_IBM=m +CONFIG_HOTPLUG_PCI_CPCI=y +CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m +CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m +CONFIG_HOTPLUG_PCI_SHPC=m # # PCI host controller drivers # +# CONFIG_PCIE_DW_PLAT is not set CONFIG_ISA_DMA_API=y CONFIG_AMD_NB=y CONFIG_PCCARD=m @@ -778,13 +796,6 @@ CONFIG_YENTA_TOSHIBA=y CONFIG_PD6729=m CONFIG_I82092=m CONFIG_PCCARD_NONSTATIC=y -CONFIG_HOTPLUG_PCI=y -CONFIG_HOTPLUG_PCI_ACPI=y -CONFIG_HOTPLUG_PCI_ACPI_IBM=m -CONFIG_HOTPLUG_PCI_CPCI=y -CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m -CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m -CONFIG_HOTPLUG_PCI_SHPC=m CONFIG_RAPIDIO=y CONFIG_RAPIDIO_TSI721=m CONFIG_RAPIDIO_DISC_TIMEOUT=30 @@ -792,6 +803,7 @@ CONFIG_RAPIDIO_DISC_TIMEOUT=30 CONFIG_RAPIDIO_DMA_ENGINE=y # CONFIG_RAPIDIO_DEBUG is not set CONFIG_RAPIDIO_ENUM_BASIC=m +CONFIG_RAPIDIO_MPORT_CDEV=m # # RapidIO Switch drivers @@ -877,7 +889,6 @@ CONFIG_INET_TUNNEL=m CONFIG_INET_XFRM_MODE_TRANSPORT=m CONFIG_INET_XFRM_MODE_TUNNEL=m CONFIG_INET_XFRM_MODE_BEET=m -CONFIG_INET_LRO=y CONFIG_INET_DIAG=m CONFIG_INET_TCP_DIAG=m CONFIG_INET_UDP_DIAG=m @@ -1422,11 +1433,15 @@ CONFIG_NET_ACT_CSUM=m CONFIG_NET_ACT_VLAN=m CONFIG_NET_ACT_BPF=m CONFIG_NET_ACT_CONNMARK=m +CONFIG_NET_ACT_IFE=m +CONFIG_NET_IFE_SKBMARK=m +CONFIG_NET_IFE_SKBPRIO=m # CONFIG_NET_CLS_IND is not set CONFIG_NET_SCH_FIFO=y CONFIG_DCB=y CONFIG_DNS_RESOLVER=y CONFIG_BATMAN_ADV=m +# CONFIG_BATMAN_ADV_BATMAN_V is not set CONFIG_BATMAN_ADV_BLA=y CONFIG_BATMAN_ADV_DAT=y CONFIG_BATMAN_ADV_NC=y @@ -1438,7 +1453,6 @@ CONFIG_OPENVSWITCH_VXLAN=m CONFIG_OPENVSWITCH_GENEVE=m CONFIG_VSOCKETS=m CONFIG_VMWARE_VMCI_VSOCKETS=m -CONFIG_NETLINK_MMAP=y CONFIG_NETLINK_DIAG=m CONFIG_MPLS=y CONFIG_NET_MPLS_GSO=m @@ -1498,6 +1512,14 @@ CONFIG_CAN_DEV=m CONFIG_CAN_CALC_BITTIMING=y CONFIG_CAN_LEDS=y CONFIG_CAN_JANZ_ICAN3=m +CONFIG_CAN_C_CAN=m +CONFIG_CAN_C_CAN_PLATFORM=m +CONFIG_CAN_C_CAN_PCI=m +CONFIG_CAN_CC770=m +CONFIG_CAN_CC770_ISA=m +CONFIG_CAN_CC770_PLATFORM=m +CONFIG_CAN_IFI_CANFD=m +CONFIG_CAN_M_CAN=m CONFIG_CAN_SJA1000=m CONFIG_CAN_SJA1000_ISA=m CONFIG_CAN_SJA1000_PLATFORM=m @@ -1508,13 +1530,8 @@ CONFIG_CAN_PEAK_PCI=m CONFIG_CAN_PEAK_PCIEC=y CONFIG_CAN_KVASER_PCI=m CONFIG_CAN_PLX_PCI=m -CONFIG_CAN_C_CAN=m -CONFIG_CAN_C_CAN_PLATFORM=m -CONFIG_CAN_C_CAN_PCI=m -CONFIG_CAN_M_CAN=m -CONFIG_CAN_CC770=m -CONFIG_CAN_CC770_ISA=m -CONFIG_CAN_CC770_PLATFORM=m +CONFIG_CAN_SOFTING=m +CONFIG_CAN_SOFTING_CS=m # # CAN SPI interfaces @@ -1530,8 +1547,6 @@ CONFIG_CAN_GS_USB=m CONFIG_CAN_KVASER_USB=m CONFIG_CAN_PEAK_USB=m CONFIG_CAN_8DEV_USB=m -CONFIG_CAN_SOFTING=m -CONFIG_CAN_SOFTING_CS=m # CONFIG_CAN_DEBUG_DEVICES is not set CONFIG_IRDA=m @@ -1601,6 +1616,7 @@ CONFIG_BT_HIDP=m CONFIG_BT_HS=y CONFIG_BT_LE=y CONFIG_BT_6LOWPAN=m +# CONFIG_BT_LEDS is not set # CONFIG_BT_SELFTEST is not set CONFIG_BT_DEBUGFS=y @@ -1624,6 +1640,7 @@ CONFIG_BT_HCIUART_3WIRE=y CONFIG_BT_HCIUART_INTEL=y CONFIG_BT_HCIUART_BCM=y CONFIG_BT_HCIUART_QCA=y +CONFIG_BT_HCIUART_AG6XX=y CONFIG_BT_HCIBCM203X=m CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBFUSB=m @@ -1639,6 +1656,7 @@ CONFIG_BT_WILINK=m CONFIG_AF_RXRPC=m # CONFIG_AF_RXRPC_DEBUG is not set CONFIG_RXKAD=m +CONFIG_AF_KCM=m CONFIG_FIB_RULES=y CONFIG_WIRELESS=y CONFIG_WIRELESS_EXT=y @@ -1649,7 +1667,6 @@ CONFIG_WEXT_PRIV=y CONFIG_CFG80211=m # CONFIG_NL80211_TESTMODE is not set # CONFIG_CFG80211_DEVELOPER_WARNINGS is not set -# CONFIG_CFG80211_REG_DEBUG is not set # CONFIG_CFG80211_CERTIFICATION_ONUS is not set CONFIG_CFG80211_DEFAULT_PS=y CONFIG_CFG80211_DEBUGFS=y @@ -1734,6 +1751,9 @@ CONFIG_NFC_S3FWRN5=m CONFIG_NFC_S3FWRN5_I2C=m CONFIG_NFC_ST95HF=m CONFIG_LWTUNNEL=y +CONFIG_DST_CACHE=y +CONFIG_NET_DEVLINK=m +CONFIG_MAY_USE_DEVLINK=m CONFIG_HAVE_BPF_JIT=y # @@ -1998,6 +2018,7 @@ CONFIG_VIRTIO_BLK=y # CONFIG_BLK_DEV_HD is not set CONFIG_BLK_DEV_RBD=m CONFIG_BLK_DEV_RSXX=m +CONFIG_NVME_CORE=m CONFIG_BLK_DEV_NVME=m # CONFIG_BLK_DEV_NVME_SCSI is not set @@ -2028,12 +2049,16 @@ CONFIG_HMC6352=m CONFIG_DS1682=m CONFIG_TI_DAC7512=m CONFIG_VMWARE_BALLOON=m -CONFIG_BMP085=y +CONFIG_BMP085=m CONFIG_BMP085_I2C=m CONFIG_BMP085_SPI=m CONFIG_USB_SWITCH_FSA9480=m CONFIG_LATTICE_ECP3_CONFIG=m CONFIG_SRAM=y +CONFIG_PANEL=m +CONFIG_PANEL_PARPORT=0 +CONFIG_PANEL_PROFILE=5 +# CONFIG_PANEL_CHANGE_MESSAGE is not set CONFIG_C2PORT=m CONFIG_C2PORT_DURAMAR_2150=m @@ -2076,6 +2101,11 @@ CONFIG_INTEL_MIC_BUS=m CONFIG_SCIF_BUS=m # +# VOP Bus Driver +# +CONFIG_VOP_BUS=m + +# # Intel MIC Host Driver # CONFIG_INTEL_MIC_HOST=m @@ -2094,6 +2124,11 @@ CONFIG_SCIF=m # Intel MIC Coprocessor State Management (COSM) Drivers # CONFIG_MIC_COSM=m + +# +# VOP Driver +# +CONFIG_VOP=m CONFIG_GENWQE=m CONFIG_GENWQE_PLATFORM_ERROR_RECOVERY=0 CONFIG_ECHO=m @@ -2373,7 +2408,6 @@ CONFIG_DM_CRYPT=m CONFIG_DM_SNAPSHOT=m CONFIG_DM_THIN_PROVISIONING=m CONFIG_DM_CACHE=m -CONFIG_DM_CACHE_MQ=m CONFIG_DM_CACHE_SMQ=m CONFIG_DM_CACHE_CLEANER=m CONFIG_DM_ERA=m @@ -2438,6 +2472,7 @@ CONFIG_MACVTAP=m CONFIG_IPVLAN=m CONFIG_VXLAN=m CONFIG_GENEVE=m +CONFIG_MACSEC=m CONFIG_NETCONSOLE=m CONFIG_NETCONSOLE_DYNAMIC=y CONFIG_NETPOLL=y @@ -2556,6 +2591,7 @@ CONFIG_TIGON3=m CONFIG_BNX2X=m CONFIG_BNX2X_SRIOV=y CONFIG_BNX2X_VXLAN=y +# CONFIG_BNX2X_GENEVE is not set CONFIG_BNXT=m CONFIG_BNXT_SRIOV=y CONFIG_NET_VENDOR_BROCADE=y @@ -2571,6 +2607,7 @@ CONFIG_CHELSIO_T1_1G=y CONFIG_CHELSIO_T3=m CONFIG_CHELSIO_T4=m CONFIG_CHELSIO_T4_DCB=y +# CONFIG_CHELSIO_T4_UWIRE is not set CONFIG_CHELSIO_T4_FCOE=y CONFIG_CHELSIO_T4VF=m CONFIG_NET_VENDOR_CISCO=y @@ -2611,6 +2648,7 @@ CONFIG_NET_VENDOR_INTEL=y CONFIG_E100=m CONFIG_E1000=m CONFIG_E1000E=m +CONFIG_E1000E_HWTS=y CONFIG_IGB=m CONFIG_IGB_HWMON=y CONFIG_IGB_DCA=y @@ -2634,6 +2672,7 @@ CONFIG_NET_VENDOR_I825XX=y CONFIG_JME=m CONFIG_NET_VENDOR_MARVELL=y CONFIG_MVMDIO=m +# CONFIG_MVNETA_BM is not set CONFIG_SKGE=m # CONFIG_SKGE_DEBUG is not set CONFIG_SKGE_GENESIS=y @@ -2647,6 +2686,8 @@ CONFIG_MLX4_CORE=m CONFIG_MLX4_DEBUG=y CONFIG_MLX5_CORE=m CONFIG_MLX5_CORE_EN=y +CONFIG_MLX5_CORE_EN_DCB=y +CONFIG_MLX5_CORE_EN_VXLAN=y CONFIG_MLXSW_CORE=m CONFIG_MLXSW_CORE_HWMON=y CONFIG_MLXSW_PCI=m @@ -2790,7 +2831,9 @@ CONFIG_MICROCHIP_PHY=m CONFIG_FIXED_PHY=y CONFIG_MDIO_BITBANG=m CONFIG_MDIO_GPIO=m +CONFIG_MDIO_CAVIUM=m CONFIG_MDIO_OCTEON=m +CONFIG_MDIO_THUNDER=m CONFIG_MDIO_BCM_UNIMAC=m CONFIG_MICREL_KS8995MA=m CONFIG_PLIP=m @@ -2978,6 +3021,7 @@ CONFIG_IWLMVM=m CONFIG_IWLWIFI_OPMODE_MODULAR=y # CONFIG_IWLWIFI_BCAST_FILTERING is not set # CONFIG_IWLWIFI_UAPSD is not set +# CONFIG_IWLWIFI_PCIE_RTPM is not set # # Debugging Options @@ -3095,7 +3139,6 @@ CONFIG_WL1251_SDIO=m CONFIG_WL12XX=m CONFIG_WL18XX=m CONFIG_WLCORE=m -CONFIG_WLCORE_SPI=m CONFIG_WLCORE_SDIO=m CONFIG_WILINK_PLATFORM_DATA=y CONFIG_WLAN_VENDOR_ZYDAS=y @@ -3223,10 +3266,6 @@ CONFIG_HISAX_ST5481=m CONFIG_HISAX_HFCUSB=m CONFIG_HISAX_HFC4S8S=m CONFIG_HISAX_FRITZ_PCIPNP=m - -# -# Active cards -# CONFIG_ISDN_CAPI=m CONFIG_CAPI_TRACE=y CONFIG_ISDN_CAPI_CAPI20=m @@ -3337,6 +3376,7 @@ CONFIG_KEYBOARD_CROS_EC=m CONFIG_INPUT_MOUSE=y CONFIG_MOUSE_PS2=m CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_BYD=y CONFIG_MOUSE_PS2_LOGIPS2PP=y CONFIG_MOUSE_PS2_SYNAPTICS=y CONFIG_MOUSE_PS2_CYPRESS=y @@ -3432,6 +3472,7 @@ CONFIG_TOUCHSCREEN_WACOM_I2C=m CONFIG_TOUCHSCREEN_MAX11801=m CONFIG_TOUCHSCREEN_MCS5000=m CONFIG_TOUCHSCREEN_MMS114=m +CONFIG_TOUCHSCREEN_MELFAS_MIP4=m CONFIG_TOUCHSCREEN_MTOUCH=m CONFIG_TOUCHSCREEN_INEXIO=m CONFIG_TOUCHSCREEN_MK712=m @@ -3539,6 +3580,13 @@ CONFIG_INPUT_SOC_BUTTON_ARRAY=m CONFIG_INPUT_DRV260X_HAPTICS=m CONFIG_INPUT_DRV2665_HAPTICS=m CONFIG_INPUT_DRV2667_HAPTICS=m +CONFIG_RMI4_CORE=m +CONFIG_RMI4_I2C=m +CONFIG_RMI4_SPI=m +CONFIG_RMI4_2D_SENSOR=y +CONFIG_RMI4_F11=y +CONFIG_RMI4_F12=y +CONFIG_RMI4_F30=y # # Hardware I/O ports @@ -3618,6 +3666,7 @@ CONFIG_SERIAL_8250_DW=m CONFIG_SERIAL_8250_RT288X=y CONFIG_SERIAL_8250_FINTEK=m CONFIG_SERIAL_8250_MID=m +CONFIG_SERIAL_8250_MOXA=m # # Non-8250 serial port support @@ -3647,6 +3696,7 @@ CONFIG_SERIAL_RP2=m CONFIG_SERIAL_RP2_NR_UARTS=32 CONFIG_SERIAL_FSL_LPUART=m CONFIG_SERIAL_MEN_Z135=m +# CONFIG_SERIAL_MVEBU_UART is not set CONFIG_TTY_PRINTK=y CONFIG_PRINTER=m # CONFIG_LP_CONSOLE is not set @@ -3807,24 +3857,24 @@ CONFIG_SPI_MASTER=y # SPI Master Controller Drivers # CONFIG_SPI_ALTERA=m +CONFIG_SPI_AXI_SPI_ENGINE=m CONFIG_SPI_BITBANG=m CONFIG_SPI_BUTTERFLY=m CONFIG_SPI_CADENCE=m +CONFIG_SPI_DESIGNWARE=m +CONFIG_SPI_DW_PCI=m +CONFIG_SPI_DW_MID_DMA=y +CONFIG_SPI_DW_MMIO=m CONFIG_SPI_DLN2=m CONFIG_SPI_GPIO=m CONFIG_SPI_LM70_LLP=m CONFIG_SPI_OC_TINY=m -CONFIG_SPI_PXA2XX_DMA=y CONFIG_SPI_PXA2XX=m CONFIG_SPI_PXA2XX_PCI=m CONFIG_SPI_SC18IS602=m CONFIG_SPI_XCOMM=m # CONFIG_SPI_XILINX is not set CONFIG_SPI_ZYNQMP_GQSPI=m -CONFIG_SPI_DESIGNWARE=m -CONFIG_SPI_DW_PCI=m -CONFIG_SPI_DW_MID_DMA=y -CONFIG_SPI_DW_MMIO=m # # SPI Protocol Masters @@ -3904,18 +3954,21 @@ CONFIG_GPIO_DWAPB=m CONFIG_GPIO_GENERIC_PLATFORM=m CONFIG_GPIO_ICH=m CONFIG_GPIO_LYNXPOINT=y +CONFIG_GPIO_MENZ127=m CONFIG_GPIO_VX855=m CONFIG_GPIO_ZX=y # # Port-mapped I/O GPIO drivers # +CONFIG_GPIO_104_DIO_48E=m CONFIG_GPIO_104_IDIO_16=m CONFIG_GPIO_104_IDI_48=m CONFIG_GPIO_F7188X=m CONFIG_GPIO_IT87=m CONFIG_GPIO_SCH=m CONFIG_GPIO_SCH311X=m +CONFIG_GPIO_WS16C48=m # # I2C GPIO expanders @@ -3926,6 +3979,7 @@ CONFIG_GPIO_MAX732X=m CONFIG_GPIO_PCA953X=m CONFIG_GPIO_PCF857X=m CONFIG_GPIO_SX150X=y +CONFIG_GPIO_TPIC2810=m # # MFD GPIO expanders @@ -3941,6 +3995,8 @@ CONFIG_GPIO_KEMPLD=m CONFIG_GPIO_LP3943=m CONFIG_GPIO_PALMAS=y CONFIG_GPIO_RC5T583=y +CONFIG_GPIO_TPS65086=m +CONFIG_GPIO_TPS65218=m CONFIG_GPIO_TPS6586X=y CONFIG_GPIO_TPS65910=y CONFIG_GPIO_TPS65912=m @@ -3964,6 +4020,7 @@ CONFIG_GPIO_RDC321X=m # CONFIG_GPIO_MAX7301=m CONFIG_GPIO_MC33880=m +CONFIG_GPIO_PISOSR=m # # SPI or I2C GPIO expanders @@ -4118,6 +4175,7 @@ CONFIG_SENSORS_JC42=m CONFIG_SENSORS_POWR1220=m CONFIG_SENSORS_LINEAGE=m CONFIG_SENSORS_LTC2945=m +CONFIG_SENSORS_LTC2990=m CONFIG_SENSORS_LTC4151=m CONFIG_SENSORS_LTC4215=m CONFIG_SENSORS_LTC4222=m @@ -4275,6 +4333,7 @@ CONFIG_ACQUIRE_WDT=m CONFIG_ADVANTECH_WDT=m CONFIG_ALIM1535_WDT=m CONFIG_ALIM7101_WDT=m +CONFIG_EBC_C384_WDT=m CONFIG_F71808E_WDT=m CONFIG_SP5100_TCO=m CONFIG_SBC_FITPC2_WATCHDOG=m @@ -4304,7 +4363,8 @@ CONFIG_W83877F_WDT=m CONFIG_W83977F_WDT=m CONFIG_MACHZ_WDT=m CONFIG_SBC_EPX_C3_WATCHDOG=m -CONFIG_BCM7038_WDT=m +CONFIG_INTEL_MEI_WDT=m +CONFIG_NI903X_WDT=m CONFIG_MEN_A21_WDT=m CONFIG_XEN_WDT=m @@ -4361,7 +4421,8 @@ CONFIG_MFD_AS3711=y CONFIG_PMIC_ADP5520=y CONFIG_MFD_AAT2870_CORE=y CONFIG_MFD_BCM590XX=m -CONFIG_MFD_AXP20X=y +CONFIG_MFD_AXP20X=m +CONFIG_MFD_AXP20X_I2C=m CONFIG_MFD_CROS_EC=m CONFIG_MFD_CROS_EC_I2C=m CONFIG_MFD_CROS_EC_SPI=m @@ -4430,6 +4491,7 @@ CONFIG_MFD_PALMAS=y CONFIG_TPS6105X=m CONFIG_TPS65010=m CONFIG_TPS6507X=m +CONFIG_MFD_TPS65086=m CONFIG_MFD_TPS65090=y CONFIG_MFD_TPS65217=m CONFIG_MFD_TPS65218=m @@ -4530,6 +4592,7 @@ CONFIG_REGULATOR_TPS6105X=m CONFIG_REGULATOR_TPS62360=m CONFIG_REGULATOR_TPS65023=m CONFIG_REGULATOR_TPS6507X=m +CONFIG_REGULATOR_TPS65086=m CONFIG_REGULATOR_TPS65090=m CONFIG_REGULATOR_TPS65217=m CONFIG_REGULATOR_TPS6524X=m @@ -5226,6 +5289,7 @@ CONFIG_VGA_ARB_MAX_GPUS=16 CONFIG_VGA_SWITCHEROO=y CONFIG_DRM=m CONFIG_DRM_MIPI_DSI=y +# CONFIG_DRM_DP_AUX_CHARDEV is not set CONFIG_DRM_KMS_HELPER=m CONFIG_DRM_KMS_FB_HELPER=y CONFIG_DRM_FBDEV_EMULATION=y @@ -5247,6 +5311,11 @@ CONFIG_DRM_AMDGPU=m # CONFIG_DRM_AMDGPU_CIK is not set CONFIG_DRM_AMDGPU_USERPTR=y # CONFIG_DRM_AMD_POWERPLAY is not set + +# +# ACP (Audio CoProcessor) Configuration +# +# CONFIG_DRM_AMD_ACP is not set CONFIG_DRM_NOUVEAU=m CONFIG_NOUVEAU_DEBUG=5 CONFIG_NOUVEAU_DEBUG_DEFAULT=3 @@ -5254,6 +5323,7 @@ CONFIG_DRM_NOUVEAU_BACKLIGHT=y CONFIG_DRM_I810=m CONFIG_DRM_I915=m # CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT is not set +CONFIG_DRM_I915_USERPTR=y CONFIG_DRM_MGA=m CONFIG_DRM_SIS=m CONFIG_DRM_VIA=m @@ -5465,11 +5535,13 @@ CONFIG_SOUND_OSS_CORE=y CONFIG_SND=m CONFIG_SND_TIMER=m CONFIG_SND_PCM=m +CONFIG_SND_PCM_ELD=y CONFIG_SND_DMAENGINE_PCM=m CONFIG_SND_HWDEP=m CONFIG_SND_RAWMIDI=m CONFIG_SND_COMPRESS_OFFLOAD=m CONFIG_SND_JACK=y +CONFIG_SND_JACK_INPUT_DEV=y CONFIG_SND_SEQUENCER=m CONFIG_SND_SEQ_DUMMY=m CONFIG_SND_OSSEMUL=y @@ -5701,11 +5773,14 @@ CONFIG_SND_SOC_CS4349=m CONFIG_SND_SOC_DMIC=m CONFIG_SND_SOC_ES8328=m CONFIG_SND_SOC_GTM601=m +CONFIG_SND_SOC_HDAC_HDMI=m CONFIG_SND_SOC_INNO_RK3036=m CONFIG_SND_SOC_MAX98090=m CONFIG_SND_SOC_MAX98357A=m CONFIG_SND_SOC_PCM1681=m CONFIG_SND_SOC_PCM179X=m +CONFIG_SND_SOC_PCM179X_I2C=m +CONFIG_SND_SOC_PCM179X_SPI=m CONFIG_SND_SOC_PCM3168A=m CONFIG_SND_SOC_PCM3168A_I2C=m CONFIG_SND_SOC_PCM3168A_SPI=m @@ -5715,6 +5790,7 @@ CONFIG_SND_SOC_PCM512x_SPI=m CONFIG_SND_SOC_RL6231=m CONFIG_SND_SOC_RL6347A=m CONFIG_SND_SOC_RT286=m +CONFIG_SND_SOC_RT5616=m CONFIG_SND_SOC_RT5631=m CONFIG_SND_SOC_RT5640=m CONFIG_SND_SOC_RT5645=m @@ -5793,6 +5869,7 @@ CONFIG_HID_CHERRY=m CONFIG_HID_CHICONY=m CONFIG_HID_CORSAIR=m CONFIG_HID_PRODIKEYS=m +CONFIG_HID_CMEDIA=m CONFIG_HID_CP2112=m CONFIG_HID_CYPRESS=m CONFIG_HID_DRAGONRISE=m @@ -6375,6 +6452,7 @@ CONFIG_INFINIBAND_QIB_DCA=y CONFIG_INFINIBAND_CXGB3=m # CONFIG_INFINIBAND_CXGB3_DEBUG is not set CONFIG_INFINIBAND_CXGB4=m +CONFIG_INFINIBAND_I40IW=m CONFIG_MLX4_INFINIBAND=m CONFIG_MLX5_INFINIBAND=m CONFIG_INFINIBAND_NES=m @@ -6388,6 +6466,7 @@ CONFIG_INFINIBAND_SRP=m CONFIG_INFINIBAND_SRPT=m CONFIG_INFINIBAND_ISER=m CONFIG_INFINIBAND_ISERT=m +CONFIG_INFINIBAND_RDMAVT=m CONFIG_EDAC_ATOMIC_SCRUB=y CONFIG_EDAC_SUPPORT=y CONFIG_EDAC=y @@ -6434,10 +6513,10 @@ CONFIG_RTC_DRV_88PM80X=m CONFIG_RTC_DRV_ABB5ZES3=m CONFIG_RTC_DRV_ABX80X=m CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS1307_HWMON=y CONFIG_RTC_DRV_DS1374=m CONFIG_RTC_DRV_DS1374_WDT=y CONFIG_RTC_DRV_DS1672=m -CONFIG_RTC_DRV_DS3232=m CONFIG_RTC_DRV_LP8788=m CONFIG_RTC_DRV_MAX6900=m CONFIG_RTC_DRV_MAX8907=m @@ -6449,16 +6528,15 @@ CONFIG_RTC_DRV_ISL1208=m CONFIG_RTC_DRV_ISL12022=m CONFIG_RTC_DRV_ISL12057=m CONFIG_RTC_DRV_X1205=m -CONFIG_RTC_DRV_PALMAS=m -CONFIG_RTC_DRV_PCF2127=m CONFIG_RTC_DRV_PCF8523=m -CONFIG_RTC_DRV_PCF8563=m CONFIG_RTC_DRV_PCF85063=m +CONFIG_RTC_DRV_PCF8563=m CONFIG_RTC_DRV_PCF8583=m CONFIG_RTC_DRV_M41T80=m CONFIG_RTC_DRV_M41T80_WDT=y CONFIG_RTC_DRV_BQ32K=m CONFIG_RTC_DRV_TWL4030=m +CONFIG_RTC_DRV_PALMAS=m CONFIG_RTC_DRV_TPS6586X=m CONFIG_RTC_DRV_TPS65910=m CONFIG_RTC_DRV_TPS80031=m @@ -6470,6 +6548,7 @@ CONFIG_RTC_DRV_RX8581=m CONFIG_RTC_DRV_RX8025=m CONFIG_RTC_DRV_EM3027=m CONFIG_RTC_DRV_RV3029C2=m +CONFIG_RTC_DRV_RV3029_HWMON=y CONFIG_RTC_DRV_RV8803=m CONFIG_RTC_DRV_S5M=m @@ -6482,13 +6561,20 @@ CONFIG_RTC_DRV_DS1305=m CONFIG_RTC_DRV_DS1343=m CONFIG_RTC_DRV_DS1347=m CONFIG_RTC_DRV_DS1390=m -CONFIG_RTC_DRV_MAX6902=m CONFIG_RTC_DRV_R9701=m +CONFIG_RTC_DRV_RX4581=m +CONFIG_RTC_DRV_RX6110=m CONFIG_RTC_DRV_RS5C348=m -CONFIG_RTC_DRV_DS3234=m +CONFIG_RTC_DRV_MAX6902=m CONFIG_RTC_DRV_PCF2123=m -CONFIG_RTC_DRV_RX4581=m CONFIG_RTC_DRV_MCP795=m +CONFIG_RTC_I2C_AND_SPI=y + +# +# SPI and I2C RTC drivers +# +CONFIG_RTC_DRV_DS3232=m +CONFIG_RTC_DRV_PCF2127=m # # Platform RTC drivers @@ -6546,6 +6632,8 @@ CONFIG_DMA_ACPI=y CONFIG_INTEL_IDMA64=m CONFIG_INTEL_IOATDMA=m CONFIG_INTEL_MIC_X100_DMA=m +CONFIG_QCOM_HIDMA_MGMT=m +CONFIG_QCOM_HIDMA=m CONFIG_DW_DMAC_CORE=m CONFIG_DW_DMAC=m CONFIG_DW_DMAC_PCI=m @@ -6582,6 +6670,7 @@ CONFIG_VFIO_PCI=m CONFIG_VFIO_PCI_VGA=y CONFIG_VFIO_PCI_MMAP=y CONFIG_VFIO_PCI_INTX=y +CONFIG_VFIO_PCI_IGD=y CONFIG_IRQ_BYPASS_MANAGER=m CONFIG_VIRT_DRIVERS=y CONFIG_VIRTIO=y @@ -6773,10 +6862,6 @@ CONFIG_COMEDI_ISADMA=m CONFIG_COMEDI_NI_LABPC=m CONFIG_COMEDI_NI_LABPC_ISADMA=m CONFIG_COMEDI_NI_TIO=m -CONFIG_PANEL=m -CONFIG_PANEL_PARPORT=0 -CONFIG_PANEL_PROFILE=5 -# CONFIG_PANEL_CHANGE_MESSAGE is not set CONFIG_RTL8192U=m CONFIG_RTLLIB=m CONFIG_RTLLIB_CRYPTO_CCMP=m @@ -6859,13 +6944,6 @@ CONFIG_TSL2583=m CONFIG_TSL2x7x=m # -# Magnetometer sensors -# -CONFIG_SENSORS_HMC5843=m -CONFIG_SENSORS_HMC5843_I2C=m -CONFIG_SENSORS_HMC5843_SPI=m - -# # Active energy metering IC # CONFIG_ADE7753=m @@ -6886,7 +6964,6 @@ CONFIG_AD2S1210=m # # Triggers - standalone # -CONFIG_IIO_PERIODIC_RTC_TRIGGER=m CONFIG_FB_SM750=m CONFIG_FB_XGI=m @@ -6905,12 +6982,10 @@ CONFIG_SPEAKUP_SYNTH_SOFT=m CONFIG_SPEAKUP_SYNTH_SPKOUT=m CONFIG_SPEAKUP_SYNTH_TXPRT=m CONFIG_SPEAKUP_SYNTH_DUMMY=m -CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4=m CONFIG_STAGING_MEDIA=y CONFIG_I2C_BCM2048=m CONFIG_DVB_CXD2099=m CONFIG_DVB_MN88472=m -CONFIG_DVB_MN88473=m CONFIG_LIRC_STAGING=y CONFIG_LIRC_BT829=m CONFIG_LIRC_IMON=m @@ -6925,27 +7000,22 @@ CONFIG_INFINIBAND_HFI1=m # CONFIG_HFI1_DEBUG_SDMA_ORDER is not set CONFIG_HFI1_VERBS_31BIT_PSN=y # CONFIG_SDMA_VERBOSITY is not set -# CONFIG_PRESCAN_RXQ is not set # # Android # -CONFIG_WIMAX_GDM72XX=m -CONFIG_WIMAX_GDM72XX_QOS=y -CONFIG_WIMAX_GDM72XX_K_MODE=y -CONFIG_WIMAX_GDM72XX_WIMAX2=y -CONFIG_WIMAX_GDM72XX_USB=y -# CONFIG_WIMAX_GDM72XX_SDIO is not set -CONFIG_WIMAX_GDM72XX_USB_PM=y CONFIG_LTE_GDM724X=m CONFIG_FIREWIRE_SERIAL=m CONFIG_FWTTY_MAX_TOTAL_PORTS=64 CONFIG_FWTTY_MAX_CARD_PORTS=32 CONFIG_MTD_SPINAND_MT29F=m CONFIG_MTD_SPINAND_ONDIEECC=y +CONFIG_LNET=m +CONFIG_LNET_MAX_PAYLOAD=1048576 +# CONFIG_LNET_SELFTEST is not set +CONFIG_LNET_XPRT_IB=m # CONFIG_LUSTRE_FS is not set CONFIG_DGNC=m -CONFIG_DGAP=m CONFIG_GS_FPGABOOT=m CONFIG_CRYPTO_SKEIN=y CONFIG_UNISYSSPAR=y @@ -6972,7 +7042,9 @@ CONFIG_FB_TFT_RA8875=m CONFIG_FB_TFT_S6D02A1=m CONFIG_FB_TFT_S6D1121=m CONFIG_FB_TFT_SSD1289=m +CONFIG_FB_TFT_SSD1305=m CONFIG_FB_TFT_SSD1306=m +CONFIG_FB_TFT_SSD1325=m CONFIG_FB_TFT_SSD1331=m CONFIG_FB_TFT_SSD1351=m CONFIG_FB_TFT_ST7735R=m @@ -6998,11 +7070,16 @@ CONFIG_AIM_V4L2=m CONFIG_HDM_DIM2=m CONFIG_HDM_I2C=m CONFIG_HDM_USB=m + +# +# Old ISDN4Linux (deprecated) +# CONFIG_X86_PLATFORM_DEVICES=y CONFIG_ACER_WMI=m CONFIG_ACERHDF=m CONFIG_ALIENWARE_WMI=m CONFIG_ASUS_LAPTOP=m +CONFIG_DELL_SMBIOS=m CONFIG_DELL_LAPTOP=m CONFIG_DELL_WMI=m CONFIG_DELL_WMI_AIO=m @@ -7073,6 +7150,7 @@ CONFIG_COMMON_CLK=y # CONFIG_COMMON_CLK_WM831X=m CONFIG_COMMON_CLK_SI5351=m +CONFIG_COMMON_CLK_CDCE706=m CONFIG_COMMON_CLK_CS2000_CP=m CONFIG_COMMON_CLK_S2MPS11=m CONFIG_CLK_TWL6040=m @@ -7080,7 +7158,6 @@ CONFIG_CLK_TWL6040=m CONFIG_COMMON_CLK_PALMAS=m CONFIG_COMMON_CLK_PWM=m # CONFIG_COMMON_CLK_PXA is not set -CONFIG_COMMON_CLK_CDCE706=m # # Hardware Spinlock drivers @@ -7230,7 +7307,9 @@ CONFIG_PALMAS_GPADC=m CONFIG_QCOM_SPMI_IADC=m CONFIG_QCOM_SPMI_VADC=m CONFIG_TI_ADC081C=m +CONFIG_TI_ADC0832=m CONFIG_TI_ADC128S052=m +CONFIG_TI_ADS1015=m CONFIG_TI_AM335X_ADC=m CONFIG_TWL4030_MADC=m CONFIG_TWL6030_GPADC=m @@ -7244,6 +7323,7 @@ CONFIG_AD8366=m # # Chemical Sensors # +CONFIG_ATLAS_PH_SENSOR=m CONFIG_IAQCORE=m CONFIG_VZ89X=m @@ -7276,6 +7356,7 @@ CONFIG_AD5504=m CONFIG_AD5624R_SPI=m CONFIG_AD5686=m CONFIG_AD5755=m +CONFIG_AD5761=m CONFIG_AD5764=m CONFIG_AD5791=m CONFIG_AD7303=m @@ -7323,8 +7404,14 @@ CONFIG_IIO_ST_GYRO_SPI_3AXIS=m CONFIG_ITG3200=m # -# Health sensors +# Health Sensors +# + # +# Heart Rate Monitors +# +CONFIG_AFE4403=m +CONFIG_AFE4404=m CONFIG_MAX30100=m # @@ -7343,6 +7430,8 @@ CONFIG_ADIS16400=m CONFIG_ADIS16480=m CONFIG_KMX61=m CONFIG_INV_MPU6050_IIO=m +CONFIG_INV_MPU6050_I2C=m +CONFIG_INV_MPU6050_SPI=m CONFIG_IIO_ADIS_LIB=m CONFIG_IIO_ADIS_LIB_BUFFER=y @@ -7389,6 +7478,9 @@ CONFIG_MMC35240=m CONFIG_IIO_ST_MAGN_3AXIS=m CONFIG_IIO_ST_MAGN_I2C_3AXIS=m CONFIG_IIO_ST_MAGN_SPI_3AXIS=m +CONFIG_SENSORS_HMC5843=m +CONFIG_SENSORS_HMC5843_I2C=m +CONFIG_SENSORS_HMC5843_SPI=m # # Inclinometer sensors @@ -7407,6 +7499,7 @@ CONFIG_IIO_SYSFS_TRIGGER=m # Digital potentiometers # CONFIG_MCP4531=m +CONFIG_TPL0102=m # # Pressure sensors @@ -7414,6 +7507,8 @@ CONFIG_MCP4531=m CONFIG_BMP280=m CONFIG_HID_SENSOR_PRESS=m CONFIG_MPL115=m +CONFIG_MPL115_I2C=m +CONFIG_MPL115_SPI=m CONFIG_MPL3115=m CONFIG_MS5611=m CONFIG_MS5611_I2C=m @@ -7478,7 +7573,6 @@ CONFIG_PWM_PCA9685=m CONFIG_PWM_TWL=m CONFIG_PWM_TWL_LED=m CONFIG_ARM_GIC_MAX_NR=1 -CONFIG_TS4800_IRQ=m CONFIG_IPACK_BUS=m CONFIG_BOARD_TPCI200=m CONFIG_SERIAL_IPOCTAL=m @@ -7529,6 +7623,7 @@ CONFIG_NVMEM=m CONFIG_STM=m CONFIG_STM_DUMMY=m CONFIG_STM_SOURCE_CONSOLE=m +CONFIG_STM_SOURCE_HEARTBEAT=m CONFIG_INTEL_TH=m CONFIG_INTEL_TH_PCI=m CONFIG_INTEL_TH_GTH=m @@ -7556,6 +7651,8 @@ CONFIG_DMI_SYSFS=m CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y CONFIG_ISCSI_IBFT_FIND=y CONFIG_ISCSI_IBFT=m +CONFIG_FW_CFG_SYSFS=m +# CONFIG_FW_CFG_SYSFS_CMDLINE is not set # CONFIG_GOOGLE_FIRMWARE is not set # @@ -7632,6 +7729,7 @@ CONFIG_FS_POSIX_ACL=y CONFIG_EXPORTFS=y CONFIG_FILE_LOCKING=y CONFIG_MANDATORY_FILE_LOCKING=y +CONFIG_FS_ENCRYPTION=m CONFIG_FSNOTIFY=y CONFIG_DNOTIFY=y CONFIG_INOTIFY_USER=y @@ -7680,6 +7778,7 @@ CONFIG_MSDOS_FS=m CONFIG_VFAT_FS=y CONFIG_FAT_DEFAULT_CODEPAGE=437 CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_FAT_DEFAULT_UTF8 is not set CONFIG_NTFS_FS=m # CONFIG_NTFS_DEBUG is not set # CONFIG_NTFS_RW is not set @@ -7703,6 +7802,7 @@ CONFIG_HUGETLB_PAGE=y CONFIG_CONFIGFS_FS=m CONFIG_EFIVAR_FS=y CONFIG_MISC_FILESYSTEMS=y +CONFIG_ORANGEFS_FS=m CONFIG_ADFS_FS=m # CONFIG_ADFS_FS_RW is not set CONFIG_AFFS_FS=m @@ -7802,7 +7902,8 @@ CONFIG_NFSD_V2_ACL=y CONFIG_NFSD_V3=y CONFIG_NFSD_V3_ACL=y CONFIG_NFSD_V4=y -CONFIG_NFSD_PNFS=y +# CONFIG_NFSD_BLOCKLAYOUT is not set +# CONFIG_NFSD_SCSILAYOUT is not set CONFIG_NFSD_V4_SECURITY_LABEL=y # CONFIG_NFSD_FAULT_INJECTION is not set CONFIG_GRACE_PERIOD=m @@ -7935,6 +8036,7 @@ CONFIG_DEBUG_FS=y CONFIG_SECTION_MISMATCH_WARN_ONLY=y CONFIG_ARCH_WANT_FRAME_POINTERS=y CONFIG_FRAME_POINTER=y +# CONFIG_STACK_VALIDATION is not set # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set CONFIG_MAGIC_SYSRQ=y CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 @@ -7945,6 +8047,8 @@ CONFIG_DEBUG_KERNEL=y # # CONFIG_PAGE_EXTENSION is not set # CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_PAGE_POISONING is not set +# CONFIG_DEBUG_PAGE_REF is not set # CONFIG_DEBUG_OBJECTS is not set # CONFIG_SLUB_DEBUG_ON is not set # CONFIG_SLUB_STATS is not set @@ -7961,6 +8065,8 @@ CONFIG_HAVE_DEBUG_STACKOVERFLOW=y CONFIG_HAVE_ARCH_KMEMCHECK=y CONFIG_HAVE_ARCH_KASAN=y # CONFIG_KASAN is not set +CONFIG_ARCH_HAS_KCOV=y +# CONFIG_KCOV is not set # CONFIG_DEBUG_SHIRQ is not set # @@ -8021,6 +8127,7 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=60 # CONFIG_RCU_EQS_DEBUG is not set # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set CONFIG_NOTIFIER_ERROR_INJECTION=m CONFIG_CPU_NOTIFIER_ERROR_INJECT=m CONFIG_PM_NOTIFIER_ERROR_INJECT=m @@ -8095,6 +8202,7 @@ CONFIG_TEST_HEXDUMP=m CONFIG_TEST_STRING_HELPERS=m CONFIG_TEST_KSTRTOX=m CONFIG_TEST_PRINTF=m +CONFIG_TEST_BITMAP=m # CONFIG_TEST_RHASHTABLE is not set # CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set # CONFIG_DMA_API_DEBUG is not set @@ -8127,7 +8235,6 @@ CONFIG_EARLY_PRINTK_EFI=y # CONFIG_X86_PTDUMP_CORE is not set # CONFIG_X86_PTDUMP is not set # CONFIG_EFI_PGT_DUMP is not set -CONFIG_DEBUG_RODATA=y # CONFIG_DEBUG_RODATA_TEST is not set # CONFIG_DEBUG_WX is not set CONFIG_DEBUG_SET_MODULE_RONX=y @@ -8152,7 +8259,6 @@ CONFIG_DEFAULT_IO_DELAY_TYPE=1 CONFIG_OPTIMIZE_INLINING=y # CONFIG_DEBUG_ENTRY is not set # CONFIG_DEBUG_NMI_SELFTEST is not set -# CONFIG_X86_DEBUG_STATIC_CPU_HAS is not set CONFIG_X86_DEBUG_FPU=y CONFIG_PUNIT_ATOM_DEBUG=m @@ -8248,11 +8354,9 @@ CONFIG_CRYPTO_HASH2=y CONFIG_CRYPTO_RNG=y CONFIG_CRYPTO_RNG2=y CONFIG_CRYPTO_RNG_DEFAULT=m -CONFIG_CRYPTO_PCOMP=m -CONFIG_CRYPTO_PCOMP2=y CONFIG_CRYPTO_AKCIPHER2=y -CONFIG_CRYPTO_AKCIPHER=m -CONFIG_CRYPTO_RSA=m +CONFIG_CRYPTO_AKCIPHER=y +CONFIG_CRYPTO_RSA=y CONFIG_CRYPTO_MANAGER=y CONFIG_CRYPTO_MANAGER2=y CONFIG_CRYPTO_USER=m @@ -8372,7 +8476,6 @@ CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m # Compression # CONFIG_CRYPTO_DEFLATE=m -CONFIG_CRYPTO_ZLIB=m CONFIG_CRYPTO_LZO=y CONFIG_CRYPTO_842=m CONFIG_CRYPTO_LZ4=m @@ -8410,7 +8513,6 @@ CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m CONFIG_CRYPTO_DEV_QAT_C62XVF=m CONFIG_ASYMMETRIC_KEY_TYPE=y CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y -CONFIG_PUBLIC_KEY_ALGO_RSA=y CONFIG_X509_CERTIFICATE_PARSER=y CONFIG_PKCS7_MESSAGE_PARSER=y CONFIG_PKCS7_TEST_KEY=m @@ -8421,6 +8523,7 @@ CONFIG_SIGNED_PE_FILE_VERIFICATION=y # CONFIG_SYSTEM_TRUSTED_KEYRING=y CONFIG_SYSTEM_TRUSTED_KEYS="" +# CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set CONFIG_HAVE_KVM=y CONFIG_HAVE_KVM_IRQCHIP=y CONFIG_HAVE_KVM_IRQFD=y diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index 90f56025f6..2ca9fe7600 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -225,7 +225,7 @@ for SYSTEM and optionally VARIANT, or #f if there is no such configuration." (search-path %load-path file))) (define-public linux-libre - (let* ((version "4.5.5") + (let* ((version "4.6.1") (build-phase '(lambda* (#:key system inputs #:allow-other-keys #:rest args) ;; Avoid introducing timestamps @@ -303,7 +303,7 @@ for SYSTEM and optionally VARIANT, or #f if there is no such configuration." (uri (linux-libre-urls version)) (sha256 (base32 - "1zys74hfdi13yyk17x45hvvbx7m97wk7pala3cd8k93xbq8qnai0")))) + "16cwr2jhd688bxdjfjpymap7sq0qsl24k5dylbz1rwfblnv2wn51")))) (build-system gnu-build-system) (supported-systems '("x86_64-linux" "i686-linux")) (native-inputs `(("perl" ,perl) @@ -340,13 +340,13 @@ It has been modified to remove all non-free binary blobs.") (define-public linux-libre-4.4 (package (inherit linux-libre) - (version "4.4.11") + (version "4.4.12") (source (origin (method url-fetch) (uri (linux-libre-urls version)) (sha256 (base32 - "17pb9w72vigdrhm8hnkdyw9kwc2l06nabzygpdkwbvf7fg3j03vc")))) + "1zbds4ihk4x3lxr1jw7yrjzv1dkl995m41a54dfgqm0kj70li8ws")))) (native-inputs (let ((conf (kernel-config (or (%current-target-system) (%current-system)) @@ -357,13 +357,13 @@ It has been modified to remove all non-free binary blobs.") (define-public linux-libre-4.1 (package (inherit linux-libre) - (version "4.1.24") + (version "4.1.25") (source (origin (method url-fetch) (uri (linux-libre-urls version)) (sha256 (base32 - "14jlnq0k86bl4wj8shmvgf34w90bbm9in44j1pdjwwvn169zh9ra")))) + "1vpgcnmfnn005rcd60wyyg0f84fgapdmz2dpcy77p2l66mw4pakf")))) (native-inputs (let ((conf (kernel-config (or (%current-target-system) (%current-system)) @@ -883,7 +883,7 @@ MIDI functionality to the Linux-based operating system.") (define-public iptables (package (name "iptables") - (version "1.4.16.2") + (version "1.4.21") (source (origin (method url-fetch) (uri (string-append @@ -891,7 +891,7 @@ MIDI functionality to the Linux-based operating system.") version ".tar.bz2")) (sha256 (base32 - "0vkg5lzkn4l3i1sm6v3x96zzvnv9g7mi0qgj6279ld383mzcws24")))) + "1q6kg7sf0pgpq0qhab6sywl23cngxxfzc9zdzscsba8x09l4q02j")))) (build-system gnu-build-system) (arguments '(#:tests? #f ; no test suite @@ -1307,18 +1307,15 @@ processes currently causing I/O.") (define-public fuse (package (name "fuse") - (version "2.9.5") + (version "2.9.6") (source (origin (method url-fetch) - (uri (let ((version-with-underscores - (string-join (string-split version #\.) "_"))) - (string-append - "https://github.com/libfuse/libfuse/" - "releases/download/fuse_" version-with-underscores - "/fuse-" version ".tar.gz"))) + (uri (string-append "https://github.com/libfuse/libfuse/releases/" + "download/fuse-" version + "/fuse-" version ".tar.gz")) (sha256 (base32 - "1dfvbi1p57svbv2sfnbqwpnsk219spvjnlapf35azhgzqlf3g7sp")))) + "0szi2vlsjxg03y4ji51jks34p269jqj5ify6l0ajsqq6f6y8pd0c")))) (build-system gnu-build-system) (inputs `(("util-linux" ,util-linux))) (arguments @@ -1354,7 +1351,7 @@ processes currently causing I/O.") (("-DFUSERMOUNT_DIR=[[:graph:]]+") "-DFUSERMOUNT_DIR=\\\"/var/empty\\\""))) %standard-phases))) - (home-page "http://fuse.sourceforge.net/") + (home-page "https://github.com/libfuse/libfuse") (synopsis "Support file systems implemented in user space") (description "As a consequence of its monolithic design, file system code for Linux diff --git a/gnu/packages/lirc.scm b/gnu/packages/lirc.scm index b077825529..6b1eee3ef2 100644 --- a/gnu/packages/lirc.scm +++ b/gnu/packages/lirc.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2015 Alex Kost <alezost@gmail.com> +;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -23,6 +23,7 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (gnu packages) #:use-module (gnu packages pkg-config) + #:use-module (gnu packages libusb) #:use-module (gnu packages linux) #:use-module (gnu packages xml) #:use-module (gnu packages xorg) @@ -31,23 +32,46 @@ (define-public lirc (package (name "lirc") - (version "0.9.3") + (version "0.9.4") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/lirc/lirc-" version ".tar.bz2")) (sha256 (base32 - "19c6ldjsdnk1md66q3nb035ja1xj217k8iabhxpsb8rs10a6kwi6")) + "1l2xzhnm4hrla51ik09hcafki0y8wnww7svfm7j63zbl2rssc66x")) (patches (search-patches "lirc-localstatedir.patch")))) (build-system gnu-build-system) (arguments - '(#:configure-flags '("--localstatedir=/var"))) + '(#:configure-flags '("--localstatedir=/var") + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-lirc-make-devinput + (lambda* (#:key inputs #:allow-other-keys) + ;; 'lirc-make-devinput' script assumes that linux headers + ;; are placed in "/usr/...". + (let ((headers (assoc-ref inputs "linux-headers"))) + (substitute* "tools/lirc-make-devinput" + (("/usr/include") (string-append headers "/include")))) + #t)) + (add-after 'unpack 'patch-doc/Makefile.in + (lambda _ + ;; Lirc wants to install several images and a useless html page + ;; to "$(localstatedir)/lib/lirc/". This makes 'install' phase + ;; fail as localstatedir is "/var", so do not install these + ;; files there (the same images are installed in + ;; "share/doc/lirc/images/" anyway). + (substitute* "doc/Makefile.in" + (("^vardocs_DATA =.*") "vardocs_DATA =\n") + (("^varimage_DATA =.*") "varimage_DATA =\n")) + #t))))) (native-inputs `(("pkg-config" ,pkg-config) ("libxslt" ,libxslt))) (inputs `(("libx11" ,libx11) + ("libusb-compat" ,libusb-compat) + ("linux-headers" ,linux-libre-headers) ("alsa-lib" ,alsa-lib) ("python" ,python))) (home-page "http://www.lirc.org/") diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm index 85f3f3cebb..e349907f14 100644 --- a/gnu/packages/lisp.scm +++ b/gnu/packages/lisp.scm @@ -26,7 +26,7 @@ #:use-module (guix packages) #:use-module (gnu packages readline) #:use-module (gnu packages texinfo) - #:use-module (gnu packages texlive) + #:use-module (gnu packages tex) #:use-module (gnu packages m4) #:use-module (guix download) #:use-module (guix git-download) diff --git a/gnu/packages/lua.scm b/gnu/packages/lua.scm index 17874f86ab..b4b5dee8be 100644 --- a/gnu/packages/lua.scm +++ b/gnu/packages/lua.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2014 Raimon Grau <raimonster@gmail.com> ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr> +;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -30,13 +31,13 @@ (define-public lua (package (name "lua") - (version "5.2.3") + (version "5.2.4") (source (origin (method url-fetch) (uri (string-append "http://www.lua.org/ftp/lua-" version ".tar.gz")) (sha256 - (base32 "0b8034v1s82n4dg5rzcn12067ha3nxaylp2vdp8gg08kjsbzphhk")) + (base32 "0jwznq0l8qg9wh5grwg07b5cy3lzngvl5m2nl1ikp6vqssmf9qmr")) (patches (search-patches "lua-pkgconfig.patch" "lua52-liblua-so.patch")))) (build-system gnu-build-system) @@ -46,18 +47,18 @@ (guix build utils) (srfi srfi-1)) #:test-target "test" - #:phases (alist-replace - 'build - (lambda _ (zero? (system* "make" "CFLAGS=-fPIC" "linux"))) - (alist-replace - 'install - (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) - (zero? (system* "make" "install" - (string-append "INSTALL_TOP=" out) - (string-append "INSTALL_MAN=" out - "/share/man/man1"))))) - (alist-delete 'configure %standard-phases))))) + #:phases + (modify-phases %standard-phases + (delete 'configure) + (replace 'build + (lambda _ (zero? (system* "make" "CFLAGS=-fPIC" "linux")))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (zero? (system* "make" "install" + (string-append "INSTALL_TOP=" out) + (string-append "INSTALL_MAN=" out + "/share/man/man1"))))))))) (home-page "http://www.lua.org/") (synopsis "Embeddable scripting language") (description @@ -78,18 +79,19 @@ for configuration, scripting, and rapid prototyping.") version ".tar.gz")) (sha256 (base32 "0cskd4w0g6rdm2q8q3i4n1h3j8kylhs3rq8mxwl9vwlmlxbgqh16")) - (patches (search-patches "lua51-liblua-so.patch")))))) + (patches (search-patches "lua51-liblua-so.patch" + "lua-CVE-2014-5461.patch")))))) (define-public luajit (package (name "luajit") - (version "2.0.3") + (version "2.0.4") (source (origin (method url-fetch) (uri (string-append "http://luajit.org/download/LuaJIT-" version ".tar.gz")) (sha256 - (base32 "0ydxpqkmsn2c341j4r2v6r5r0ig3kbwv3i9jran3iv81s6r6rgjm")) + (base32 "0zc0y7p6nx1c0pp4nhgbdgjljpfxsb5kgwp4ysz22l1p2bms83v2")) (patches (search-patches "luajit-symlinks.patch" "luajit-no_ldconfig.patch")))) (build-system gnu-build-system) diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm index cbc7509416..2ccf0f2557 100644 --- a/gnu/packages/machine-learning.scm +++ b/gnu/packages/machine-learning.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,12 +22,15 @@ #:use-module (guix packages) #:use-module (guix utils) #:use-module (guix download) + #:use-module (guix svn-download) #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) #:use-module (guix build-system r) #:use-module (gnu packages) + #:use-module (gnu packages autotools) #:use-module (gnu packages boost) #:use-module (gnu packages compression) + #:use-module (gnu packages dejagnu) #:use-module (gnu packages gcc) #:use-module (gnu packages maths) #:use-module (gnu packages pkg-config) @@ -107,6 +111,95 @@ classification.") `(("python" ,python))) (synopsis "Python bindings of libSVM"))) +(define-public ghmm + ;; The latest release candidate is several years and a couple of fixes have + ;; been published since. This is why we download the sources from the SVN + ;; repository. + (let ((svn-revision 2341)) + (package + (name "ghmm") + (version (string-append "0.9-rc3-0." (number->string svn-revision))) + (source (origin + (method svn-fetch) + (uri (svn-reference + (url "http://svn.code.sf.net/p/ghmm/code/trunk") + (revision svn-revision))) + (file-name (string-append name "-" version)) + (sha256 + (base32 + "0qbq1rqp94l530f043qzp8aw5lj7dng9wq0miffd7spd1ff638wq")))) + (build-system gnu-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'enter-dir + (lambda _ (chdir "ghmm") #t)) + (add-after 'enter-dir 'fix-PYTHONPATH + (lambda* (#:key outputs #:allow-other-keys) + ;; The Python tests fail as the library is assumed to be stored + ;; in ./build/lib.linux-i686-*. To fix this we detect the CPU + ;; and use it in the path. + (substitute* "configure.in" + (("AM_INIT_AUTOMAKE" line) + (string-append line "\nAC_CANONICAL_HOST\n"))) + (substitute* "ghmmwrapper/Makefile.am" + (("i686") "@host_cpu@")) + #t)) + (add-after 'enter-dir 'fix-runpath + (lambda* (#:key outputs #:allow-other-keys) + (substitute* "ghmmwrapper/setup.py" + (("^(.*)extra_compile_args = \\[" line indent) + (string-append indent + "extra_link_args = [\"-Wl,-rpath=" + (assoc-ref outputs "out") "/lib\"],\n" + line + "\"-Wl,-rpath=" + (assoc-ref outputs "out") + "/lib\", "))) + #t)) + (add-after 'enter-dir 'disable-broken-tests + (lambda _ + (substitute* "tests/Makefile.am" + ;; GHMM_SILENT_TESTS is assumed to be a command. + (("TESTS_ENVIRONMENT.*") "") + ;; Do not build broken tests. + (("chmm .*") "") + (("read_fa .*") "") + (("mcmc .*") "") + (("label_higher_order_test.*$") + "label_higher_order_test\n")) + + ;; These Python unittests are broken as there is no gato. + ;; See https://sourceforge.net/p/ghmm/support-requests/3/ + (substitute* "ghmmwrapper/ghmmunittests.py" + (("^(.*)def (testNewXML|testMultipleTransitionClasses|testNewXML)" + line indent) + (string-append indent + "@unittest.skip(\"Disabled by Guix\")\n" + line))) + #t)) + (add-before 'configure 'autogen + (lambda _ + (zero? (system* "bash" "./autogen.sh"))))))) + (inputs + `(("python" ,python-2) ; only Python 2 is supported + ("libxml2" ,libxml2))) + (native-inputs + `(("pkg-config" ,pkg-config) + ("dejagnu" ,dejagnu) + ("swig" ,swig) + ("autoconf" ,autoconf) + ("automake" ,automake) + ("libtool" ,libtool))) + (home-page "http://ghmm.org") + (synopsis "Hidden Markov Model library") + (description + "The General Hidden Markov Model library (GHMM) is a C library with +additional Python bindings implementing a wide range of types of @dfn{Hidden +Markov Models} (HMM) and algorithms: discrete, continous emissions, basic +training, HMM clustering, HMM mixtures.") + (license license:lgpl2.0+)))) + (define-public randomjungle (package (name "randomjungle") @@ -138,7 +231,8 @@ classification.") ("libxml2" ,libxml2) ("zlib" ,zlib))) (native-inputs - `(("gfortran" ,gfortran))) + `(("gfortran" ,gfortran) + ("gfortran:lib" ,gfortran "lib"))) (home-page "http://www.imbs-luebeck.de/imbs/de/node/227/") (synopsis "Implementation of the Random Forests machine learning method") (description diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index e86afb2f2d..b4563277aa 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -344,12 +344,12 @@ repository and Maildir/IMAP as LOCAL repository.") ("glib" ,glib "bin") ; for gtester ("autoconf" ,autoconf) ("automake" ,automake) + ("emacs" ,emacs-minimal) ("libtool" ,libtool) ("texinfo" ,texinfo))) ;; TODO: Add webkit and gtk to build the mug GUI. (inputs `(("xapian" ,xapian) - ("emacs" ,emacs-no-x) ("guile" ,guile-2.0) ("glib" ,glib) ("gmime" ,gmime) @@ -1149,7 +1149,8 @@ deliver it in various ways.") ;; The following patch fixes an ambiguous definition of ;; getline() in formail.c. The patch is provided by Debian as ;; patch 24. - (patches (search-patches "procmail-ambiguous-getline-debian.patch")))) + (patches (search-patches "procmail-ambiguous-getline-debian.patch" + "procmail-CVE-2014-3618.patch")))) (arguments `(#:phases (modify-phases %standard-phases (replace 'configure diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm index 19ed44f2c9..3b860a957f 100644 --- a/gnu/packages/maths.scm +++ b/gnu/packages/maths.scm @@ -81,7 +81,7 @@ #:use-module (gnu packages tcsh) #:use-module (gnu packages tcl) #:use-module (gnu packages texinfo) - #:use-module (gnu packages texlive) + #:use-module (gnu packages tex) #:use-module (gnu packages tls) #:use-module (gnu packages wxwidgets) #:use-module (gnu packages xml) @@ -582,6 +582,102 @@ common interface for a number of different free optimization routines available online as well as original implementations of various other algorithms.") (license license:lgpl2.1+))) +(define-public ipopt + (package + (name "ipopt") + (version "3.12.5") + (source (origin + (method url-fetch) + (uri (string-append + "http://www.coin-or.org/download/source/Ipopt/Ipopt-" + version".tgz")) + (sha256 + (base32 + "09bk2hqy2vgi4yi76xng9zxakddwqy3wij9nx7wf2vfbxxpazrsk")) + (modules '((guix build utils))) + (snippet + ;; Make sure we don't use the bundled software. + '(delete-file-recursively "ThirdParty")))) + (build-system gnu-build-system) + (arguments + '(#:phases (modify-phases %standard-phases + (add-after 'install 'add--L-flags-in-ipopt.pc + (lambda* (#:key inputs outputs #:allow-other-keys) + ;; The '.pc' file lists '-llapack -lblas' in "Libs"; + ;; move it to "Libs.private" where it belongs, and add a + ;; '-L' flag for LAPACK. + (let ((out (assoc-ref outputs "out")) + (lapack (assoc-ref inputs "lapack"))) + (substitute* (string-append out "/lib/pkgconfig/" + "ipopt.pc") + (("Libs: (.*)-llapack -lblas(.*)$" _ before after) + (string-append "Libs: " before " " after "\n" + "Libs.private: " before + "-L" lapack "/lib -llapack -lblas " + after "\n"))) + #t)))))) + (native-inputs + `(("gfortran" ,gfortran))) + (inputs + ;; TODO: Maybe add dependency on COIN-MUMPS, ASL, and HSL. + `(("lapack" ,lapack))) ;for both libblas and liblapack + (home-page "http://www.coin-or.org") + (synopsis "Large-scale nonlinear optimizer") + (description + "The Interior Point Optimizer (IPOPT) is a software package for +large-scale nonlinear optimization. It provides C++, C, and Fortran +interfaces.") + (license license:epl1.0))) + +(define-public ceres + (package + (name "ceres-solver") + (version "1.11.0") + (home-page "http://ceres-solver.org/") + (source (origin + (method url-fetch) + (uri (string-append home-page "ceres-solver-" + version ".tar.gz")) + (sha256 + (base32 + "0i7qkbf8g6pd8arxzldppga26ckv93y8zldsfz6wbd4n6b1nqrjd")))) + (build-system cmake-build-system) + (arguments + ;; TODO: Build HTML user documentation and install separately. + ;; XXX: Use the embedded "miniglog" as a replacement for + ;; <https://github.com/google/glog>. TODO: Use Glog when it's available. + '(#:configure-flags '("-DMINIGLOG=ON" + "-DBUILD_EXAMPLES=OFF" + "-DBUILD_SHARED_LIBS=ON") + + #:phases (modify-phases %standard-phases + (add-before 'configure 'set-library-directory + (lambda _ + ;; Install libraries to lib/, not lib64/. + (substitute* "internal/ceres/CMakeLists.txt" + (("set\\(LIB_SUFFIX \"64\"\\)") + "set(LIB_SUFFIX \"\")")) + #t))))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("eigen" ,eigen) + ("blas" ,openblas) + ("lapack" ,lapack) + ("suitesparse" ,suitesparse) + ("gflags" ,gflags))) + (synopsis "C++ library for solving large optimization problems") + (description + "Ceres Solver is a C++ library for modeling and solving large, +complicated optimization problems. It is a feature rich, mature and +performant library which has been used in production since 2010. Ceres Solver +can solve two kinds of problems: +@enumerate +@item non-linear least squares problems with bounds constraints; +@item general unconstrained optimization problems. +@end enumerate\n") + (license license:bsd-3))) + ;; For a fully featured Octave, users are strongly recommended also to install ;; the following packages: texinfo, less, ghostscript, gnuplot. (define-public octave @@ -1610,7 +1706,11 @@ point numbers.") (build-system gnu-build-system) (inputs `(("wxwidgets" ,wxwidgets) - ("maxima" ,maxima))) + ("maxima" ,maxima) + ;; Runtime support. + ("adwaita-icon-theme" ,adwaita-icon-theme) + ("gtk+" ,gtk+) + ("shared-mime-info" ,shared-mime-info))) (arguments `(#:phases (modify-phases %standard-phases (add-after @@ -1620,7 +1720,18 @@ point numbers.") "/bin/wxmaxima") `("PATH" ":" prefix (,(string-append (assoc-ref inputs "maxima") - "/bin")))) + "/bin"))) + ;; For GtkFileChooserDialog. + `("GSETTINGS_SCHEMA_DIR" = + (,(string-append (assoc-ref inputs "gtk+") + "/share/glib-2.0/schemas"))) + `("XDG_DATA_DIRS" ":" prefix + (;; Needed by gdk-pixbuf to know supported icon formats. + ,(string-append + (assoc-ref inputs "shared-mime-info") "/share") + ;; The default icon theme of GTK+. + ,(string-append + (assoc-ref inputs "adwaita-icon-theme") "/share")))) #t))))) (home-page "https://andrejv.github.io/wxmaxima/") (synopsis "Graphical user interface for the Maxima computer algebra system") diff --git a/gnu/packages/mcrypt.scm b/gnu/packages/mcrypt.scm index a683ad7ac9..7ac0b92d81 100644 --- a/gnu/packages/mcrypt.scm +++ b/gnu/packages/mcrypt.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org> +;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -36,7 +37,11 @@ version ".tar.gz")) (sha256 (base32 - "161031n1w9pb4yzz9i47szc12a4mwpcpvyxnvafsik2l9s2aliai")))) + "161031n1w9pb4yzz9i47szc12a4mwpcpvyxnvafsik2l9s2aliai")) + (patches (search-patches + "mcrypt-CVE-2012-4409.patch" + "mcrypt-CVE-2012-4426.patch" + "mcrypt-CVE-2012-4527.patch")))) (build-system gnu-build-system) (inputs `(("zlib" ,zlib) diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm index 3ac3888da4..215fa19bb8 100644 --- a/gnu/packages/messaging.scm +++ b/gnu/packages/messaging.scm @@ -378,14 +378,14 @@ compromised.") (define-public znc (package (name "znc") - (version "1.6.2") + (version "1.6.3") (source (origin (method url-fetch) (uri (string-append "http://znc.in/releases/archive/znc-" version ".tar.gz")) (sha256 (base32 - "14q5dyr5zg99hm6j6g1gilcn1zf7dskhxfpz3bnkyhy6q0kpgwgf")))) + "09xqi5fs40x6nj9gq99bnw1a7saq96bvqxknxx0ilq7yfvg4c733")))) (build-system gnu-build-system) (arguments '(#:tests? #f ; tries to download GoogleTest with wget diff --git a/gnu/packages/moreutils.scm b/gnu/packages/moreutils.scm index eebb20790d..79e2a42762 100644 --- a/gnu/packages/moreutils.scm +++ b/gnu/packages/moreutils.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com> +;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -28,7 +29,7 @@ (define-public moreutils (package (name "moreutils") - (version "0.57") + (version "0.58") (source (origin (method url-fetch) (uri (string-append @@ -36,7 +37,7 @@ version ".orig.tar.gz")) (sha256 (base32 - "078dpkwwwrv8hxnylbc901kib2d1rr3hsja37j6dlpjfcfq58z9s")))) + "02n00vqp6jxbxr5v3rdjxmzp6kxxjdkjgcclam6wrw8qamsbljww")))) (build-system gnu-build-system) (inputs `(("perl" ,perl) ("libxml2" ,libxml2) @@ -45,18 +46,17 @@ ("docbook-xsl" ,docbook-xsl))) (arguments `(#:phases - (alist-replace - 'configure - (lambda* (#:key inputs #:allow-other-keys) - (use-modules (srfi srfi-1)) - (substitute* "Makefile" - (("/usr/share/xml/.*/docbook.xsl") - (let* ((docbook-xsl (assoc-ref inputs "docbook-xsl")) - (files (find-files docbook-xsl "^docbook\\.xsl$"))) - (find (lambda (file) - (string-suffix? "/manpages/docbook.xsl" file)) - files))))) - %standard-phases) + (modify-phases %standard-phases + (replace 'configure + (lambda* (#:key inputs #:allow-other-keys) + (use-modules (srfi srfi-1)) + (substitute* "Makefile" + (("/usr/share/xml/.*/docbook.xsl") + (let* ((docbook-xsl (assoc-ref inputs "docbook-xsl")) + (files (find-files docbook-xsl "^docbook\\.xsl$"))) + (find (lambda (file) + (string-suffix? "/manpages/docbook.xsl" file)) + files))))))) #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")) "CC=gcc"))) diff --git a/gnu/packages/mp3.scm b/gnu/packages/mp3.scm index fe1d13b382..8451f0ac9f 100644 --- a/gnu/packages/mp3.scm +++ b/gnu/packages/mp3.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org> +;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -107,11 +108,11 @@ versions of ID3v2.") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/id3lib/id3lib/" - version "/id3lib-" - version ".tar.gz")) + version "/id3lib-" version ".tar.gz")) (sha256 (base32 - "0yfhqwk0w8q2hyv1jib1008jvzmwlpsxvc8qjllhna6p1hycqj97")))) + "0yfhqwk0w8q2hyv1jib1008jvzmwlpsxvc8qjllhna6p1hycqj97")) + (patches (search-patches "id3lib-CVE-2007-4460.patch")))) (build-system gnu-build-system) (arguments `(#:phases @@ -417,36 +418,36 @@ format.") (version "0.2.4") (source (origin (method url-fetch) - (uri (string-append "mirror://sourceforge/mpc123/version%20" - version "/mpc123-" version ".tar.gz")) + (uri (list (string-append "mirror://sourceforge/mpc123/version%20" + version "/mpc123-" version ".tar.gz") + (string-append "mirror://debian/pool/main/m/" name + "/" name "_" version ".orig.tar.gz"))) (sha256 (base32 "0sf4pns0245009z6mbxpx7kqy4kwl69bc95wz9v23wgappsvxgy1")) (patches (search-patches "mpc123-initialize-ao.patch")))) (build-system gnu-build-system) (arguments - '(#:phases (alist-replace - 'configure - (lambda _ - (substitute* "Makefile" - (("CC[[:blank:]]*:=.*") - "CC := gcc\n"))) - (alist-replace - 'install - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (bin (string-append out "/bin"))) - (mkdir-p bin) - (install-file "mpc123" bin))) - %standard-phases)) + '(#:phases + (modify-phases %standard-phases + (replace 'configure + (lambda _ + (substitute* "Makefile" + (("CC[[:blank:]]*:=.*") + "CC := gcc\n")))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin"))) + (mkdir-p bin) + (install-file "mpc123" bin))))) #:tests? #f)) - (native-inputs `(("gettext" ,gnu-gettext))) (inputs `(("libao" ,ao) ("libmpcdec" ,libmpcdec))) - (home-page "http://mpc123.sourceforge.net/") + (home-page "https://github.com/bucciarati/mpc123") (synopsis "Audio player for Musepack-formatted files") (description "Mpc123 is a command-line player for files in the Musepack audio @@ -456,7 +457,7 @@ compression format (.mpc files).") (define-public eyed3 (package (name "eyed3") - (version "0.7.8") + (version "0.7.9") (source (origin (method url-fetch) (uri (string-append @@ -464,7 +465,7 @@ compression format (.mpc files).") version ".tar.gz")) (sha256 (base32 - "1nv7nhfn1d0qm7rgkzksbccgqisng8klf97np0nwaqwd5dbmdf86")))) + "08mzhqg3k63d244cgwd0y1xrb8x9m6b99ykyskpnwyxl4wxrgrzp")))) (build-system python-build-system) (arguments `(#:python ,python-2)) diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm index f2787ee2d1..d491aa605e 100644 --- a/gnu/packages/music.scm +++ b/gnu/packages/music.scm @@ -85,7 +85,7 @@ #:use-module (gnu packages sdl) #:use-module (gnu packages tcl) #:use-module (gnu packages texinfo) - #:use-module (gnu packages texlive) + #:use-module (gnu packages tex) #:use-module (gnu packages tls) #:use-module (gnu packages video) #:use-module (gnu packages web) @@ -437,10 +437,10 @@ Guile.") (define-public non-sequencer ;; The latest tagged release is three years old and uses a custom build ;; system, so we take the last commit affecting the "sequencer" directory. - (let ((commit "1d9bd576")) + (let ((commit "1d9bd576f6bf7ea240af5f7a60260592750af0dd")) (package (name "non-sequencer") - (version (string-append "1.9.5-" commit)) + (version (string-append "1.9.5-" (string-take commit 7))) (source (origin (method git-fetch) (uri (git-reference diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm index ffad1db2f2..ba8023aeaa 100644 --- a/gnu/packages/networking.scm +++ b/gnu/packages/networking.scm @@ -6,6 +6,7 @@ ;;; Copyright © 2016 Raimon Grau <raimonster@gmail.com> ;;; Copyright © 2016 Tobias Geerinckx-Rice <tobias.geerinckx.rice@gmail.com> ;;; Copyright 2016 John Darrington <jmd@gnu.org> +;;; Copyright © 2016 Nicolas Goaziou <mail@nicolasgoaziou.fr> ;;; ;;; This file is part of GNU Guix. ;;; @@ -26,12 +27,25 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix download) + #:use-module (guix build-system glib-or-gtk) #:use-module (guix build-system gnu) - #:use-module (gnu packages tls) - #:use-module (gnu packages ncurses) + #:use-module (gnu packages admin) + #:use-module (gnu packages adns) + #:use-module (gnu packages audio) + #:use-module (gnu packages bison) #:use-module (gnu packages check) + #:use-module (gnu packages compression) + #:use-module (gnu packages flex) + #:use-module (gnu packages gnupg) + #:use-module (gnu packages gtk) + #:use-module (gnu packages linux) + #:use-module (gnu packages lua) + #:use-module (gnu packages mit-krb5) + #:use-module (gnu packages ncurses) + #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) - #:use-module (gnu packages compression)) + #:use-module (gnu packages python) + #:use-module (gnu packages tls)) (define-public macchanger (package @@ -115,14 +129,14 @@ or server shell scripts with network connections.") (define-public zeromq (package (name "zeromq") - (version "4.0.5") + (version "4.0.7") (source (origin (method url-fetch) (uri (string-append "http://download.zeromq.org/zeromq-" version ".tar.gz")) (sha256 (base32 - "0arl8fy8d03xd5h0mgda1s5bajwg8iyh1kk4hd1420rpcxgkrj9v")))) + "00vvwhgcdr1lva2pavicvy92iad0hj8cf71n702hv6blw1kjj2z0")))) (build-system gnu-build-system) (home-page "http://zeromq.org") (synopsis "Library for message-based applications") @@ -273,3 +287,54 @@ DNS queries are allowed. The bandwidth is asymmetrical, with limited upstream and up to 1 Mbit/s downstream.") ;; src/md5.[ch] is released under the zlib license (license (list license:isc license:zlib)))) + +(define-public wireshark + (package + (name "wireshark") + (version "2.0.3") + (synopsis "Network traffic analyzer") + (source + (origin + (method url-fetch) + (uri (string-append "https://www.wireshark.org/download/src/wireshark-" + version ".tar.bz2")) + (sha256 + (base32 + "1z358k65frp9m0l07cppwxhvbcp1w9ya5sml87pzs8gyfmp3g5p1")))) + (build-system glib-or-gtk-build-system) + (inputs `(("bison" ,bison) + ("c-ares" ,c-ares) + ("flex" ,flex) + ("gnutls" ,gnutls) + ("gtk+" ,gtk+) + ("libcap" ,libcap) + ("libgcrypt" ,libgcrypt) + ("libnl" ,libnl) + ("libpcap" ,libpcap) + ("lua" ,lua) + ("krb5" ,mit-krb5) + ("openssl" ,openssl) + ("portaudio" ,portaudio) + ("sbc" ,sbc) + ("zlib" ,zlib))) + (native-inputs `(("perl" ,perl) + ("pkg-config" ,pkg-config) + ("python" ,python-wrapper))) + (arguments + `(#:configure-flags + (list (string-append "--with-c-ares=" (assoc-ref %build-inputs "c-ares")) + (string-append "--with-krb5=" (assoc-ref %build-inputs "krb5")) + (string-append "--with-libcap=" (assoc-ref %build-inputs "libcap")) + (string-append "--with-lua=" (assoc-ref %build-inputs "lua")) + (string-append "--with-pcap=" (assoc-ref %build-inputs "libpcap")) + (string-append "--with-portaudio=" + (assoc-ref %build-inputs "portaudio")) + (string-append "--with-sbc=" (assoc-ref %build-inputs "sbc")) + (string-append "--with-ssl=" (assoc-ref %build-inputs "openssl")) + (string-append "--with-zlib=" (assoc-ref %build-inputs "zlib")) + "--without-qt"))) + (description "Wireshark is a network protocol analyzer, or @dfn{packet +sniffer}, that lets you capture and interactively browse the contents of +network frames.") + (license license:gpl2+) + (home-page "https://www.wireshark.org/"))) diff --git a/gnu/packages/ntp.scm b/gnu/packages/ntp.scm index 4ae25450e8..bb8bffc40d 100644 --- a/gnu/packages/ntp.scm +++ b/gnu/packages/ntp.scm @@ -39,16 +39,20 @@ (define-public ntp (package (name "ntp") - (version "4.2.8p7") + (version "4.2.8p8") (source (origin (method url-fetch) - (uri (string-append - "http://archive.ntp.org/ntp4/ntp-" - (version-major+minor version) - "/ntp-" version ".tar.gz")) + (uri (list (string-append + "http://archive.ntp.org/ntp4/ntp-" + (version-major+minor version) + "/ntp-" version ".tar.gz") + (string-append + "https://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-" + (version-major+minor version) + "/ntp-" version ".tar.gz"))) (sha256 (base32 - "1p100856h17nb0kpnppy70nja57hbcc95h7shhxvw6mhl030rll1")) + "1vlpgd0dk2wkpmmf869sfxi8f46sfnmjgk51vl8n6vj5y2sx1cra")) (modules '((guix build utils))) (snippet '(begin diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm index 434fb132bb..a0a4b936db 100644 --- a/gnu/packages/ocaml.scm +++ b/gnu/packages/ocaml.scm @@ -38,7 +38,7 @@ #:use-module (gnu packages pkg-config) #:use-module (gnu packages compression) #:use-module (gnu packages xorg) - #:use-module (gnu packages texlive) + #:use-module (gnu packages tex) #:use-module (gnu packages ghostscript) #:use-module (gnu packages lynx) #:use-module (gnu packages perl) @@ -386,7 +386,7 @@ It is developed using Objective Caml and Camlp5.") (build-system gnu-build-system) (native-inputs `(("which" ,which) - ("emacs" ,emacs-no-x) + ("emacs" ,emacs-minimal) ("texinfo" ,texinfo))) (inputs `(("host-emacs" ,emacs) diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm index 314dc90888..46743fefb5 100644 --- a/gnu/packages/package-management.scm +++ b/gnu/packages/package-management.scm @@ -152,7 +152,7 @@ #t)))))) (native-inputs `(("pkg-config" ,pkg-config) - ("emacs" ,emacs-no-x))) ;for guix.el + ("emacs" ,emacs-minimal))) ;for guix.el (inputs (let ((boot-guile (lambda (arch hash) (origin @@ -327,14 +327,15 @@ symlinks to the files in a common directory such as /usr/local.") (define-public rpm (package (name "rpm") - (version "4.12.0") + (version "4.12.0.1") (source (origin (method url-fetch) (uri (string-append "http://rpm.org/releases/rpm-4.12.x/rpm-" version ".tar.bz2")) (sha256 (base32 - "18hk47hc755nslvb7xkq4jb095z7va0nlcyxdpxayc4lmb8mq3bp")))) + "0a82ym8phx7g0f3k6smvxnvzh7yv857l42xafk49689kzhld5pbp")) + (patches (search-patches "rpm-CVE-2014-8118.patch")))) (build-system gnu-build-system) (arguments '(#:configure-flags '("--with-external-db" ;use the system's bdb diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm index 828bd26cf8..b0984a823e 100644 --- a/gnu/packages/parallel.scm +++ b/gnu/packages/parallel.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016 Pjotr Prins <pjotr.guix@thebird.nl> ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr> +;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -28,6 +29,7 @@ #:use-module (gnu packages) #:use-module (gnu packages admin) #:use-module (gnu packages autotools) + #:use-module (gnu packages base) #:use-module (gnu packages freeipmi) #:use-module (gnu packages linux) #:use-module (gnu packages mpi) @@ -121,3 +123,30 @@ framework for starting, executing, and monitoring work (typically a parallel job) on a set of allocated nodes, and arbitrates contention for resources by managing a queue of pending work.") (license license:gpl2+))) + +(define-public slurm-drmaa + (package + (name "slurm-drmaa") + (version "1.0.7") + (source (origin + (method url-fetch) + (uri "http://apps.man.poznan.pl/trac/slurm-drmaa/downloads/9") + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0grw55hmny2mc4nc0y1arnvxd2k0dcdfn476kzs180fibjxgfw14")))) + (build-system gnu-build-system) + (inputs + `(("slurm" ,slurm))) + (native-inputs + `(("which" ,which))) + (home-page "http://apps.man.poznan.pl/trac/slurm-drmaa") + (synopsis "Distributed resource management application API for SLURM") + (description + "PSNC DRMAA for Simple Linux Utility for Resource Management (SLURM) is +an implementation of Open Grid Forum DRMAA 1.0 (Distributed Resource +Management Application API) specification for submission and control of jobs +to SLURM. Using DRMAA, grid applications builders, portal developers and ISVs +can use the same high-level API to link their software with different +cluster/resource management systems.") + (license license:gpl3+))) diff --git a/gnu/packages/patches/a2ps-CVE-2001-1593.patch b/gnu/packages/patches/a2ps-CVE-2001-1593.patch new file mode 100644 index 0000000000..17b7e7d932 --- /dev/null +++ b/gnu/packages/patches/a2ps-CVE-2001-1593.patch @@ -0,0 +1,69 @@ +Index: b/lib/routines.c +=================================================================== +--- a/lib/routines.c ++++ b/lib/routines.c +@@ -242,3 +242,50 @@ + /* Don't complain if you can't unlink. Who cares of a tmp file? */ + unlink (filename); + } ++ ++/* ++ * Securely generate a temp file, and make sure it gets ++ * deleted upon exit. ++ */ ++static char ** tempfiles; ++static unsigned ntempfiles; ++ ++static void ++cleanup_tempfiles() ++{ ++ while (ntempfiles--) ++ unlink(tempfiles[ntempfiles]); ++} ++ ++char * ++safe_tempnam(const char *pfx) ++{ ++ char *dirname, *filename; ++ int fd; ++ ++ if (!(dirname = getenv("TMPDIR"))) ++ dirname = "/tmp"; ++ ++ tempfiles = (char **) realloc(tempfiles, ++ (ntempfiles+1) * sizeof(char *)); ++ if (tempfiles == NULL) ++ return NULL; ++ ++ filename = malloc(strlen(dirname) + strlen(pfx) + sizeof("/XXXXXX")); ++ if (!filename) ++ return NULL; ++ ++ sprintf(filename, "%s/%sXXXXXX", dirname, pfx); ++ ++ if ((fd = mkstemp(filename)) < 0) { ++ free(filename); ++ return NULL; ++ } ++ close(fd); ++ ++ if (ntempfiles == 0) ++ atexit(cleanup_tempfiles); ++ tempfiles[ntempfiles++] = filename; ++ ++ return filename; ++} +Index: b/lib/routines.h +=================================================================== +--- a/lib/routines.h ++++ b/lib/routines.h +@@ -255,7 +255,8 @@ + /* If _STR_ is not defined, give it a tempname in _TMPDIR_ */ + #define tempname_ensure(Str) \ + do { \ +- (Str) = (Str) ? (Str) : tempnam (NULL, "a2_"); \ ++ (Str) = (Str) ? (Str) : safe_tempnam("a2_"); \ + } while (0) ++char * safe_tempnam(const char *); + + #endif diff --git a/gnu/packages/patches/a2ps-CVE-2014-0466.patch b/gnu/packages/patches/a2ps-CVE-2014-0466.patch new file mode 100644 index 0000000000..85199e35b0 --- /dev/null +++ b/gnu/packages/patches/a2ps-CVE-2014-0466.patch @@ -0,0 +1,30 @@ +Description: CVE-2014-0466: fixps does not invoke gs with -dSAFER + A malicious PostScript file could delete files with the privileges of + the invoking user. +Origin: vendor +Bug-Debian: http://bugs.debian.org/742902 +Author: Salvatore Bonaccorso <carnil@debian.org> +Last-Update: 2014-03-28 + +--- a/contrib/fixps.in ++++ b/contrib/fixps.in +@@ -389,7 +389,7 @@ + eval "$command" ;; + gs) + $verbose "$program: making a full rewrite of the file ($gs)." >&2 +- $gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=- -c save pop -f $file ;; ++ $gs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=- -c save pop -f $file ;; + esac + ) + fi +--- a/contrib/fixps.m4 ++++ b/contrib/fixps.m4 +@@ -307,7 +307,7 @@ + eval "$command" ;; + gs) + $verbose "$program: making a full rewrite of the file ($gs)." >&2 +- $gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=- -c save pop -f $file ;; ++ $gs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=- -c save pop -f $file ;; + esac + ) + fi diff --git a/gnu/packages/patches/antiword-CVE-2014-8123.patch b/gnu/packages/patches/antiword-CVE-2014-8123.patch new file mode 100644 index 0000000000..d8d346a634 --- /dev/null +++ b/gnu/packages/patches/antiword-CVE-2014-8123.patch @@ -0,0 +1,21 @@ +Description: Add check for buffer overflow with malformed input files + This was later re-found and became CVE-2014-8123. +Author: <eriks@debian.org> +Bug-Debian: http://bugs.debian.org/407015 +Bug-Debian: https://bugs.debian.org/771768 +Forwarded: http://seclists.org/oss-sec/2014/q4/870 +Last-Update: 2016-01-11 + +--- antiword-0.37~/wordole.c 2005-08-26 21:49:57.000000000 +0200 ++++ antiword-0.37/wordole.c 2009-06-03 22:31:15.948014682 +0200 +@@ -259,6 +259,10 @@ + } + tNameSize = (size_t)usGetWord(0x40, aucBytes); + tNameSize = (tNameSize + 1) / 2; ++ if ( tNameSize > sizeof(atPPSlist[iIndex].szName)) { ++ werr(0, "Name Size of PPS %d is too large", iIndex); ++ tNameSize = sizeof(atPPSlist[iIndex].szName); ++ } + vName2String(atPPSlist[iIndex].szName, aucBytes, tNameSize); + atPPSlist[iIndex].ucType = ucGetByte(0x42, aucBytes); + if (atPPSlist[iIndex].ucType == 5) { diff --git a/gnu/packages/patches/devil-CVE-2009-3994.patch b/gnu/packages/patches/devil-CVE-2009-3994.patch new file mode 100644 index 0000000000..e009a95c44 --- /dev/null +++ b/gnu/packages/patches/devil-CVE-2009-3994.patch @@ -0,0 +1,24 @@ +Fix CVE-2009-3994 (buffer overflow in GetUID() allows remote DOS or +arbitrary code execution via crafted DICOM file). + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3994 + +Copied from Fedora +https://pkgs.fedoraproject.org/cgit/rpms/DevIL.git/tree/DevIL-1.7.8-CVE-2009-3994.patch?id=9c656a75393d6c455aef9f4968fbbee9c53f4fdb + +diff -up devil-1.7.8/src-IL/src/il_dicom.c~ devil-1.7.8/src-IL/src/il_dicom.c +--- devil-1.7.8/src-IL/src/il_dicom.c~ 2009-03-08 08:10:09.000000000 +0100 ++++ devil-1.7.8/src-IL/src/il_dicom.c 2009-12-03 12:07:45.000000000 +0100 +@@ -427,9 +427,11 @@ ILboolean GetUID(ILubyte *UID) + return IL_FALSE; + + ValLen = GetLittleUShort(); ++ if (ValLen > 64) ++ return IL_FALSE; + if (iread(UID, ValLen, 1) != 1) + return IL_FALSE; +- UID[64] = 0; // Just to make sure that our string is terminated. ++ UID[ValLen] = 0; // Just to make sure that our string is terminated. + + return IL_TRUE; + } diff --git a/gnu/packages/patches/emacs-fix-scheme-indent-function.patch b/gnu/packages/patches/emacs-fix-scheme-indent-function.patch new file mode 100644 index 0000000000..c5a426802c --- /dev/null +++ b/gnu/packages/patches/emacs-fix-scheme-indent-function.patch @@ -0,0 +1,29 @@ +Fix 'scheme-indent-function' to indent s-expressions starting with a keyword +properly, like this: + +(#:foo 1 + #:bar 2) + +instead of like this: + +(#:foo 1 + #:bar 2) + +The fix is made by Mark H Weaver <mhw@netris.org>: +<http://www.netris.org/~mhw/scheme-indent-function.el> + +--- a/lisp/progmodes/scheme.el ++++ b/lisp/progmodes/scheme.el +@@ -482,6 +482,12 @@ + (> (length function) 3) + (string-match "\\`def" function))) + (lisp-indent-defform state indent-point)) ++ ((and (null method) ++ (> (length function) 1) ++ ;; The '#' in '#:' seems to get lost, not sure why ++ (string-match "\\`:" function)) ++ (let ((lisp-body-indent 1)) ++ (lisp-indent-defform state indent-point))) + ((integerp method) + (lisp-indent-specform method state + indent-point normal-indent)) diff --git a/gnu/packages/patches/gd-CVE-2016-3074.patch b/gnu/packages/patches/gd-CVE-2016-3074.patch deleted file mode 100644 index a90c51d77b..0000000000 --- a/gnu/packages/patches/gd-CVE-2016-3074.patch +++ /dev/null @@ -1,36 +0,0 @@ -Adapted from upstream commit 2bb97f407c1145c850416a3bfbcc8cf124e68a19 -(gd2: handle corrupt images better (CVE-2016-3074)). - -This patch omits the upstream changes to '.gitignore', and the test -added in files 'tests/Makefile.am', 'tests/gd2/gd2_read_corrupt.c', and -'tests/gd2/invalid_neg_size.gd2'. - -We omit the test because its input data, -'tests/gd2/invalid_neg_size.gd2', is provided as a binary Git diff, -which is not supported by `patch`. - -https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-3074 -https://github.com/libgd/libgd/commit/2bb97f407c1145c850416a3bfbcc8cf124e68a19 ---- - .gitignore | 1 + - src/gd_gd2.c | 2 ++ - tests/Makefile.am | 3 ++- - tests/gd2/gd2_read_corrupt.c | 25 +++++++++++++++++++++++++ - tests/gd2/invalid_neg_size.gd2 | Bin 0 -> 1676 bytes - 5 files changed, 30 insertions(+), 1 deletion(-) - create mode 100644 tests/gd2/gd2_read_corrupt.c - create mode 100644 tests/gd2/invalid_neg_size.gd2 - -diff --git a/src/gd_gd2.c b/src/gd_gd2.c -index 6f28461..a50b33d 100644 ---- a/src/gd_gd2.c -+++ b/src/gd_gd2.c -@@ -165,6 +165,8 @@ _gd2GetHeader (gdIOCtxPtr in, int *sx, int *sy, - if (gdGetInt (&cidx[i].size, in) != 1) { - goto fail2; - }; -+ if (cidx[i].offset < 0 || cidx[i].size < 0) -+ goto fail2; - }; - *chunkIdx = cidx; - }; diff --git a/gnu/packages/patches/gegl-CVE-2012-4433.patch b/gnu/packages/patches/gegl-CVE-2012-4433.patch new file mode 100644 index 0000000000..7352b78dba --- /dev/null +++ b/gnu/packages/patches/gegl-CVE-2012-4433.patch @@ -0,0 +1,117 @@ +From: Michael Gilbert <mgilbert@debian.org> +Date: Mon, 9 Sep 2013 17:34:32 +0200 +Subject: Fix_CVE-2012-4433 + +Multiple buffer overflow issues. + +Closes: #692435 +--- + operations/external/ppm-load.c | 62 ++++++++++++++++++++++++++++++++++++------ + 1 file changed, 53 insertions(+), 9 deletions(-) + +diff --git a/operations/external/ppm-load.c b/operations/external/ppm-load.c +index efe6d56..465096d 100644 +--- a/operations/external/ppm-load.c ++++ b/operations/external/ppm-load.c +@@ -36,6 +36,7 @@ gegl_chant_file_path (path, _("File"), "", _("Path of file to load.")) + #include "gegl-chant.h" + #include <stdio.h> + #include <stdlib.h> ++#include <errno.h> + + typedef enum { + PIXMAP_ASCII = 51, +@@ -44,8 +45,8 @@ typedef enum { + + typedef struct { + map_type type; +- gint width; +- gint height; ++ glong width; ++ glong height; + gsize numsamples; /* width * height * channels */ + gsize bpc; /* bytes per channel */ + guchar *data; +@@ -82,12 +83,33 @@ ppm_load_read_header(FILE *fp, + } + + /* Get Width and Height */ +- img->width = strtol (header,&ptr,0); +- img->height = atoi (ptr); +- img->numsamples = img->width * img->height * CHANNEL_COUNT; ++ errno = 0; ++ img->width = strtol (header,&ptr,10); ++ if (errno) ++ { ++ g_warning ("Error reading width: %s", strerror(errno)); ++ return FALSE; ++ } ++ else if (img->width < 0) ++ { ++ g_warning ("Error: width is negative"); ++ return FALSE; ++ } ++ ++ img->height = strtol (ptr,&ptr,10); ++ if (errno) ++ { ++ g_warning ("Error reading height: %s", strerror(errno)); ++ return FALSE; ++ } ++ else if (img->width < 0) ++ { ++ g_warning ("Error: height is negative"); ++ return FALSE; ++ } + + fgets (header,MAX_CHARS_IN_ROW,fp); +- maxval = strtol (header,&ptr,0); ++ maxval = strtol (header,&ptr,10); + + if ((maxval != 255) && (maxval != 65535)) + { +@@ -109,6 +131,16 @@ ppm_load_read_header(FILE *fp, + g_warning ("%s: Programmer stupidity error", G_STRLOC); + } + ++ /* Later on, img->numsamples is multiplied with img->bpc to allocate ++ * memory. Ensure it doesn't overflow. */ ++ if (!img->width || !img->height || ++ G_MAXSIZE / img->width / img->height / CHANNEL_COUNT < img->bpc) ++ { ++ g_warning ("Illegal width/height: %ld/%ld", img->width, img->height); ++ return FALSE; ++ } ++ img->numsamples = img->width * img->height * CHANNEL_COUNT; ++ + return TRUE; + } + +@@ -229,12 +261,24 @@ process (GeglOperation *operation, + if (!ppm_load_read_header (fp, &img)) + goto out; + +- rect.height = img.height; +- rect.width = img.width; +- + /* Allocating Array Size */ ++ ++ /* Should use g_try_malloc(), but this causes crashes elsewhere because the ++ * error signalled by returning FALSE isn't properly acted upon. Therefore ++ * g_malloc() is used here which aborts if the requested memory size can't be ++ * allocated causing a controlled crash. */ + img.data = (guchar*) g_malloc (img.numsamples * img.bpc); + ++ /* No-op without g_try_malloc(), see above. */ ++ if (! img.data) ++ { ++ g_warning ("Couldn't allocate %" G_GSIZE_FORMAT " bytes, giving up.", ((gsize)img.numsamples * img.bpc)); ++ goto out; ++ } ++ ++ rect.height = img.height; ++ rect.width = img.width; ++ + switch (img.bpc) + { + case 1: diff --git a/gnu/packages/patches/icedtea-remove-overrides.patch b/gnu/packages/patches/icedtea-remove-overrides.patch new file mode 100644 index 0000000000..e4d68a9e58 --- /dev/null +++ b/gnu/packages/patches/icedtea-remove-overrides.patch @@ -0,0 +1,291 @@ +Upstream patch: +http://icedtea.classpath.org/hg/icedtea6/rev/60be25a84f2d + +Fixes build failure: +http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=2954 + +Changes to the files 'NEWS' and 'ChangeLog' are omitted here. + +# HG changeset patch +# User Andrew John Hughes <gnu.andrew@redhat.com> +# Date 1463144538 -3600 +# Node ID 60be25a84f2dd2bce8ff277cc3854cca1b3f7931 +# Parent c23ceebb80a19a33316f1e743eb93bdf79aac220 +PR2954: ecj/override.patch is missing new @Overrides in RMIJRMPServerImpl.java + +2016-05-13 Andrew John Hughes <gnu.andrew@redhat.com> + + PR2954: ecj/override.patch is missing new + @Overrides in RMIJRMPServerImpl.java + * patches/ecj/override.patch: + Add cases in RMIJRMPServerImpl and others + which show up when source/target 5 is + used in the rt-class-files pre-build. + * patches/openjdk/8014205-blank_swing_dialogs_windows.patch: + Remove addition of @Override. + +diff -r c23ceebb80a1 -r 60be25a84f2d patches/ecj/override.patch +--- a/patches/ecj/override.patch Sun May 08 21:28:21 2016 +0100 ++++ b/patches/ecj/override.patch Fri May 13 14:02:18 2016 +0100 +@@ -362,3 +362,240 @@ + public Class<?> run() { + try { + ReflectUtil.checkPackageAccess(className); ++diff -r 545db1dd8c2a src/share/classes/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor.java ++--- openjdk-ecj/jdk/src/share/classes/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor.java Wed May 04 23:23:55 2016 +0100 +++++ openjdk-ecj/jdk/src/share/classes/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor.java Thu May 12 01:30:54 2016 +0100 ++@@ -1870,7 +1870,6 @@ ++ ++ private ModifiableClassLoaderRepository getInstantiatorCLR() { ++ return AccessController.doPrivileged(new PrivilegedAction<ModifiableClassLoaderRepository>() { ++- @Override ++ public ModifiableClassLoaderRepository run() { ++ return instantiator != null ? instantiator.getClassLoaderRepository() : null; ++ } ++diff -r 545db1dd8c2a src/share/classes/com/sun/media/sound/Platform.java ++--- openjdk-ecj/jdk/src/share/classes/com/sun/media/sound/Platform.java Wed May 04 23:23:55 2016 +0100 +++++ openjdk-ecj/jdk/src/share/classes/com/sun/media/sound/Platform.java Thu May 12 01:30:54 2016 +0100 ++@@ -160,7 +160,6 @@ ++ try { ++ // load the main library ++ AccessController.doPrivileged(new PrivilegedAction<Void>() { ++- @Override ++ public Void run() { ++ System.loadLibrary(libNameMain); ++ return null; ++@@ -182,7 +181,6 @@ ++ final String lib = st.nextToken(); ++ try { ++ AccessController.doPrivileged(new PrivilegedAction<Void>() { ++- @Override ++ public Void run() { ++ System.loadLibrary(lib); ++ return null; ++diff -r 545db1dd8c2a src/share/classes/java/awt/EventQueue.java ++--- openjdk-ecj/jdk/src/share/classes/java/awt/EventQueue.java Wed May 04 23:23:55 2016 +0100 +++++ openjdk-ecj/jdk/src/share/classes/java/awt/EventQueue.java Thu May 12 01:30:54 2016 +0100 ++@@ -190,7 +190,6 @@ ++ EventQueue.invokeAndWait(source, r); ++ } ++ ++- @Override ++ public long getMostRecentEventTime(EventQueue eventQueue) { ++ return eventQueue.getMostRecentEventTimeImpl(); ++ } ++diff -r 545db1dd8c2a src/share/classes/java/io/ObjectInputStream.java ++--- openjdk-ecj/jdk/src/share/classes/java/io/ObjectInputStream.java Wed May 04 23:23:55 2016 +0100 +++++ openjdk-ecj/jdk/src/share/classes/java/io/ObjectInputStream.java Thu May 12 01:30:54 2016 +0100 ++@@ -3571,7 +3571,6 @@ ++ } ++ static { ++ SharedSecrets.setJavaObjectInputStreamAccess(new JavaObjectInputStreamAccess() { ++- @Override ++ public void setValidator(ObjectInputStream ois, ObjectStreamClassValidator validator) { ++ ObjectInputStream.setValidator(ois, validator); ++ } ++diff -r 545db1dd8c2a src/share/classes/java/rmi/server/RemoteObjectInvocationHandler.java ++--- openjdk-ecj/jdk/src/share/classes/java/rmi/server/RemoteObjectInvocationHandler.java Wed May 04 23:23:55 2016 +0100 +++++ openjdk-ecj/jdk/src/share/classes/java/rmi/server/RemoteObjectInvocationHandler.java Thu May 12 01:30:54 2016 +0100 ++@@ -64,7 +64,6 @@ ++ final String propName = "sun.rmi.server.invocationhandler.allowFinalizeInvocation"; ++ String allowProp = java.security.AccessController.doPrivileged( ++ new PrivilegedAction<String>() { ++- @Override ++ public String run() { ++ return System.getProperty(propName); ++ } ++diff -r 545db1dd8c2a src/share/classes/sun/awt/image/SunVolatileImage.java ++--- openjdk-ecj/jdk/src/share/classes/sun/awt/image/SunVolatileImage.java Wed May 04 23:23:55 2016 +0100 +++++ openjdk-ecj/jdk/src/share/classes/sun/awt/image/SunVolatileImage.java Thu May 12 01:30:54 2016 +0100 ++@@ -262,7 +262,6 @@ ++ * ++ * @see sun.java2d.DestSurfaceProvider#getDestSurface ++ */ ++- @Override ++ public Surface getDestSurface() { ++ return volSurfaceManager.getPrimarySurfaceData(); ++ } ++diff -r 545db1dd8c2a src/share/classes/sun/java2d/SunGraphics2D.java ++--- openjdk-ecj/jdk/src/share/classes/sun/java2d/SunGraphics2D.java Wed May 04 23:23:55 2016 +0100 +++++ openjdk-ecj/jdk/src/share/classes/sun/java2d/SunGraphics2D.java Thu May 12 01:30:54 2016 +0100 ++@@ -3294,7 +3294,6 @@ ++ * ++ * @see sun.java2d.DestSurfaceProvider#getDestSurface ++ */ ++- @Override ++ public Surface getDestSurface() { ++ return surfaceData; ++ } ++diff -r 545db1dd8c2a src/share/classes/sun/rmi/server/UnicastServerRef.java ++--- openjdk-ecj/jdk/src/share/classes/sun/rmi/server/UnicastServerRef.java Wed May 04 23:23:55 2016 +0100 +++++ openjdk-ecj/jdk/src/share/classes/sun/rmi/server/UnicastServerRef.java Thu May 12 01:30:54 2016 +0100 ++@@ -630,12 +630,10 @@ ++ this.callID = callID; ++ } ++ ++- @Override ++ public void validateDescriptor(ObjectStreamClass descriptor) { ++ descriptorCheck.check(method, descriptor, parameterIndex, callID); ++ } ++ ++- @Override ++ public void checkProxyInterfaceNames(String[] ifaces) { ++ descriptorCheck.checkProxyClass(method, ifaces, parameterIndex, callID); ++ } ++diff -r 545db1dd8c2a src/share/classes/sun/rmi/transport/Transport.java ++--- openjdk-ecj/jdk/src/share/classes/sun/rmi/transport/Transport.java Wed May 04 23:23:55 2016 +0100 +++++ openjdk-ecj/jdk/src/share/classes/sun/rmi/transport/Transport.java Thu May 12 01:30:54 2016 +0100 ++@@ -133,7 +133,6 @@ ++ */ ++ private static void setContextClassLoader(final ClassLoader ccl) { ++ AccessController.doPrivileged(new PrivilegedAction<Void> () { ++- @Override ++ public Void run() { ++ Thread.currentThread().setContextClassLoader(ccl); ++ return null; ++diff -r 545db1dd8c2a src/share/classes/sun/rmi/transport/tcp/TCPTransport.java ++--- openjdk-ecj/jdk/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java Wed May 04 23:23:55 2016 +0100 +++++ openjdk-ecj/jdk/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java Thu May 12 01:30:54 2016 +0100 ++@@ -676,7 +676,6 @@ ++ connectionCount.incrementAndGet() + ++ ")-" + remoteHost); ++ AccessController.doPrivileged(new PrivilegedAction<Void>() { ++- @Override ++ public Void run() { ++ run0(); ++ return null; ++diff -r 545db1dd8c2a src/solaris/classes/sun/java2d/opengl/GLXGraphicsConfig.java ++--- openjdk-ecj/jdk/src/solaris/classes/sun/java2d/opengl/GLXGraphicsConfig.java Wed May 04 23:23:55 2016 +0100 +++++ openjdk-ecj/jdk/src/solaris/classes/sun/java2d/opengl/GLXGraphicsConfig.java Thu May 12 01:30:54 2016 +0100 ++@@ -92,7 +92,6 @@ ++ return this; ++ } ++ ++- @Override ++ public SurfaceData createManagedSurface(int w, int h, int transparency) { ++ return GLXSurfaceData.createData(this, w, h, ++ getColorModel(transparency), ++@@ -165,12 +164,10 @@ ++ * Returns true if the provided capability bit is present for this config. ++ * See OGLContext.java for a list of supported capabilities. ++ */ ++- @Override ++ public final boolean isCapPresent(int cap) { ++ return ((oglCaps.getCaps() & cap) != 0); ++ } ++ ++- @Override ++ public final long getNativeConfigInfo() { ++ return pConfigInfo; ++ } ++@@ -180,7 +177,6 @@ ++ * ++ * @see sun.java2d.pipe.hw.BufferedContextProvider#getContext ++ */ ++- @Override ++ public final OGLContext getContext() { ++ return context; ++ } ++@@ -394,7 +390,6 @@ ++ * ++ * @see sun.java2d.pipe.hw.AccelGraphicsConfig#createCompatibleVolatileImage ++ */ ++- @Override ++ public VolatileImage ++ createCompatibleVolatileImage(int width, int height, ++ int transparency, int type) ++@@ -434,17 +429,14 @@ ++ * ++ * @see sun.java2d.pipe.hw.AccelGraphicsConfig#getContextCapabilities ++ */ ++- @Override ++ public ContextCapabilities getContextCapabilities() { ++ return oglCaps; ++ } ++ ++- @Override ++ public void addDeviceEventListener(AccelDeviceEventListener l) { ++ AccelDeviceEventNotifier.addListener(l, screen.getScreen()); ++ } ++ ++- @Override ++ public void removeDeviceEventListener(AccelDeviceEventListener l) { ++ AccelDeviceEventNotifier.removeListener(l); ++ } ++diff -r 545db1dd8c2a src/share/classes/com/sun/jmx/mbeanserver/JmxMBeanServer.java ++--- openjdk-ecj/jdk/src/share/classes/com/sun/jmx/mbeanserver/JmxMBeanServer.java Wed May 04 23:23:55 2016 +0100 +++++ openjdk-ecj/jdk/src/share/classes/com/sun/jmx/mbeanserver/JmxMBeanServer.java Thu May 12 01:51:42 2016 +0100 ++@@ -236,7 +236,6 @@ ++ final MBeanInstantiator fInstantiator = instantiator; ++ this.secureClr = new ++ SecureClassLoaderRepository(AccessController.doPrivileged(new PrivilegedAction<ClassLoaderRepository>() { ++- @Override ++ public ClassLoaderRepository run() { ++ return fInstantiator.getClassLoaderRepository(); ++ } ++@@ -1257,7 +1256,6 @@ ++ ClassLoader myLoader = outerShell.getClass().getClassLoader(); ++ final ModifiableClassLoaderRepository loaders = AccessController.doPrivileged(new PrivilegedAction<ModifiableClassLoaderRepository>() { ++ ++- @Override ++ public ModifiableClassLoaderRepository run() { ++ return instantiator.getClassLoaderRepository(); ++ } ++diff -r b72e7b89dda9 src/share/classes/javax/management/remote/rmi/RMIJRMPServerImpl.java ++--- openjdk-ecj/jdk/src/share/classes/javax/management/remote/rmi/RMIJRMPServerImpl.java Thu Sep 08 11:00:33 2011 -0700 +++++ openjdk-ecj/jdk/src/share/classes/javax/management/remote/rmi/RMIJRMPServerImpl.java Thu May 12 16:39:37 2016 +0100 ++@@ -227,17 +227,14 @@ ++ allowedTypes = credentialsTypes; ++ } ++ ++- @Override ++ public String getVersion() throws RemoteException { ++ return impl.getVersion(); ++ } ++ ++- @Override ++ public RMIConnection newClient(Object credentials) throws IOException { ++ return impl.newClient(credentials); ++ } ++ ++- @Override ++ public void check(Method method, ObjectStreamClass descriptor, ++ int paramIndex, int callID) { ++ ++@@ -247,7 +244,6 @@ ++ } ++ } ++ ++- @Override ++ public void checkProxyClass(Method method, String[] ifaces, ++ int paramIndex, int callID) { ++ if (ifaces != null && ifaces.length > 0) { ++@@ -259,7 +255,6 @@ ++ } ++ } ++ ++- @Override ++ public void end(int callID) { ++ /* Do nothing */ ++ } +diff -r c23ceebb80a1 -r 60be25a84f2d patches/openjdk/8014205-blank_swing_dialogs_windows.patch +--- a/patches/openjdk/8014205-blank_swing_dialogs_windows.patch Sun May 08 21:28:21 2016 +0100 ++++ b/patches/openjdk/8014205-blank_swing_dialogs_windows.patch Fri May 13 14:02:18 2016 +0100 +@@ -116,7 +116,7 @@ + { + if (numBands == 3 && !ccm.hasAlpha()) { + imageType = TYPE_3BYTE_BGR; +-@@ -804,6 +801,27 @@ ++@@ -804,6 +801,26 @@ + } // else if ((raster instanceof ByteComponentRaster) && + } + +@@ -129,7 +129,6 @@ + + new PrivilegedAction<Boolean>() + + { + + +-+ @Override + + public Boolean run() { + + final ClassLoader std = System.class.getClassLoader(); + + + diff --git a/gnu/packages/patches/id3lib-CVE-2007-4460.patch b/gnu/packages/patches/id3lib-CVE-2007-4460.patch new file mode 100644 index 0000000000..36c84179fc --- /dev/null +++ b/gnu/packages/patches/id3lib-CVE-2007-4460.patch @@ -0,0 +1,54 @@ +This patch fixes an issues where temporary files were created in an insecure +way. + +It was first intruduced in version 3.8.3-7 and fixes +http://bugs.debian.org/438540 +--- a/src/tag_file.cpp ++++ b/src/tag_file.cpp +@@ -242,8 +242,8 @@ + strcpy(sTempFile, filename.c_str()); + strcat(sTempFile, sTmpSuffix.c_str()); + +-#if ((defined(__GNUC__) && __GNUC__ >= 3 ) || !defined(HAVE_MKSTEMP)) +- // This section is for Windows folk && gcc 3.x folk ++#if !defined(HAVE_MKSTEMP) ++ // This section is for Windows folk + fstream tmpOut; + createFile(sTempFile, tmpOut); + +@@ -257,7 +257,7 @@ + tmpOut.write((char *)tmpBuffer, nBytes); + } + +-#else //((defined(__GNUC__) && __GNUC__ >= 3 ) || !defined(HAVE_MKSTEMP)) ++#else //!defined(HAVE_MKSTEMP) + + // else we gotta make a temp file, copy the tag into it, copy the + // rest of the old file after the tag, delete the old file, rename +@@ -270,7 +270,7 @@ + //ID3_THROW_DESC(ID3E_NoFile, "couldn't open temp file"); + } + +- ofstream tmpOut(fd); ++ ofstream tmpOut(sTempFile); + if (!tmpOut) + { + tmpOut.close(); +@@ -285,14 +285,14 @@ + uchar tmpBuffer[BUFSIZ]; + while (file) + { +- file.read(tmpBuffer, BUFSIZ); ++ file.read((char *)tmpBuffer, BUFSIZ); + size_t nBytes = file.gcount(); +- tmpOut.write(tmpBuffer, nBytes); ++ tmpOut.write((char *)tmpBuffer, nBytes); + } + + close(fd); //closes the file + +-#endif ////((defined(__GNUC__) && __GNUC__ >= 3 ) || !defined(HAVE_MKSTEMP)) ++#endif ////!defined(HAVE_MKSTEMP) + + tmpOut.close(); + file.close(); diff --git a/gnu/packages/patches/jansson-CVE-2016-4425.patch b/gnu/packages/patches/jansson-CVE-2016-4425.patch new file mode 100644 index 0000000000..ebe9aa7809 --- /dev/null +++ b/gnu/packages/patches/jansson-CVE-2016-4425.patch @@ -0,0 +1,125 @@ +From 64ce0ad3731ebd77e02897b07920eadd0e2cc318 Mon Sep 17 00:00:00 2001 +From: Dmitry Janushkevich <gauri@tut.by> +Date: Mon, 2 May 2016 13:59:26 +0200 +Subject: [PATCH] Fix for issue #282 + +The fix limits recursion depths when parsing arrays and objects. +The limit is configurable via the `JSON_PARSER_MAX_DEPTH` setting +within `jansson_config.h` and is set by default to 2048. + +Update the RFC conformance document to note the limit; the RFC +allows limits to be set by the implementation so nothing has +actually changed w.r.t. conformance state. + +Reported by Gustavo Grieco. +--- + android/jansson_config.h | 4 ++++ + cmake/jansson_config.h.cmake | 4 ++++ + doc/conformance.rst | 10 ++++++++++ + src/jansson_config.h.in | 4 ++++ + src/load.c | 10 ++++++++++ + test/suites/invalid/recursion-depth/error | 2 ++ + test/suites/invalid/recursion-depth/input | 1 + + 7 files changed, 35 insertions(+) + create mode 100644 test/suites/invalid/recursion-depth/error + create mode 100644 test/suites/invalid/recursion-depth/input + +--- a/android/jansson_config.h ++++ b/android/jansson_config.h +@@ -36,4 +36,8 @@ + otherwise to 0. */ + #define JSON_HAVE_LOCALECONV 0 + ++/* Maximum recursion depth for parsing JSON input. ++ This limits the depth of e.g. array-within-array constructions. */ ++#define JSON_PARSER_MAX_DEPTH 2048 ++ + #endif +--- a/cmake/jansson_config.h.cmake ++++ b/cmake/jansson_config.h.cmake +@@ -60,5 +60,9 @@ + #define JSON_HAVE_LOCALECONV @JSON_HAVE_LOCALECONV@ + + ++/* Maximum recursion depth for parsing JSON input. ++ This limits the depth of e.g. array-within-array constructions. */ ++#define JSON_PARSER_MAX_DEPTH 2048 ++ + + #endif +--- a/doc/conformance.rst ++++ b/doc/conformance.rst +@@ -108,3 +108,13 @@ + are implicitly handled via the ordinary C type coercion rules (subject + to overflow semantics). Also, no support or hooks are provided for any + supplemental "bignum" type add-on packages. ++ ++Depth of nested values ++---------------------- ++ ++To avoid stack exhaustion, Jansson currently limits the nesting depth ++for arrays and objects to a certain value (default: 2048), defined as ++a macro ``JSON_PARSER_MAX_DEPTH`` within ``jansson_config.h``. ++ ++The limit is allowed to be set by the RFC; there is no recommended value ++or required minimum depth to be supported. +--- a/src/jansson_config.h.in ++++ b/src/jansson_config.h.in +@@ -36,4 +36,8 @@ + otherwise to 0. */ + #define JSON_HAVE_LOCALECONV @json_have_localeconv@ + ++/* Maximum recursion depth for parsing JSON input. ++ This limits the depth of e.g. array-within-array constructions. */ ++#define JSON_PARSER_MAX_DEPTH 2048 ++ + #endif +--- a/src/load.c ++++ b/src/load.c +@@ -61,6 +61,7 @@ + typedef struct { + stream_t stream; + strbuffer_t saved_text; ++ size_t depth; + int token; + union { + struct { +@@ -800,6 +801,12 @@ + json_t *json; + double value; + ++ lex->depth++; ++ if(lex->depth > JSON_PARSER_MAX_DEPTH) { ++ error_set(error, lex, "maximum parsing depth reached"); ++ return NULL; ++ } ++ + switch(lex->token) { + case TOKEN_STRING: { + const char *value = lex->value.string.val; +@@ -870,6 +877,7 @@ + if(!json) + return NULL; + ++ lex->depth--; + return json; + } + +@@ -877,6 +885,8 @@ + { + json_t *result; + ++ lex->depth = 0; ++ + lex_scan(lex, error); + if(!(flags & JSON_DECODE_ANY)) { + if(lex->token != '[' && lex->token != '{') { +--- /dev/null ++++ b/test/suites/invalid/recursion-depth/error +@@ -0,0 +1,2 @@ ++1 2049 2049 ++maximum parsing depth reached near '[' +--- /dev/null ++++ b/test/suites/invalid/recursion-depth/input +@@ -0,0 +1 @@ ++[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ diff --git a/gnu/packages/patches/libtar-CVE-2013-4420.patch b/gnu/packages/patches/libtar-CVE-2013-4420.patch new file mode 100644 index 0000000000..cc64711ae9 --- /dev/null +++ b/gnu/packages/patches/libtar-CVE-2013-4420.patch @@ -0,0 +1,118 @@ +Author: Raphael Geissert <geissert@debian.org> +Bug-Debian: https://bugs.debian.org/731860 +Description: Avoid directory traversal when extracting archives + by skipping over leading slashes and any prefix containing ".." components. +Forwarded: yes + +--- a/lib/decode.c ++++ b/lib/decode.c +@@ -22,6 +22,36 @@ + #endif + + ++char * ++safer_name_suffix (char const *file_name) ++{ ++ char const *p, *t; ++ p = t = file_name; ++ while (*p == '/') t = ++p; ++ while (*p) ++ { ++ while (p[0] == '.' && p[0] == p[1] && p[2] == '/') ++ { ++ p += 3; ++ t = p; ++ } ++ /* advance pointer past the next slash */ ++ while (*p && (p++)[0] != '/'); ++ } ++ ++ if (!*t) ++ { ++ t = "."; ++ } ++ ++ if (t != file_name) ++ { ++ /* TODO: warn somehow that the path was modified */ ++ } ++ return (char*)t; ++} ++ ++ + /* determine full path name */ + char * + th_get_pathname(TAR *t) +@@ -29,17 +59,17 @@ th_get_pathname(TAR *t) + static char filename[MAXPATHLEN]; + + if (t->th_buf.gnu_longname) +- return t->th_buf.gnu_longname; ++ return safer_name_suffix(t->th_buf.gnu_longname); + + if (t->th_buf.prefix[0] != '\0') + { + snprintf(filename, sizeof(filename), "%.155s/%.100s", + t->th_buf.prefix, t->th_buf.name); +- return filename; ++ return safer_name_suffix(filename); + } + + snprintf(filename, sizeof(filename), "%.100s", t->th_buf.name); +- return filename; ++ return safer_name_suffix(filename); + } + + +--- a/lib/extract.c ++++ b/lib/extract.c +@@ -298,14 +298,14 @@ tar_extract_hardlink(TAR * t, char *real + if (mkdirhier(dirname(filename)) == -1) + return -1; + libtar_hashptr_reset(&hp); +- if (libtar_hash_getkey(t->h, &hp, th_get_linkname(t), ++ if (libtar_hash_getkey(t->h, &hp, safer_name_suffix(th_get_linkname(t)), + (libtar_matchfunc_t)libtar_str_match) != 0) + { + lnp = (char *)libtar_hashptr_data(&hp); + linktgt = &lnp[strlen(lnp) + 1]; + } + else +- linktgt = th_get_linkname(t); ++ linktgt = safer_name_suffix(th_get_linkname(t)); + + #ifdef DEBUG + printf(" ==> extracting: %s (link to %s)\n", filename, linktgt); +@@ -343,9 +343,9 @@ tar_extract_symlink(TAR *t, char *realna + + #ifdef DEBUG + printf(" ==> extracting: %s (symlink to %s)\n", +- filename, th_get_linkname(t)); ++ filename, safer_name_suffix(th_get_linkname(t))); + #endif +- if (symlink(th_get_linkname(t), filename) == -1) ++ if (symlink(safer_name_suffix(th_get_linkname(t)), filename) == -1) + { + #ifdef DEBUG + perror("symlink()"); +--- a/lib/internal.h ++++ b/lib/internal.h +@@ -15,3 +15,4 @@ + + #include <libtar.h> + ++char* safer_name_suffix(char const*); +--- a/lib/output.c ++++ b/lib/output.c +@@ -123,9 +123,9 @@ th_print_long_ls(TAR *t) + else + printf(" link to "); + if ((t->options & TAR_GNU) && t->th_buf.gnu_longlink != NULL) +- printf("%s", t->th_buf.gnu_longlink); ++ printf("%s", safer_name_suffix(t->th_buf.gnu_longlink)); + else +- printf("%.100s", t->th_buf.linkname); ++ printf("%.100s", safer_name_suffix(t->th_buf.linkname)); + } + + putchar('\n'); diff --git a/gnu/packages/patches/libyaml-CVE-2014-9130.patch b/gnu/packages/patches/libyaml-CVE-2014-9130.patch new file mode 100644 index 0000000000..800358c0d6 --- /dev/null +++ b/gnu/packages/patches/libyaml-CVE-2014-9130.patch @@ -0,0 +1,30 @@ +Fixes CVE-2014-9130 +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-9130 + +Upstream source: +https://bitbucket.org/xi/libyaml/commits/2b9156756423e967cfd09a61d125d883fca6f4f2 + +# HG changeset patch +# User Kirill Simonov <xi@resolvent.net> +# Date 1417197312 21600 +# Node ID 2b9156756423e967cfd09a61d125d883fca6f4f2 +# Parent 053f53a381ff6adbbc93a31ab7fdee06a16c8a33 +Removed invalid simple key assertion (thank to Jonathan Gray). + +diff --git a/src/scanner.c b/src/scanner.c +--- a/src/scanner.c ++++ b/src/scanner.c +@@ -1106,13 +1106,6 @@ + && parser->indent == (ptrdiff_t)parser->mark.column); + + /* +- * A simple key is required only when it is the first token in the current +- * line. Therefore it is always allowed. But we add a check anyway. +- */ +- +- assert(parser->simple_key_allowed || !required); /* Impossible. */ +- +- /* + * If the current position may start a simple key, save it. + */ + diff --git a/gnu/packages/patches/lua-CVE-2014-5461.patch b/gnu/packages/patches/lua-CVE-2014-5461.patch new file mode 100644 index 0000000000..bc72ef14ad --- /dev/null +++ b/gnu/packages/patches/lua-CVE-2014-5461.patch @@ -0,0 +1,20 @@ +From: Enrico Tassi <gareuselesinge@debian.org> +Date: Tue, 26 Aug 2014 16:20:55 +0200 +Subject: Fix stack overflow in vararg functions + +--- + src/ldo.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/ldo.c b/src/ldo.c +index d1bf786..30333bf 100644 +--- a/src/ldo.c ++++ b/src/ldo.c +@@ -274,7 +274,7 @@ int luaD_precall (lua_State *L, StkId func, int nresults) { + CallInfo *ci; + StkId st, base; + Proto *p = cl->p; +- luaD_checkstack(L, p->maxstacksize); ++ luaD_checkstack(L, p->maxstacksize + p->numparams); + func = restorestack(L, funcr); + base = func + 1; diff --git a/gnu/packages/patches/mcrypt-CVE-2012-4409.patch b/gnu/packages/patches/mcrypt-CVE-2012-4409.patch new file mode 100644 index 0000000000..60cf8e0430 --- /dev/null +++ b/gnu/packages/patches/mcrypt-CVE-2012-4409.patch @@ -0,0 +1,33 @@ +From 4876e3a692739bb9ca00d0f500fd5f4b3eb16ce3 Mon Sep 17 00:00:00 2001 +From: Tom Callaway <spot@fedoraproject.org> +Date: Fri, 7 Sep 2012 11:39:29 -0400 +Subject: apply fix for CVE-2012-4409 (thanks to Raphael Geissert) + +--- + mcrypt-CVE-2012-4409.patch | 12 ++++++++++++ + mcrypt.spec | 10 +++++++++- + 2 files changed, 21 insertions(+), 1 deletion(-) + create mode 100644 mcrypt-CVE-2012-4409.patch + +diff --git a/mcrypt-CVE-2012-4409.patch b/mcrypt-CVE-2012-4409.patch +new file mode 100644 +index 0000000..747f428 +--- /dev/null ++++ b/mcrypt-CVE-2012-4409.patch +@@ -0,0 +1,12 @@ ++diff -up mcrypt-2.6.8/src/extra.c.CVE-2012-4409 mcrypt-2.6.8/src/extra.c ++--- mcrypt-2.6.8/src/extra.c.CVE-2012-4409 2012-09-07 11:00:55.906870746 -0400 +++++ mcrypt-2.6.8/src/extra.c 2012-09-07 11:00:27.967858365 -0400 ++@@ -242,6 +242,8 @@ int check_file_head(FILE * fstream, char ++ if (m_getbit(0, sflag) != 0) { /* if the first bit is set */ ++ *salt_size = m_setbit(0, sflag, 0); ++ if (*salt_size > 0) { +++ if (*salt_size > sizeof(tmp_buf)) +++ err_quit(_("Salt is too long\n")); ++ fread(tmp_buf, 1, *salt_size, ++ fstream); ++ memmove(salt, tmp_buf, *salt_size); + +-- +cgit v0.12 + diff --git a/gnu/packages/patches/mcrypt-CVE-2012-4426.patch b/gnu/packages/patches/mcrypt-CVE-2012-4426.patch new file mode 100644 index 0000000000..61c197b0c9 --- /dev/null +++ b/gnu/packages/patches/mcrypt-CVE-2012-4426.patch @@ -0,0 +1,36 @@ +diff --git a/mcrypt-CVE-2012-4426.patch b/mcrypt-CVE-2012-4426.patch +new file mode 100644 +index 0000000..747f428 +--- mcrypt-2.6.8/src/errors.c ++++ mcrypt-2.6.8/src/errors.c +@@ -25,24 +25,24 @@ + + void err_quit(char *errmsg) + { +- fprintf(stderr, errmsg); ++ fprintf(stderr, "%s", errmsg); + exit(-1); + } + + void err_warn(char *errmsg) + { + if (quiet <= 1) +- fprintf(stderr, errmsg); ++ fprintf(stderr, "%s", errmsg); + } + + void err_info(char *errmsg) + { + if (quiet == 0) +- fprintf(stderr, errmsg); ++ fprintf(stderr, "%s", errmsg); + } + + void err_crit(char *errmsg) + { + if (quiet <= 2) +- fprintf(stderr, errmsg); ++ fprintf(stderr, "%s", errmsg); + } + +--- diff --git a/gnu/packages/patches/mcrypt-CVE-2012-4527.patch b/gnu/packages/patches/mcrypt-CVE-2012-4527.patch new file mode 100644 index 0000000000..d931dd174b --- /dev/null +++ b/gnu/packages/patches/mcrypt-CVE-2012-4527.patch @@ -0,0 +1,111 @@ +From b0716eac4e800a0ea53e1b949250f671702f28a0 Mon Sep 17 00:00:00 2001 +From: Tom Callaway <spot@fedoraproject.org> +Date: Tue, 30 Oct 2012 15:39:24 -0400 +Subject: apply workaround to CVE-2012-4527 + +--- + mcrypt-CVE-2012-4527-80-width-patch | 91 +++++++++++++++++++++++++++++++++++++ + mcrypt.spec | 10 +++- + 2 files changed, 100 insertions(+), 1 deletion(-) + create mode 100644 mcrypt-CVE-2012-4527-80-width-patch + +diff --git a/mcrypt-CVE-2012-4527-80-width-patch b/mcrypt-CVE-2012-4527-80-width-patch +new file mode 100644 +index 0000000..0eb94d8 +--- /dev/null ++++ b/mcrypt-CVE-2012-4527-80-width-patch +@@ -0,0 +1,91 @@ ++--- mcrypt-2.6.8.orig/src/mcrypt.c +++++ mcrypt-2.6.8/src/mcrypt.c ++@@ -41,6 +41,8 @@ ++ # include <time.h> ++ #endif ++ +++#define WIDTH 80 +++ ++ static char rcsid[] = ++ "$Id: mcrypt.c,v 1.2 2007/11/07 17:10:21 nmav Exp $"; ++ ++@@ -482,7 +484,7 @@ ++ #ifdef HAVE_STAT ++ if (stream_flag == FALSE) { ++ if (is_normal_file(file[i]) == FALSE) { ++- sprintf(tmperr, +++ snprintf(tmperr, WIDTH, ++ _ ++ ("%s: %s is not a regular file. Skipping...\n"), ++ program_name, file[i]); ++@@ -501,7 +503,7 @@ ++ dinfile = file[i]; ++ if ((isatty(fileno((FILE *) (stdin))) == 1) ++ && (stream_flag == TRUE) && (force == 0)) { /* not a tty */ ++- sprintf(tmperr, +++ snprintf(tmperr, WIDTH, ++ _ ++ ("%s: Encrypted data will not be read from a terminal.\n"), ++ program_name); ++@@ -520,7 +522,7 @@ ++ einfile = file[i]; ++ if ((isatty(fileno((FILE *) (stdout))) == 1) ++ && (stream_flag == TRUE) && (force == 0)) { /* not a tty */ ++- sprintf(tmperr, +++ snprintf(tmperr, WIDTH, ++ _ ++ ("%s: Encrypted data will not be written to a terminal.\n"), ++ program_name); ++@@ -544,7 +546,7 @@ ++ strcpy(outfile, einfile); ++ /* if file has already the .nc ignore it */ ++ if (strstr(outfile, ".nc") != NULL) { ++- sprintf(tmperr, +++ snprintf(tmperr, WIDTH, ++ _ ++ ("%s: file %s has the .nc suffix... skipping...\n"), ++ program_name, outfile); ++@@ -590,10 +592,10 @@ ++ ++ if (x == 0) { ++ if (stream_flag == FALSE) { ++- sprintf(tmperr, _("File %s was decrypted.\n"), dinfile); +++ snprintf(tmperr, WIDTH, _("File %s was decrypted.\n"), dinfile); ++ err_warn(tmperr); ++ } else { ++- sprintf(tmperr, _("Stdin was decrypted.\n")); +++ snprintf(tmperr, WIDTH, _("Stdin was decrypted.\n")); ++ err_warn(tmperr); ++ } ++ #ifdef HAVE_STAT ++@@ -610,7 +612,7 @@ ++ ++ } else { ++ if (stream_flag == FALSE) { ++- sprintf(tmperr, +++ snprintf(tmperr, WIDTH, ++ _ ++ ("File %s was NOT decrypted successfully.\n"), ++ dinfile); ++@@ -636,10 +638,10 @@ ++ ++ if (x == 0) { ++ if (stream_flag == FALSE) { ++- sprintf(tmperr, _("File %s was encrypted.\n"), einfile); +++ snprintf(tmperr, WIDTH, _("File %s was encrypted.\n"), einfile); ++ err_warn(tmperr); ++ } else { ++- sprintf(tmperr, _("Stdin was encrypted.\n")); +++ snprintf(tmperr, WIDTH, _("Stdin was encrypted.\n")); ++ err_warn(tmperr); ++ } ++ #ifdef HAVE_STAT ++@@ -655,7 +657,7 @@ ++ ++ } else { ++ if (stream_flag == FALSE) { ++- sprintf(tmperr, +++ snprintf(tmperr, WIDTH, ++ _ ++ ("File %s was NOT encrypted successfully.\n"), ++ einfile); +-- +cgit v0.12 + diff --git a/gnu/packages/patches/pcre2-CVE-2016-3191.patch b/gnu/packages/patches/pcre2-CVE-2016-3191.patch new file mode 100644 index 0000000000..80f9d3d4f1 --- /dev/null +++ b/gnu/packages/patches/pcre2-CVE-2016-3191.patch @@ -0,0 +1,179 @@ +Fixes CVE-2016-3191 (remote execution of arbitrary code or denial of +service (stack-based buffer overflow) via a crafted regular expression). + +See <https://bugzilla.redhat.com/show_bug.cgi?id=1311503>. + +This is svn r489 at <svn://vcs.exim.org/pcre2/code>, omitting the +changes to 'testdata/testoutput8-16-4', which does not exist in the +source tarball. + +git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@489 6239d852-aaf2-0410-a92c-79f79f948069 +--- + ChangeLog | 4 ++++ + src/pcre2_compile.c | 16 ++++++++++++++-- + testdata/testinput8 | 2 ++ + testdata/testoutput8-16-2 | 3 +++ + testdata/testoutput8-16-3 | 3 +++ + testdata/testoutput8-16-4 | 3 +++ + testdata/testoutput8-32-2 | 3 +++ + testdata/testoutput8-32-3 | 3 +++ + testdata/testoutput8-32-4 | 3 +++ + testdata/testoutput8-8-2 | 3 +++ + testdata/testoutput8-8-3 | 3 +++ + testdata/testoutput8-8-4 | 3 +++ + 12 files changed, 47 insertions(+), 2 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 3ce0207..65e333e 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -58,6 +58,10 @@ some head-scratching the next time this happens. + assertion, caused pcre2test to output a very large number of spaces when the + callout was taken, making the program appearing to loop. + ++12. A pattern that included (*ACCEPT) in the middle of a sufficiently deeply ++nested set of parentheses of sufficient size caused an overflow of the ++compiling workspace (which was diagnosed, but of course is not desirable). ++ + + Version 10.21 12-January-2016 + ----------------------------- +diff --git a/src/pcre2_compile.c b/src/pcre2_compile.c +index e33d620..887fbfd 100644 +--- a/src/pcre2_compile.c ++++ b/src/pcre2_compile.c +@@ -5901,10 +5901,22 @@ for (;; ptr++) + goto FAILED; + } + cb->had_accept = TRUE; ++ ++ /* In the first pass, just accumulate the length required; ++ otherwise hitting (*ACCEPT) inside many nested parentheses can ++ cause workspace overflow. */ ++ + for (oc = cb->open_caps; oc != NULL; oc = oc->next) + { +- *code++ = OP_CLOSE; +- PUT2INC(code, 0, oc->number); ++ if (lengthptr != NULL) ++ { ++ *lengthptr += CU2BYTES(1) + IMM2_SIZE; ++ } ++ else ++ { ++ *code++ = OP_CLOSE; ++ PUT2INC(code, 0, oc->number); ++ } + } + setverb = *code++ = + (cb->assert_depth > 0)? OP_ASSERT_ACCEPT : OP_ACCEPT; +diff --git a/testdata/testinput8 b/testdata/testinput8 +index ca3b1b9..7e2a1f0 100644 +--- a/testdata/testinput8 ++++ b/testdata/testinput8 +@@ -182,4 +182,6 @@ + + /((?1)(?2)(?3)(?4)(?5)(?6)(?7)(?8)(?9)(?9)(?8)(?7)(?6)(?5)(?4)(?3)(?2)(?1)(?0)){2,}()()()()()()()()()/debug + ++/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/ ++ + # End of testinput8 +diff --git a/testdata/testoutput8-16-2 b/testdata/testoutput8-16-2 +index 05669bb..a5e8dec 100644 +--- a/testdata/testoutput8-16-2 ++++ b/testdata/testoutput8-16-2 +@@ -1027,4 +1027,7 @@ Capturing subpattern count = 10 + May match empty string + Subject length lower bound = 0 + ++/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/ ++Failed: error 186 at offset 490: regular expression is too complicated ++ + # End of testinput8 +diff --git a/testdata/testoutput8-16-3 b/testdata/testoutput8-16-3 +index 31884e1..36133b3 100644 +--- a/testdata/testoutput8-16-3 ++++ b/testdata/testoutput8-16-3 +@@ -1023,4 +1023,7 @@ Capturing subpattern count = 10 + May match empty string + Subject length lower bound = 0 + ++/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/ ++Failed: error 114 at offset 509: missing closing parenthesis ++ + # End of testinput8 +diff --git a/testdata/testoutput8-32-2 b/testdata/testoutput8-32-2 +index babd0c7..99c4fad 100644 +--- a/testdata/testoutput8-32-2 ++++ b/testdata/testoutput8-32-2 +@@ -1023,4 +1023,7 @@ Capturing subpattern count = 10 + May match empty string + Subject length lower bound = 0 + ++/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/ ++Failed: error 114 at offset 509: missing closing parenthesis ++ + # End of testinput8 +diff --git a/testdata/testoutput8-32-3 b/testdata/testoutput8-32-3 +index babd0c7..99c4fad 100644 +--- a/testdata/testoutput8-32-3 ++++ b/testdata/testoutput8-32-3 +@@ -1023,4 +1023,7 @@ Capturing subpattern count = 10 + May match empty string + Subject length lower bound = 0 + ++/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/ ++Failed: error 114 at offset 509: missing closing parenthesis ++ + # End of testinput8 +diff --git a/testdata/testoutput8-32-4 b/testdata/testoutput8-32-4 +index babd0c7..99c4fad 100644 +--- a/testdata/testoutput8-32-4 ++++ b/testdata/testoutput8-32-4 +@@ -1023,4 +1023,7 @@ Capturing subpattern count = 10 + May match empty string + Subject length lower bound = 0 + ++/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/ ++Failed: error 114 at offset 509: missing closing parenthesis ++ + # End of testinput8 +diff --git a/testdata/testoutput8-8-2 b/testdata/testoutput8-8-2 +index 6a9aa0a..6dc1f42 100644 +--- a/testdata/testoutput8-8-2 ++++ b/testdata/testoutput8-8-2 +@@ -1026,4 +1026,7 @@ Capturing subpattern count = 10 + May match empty string + Subject length lower bound = 0 + ++/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/ ++Failed: error 114 at offset 509: missing closing parenthesis ++ + # End of testinput8 +diff --git a/testdata/testoutput8-8-3 b/testdata/testoutput8-8-3 +index 2fe1168..ae14946 100644 +--- a/testdata/testoutput8-8-3 ++++ b/testdata/testoutput8-8-3 +@@ -1024,4 +1024,7 @@ Capturing subpattern count = 10 + May match empty string + Subject length lower bound = 0 + ++/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/ ++Failed: error 114 at offset 509: missing closing parenthesis ++ + # End of testinput8 +diff --git a/testdata/testoutput8-8-4 b/testdata/testoutput8-8-4 +index 91993b2..6c79956 100644 +--- a/testdata/testoutput8-8-4 ++++ b/testdata/testoutput8-8-4 +@@ -1022,4 +1022,7 @@ Capturing subpattern count = 10 + May match empty string + Subject length lower bound = 0 + ++/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/ ++Failed: error 114 at offset 509: missing closing parenthesis ++ + # End of testinput8 +-- +2.8.3 + diff --git a/gnu/packages/patches/procmail-CVE-2014-3618.patch b/gnu/packages/patches/procmail-CVE-2014-3618.patch new file mode 100644 index 0000000000..e3f2759738 --- /dev/null +++ b/gnu/packages/patches/procmail-CVE-2014-3618.patch @@ -0,0 +1,26 @@ +Fixes CVE-2014-3618 (heap overflow in formisc.c allowing denial of +service and potential remote execution of arbitrary code). +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3618 + +Source: +http://seclists.org/oss-sec/2014/q3/495 + +Adopted by Debian as patch '27': +https://sources.debian.net/src/procmail/3.22-25/debian/patches/27/ + +--- a/src/formisc.c ++++ b/src/formisc.c +@@ -84,12 +84,11 @@ + case '"':*target++=delim='"';start++; + } + ;{ int i; +- do ++ while(*start) + if((i= *target++= *start++)==delim) /* corresponding delimiter? */ + break; + else if(i=='\\'&&*start) /* skip quoted character */ + *target++= *start++; +- while(*start); /* anything? */ + } + hitspc=2; + } diff --git a/gnu/packages/patches/rpm-CVE-2014-8118.patch b/gnu/packages/patches/rpm-CVE-2014-8118.patch new file mode 100644 index 0000000000..5fdb0f0eb2 --- /dev/null +++ b/gnu/packages/patches/rpm-CVE-2014-8118.patch @@ -0,0 +1,25 @@ +Fix CVE-2014-8118 (integer overflow allowing arbitrary remote code +execution via crafted CPIO header). + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-8118 + +Source: +https://bugzilla.redhat.com/attachment.cgi?id=962159&action=diff + +Adopted by Debian: +http://anonscm.debian.org/cgit/collab-maint/rpm.git/plain/debian/patches/CVE-2014-8118.patch + +diff --git a/lib/cpio.c b/lib/cpio.c +index 253ff0f..600633a 100644 +--- a/lib/cpio.c ++++ b/lib/cpio.c +@@ -399,6 +399,9 @@ int rpmcpioHeaderRead(rpmcpio_t cpio, char ** path, int * fx) + + GET_NUM_FIELD(hdr.filesize, fsize); + GET_NUM_FIELD(hdr.namesize, nameSize); ++ if (nameSize <= 0 || nameSize > 4096) { ++ return RPMERR_BAD_HEADER; ++ } + + char name[nameSize + 1]; + read = Fread(name, nameSize, 1, cpio->fd); diff --git a/gnu/packages/patches/rush-CVE-2013-6889.patch b/gnu/packages/patches/rush-CVE-2013-6889.patch new file mode 100644 index 0000000000..862528a12c --- /dev/null +++ b/gnu/packages/patches/rush-CVE-2013-6889.patch @@ -0,0 +1,23 @@ +commit 00bdccd429517f12dbf37ab4397ddec3e51a2738 +Author: Mats Erik Andersson <gnu@gisladisker.se> +Date: Mon Jan 20 13:33:52 2014 +0200 + + Protect against CVE-2013-6889 (tiny change). + + Reset the effective user identification in testing mode. + +diff --git a/src/rush.c b/src/rush.c +index 45d737a..dc6518e 100644 +--- a/src/rush.c ++++ b/src/rush.c +@@ -980,6 +980,10 @@ main(int argc, char **argv) + } else if (argc > optind) + die(usage_error, NULL, _("invalid command line")); + ++ /* Relinquish root privileges in test mode */ ++ if (lint_option) ++ setuid(getuid()); ++ + if (test_user_name) { + struct passwd *pw = getpwnam(test_user_name); + if (!pw) diff --git a/gnu/packages/patches/t1lib-CVE-2010-2642.patch b/gnu/packages/patches/t1lib-CVE-2010-2642.patch new file mode 100644 index 0000000000..cd54889585 --- /dev/null +++ b/gnu/packages/patches/t1lib-CVE-2010-2642.patch @@ -0,0 +1,24 @@ +diff --git a/lib/t1lib/parseAFM.c b/lib/t1lib/parseAFM.c +index 6a31d7f..ba64541 100644 +--- a/lib/t1lib/parseAFM.c ++++ b/lib/t1lib/parseAFM.c +@@ -199,7 +199,9 @@ static char *token(stream) + idx = 0; + + while (ch != EOF && ch != ' ' && ch != CR && ch != LF && +- ch != CTRL_Z && ch != '\t' && ch != ':' && ch != ';'){ ++ ch != CTRL_Z && ch != '\t' && ch != ':' && ch != ';' ++ && idx < (MAX_NAME -1)) ++ { + ident[idx++] = ch; + ch = fgetc(stream); + } /* while */ +@@ -235,7 +237,7 @@ static char *linetoken(stream) + while ((ch = fgetc(stream)) == ' ' || ch == '\t' ); + + idx = 0; +- while (ch != EOF && ch != CR && ch != LF && ch != CTRL_Z) ++ while (ch != EOF && ch != CR && ch != LF && ch != CTRL_Z && idx < (MAX_NAME - 1)) + { + ident[idx++] = ch; + ch = fgetc(stream); diff --git a/gnu/packages/patches/t1lib-CVE-2011-0764.patch b/gnu/packages/patches/t1lib-CVE-2011-0764.patch new file mode 100644 index 0000000000..c2d9e173b7 --- /dev/null +++ b/gnu/packages/patches/t1lib-CVE-2011-0764.patch @@ -0,0 +1,32 @@ +Description: Don't lookup previous point if there isn't any +Author: Marc Deslauriers <marc.deslauriers@canonical.com> +Forwarded: no + +Index: t1lib-5.1.2/lib/type1/type1.c +=================================================================== +--- t1lib-5.1.2.orig/lib/type1/type1.c 2011-12-13 14:24:14.280965637 -0600 ++++ t1lib-5.1.2/lib/type1/type1.c 2011-12-13 14:25:25.893320747 -0600 +@@ -1700,6 +1700,7 @@ + long pindex = 0; + + /* compute hinting for previous segment! */ ++ if (ppoints == NULL) Error0i("RLineTo: No previous point!\n"); + FindStems( currx, curry, currx-ppoints[numppoints-2].x, curry-ppoints[numppoints-2].y, dx, dy); + + /* Allocate a new path point and pre-setup data */ +@@ -1728,6 +1729,7 @@ + long pindex = 0; + + /* compute hinting for previous point! */ ++ if (ppoints == NULL) Error0i("RRCurveTo: No previous point!\n"); + FindStems( currx, curry, currx-ppoints[numppoints-2].x, curry-ppoints[numppoints-2].y, dx1, dy1); + + /* Allocate three new path points and pre-setup data */ +@@ -1903,6 +1905,7 @@ + FindStems( currx, curry, 0, 0, dx, dy); + } + else { ++ if (ppoints == NULL) Error0i("RMoveTo: No previous point!\n"); + FindStems( currx, curry, ppoints[numppoints-2].x, ppoints[numppoints-2].y, dx, dy); + } + diff --git a/gnu/packages/patches/t1lib-CVE-2011-1552+CVE-2011-1553+CVE-2011-1554.patch b/gnu/packages/patches/t1lib-CVE-2011-1552+CVE-2011-1553+CVE-2011-1554.patch new file mode 100644 index 0000000000..aaa31f7b93 --- /dev/null +++ b/gnu/packages/patches/t1lib-CVE-2011-1552+CVE-2011-1553+CVE-2011-1554.patch @@ -0,0 +1,133 @@ +Author: Jaroslav Škarvada <jskarvad@redhat.com> +Description: Fix more crashes on oversized fonts +Bug-Redhat: http://bugzilla.redhat.com/show_bug.cgi?id=692909 +Index: t1lib-5.1.2/lib/type1/lines.c +=================================================================== +--- t1lib-5.1.2.orig/lib/type1/lines.c 2007-12-23 09:49:42.000000000 -0600 ++++ t1lib-5.1.2/lib/type1/lines.c 2012-01-17 14:15:08.000000000 -0600 +@@ -67,6 +67,10 @@ + None. + */ + ++#define BITS (sizeof(LONG)*8) ++#define HIGHTEST(p) (((p)>>(BITS-2)) != 0) /* includes sign bit */ ++#define TOOBIG(xy) ((xy < 0) ? HIGHTEST(-xy) : HIGHTEST(xy)) ++ + /* + :h2.StepLine() - Produces Run Ends for a Line After Checks + +@@ -84,6 +88,9 @@ + IfTrace4((LineDebug > 0), ".....StepLine: (%d,%d) to (%d,%d)\n", + x1, y1, x2, y2); + ++ if ( TOOBIG(x1) || TOOBIG(x2) || TOOBIG(y1) || TOOBIG(y2)) ++ abort("Lines this big not supported", 49); ++ + dy = y2 - y1; + + /* +Index: t1lib-5.1.2/lib/type1/objects.c +=================================================================== +--- t1lib-5.1.2.orig/lib/type1/objects.c 2007-12-23 09:49:42.000000000 -0600 ++++ t1lib-5.1.2/lib/type1/objects.c 2012-01-17 14:15:08.000000000 -0600 +@@ -1137,12 +1137,13 @@ + "Context: out of them", /* 46 */ + "MatrixInvert: can't", /* 47 */ + "xiStub called", /* 48 */ +- "Illegal access type1 abort() message" /* 49 */ ++ "Lines this big not supported", /* 49 */ ++ "Illegal access type1 abort() message" /* 50 */ + }; + +- /* no is valid from 1 to 48 */ +- if ( (number<1)||(number>48)) +- number=49; ++ /* no is valid from 1 to 49 */ ++ if ( (number<1)||(number>49)) ++ number=50; + return( err_msgs[number-1]); + + } +Index: t1lib-5.1.2/lib/type1/type1.c +=================================================================== +--- t1lib-5.1.2.orig/lib/type1/type1.c 2012-01-17 14:13:28.000000000 -0600 ++++ t1lib-5.1.2/lib/type1/type1.c 2012-01-17 14:19:54.000000000 -0600 +@@ -1012,6 +1012,7 @@ + double nextdtana = 0.0; /* tangent of post-delta against horizontal line */ + double nextdtanb = 0.0; /* tangent of post-delta against vertical line */ + ++ if (ppoints == NULL || numppoints < 1) Error0v("FindStems: No previous point!\n"); + + /* setup default hinted position */ + ppoints[numppoints-1].ax = ppoints[numppoints-1].x; +@@ -1289,7 +1290,7 @@ + static int DoRead(CodeP) + int *CodeP; + { +- if (strindex >= CharStringP->len) return(FALSE); /* end of string */ ++ if (!CharStringP || strindex >= CharStringP->len) return(FALSE); /* end of string */ + /* We handle the non-documented Adobe convention to use lenIV=-1 to + suppress charstring encryption. */ + if (blues->lenIV==-1) { +@@ -1700,7 +1701,7 @@ + long pindex = 0; + + /* compute hinting for previous segment! */ +- if (ppoints == NULL) Error0i("RLineTo: No previous point!\n"); ++ if (ppoints == NULL || numppoints < 2) Error0i("RLineTo: No previous point!\n"); + FindStems( currx, curry, currx-ppoints[numppoints-2].x, curry-ppoints[numppoints-2].y, dx, dy); + + /* Allocate a new path point and pre-setup data */ +@@ -1729,7 +1730,7 @@ + long pindex = 0; + + /* compute hinting for previous point! */ +- if (ppoints == NULL) Error0i("RRCurveTo: No previous point!\n"); ++ if (ppoints == NULL || numppoints < 2) Error0i("RRCurveTo: No previous point!\n"); + FindStems( currx, curry, currx-ppoints[numppoints-2].x, curry-ppoints[numppoints-2].y, dx1, dy1); + + /* Allocate three new path points and pre-setup data */ +@@ -1788,7 +1789,9 @@ + long tmpind; + double deltax = 0.0; + double deltay = 0.0; +- ++ ++ if (ppoints == NULL || numppoints < 1) Error0i("DoClosePath: No previous point!"); ++ + /* If this ClosePath command together with the starting point of this + path completes to a segment aligned to a stem, we would miss + hinting for this point. --> Check and explicitly care for this! */ +@@ -1803,6 +1806,7 @@ + deltax = ppoints[i].x - ppoints[numppoints-1].x; + deltay = ppoints[i].y - ppoints[numppoints-1].y; + ++ if (ppoints == NULL || numppoints <= i + 1) Error0i("DoClosePath: No previous point!"); + /* save nummppoints and reset to move point */ + tmpind = numppoints; + numppoints = i + 1; +@@ -1905,7 +1909,7 @@ + FindStems( currx, curry, 0, 0, dx, dy); + } + else { +- if (ppoints == NULL) Error0i("RMoveTo: No previous point!\n"); ++ if (ppoints == NULL || numppoints < 2) Error0i("RMoveTo: No previous point!\n"); + FindStems( currx, curry, ppoints[numppoints-2].x, ppoints[numppoints-2].y, dx, dy); + } + +@@ -2155,6 +2159,7 @@ + DOUBLE cx, cy; + DOUBLE ex, ey; + ++ if (ppoints == NULL || numppoints < 8) Error0v("FlxProc: No previous point!"); + + /* Our PPOINT list now contains 7 moveto commands which + are about to be consumed by the Flex mechanism. --> Remove these +@@ -2324,6 +2329,7 @@ + /* Returns currentpoint on stack */ + static void FlxProc2() + { ++ if (ppoints == NULL || numppoints < 1) Error0v("FlxProc2: No previous point!"); + /* Push CurrentPoint on fake PostScript stack */ + PSFakePush( ppoints[numppoints-1].x); + PSFakePush( ppoints[numppoints-1].y); diff --git a/gnu/packages/patches/vorbis-tools-CVE-2014-9638+CVE-2014-9639.patch b/gnu/packages/patches/vorbis-tools-CVE-2014-9638+CVE-2014-9639.patch new file mode 100644 index 0000000000..6e389dd59e --- /dev/null +++ b/gnu/packages/patches/vorbis-tools-CVE-2014-9638+CVE-2014-9639.patch @@ -0,0 +1,83 @@ +From: Petter Reinholdtsen <pere@debian.org> +Date: Tue, 22 Sep 2015 15:14:06 +0200 +Subject: oggenc: validate count of channels in the header (CVE-2014-9638 & + CVE-2014-9639) + +Author: Kamil Dudka <kdudka@redhat.com> +Origin: http://lists.xiph.org/pipermail/vorbis-dev/2015-February/020423.html +Bug: https://trac.xiph.org/ticket/2136 +Bug: https://trac.xiph.org/ticket/2137 +Bug-Debian: https://bugs.debian.org/776086 +Forwarded: not-needed +Reviewed-By: Petter Reinholdtsen <pere@hungry.com> +Last-Update: 2015-09-22 +--- + oggenc/audio.c | 18 ++++++++++++++++-- + 1 file changed, 16 insertions(+), 2 deletions(-) + +diff --git a/oggenc/audio.c b/oggenc/audio.c +index 05e42b3..1b3f179 100644 +--- a/oggenc/audio.c ++++ b/oggenc/audio.c +@@ -13,6 +13,7 @@ + #include <config.h> + #endif + ++#include <limits.h> + #include <stdlib.h> + #include <stdio.h> + #include <string.h> +@@ -251,6 +252,7 @@ int aiff_open(FILE *in, oe_enc_opt *opt, unsigned char *buf, int buflen) + aiff_fmt format; + aifffile *aiff = malloc(sizeof(aifffile)); + int i; ++ long channels; + + if(buf[11]=='C') + aifc=1; +@@ -277,11 +279,16 @@ int aiff_open(FILE *in, oe_enc_opt *opt, unsigned char *buf, int buflen) + return 0; + } + +- format.channels = READ_U16_BE(buffer); ++ format.channels = channels = READ_U16_BE(buffer); + format.totalframes = READ_U32_BE(buffer+2); + format.samplesize = READ_U16_BE(buffer+6); + format.rate = (int)read_IEEE80(buffer+8); + ++ if(channels <= 0L || SHRT_MAX < channels) ++ { ++ fprintf(stderr, _("Warning: Unsupported count of channels in AIFF header\n")); ++ return 0; ++ } + aiff->bigendian = 1; + + if(aifc) +@@ -412,6 +419,7 @@ int wav_open(FILE *in, oe_enc_opt *opt, unsigned char *oldbuf, int buflen) + wav_fmt format; + wavfile *wav = malloc(sizeof(wavfile)); + int i; ++ long channels; + + /* Ok. At this point, we know we have a WAV file. Now we have to detect + * whether we support the subtype, and we have to find the actual data +@@ -449,12 +457,18 @@ int wav_open(FILE *in, oe_enc_opt *opt, unsigned char *oldbuf, int buflen) + } + + format.format = READ_U16_LE(buf); +- format.channels = READ_U16_LE(buf+2); ++ format.channels = channels = READ_U16_LE(buf+2); + format.samplerate = READ_U32_LE(buf+4); + format.bytespersec = READ_U32_LE(buf+8); + format.align = READ_U16_LE(buf+12); + format.samplesize = READ_U16_LE(buf+14); + ++ if(channels <= 0L || SHRT_MAX < channels) ++ { ++ fprintf(stderr, _("Warning: Unsupported count of channels in WAV header\n")); ++ return 0; ++ } ++ + if(format.format == -2) /* WAVE_FORMAT_EXTENSIBLE */ + { + if(len<40) diff --git a/gnu/packages/patches/vorbis-tools-CVE-2014-9640.patch b/gnu/packages/patches/vorbis-tools-CVE-2014-9640.patch new file mode 100644 index 0000000000..97d18e0db7 --- /dev/null +++ b/gnu/packages/patches/vorbis-tools-CVE-2014-9640.patch @@ -0,0 +1,29 @@ +Index: vorbis-tools/oggenc/oggenc.c
+===================================================================
+--- vorbis-tools/oggenc/oggenc.c (revision 19116)
++++ vorbis-tools/oggenc/oggenc.c (revision 19117)
+@@ -98,4 +98,6 @@
+ 0,0,0.f,
+ 0, 0, 0, 0, 0};
++ input_format raw_format = {NULL, 0, raw_open, wav_close, "raw",
++ N_("RAW file reader")};
+
+ int i;
+@@ -240,6 +242,4 @@
+ if(opt.rawmode)
+ {
+- input_format raw_format = {NULL, 0, raw_open, wav_close, "raw",
+- N_("RAW file reader")};
+
+ enc_opts.rate=opt.raw_samplerate;
+Index: vorbis-tools/oggenc/skeleton.h
+===================================================================
+--- vorbis-tools/oggenc/skeleton.h (revision 19116)
++++ vorbis-tools/oggenc/skeleton.h (revision 19117)
+@@ -42,5 +42,5 @@
+ ogg_int64_t start_granule; /* start granule value */
+ ogg_uint32_t preroll; /* preroll */
+- unsigned char granule_shift; // a 8-bit field /* 1 byte value holding the granule shift */
++ unsigned char granule_shift; /* 1 byte value holding the granule shift */
+ char *message_header_fields; /* holds all the message header fields */
+ /* current total size of the message header fields, for realloc purpose, initially zero */
diff --git a/gnu/packages/patches/vte-CVE-2012-2738-pt1.patch b/gnu/packages/patches/vte-CVE-2012-2738-pt1.patch new file mode 100644 index 0000000000..fd45407939 --- /dev/null +++ b/gnu/packages/patches/vte-CVE-2012-2738-pt1.patch @@ -0,0 +1,40 @@ +From feeee4b5832b17641e505b7083e0d299fdae318e Mon Sep 17 00:00:00 2001 +From: Christian Persch <chpe@gnome.org> +Date: Sat, 19 May 2012 17:36:09 +0000 +Subject: emulation: Limit integer arguments to 65535 + +To guard against malicious sequences containing excessively big numbers, +limit all parsed numbers to 16 bit range. Doing this here in the parsing +routine is a catch-all guard; this doesn't preclude enforcing +more stringent limits in the handlers themselves. + +https://bugzilla.gnome.org/show_bug.cgi?id=676090 +--- +diff --git a/src/table.c b/src/table.c +index 140e8c8..85cf631 100644 +--- a/src/table.c ++++ b/src/table.c +@@ -550,7 +550,7 @@ _vte_table_extract_numbers(GValueArray **array, + if (G_UNLIKELY (*array == NULL)) { + *array = g_value_array_new(1); + } +- g_value_set_long(&value, total); ++ g_value_set_long(&value, CLAMP (total, 0, G_MAXUSHORT)); + g_value_array_append(*array, &value); + } while (i++ < arginfo->length); + g_value_unset(&value); +diff --git a/src/vteseq.c b/src/vteseq.c +index 457c06a..46def5b 100644 +--- a/src/vteseq.c ++++ b/src/vteseq.c +@@ -557,7 +557,7 @@ vte_sequence_handler_multiple(VteTerminal *terminal, + GValueArray *params, + VteTerminalSequenceHandler handler) + { +- vte_sequence_handler_multiple_limited(terminal, params, handler, G_MAXLONG); ++ vte_sequence_handler_multiple_limited(terminal, params, handler, G_MAXUSHORT); + } + + static void +-- +cgit v0.9.0.2 diff --git a/gnu/packages/patches/vte-CVE-2012-2738-pt2.patch b/gnu/packages/patches/vte-CVE-2012-2738-pt2.patch new file mode 100644 index 0000000000..e98fd35b95 --- /dev/null +++ b/gnu/packages/patches/vte-CVE-2012-2738-pt2.patch @@ -0,0 +1,82 @@ +From 98ce2f265f986fb88c38d508286bb5e3716b9e74 Mon Sep 17 00:00:00 2001 +From: Christian Persch <chpe@gnome.org> +Date: Sat, 19 May 2012 18:04:12 +0000 +Subject: emulation: Limit repetitions + +Don't allow malicious sequences to cause excessive repetitions. + +https://bugzilla.gnome.org/show_bug.cgi?id=676090 +--- +diff --git a/src/vteseq.c b/src/vteseq.c +index 46def5b..7fb4707 100644 +--- a/src/vteseq.c ++++ b/src/vteseq.c +@@ -1397,7 +1397,7 @@ vte_sequence_handler_dc (VteTerminal *terminal, GValueArray *params) + static void + vte_sequence_handler_DC (VteTerminal *terminal, GValueArray *params) + { +- vte_sequence_handler_multiple(terminal, params, vte_sequence_handler_dc); ++ vte_sequence_handler_multiple_r(terminal, params, vte_sequence_handler_dc); + } + + /* Delete a line at the current cursor position. */ +@@ -1790,7 +1790,7 @@ vte_sequence_handler_reverse_index (VteTerminal *terminal, GValueArray *params) + static void + vte_sequence_handler_RI (VteTerminal *terminal, GValueArray *params) + { +- vte_sequence_handler_multiple(terminal, params, vte_sequence_handler_nd); ++ vte_sequence_handler_multiple_r(terminal, params, vte_sequence_handler_nd); + } + + /* Save cursor (position). */ +@@ -2782,8 +2782,7 @@ vte_sequence_handler_insert_lines (VteTerminal *terminal, GValueArray *params) + { + GValue *value; + VteScreen *screen; +- long param, end, row; +- int i; ++ long param, end, row, i, limit; + screen = terminal->pvt->screen; + /* The default is one. */ + param = 1; +@@ -2801,7 +2800,13 @@ vte_sequence_handler_insert_lines (VteTerminal *terminal, GValueArray *params) + } else { + end = screen->insert_delta + terminal->row_count - 1; + } +- /* Insert the new lines at the cursor. */ ++ ++ /* Only allow to insert as many lines as there are between this row ++ * and the end of the scrolling region. See bug #676090. ++ */ ++ limit = end - row + 1; ++ param = MIN (param, limit); ++ + for (i = 0; i < param; i++) { + /* Clear a line off the end of the region and add one to the + * top of the region. */ +@@ -2822,8 +2827,7 @@ vte_sequence_handler_delete_lines (VteTerminal *terminal, GValueArray *params) + { + GValue *value; + VteScreen *screen; +- long param, end, row; +- int i; ++ long param, end, row, i, limit; + + screen = terminal->pvt->screen; + /* The default is one. */ +@@ -2842,6 +2846,13 @@ vte_sequence_handler_delete_lines (VteTerminal *terminal, GValueArray *params) + } else { + end = screen->insert_delta + terminal->row_count - 1; + } ++ ++ /* Only allow to delete as many lines as there are between this row ++ * and the end of the scrolling region. See bug #676090. ++ */ ++ limit = end - row + 1; ++ param = MIN (param, limit); ++ + /* Clear them from below the current cursor. */ + for (i = 0; i < param; i++) { + /* Insert a line at the end of the region and remove one from +-- +cgit v0.9.0.2 diff --git a/gnu/packages/patches/wordnet-CVE-2008-2149.patch b/gnu/packages/patches/wordnet-CVE-2008-2149.patch new file mode 100644 index 0000000000..9828efa4bc --- /dev/null +++ b/gnu/packages/patches/wordnet-CVE-2008-2149.patch @@ -0,0 +1,19 @@ +Fix CVE-2008-2149: buffer overflows by limiting the length of the string in sprintf +format string +Closes: #481186 (CVE-2008-2149) +Please note: The WordNet code contains several other occurences of potentially +exploitable functions like strcpy()/strcat()/... and so even if there are no +known exploits the code needs a full security audit. + +--- a/src/wn.c ++++ b/src/wn.c +@@ -206,7 +206,8 @@ static int searchwn(int ac, char *av[]) + outsenses += do_search(av[1], optptr->pos, optptr->search, + whichsense, optptr->label); + } else { +- sprintf(tmpbuf, "wn: invalid search option: %s\n", av[j]); ++ /* Fix CVE-2008-2149: buffer overflows Andreas Tille <tille@debian.org> */ ++ sprintf(tmpbuf, "wn: invalid search option: %.200s\n", av[j]); + display_message(tmpbuf); + errcount++; + } diff --git a/gnu/packages/patches/wordnet-CVE-2008-3908-pt1.patch b/gnu/packages/patches/wordnet-CVE-2008-3908-pt1.patch new file mode 100644 index 0000000000..a2e796b535 --- /dev/null +++ b/gnu/packages/patches/wordnet-CVE-2008-3908-pt1.patch @@ -0,0 +1,710 @@ +Author: Anton Gladky <gladk@debian.org> +LastChanged: Tue, 26 Feb 2013 20:40:25 +0100 +BugDebian: http://bugs.debian.org/700914 +Description: This patch was created by oCert according to + http://www.ocert.org/advisories/ocert-2008-014.html + and can be downloaded from + http://www.ocert.org/analysis/2008-014/wordnet.patch + Unfortunately the original patch had a problem which + caused 'wordnet test -synsn' to fail. The critical + part of the patch was removed from the whole patch + set and is moved to 51_overflows_memcpy.patch which + uses memcpy instead of the formerly used strcpy. + +--- a/lib/binsrch.c ++++ b/lib/binsrch.c +@@ -28,7 +28,7 @@ char *read_index(long offset, FILE *fp) + char *linep; + + linep = line; +- line[0] = '0'; ++ line[0] = '\0'; + + fseek( fp, offset, SEEK_SET ); + fgets(linep, LINE_LEN, fp); +@@ -58,6 +58,8 @@ char *bin_search(char *searchkey, FILE * + last_bin_search_offset = ftell( fp ); + fgets(linep, LINE_LEN, fp); + length = (int)(strchr(linep, ' ') - linep); ++ if (length > (sizeof(key) - 1)) ++ return(NULL); + strncpy(key, linep, length); + key[length] = '\0'; + if(strcmp(key, searchkey) < 0) { +@@ -110,6 +112,8 @@ static int bin_search_key(char *searchke + line[length++] = c; + if (getc(fp) == EOF) { /* only 1 line in file */ + length = (int)(strchr(linep, ' ') - linep); ++ if (length > (sizeof(key) - 1)) ++ return(0); + strncpy(key, linep, length); + key[length] = '\0'; + if(strcmp(key, searchkey) > 0) { +@@ -132,6 +136,8 @@ static int bin_search_key(char *searchke + if (fgets(linep, LINE_LEN, fp) != NULL) { + offset2 = ftell(fp); /* offset at start of next line */ + length = (int)(strchr(linep, ' ') - linep); ++ if (length > (sizeof(key) - 1)) ++ return(0); + strncpy(key, linep, length); + key[length] = '\0'; + if(strcmp(key, searchkey) < 0) { /* further in file */ +--- a/lib/morph.c ++++ b/lib/morph.c +@@ -51,21 +51,21 @@ static struct { + char *str; + int strlen; + } prepositions[NUMPREPS] = { +- "to", 2, +- "at", 2, +- "of", 2, +- "on", 2, +- "off", 3, +- "in", 2, +- "out", 3, +- "up", 2, +- "down", 4, +- "from", 4, +- "with", 4, +- "into", 4, +- "for", 3, +- "about", 5, +- "between", 7, ++ { "to", 2 }, ++ { "at", 2 }, ++ { "of", 2 }, ++ { "on", 2 }, ++ { "off", 3 }, ++ { "in", 2 }, ++ { "out", 3 }, ++ { "up", 2 }, ++ { "down", 4 }, ++ { "from", 4 }, ++ { "with", 4 }, ++ { "into", 4 }, ++ { "for", 3 }, ++ { "about", 5 }, ++ { "between", 7 } + }; + + static FILE *exc_fps[NUMPARTS + 1]; +@@ -144,18 +144,19 @@ static int do_init(void) + } else + sprintf(searchdir, DEFAULTPATH); + #else +- if ((env = getenv("WNSEARCHDIR")) != NULL) +- strcpy(searchdir, env); +- else if ((env = getenv("WNHOME")) != NULL) +- sprintf(searchdir, "%s%s", env, DICTDIR); +- else ++ if ((env = getenv("WNSEARCHDIR")) != NULL) { ++ snprintf(searchdir, sizeof(searchdir), "%s", env); ++ } else if ((env = getenv("WNHOME")) != NULL) { ++ snprintf(searchdir, sizeof(searchdir), "%s%s", env, DICTDIR); ++ } else { + strcpy(searchdir, DEFAULTPATH); ++ } + #endif + + for (i = 1; i <= NUMPARTS; i++) { +- sprintf(fname, EXCFILE, searchdir, partnames[i]); ++ snprintf(fname, sizeof(fname), EXCFILE, searchdir, partnames[i]); + if ((exc_fps[i] = fopen(fname, "r")) == NULL) { +- sprintf(msgbuf, ++ snprintf(msgbuf, sizeof(msgbuf), + "WordNet library error: Can't open exception file(%s)\n\n", + fname); + display_message(msgbuf); +@@ -178,13 +179,16 @@ char *morphstr(char *origstr, int pos) + int prep; + char *end_idx1, *end_idx2; + char *append; +- ++ + if (pos == SATELLITE) + pos = ADJ; + + /* First time through for this string */ + + if (origstr != NULL) { ++ if (strlen(origstr) > WORDBUF - 1) ++ return(NULL); ++ + /* Assume string hasn't had spaces substitued with '_' */ + strtolower(strsubst(strcpy(str, origstr), ' ', '_')); + searchstr[0] = '\0'; +@@ -232,7 +236,7 @@ char *morphstr(char *origstr, int pos) + if (end_idx < 0) return(NULL); /* shouldn't do this */ + strncpy(word, str + st_idx, end_idx - st_idx); + word[end_idx - st_idx] = '\0'; +- if(tmp = morphword(word, pos)) ++ if ((tmp = morphword(word, pos)) != NULL) + strcat(searchstr,tmp); + else + strcat(searchstr,word); +@@ -240,7 +244,7 @@ char *morphstr(char *origstr, int pos) + st_idx = end_idx + 1; + } + +- if(tmp = morphword(strcpy(word, str + st_idx), pos)) ++ if ((tmp = morphword(strcpy(word, str + st_idx), pos)) != NULL) + strcat(searchstr,tmp); + else + strcat(searchstr,word); +@@ -270,16 +274,15 @@ char *morphword(char *word, int pos) + { + int offset, cnt; + int i; +- static char retval[WORDBUF]; +- char *tmp, tmpbuf[WORDBUF], *end; +- +- sprintf(retval,""); +- sprintf(tmpbuf, ""); +- end = ""; +- ++ static char retval[WORDBUF] = ""; ++ char *tmp, tmpbuf[WORDBUF] = "", *end = ""; ++ + if(word == NULL) + return(NULL); + ++ if (strlen(word) > WORDBUF - 1) ++ return(NULL); ++ + /* first look for word on exception list */ + + if((tmp = exc_lookup(word, pos)) != NULL) +@@ -335,7 +338,10 @@ static char *wordbase(char *word, int en + { + char *pt1; + static char copy[WORDBUF]; +- ++ ++ if (strlen(word) > WORDBUF - 1) ++ return(NULL); ++ + strcpy(copy, word); + if(strend(copy,sufx[ender])) { + pt1=strchr(copy,'\0'); +@@ -368,13 +374,14 @@ static char *exc_lookup(char *word, int + { + static char line[WORDBUF], *beglp, *endlp; + char *excline; +- int found = 0; + + if (exc_fps[pos] == NULL) + return(NULL); + + /* first time through load line from exception file */ + if(word != NULL){ ++ if (strlen(word) > WORDBUF - 1) ++ return(NULL); + if ((excline = bin_search(word, exc_fps[pos])) != NULL) { + strcpy(line, excline); + endlp = strchr(line,' '); +@@ -403,6 +410,9 @@ static char *morphprep(char *s) + char word[WORDBUF], end[WORDBUF]; + static char retval[WORDBUF]; + ++ if (strlen(s) > WORDBUF - 1) ++ return (NULL); ++ + /* Assume that the verb is the first word in the phrase. Strip it + off, check for validity, then try various morphs with the + rest of the phrase tacked on, trying to find a match. */ +@@ -410,7 +420,7 @@ static char *morphprep(char *s) + rest = strchr(s, '_'); + last = strrchr(s, '_'); + if (rest != last) { /* more than 2 words */ +- if (lastwd = morphword(last + 1, NOUN)) { ++ if ((lastwd = morphword(last + 1, NOUN)) != NULL) { + strncpy(end, rest, last - rest + 1); + end[last-rest+1] = '\0'; + strcat(end, lastwd); +--- a/lib/search.c ++++ b/lib/search.c +@@ -13,6 +13,7 @@ + #include <stdlib.h> + #include <string.h> + #include <assert.h> ++#include <limits.h> + + #include "wn.h" + +@@ -119,33 +120,22 @@ IndexPtr parse_index(long offset, int db + if ( !line ) + line = read_index( offset, indexfps[dbase] ); + +- idx = (IndexPtr)malloc(sizeof(Index)); ++ idx = (IndexPtr)calloc(1, sizeof(Index)); + assert(idx); + + /* set offset of entry in index file */ + idx->idxoffset = offset; + +- idx->wd='\0'; +- idx->pos='\0'; +- idx->off_cnt=0; +- idx->tagged_cnt = 0; +- idx->sense_cnt=0; +- idx->offset='\0'; +- idx->ptruse_cnt=0; +- idx->ptruse='\0'; +- + /* get the word */ + ptrtok=strtok(line," \n"); + +- idx->wd = malloc(strlen(ptrtok) + 1); ++ idx->wd = strdup(ptrtok); + assert(idx->wd); +- strcpy(idx->wd, ptrtok); + + /* get the part of speech */ + ptrtok=strtok(NULL," \n"); +- idx->pos = malloc(strlen(ptrtok) + 1); ++ idx->pos = strdup(ptrtok); + assert(idx->pos); +- strcpy(idx->pos, ptrtok); + + /* get the collins count */ + ptrtok=strtok(NULL," \n"); +@@ -154,7 +144,12 @@ IndexPtr parse_index(long offset, int db + /* get the number of pointers types */ + ptrtok=strtok(NULL," \n"); + idx->ptruse_cnt = atoi(ptrtok); +- ++ ++ if (idx->ptruse_cnt < 0 || (unsigned int)idx->ptruse_cnt > UINT_MAX/sizeof(int)) { ++ free_index(idx); ++ return(NULL); ++ } ++ + if (idx->ptruse_cnt) { + idx->ptruse = (int *) malloc(idx->ptruse_cnt * (sizeof(int))); + assert(idx->ptruse); +@@ -173,9 +168,14 @@ IndexPtr parse_index(long offset, int db + /* get the number of senses that are tagged */ + ptrtok=strtok(NULL," \n"); + idx->tagged_cnt = atoi(ptrtok); +- ++ ++ if (idx->off_cnt < 0 || (unsigned long)idx->off_cnt > ULONG_MAX/sizeof(long)) { ++ free_index(idx); ++ return(NULL); ++ } ++ + /* make space for the offsets */ +- idx->offset = (long *) malloc(idx->off_cnt * (sizeof(long))); ++ idx->offset = (unsigned long *) malloc(idx->off_cnt * sizeof(long)); + assert(idx->offset); + + /* get the offsets */ +@@ -197,15 +197,21 @@ IndexPtr getindex(char *searchstr, int d + char strings[MAX_FORMS][WORDBUF]; /* vector of search strings */ + static IndexPtr offsets[MAX_FORMS]; + static int offset; +- ++ + /* This works like strrok(): if passed with a non-null string, + prepare vector of search strings and offsets. If string + is null, look at current list of offsets and return next + one, or NULL if no more alternatives for this word. */ + + if (searchstr != NULL) { ++ /* Bail out if the input is too long for us to handle */ ++ if (strlen(searchstr) > (WORDBUF - 1)) { ++ strcpy(msgbuf, "WordNet library error: search term is too long\n"); ++ display_message(msgbuf); ++ return(NULL); ++ } + +- offset = 0; ++ offset = 0; + strtolower(searchstr); + for (i = 0; i < MAX_FORMS; i++) { + strcpy(strings[i], searchstr); +@@ -229,11 +235,11 @@ IndexPtr getindex(char *searchstr, int d + /* Get offset of first entry. Then eliminate duplicates + and get offsets of unique strings. */ + +- if (strings[0][0] != NULL) ++ if (strings[0] != NULL) + offsets[0] = index_lookup(strings[0], dbase); + + for (i = 1; i < MAX_FORMS; i++) +- if ((strings[i][0]) != NULL && (strcmp(strings[0], strings[i]))) ++ if (strings[i] != NULL && (strcmp(strings[0], strings[i]))) + offsets[i] = index_lookup(strings[i], dbase); + } + +@@ -272,7 +278,7 @@ SynsetPtr read_synset(int dbase, long bo + SynsetPtr parse_synset(FILE *fp, int dbase, char *word) + { + static char line[LINEBUF]; +- char tbuf[SMLINEBUF]; ++ char tbuf[SMLINEBUF] = ""; + char *ptrtok; + char *tmpptr; + int foundpert = 0; +@@ -286,33 +292,11 @@ SynsetPtr parse_synset(FILE *fp, int dba + if ((tmpptr = fgets(line, LINEBUF, fp)) == NULL) + return(NULL); + +- synptr = (SynsetPtr)malloc(sizeof(Synset)); ++ synptr = (SynsetPtr)calloc(1, sizeof(Synset)); + assert(synptr); +- +- synptr->hereiam = 0; ++ + synptr->sstype = DONT_KNOW; +- synptr->fnum = 0; +- synptr->pos = '\0'; +- synptr->wcount = 0; +- synptr->words = '\0'; +- synptr->whichword = 0; +- synptr->ptrcount = 0; +- synptr->ptrtyp = '\0'; +- synptr->ptroff = '\0'; +- synptr->ppos = '\0'; +- synptr->pto = '\0'; +- synptr->pfrm = '\0'; +- synptr->fcount = 0; +- synptr->frmid = '\0'; +- synptr->frmto = '\0'; +- synptr->defn = '\0'; +- synptr->key = 0; +- synptr->nextss = NULL; +- synptr->nextform = NULL; + synptr->searchtype = -1; +- synptr->ptrlist = NULL; +- synptr->headword = NULL; +- synptr->headsense = 0; + + ptrtok = line; + +@@ -322,7 +306,7 @@ SynsetPtr parse_synset(FILE *fp, int dba + + /* sanity check - make sure starting file offset matches first field */ + if (synptr->hereiam != loc) { +- sprintf(msgbuf, "WordNet library error: no synset at location %d\n", ++ sprintf(msgbuf, "WordNet library error: no synset at location %ld\n", + loc); + display_message(msgbuf); + free(synptr); +@@ -335,16 +319,20 @@ SynsetPtr parse_synset(FILE *fp, int dba + + /* looking at POS */ + ptrtok = strtok(NULL, " \n"); +- synptr->pos = malloc(strlen(ptrtok) + 1); ++ synptr->pos = strdup(ptrtok); + assert(synptr->pos); +- strcpy(synptr->pos, ptrtok); + if (getsstype(synptr->pos) == SATELLITE) + synptr->sstype = INDIRECT_ANT; + + /* looking at numwords */ + ptrtok = strtok(NULL, " \n"); + synptr->wcount = strtol(ptrtok, NULL, 16); +- ++ ++ if (synptr->wcount < 0 || (unsigned int)synptr->wcount > UINT_MAX/sizeof(char *)) { ++ free_syns(synptr); ++ return(NULL); ++ } ++ + synptr->words = (char **)malloc(synptr->wcount * sizeof(char *)); + assert(synptr->words); + synptr->wnsns = (int *)malloc(synptr->wcount * sizeof(int)); +@@ -354,9 +342,8 @@ SynsetPtr parse_synset(FILE *fp, int dba + + for (i = 0; i < synptr->wcount; i++) { + ptrtok = strtok(NULL, " \n"); +- synptr->words[i] = malloc(strlen(ptrtok) + 1); ++ synptr->words[i] = strdup(ptrtok); + assert(synptr->words[i]); +- strcpy(synptr->words[i], ptrtok); + + /* is this the word we're looking for? */ + +@@ -371,6 +358,12 @@ SynsetPtr parse_synset(FILE *fp, int dba + ptrtok = strtok(NULL," \n"); + synptr->ptrcount = atoi(ptrtok); + ++ /* Should we check for long here as well? */ ++ if (synptr->ptrcount < 0 || (unsigned int)synptr->ptrcount > UINT_MAX/sizeof(int)) { ++ free_syns(synptr); ++ return(NULL); ++ } ++ + if (synptr->ptrcount) { + + /* alloc storage for the pointers */ +@@ -455,21 +448,23 @@ SynsetPtr parse_synset(FILE *fp, int dba + ptrtok = strtok(NULL," \n"); + if (ptrtok) { + ptrtok = strtok(NULL," \n"); +- sprintf(tbuf, ""); + while (ptrtok != NULL) { ++ if (strlen(ptrtok) + strlen(tbuf) + 1 + 1 > sizeof(tbuf)) { ++ free_syns(synptr); ++ return(NULL); ++ } + strcat(tbuf,ptrtok); + ptrtok = strtok(NULL, " \n"); + if(ptrtok) + strcat(tbuf," "); + } +- assert((1 + strlen(tbuf)) < sizeof(tbuf)); +- synptr->defn = malloc(strlen(tbuf) + 4); ++ synptr->defn = malloc(strlen(tbuf) + 3); + assert(synptr->defn); + sprintf(synptr->defn,"(%s)",tbuf); + } + + if (keyindexfp) { /* we have unique keys */ +- sprintf(tmpbuf, "%c:%8.8d", partchars[dbase], synptr->hereiam); ++ sprintf(tmpbuf, "%c:%8.8ld", partchars[dbase], synptr->hereiam); + synptr->key = GetKeyForOffset(tmpbuf); + } + +@@ -635,7 +630,7 @@ static void traceptrs(SynsetPtr synptr, + + if ((ptrtyp == PERTPTR || ptrtyp == PPLPTR) && + synptr->pto[i] != 0) { +- sprintf(tbuf, " (Sense %d)\n", ++ snprintf(tbuf, sizeof(tbuf), " (Sense %d)\n", + cursyn->wnsns[synptr->pto[i] - 1]); + printsynset(prefix, cursyn, tbuf, DEFOFF, synptr->pto[i], + SKIP_ANTS, PRINT_MARKER); +@@ -656,7 +651,7 @@ static void traceptrs(SynsetPtr synptr, + traceptrs(cursyn, HYPERPTR, getpos(cursyn->pos), 0); + } + } else if (ptrtyp == ANTPTR && dbase != ADJ && synptr->pto[i] != 0) { +- sprintf(tbuf, " (Sense %d)\n", ++ snprintf(tbuf, sizeof(tbuf), " (Sense %d)\n", + cursyn->wnsns[synptr->pto[i] - 1]); + printsynset(prefix, cursyn, tbuf, DEFOFF, synptr->pto[i], + SKIP_ANTS, PRINT_MARKER); +@@ -817,7 +812,7 @@ static void tracenomins(SynsetPtr synptr + + cursyn = read_synset(synptr->ppos[i], synptr->ptroff[i], ""); + +- sprintf(tbuf, "#%d\n", ++ snprintf(tbuf, sizeof(tbuf), "#%d\n", + cursyn->wnsns[synptr->pto[i] - 1]); + printsynset(prefix, cursyn, tbuf, DEFOFF, synptr->pto[i], + SKIP_ANTS, SKIP_MARKER); +@@ -989,12 +984,12 @@ void getexample(char *offset, char *wd) + char sentbuf[512]; + + if (vsentfilefp != NULL) { +- if (line = bin_search(offset, vsentfilefp)) { ++ if ((line = bin_search(offset, vsentfilefp)) != NULL) { + while(*line != ' ') + line++; + + printbuffer(" EX: "); +- sprintf(sentbuf, line, wd); ++ snprintf(sentbuf, sizeof(sentbuf), line, wd); + printbuffer(sentbuf); + } + } +@@ -1011,7 +1006,7 @@ int findexample(SynsetPtr synptr) + if (vidxfilefp != NULL) { + wdnum = synptr->whichword - 1; + +- sprintf(tbuf,"%s%%%-1.1d:%-2.2d:%-2.2d::", ++ snprintf(tbuf, sizeof(tbuf), "%s%%%-1.1d:%-2.2d:%-2.2d::", + synptr->words[wdnum], + getpos(synptr->pos), + synptr->fnum, +@@ -1124,7 +1119,7 @@ static void freq_word(IndexPtr index) + if (cnt >= 17 && cnt <= 32) familiar = 6; + if (cnt > 32 ) familiar = 7; + +- sprintf(tmpbuf, ++ snprintf(tmpbuf, sizeof(tmpbuf), + "\n%s used as %s is %s (polysemy count = %d)\n", + index->wd, a_an[getpos(index->pos)], freqcats[familiar], cnt); + printbuffer(tmpbuf); +@@ -1147,6 +1142,9 @@ void wngrep (char *word_passed, int pos) + } + rewind(inputfile); + ++ if (strlen(word_passed) + 1 > sizeof(word)) ++ return; ++ + strcpy (word, word_passed); + ToLowerCase(word); /* map to lower case for index file search */ + strsubst (word, ' ', '_'); /* replace spaces with underscores */ +@@ -1169,7 +1167,7 @@ void wngrep (char *word_passed, int pos) + ((line[loc + wordlen] == '-') || (line[loc + wordlen] == '_'))) + ) { + strsubst (line, '_', ' '); +- sprintf (tmpbuf, "%s\n", line); ++ snprintf (tmpbuf, sizeof(tmpbuf), "%s\n", line); + printbuffer (tmpbuf); + break; + } +@@ -1683,9 +1681,8 @@ SynsetPtr traceptrs_ds(SynsetPtr synptr, + cursyn = read_synset(synptr->ppos[i], + synptr->ptroff[i], + ""); +- synptr->headword = malloc(strlen(cursyn->words[0]) + 1); ++ synptr->headword = strdup(cursyn->words[0]); + assert(synptr->headword); +- strcpy(synptr->headword, cursyn->words[0]); + synptr->headsense = cursyn->lexid[0]; + free_synset(cursyn); + break; +@@ -2013,7 +2010,7 @@ static int getsearchsense(SynsetPtr synp + strsubst(strcpy(wdbuf, synptr->words[whichword - 1]), ' ', '_'); + strtolower(wdbuf); + +- if (idx = index_lookup(wdbuf, getpos(synptr->pos))) { ++ if ((idx = index_lookup(wdbuf, getpos(synptr->pos))) != NULL) { + for (i = 0; i < idx->off_cnt; i++) + if (idx->offset[i] == synptr->hereiam) { + free_index(idx); +@@ -2037,7 +2034,7 @@ static void printsynset(char *head, Syns + by flags */ + + if (offsetflag) /* print synset offset */ +- sprintf(tbuf + strlen(tbuf),"{%8.8d} ", synptr->hereiam); ++ sprintf(tbuf + strlen(tbuf),"{%8.8ld} ", synptr->hereiam); + if (fileinfoflag) { /* print lexicographer file information */ + sprintf(tbuf + strlen(tbuf), "<%s> ", lexfiles[synptr->fnum]); + prlexid = 1; /* print lexicographer id after word */ +@@ -2072,7 +2069,7 @@ static void printantsynset(SynsetPtr syn + tbuf[0] = '\0'; + + if (offsetflag) +- sprintf(tbuf,"{%8.8d} ", synptr->hereiam); ++ sprintf(tbuf,"{%8.8ld} ", synptr->hereiam); + if (fileinfoflag) { + sprintf(tbuf + strlen(tbuf),"<%s> ", lexfiles[synptr->fnum]); + prlexid = 1; +--- a/lib/wnutil.c ++++ b/lib/wnutil.c +@@ -48,7 +48,7 @@ int wninit(void) + char *env; + + if (!done) { +- if (env = getenv("WNDBVERSION")) { ++ if ((env = getenv("WNDBVERSION")) != NULL) { + wnrelease = strdup(env); /* set release */ + assert(wnrelease); + } +@@ -70,7 +70,7 @@ int re_wninit(void) + + closefps(); + +- if (env = getenv("WNDBVERSION")) { ++ if ((env = getenv("WNDBVERSION")) != NULL) { + wnrelease = strdup(env); /* set release */ + assert(wnrelease); + } +@@ -149,25 +149,25 @@ static int do_init(void) + sprintf(searchdir, DEFAULTPATH); + #else + if ((env = getenv("WNSEARCHDIR")) != NULL) +- strcpy(searchdir, env); ++ snprintf(searchdir, sizeof(searchdir), "%s", env); + else if ((env = getenv("WNHOME")) != NULL) +- sprintf(searchdir, "%s%s", env, DICTDIR); ++ snprintf(searchdir, sizeof(searchdir), "%s%s", env, DICTDIR); + else + strcpy(searchdir, DEFAULTPATH); + #endif + + for (i = 1; i < NUMPARTS + 1; i++) { +- sprintf(tmpbuf, DATAFILE, searchdir, partnames[i]); ++ snprintf(tmpbuf, sizeof(tmpbuf), DATAFILE, searchdir, partnames[i]); + if((datafps[i] = fopen(tmpbuf, "r")) == NULL) { +- sprintf(msgbuf, ++ snprintf(msgbuf, sizeof(msgbuf), + "WordNet library error: Can't open datafile(%s)\n", + tmpbuf); + display_message(msgbuf); + openerr = -1; + } +- sprintf(tmpbuf, INDEXFILE, searchdir, partnames[i]); ++ snprintf(tmpbuf, sizeof(tmpbuf), INDEXFILE, searchdir, partnames[i]); + if((indexfps[i] = fopen(tmpbuf, "r")) == NULL) { +- sprintf(msgbuf, ++ snprintf(msgbuf, sizeof(msgbuf), + "WordNet library error: Can't open indexfile(%s)\n", + tmpbuf); + display_message(msgbuf); +@@ -178,35 +178,35 @@ static int do_init(void) + /* This file isn't used by the library and doesn't have to + be present. No error is reported if the open fails. */ + +- sprintf(tmpbuf, SENSEIDXFILE, searchdir); ++ snprintf(tmpbuf, sizeof(tmpbuf), SENSEIDXFILE, searchdir); + sensefp = fopen(tmpbuf, "r"); + + /* If this file isn't present, the runtime code will skip printint out + the number of times each sense was tagged. */ + +- sprintf(tmpbuf, CNTLISTFILE, searchdir); ++ snprintf(tmpbuf, sizeof(tmpbuf), CNTLISTFILE, searchdir); + cntlistfp = fopen(tmpbuf, "r"); + + /* This file doesn't have to be present. No error is reported if the + open fails. */ + +- sprintf(tmpbuf, KEYIDXFILE, searchdir); ++ snprintf(tmpbuf, sizeof(tmpbuf), KEYIDXFILE, searchdir); + keyindexfp = fopen(tmpbuf, "r"); + +- sprintf(tmpbuf, REVKEYIDXFILE, searchdir); ++ snprintf(tmpbuf, sizeof(tmpbuf), REVKEYIDXFILE, searchdir); + revkeyindexfp = fopen(tmpbuf, "r"); + +- sprintf(tmpbuf, VRBSENTFILE, searchdir); ++ snprintf(tmpbuf, sizeof(tmpbuf), VRBSENTFILE, searchdir); + if ((vsentfilefp = fopen(tmpbuf, "r")) == NULL) { +- sprintf(msgbuf, ++ snprintf(msgbuf, sizeof(msgbuf), + "WordNet library warning: Can't open verb example sentence file(%s)\n", + tmpbuf); + display_message(msgbuf); + } + +- sprintf(tmpbuf, VRBIDXFILE, searchdir); ++ snprintf(tmpbuf, sizeof(tmpbuf), VRBIDXFILE, searchdir); + if ((vidxfilefp = fopen(tmpbuf, "r")) == NULL) { +- sprintf(msgbuf, ++ snprintf(msgbuf, sizeof(msgbuf), + "WordNet library warning: Can't open verb example sentence index file(%s)\n", + tmpbuf); + display_message(msgbuf); +--- a/src/wn.c ++++ b/src/wn.c +@@ -131,7 +131,7 @@ static void printusage(), printlicense() + printsearches(char *, int, unsigned long); + static int error_message(char *); + +-main(int argc,char *argv[]) ++int main(int argc,char *argv[]) + { + display_message = error_message; + +@@ -228,14 +228,14 @@ static int do_search(char *searchword, i + printf("\n%s of %s %s\n%s", + label, partnames[pos], searchword, outbuf); + +- if (morphword = morphstr(searchword, pos)) ++ if ((morphword = morphstr(searchword, pos)) != NULL) + do { + outbuf = findtheinfo(morphword, pos, search, whichsense); + totsenses += wnresults.printcnt; + if (strlen(outbuf) > 0) + printf("\n%s of %s %s\n%s", + label, partnames[pos], morphword, outbuf); +- } while (morphword = morphstr(NULL, pos)); ++ } while ((morphword = morphstr(NULL, pos)) != NULL); + + return(totsenses); + } diff --git a/gnu/packages/patches/wordnet-CVE-2008-3908-pt2.patch b/gnu/packages/patches/wordnet-CVE-2008-3908-pt2.patch new file mode 100644 index 0000000000..2ef2239a7f --- /dev/null +++ b/gnu/packages/patches/wordnet-CVE-2008-3908-pt2.patch @@ -0,0 +1,18 @@ +This patch was created by oCert according to + http://www.ocert.org/advisories/ocert-2008-014.html +Unfortunately the original patch contained a bug which was +later fixed by the issuer of the patch Rob Holland <rob@ocert.org> +This part was now separated in this file. + +--- a/lib/search.c ++++ b/lib/search.c +@@ -1568,7 +1568,8 @@ char *findtheinfo(char *searchstr, int d + bufstart[0] = '\n'; + bufstart++; + } +- strncpy(bufstart, tmpbuf, strlen(tmpbuf)); ++ /* Avoid writing a trailing \0 after the string */ ++ memcpy(bufstart, tmpbuf, strlen(tmpbuf)); + bufstart = searchbuffer + strlen(searchbuffer); + } + } diff --git a/gnu/packages/pciutils.scm b/gnu/packages/pciutils.scm index e022b6a81d..553e3f8cac 100644 --- a/gnu/packages/pciutils.scm +++ b/gnu/packages/pciutils.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -23,50 +24,48 @@ #:use-module (guix build-system gnu) #:use-module (gnu packages compression) #:use-module (gnu packages pkg-config) + #:use-module (gnu packages linux) #:use-module (gnu packages base)) (define-public pciutils (package (name "pciutils") - (version "3.3.1") + (version "3.5.1") (source (origin (method url-fetch) (uri (string-append "mirror://kernel.org/software/utils/pciutils/pciutils-" - version - ".tar.xz")) + version ".tar.xz")) (sha256 (base32 - "1ag3skny1bamqil46dlppw8j1fp08spqa60fjygbxkg4fzdknjji")))) + "0byl2f897w5lhs4bvr6p7qwcz9bllj2zyfv7nywbcbsnb9ha9wrb")))) (build-system gnu-build-system) (arguments - '(#:phases (alist-replace - 'configure - (lambda* (#:key outputs #:allow-other-keys) - ;; There's no 'configure' script, just a raw makefile. - (substitute* "Makefile" - (("^PREFIX=.*$") - (string-append "PREFIX := " (assoc-ref outputs "out") - "\n")) - (("^MANDIR:=.*$") - ;; By default the thing tries to automatically - ;; determine whether to use $prefix/man or - ;; $prefix/share/man, and wrongly so. - (string-append "MANDIR := " (assoc-ref outputs "out") - "/share/man\n")) - (("^SHARED=.*$") - ;; Build libpciutils.so. - "SHARED := yes\n") - (("^ZLIB=.*$") - ;; Ask for zlib support. - "ZLIB := yes\n"))) - - (alist-replace - 'install - (lambda* (#:key outputs #:allow-other-keys) - ;; Install the commands, library, and .pc files. - (zero? (system* "make" "install" "install-lib"))) - %standard-phases)) + '(#:phases + (modify-phases %standard-phases + (replace 'configure + (lambda* (#:key outputs #:allow-other-keys) + ;; There's no 'configure' script, just a raw makefile. + (substitute* "Makefile" + (("^PREFIX=.*$") + (string-append "PREFIX := " (assoc-ref outputs "out") + "\n")) + (("^MANDIR:=.*$") + ;; By default the thing tries to automatically + ;; determine whether to use $prefix/man or + ;; $prefix/share/man, and wrongly so. + (string-append "MANDIR := " (assoc-ref outputs "out") + "/share/man\n")) + (("^SHARED=.*$") + ;; Build libpciutils.so. + "SHARED := yes\n") + (("^ZLIB=.*$") + ;; Ask for zlib support. + "ZLIB := yes\n")))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + ;; Install the commands, library, and .pc files. + (zero? (system* "make" "install" "install-lib"))))) ;; Make sure programs have an RPATH so they can find libpciutils.so. #:make-flags (list (string-append "LDFLAGS=-Wl,-rpath=" @@ -78,8 +77,8 @@ `(("which" ,which) ("pkg-config" ,pkg-config))) (inputs - ;; TODO: Add dependency on Linux libkmod. - `(("zlib" ,zlib))) + `(("kmod" ,kmod) + ("zlib" ,zlib))) (home-page "http://mj.ucw.cz/sw/pciutils/") (synopsis "Programs for inspecting and manipulating PCI devices") (description diff --git a/gnu/packages/pcre.scm b/gnu/packages/pcre.scm index aea7d6fcb3..fe9157af12 100644 --- a/gnu/packages/pcre.scm +++ b/gnu/packages/pcre.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2016 Leo Famulari <leo@famulari.name> ;;; ;;; This file is part of GNU Guix. ;;; @@ -78,6 +79,7 @@ POSIX regular expression API.") (uri (string-append "mirror://sourceforge/pcre/pcre2/" version "/pcre2-" version ".tar.bz2")) + (patches (search-patches "pcre2-CVE-2016-3191.patch")) (sha256 (base32 "1q6lrj9b08l1q39vxipb0fi88x6ybvkr6439h8bjb9r8jd81fsn6")))) diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm index 4edf965afd..7c2651764a 100644 --- a/gnu/packages/pdf.scm +++ b/gnu/packages/pdf.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2014, 2015 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org> +;;; Copyright © 2016 Roel Janssen <roel@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -112,6 +113,13 @@ ,@(package-inputs poppler))) (synopsis "Qt4 frontend for the Poppler PDF rendering library"))) +(define-public poppler-qt5 + (package (inherit poppler) + (name "poppler-qt5") + (inputs `(("qt" ,qt) + ,@(package-inputs poppler))) + (synopsis "Qt5 frontend for the Poppler PDF rendering library"))) + (define-public python-poppler-qt4 (package (name "python-poppler-qt4") diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm index 6af4e4a214..4b21926105 100644 --- a/gnu/packages/photo.scm +++ b/gnu/packages/photo.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr> +;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -36,11 +37,13 @@ #:use-module (gnu packages image) #:use-module (gnu packages imagemagick) #:use-module (gnu packages libusb) + #:use-module (gnu packages man) #:use-module (gnu packages maths) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) #:use-module (gnu packages popt) #:use-module (gnu packages readline) + #:use-module (gnu packages tex) #:use-module (gnu packages web) #:use-module (gnu packages xfig) #:use-module (gnu packages xml)) @@ -218,7 +221,7 @@ overlapping images, as well as some command line tools.") (define-public enblend-enfuse (package (name "enblend-enfuse") - (version "4.1.3") + (version "4.2") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/enblend/" @@ -227,7 +230,7 @@ overlapping images, as well as some command line tools.") name "-" version ".tar.gz")) (sha256 (base32 - "1b7r1nnwaind0344ckwggy0ghl0ipbk9jzylsxcjfl05rnasw00w")))) + "0j5x011ilalb47ssah50ag0a4phgh1b0wdgxdbbp1gcyjcjf60w7")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config) @@ -235,8 +238,10 @@ overlapping images, as well as some command line tools.") ("perl-timedate" ,perl-timedate) ;; for building the documentation ("gnuplot" ,gnuplot) + ("help2man" ,help2man) ("imagemagick" ,imagemagick) ("libxml2" ,libxml2) + ("texlive-minimal" ,texlive-minimal) ("tidy" ,tidy) ("transfig" ,transfig))) (inputs diff --git a/gnu/packages/plotutils.scm b/gnu/packages/plotutils.scm index ef61239cab..3edb25a42a 100644 --- a/gnu/packages/plotutils.scm +++ b/gnu/packages/plotutils.scm @@ -38,7 +38,7 @@ #:use-module (gnu packages python) #:use-module (gnu packages readline) #:use-module (gnu packages texinfo) - #:use-module (gnu packages texlive) + #:use-module (gnu packages tex) #:use-module (gnu packages compression) #:use-module (gnu packages)) @@ -189,7 +189,7 @@ colors, styles, options and details.") `(("gs" ,ghostscript) ;For tests ("texinfo" ,texinfo) ;For generating documentation ("texlive" ,texlive) ;For tests and documentation - ("emacs" ,emacs-no-x) + ("emacs" ,emacs-minimal) ("perl" ,perl))) (inputs `(("fftw" ,fftw) diff --git a/gnu/packages/popt.scm b/gnu/packages/popt.scm index 7739c7a276..0832766512 100644 --- a/gnu/packages/popt.scm +++ b/gnu/packages/popt.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013, 2014, 2016 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net> ;;; ;;; This file is part of GNU Guix. @@ -20,7 +20,9 @@ (define-module (gnu packages popt) #:use-module (guix packages) #:use-module (guix download) + #:use-module (guix git-download) #:use-module (guix build-system gnu) + #:use-module (guix build-system cmake) #:use-module (guix licenses)) (define-public argtable @@ -88,3 +90,32 @@ similar to getopt(3), it contains a number of enhancements, including: - popt provides convience functions for parsing strings into argv[] style arrays.") (license x11))) + +(define-public gflags + (package + (name "gflags") + (version "2.1.2") + (source (origin + (method git-fetch) + (uri (git-reference + (commit (string-append "v" version)) + (url "https://github.com/gflags/gflags.git"))) + (sha256 + (base32 + "0qxvr9cyxq3px60jglkm94pq5bil8dkjjdb99l3ypqcds7iypx9w")) + (file-name (string-append name "-" version "-checkout")))) + (build-system cmake-build-system) + (arguments + '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON" + "-DBUILD_TESTING=ON"))) + (home-page "https://gflags.github.io/gflags/") + (synopsis "C++ library for command-line argument parsing") + (description + "Gflags is a C++ library to parse command-line flags. It differs from +other such libraries in that command-line flag definitions can be scattered +around the source code, and not just listed in one place such as @code{main}. +This means that a single source-code file will define and use flags that are +meaningful to that file. Any application that links in that file will get the +flags, and the gflags library will automatically handle that flag +appropriately.") + (license bsd-3))) diff --git a/gnu/packages/pretty-print.scm b/gnu/packages/pretty-print.scm index a1692dd4de..8ba9780685 100644 --- a/gnu/packages/pretty-print.scm +++ b/gnu/packages/pretty-print.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org> +;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -43,7 +44,10 @@ version ".tar.gz")) (sha256 (base32 - "195k78m1h03m961qn7jr120z815iyb93gwi159p1p9348lyqvbpk")))) + "195k78m1h03m961qn7jr120z815iyb93gwi159p1p9348lyqvbpk")) + (patches (search-patches + "a2ps-CVE-2001-1593.patch" + "a2ps-CVE-2014-0466.patch")))) (build-system gnu-build-system) (inputs `(("psutils" ,psutils) @@ -54,37 +58,36 @@ `(("gperf" ,gperf) ("perl" ,perl))) (arguments - '(#:phases (alist-cons-before - 'build 'patch-scripts - (lambda _ - (substitute* - '("afm/make_fonts_map.sh" - "tests/defs" - "tests/backup.tst" - "tests/styles.tst") - (("/bin/rm") (which "rm")))) - (alist-cons-before - 'check 'patch-test-files - ;; Alternatively, we could unpatch the shebangs in tstfiles - (lambda* (#:key inputs #:allow-other-keys) - (let ((perl (assoc-ref inputs "perl"))) - (substitute* '("tests/ps-ref/includeres.ps" - "tests/gps-ref/includeres.ps") - (("/usr/local/bin/perl") - (string-append perl "/bin/perl")))) - ;; Some of the reference postscript contain a 'version 3' - ;; string that in inconsistent with the source text in the - ;; tstfiles directory. Erroneous search-and-replace? - (substitute* '("tests/ps-ref/InsertBlock.ps" - "tests/gps-ref/InsertBlock.ps" - "tests/ps-ref/bookie.ps" - "tests/gps-ref/bookie.ps") - (("version 3") "version 2")) - (substitute* '("tests/ps-ref/psmandup.ps" - "tests/gps-ref/psmandup.ps") - (("#! */bin/sh") (string-append - "#!" (which "sh"))))) - %standard-phases)))) + '(#:phases + (modify-phases %standard-phases + (add-before 'build 'patch-scripts + (lambda _ + (substitute* + '("afm/make_fonts_map.sh" + "tests/defs" + "tests/backup.tst" + "tests/styles.tst") + (("/bin/rm") (which "rm"))))) + (add-before 'check 'patch-test-files + ;; Alternatively, we could unpatch the shebangs in tstfiles + (lambda* (#:key inputs #:allow-other-keys) + (let ((perl (assoc-ref inputs "perl"))) + (substitute* '("tests/ps-ref/includeres.ps" + "tests/gps-ref/includeres.ps") + (("/usr/local/bin/perl") + (string-append perl "/bin/perl")))) + ;; Some of the reference postscript contain a 'version 3' + ;; string that in inconsistent with the source text in the + ;; tstfiles directory. Erroneous search-and-replace? + (substitute* '("tests/ps-ref/InsertBlock.ps" + "tests/gps-ref/InsertBlock.ps" + "tests/ps-ref/bookie.ps" + "tests/gps-ref/bookie.ps") + (("version 3") "version 2")) + (substitute* '("tests/ps-ref/psmandup.ps" + "tests/gps-ref/psmandup.ps") + (("#! */bin/sh") (string-append + "#!" (which "sh"))))))))) (home-page "http://www.gnu.org/software/a2ps") (synopsis "Any file to PostScript, including pretty-printing") (description diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index d2698d4231..0c86183e42 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -19,6 +19,7 @@ ;;; Copyright © 2015, 2016 Chris Marusich <cmmarusich@gmail.com> ;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org> ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org> +;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -44,6 +45,7 @@ #:use-module ((guix licenses) #:select (expat zlib) #:prefix license:) #:use-module (gnu packages) #:use-module (gnu packages algebra) + #:use-module (gnu packages adns) #:use-module (gnu packages attr) #:use-module (gnu packages backup) #:use-module (gnu packages compression) @@ -57,6 +59,7 @@ #:use-module (gnu packages icu4c) #:use-module (gnu packages image) #:use-module (gnu packages imagemagick) + #:use-module (gnu packages libevent) #:use-module (gnu packages libffi) #:use-module (gnu packages linux) #:use-module (gnu packages maths) @@ -68,7 +71,7 @@ #:use-module (gnu packages pkg-config) #:use-module (gnu packages readline) #:use-module (gnu packages statistics) - #:use-module (gnu packages texlive) + #:use-module (gnu packages tex) #:use-module (gnu packages texinfo) #:use-module (gnu packages tls) #:use-module (gnu packages version-control) @@ -5462,7 +5465,7 @@ should be stored on various operating systems.") (define-public python-llfuse (package (name "python-llfuse") - (version "1.0") + (version "1.1") (source (origin (method url-fetch) (uri (string-append @@ -5470,7 +5473,7 @@ should be stored on various operating systems.") "llfuse-" version ".tar.bz2")) (sha256 (base32 - "1li7q04ljrvwharw4fblcbfhvk6s0l3lnv8yqb4c22lcgbkiqlps")))) + "1ywzbqkahrfl9kkcasxrmgilv6fybapvh6pqvimimnfh7sgxal72")))) (build-system python-build-system) (inputs `(("fuse" ,fuse) @@ -5806,6 +5809,35 @@ IPv6 addresses and networks. This is a port of the Python 3.3 ipaddress module to older versions of Python.") (license psfl))) +(define-public python2-ipaddr + (package + (name "python2-ipaddr") + (version "2.1.11") + (source + (origin + (method url-fetch) + (uri (pypi-uri "ipaddr" version)) + (sha256 + (base32 "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v")))) + (build-system python-build-system) + (arguments + `(#:python ,python-2 ;version 2 only + #:phases + (modify-phases %standard-phases + (replace 'check + (lambda* _ + (zero? (system* "python" "ipaddr_test.py"))))))) + (home-page "https://github.com/google/ipaddr-py") + (synopsis "IP address manipulation library") + (description + "Ipaddr is a Python@tie{}2 library for creating and manupilating IPv4 and +IPv6 addresses and networks. + +For new implementations you may prefer to use the standard module +@code{ipaddress}, which was introduced in Python 3.3 and backported to older +versions of Python.") + (license asl2.0))) + (define-public python-idna (package (name "python-idna") @@ -8807,3 +8839,192 @@ the renaming, moving and extracting of attributes, functions, modules, fields and parameters in Python 2 source code. These refactorings can also be applied to occurences in strings and comments.") (license gpl2))) + +(define-public python-py3status + (package + (name "python-py3status") + (version "2.9") + (source + (origin + (method url-fetch) + (uri (pypi-uri "py3status" version)) + (sha256 + (base32 + "09y7h8rjay5kzwk5akq7f5f9wqnvjkxhivck04hdc8ny1nw3vqzp")))) + (build-system python-build-system) + (native-inputs + `(("python-setuptools" ,python-setuptools))) + (home-page "https://github.com/ultrabug/py3status") + (synopsis "Extensible i3status wrapper written in Python") + (description "py3status is an i3status wrapper which extends i3status +functionality in a modular way, allowing you to extend your panel with your +own code, responding to click events and updating clock every second.") + (license bsd-3))) + +(define-public python-tblib + (package + (name "python-tblib") + (version "1.3.0") + (source (origin + (method url-fetch) + (uri (pypi-uri "tblib" version)) + (sha256 (base32 + "02iahfkfa927hb4jq2bak36ldihwapzacfiq5lyxg8llwn98a1yi")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda _ + ;; Upstream runs tests after installation and the package itself + ;; resides in a subdirectory. Extend PYTHONPATH so it will be + ;; found. + (setenv "PYTHONPATH" + (string-append (getcwd) "/build/lib:" + (getenv "PYTHONPATH"))) + (zero? (system* "py.test" "-vv" "tests" "README.rst"))))))) + (native-inputs + `(("python-pytest" ,python-pytest) + ("python-setuptools" ,python-setuptools) + ("python-six" ,python-six))) + (home-page "https://github.com/ionelmc/python-tblib") + (synopsis "Traceback serialization library") + (description + "Traceback serialization allows you to: + +@enumerate +@item Pickle tracebacks and raise exceptions with pickled tracebacks in +different processes. This allows better error handling when running code over +multiple processes (imagine multiprocessing, billiard, futures, celery etc). + +@item Parse traceback strings and raise with the parsed tracebacks. +@end itemize") + (license bsd-3))) + +(define-public python2-tblib + (package-with-python2 python-tblib)) + +(define-public python-sqlparse + (package + (name "python-sqlparse") + (version "0.1.19") + (source (origin + (method url-fetch) + (uri (pypi-uri "sqlparse" version)) + (sha256 + (base32 + "1s2fvaxgh9kqzrd6iwy5h7i61ckn05plx9np13zby93z3hdbx5nq")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda* _ + ;; setup.py-integrated 2to3 only affects the build files, but + ;; py.test is using the source files. So we need to convert them + ;; manually. + (when (zero? (system* "python3")) + (system* "2to3" "--no-diff" "-wn" "sqlparse" "tests")) + (zero? (system* "py.test"))))))) + (native-inputs + `(("python-pytest" ,python-pytest) + ("python-setuptools" ,python-setuptools))) + (home-page "https://github.com/andialbrecht/sqlparse") + (synopsis "Non-validating SQL parser") + (description "Sqlparse is a non-validating SQL parser for Python. It +provides support for parsing, splitting and formatting SQL statements.") + (license bsd-3))) + +(define-public python2-sqlparse + (package-with-python2 python-sqlparse)) + +(define-public python-greenlet + (package + (name "python-greenlet") + (version "0.4.9") + (source (origin + (method url-fetch) + (uri (pypi-uri "greenlet" version)) + (sha256 + (base32 + "04h0m54dyqg49vyarq26mry6kbivnpl47rnmmrk9qn8wpfxviybr")))) + (build-system python-build-system) + (native-inputs + `(("python-setuptools" ,python-setuptools))) + (home-page "https://greenlet.readthedocs.io/") + (synopsis "Lightweight in-process concurrent programming") + (description + "Greenlet package is a spin-off of Stackless, a version of CPython +that supports micro-threads called \"tasklets\". Tasklets run +pseudo-concurrently (typically in a single or a few OS-level threads) and +are synchronized with data exchanges on \"channels\".") + (license (list psfl license:expat)))) + +(define-public python2-greenlet + (package-with-python2 python-greenlet)) + +(define-public python-gevent + (package + (name "python-gevent") + (version "1.1.1") + (source (origin + (method url-fetch) + (uri (pypi-uri "gevent" version)) + (sha256 + (base32 + "1smf3kvidpdiyi2c81alal74p2zm0clrm6xbyy6y1k9a3f2vkrbf")) + (modules '((guix build utils))) + (snippet + '(begin + ;; unbunding libev and c-ares + (for-each delete-file-recursively '("libev" "c-ares")) + ;; fixing testsuite + (call-with-output-file "greentest/__init__.py" noop) + (substitute* "greentest/testrunner.py" + (("import util") "from . import util") + (("from util import log") "from .util import log")))))) + (build-system python-build-system) + (propagated-inputs + `(("python-greenlet" ,python-greenlet))) + (native-inputs + `(("python-setuptools" ,python-setuptools) + ("python-six" ,python-six))) + (inputs + `(("c-ares" ,c-ares) + ("libev" ,libev))) + (home-page "http://www.gevent.org/") + (synopsis "Coroutine-based network library") + (description + "gevent is a coroutine-based Python networking library that uses greenlet +to provide a high-level synchronous API on top of the libev event loop.") + (license license:expat))) + +(define-public python2-gevent + (package-with-python2 python-gevent)) + +(define-public python-twisted + (package + (name "python-twisted") + (version "16.2.0") + (source (origin + (method url-fetch) + (uri (list (pypi-uri "Twisted" version ".tar.bz2") ; 404 + (string-append + "https://pypi.io/packages/source/T/Twisted/" + "Twisted-" version ".tar.bz2"))) + (sha256 + (base32 + "0ydxrp9myw1mvsz3qfzx5579y5llmqa82pxvqchgp5syczffi450")))) + (build-system python-build-system) + (native-inputs + `(("python-setuptools" ,python-setuptools) + ("python-zope-interface" ,python-zope-interface))) + (home-page "https://twistedmatrix.com/") + (synopsis "Asynchronous networking framework written in Python") + (description + "Twisted is an extensible framework for Python programming, with special +focus on event-based network programming and multiprotocol integration.") + (license license:expat))) + +(define-public python2-twisted + (package-with-python2 python-twisted)) diff --git a/gnu/packages/qemu.scm b/gnu/packages/qemu.scm index 6dd6ce4d76..4d78f9b086 100644 --- a/gnu/packages/qemu.scm +++ b/gnu/packages/qemu.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2015, 2016 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; @@ -65,55 +65,58 @@ "1v1lhhd6m59hqgmiz100g779rjq70pik5v4b3g936ci73djlmb69")))) (build-system gnu-build-system) (arguments - '(#:phases (alist-replace - 'configure - (lambda* (#:key inputs outputs (configure-flags '()) - #:allow-other-keys) - ;; The `configure' script doesn't understand some of the - ;; GNU options. Thus, add a new phase that's compatible. - (let ((out (assoc-ref outputs "out"))) - (setenv "SHELL" (which "bash")) + '(;; Running tests in parallel can occasionally lead to failures, like: + ;; boot_sector_test: assertion failed (signature == SIGNATURE): (0x00000000 == 0x0000dead) + #:parallel-tests? #f - ;; While we're at it, patch for tests. - (substitute* "tests/libqtest.c" - (("/bin/sh") (which "sh"))) + #:phases + (modify-phases %standard-phases + (replace 'configure + (lambda* (#:key inputs outputs (configure-flags '()) + #:allow-other-keys) + ;; The `configure' script doesn't understand some of the + ;; GNU options. Thus, add a new phase that's compatible. + (let ((out (assoc-ref outputs "out"))) + (setenv "SHELL" (which "bash")) - ;; The binaries need to be linked against -lrt. - (setenv "LDFLAGS" "-lrt") - (zero? - (apply system* - `("./configure" - ,(string-append "--cc=" (which "gcc")) - "--disable-debug-info" ; save build space - "--enable-virtfs" ; just to be sure - ,(string-append "--prefix=" out) - ,@configure-flags))))) - (alist-cons-after - 'install 'install-info - (lambda* (#:key inputs outputs #:allow-other-keys) - ;; Install the Info manual, unless Texinfo is missing. - (or (not (assoc-ref inputs "texinfo")) - (let ((out (assoc-ref outputs "out"))) - (and (zero? (system* "make" "info")) - (let ((infodir (string-append out "/share/info"))) - (mkdir-p infodir) - (for-each (lambda (info) - (copy-file - info - (string-append infodir "/" info))) - (find-files "." "\\.info$")) - #t))))) - (alist-cons-before - 'check 'disable-test-qga - (lambda _ - (substitute* "tests/Makefile" - ;; Comment out the test-qga test, which needs /sys and - ;; fails within the build environment. - (("check-unit-.* tests/test-qga" all) - (string-append "# " all))) - #t) - %standard-phases))))) + ;; While we're at it, patch for tests. + (substitute* "tests/libqtest.c" + (("/bin/sh") (which "sh"))) + ;; The binaries need to be linked against -lrt. + (setenv "LDFLAGS" "-lrt") + (zero? + (apply system* + `("./configure" + ,(string-append "--cc=" (which "gcc")) + "--disable-debug-info" ; save build space + "--enable-virtfs" ; just to be sure + ,(string-append "--prefix=" out) + ,@configure-flags)))))) + (add-after 'install 'install-info + (lambda* (#:key inputs outputs #:allow-other-keys) + ;; Install the Info manual, unless Texinfo is missing. + (or (not (assoc-ref inputs "texinfo")) + (let ((out (assoc-ref outputs "out"))) + (and (zero? (system* "make" "info")) + (let ((infodir (string-append out "/share/info"))) + (mkdir-p infodir) + (for-each (lambda (info) + (install-file info infodir)) + (find-files "." "\\.info$")) + #t)))))) + (add-before 'check 'make-gtester-verbose + (lambda _ + ;; Make GTester verbose to facilitate investigation upon failure. + (setenv "V" "1"))) + (add-before 'check 'disable-test-qga + (lambda _ + (substitute* "tests/Makefile" + ;; Comment out the test-qga test, which needs /sys and + ;; fails within the build environment. + (("check-unit-.* tests/test-qga" all) + (string-append "# " all))) + #t))))) (inputs ; TODO: Add optional inputs. `(("sdl" ,sdl) ("mesa" ,mesa) diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm index 47720384c2..acfda4a2df 100644 --- a/gnu/packages/qt.scm +++ b/gnu/packages/qt.scm @@ -20,7 +20,7 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (gnu packages qt) - #:use-module ((guix licenses) #:select (bsd-3 gpl2 gpl3 lgpl2.1 lgpl2.1+ x11-style)) + #:use-module ((guix licenses) #:select (bsd-3 gpl2 gpl3 lgpl2.1 lgpl2.1+ lgpl3 x11-style)) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build utils) @@ -298,6 +298,139 @@ developers using C++ or QML, a CSS & JavaScript like language.") (delete-file-recursively olddoc) #t)))))))) +(define-public qtbase + (package + (name "qtbase") + (version "5.6.0") + (source (origin + (method url-fetch) + (uri (string-append "https://download.qt.io/official_releases/qt/" + (version-major+minor version) "/" version + "/submodules/" name "-opensource-src-" + version ".tar.xz")) + (sha256 + (base32 + "0ynnvcs5idivzldsq5ciqg9myg82b3l3906l4vjv54lyamf8mykf")) + (modules '((guix build utils))) + (snippet + '(begin + ;; Remove one of the two bundled harfbuzz copies in addition + ;; to passing "-system-harfbuzz". + (delete-file-recursively "src/3rdparty/harfbuzz-ng") + ;; Remove the bundled sqlite copy in addition to + ;; passing "-system-sqlite". + (delete-file-recursively "src/3rdparty/sqlite"))))) + (build-system gnu-build-system) + (propagated-inputs + `(("mesa" ,mesa))) + (inputs + `(("alsa-lib" ,alsa-lib) + ("cups" ,cups) + ("dbus" ,dbus) + ("expat" ,expat) + ("fontconfig" ,fontconfig) + ("freetype" ,freetype) + ("glib" ,glib) + ("harfbuzz" ,harfbuzz) + ("icu4c" ,icu4c) + ("libjpeg" ,libjpeg) + ("libmng" ,libmng) + ("libpng" ,libpng) + ("libx11" ,libx11) + ("libxcomposite" ,libxcomposite) + ("libxcursor" ,libxcursor) + ("libxfixes" ,libxfixes) + ("libxi" ,libxi) + ("libxinerama" ,libxinerama) + ("libxkbcommon" ,libxkbcommon) + ("libxml2" ,libxml2) + ("libxrandr" ,libxrandr) + ("libxrender" ,libxrender) + ("libxslt" ,libxslt) + ("libxtst" ,libxtst) + ("mtdev" ,mtdev) + ("mysql" ,mysql) + ("nss" ,nss) + ("openssl" ,openssl) + ("pcre" ,pcre) + ("postgresql" ,postgresql) + ("pulseaudio" ,pulseaudio) + ("sqlite" ,sqlite) + ("unixodbc" ,unixodbc) + ("xcb-util" ,xcb-util) + ("xcb-util-image" ,xcb-util-image) + ("xcb-util-keysyms" ,xcb-util-keysyms) + ("xcb-util-renderutil" ,xcb-util-renderutil) + ("xcb-util-wm" ,xcb-util-wm) + ("zlib" ,zlib))) + (native-inputs + `(("bison" ,bison) + ("flex" ,flex) + ("gperf" ,gperf) + ("perl" ,perl) + ("pkg-config" ,pkg-config) + ("python" ,python-2) + ("ruby" ,ruby) + ("which" ,(@ (gnu packages base) which)))) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'configure 'patch-bin-sh + (lambda _ + (substitute* '("config.status" + "configure" + "mkspecs/features/qt_functions.prf" + "qmake/library/qmakebuiltins.cpp") + (("/bin/sh") (which "sh"))) + #t)) + (replace 'configure + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (substitute* "configure" + (("/bin/pwd") (which "pwd"))) + (substitute* "src/corelib/global/global.pri" + (("/bin/ls") (which "ls"))) + ;; do not pass "--enable-fast-install", which makes the + ;; configure process fail + (zero? (system* + "./configure" + "-verbose" + "-prefix" out + "-opensource" + "-confirm-license" + ;; Do not build examples; if desired, these could go + ;; into a separate output, but for the time being, we + ;; prefer to save the space and build time. + "-nomake" "examples" + ;; Most "-system-..." are automatic, but some use + ;; the bundled copy by default. + "-system-sqlite" + "-system-harfbuzz" + ;; explicitly link with openssl instead of dlopening it + "-openssl-linked" + ;; explicitly link with dbus instead of dlopening it + "-dbus-linked" + ;; drop special machine instructions not supported + ;; on all instances of the target + ,@(if (string-prefix? "x86_64" + (or (%current-target-system) + (%current-system))) + '() + '("-no-sse2")) + "-no-sse3" + "-no-ssse3" + "-no-sse4.1" + "-no-sse4.2" + "-no-avx" + "-no-avx2" + "-no-mips_dsp" + "-no-mips_dspr2")))))))) + (home-page "https://www.qt.io/") + (synopsis "Cross-platform GUI library") + (description "Qt is a cross-platform application and UI framework for +developers using C++ or QML, a CSS & JavaScript like language.") + (license (list lgpl2.1 lgpl3)))) + (define-public qjson (package (name "qjson") @@ -325,17 +458,16 @@ while JSON objects are mapped to QVariantMap.") (define-public python-sip (package (name "python-sip") - (version "4.16.9") + (version "4.18") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/pyqt/sip/" - "sip-" version "/sip-" - version ".tar.gz")) + "sip-" version "/sip-" version ".tar.gz")) (sha256 (base32 - "0m85dgm3g9s9h7s5sfxvcxi423vqxwq1vg5wnl5wl9kfasm77qfv")))) + "1dlw4kyiwd9bzmd1djm79c121r219abaz86lvizdk6ksq20mrp7i")))) (build-system gnu-build-system) (native-inputs `(("python" ,python-wrapper))) @@ -344,29 +476,28 @@ while JSON objects are mapped to QVariantMap.") #:modules ((srfi srfi-1) ,@%gnu-build-system-modules) #:phases - (alist-replace - 'configure - (lambda* (#:key inputs outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (bin (string-append out "/bin")) - (include (string-append out "/include")) - (python (assoc-ref inputs "python")) - (python-version - (last (string-split python #\-))) - (python-major+minor - (string-join - (take (string-split python-version #\.) 2) - ".")) - (lib (string-append out "/lib/python" - python-major+minor - "/site-packages"))) - (zero? - (system* "python" "configure.py" - "--bindir" bin + (modify-phases %standard-phases + (replace 'configure + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (include (string-append out "/include")) + (python (assoc-ref inputs "python")) + (python-version + (last (string-split python #\-))) + (python-major+minor + (string-join + (take (string-split python-version #\.) 2) + ".")) + (lib (string-append out "/lib/python" + python-major+minor + "/site-packages"))) + (zero? + (system* "python" "configure.py" + "--bindir" bin "--destdir" lib - "--incdir" include)))) - %standard-phases))) - (home-page "http://www.riverbankcomputing.com/software/sip/intro") + "--incdir" include)))))))) + (home-page "https://www.riverbankcomputing.com/software/sip/intro") (synopsis "Python binding creator for C and C++ libraries") (description "SIP is a tool to create Python bindings for C and C++ libraries. It @@ -390,56 +521,55 @@ module provides support functions to the automatically generated code.") (define-public python-pyqt (package (name "python-pyqt") - (version "5.5") + (version "5.6") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/pyqt/PyQt5/" - "PyQt-" version "/PyQt-gpl-" + "PyQt-" version "/PyQt5_gpl-" version ".tar.gz")) (sha256 (base32 - "056qmkv02wdcfblqdaxiswrgn4wa88sz22i1x58dpb1iniavplfd")) + "1qgh42zsr9jppl9k7fcdbhxcd1wrb7wyaj9lng9nxfa19in1lj1f")) (patches (search-patches "pyqt-configure.patch")))) (build-system gnu-build-system) (native-inputs `(("python-sip" ,python-sip) - ("qt" ,qt))) ; for qmake + ("qtbase" ,qtbase))) ; for qmake (inputs `(("python" ,python-wrapper))) (arguments `(#:modules ((srfi srfi-1) ,@%gnu-build-system-modules) #:phases - (alist-replace - 'configure - (lambda* (#:key inputs outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (bin (string-append out "/bin")) - (sip (string-append out "/share/sip")) - (plugins (string-append out "/plugins")) - (designer (string-append plugins "/designer")) - (qml (string-append plugins "/PyQt5")) - (python (assoc-ref inputs "python")) - (python-version - (last (string-split python #\-))) - (python-major+minor - (string-join - (take (string-split python-version #\.) 2) - ".")) - (lib (string-append out "/lib/python" - python-major+minor - "/site-packages"))) - (zero? (system* "python" "configure.py" - "--confirm-license" - "--bindir" bin - "--destdir" lib - "--designer-plugindir" designer - "--qml-plugindir" qml - "--sipdir" sip)))) - %standard-phases))) - (home-page "http://www.riverbankcomputing.com/software/pyqt/intro") + (modify-phases %standard-phases + (replace 'configure + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (sip (string-append out "/share/sip")) + (plugins (string-append out "/plugins")) + (designer (string-append plugins "/designer")) + (qml (string-append plugins "/PyQt5")) + (python (assoc-ref inputs "python")) + (python-version + (last (string-split python #\-))) + (python-major+minor + (string-join + (take (string-split python-version #\.) 2) + ".")) + (lib (string-append out "/lib/python" + python-major+minor + "/site-packages"))) + (zero? (system* "python" "configure.py" + "--confirm-license" + "--bindir" bin + "--destdir" lib + "--designer-plugindir" designer + "--qml-plugindir" qml + "--sipdir" sip)))))))) + (home-page "https://www.riverbankcomputing.com/software/pyqt/intro") (synopsis "Python bindings for Qt") (description "PyQt is a set of Python v2 and v3 bindings for the Qt application @@ -452,7 +582,7 @@ contain over 620 classes.") (name "python2-pyqt") (native-inputs `(("python-sip" ,python2-sip) - ("qt" ,qt))) + ("qtbase" ,qtbase))) (inputs `(("python" ,python-2))))) @@ -505,7 +635,7 @@ contain over 620 classes.") (define-public qtkeychain (package (name "qtkeychain") - (version "0.6.2") + (version "0.7.0") (source (origin (method url-fetch) @@ -513,7 +643,7 @@ contain over 620 classes.") "archive/v" version ".tar.gz")) (file-name (string-append name "-" version ".tar.gz")) (sha256 - (base32 "0g76pa786mg0fxy52hrljw09dvi6kffk2ms42lxapvpy6j94a4xf")))) + (base32 "0fka5q5cdzlf79igcjgbnb2smvwbwfasqawkzkbr34whispgm6lz")))) (build-system cmake-build-system) (inputs `(("qt" ,qt))) diff --git a/gnu/packages/rails.scm b/gnu/packages/rails.scm new file mode 100644 index 0000000000..e1e14f5b70 --- /dev/null +++ b/gnu/packages/rails.scm @@ -0,0 +1,95 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016 Matthew Jordan <matthewjordandevops@yandex.com> +;;; +;;; 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 rails) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix download) + #:use-module (guix packages) + #:use-module (gnu packages ruby) + #:use-module (guix build-system ruby)) + +(define-public ruby-spring + (package + (name "ruby-spring") + (version "1.7.1") + (source + (origin + (method url-fetch) + (uri + (string-append "https://github.com/rails/spring/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0czc4mkwfngcqmna49a0l98f6wlhdq2i8gwr63lrmk90d9k25x1n")))) + (build-system ruby-build-system) + (arguments + `(#:test-target "test:unit" + #:phases + (modify-phases %standard-phases + (add-before 'check 'remove-bump + (lambda _ + (substitute* "spring.gemspec" + (("gem.add_development_dependency 'bump'") "")) + (substitute* "Rakefile" + (("require \\\"bump/tasks\\\"") "")) + #t))))) + (native-inputs + `(("bundler" ,bundler) + ("ruby-activesupport" ,ruby-activesupport))) + (synopsis "Ruby on Rails application preloader") + (description + "Spring is a Ruby on Rails application preloader. It speeds up +development by keeping your application running in the background so the +application does need to boot it every time you run a test, rake task or +migration.") + (home-page "https://github.com/rails/spring") + (license license:expat))) + +(define-public ruby-debug-inspector + (package + (name "ruby-debug-inspector") + (version "0.0.2") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "debug_inspector" version)) + (sha256 + (base32 + "109761g00dbrw5q0dfnbqg8blfm699z4jj70l4zrgf9mzn7ii50m")))) + (build-system ruby-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda _ + (and + (zero? (system* "rake" "compile")) + (zero? + (system* + "ruby" "-Ilib" "-e" + (string-append + "require 'debug_inspector'; RubyVM::DebugInspector." + "open{|dc| p dc.backtrace_locations}"))))))))) + (synopsis "Ruby wrapper for the MRI 2.0 debug_inspector API") + (description + "This package provides a Ruby wrapper for the MRI 2.0 debug_inspector +API.") + (home-page + "https://github.com/banister/debug_inspector") + (license license:expat))) diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm index 6c2e08f29d..c6b6eedb9d 100644 --- a/gnu/packages/ruby.scm +++ b/gnu/packages/ruby.scm @@ -423,13 +423,13 @@ expectations and mocks frameworks.") (define-public bundler (package (name "bundler") - (version "1.11.2") + (version "1.12.5") (source (origin (method url-fetch) (uri (rubygems-uri "bundler" version)) (sha256 (base32 - "0s37j1hyngc4shq0in8f9y1knjdqkisdg3dd1mfwgq7n1bz8zan7")))) + "1q84xiwm9j771lpmiply0ls9l2bpvl5axn3jblxjvrldh8di2pkc")))) (build-system ruby-build-system) (arguments '(#:tests? #f)) ; avoid dependency cycles @@ -1707,6 +1707,33 @@ instance, it provides @code{assert_true}, @code{assert_false} and (home-page "http://blowmage.com/minitest-rg") (license license:expat))) +(define-public ruby-minitest-hooks + (package + (name "ruby-minitest-hooks") + (version "1.4.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "minitest-hooks" version)) + (sha256 + (base32 + "092fymh0c09v3a585qw3hc15b0zf159s74rxx1ga87drk5jr958z")))) + (build-system ruby-build-system) + (arguments + '(#:test-target "spec")) + (native-inputs + `(("ruby-sequel" ,ruby-sequel) + ("ruby-sqlite3" ,ruby-sqlite3))) + (synopsis "Hooks for the minitest framework") + (description + "Minitest-hooks adds @code{around}, @code{before_all}, @code{after_all}, +@code{around_all} hooks for Minitest. This allows, for instance, running each +suite of specs inside a database transaction, running each spec inside its own +savepoint inside that transaction. This can significantly speed up testing +for specs that share expensive database setup code.") + (home-page "http://github.com/jeremyevans/minitest-hooks") + (license license:expat))) + (define-public ruby-daemons (package (name "ruby-daemons") @@ -1871,24 +1898,24 @@ to reproduce user environments.") (define-public ruby-mini-portile-2 (package (inherit ruby-mini-portile) - (version "2.0.0") + (version "2.1.0") (source (origin (method url-fetch) (uri (rubygems-uri "mini_portile2" version)) (sha256 (base32 - "056drbn5m4khdxly1asmiik14nyllswr6sh3wallvsywwdiryz8l")))))) + "1y25adxb1hgg1wb2rn20g3vl07qziq6fz364jc5694611zz863hb")))))) (define-public ruby-nokogiri (package (name "ruby-nokogiri") - (version "1.6.7.1") + (version "1.6.7.2") (source (origin (method url-fetch) (uri (rubygems-uri "nokogiri" version)) (sha256 (base32 - "12nwv3lad5k2k73aa1d1xy4x577c143ixks6rs70yp78sinbglk2")))) + "11sbmpy60ynak6s3794q32lc99hs448msjy8rkp84ay7mq7zqspv")))) (build-system ruby-build-system) (arguments ;; Tests fail because Nokogiri can only test with an installed extension, @@ -1897,7 +1924,13 @@ to reproduce user environments.") #:gem-flags (list "--" "--use-system-libraries" (string-append "--with-xml2-include=" (assoc-ref %build-inputs "libxml2") - "/include/libxml2" )))) + "/include/libxml2" )) + #:phases + (modify-phases %standard-phases + (add-after 'extract-gemspec 'update-dependency + (lambda _ + (substitute* ".gemspec" (("2.0.0.rc2") "2.0")) + #t))))) (native-inputs `(("ruby-hoe" ,ruby-hoe) ("ruby-rake-compiler" ,ruby-rake-compiler))) @@ -2505,67 +2538,68 @@ multibyte strings, internationalization, time zones, and testing.") (license license:expat))) (define-public ruby-nokogumbo - (package - (name "ruby-nokogumbo") - (version "1.4.6") - (source (origin - ;; We use the git reference, because there's no Rakefile in the - ;; published gem and the tarball on Github is outdated. - (method git-fetch) - (uri (git-reference - (url "https://github.com/rubys/nokogumbo.git") - (commit "d56f954d20a"))) - (file-name (string-append name "-" version "-checkout")) - (sha256 - (base32 - "0bnppjy96xiadrsrc9dp8y6wvdwnkfa930n7acrp0mqm4qywl2wl")))) - (build-system ruby-build-system) - (arguments - `(#:modules ((guix build ruby-build-system) - (guix build utils) - (ice-9 rdelim)) - #:phases - (modify-phases %standard-phases - (add-before 'build 'build-gemspec - (lambda _ - (substitute* "Rakefile" - ;; Build Makefile even without a copy of gumbo-parser sources - (("'gumbo-parser/src',") "") - ;; We don't bundle gumbo-parser sources - (("'gumbo-parser/src/\\*',") "") - (("'gumbo-parser/visualc/include/\\*',") "") - ;; The definition of SOURCES will be cut in gemspec, and - ;; "FileList" will be undefined. - (("SOURCES \\+ FileList\\[") - "['ext/nokogumboc/extconf.rb', 'ext/nokogumboc/nokogumbo.c', ")) - - ;; Copy the Rakefile and cut out the gemspec. - (copy-file "Rakefile" ".gemspec") - (with-atomic-file-replacement ".gemspec" - (lambda (in out) - (let loop ((line (read-line in 'concat)) - (skipping? #t)) - (if (eof-object? line) - #t - (let ((skip-next? (if skipping? - (not (string-prefix? "SPEC =" line)) - (string-prefix? "end" line)))) - (when (or (not skipping?) - (and skipping? (not skip-next?))) - (format #t "~a" line) - (display line out)) - (loop (read-line in 'concat) skip-next?)))))) - #t))))) - (inputs - `(("gumbo-parser" ,gumbo-parser))) - (propagated-inputs - `(("ruby-nokogiri" ,ruby-nokogiri))) - (synopsis "Ruby bindings to the Gumbo HTML5 parser") - (description - "Nokogumbo allows a Ruby program to invoke the Gumbo HTML5 parser and + (let ((commit "fb51ff299a1c34346837580b6d1d9a60fadf5dbd")) + (package + (name "ruby-nokogumbo") + (version (string-append "1.4.7-1." (string-take commit 8))) + (source (origin + ;; We use the git reference, because there's no Rakefile in the + ;; published gem and the tarball on Github is outdated. + (method git-fetch) + (uri (git-reference + (url "https://github.com/rubys/nokogumbo.git") + (commit "d56f954d20a"))) + (file-name (string-append name "-" version "-checkout")) + (sha256 + (base32 + "0bnppjy96xiadrsrc9dp8y6wvdwnkfa930n7acrp0mqm4qywl2wl")))) + (build-system ruby-build-system) + (arguments + `(#:modules ((guix build ruby-build-system) + (guix build utils) + (ice-9 rdelim)) + #:phases + (modify-phases %standard-phases + (add-before 'build 'build-gemspec + (lambda _ + (substitute* "Rakefile" + ;; Build Makefile even without a copy of gumbo-parser sources + (("'gumbo-parser/src',") "") + ;; We don't bundle gumbo-parser sources + (("'gumbo-parser/src/\\*',") "") + (("'gumbo-parser/visualc/include/\\*',") "") + ;; The definition of SOURCES will be cut in gemspec, and + ;; "FileList" will be undefined. + (("SOURCES \\+ FileList\\[") + "['ext/nokogumboc/extconf.rb', 'ext/nokogumboc/nokogumbo.c', ")) + + ;; Copy the Rakefile and cut out the gemspec. + (copy-file "Rakefile" ".gemspec") + (with-atomic-file-replacement ".gemspec" + (lambda (in out) + (let loop ((line (read-line in 'concat)) + (skipping? #t)) + (if (eof-object? line) + #t + (let ((skip-next? (if skipping? + (not (string-prefix? "SPEC =" line)) + (string-prefix? "end" line)))) + (when (or (not skipping?) + (and skipping? (not skip-next?))) + (format #t "~a" line) + (display line out)) + (loop (read-line in 'concat) skip-next?)))))) + #t))))) + (inputs + `(("gumbo-parser" ,gumbo-parser))) + (propagated-inputs + `(("ruby-nokogiri" ,ruby-nokogiri))) + (synopsis "Ruby bindings to the Gumbo HTML5 parser") + (description + "Nokogumbo allows a Ruby program to invoke the Gumbo HTML5 parser and access the result as a Nokogiri parsed document.") - (home-page "https://github.com/rubys/nokogumbo/") - (license license:asl2.0))) + (home-page "https://github.com/rubys/nokogumbo/") + (license license:asl2.0)))) (define-public ruby-sanitize (package @@ -3129,14 +3163,14 @@ that TURN is no longer being maintained.") (define-public ruby-mime-types-data (package (name "ruby-mime-types-data") - (version "3.2015.1120") + (version "3.2016.0221") (source (origin (method url-fetch) (uri (rubygems-uri "mime-types-data" version)) (sha256 (base32 - "04fzvy02w8d0rrsg8avncn7h58pvwdxj82aps54srb3sam2dkhic")))) + "05ygjn0nnfh6yp1wsi574jckk95wqg9a6g598wk4svvrkmkrzkpn")))) (build-system ruby-build-system) (native-inputs `(("ruby-hoe" ,ruby-hoe))) @@ -3153,14 +3187,14 @@ look up the likely MIME type definitions.") (define-public ruby-mime-types (package (name "ruby-mime-types") - (version "3.0") + (version "3.1") (source (origin (method url-fetch) (uri (rubygems-uri "mime-types" version)) (sha256 (base32 - "1snjc38a9vqvy8j41xld1i1byq9prbl955pbjw7dxqcfcirqlzra")))) + "0087z9kbnlqhci7fxh9f6il63hj1k02icq2rs0c6cppmqchr753m")))) (build-system ruby-build-system) (propagated-inputs `(("ruby-mime-types-data" ,ruby-mime-types-data))) @@ -3169,7 +3203,8 @@ look up the likely MIME type definitions.") ("ruby-fivemat" ,ruby-fivemat) ("ruby-minitest-focus" ,ruby-minitest-focus) ("ruby-minitest-rg" ,ruby-minitest-rg) - ("ruby-minitest-bonus-assertions" ,ruby-minitest-bonus-assertions))) + ("ruby-minitest-bonus-assertions" ,ruby-minitest-bonus-assertions) + ("ruby-minitest-hooks" ,ruby-minitest-hooks))) (synopsis "Library and registry for MIME content type definitions") (description "The mime-types library provides a library and registry for information about Multipurpose Internet Mail Extensions (MIME) content type @@ -3265,26 +3300,18 @@ names.") (define-public ruby-shoulda-matchers (package (name "ruby-shoulda-matchers") - (version "3.0.1") + (version "3.1.1") (source (origin (method url-fetch) (uri (rubygems-uri "shoulda-matchers" version)) (sha256 (base32 - "1agabvb8i39mjrp3kb78nvhl41xk1i258hdwdlj0fm8nj9yzn1jb")))) + "1cf6d2d9br82vylr9p362yk9cfrd14jz8v77n0yb0lbcxdbk7xzq")))) (build-system ruby-build-system) (arguments `(#:phases (modify-phases %standard-phases - (add-before 'build 'fix-import - (lambda _ - ;; A presumed bug reported upstream at - ;; https://github.com/thoughtbot/shoulda-matchers/pull/871 - (substitute* (string-append "lib/shoulda/matchers/active_model/" - "validate_inclusion_of_matcher.rb") - (("^require 'bigdecimal'") - "require 'bigdecimal'; require 'date'")))) (replace 'check (lambda _ ;; Do not run tests to avoid circular dependence with rails. Instead @@ -3380,14 +3407,14 @@ support to both Ruby and JRuby. It uses @code{unf_ext} on CRuby and (define-public ruby-domain-name (package (name "ruby-domain-name") - (version "0.5.25") + (version "0.5.20160310") (source (origin (method url-fetch) (uri (rubygems-uri "domain_name" version)) (sha256 (base32 - "16qvfrmcwlzz073aas55mpw2nhyhjcn96s524w0g1wlml242hjav")))) + "0g1175zspkqhlvl9s11g7p2nbmqpvpxxv02q8csd0ryc81laapys")))) (build-system ruby-build-system) (arguments `(#:phases @@ -3878,3 +3905,25 @@ part of the Prawn PDF generator.") ;; From the README: "Matz's terms for Ruby, GPLv2, or GPLv3. See LICENSE ;; for details." (license (list license:gpl2 license:gpl3 license:ruby)))) + +(define-public ruby-sequel + (package + (name "ruby-sequel") + (version "4.34.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "sequel" version)) + (sha256 + (base32 + "0qscddpfwcajggxvbm4a4jv8kkpn6q056bgdg03km34bz8bis1x1")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) ; Avoid dependency loop with ruby-minitest-hooks. + (synopsis "Database toolkit for Ruby") + (description "Sequel provides thread safety, connection pooling and a +concise DSL for constructing SQL queries and table schemas. It includes a +comprehensive ORM layer for mapping records to Ruby objects and handling +associated records.") + (home-page "http://sequel.jeremyevans.net") + (license license:expat))) diff --git a/gnu/packages/rush.scm b/gnu/packages/rush.scm index 6926f68787..cf9e49a7e3 100644 --- a/gnu/packages/rush.scm +++ b/gnu/packages/rush.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013, 2016 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -36,7 +36,8 @@ (sha256 (base32 "0fh0gbbp0iiq3wbkf503xb40r8ljk42vyj9bnlflbz82d6ipy1rm")) - (patches (search-patches "cpio-gets-undeclared.patch")))) + (patches (search-patches "cpio-gets-undeclared.patch" + "rush-CVE-2013-6889.patch")))) (build-system gnu-build-system) (home-page "http://www.gnu.org/software/rush/") (synopsis "Restricted user (login) shell") diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm index c345d59ed3..e409dd546e 100644 --- a/gnu/packages/scheme.scm +++ b/gnu/packages/scheme.scm @@ -41,7 +41,7 @@ #:use-module (gnu packages ghostscript) #:use-module (gnu packages netpbm) #:use-module (gnu packages texinfo) - #:use-module (gnu packages texlive) + #:use-module (gnu packages tex) #:use-module (gnu packages base) #:use-module (gnu packages compression) #:use-module (gnu packages pkg-config) @@ -736,7 +736,7 @@ and 32-bit PowerPC architectures.") (build-system gnu-build-system) (inputs `(("mit-scheme" ,mit-scheme) - ("emacs" ,emacs-no-x))) + ("emacs" ,emacs-minimal))) (arguments `(#:tests? #f ;; no tests-suite #:modules ((guix build gnu-build-system) diff --git a/gnu/packages/screen.scm b/gnu/packages/screen.scm index 4b9bacf3e5..5827a1c53e 100644 --- a/gnu/packages/screen.scm +++ b/gnu/packages/screen.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com> ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org> +;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -67,23 +68,23 @@ view to show two terminals at once.") (define-public dtach (package (name "dtach") - (version "0.8") + (version "0.9") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/dtach/dtach-" version ".tar.gz")) (sha256 (base32 - "1agjp08zxxxfni62sqx9qsd9526yqwlz7ry07lfq3clavyylwq8n")))) + "1wwj2hlngi8qn2pisvhyfxxs8gyqjlgrrv5lz91w8ly54dlzvs9j")))) (build-system gnu-build-system) (arguments ;; No install target. - '(#:phases (alist-replace - 'install - (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) - (install-file "dtach" (string-append out "/bin")))) - %standard-phases) + '(#:phases + (modify-phases %standard-phases + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (install-file "dtach" (string-append out "/bin")))))) ;; No check target. #:tests? #f)) (home-page "http://dtach.sourceforge.net/") diff --git a/gnu/packages/speech.scm b/gnu/packages/speech.scm new file mode 100644 index 0000000000..95c7591480 --- /dev/null +++ b/gnu/packages/speech.scm @@ -0,0 +1,51 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016 David Thompson <davet@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 (gnu packages speech) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu) + #:use-module (gnu packages) + #:use-module (gnu packages gcc)) + +(define-public mitlm + (package + (name "mitlm") + (version "0.4.1") + ;; No official release tarballs, so for now we use the one from Debian + ;; that is maintained by one of the project developers. + ;; + ;; See: https://github.com/mitlm/mitlm/issues/54 + (source (origin + (method url-fetch) + (uri (string-append "mirror://debian/pool/main/m/mitlm/mitlm_" + version ".orig.tar.gz")) + (sha256 + (base32 + "12m09xxx8jbir9cnzzaysvni5sfijpfj96z1x1520qqvmpc8lmn7")))) + (build-system gnu-build-system) + (native-inputs + `(("gfortran" ,gfortran))) + (synopsis "The MIT Language Modeling toolkit") + (description "The MIT Language Modeling (MITLM) toolkit is a set of +tools designed for the efficient estimation of statistical n-gram language +models involving iterative parameter estimation. It achieves much of its +efficiency through the use of a compact vector representation of n-grams.") + (home-page "https://github.com/mitlm/mitlm") + (license license:expat))) diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm index 43f9042e9c..1288d9d7ef 100644 --- a/gnu/packages/statistics.scm +++ b/gnu/packages/statistics.scm @@ -792,6 +792,29 @@ generation in R using Literate Programming techniques.") ;; here. (license license:gpl2+))) +(define-public r-knitrbootstrap + (package + (name "r-knitrbootstrap") + (version "1.0.0") + (source + (origin + (method url-fetch) + (uri (cran-uri "knitrBootstrap" version)) + (sha256 + (base32 + "0pshn2slzqwpryklslsxwh1dmqcnwv6bwi7yfm6m342wjybpk0wl")))) + (properties `((upstream-name . "knitrBootstrap"))) + (build-system r-build-system) + (propagated-inputs + `(("r-knitr" ,r-knitr) + ("r-rmarkdown" ,r-rmarkdown))) + (home-page "https://github.com/jimhester/knitrBootstrap") + (synopsis "Knitr bootstrap framework") + (description + "This package provides a framework to create Bootstrap 3 HTML reports +from knitr Rmarkdown.") + (license license:expat))) + (define-public r-microbenchmark (package (name "r-microbenchmark") @@ -2617,6 +2640,46 @@ noncentral hypergeometric distribution (also called extended hypergeometric distribution).") (license license:gpl3+))) +(define-public r-runit + (package + (name "r-runit") + (version "0.4.31") + (source + (origin + (method url-fetch) + (uri (cran-uri "RUnit" version)) + (sha256 + (base32 + "1jqr871jkll2xmk7wk5hv1z3a36hyn2ibgivw7bwk4b346940xlx")))) + (properties `((upstream-name . "RUnit"))) + (build-system r-build-system) + (home-page "http://cran.r-project.org/web/packages/RUnit") + (synopsis "R unit test framework") + (description + "This package provides R functions implementing a standard unit testing +framework, with additional code inspection and report generation tools.") + (license license:gpl2+))) + +(define-public r-zoo + (package + (name "r-zoo") + (version "1.7-13") + (source (origin + (method url-fetch) + (uri (cran-uri "zoo" version)) + (sha256 + (base32 + "0m67bnrg7r1jxvs9p7rpa430szp5qfp65r056yb8bivpc16jd98c")))) + (build-system r-build-system) + (propagated-inputs + `(("r-lattice" ,r-lattice))) + (home-page "http://zoo.R-Forge.R-project.org/") + (synopsis "S3 infrastructure for regular and irregular time series") + (description "This package contains an S3 class with methods for totally +ordered indexed observations. It is particularly aimed at irregular time +series of numeric vectors/matrices and factors.") + (license license:gpl2+))) + (define-public r-ztable (package (name "r-ztable") diff --git a/gnu/packages/synergy.scm b/gnu/packages/synergy.scm index bc70eaf838..ecff82ce7b 100644 --- a/gnu/packages/synergy.scm +++ b/gnu/packages/synergy.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014, 2015 Eric Bavier <bavier@member.fsf.org> +;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -32,16 +33,16 @@ (define-public synergy (package (name "synergy") - (version "1.7.4") + (version "1.7.6") (source (origin (method url-fetch) - (uri (string-append "https://github.com/synergy/synergy/archive/" + (uri (string-append "https://github.com/symless/synergy/archive/" "v" version "-stable.tar.gz")) (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "1prb06dmi4bhfsraih4hzlsfiraiczgzhqy9gjsxygczif8w6p91")) + "07a1g2kh4f064nqjdqgfzrjfayls31scnssphbndmnvfc20bhlx4")) (modules '((guix build utils))) (snippet ;; Remove ~14MB of unnecessary bundled source and binaries @@ -65,25 +66,23 @@ (arguments `(#:phases (let ((srcdir (string-append "../synergy-" ,version "-stable"))) - (alist-cons-before - 'configure 'unpack-aux-src - ;; TODO: package and use from system - (lambda* (#:key inputs #:allow-other-keys) - (let ((unzip (string-append - (assoc-ref inputs "unzip") - "/bin/unzip"))) - (with-directory-excursion "ext" - (for-each - (lambda (f) - (system* unzip "-d" f (string-append f ".zip"))) - '("gmock-1.6.0" "gtest-1.6.0"))))) - (alist-replace - 'check - ;; Don't run "integtests" as it requires network and X an display. - (lambda _ - (zero? (system* (string-append srcdir "/bin/unittests")))) - (alist-replace - 'install + (modify-phases %standard-phases + (add-before 'configure 'unpack-aux-src + ;; TODO: package and use from system + (lambda* (#:key inputs #:allow-other-keys) + (let ((unzip (string-append + (assoc-ref inputs "unzip") + "/bin/unzip"))) + (with-directory-excursion "ext" + (for-each + (lambda (f) + (system* unzip "-d" f (string-append f ".zip"))) + '("gmock-1.6.0" "gtest-1.6.0")))))) + (replace 'check + ;; Don't run "integtests" as it requires network and X an display. + (lambda _ + (zero? (system* (string-append srcdir "/bin/unittests"))))) + (replace 'install ;; There currently is no installation process, see: ;; http://synergy-project.org/spit/issues/details/3317/ (lambda* (#:key outputs #:allow-other-keys) @@ -103,9 +102,8 @@ (install-file (string-append srcdir "/doc/" e) ex)) '("synergy.conf.example" "synergy.conf.example-advanced" - "synergy.conf.example-basic"))))) - %standard-phases)))))) - (home-page "http://www.synergy-project.org") + "synergy.conf.example-basic")))))))))) + (home-page "http://symless.com/") (synopsis "Mouse and keyboard sharing utility") (description "Synergy brings your computers together in one cohesive experience; its diff --git a/gnu/packages/task-management.scm b/gnu/packages/task-management.scm index 340475c666..701e14a5e2 100644 --- a/gnu/packages/task-management.scm +++ b/gnu/packages/task-management.scm @@ -28,14 +28,14 @@ (define-public taskwarrior (package (name "taskwarrior") - (version "2.4.3") + (version "2.5.1") (source (origin (method url-fetch) (uri (string-append "http://taskwarrior.org/download/task-" version ".tar.gz")) (sha256 (base32 - "1lkbw2fhshynbl7hppar1viapyrs712s14xhd8p3l8gyhvxbh0mv")))) + "059a9yc58wcicc6xxsjh1ph7k2yrag0spsahp1wqmsq6h7jwwyyq")))) (build-system cmake-build-system) (inputs `(("gnutls" ,gnutls) diff --git a/gnu/packages/telephony.scm b/gnu/packages/telephony.scm index 50a83fbcf3..b27dd1f6d6 100644 --- a/gnu/packages/telephony.scm +++ b/gnu/packages/telephony.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com> ;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,6 +22,7 @@ (define-module (gnu packages telephony) #:use-module (gnu packages) + #:use-module (gnu packages autotools) #:use-module (gnu packages gnupg) #:use-module (gnu packages linux) #:use-module (gnu packages pkg-config) @@ -211,3 +213,42 @@ Real-time Transport Protocol (SRTP), the Universal Security Transform (UST), and a supporting cryptographic kernel.") (home-page "https://github.com/cisco/libsrtp") (license bsd-3))) + +(define-public libiax2 + (let ((commit "0e5980f1d78ce462e2d1ed6bc39ff35c8341f201")) + ;; This is the commit used by the Ring Project. + (package + (name "libiax2") + (version (string-append "0.0.0-1." (string-take commit 7))) + (source + (origin + (method url-fetch) + (uri + (string-append + "https://gitlab.savoirfairelinux.com/sflphone/libiax2/" + "repository/archive.tar.gz?ref=" + commit)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0cj5293bixp3k5x3hjwyd0iq7z8w5p7yavxvvkqk5817hjq386y2")))) + (build-system gnu-build-system) + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("libtool" ,libtool))) + (arguments + `(#:phases (modify-phases %standard-phases + (add-before 'configure 'autoconf + (lambda _ + (zero? (system* "autoreconf" "-vfi"))))))) + (home-page "https://gitlab.savoirfairelinux.com/sflphone/libiax2") + (synopsis "Inter-Asterisk-Protocol library") + (description "LibIAX2 implements the Inter-Asterisk-Protocol for relaying +Voice-over-IP (VoIP) communications.") + ;; The file 'src/md5.c' is released into the public domain by RSA Data + ;; Security. The files 'src/answer.h', 'src/miniphone.c', + ;; 'src/options.c', 'src/options.h', 'src/ring10.h', 'src/winiphone.c' are + ;; covered under the 'GPL'. + ;; The package as a whole is distributed under the LGPL 2.0. + (license (list lgpl2.0 public-domain gpl2+))))) diff --git a/gnu/packages/terminals.scm b/gnu/packages/terminals.scm index 1a83eda3c0..ee36f64354 100644 --- a/gnu/packages/terminals.scm +++ b/gnu/packages/terminals.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2016 Mckinley Olsen <mck.olsen@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,6 +22,7 @@ #:use-module (guix build utils) #:use-module (guix build-system gnu) #:use-module (guix download) + #:use-module (guix git-download) #:use-module (guix packages) #:use-module (gnu packages autotools) #:use-module (gnu packages gettext) @@ -28,7 +30,10 @@ #:use-module (gnu packages gnome) #:use-module (gnu packages gtk) #:use-module (gnu packages pkg-config) - #:use-module (gnu packages wm)) + #:use-module (gnu packages wm) + #:use-module (gnu packages ncurses) + #:use-module (gnu packages gtk) + #:use-module (gnu packages gnome)) (define-public tilda (package @@ -67,3 +72,52 @@ is similar to the built-in consoles in some applications. Tilda is highly configureable through a graphical wizard.") (home-page "https://github.com/lanoxx/tilda") (license license:gpl2+))) + +(define-public termite + (package + (name "termite") + (version "11") + (source + (origin + (method git-fetch) + (uri (git-reference + (url (string-append "https://github.com/thestinger/" + name ".git")) + (commit (string-append "v" version)) + (recursive? #t))) + (file-name (string-append name "-" version "-checkout")) + (sha256 + (base32 + "1cw4yw7n9m2si8b7zcfyz9pyihncabxm5g39v1mxslfajxgwzmd8")))) + (build-system gnu-build-system) + (arguments + `(#:phases (alist-delete 'configure %standard-phases) + #:tests? #f + ;; This sets the destination when installing the necessary terminal + ;; capability data, which are not provided by 'ncurses'. See + ;; <https://lists.gnu.org/archive/html/bug-ncurses/2009-10/msg00031.html>. + #:make-flags (list "PREFIX=" + (string-append "VERSION=v" (version)) + (string-append "DESTDIR=" + (assoc-ref %outputs "out"))))) + (inputs + `(("vte", vte-ng) + ("gtk+", gtk+) + ("ncurses", ncurses))) + (native-inputs + `(("pkg-config" ,pkg-config))) + + ;; FIXME: This should only be located in 'ncurses'. Nonetheless it is + ;; provided for usability reasons. See <https://bugs.gnu.org/22138>. + (native-search-paths + (list (search-path-specification + (variable "TERMINFO_DIRS") + (files '("share/terminfo"))))) + (home-page "https://github.com/thestinger/termite/") + (synopsis "Keyboard-centric, VTE-based terminal") + (description "Termite is a minimal terminal emulator designed for use with +tiling window managers. It is a modal application, similar to Vim, with an +insert mode and command mode where keybindings have different functions.") + + ;; Files under util/ are under the Expat license; the rest is LGPLv2+. + (license license:lgpl2.0+))) diff --git a/gnu/packages/texlive.scm b/gnu/packages/tex.scm index cbcb6c87fc..c1ab8b3f5c 100644 --- a/gnu/packages/texlive.scm +++ b/gnu/packages/tex.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2013, 2014, 2015, 2016 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org> ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org> +;;; Copyright © 2016 Roel Janssen <roel@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -18,7 +19,7 @@ ;;; 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 texlive) +(define-module (gnu packages tex) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix download) @@ -40,6 +41,7 @@ #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) + #:use-module (gnu packages qt) #:use-module (gnu packages ruby) #:use-module (gnu packages tcsh) #:use-module (gnu packages base) @@ -387,3 +389,40 @@ to manage bibliographic references. Automatic execution of dvips to produce PostScript documents is also included, as well as usage of pdfLaTeX to produce PDF documents.") (license license:gpl2+))) + +(define-public texmaker + (package + (name "texmaker") + (version "4.5") + (source (origin + (method url-fetch) + (uri (string-append "http://www.xm1math.net/texmaker/texmaker-" + version ".tar.bz2")) + (sha256 + (base32 + "056njk6j8wma23mlp7xa3rgfaxx0q8ynwx8wkmj7iy0b85p9ds9c")))) + (build-system gnu-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + ;; Qt has its own configuration utility. + (replace 'configure + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (zero? (system* "qmake" + (string-append "PREFIX=" out) + (string-append "DESKTOPDIR=" out + "/share/applications") + (string-append "ICONDIR=" out "/share/pixmaps") + "texmaker.pro")))))))) + (inputs + `(("poppler-qt5" ,poppler-qt5) + ("qt" ,qt) + ("zlib" ,zlib))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (home-page "http://www.xm1math.net/texmaker/") + (synopsis "LaTeX editor") + (description "Texmaker is a program that integrates many tools needed to +develop documents with LaTeX, in a single application.") + (license license:gpl2+))) diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm index 080c95ba1c..ebcf4b9a1f 100644 --- a/gnu/packages/textutils.scm +++ b/gnu/packages/textutils.scm @@ -5,6 +5,7 @@ ;;; Copyright © 2015 Roel Janssen <roel@gnu.org> ;;; Copyright © 2016 Jelle Licht <jlicht@fsfe.org> ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com> +;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -29,6 +30,7 @@ #:use-module (guix build-system gnu) #:use-module (guix build-system cmake) #:use-module (guix build-system trivial) + #:use-module (gnu packages) #:use-module (gnu packages autotools) #:use-module (gnu packages python) #:use-module (gnu packages zip)) @@ -306,7 +308,8 @@ regular expression object can be specified.") "/antiword-" version ".tar.gz")) (sha256 (base32 - "1b7mi1l20jhj09kyh0bq14qzz8vdhhyf35gzwsq43mn6rc7h0b4f")))) + "1b7mi1l20jhj09kyh0bq14qzz8vdhhyf35gzwsq43mn6rc7h0b4f")) + (patches (search-patches "antiword-CVE-2014-8123.patch")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; There are no tests diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm index cedb306957..8895fd774e 100644 --- a/gnu/packages/tls.scm +++ b/gnu/packages/tls.scm @@ -351,16 +351,16 @@ security, and applying best practice development processes.") (define-public python-acme (package (name "python-acme") - (version "0.6.0") + (version "0.8.0") (source (origin (method url-fetch) (uri (string-append "https://pypi.python.org/packages/" - "af/33/703e5ec3d7efde7c4d2fcea9cdf88953a33d4e72aafd5b0a330173a7b395/" + "45/17/6fdcede92c7fe4d9c1ab9d7513ded5aa969a0b9c90f3d7b3b074cd37e898/" "acme-" version ".tar.gz")) (sha256 (base32 - "1ipck25c6nr0x54w2cc8ziwjmyyrpyz6pc1y8xc9nqmxvw4n0kpc")))) + "1nk48p0pi6xmqpsqjvw6xkx5vv4vl33yzq67fpr33ci8fra6pa6z")))) (build-system python-build-system) (arguments `(#:phases @@ -413,30 +413,27 @@ security, and applying best practice development processes.") (define-public certbot (package (name "certbot") - (version "0.6.0") + (version "0.8.0") (source (origin (method url-fetch) (uri (string-append "https://pypi.python.org/packages/" - "fc/eb/7594bf16d89909a9d52c46edbeae669d4b2ee6e12453bd97e674d0371920/" + "da/b8/fa6d7f0f8c0d37944ca4a1940b1e933fc6673498995a45db03c034bb11dd/" name "-" version ".tar.gz")) (sha256 (base32 - "0ba95cf6shmyhi4vzvk64vbkrmr8qvkn32k3xwb2iv7ybbfbgc40")))) + "052338jdiy8dniskqxm2hzbca084ms0xqnjicshl6cpvhjs70g1w")))) (build-system python-build-system) (arguments `(#:python ,python-2 #:phases (modify-phases %standard-phases - (add-after 'install 'docs + (add-after 'build 'docs (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (man1 (string-append out "/share/man/man1")) (man7 (string-append out "/share/man/man7")) (info (string-append out "/info"))) - (substitute* "docs/man/certbot.rst" - (("certbot --help all") - (string-append out "/bin/certbot" " --help all"))) (and (zero? (system* "make" "-C" "docs" "man" "info")) (install-file "docs/_build/texinfo/Certbot.info" info) diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm index db3e9f1768..346f9753a8 100644 --- a/gnu/packages/version-control.scm +++ b/gnu/packages/version-control.scm @@ -112,14 +112,14 @@ as well as the classic centralized workflow.") ;; Keep in sync with 'git-manpages'! (package (name "git") - (version "2.7.4") + (version "2.8.3") (source (origin (method url-fetch) (uri (string-append "mirror://kernel.org/software/scm/git/git-" version ".tar.xz")) (sha256 (base32 - "0ys55v2xrhzj74jrrqx75xpr458klnyxshh8d8swfpp0zgg79rfy")))) + "14dafk7rz8cy2z5b92yf009qf4pc70s0viwq7hxsgd4898knr3kx")))) (build-system gnu-build-system) (native-inputs `(("native-perl" ,perl) @@ -292,7 +292,7 @@ everything from small to very large projects with speed and efficiency.") version ".tar.xz")) (sha256 (base32 - "09ffk5c0dl1xg7xcvr0kadhspx4fr2spmlmcajzfycmap0ddhkyh")))) + "1ilbi4xdn77a5yrjyrcx0nap0j4raw3h1fr0k32zs9y35c6f29cx")))) (build-system trivial-build-system) (arguments '(#:modules ((guix build utils)) @@ -479,7 +479,7 @@ will work.") (method git-fetch) (uri (git-reference (url "https://github.com/nvie/gitflow/") - (commit "15aab26"))) + (commit "15aab26490facf285acef56cb5d61025eacb3a69"))) (sha256 (base32 "01fs97q76fdfnvmrh2cyjhywcs3pykf1dg58sy0frflnsdzs6prx")))) @@ -513,10 +513,10 @@ lot easier.") (license bsd-2))) (define-public git-test-sequence - (let ((commit "48e5a2f")) + (let ((commit "48e5a2f5a13a5f30452647237e23362b459b9c76")) (package (name "git-test-sequence") - (version (string-append "20140312." commit)) + (version (string-append "20140312." (string-take commit 7))) (source (origin (method git-fetch) (uri (git-reference @@ -851,8 +851,8 @@ masters from remote CVS hosts.") "094pjwshvazlgagc254in2xvrp93vhcj0kb5ms17qs7sch99x9z2")))) (build-system gnu-build-system) (inputs `(("perl" ,perl) - ("inetutils" ,inetutils) ; for `hostname', used in the tests - ("emacs" ,emacs-no-x))) ; for `ctags' + ("inetutils" ,inetutils))) ; for `hostname', used in the tests + (native-inputs `(("emacs" ,emacs-minimal))) ; for `ctags' (home-page "http://www.gnu.org/software/vc-dwim/") (synopsis "Version-control-agnostic ChangeLog diff and commit tool") (description diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm index 1bd5198d5b..4782ec4692 100644 --- a/gnu/packages/video.scm +++ b/gnu/packages/video.scm @@ -1167,7 +1167,7 @@ capabilities.") (define-public vapoursynth (package (name "vapoursynth") - (version "28") + (version "32") (source (origin (method url-fetch) (uri (string-append @@ -1176,7 +1176,7 @@ capabilities.") (file-name (string-append name "-" version)) (sha256 (base32 - "0pnrawcg1j65i46yim0z447lglq1af5zgx0lkqf1x5xl1bfwc0v7")))) + "1j08whj946v2kkpgxsfhpca8xf0ax9iqzn73wvwjx319p9j0ymp9")))) (build-system gnu-build-system) (native-inputs `(("autoconf" ,autoconf) @@ -1189,7 +1189,8 @@ capabilities.") (inputs `(("ffmpeg" ,ffmpeg) ("libass" ,libass) - ("tesseract-ocr" ,tesseract-ocr))) + ("tesseract-ocr" ,tesseract-ocr) + ("zimg" ,zimg))) (arguments '(#:phases (modify-phases %standard-phases @@ -1351,7 +1352,7 @@ be used for realtime video capture via Linux-specific APIs.") (define-public obs (package (name "obs") - (version "0.14.1") + (version "0.14.2") (source (origin (method url-fetch) (uri (string-append "https://github.com/jp9000/obs-studio" @@ -1359,7 +1360,7 @@ be used for realtime video capture via Linux-specific APIs.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "1w07ign2swfigmsjd2jyaqqdnj2zpzs8hzsjzzk5l377jbx3ml5g")))) + "1cb8naa67kfnnngkzv1wpd4y241j29ggnk1w7jgnymp9j8dny1xl")))) (build-system cmake-build-system) (arguments '(#:tests? #f)) ; no tests (native-inputs diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm index c86e0f03fc..6ac03fcce6 100644 --- a/gnu/packages/web.scm +++ b/gnu/packages/web.scm @@ -111,14 +111,14 @@ and its related documentation.") (define-public nginx (package (name "nginx") - (version "1.10.0") + (version "1.10.1") (source (origin (method url-fetch) (uri (string-append "http://nginx.org/download/nginx-" version ".tar.gz")) (sha256 (base32 - "0kdyqa5xaxvhz6y75ixs05mzygk3kszzdq5h0gnlrg35vp1lgmlf")))) + "00d8hxj8453c7989qd7z4f1mjp0k3ib8k29i1qyf11b4ar35ilqz")))) (build-system gnu-build-system) (inputs `(("pcre" ,pcre) ("openssl" ,openssl) @@ -232,7 +232,8 @@ and UNIX socket support.") version ".tar.gz")) (sha256 (base32 - "1mvq9p85khsl818i4vbszyfab0fd45mdrwrxjkzw05mk1xcyc1br")))) + "1mvq9p85khsl818i4vbszyfab0fd45mdrwrxjkzw05mk1xcyc1br")) + (patches (search-patches "jansson-CVE-2016-4425.patch")))) (build-system gnu-build-system) (home-page "http://www.digip.org/jansson/") (synopsis "JSON C library") @@ -290,8 +291,7 @@ parse JSON formatted strings back into the C representation of JSON objects.") "1fj5mf6wbwz7v74n2safbw7fpw32fik19vf0wdbc2srn82i8fiwz")))) (build-system perl-build-system) (arguments - `(#:tests? #f ; no tests - #:phases + `(#:phases (modify-phases %standard-phases ;; There is no configure or build steps. (delete 'configure) @@ -313,9 +313,7 @@ parse JSON formatted strings back into the C representation of JSON objects.") (lambda* (#:key outputs #:allow-other-keys) (let ((bin (string-append (assoc-ref outputs "out") "/bin")) (perl (string-append (assoc-ref outputs "out") - "/lib/perl5/site_perl")) - (share (string-append - (assoc-ref outputs "out") "/share/krona-tools"))) + "/lib/perl5/site_perl/krona-tools/lib"))) (mkdir-p bin) (for-each (lambda (script) @@ -340,13 +338,13 @@ parse JSON formatted strings back into the C representation of JSON objects.") "ImportTaxonomy" "ImportText" "ImportXML")) - (mkdir-p share) - (copy-recursively "data" (string-append share "/data")) - (copy-recursively "img" (string-append share "/img")) - (copy-recursively "taxonomy" (string-append share "/taxonomy")) - (substitute* '("lib/KronaTools.pm") - (("taxonomyDir = \".libPath/../taxonomy\"") - (string-append "taxonomyDir = \"" share "/taxonomy\""))) + (copy-recursively "data" (string-append perl "/../data")) + (copy-recursively "img" (string-append perl "/../img")) + (copy-recursively "taxonomy" (string-append perl "/../taxonomy")) + (install-file "src/krona-2.0.js" (string-append perl "/../src")) + (substitute* "lib/KronaTools.pm" + (("`ktGetLibPath`") + (string-append "\"" perl "\""))) (install-file "lib/KronaTools.pm" perl)))) (add-after 'install 'wrap-program (lambda* (#:key inputs outputs #:allow-other-keys) @@ -356,8 +354,14 @@ parse JSON formatted strings back into the C representation of JSON objects.") (lambda (executable) (wrap-program executable `("PERL5LIB" ":" prefix - (,(string-append out "/lib/perl5/site_perl"))))) - (find-files (string-append out "/bin/") ".*")))))))) + (,(string-append out "/lib/perl5/site_perl/krona-tools/lib"))))) + (find-files (string-append out "/bin/") ".*"))))) + (delete 'check) + (add-after 'wrap-program 'check + (lambda* (#:key inputs outputs #:allow-other-keys) + (with-directory-excursion "data" + (zero? (system* (string-append (assoc-ref outputs "out") "/bin/ktImportText") + "ec.tsv")))))))) (inputs `(("perl" ,perl))) (home-page "https://github.com/marbl/Krona/wiki") @@ -527,16 +531,15 @@ used to validate and fix HTML data.") (define-public tinyproxy (package (name "tinyproxy") - (version "1.8.3") + (version "1.8.4") (source (origin (method url-fetch) - (uri (string-append - "https://download.banu.com/tinyproxy/" - (version-major+minor version) - "/tinyproxy-" version ".tar.gz")) + (uri (string-append "https://github.com/tinyproxy/tinyproxy/" + "releases/download/" version "/tinyproxy-" + version ".tar.xz")) (sha256 (base32 - "05y0y2q9j10x72y1fipya6bmc8hjcdf3kfw7dh8ahczpy341c938")))) + "002hi97687czhfkwsjkr174yvlp10224qi6gd5s53z230bgls7x4")))) (build-system gnu-build-system) (arguments `(#:configure-flags @@ -559,7 +562,7 @@ used to validate and fix HTML data.") ("docbook-xml" ,docbook-xml) ("docbook-xsl" ,docbook-xsl) ("libxslt" ,libxslt))) - (home-page "https://banu.com/tinyproxy/") + (home-page "https://tinyproxy.github.io/") (synopsis "Light-weight HTTP/HTTPS proxy daemon") (description "Tinyproxy is a light-weight HTTP/HTTPS proxy daemon. Designed from the ground up to be fast and yet small, it is an ideal @@ -604,16 +607,17 @@ of people.") (define-public libyaml (package (name "libyaml") - (version "0.1.5") + (version "0.1.6") (source (origin (method url-fetch) (uri (string-append "http://pyyaml.org/download/libyaml/yaml-" version ".tar.gz")) + (patches (search-patches "libyaml-CVE-2014-9130.patch")) (sha256 (base32 - "1vrv5ly58bkmcyc049ad180f2m8iav6l9h3v8l2fqdmrny7yx1zs")))) + "0j9731s5zjb8mjx7wzf6vh7bsqi38ay564x6s9nri2nh9cdrg9kx")))) (build-system gnu-build-system) (home-page "http://pyyaml.org/wiki/LibYAML") (synopsis "YAML 1.1 parser and emitter written in C") @@ -701,7 +705,7 @@ from streaming URLs. It is a command-line wrapper for the libquvi library.") (source (origin (method url-fetch) - (uri (string-append "http://serf.googlecode.com/svn/src_releases/serf-" + (uri (string-append "https://archive.apache.org/dist/serf/serf-" version ".tar.bz2")) (sha256 (base32 "14155g48gamcv5s0828bzij6vr14nqmbndwq8j8f9g6vcph0nl70")) @@ -752,7 +756,7 @@ from streaming URLs. It is a command-line wrapper for the libquvi library.") (string-append "PREFIX=" out)))))) (replace 'check (lambda _ (zero? (system* "scons" "check")))) (replace 'install (lambda _ (zero? (system* "scons" "install"))))))) - (home-page "https://code.google.com/p/serf/") + (home-page "https://serf.apache.org/") (synopsis "High-performance asynchronous HTTP client library") (description "serf is a C-based HTTP client library built upon the Apache Portable diff --git a/gnu/packages/webkit.scm b/gnu/packages/webkit.scm index 734e4fc0df..578b4c9847 100644 --- a/gnu/packages/webkit.scm +++ b/gnu/packages/webkit.scm @@ -53,14 +53,14 @@ (define-public webkitgtk (package (name "webkitgtk") - (version "2.12.2") + (version "2.12.3") (source (origin (method url-fetch) (uri (string-append "http://www.webkitgtk.org/releases/" name "-" version ".tar.xz")) (sha256 (base32 - "097i53ip93qfy8sgpv5qjf8fmi07gwm41q83jxrxldqwif89pi4x")))) + "01y34v62khf03w25fnzgd42rrai5mf1m95lr5vjyw8ya5sdbng0p")))) (build-system cmake-build-system) (arguments '(#:tests? #f ; no tests diff --git a/gnu/packages/wordnet.scm b/gnu/packages/wordnet.scm index 1823a624ed..dbc75860ef 100644 --- a/gnu/packages/wordnet.scm +++ b/gnu/packages/wordnet.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,6 +22,7 @@ #:use-module (guix build-system gnu) #:use-module (guix licenses) #:use-module (guix download) + #:use-module (gnu packages) #:use-module (gnu packages tcl)) (define-public wordnet @@ -30,11 +32,14 @@ (source (origin (method url-fetch) (uri (string-append "http://wordnetcode.princeton.edu/" - version "/WordNet-" - version ".tar.bz2")) + version "/WordNet-" version ".tar.bz2")) (sha256 (base32 - "08pgjvd2vvmqk3h641x63nxp7wqimb9r30889mkyfh2agc62sjbc")))) + "08pgjvd2vvmqk3h641x63nxp7wqimb9r30889mkyfh2agc62sjbc")) + (patches (search-patches + "wordnet-CVE-2008-2149.patch" + "wordnet-CVE-2008-3908-pt1.patch" + "wordnet-CVE-2008-3908-pt2.patch")))) (build-system gnu-build-system) (arguments `(#:configure-flags (list (string-append "--with-tcl=" @@ -47,30 +52,30 @@ ;; Provide the `result' field in `Tcl_Interp'. ;; See <https://bugs.gentoo.org/show_bug.cgi?id=452034>. "CFLAGS=-DUSE_INTERP_RESULT") - #:phases (alist-cons-after - 'install 'post-install - (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out")) - (bin (assoc-ref outputs "tk")) - (tk (assoc-ref inputs "tk")) - (tkv ,(let ((v (package-version tk))) - (string-take v (string-index-right v #\.))))) - ;; Move `wishwn' and `wnb' to BIN. - (for-each (lambda (prog) - (let ((orig (string-append out "/bin/" prog)) - (dst (string-append bin "/bin/" prog)) - (dir (string-append tk "/lib/tk" tkv))) - (mkdir-p (dirname dst)) - (copy-file orig dst) - (delete-file orig) - (wrap-program dst - `("TK_LIBRARY" "" = (,dir)) - `("PATH" ":" prefix - (,(string-append out - "/bin")))))) - '("wishwn" "wnb")) - #t)) - %standard-phases))) + #:phases + (modify-phases %standard-phases + (add-after 'install 'post-install + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (bin (assoc-ref outputs "tk")) + (tk (assoc-ref inputs "tk")) + (tkv ,(let ((v (package-version tk))) + (string-take v (string-index-right v #\.))))) + ;; Move `wishwn' and `wnb' to BIN. + (for-each (lambda (prog) + (let ((orig (string-append out "/bin/" prog)) + (dst (string-append bin "/bin/" prog)) + (dir (string-append tk "/lib/tk" tkv))) + (mkdir-p (dirname dst)) + (copy-file orig dst) + (delete-file orig) + (wrap-program dst + `("TK_LIBRARY" "" = (,dir)) + `("PATH" ":" prefix + (,(string-append out + "/bin")))))) + '("wishwn" "wnb")) + #t)))))) (outputs '("out" "tk")) ; for the Tcl/Tk GUI (inputs `(("tk" ,tk) diff --git a/gnu/packages/wxwidgets.scm b/gnu/packages/wxwidgets.scm index 2c4a26aeac..3231e3d48d 100644 --- a/gnu/packages/wxwidgets.scm +++ b/gnu/packages/wxwidgets.scm @@ -63,7 +63,7 @@ `(("pkg-config" ,pkg-config))) (arguments '(#:configure-flags - '("--with-regex=sys" "--with-libmspack" + '("--with-regex" "--with-libmspack" "--with-sdl" "--enable-webview" "--enable-webkit" diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm index c060a39009..bfcba473a8 100644 --- a/gnu/packages/xdisorg.scm +++ b/gnu/packages/xdisorg.scm @@ -11,6 +11,7 @@ ;;; Copyright © 2015 Florian Paul Schmidt <mista.tapas@gmx.net> ;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org> ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -381,9 +382,12 @@ move windows, switch between desktops, etc.).") (version "0.8") (source (origin (method url-fetch) - (uri (string-append - "http://linuxbrit.co.uk/downloads/scrot-" - version ".tar.gz")) + (uri (list (string-append + "http://linuxbrit.co.uk/downloads/scrot-" + version ".tar.gz") + (string-append + "https://fossies.org/linux/privat/old/scrot-" + version ".tar.gz"))) (sha256 (base32 "1wll744rhb49lvr2zs6m93rdmiq59zm344jzqvijrdn24ksiqgb1")))) @@ -395,16 +399,16 @@ move windows, switch between desktops, etc.).") (list (string-append "--mandir=" (assoc-ref %outputs "out") "/share/man")) - #:phases (alist-replace - 'install - (lambda* (#:key inputs outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (doc (string-append out "/share/doc/scrot"))) - (mkdir-p doc) - (zero? - (system* "make" "install" - (string-append "docsdir=" doc))))) - %standard-phases))) + #:phases + (modify-phases %standard-phases + (replace 'install + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (doc (string-append out "/share/doc/scrot"))) + (mkdir-p doc) + (zero? + (system* "make" "install" + (string-append "docsdir=" doc))))))))) (inputs `(("libx11" ,libx11) ("giblib" ,giblib))) @@ -540,7 +544,7 @@ things less distracting.") (define-public xlockmore (package (name "xlockmore") - (version "5.46") + (version "5.47") (source (origin (method url-fetch) (uri (list (string-append @@ -549,10 +553,10 @@ things less distracting.") (string-append "http://www.tux.org/~bagleyd/xlock/xlockmore-old" "/xlockmore-" version - "/xlockmore-" version ".tar.bz2"))) + "/xlockmore-" version ".tar.xz"))) (sha256 (base32 - "1ps0dmnh912x8mwns94y2607xk90rjxrjn5s1pkmmpjg5h9bxcrj")))) + "138d79b8zc2hambbr9fnxp3fhihlcljgqns04zf0kv2f53pavqwl")))) (build-system gnu-build-system) (arguments '(#:configure-flags (list (string-append "--enable-appdefaultdir=" @@ -570,8 +574,7 @@ things less distracting.") "XLockMore is a classic screen locker and screen saver for the X Window System.") (license (license:non-copyleft #f "See xlock.c.") - ;; + GPLv2 in modes/glx/biof.c. - ))) + ))) ; + GPLv2 in modes/glx/biof.c. (define-public xosd (package @@ -907,3 +910,44 @@ demos. It also acts as a nice screen locker.") (string-append "http://metadata.ftp-master.debian.org/changelogs/" "/main/x/xscreensaver/xscreensaver_5.34-2_copyright"))))) + +(define-public rofi + (package + (name "rofi") + (version "1.0.1") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/DaveDavenport/rofi/" + "releases/download/" + version "/rofi-" version ".tar.xz")) + (sha256 + (base32 + "01jxml9vk4cw7pngpan7dipmb98s6ibh6f0023lw3hbgxy650637")))) + (build-system gnu-build-system) + (inputs + `(("libx11" ,libx11) + ("pango" ,pango) + ("cairo" ,cairo) + ("glib" ,glib) + ("startup-notification" ,startup-notification) + ("libxkbcommon" ,libxkbcommon) + ("libxcb" ,libxcb) + ("xcb-util" ,xcb-util) + ("xcb-util-wm" ,xcb-util-wm))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-before 'configure 'adjust-tests + (lambda _ + (substitute* '("test/helper-expand.c") + (("~root") "/root") + (("~") "") + (("g_get_home_dir \\(\\)") "\"/\""))))))) + (home-page "https://davedavenport.github.io/rofi/") + (synopsis "Application Launcher") + (description "Rofi is a minimalist Application Launcher. It memorizes which +applications you regularily use and also allows you to search for an application +by name.") + (license license:expat))) diff --git a/gnu/packages/xiph.scm b/gnu/packages/xiph.scm index 68f76d5c5c..d1597e96ea 100644 --- a/gnu/packages/xiph.scm +++ b/gnu/packages/xiph.scm @@ -270,7 +270,10 @@ Kate stream.") (sha256 (base32 "1g12bnh5ah08v529y72kfdz5lhvy75iaz7f9jskyby23m9dkk2d3")) - (patches (search-patches "vorbis-tools-CVE-2015-6749.patch")))) + (patches (search-patches + "vorbis-tools-CVE-2014-9638+CVE-2014-9639.patch" + "vorbis-tools-CVE-2014-9640.patch" + "vorbis-tools-CVE-2015-6749.patch")))) (build-system gnu-build-system) (inputs `(("ao" ,ao) ("curl" ,curl) diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm index a5ea3d0974..5b72c805bd 100644 --- a/gnu/packages/xml.scm +++ b/gnu/packages/xml.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org> ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com> @@ -67,6 +67,7 @@ things the parser might find in the XML document (like start tags).") (package (name "libxml2") (version "2.9.3") + (replacement libxml2/fixed) ;multiple CVEs (source (origin (method url-fetch) (uri (string-append "ftp://xmlsoft.org/libxml2/libxml2-" @@ -93,9 +94,24 @@ things the parser might find in the XML document (like start tags).") project (but it is usable outside of the Gnome platform).") (license license:x11))) +(define libxml2/fixed + (package + (inherit libxml2) + (source + (let ((name "libxml2") + (version "2.9.4")) + (origin + (method url-fetch) + (uri (string-append "ftp://xmlsoft.org/libxml2/libxml2-" + version ".tar.gz")) + (sha256 + (base32 + "0g336cr0bw6dax1q48bblphmchgihx9p1pjmxdnrd6sh3qci3fgz"))))))) + (define-public python-libxml2 (package (inherit libxml2) (name "python-libxml2") + (replacement #f) (build-system python-build-system) (arguments `(;; XXX: Tests are specified in 'Makefile.am', but not in 'setup.py'. diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm index 2eff1b28c3..ad81f975dc 100644 --- a/gnu/packages/xorg.scm +++ b/gnu/packages/xorg.scm @@ -2810,10 +2810,10 @@ X server.") (define-public xf86-video-intel - (let ((commit "d167280")) + (let ((commit "d1672806a5222f00dcc2eb24ccddd03f727f71bc")) (package (name "xf86-video-intel") - (version (string-append "2.99.917-1-" commit)) + (version (string-append "2.99.917-1-" (string-take commit 7))) (source (origin ;; there's no current tarball diff --git a/gnu/services/base.scm b/gnu/services/base.scm index 96bf8da02a..2780d124c7 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com> ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com> +;;; Copyright © 2016 Leo Famulari <leo@famulari.name> ;;; ;;; This file is part of GNU Guix. ;;; @@ -93,6 +94,8 @@ gpm-service-type gpm-service + urandom-seed-service + %base-services)) ;;; Commentary: @@ -422,6 +425,67 @@ stopped before 'kill' is called." ;;; +;;; Preserve entropy to seed /dev/urandom on boot. +;;; + +(define %random-seed-file + "/var/lib/random-seed") + +(define (urandom-seed-shepherd-service _) + "Return a shepherd service for the /dev/urandom seed." + (list (shepherd-service + (documentation "Preserve entropy across reboots for /dev/urandom.") + (provision '(urandom-seed)) + (requirement '(user-processes)) + (start #~(lambda _ + ;; On boot, write random seed into /dev/urandom. + (when (file-exists? #$%random-seed-file) + (call-with-input-file #$%random-seed-file + (lambda (seed) + (call-with-output-file "/dev/urandom" + (lambda (urandom) + (dump-port seed urandom)))))) + ;; Immediately refresh the seed in case the system doesn't + ;; shut down cleanly. + (call-with-input-file "/dev/urandom" + (lambda (urandom) + (let ((previous-umask (umask #o077)) + (buf (make-bytevector 512))) + (mkdir-p (dirname #$%random-seed-file)) + (get-bytevector-n! urandom buf 0 512) + (call-with-output-file #$%random-seed-file + (lambda (seed) + (put-bytevector seed buf))) + (umask previous-umask)))) + #t)) + (stop #~(lambda _ + ;; During shutdown, write from /dev/urandom into random seed. + (let ((buf (make-bytevector 512))) + (call-with-input-file "/dev/urandom" + (lambda (urandom) + (let ((previous-umask (umask #o077))) + (get-bytevector-n! urandom buf 0 512) + (mkdir-p (dirname #$%random-seed-file)) + (call-with-output-file #$%random-seed-file + (lambda (seed) + (put-bytevector seed buf))) + (umask previous-umask)) + #t))))) + (modules `((rnrs bytevectors) + (rnrs io ports) + ,@%default-modules))))) + +(define urandom-seed-service-type + (service-type (name 'urandom-seed) + (extensions + (list (service-extension shepherd-root-service-type + urandom-seed-shepherd-service))))) + +(define (urandom-seed-service) + (service urandom-seed-service-type #f)) + + +;;; ;;; System-wide environment variables. ;;; @@ -1200,7 +1264,6 @@ extra rules from the packages listed in @var{rules}." "Return a service that uses @var{device} as a swap device." (service swap-service-type device)) - (define-record-type* <gpm-configuration> gpm-configuration make-gpm-configuration gpm-configuration? (gpm gpm-configuration-gpm) ;package @@ -1281,6 +1344,7 @@ This is the GNU operating system, welcome!\n\n"))) (static-networking-service "lo" "127.0.0.1" #:provision '(loopback)) (syslog-service) + (urandom-seed-service) (guix-service) (nscd-service) diff --git a/gnu/services/dict.scm b/gnu/services/dict.scm new file mode 100644 index 0000000000..abab6a3eba --- /dev/null +++ b/gnu/services/dict.scm @@ -0,0 +1,131 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com> +;;; +;;; 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 services dict) + #:use-module (guix gexp) + #:use-module (guix records) + #:use-module (gnu services) + #:use-module (gnu services shepherd) + #:use-module (gnu system shadow) + #:use-module ((gnu packages admin) #:select (shadow)) + #:use-module (gnu packages dico) + #:use-module (gnu packages dictionaries) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:use-module (ice-9 match) + #:export (dicod-service + dicod-configuration + dicod-database + %dicod-database:gcide)) + + +;;; +;;; GNU Dico. +;;; + +(define-record-type* <dicod-configuration> + dicod-configuration make-dicod-configuration + dicod-configuration? + (dico dicod-configuration-dico (default dico)) + (databases dicod-configuration-databases + ;; list of <dicod-database> + (default (list %dicod-database:gcide)))) + +(define-record-type* <dicod-database> + dicod-database make-dicod-database + dicod-database? + (name dicod-database-name) + (module dicod-database-module) + (options dicod-database-options (default '()))) + +(define %dicod-database:gcide + (dicod-database + (name "gcide") + (module "gcide") + (options (list #~(string-append "dbdir=" #$gcide "/share/gcide") + "idxdir=/var/run/dicod")))) + +(define %dicod-accounts + (list (user-group + (name "dicod") + (system? #t)) + (user-account + (name "dicod") + (group "dicod") + (system? #t) + (home-directory "/var/empty") + (shell #~(string-append #$shadow "/sbin/nologin"))))) + +(define (dicod-configuration-file config) + (define dicod-configuration->text + (match-lambda + (($ <dicod-configuration> dico databases) + (append-map (match-lambda + (($ <dicod-database> name module options) + `(" +load-module " ,module "; +database { + name \"" ,name "\"; + handler \"" ,module + (string-join (list ,@options) " " 'prefix) "\"; +}\n"))) + databases)))) + (apply mixed-text-file "dicod.conf" (dicod-configuration->text config))) + +(define %dicod-activation + #~(begin + (use-modules (guix build utils)) + (let ((user (getpwnam "dicod")) + (rundir "/var/run/dicod")) + (mkdir-p rundir) + (chown rundir (passwd:uid user) (passwd:gid user))))) + +(define (dicod-shepherd-service config) + (list (shepherd-service + (provision '(dicod)) + (documentation "Run the dicod daemon.") + (start #~(make-forkexec-constructor + (list (string-append #$dico "/bin/dicod") "--foreground" + (string-append + "--config=" #$(dicod-configuration-file config))) + #:user "dicod" #:group "dicod")) + (stop #~(make-kill-destructor))))) + +(define dicod-service-type + (service-type + (name 'dict) + (extensions + (list (service-extension account-service-type + (const %dicod-accounts)) + (service-extension activation-service-type + (const %dicod-activation)) + (service-extension shepherd-root-service-type + dicod-shepherd-service))))) + +(define* (dicod-service #:key (config (dicod-configuration))) + "Return a service that runs the @command{dicod} daemon, an implementation +of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}). + +The optional @var{config} argument specifies the configuration for +@command{dicod}, which should be a @code{<dicod-configuration>} object, by +default it serves the GNU Collaborative International Dictonary of English. + +You can add @command{open localhost} to your @file{~/.dico} file to make +@code{localhost} the default server for @command{dico} +client (@pxref{Initialization File,,, dico, GNU Dico Manual})." + (service dicod-service-type config)) diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm index 7e8c4489dd..f4cfaf0990 100644 --- a/gnu/system/file-systems.scm +++ b/gnu/system/file-systems.scm @@ -18,7 +18,6 @@ (define-module (gnu system file-systems) #:use-module (ice-9 match) - #:use-module (guix gexp) #:use-module (guix records) #:use-module (guix store) #:use-module ((gnu build file-systems) diff --git a/gnu/system/install.scm b/gnu/system/install.scm index 07ad3cbcb2..a72613e9c5 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -145,6 +145,11 @@ current store is on a RAM disk." (chmod #$directory #o1775))) #~(begin + ;; Bind-mount TARGET's /tmp in case we need space to build things. + (let ((tmpdir (string-append #$target "/tmp"))) + (mkdir-p tmpdir) + (mount tmpdir "/tmp" "none" MS_BIND)) + (unless (file-exists? "/.ro-store") (mkdir "/.ro-store") (mount #$(%store-prefix) "/.ro-store" "none" diff --git a/guix/build-system/emacs.scm b/guix/build-system/emacs.scm index 03c1eb2baf..a7982002b6 100644 --- a/guix/build-system/emacs.scm +++ b/guix/build-system/emacs.scm @@ -47,11 +47,7 @@ "Return the default Emacs package." ;; Lazily resolve the binding to avoid a circular dependency. (let ((emacs-mod (resolve-interface '(gnu packages emacs)))) - ;; we use 'emacs' instead of 'emacs-no-x' because the latter appears not - ;; to be loading some macros and causes problems to some packages. For - ;; example, with the latter AUCTeX gives the error message: - ;; "(invalid-function dbus-ignore-errors)". - (module-ref emacs-mod 'emacs))) + (module-ref emacs-mod 'emacs-minimal))) (define* (lower name #:key source inputs native-inputs outputs system target diff --git a/guix/build/bournish.scm b/guix/build/bournish.scm index 4022796658..1f17e0a22d 100644 --- a/guix/build/bournish.scm +++ b/guix/build/bournish.scm @@ -134,8 +134,10 @@ commands such as 'ls' and 'cd'; it lacks globbing, pipes---everything.\n")) (define (read-bournish port env) "Read a Bournish expression from PORT, and return the corresponding Scheme code as an sexp." - (match (string-tokenize (read-line port)) - ((command args ...) + (match (read-line port) + ((? eof-object? eof) + eof) + ((= string-tokenize (command args ...)) (match (assoc command %commands) ((command proc) ;built-in command (apply proc (map expand-variable args))) @@ -147,11 +149,24 @@ code as an sexp." (define %bournish-language (let ((scheme (lookup-language 'scheme))) + ;; XXX: The 'scheme' language lacks a "joiner", so we add one here. This + ;; allows us to have 'read-bournish' read one shell statement at a time + ;; instead of having to read until EOF. + (set! (language-joiner scheme) + (lambda (exps env) + (match exps + (() '(begin)) + ((exp) exp) + (_ `(begin ,@exps))))) + (make-language #:name 'bournish #:title "Bournish" + + ;; The reader does all the heavy lifting. #:reader read-bournish - #:compilers (language-compilers scheme) - #:decompilers (language-decompilers scheme) + #:compilers `((scheme . ,(lambda (exp env options) + (values exp env env)))) + #:decompilers '() #:evaluator (language-evaluator scheme) #:printer (language-printer scheme) #:make-default-environment diff --git a/guix/build/download.scm b/guix/build/download.scm index 7741726c41..bd011ce878 100644 --- a/guix/build/download.scm +++ b/guix/build/download.scm @@ -234,9 +234,10 @@ and 'guix publish', something like (string-drop path 33) path))) -(define (ftp-fetch uri file) - "Fetch data from URI and write it to FILE. Return FILE on success." - (let* ((conn (ftp-open (uri-host uri))) +(define* (ftp-fetch uri file #:key timeout) + "Fetch data from URI and write it to FILE. Return FILE on success. Bail +out if the connection could not be established in less than TIMEOUT seconds." + (let* ((conn (ftp-open (uri-host uri) #:timeout timeout)) (size (false-if-exception (ftp-size conn (uri-path uri)))) (in (ftp-retr conn (basename (uri-path uri)) (dirname (uri-path uri))))) @@ -585,8 +586,10 @@ Return the resulting target URI." #:query (uri-query ref) #:fragment (uri-fragment ref))))) -(define (http-fetch uri file) - "Fetch data from URI and write it to FILE. Return FILE on success." +(define* (http-fetch uri file #:key timeout) + "Fetch data from URI and write it to FILE; when TIMEOUT is true, bail out if +the connection could not be established in less than TIMEOUT seconds. Return +FILE on success." (define post-2.0.7? (or (> (string->number (major-version)) 2) @@ -605,7 +608,7 @@ Return the resulting target URI." (Accept . "*/*"))) (let*-values (((connection) - (open-connection-for-uri uri)) + (open-connection-for-uri uri #:timeout timeout)) ((resp bv-or-port) ;; XXX: `http-get*' was introduced in 2.0.7, and replaced by ;; #:streaming? in 2.0.8. We know we're using it within the @@ -646,7 +649,7 @@ Return the resulting target URI." (format #t "following redirection to `~a'...~%" (uri->string uri)) (close connection) - (http-fetch uri file))) + (http-fetch uri file #:timeout timeout))) (else (error "download failed" (uri->string uri) code (response-reason-phrase resp)))))) @@ -686,6 +689,7 @@ Return a list of URIs." (define* (url-fetch url file #:key + (timeout 10) (mirrors '()) (content-addressed-mirrors '()) (hashes '())) "Fetch FILE from URL; URL may be either a single string, or a list of @@ -711,19 +715,19 @@ or #f." file (uri->string uri)) (case (uri-scheme uri) ((http https) - (false-if-exception* (http-fetch uri file))) + (false-if-exception* (http-fetch uri file #:timeout timeout))) ((ftp) - (false-if-exception* (ftp-fetch uri file))) + (false-if-exception* (ftp-fetch uri file #:timeout timeout))) (else (format #t "skipping URI with unsupported scheme: ~s~%" uri) #f))) - (define content-addressed-urls + (define content-addressed-uris (append-map (lambda (make-url) (filter-map (match-lambda ((hash-algo . hash) - (make-url hash-algo hash))) + (string->uri (make-url hash-algo hash)))) hashes)) content-addressed-mirrors)) @@ -733,7 +737,7 @@ or #f." (setvbuf (current-error-port) _IOLBF) - (let try ((uri (append uri content-addressed-urls))) + (let try ((uri (append uri content-addressed-uris))) (match uri ((uri tail ...) (or (fetch uri file) diff --git a/guix/build/emacs-build-system.scm b/guix/build/emacs-build-system.scm index f0a9a6e125..ab970012a7 100644 --- a/guix/build/emacs-build-system.scm +++ b/guix/build/emacs-build-system.scm @@ -21,6 +21,7 @@ #:use-module (guix build utils) #:use-module (guix build emacs-utils) #:use-module (srfi srfi-1) + #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) #:use-module (ice-9 rdelim) #:use-module (ice-9 regex) @@ -39,6 +40,27 @@ ;; archive signature. (define %install-suffix "/share/emacs/site-lisp/guix.d") +(define gnu:unpack (assoc-ref gnu:%standard-phases 'unpack)) + +(define (store-file->elisp-source-file file) + "Convert FILE, a store file name for an Emacs Lisp source file, into a file +name that has been stripped of the hash and version number." + (let-values (((name version) + (package-name->name+version + (strip-store-file-name file)))) + (string-append name ".el"))) + +(define* (unpack #:key source #:allow-other-keys) + "Unpack SOURCE into the build directory. SOURCE may be a compressed +archive, a directory, or an Emacs Lisp file." + (if (string-suffix? ".el" source) + (begin + (mkdir "source") + (chdir "source") + (copy-file source (store-file->elisp-source-file source)) + #t) + (gnu:unpack #:source source))) + (define* (build #:key outputs inputs #:allow-other-keys) "Compile .el files." (let* ((emacs (string-append (assoc-ref inputs "emacs") "/bin/emacs")) @@ -151,6 +173,7 @@ second hyphen. This corresponds to 'name-version' as used in ELPA packages." (define %standard-phases (modify-phases gnu:%standard-phases + (replace 'unpack unpack) (delete 'configure) (delete 'check) (delete 'install) diff --git a/guix/build/graft.scm b/guix/build/graft.scm index b61982dd64..fb21fc3af3 100644 --- a/guix/build/graft.scm +++ b/guix/build/graft.scm @@ -105,6 +105,19 @@ a list of store file name pairs." (string-append (dirname file) "/" target)))) matches))) +(define (exit-on-exception proc) + "Return a procedure that wraps PROC so that 'primitive-exit' is called when +an exception is caught." + (lambda (arg) + (catch #t + (lambda () + (proc arg)) + (lambda (key . args) + ;; Since ports are not thread-safe as of Guile 2.0, reopen stderr. + (let ((port (fdopen 2 "w0"))) + (print-exception port #f key args) + (primitive-exit 1)))))) + (define* (rewrite-directory directory output mapping #:optional (store (%store-directory))) "Copy DIRECTORY to OUTPUT, replacing strings according to MAPPING, a list of @@ -147,9 +160,13 @@ file name pairs." ;; #o777. (umask #o022) + ;; Use 'exit-on-exception' to force an exit upon I/O errors, given that + ;; 'n-par-for-each' silently swallows exceptions. + ;; See <http://bugs.gnu.org/23581>. (n-par-for-each (parallel-job-count) - rewrite-leaf (find-files directory (const #t) - #:directories? #t)) + (exit-on-exception rewrite-leaf) + (find-files directory (const #t) + #:directories? #t)) (rename-matching-files output mapping)) ;;; graft.scm ends here diff --git a/guix/build/ruby-build-system.scm b/guix/build/ruby-build-system.scm index a4ac3b307c..79ac380cb8 100644 --- a/guix/build/ruby-build-system.scm +++ b/guix/build/ruby-build-system.scm @@ -66,14 +66,13 @@ directory." ;; Use GNU unpack strategy for things that aren't gem archives. (gnu:unpack #:source source))) -(define* (build #:key source #:allow-other-keys) - "Build a new gem using the gemspec from the SOURCE gem." - (define (first-gemspec) - (first-matching-file "\\.gemspec$")) +(define (first-gemspec) + (first-matching-file "\\.gemspec$")) - ;; Remove the original gemspec, if present, and replace it with a new one. - ;; This avoids issues with upstream gemspecs requiring tools such as git to - ;; generate the files list. +(define* (extract-gemspec #:key source #:allow-other-keys) + "Remove the original gemspec, if present, and replace it with a new one. +This avoids issues with upstream gemspecs requiring tools such as git to +generate the files list." (when (gem-archive? source) (let ((gemspec (or (false-if-exception (first-gemspec)) ;; Make new gemspec if one wasn't shipped. @@ -94,7 +93,10 @@ directory." (write-char (read-char pipe) out)))) #t) (lambda () - (close-pipe pipe)))))) + (close-pipe pipe))))))) + +(define* (build #:key source #:allow-other-keys) + "Build a new gem using the gemspec from the SOURCE gem." ;; Build a new gem from the current working directory. This also allows any ;; dynamic patching done in previous phases to be present in the installed @@ -134,6 +136,7 @@ GEM-FLAGS are passed to the 'gem' invokation, if present." (define %standard-phases (modify-phases gnu:%standard-phases (delete 'configure) + (add-before 'build 'extract-gemspec extract-gemspec) (replace 'build build) (replace 'unpack unpack) (replace 'install install) diff --git a/guix/build/union.scm b/guix/build/union.scm index ccd2d5c103..6640b56523 100644 --- a/guix/build/union.scm +++ b/guix/build/union.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012, 2013, 2014, 2016 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> ;;; ;;; This file is part of GNU Guix. @@ -53,22 +53,24 @@ identical, #f otherwise." (let ((st1 (stat file1)) (st2 (stat file2))) - (and (eq? (stat:type st1) 'regular) - (eq? (stat:type st2) 'regular) - (= (stat:size st1) (stat:size st2)) - (call-with-input-file file1 - (lambda (port1) - (call-with-input-file file2 - (lambda (port2) - (define len 8192) - (define buf1 (make-bytevector len)) - (define buf2 (make-bytevector len)) - (let loop () - (let ((n1 (get-bytevector-n! port1 buf1 0 len)) - (n2 (get-bytevector-n! port2 buf2 0 len))) - (and (equal? n1 n2) - (or (eof-object? n1) - (loop)))))))))))) + ;; When deduplication is enabled, identical files share the same inode. + (or (= (stat:ino st1) (stat:ino st2)) + (and (eq? (stat:type st1) 'regular) + (eq? (stat:type st2) 'regular) + (= (stat:size st1) (stat:size st2)) + (call-with-input-file file1 + (lambda (port1) + (call-with-input-file file2 + (lambda (port2) + (define len 8192) + (define buf1 (make-bytevector len)) + (define buf2 (make-bytevector len)) + (let loop () + (let ((n1 (get-bytevector-n! port1 buf1 0 len)) + (n2 (get-bytevector-n! port2 buf2 0 len))) + (and (equal? n1 n2) + (or (eof-object? n1) + (loop))))))))))))) (define* (union-build output inputs #:key (log-port (current-error-port))) diff --git a/guix/cve.scm b/guix/cve.scm index 8e76f42f0d..088e39837a 100644 --- a/guix/cve.scm +++ b/guix/cve.scm @@ -19,11 +19,14 @@ (define-module (guix cve) #:use-module (guix utils) #:use-module (guix http-client) + #:use-module ((guix build utils) #:select (mkdir-p)) #:use-module (sxml ssax) #:use-module (web uri) #:use-module (srfi srfi-1) #:use-module (srfi srfi-9) + #:use-module (srfi srfi-11) #:use-module (srfi srfi-19) + #:use-module (srfi srfi-26) #:use-module (ice-9 match) #:use-module (ice-9 regex) #:use-module (ice-9 vlist) @@ -46,8 +49,8 @@ (define-record-type <vulnerability> (vulnerability id packages) vulnerability? - (id vulnerability-id) - (packages vulnerability-packages)) + (id vulnerability-id) ;string + (packages vulnerability-packages)) ;((p1 v1 v2 v3) (p2 v1) ...) (define %now (current-date)) @@ -73,7 +76,7 @@ (define (call-with-cve-port uri ttl proc) "Pass PROC an input port from which to read the CVE stream." - (let ((port (http-fetch/cached uri #:ttl ttl))) + (let ((port (http-fetch uri))) (dynamic-wind (const #t) (lambda () @@ -91,18 +94,45 @@ (define (cpe->package-name cpe) "Converts the Common Platform Enumeration (CPE) string CPE to a package -name, in a very naive way. Return #f if CPE does not look like an application -CPE string." - (and=> (regexp-exec %cpe-package-rx (string-trim-both cpe)) +name, in a very naive way. Return two values: the package name, and its +version string. Return #f and #f if CPE does not look like an application CPE +string." + (cond ((regexp-exec %cpe-package-rx (string-trim-both cpe)) + => (lambda (matches) - (cons (match:substring matches 2) - (string-append (match:substring matches 3) - (match (match:substring matches 4) - ("" "") - (patch-level - ;; Drop the colon from things like - ;; "cpe:/a:openbsd:openssh:6.8:p1". - (string-drop patch-level 1)))))))) + (values (match:substring matches 2) + (string-append (match:substring matches 3) + (match (match:substring matches 4) + ("" "") + (patch-level + ;; Drop the colon from things like + ;; "cpe:/a:openbsd:openssh:6.8:p1". + (string-drop patch-level 1))))))) + (else + (values #f #f)))) + +(define (cpe->product-alist products) + "Given PRODUCTS, a list of CPE names, return the subset limited to the +applications listed in PRODUCTS, with names converted to package names: + + (cpe->product-alist + '(\"cpe:/a:gnu:libtasn1:4.7\" \"cpe:/a:gnu:libtasn1:4.6\" \"cpe:/a:gnu:cpio:2.11\")) + => ((\"libtasn1\" \"4.7\" \"4.6\") (\"cpio\" \"2.11\")) +" + (fold (lambda (product result) + (let-values (((name version) (cpe->package-name product))) + (if name + (match result + (((previous . versions) . tail) + ;; Attempt to coalesce NAME and PREVIOUS. + (if (string=? name previous) + (alist-cons name (cons version versions) tail) + (alist-cons name (list version) result))) + (() + (alist-cons name (list version) result))) + result))) + '() + (sort products string<?))) (define %parse-vulnerability-feed ;; Parse the XML vulnerability feed from @@ -130,12 +160,12 @@ CPE string." ;; Some entries have no vulnerable-software-list. rest) ((products id . rest) - (match (filter-map cpe->package-name products) + (match (cpe->product-alist products) (() ;; No application among PRODUCTS. rest) (packages - (cons (vulnerability id (reverse packages)) + (cons (vulnerability id packages) rest)))))) (x seed))) @@ -154,28 +184,85 @@ CPE string." vulnerability objects." (reverse (%parse-vulnerability-feed port '()))) -(define (current-vulnerabilities) - "Return the current list of Common Vulnerabilities and Exposures (CVE) as -published by the US NIST." - (define (read-vulnerabilities uri ttl) - (call-with-cve-port uri ttl +(define vulnerability->sexp + (match-lambda + (($ <vulnerability> id packages) + `(v ,id ,packages)))) + +(define sexp->vulnerability + (match-lambda + (('v id (packages ...)) + (vulnerability id packages)))) + +(define (fetch-vulnerabilities year ttl) + "Return the list of <vulnerability> for YEAR, assuming the on-disk cache has +the given TTL (fetch from the NIST web site when TTL has expired)." + ;; Note: We used to keep the original XML files in cache but parsing it + ;; would take typically ~15s for a year of data. Thus, we instead store a + ;; summarized version thereof as an sexp, which can be parsed in 1s or so. + (define cache + (string-append (cache-directory) "/cve/" (number->string year))) + + (define (do-fetch) + (call-with-cve-port (yearly-feed-uri year) ttl (lambda (port) ;; XXX: The SSAX "error port" is used to send pointless warnings such as ;; "warning: Skipping PI". Turn that off. + (format (current-error-port) "fetching CVE database for ~a...~%" year) (parameterize ((current-ssax-error-port (%make-void-port "w"))) (xml->vulnerabilities port))))) - (append-map read-vulnerabilities - (list (yearly-feed-uri %past-year) - (yearly-feed-uri %current-year)) - (list %past-year-ttl - %current-year-ttl))) + (define (update-cache) + (mkdir-p (dirname cache)) + (let ((vulns (do-fetch))) + (with-atomic-file-output cache + (lambda (port) + (write `(vulnerabilities + 1 ;format version + ,(map vulnerability->sexp vulns)) + port))) + vulns)) + + (define (old? file) + ;; Return true if PORT has passed TTL. + (let* ((s (stat file)) + (now (current-time time-utc))) + (< (+ (stat:mtime s) ttl) (time-second now)))) + + (catch 'system-error + (lambda () + (if (old? cache) + (update-cache) + (match (call-with-input-file cache read) + (('vulnerabilities 1 vulns) + (map sexp->vulnerability vulns)) + (x + (update-cache))))) + (lambda args + (update-cache)))) + +(define (current-vulnerabilities) + "Return the current list of Common Vulnerabilities and Exposures (CVE) as +published by the US NIST." + (let ((past-years (unfold (cut > <> 3) + (lambda (n) + (- %current-year n)) + 1+ + 1)) + (past-ttls (unfold (cut > <> 3) + (lambda (n) + (* n %past-year-ttl)) + 1+ + 1))) + (append-map fetch-vulnerabilities + (cons %current-year past-years) + (cons %current-year-ttl past-ttls)))) (define (vulnerabilities->lookup-proc vulnerabilities) "Return a lookup procedure built from VULNERABILITIES that takes a package name and optionally a version number. When the version is omitted, the lookup -procedure returns a list of version/vulnerability pairs; otherwise, it returns -a list of vulnerabilities affection the given package version." +procedure returns a list of vulnerabilities; otherwise, it returns a list of +vulnerabilities affecting the given package version." (define table ;; Map package names to lists of version/vulnerability pairs. (fold (lambda (vuln table) @@ -183,8 +270,8 @@ a list of vulnerabilities affection the given package version." (($ <vulnerability> id packages) (fold (lambda (package table) (match package - ((name . version) - (vhash-cons name (cons version vuln) + ((name . versions) + (vhash-cons name (cons vuln versions) table)))) table packages)))) @@ -195,11 +282,14 @@ a list of vulnerabilities affection the given package version." (vhash-fold* (if version (lambda (pair result) (match pair - ((v . vuln) - (if (string=? v version) + ((vuln . versions) + (if (member version versions) (cons vuln result) result)))) - cons) + (lambda (pair result) + (match pair + ((vuln . _) + (cons vuln result))))) '() package table))) diff --git a/guix/download.scm b/guix/download.scm index 67c55aff33..9b238dcbdf 100644 --- a/guix/download.scm +++ b/guix/download.scm @@ -98,14 +98,28 @@ "http://savannah.c3sl.ufpr.br/" "http://www.centervenus.com/mirrors/nongnu/" "http://download.savannah.gnu.org/releases-noredirect/") - (sourceforge + (sourceforge ; https://sourceforge.net/p/forge/documentation/Mirrors/ "http://prdownloads.sourceforge.net/" "http://heanet.dl.sourceforge.net/sourceforge/" - "http://surfnet.dl.sourceforge.net/sourceforge/" "http://dfn.dl.sourceforge.net/sourceforge/" - "http://mesh.dl.sourceforge.net/sourceforge/" - "http://ovh.dl.sourceforge.net/sourceforge/" - "http://osdn.dl.sourceforge.net/sourceforge/") + "http://freefr.dl.sourceforge.net/sourceforge/" + "http://internode.dl.sourceforge.net/sourceforge/" + "http://iweb.dl.sourceforge.net/sourceforge/" + "http://jaist.dl.sourceforge.net/sourceforge/" + "http://kaz.dl.sourceforge.net/sourceforge/" + "http://kent.dl.sourceforge.net/sourceforge/" + "http://liquidtelecom.dl.sourceforge.net/sourceforge/" + "http://nbtelecom.dl.sourceforge.net/sourceforge/" + "http://nchc.dl.sourceforge.net/sourceforge/" + "http://ncu.dl.sourceforge.net/sourceforge/" + "http://netcologne.dl.sourceforge.net/sourceforge/" + "http://netix.dl.sourceforge.net/sourceforge/" + "http://pilotfiber.dl.sourceforge.net/sourceforge/" + "http://superb-sea2.dl.sourceforge.net/sourceforge/" + "http://tenet.dl.sourceforge.net/sourceforge/" + "http://ufpr.dl.sourceforge.net/sourceforge/" + "http://vorboss.dl.sourceforge.net/sourceforge/" + "http://netassist.dl.sourceforge.net/sourceforge/") (kernel.org "http://www.all.kernel.org/pub/" "http://ramses.wh2.tu-dresden.de/pub/mirrors/kernel.org/" @@ -159,13 +173,22 @@ "ftp://artfiles.org/cpan.org/" "http://www.cpan.org/" "ftp://cpan.rinet.ru/pub/mirror/CPAN/" - "http://cpan.cu.be/" "ftp://cpan.inode.at/" "ftp://cpan.iht.co.il/" "ftp://ftp.osuosl.org/pub/CPAN/" "ftp://ftp.nara.wide.ad.jp/pub/CPAN/" "http://mirrors.163.com/cpan/" - "ftp://cpan.mirror.ac.za/") + "ftp://cpan.mirror.ac.za/" + "http://cpan.mirrors.ionfish.org/" + "http://cpan.mirror.dkm.cz/pub/CPAN/" + "http://cpan.mirror.iphh.net/" + "http://mirrors.teentelecom.net/CPAN/" + "http://mirror.teklinks.com/CPAN/" + "http://cpan.weepeetelecom.be/" + "http://mirrors.xservers.ro/CPAN/" + "http://cpan.yimg.com/" + "http://mirror.yazd.ac.ir/cpan/" + "http://ftp.belnet.be/ftp.cpan.org/") (cran ;; Arbitrary mirrors from http://cran.r-project.org/mirrors.html ;; This one automatically redirects to servers worldwide diff --git a/guix/grafts.scm b/guix/grafts.scm index 6bec999ad2..53e697688a 100644 --- a/guix/grafts.scm +++ b/guix/grafts.scm @@ -252,16 +252,23 @@ derivations to the corresponding set of grafts." (deps ;one or more dependencies (mlet %state-monad ((grafts (mapm %state-monad dependency-grafts deps)) (cache (current-state))) - (let* ((grafts (delete-duplicates (concatenate grafts) equal?)) - (origins (map graft-origin-file-name grafts))) - (if (find (cut member <> deps) origins) - (let* ((new (graft-derivation/shallow store drv grafts - #:guile guile - #:system system)) - (grafts (cons (graft (origin drv) (replacement new)) - grafts))) - (return/cache cache grafts)) - (return/cache cache grafts)))))))))) + (let* ((grafts (delete-duplicates (concatenate grafts) equal?)) + (origins (map graft-origin-file-name grafts))) + (match (filter (lambda (graft) + (member (graft-origin-file-name graft) deps)) + grafts) + (() + (return/cache cache grafts)) + ((applicable ..1) + ;; Use APPLICABLE, the subset of GRAFTS that is really + ;; applicable to DRV, to avoid creating several identical + ;; grafted variants of DRV. + (let* ((new (graft-derivation/shallow store drv applicable + #:guile guile + #:system system)) + (grafts (cons (graft (origin drv) (replacement new)) + grafts))) + (return/cache cache grafts)))))))))))) (define* (graft-derivation store drv grafts #:key (guile (%guile-for-build)) diff --git a/guix/graph.scm b/guix/graph.scm index ad93403a1e..735d340c2c 100644 --- a/guix/graph.scm +++ b/guix/graph.scm @@ -37,7 +37,9 @@ node-edges node-back-edges + traverse/depth-first node-transitive-edges + node-reachable-count %graphviz-backend graph-backend? @@ -99,13 +101,13 @@ returns its back edges. NODES is taken to be the sinks of the global graph." (lambda (source target edges) (vhash-consq target source edges)))) -(define (node-transitive-edges nodes node-edges) - "Return the list of nodes directly or indirectly connected to NODES -according to the NODE-EDGES procedure. NODE-EDGES must be a one-argument -procedure that, given a node, returns its list of direct dependents; it is -typically returned by 'node-edges' or 'node-back-edges'." +(define (traverse/depth-first proc seed nodes node-edges) + "Do a depth-first traversal of NODES along NODE-EDGES, calling PROC with +each node and the current result, and visiting each reachable node exactly +once. NODES must be a list of nodes, and NODE-EDGES must be a one-argument +procedure as returned by 'node-edges' or 'node-back-edges'." (let loop ((nodes (append-map node-edges nodes)) - (result '()) + (result seed) (visited (setq))) (match nodes (() @@ -115,9 +117,23 @@ typically returned by 'node-edges' or 'node-back-edges'." (loop tail result visited) (let ((edges (node-edges head))) (loop (append edges tail) - (cons head result) + (proc head result) (set-insert head visited)))))))) +(define (node-transitive-edges nodes node-edges) + "Return the list of nodes directly or indirectly connected to NODES +according to the NODE-EDGES procedure. NODE-EDGES must be a one-argument +procedure that, given a node, returns its list of direct dependents; it is +typically returned by 'node-edges' or 'node-back-edges'." + (traverse/depth-first cons '() nodes node-edges)) + +(define (node-reachable-count nodes node-edges) + "Return the number of nodes reachable from NODES along NODE-EDGES." + (traverse/depth-first (lambda (_ count) + (+ 1 count)) + 0 + nodes node-edges)) + ;;; ;;; Graphviz export. diff --git a/guix/import/github.scm b/guix/import/github.scm index 29116d79f0..9ba9a10ba0 100644 --- a/guix/import/github.scm +++ b/guix/import/github.scm @@ -43,8 +43,8 @@ failure." (define (find-extension url) "Return the extension of the archive e.g. '.tar.gz' given a URL, or false if none is recognized" - (find (lambda x (string-suffix? (first x) url)) - (list ".tar.gz" ".tar.bz2" ".tar.xz" ".zip" ".tar"))) + (find (lambda (x) (string-suffix? x url)) + (list ".tar.gz" ".tar.bz2" ".tar.xz" ".zip" ".tar" ".tgz"))) (define (updated-github-url old-package new-version) ;; Return a url for the OLD-PACKAGE with NEW-VERSION. If no source url in diff --git a/guix/profiles.scm b/guix/profiles.scm index 8355af7a48..ce8a11fbe5 100644 --- a/guix/profiles.scm +++ b/guix/profiles.scm @@ -811,6 +811,7 @@ the monadic procedures listed in HOOKS--such as an Info 'dir' file, etc." #:search-paths search-paths))) (gexp->derivation "profile" builder + #:system system #:modules '((guix build profiles) (guix build union) (guix build utils) diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm index 9ba487d1eb..ebe966f9cf 100644 --- a/guix/scripts/environment.scm +++ b/guix/scripts/environment.scm @@ -333,11 +333,11 @@ requisite store items i.e. the union closure of all the inputs." (requisites* (match input ((drv output) - (derivation->output-path drv output)) + (list (derivation->output-path drv output))) ((drv) - (derivation->output-path drv)) + (list (derivation->output-path drv))) ((? direct-store-path? path) - path)))) + (list path))))) (mlet %store-monad ((reqs (sequence %store-monad (map input->requisites inputs)))) diff --git a/guix/scripts/gc.scm b/guix/scripts/gc.scm index 4ec9ff9dca..8db28138c8 100644 --- a/guix/scripts/gc.scm +++ b/guix/scripts/gc.scm @@ -229,7 +229,8 @@ Invoke the garbage collector.\n")) ((list-references) (list-relatives references)) ((list-requisites) - (list-relatives requisites)) + (list-relatives (lambda (store item) + (requisites store (list item))))) ((list-referrers) (list-relatives referrers)) ((optimize) diff --git a/guix/scripts/offload.scm b/guix/scripts/offload.scm index d594be18e5..7db0c9d610 100644 --- a/guix/scripts/offload.scm +++ b/guix/scripts/offload.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -24,6 +24,7 @@ #:use-module (guix serialization) #:use-module (guix nar) #:use-module (guix utils) + #:use-module ((guix build syscalls) #:select (fcntl-flock)) #:use-module ((guix build utils) #:select (which mkdir-p)) #:use-module (guix ui) #:use-module (srfi srfi-1) diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index 697afc17c3..e2e37098fc 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -794,9 +794,13 @@ processed, #f otherwise." (define transform (options->transformation opts)) (define (transform-entry entry) - (manifest-entry - (inherit entry) - (item (transform store (manifest-entry-item entry))))) + (let ((item (transform store (manifest-entry-item entry)))) + (manifest-entry + (inherit entry) + (item item) + (version (if (package? item) + (package-version item) + (manifest-entry-version entry)))))) ;; First, process roll-backs, generation removals, etc. (for-each (match-lambda diff --git a/guix/scripts/refresh.scm b/guix/scripts/refresh.scm index 0efc190b22..209f0d8be9 100644 --- a/guix/scripts/refresh.scm +++ b/guix/scripts/refresh.scm @@ -258,38 +258,36 @@ downloaded and authenticated; not updating~%") (define (list-dependents packages) "List all the things that would need to be rebuilt if PACKAGES are changed." - (with-store store - (run-with-store store - ;; Using %BAG-NODE-TYPE is more accurate than using %PACKAGE-NODE-TYPE - ;; because it includes implicit dependencies. - (mlet %store-monad ((edges (node-back-edges %bag-node-type - (all-packages)))) - (let* ((dependents (node-transitive-edges packages edges)) - (covering (filter (lambda (node) - (null? (edges node))) - dependents))) - (match dependents - (() - (format (current-output-port) - (N_ "No dependents other than itself: ~{~a~}~%" - "No dependents other than themselves: ~{~a~^ ~}~%" - (length packages)) - (map package-full-name packages))) + ;; Using %BAG-NODE-TYPE is more accurate than using %PACKAGE-NODE-TYPE + ;; because it includes implicit dependencies. + (mlet %store-monad ((edges (node-back-edges %bag-node-type + (all-packages)))) + (let* ((dependents (node-transitive-edges packages edges)) + (covering (filter (lambda (node) + (null? (edges node))) + dependents))) + (match dependents + (() + (format (current-output-port) + (N_ "No dependents other than itself: ~{~a~}~%" + "No dependents other than themselves: ~{~a~^ ~}~%" + (length packages)) + (map package-full-name packages))) - ((x) - (format (current-output-port) - (_ "A single dependent package: ~a~%") - (package-full-name x))) - (lst - (format (current-output-port) - (N_ "Building the following package would ensure ~d \ + ((x) + (format (current-output-port) + (_ "A single dependent package: ~a~%") + (package-full-name x))) + (lst + (format (current-output-port) + (N_ "Building the following package would ensure ~d \ dependent packages are rebuilt: ~*~{~a~^ ~}~%" - "Building the following ~d packages would ensure ~d \ + "Building the following ~d packages would ensure ~d \ dependent packages are rebuilt: ~{~a~^ ~}~%" - (length covering)) - (length covering) (length dependents) - (map package-full-name covering)))) - (return #t)))))) + (length covering)) + (length covering) (length dependents) + (map package-full-name covering)))) + (return #t)))) ;;; @@ -381,31 +379,36 @@ update would trigger a complete rebuild." (some ; user-specified packages some)))) (with-error-handling - (cond - (list-dependent? - (list-dependents packages)) - (update? - (let ((store (open-connection))) - (parameterize ((%openpgp-key-server - (or (assoc-ref opts 'key-server) - (%openpgp-key-server))) - (%gpg-command - (or (assoc-ref opts 'gpg-command) - (%gpg-command)))) - (for-each - (cut update-package store <> updaters - #:key-download key-download) - packages)))) - (else - (for-each (lambda (package) - (match (package-update-path package updaters) - ((? upstream-source? source) - (let ((loc (or (package-field-location package 'version) - (package-location package)))) - (format (current-error-port) - (_ "~a: ~a would be upgraded from ~a to ~a~%") - (location->string loc) - (package-name package) (package-version package) - (upstream-source-version source)))) - (#f #f))) - packages)))))) + (with-store store + (run-with-store store + (cond + (list-dependent? + (list-dependents packages)) + (update? + (parameterize ((%openpgp-key-server + (or (assoc-ref opts 'key-server) + (%openpgp-key-server))) + (%gpg-command + (or (assoc-ref opts 'gpg-command) + (%gpg-command)))) + (for-each + (cut update-package store <> updaters + #:key-download key-download) + packages) + (with-monad %store-monad + (return #t)))) + (else + (for-each (lambda (package) + (match (package-update-path package updaters) + ((? upstream-source? source) + (let ((loc (or (package-field-location package 'version) + (package-location package)))) + (format (current-error-port) + (_ "~a: ~a would be upgraded from ~a to ~a~%") + (location->string loc) + (package-name package) (package-version package) + (upstream-source-version source)))) + (#f #f))) + packages) + (with-monad %store-monad + (return #t))))))))) diff --git a/guix/scripts/size.scm b/guix/scripts/size.scm index be1e8ca087..f28832ce90 100644 --- a/guix/scripts/size.scm +++ b/guix/scripts/size.scm @@ -91,15 +91,16 @@ if ITEM is not in the store." (sort profile (match-lambda* ((($ <profile> _ _ total1) ($ <profile> _ _ total2)) - (> total1 total2))))))) + (> total1 total2))))) + (format port (_ "total: ~,1f MiB~%") (/ whole MiB 1.)))) (define display-profile* (lift display-profile %store-monad)) -(define (substitutable-requisites store item) - "Return the list of requisites of ITEM based on information available in +(define (substitutable-requisites store items) + "Return the list of requisites of ITEMS based on information available in substitutes." - (let loop ((items (list item)) + (let loop ((items items) (result '())) (match items (() @@ -113,23 +114,23 @@ substitutes." (append (append-map substitutable-references info) result))))))) -(define (requisites* item) +(define (requisites* items) "Return as a monadic value the requisites of ITEMS, based either on the information available in the local store or using information about substitutes." (lambda (store) (guard (c ((nix-protocol-error? c) - (values (substitutable-requisites store item) + (values (substitutable-requisites store items) store))) - (values (requisites store item) store)))) + (values (requisites store items) store)))) -(define (store-profile item) +(define (store-profile items) "Return as a monadic value a list of <profile> objects representing the -profile of ITEM and its requisites." - (mlet* %store-monad ((refs (>>= (requisites* item) +profile of ITEMS and their requisites." + (mlet* %store-monad ((refs (>>= (requisites* items) (lambda (refs) (return (delete-duplicates - (cons item refs)))))) + (append items refs)))))) (sizes (mapm %store-monad (lambda (item) (>>= (file-size item) @@ -137,7 +138,7 @@ profile of ITEM and its requisites." (return (cons item size))))) refs))) (define (dependency-size item) - (mlet %store-monad ((deps (requisites* item))) + (mlet %store-monad ((deps (requisites* (list item)))) (foldm %store-monad (lambda (item total) (return (+ (assoc-ref sizes item) total))) @@ -273,7 +274,7 @@ Report the size of PACKAGE and its dependencies.\n")) (match files (() (leave (_ "missing store item argument\n"))) - ((file) + ((files ..1) (leave-on-EPIPE ;; Turn off grafts because (1) hydra.gnu.org does not serve grafted ;; packages, and (2) they do not make any difference on the @@ -285,13 +286,12 @@ Report the size of PACKAGE and its dependencies.\n")) #:substitute-urls urls) (run-with-store store - (mlet* %store-monad ((item (ensure-store-item file)) - (profile (store-profile item))) + (mlet* %store-monad ((items (mapm %store-monad + ensure-store-item files)) + (profile (store-profile items))) (if map-file (begin (profile->page-map profile map-file) (return #t)) (display-profile* profile))) - #:system system))))) - ((files ...) - (leave (_ "too many arguments\n"))))))) + #:system system))))))))) diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm index 5cdc55f2b2..81ce770dc5 100755 --- a/guix/scripts/substitute.scm +++ b/guix/scripts/substitute.scm @@ -889,7 +889,11 @@ DESTINATION as a nar file. Verify the substitute against ACL." ;; Tell the daemon what the expected hash of the Nar itself is. (format #t "~a~%" (narinfo-hash narinfo)) - (format (current-error-port) "Downloading ~a~:[~*~; (~a installed)~]...~%" + (format (current-error-port) + ;; TRANSLATORS: The second part of this message looks like + ;; "(4.1MiB installed)"; it shows the size of the package once + ;; installed. + (_ "Downloading ~a~:[~*~; (~a installed)~]...~%") (store-path-abbreviation store-item) ;; Use the Nar size as an estimate of the installed size. (narinfo-size narinfo) diff --git a/guix/store.scm b/guix/store.scm index 4d89f4a413..e3033ee61a 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -803,12 +803,12 @@ the list of references") (loop items tail (cons head result))))))))) -(define* (fold-path store proc seed path +(define* (fold-path store proc seed paths #:optional (relatives (cut references store <>))) - "Call PROC for each of the RELATIVES of PATH, exactly once, and return the + "Call PROC for each of the RELATIVES of PATHS, exactly once, and return the result formed from the successive calls to PROC, the first of which is passed SEED." - (let loop ((paths (list path)) + (let loop ((paths paths) (result seed) (seen vlist-null)) (match paths @@ -822,10 +822,10 @@ SEED." (() result)))) -(define (requisites store path) - "Return the requisites of PATH, including PATH---i.e., its closure (all its -references, recursively)." - (fold-path store cons '() path)) +(define (requisites store paths) + "Return the requisites of PATHS, including PATHS---i.e., their closures (all +its references, recursively)." + (fold-path store cons '() paths)) (define (topologically-sorted store paths) "Return a list containing PATHS and all their references sorted in diff --git a/guix/ui.scm b/guix/ui.scm index 8310974ac7..cbc9dc841a 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -6,7 +6,7 @@ ;;; Copyright © 2014 Cyrill Schenkel <cyrill.schenkel@gmail.com> ;;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com> ;;; Copyright © 2015 David Thompson <davet@gnu.org> -;;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org> +;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -313,6 +313,10 @@ There is NO WARRANTY, to the extent permitted by law. (exit 0)) (define (show-bug-report-information) + ;; TRANSLATORS: The placeholder indicates the bug-reporting address for this + ;; package. Please add another line saying "Report translation bugs to + ;; ...\n" with the address for translation bugs (typically your translation + ;; team's web or email address). (format #t (_ " Report bugs to: ~a.") %guix-bug-report-address) (format #t (_ " diff --git a/nix/libstore/build.cc b/nix/libstore/build.cc index f9fd61adde..ae78e65199 100644 --- a/nix/libstore/build.cc +++ b/nix/libstore/build.cc @@ -1106,8 +1106,10 @@ void DerivationGoal::repairClosure() /* Get the output closure. */ PathSet outputClosure; - foreach (DerivationOutputs::iterator, i, drv.outputs) + foreach (DerivationOutputs::iterator, i, drv.outputs) { + if (!wantOutput(i->first, wantedOutputs)) continue; computeFSClosure(worker.store, i->second.path, outputClosure); + } /* Filter out our own outputs (which we have already checked). */ foreach (DerivationOutputs::iterator, i, drv.outputs) @@ -1289,7 +1291,6 @@ void DerivationGoal::tryToBuild() now hold the locks on the output paths, no other process can build this derivation, so no further checks are necessary. */ validPaths = checkPathValidity(true, buildMode == bmRepair); - assert(buildMode != bmCheck || validPaths.size() == drv.outputs.size()); if (buildMode != bmCheck && validPaths.size() == drv.outputs.size()) { debug(format("skipping build of derivation `%1%', someone beat us to it") % drvPath); outputLocks.setDeletion(true); @@ -1717,7 +1718,7 @@ void DerivationGoal::startBuilder() /* In a sandbox, for determinism, always use the same temporary directory. */ - tmpDirInSandbox = useChroot ? "/tmp/guix-build-" + drvName + "-0" : tmpDir; + tmpDirInSandbox = useChroot ? canonPath("/tmp", true) + "/guix-build-" + drvName + "-0" : tmpDir; /* For convenience, set an environment pointing to the top build directory. */ @@ -2319,6 +2320,8 @@ void DerivationGoal::registerOutputs() outputs to allow hard links between outputs. */ InodesSeen inodesSeen; + Path checkSuffix = "-check"; + /* Check whether the output paths were created, and grep each output path to determine what other paths it references. Also make all output paths read-only. */ @@ -2344,7 +2347,7 @@ void DerivationGoal::registerOutputs() && redirectedBadOutputs.find(path) != redirectedBadOutputs.end() && pathExists(redirected)) replaceValidPath(path, redirected); - if (buildMode == bmCheck) + if (buildMode == bmCheck && redirected != "") actualPath = redirected; } @@ -2428,9 +2431,20 @@ void DerivationGoal::registerOutputs() PathSet references = scanForReferences(actualPath, allPaths, hash); if (buildMode == bmCheck) { + if (!store->isValidPath(path)) continue; ValidPathInfo info = worker.store.queryPathInfo(path); - if (hash.first != info.hash) - throw Error(format("derivation `%1%' may not be deterministic: hash mismatch in output `%2%'") % drvPath % path); + if (hash.first != info.hash) { + if (settings.keepFailed) { + Path dst = path + checkSuffix; + if (pathExists(dst)) deletePath(dst); + if (rename(actualPath.c_str(), dst.c_str())) + throw SysError(format("renaming `%1%' to `%2%'") % actualPath % dst); + throw Error(format("derivation `%1%' may not be deterministic: output `%2%' differs from ‘%3%’") + % drvPath % path % dst); + } else + throw Error(format("derivation `%1%' may not be deterministic: output `%2%' differs") + % drvPath % path); + } continue; } @@ -2475,9 +2489,11 @@ void DerivationGoal::registerOutputs() checkRefs("disallowedReferences", false, false); checkRefs("disallowedRequisites", false, true); - worker.store.optimisePath(path); // FIXME: combine with scanForReferences() + if (curRound == nrRounds) { + worker.store.optimisePath(path); // FIXME: combine with scanForReferences() - worker.store.markContentsGood(path); + worker.store.markContentsGood(path); + } ValidPathInfo info; info.path = path; @@ -2490,10 +2506,37 @@ void DerivationGoal::registerOutputs() if (buildMode == bmCheck) return; - if (curRound > 1 && prevInfos != infos) - throw NotDeterministic( - format("result of ‘%1%’ differs from previous round; rejecting as non-deterministic") - % drvPath); + /* Compare the result with the previous round, and report which + path is different, if any.*/ + if (curRound > 1 && prevInfos != infos) { + assert(prevInfos.size() == infos.size()); + for (auto i = prevInfos.begin(), j = infos.begin(); i != prevInfos.end(); ++i, ++j) + if (!(*i == *j)) { + Path prev = i->path + checkSuffix; + if (pathExists(prev)) + throw NotDeterministic( + format("output ‘%1%’ of ‘%2%’ differs from ‘%3%’ from previous round") + % i->path % drvPath % prev); + else + throw NotDeterministic( + format("output ‘%1%’ of ‘%2%’ differs from previous round") + % i->path % drvPath); + } + assert(false); // shouldn't happen + } + + if (settings.keepFailed) { + for (auto & i : drv.outputs) { + Path prev = i.second.path + checkSuffix; + if (pathExists(prev)) deletePath(prev); + if (curRound < nrRounds) { + Path dst = i.second.path + checkSuffix; + if (rename(i.second.path.c_str(), dst.c_str())) + throw SysError(format("renaming ‘%1%’ to ‘%2%’") % i.second.path % dst); + } + } + + } if (curRound < nrRounds) { prevInfos = infos; @@ -3480,8 +3523,17 @@ void LocalStore::repairPath(const Path & path) worker.run(goals); - if (goal->getExitCode() != Goal::ecSuccess) - throw Error(format("cannot repair path `%1%'") % path, worker.exitStatus()); + if (goal->getExitCode() != Goal::ecSuccess) { + /* Since substituting the path didn't work, if we have a valid + deriver, then rebuild the deriver. */ + Path deriver = queryDeriver(path); + if (deriver != "" && isValidPath(deriver)) { + goals.clear(); + goals.insert(worker.makeDerivationGoal(deriver, StringSet(), bmRepair)); + worker.run(goals); + } else + throw Error(format("cannot repair path `%1%'") % path, worker.exitStatus()); + } } diff --git a/nix/libstore/local-store.cc b/nix/libstore/local-store.cc index 11f61ae030..347e8a703f 100644 --- a/nix/libstore/local-store.cc +++ b/nix/libstore/local-store.cc @@ -606,10 +606,10 @@ static void canonicalisePathMetaData_(const Path & path, uid_t fromUid, InodesSe users group); we check for this case below. */ if (st.st_uid != geteuid()) { #if HAVE_LCHOWN - if (lchown(path.c_str(), geteuid(), (gid_t) -1) == -1) + if (lchown(path.c_str(), geteuid(), getegid()) == -1) #else if (!S_ISLNK(st.st_mode) && - chown(path.c_str(), geteuid(), (gid_t) -1) == -1) + chown(path.c_str(), geteuid(), getegid()) == -1) #endif throw SysError(format("changing owner of `%1%' to %2%") % path % geteuid()); @@ -1213,6 +1213,9 @@ template<class T> T LocalStore::getIntLineFromSubstituter(RunningSubstituter & r PathSet LocalStore::querySubstitutablePaths(const PathSet & paths) { PathSet res; + + if (!settings.useSubstitutes) return res; + foreach (Paths::iterator, i, settings.substituters) { if (res.size() == paths.size()) break; RunningSubstituter & run(runningSubstituters[*i]); @@ -1239,6 +1242,8 @@ PathSet LocalStore::querySubstitutablePaths(const PathSet & paths) void LocalStore::querySubstitutablePathInfos(const Path & substituter, PathSet & paths, SubstitutablePathInfos & infos) { + if (!settings.useSubstitutes) return; + RunningSubstituter & run(runningSubstituters[substituter]); startSubstituter(substituter, run); if (run.disabled) return; diff --git a/nix/libstore/pathlocks.cc b/nix/libstore/pathlocks.cc index 830858ff8d..9797ddd7ab 100644 --- a/nix/libstore/pathlocks.cc +++ b/nix/libstore/pathlocks.cc @@ -162,7 +162,11 @@ bool PathLocks::lockPaths(const PathSet & _paths, PathLocks::~PathLocks() { - unlock(); + try { + unlock(); + } catch (...) { + ignoreException(); + } } diff --git a/nix/libutil/xml-writer.cc b/nix/libutil/xml-writer.cc deleted file mode 100644 index 01794001b2..0000000000 --- a/nix/libutil/xml-writer.cc +++ /dev/null @@ -1,94 +0,0 @@ -#include <assert.h> - -#include "xml-writer.hh" - - -namespace nix { - - -XMLWriter::XMLWriter(bool indent, std::ostream & output) - : output(output), indent(indent) -{ - output << "<?xml version='1.0' encoding='utf-8'?>" << std::endl; - closed = false; -} - - -XMLWriter::~XMLWriter() -{ - close(); -} - - -void XMLWriter::close() -{ - if (closed) return; - while (!pendingElems.empty()) closeElement(); - closed = true; -} - - -void XMLWriter::indent_(unsigned int depth) -{ - if (!indent) return; - output << string(depth * 2, ' '); -} - - -void XMLWriter::openElement(const string & name, - const XMLAttrs & attrs) -{ - assert(!closed); - indent_(pendingElems.size()); - output << "<" << name; - writeAttrs(attrs); - output << ">"; - if (indent) output << std::endl; - pendingElems.push_back(name); -} - - -void XMLWriter::closeElement() -{ - assert(!pendingElems.empty()); - indent_(pendingElems.size() - 1); - output << "</" << pendingElems.back() << ">"; - if (indent) output << std::endl; - pendingElems.pop_back(); - if (pendingElems.empty()) closed = true; -} - - -void XMLWriter::writeEmptyElement(const string & name, - const XMLAttrs & attrs) -{ - assert(!closed); - indent_(pendingElems.size()); - output << "<" << name; - writeAttrs(attrs); - output << " />"; - if (indent) output << std::endl; -} - - -void XMLWriter::writeAttrs(const XMLAttrs & attrs) -{ - for (XMLAttrs::const_iterator i = attrs.begin(); i != attrs.end(); ++i) { - output << " " << i->first << "=\""; - for (unsigned int j = 0; j < i->second.size(); ++j) { - char c = i->second[j]; - if (c == '"') output << """; - else if (c == '<') output << "<"; - else if (c == '>') output << ">"; - else if (c == '&') output << "&"; - /* Escape newlines to prevent attribute normalisation (see - XML spec, section 3.3.3. */ - else if (c == '\n') output << "
"; - else output << c; - } - output << "\""; - } -} - - -} diff --git a/nix/libutil/xml-writer.hh b/nix/libutil/xml-writer.hh deleted file mode 100644 index 3cefe3712c..0000000000 --- a/nix/libutil/xml-writer.hh +++ /dev/null @@ -1,69 +0,0 @@ -#pragma once - -#include <iostream> -#include <string> -#include <list> -#include <map> - - -namespace nix { - -using std::string; -using std::map; -using std::list; - - -typedef map<string, string> XMLAttrs; - - -class XMLWriter -{ -private: - - std::ostream & output; - - bool indent; - bool closed; - - list<string> pendingElems; - -public: - - XMLWriter(bool indent, std::ostream & output); - ~XMLWriter(); - - void close(); - - void openElement(const string & name, - const XMLAttrs & attrs = XMLAttrs()); - void closeElement(); - - void writeEmptyElement(const string & name, - const XMLAttrs & attrs = XMLAttrs()); - -private: - void writeAttrs(const XMLAttrs & attrs); - - void indent_(unsigned int depth); -}; - - -class XMLOpenElement -{ -private: - XMLWriter & writer; -public: - XMLOpenElement(XMLWriter & writer, const string & name, - const XMLAttrs & attrs = XMLAttrs()) - : writer(writer) - { - writer.openElement(name, attrs); - } - ~XMLOpenElement() - { - writer.closeElement(); - } -}; - - -} diff --git a/nix/local.mk b/nix/local.mk index 3c15531f54..07a92f74ea 100644 --- a/nix/local.mk +++ b/nix/local.mk @@ -21,7 +21,7 @@ # Integration of the `guix-daemon' code taken from upstream Nix. # -BUILT_SOURCES += nix/libstore/schema.sql.hh +BUILT_SOURCES += %D%/libstore/schema.sql.hh CLEANFILES += $(BUILT_SOURCES) etc/guix-daemon.service etc/guix-daemon.conf noinst_LIBRARIES = libformat.a libutil.a libstore.a @@ -30,80 +30,78 @@ noinst_LIBRARIES = libformat.a libutil.a libstore.a AM_CXXFLAGS = -Wall -std=c++11 libformat_a_SOURCES = \ - nix/boost/format/free_funcs.cc \ - nix/boost/format/parsing.cc \ - nix/boost/format/format_implementation.cc + %D%/boost/format/free_funcs.cc \ + %D%/boost/format/parsing.cc \ + %D%/boost/format/format_implementation.cc libformat_headers = \ - nix/boost/throw_exception.hpp \ - nix/boost/format.hpp \ - nix/boost/assert.hpp \ - nix/boost/format/macros_default.hpp \ - nix/boost/format/format_fwd.hpp \ - nix/boost/format/format_class.hpp \ - nix/boost/format/exceptions.hpp \ - nix/boost/format/group.hpp \ - nix/boost/format/feed_args.hpp \ - nix/boost/format/internals_fwd.hpp \ - nix/boost/format/internals.hpp + %D%/boost/throw_exception.hpp \ + %D%/boost/format.hpp \ + %D%/boost/assert.hpp \ + %D%/boost/format/macros_default.hpp \ + %D%/boost/format/format_fwd.hpp \ + %D%/boost/format/format_class.hpp \ + %D%/boost/format/exceptions.hpp \ + %D%/boost/format/group.hpp \ + %D%/boost/format/feed_args.hpp \ + %D%/boost/format/internals_fwd.hpp \ + %D%/boost/format/internals.hpp libformat_a_CPPFLAGS = \ -I$(top_srcdir)/nix libutil_a_SOURCES = \ - nix/libutil/archive.cc \ - nix/libutil/affinity.cc \ - nix/libutil/serialise.cc \ - nix/libutil/util.cc \ - nix/libutil/xml-writer.cc \ - nix/libutil/hash.cc \ - nix/libutil/gcrypt-hash.cc + %D%/libutil/archive.cc \ + %D%/libutil/affinity.cc \ + %D%/libutil/serialise.cc \ + %D%/libutil/util.cc \ + %D%/libutil/hash.cc \ + %D%/libutil/gcrypt-hash.cc libutil_headers = \ - nix/libutil/affinity.hh \ - nix/libutil/hash.hh \ - nix/libutil/serialise.hh \ - nix/libutil/xml-writer.hh \ - nix/libutil/util.hh \ - nix/libutil/archive.hh \ - nix/libutil/types.hh \ - nix/libutil/gcrypt-hash.hh \ - nix/libutil/md5.h \ - nix/libutil/sha1.h \ - nix/libutil/sha256.h \ - nix/libutil/sha512.h + %D%/libutil/affinity.hh \ + %D%/libutil/hash.hh \ + %D%/libutil/serialise.hh \ + %D%/libutil/util.hh \ + %D%/libutil/archive.hh \ + %D%/libutil/types.hh \ + %D%/libutil/gcrypt-hash.hh \ + %D%/libutil/md5.h \ + %D%/libutil/sha1.h \ + %D%/libutil/sha256.h \ + %D%/libutil/sha512.h libutil_a_CPPFLAGS = \ -I$(top_builddir)/nix \ - -I$(top_srcdir)/nix/libutil \ + -I$(top_srcdir)/%D%/libutil \ $(libformat_a_CPPFLAGS) libstore_a_SOURCES = \ - nix/libstore/gc.cc \ - nix/libstore/globals.cc \ - nix/libstore/misc.cc \ - nix/libstore/references.cc \ - nix/libstore/store-api.cc \ - nix/libstore/optimise-store.cc \ - nix/libstore/local-store.cc \ - nix/libstore/build.cc \ - nix/libstore/pathlocks.cc \ - nix/libstore/derivations.cc + %D%/libstore/gc.cc \ + %D%/libstore/globals.cc \ + %D%/libstore/misc.cc \ + %D%/libstore/references.cc \ + %D%/libstore/store-api.cc \ + %D%/libstore/optimise-store.cc \ + %D%/libstore/local-store.cc \ + %D%/libstore/build.cc \ + %D%/libstore/pathlocks.cc \ + %D%/libstore/derivations.cc libstore_headers = \ - nix/libstore/references.hh \ - nix/libstore/pathlocks.hh \ - nix/libstore/globals.hh \ - nix/libstore/worker-protocol.hh \ - nix/libstore/derivations.hh \ - nix/libstore/misc.hh \ - nix/libstore/local-store.hh \ - nix/libstore/store-api.hh + %D%/libstore/references.hh \ + %D%/libstore/pathlocks.hh \ + %D%/libstore/globals.hh \ + %D%/libstore/worker-protocol.hh \ + %D%/libstore/derivations.hh \ + %D%/libstore/misc.hh \ + %D%/libstore/local-store.hh \ + %D%/libstore/store-api.hh libstore_a_CPPFLAGS = \ $(libutil_a_CPPFLAGS) \ - -I$(top_srcdir)/nix/libstore \ - -I$(top_builddir)/nix/libstore \ + -I$(top_srcdir)/%D%/libstore \ + -I$(top_builddir)/%D%/libstore \ -DNIX_STORE_DIR=\"$(storedir)\" \ -DNIX_DATA_DIR=\"$(datadir)\" \ -DNIX_STATE_DIR=\"$(localstatedir)/guix\" \ @@ -121,29 +119,29 @@ bin_PROGRAMS = guix-daemon sbin_PROGRAMS = guix-register guix_daemon_SOURCES = \ - nix/nix-daemon/nix-daemon.cc \ - nix/nix-daemon/guix-daemon.cc + %D%/nix-daemon/nix-daemon.cc \ + %D%/nix-daemon/guix-daemon.cc guix_daemon_CPPFLAGS = \ -DLOCALEDIR=\"$(localedir)\" \ $(libutil_a_CPPFLAGS) \ - -I$(top_srcdir)/nix/libstore + -I$(top_srcdir)/%D%/libstore guix_daemon_LDADD = \ libstore.a libutil.a libformat.a -lbz2 \ $(SQLITE3_LIBS) $(LIBGCRYPT_LIBS) guix_daemon_headers = \ - nix/nix-daemon/shared.hh + %D%/nix-daemon/shared.hh guix_register_SOURCES = \ - nix/guix-register/guix-register.cc + %D%/guix-register/guix-register.cc guix_register_CPPFLAGS = \ $(libutil_a_CPPFLAGS) \ $(libstore_a_CPPFLAGS) \ - -I$(top_srcdir)/nix/libstore + -I$(top_srcdir)/%D%/libstore # XXX: Should we start using shared libs? guix_register_LDADD = \ @@ -155,7 +153,7 @@ noinst_HEADERS = \ $(libformat_headers) $(libutil_headers) $(libstore_headers) \ $(guix_daemon_headers) -nix/libstore/schema.sql.hh: nix/libstore/schema.sql +%D%/libstore/schema.sql.hh: %D%/libstore/schema.sql $(AM_V_GEN)$(GUILE) --no-auto-compile -c \ "(use-modules (rnrs io ports)) \ (call-with-output-file \"$@\" \ @@ -165,20 +163,20 @@ nix/libstore/schema.sql.hh: nix/libstore/schema.sql (write (get-string-all in) out)))))" nodist_pkglibexec_SCRIPTS = \ - nix/scripts/list-runtime-roots \ - nix/scripts/substitute + %D%/scripts/list-runtime-roots \ + %D%/scripts/substitute if BUILD_DAEMON_OFFLOAD nodist_pkglibexec_SCRIPTS += \ - nix/scripts/offload + %D%/scripts/offload endif BUILD_DAEMON_OFFLOAD # XXX: It'd be better to hide it in $(pkglibexecdir). nodist_libexec_SCRIPTS = \ - nix/scripts/guix-authenticate + %D%/scripts/guix-authenticate # The '.service' file for systemd. systemdservicedir = $(libdir)/systemd/system @@ -203,9 +201,9 @@ etc/guix-daemon.conf: etc/guix-daemon.conf.in \ mv "$@.tmp" "$@" EXTRA_DIST += \ - nix/libstore/schema.sql \ - nix/AUTHORS \ - nix/COPYING \ + %D%/libstore/schema.sql \ + %D%/AUTHORS \ + %D%/COPYING \ etc/guix-daemon.service.in \ etc/guix-daemon.conf.in diff --git a/po/packages/POTFILES.in b/po/packages/POTFILES.in index 60c6ab32d5..29816f8b80 100644 --- a/po/packages/POTFILES.in +++ b/po/packages/POTFILES.in @@ -49,8 +49,8 @@ gnu/packages/scheme.scm gnu/packages/search.scm gnu/packages/serveez.scm gnu/packages/telephony.scm +gnu/packages/tex.scm gnu/packages/texinfo.scm -gnu/packages/texlive.scm gnu/packages/textutils.scm gnu/packages/version-control.scm gnu/packages/webkit.scm diff --git a/tests/bournish.scm b/tests/bournish.scm new file mode 100644 index 0000000000..0f529ce42f --- /dev/null +++ b/tests/bournish.scm @@ -0,0 +1,42 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016 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 (test-bournish) + #:use-module (guix build bournish) + #:use-module (system base compile) + #:use-module (system base language) + #:use-module (srfi srfi-64)) + + +(test-begin "bournish") + +(test-equal "single statement" + '(chdir "/foo") + (read-and-compile (open-input-string "cd /foo") + #:from %bournish-language #:to 'scheme)) + +(test-equal "multiple statements" + '(begin + (chdir "/foo") + (getcwd) + ((@@ (guix build bournish) ls-command-implementation))) + (read-and-compile (open-input-string "cd /foo\npwd\nls") + #:from %bournish-language #:to 'scheme)) + +(test-end "bournish") + diff --git a/tests/containers.scm b/tests/containers.scm index c11cdd1ce5..5a0f9937bb 100644 --- a/tests/containers.scm +++ b/tests/containers.scm @@ -79,6 +79,18 @@ (assert-exit (file-exists? "/testing"))) #:namespaces '(user mnt)))) +(test-equal "call-with-container, mnt namespace, wrong bind mount" + `(system-error ,ENOENT) + ;; An exception should be raised; see <http://bugs.gnu.org/23306>. + (catch 'system-error + (lambda () + (call-with-container '(("/does-not-exist" device "/foo" + "none" (bind-mount) #f #f)) + (const #t) + #:namespaces '(user mnt))) + (lambda args + (list 'system-error (system-error-errno args))))) + (test-assert "call-with-container, all namespaces" (zero? (call-with-container '() diff --git a/tests/cve.scm b/tests/cve.scm index 26e710ce70..3fbb22d3c6 100644 --- a/tests/cve.scm +++ b/tests/cve.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2015, 2016 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -32,12 +32,10 @@ (list ;; CVE-2003-0001 has no "/a" in its product list so it is omitted. ;; CVE-2004-0230 lists "tcp" as an application, but lacks a version number. - (vulnerability "CVE-2008-2335" '(("phpvid" . "1.1") ("phpvid" . "1.2"))) - (vulnerability "CVE-2008-3522" '(("enterprise_virtualization" . "3.5") - ("jasper" . "1.900.1"))) - (vulnerability "CVE-2009-3301" '(("openoffice.org" . "2.1.0") - ("openoffice.org" . "2.3.0") - ("openoffice.org" . "2.2.1"))) + (vulnerability "CVE-2008-2335" '(("phpvid" "1.2" "1.1"))) + (vulnerability "CVE-2008-3522" '(("enterprise_virtualization" "3.5") + ("jasper" "1.900.1"))) + (vulnerability "CVE-2009-3301" '(("openoffice.org" "2.3.0" "2.2.1" "2.1.0"))) ;; CVE-2015-8330 has no software list. )) @@ -48,9 +46,8 @@ %expected-vulnerabilities (call-with-input-file %sample xml->vulnerabilities)) -(test-equal "" - (list `(("1.1" . ,(first %expected-vulnerabilities)) - ("1.2" . ,(first %expected-vulnerabilities))) +(test-equal "vulnerabilities->lookup-proc" + (list (list (first %expected-vulnerabilities)) '() '() (list (second %expected-vulnerabilities)) diff --git a/tests/graph.scm b/tests/graph.scm index 32317195d7..1ce06cc817 100644 --- a/tests/graph.scm +++ b/tests/graph.scm @@ -275,4 +275,17 @@ edges." (return (lset= eq? (node-transitive-edges (list p2) edges) (list p1a p1b p0))))))) +(test-equal "node-reachable-count" + '(3 3) + (run-with-store %store + (let* ((p0 (dummy-package "p0")) + (p1a (dummy-package "p1a" (inputs `(("p0" ,p0))))) + (p1b (dummy-package "p1b" (inputs `(("p0" ,p0))))) + (p2 (dummy-package "p2" (inputs `(("p1a" ,p1a) ("p1b" ,p1b)))))) + (mlet* %store-monad ((all -> (list p2 p1a p1b p0)) + (edges (node-edges %package-node-type all)) + (back (node-back-edges %package-node-type all))) + (return (list (node-reachable-count (list p2) edges) + (node-reachable-count (list p0) back))))))) + (test-end "graph") diff --git a/tests/guix-environment-container.sh b/tests/guix-environment-container.sh index 0a7ea481fc..5ea6c49263 100644 --- a/tests/guix-environment-container.sh +++ b/tests/guix-environment-container.sh @@ -44,6 +44,16 @@ else test $? = 42 fi +# Make sure file-not-found errors in mounts are reported. +if guix environment --container --ad-hoc --bootstrap guile-bootstrap \ + --expose=/does-not-exist -- guile -c 1 2> "$tmpdir/error" +then + false +else + grep "/does-not-exist" "$tmpdir/error" + grep "[Nn]o such file" "$tmpdir/error" +fi + # Make sure that the right directories are mapped. mount_test_code=" (use-modules (ice-9 rdelim) diff --git a/tests/guix-environment.sh b/tests/guix-environment.sh index 5ad8dfa82a..0b5123ab45 100644 --- a/tests/guix-environment.sh +++ b/tests/guix-environment.sh @@ -57,6 +57,21 @@ else test $? = 42 fi +case "`uname -m`" in + x86_64) + # On x86_64, we should be able to create a 32-bit environment. + guix environment --bootstrap --ad-hoc guile-bootstrap --pure \ + -- guile -c '(exit (string-prefix? "x86_64" %host-type))' + guix environment --bootstrap --ad-hoc guile-bootstrap --pure \ + -s i686-linux \ + -- guile -c '(exit (string-prefix? "i686" %host-type))' + ;; + *) + echo "nothing to do" >&2 + ;; +esac + + # Same as above, but with deprecated -E flag. if guix environment --bootstrap --ad-hoc guile-bootstrap --pure \ -E "guile -c '(exit 42)'" diff --git a/tests/guix-lint.sh b/tests/guix-lint.sh index c105521ec7..7ddc7c265b 100644 --- a/tests/guix-lint.sh +++ b/tests/guix-lint.sh @@ -54,7 +54,7 @@ grep_warning () # 2) the synopsis starts with a lower-case letter; # 3) the description has a single space following the end-of-sentence period. -out=`guix lint dummy 2>&1` +out=`guix lint -c synopsis,description dummy 2>&1` if [ `grep_warning "$out"` -ne 3 ] then false; else true; fi diff --git a/tests/guix-package.sh b/tests/guix-package.sh index 28c34dbc6a..68a1946aa0 100644 --- a/tests/guix-package.sh +++ b/tests/guix-package.sh @@ -140,6 +140,20 @@ rm "$profile" "$profile"-[0-9]-link guix gc -d "$real_profile" [ ! -d "$real_profile" ] +# Package transformations. + +# Make sure we get the right version number when using '--with-source'. +mkdir "$module_dir" +emacs_tarball="$module_dir/emacs-42.5.9rc7.tar.gz" +touch "$emacs_tarball" +guix package -p "$profile" -i emacs --with-source="$emacs_tarball" -n \ + 2> "$tmpfile" +grep -E 'emacs[[:blank:]]+42\.5\.9rc7[[:blank:]]+.*-emacs-42.5.9rc7' \ + "$tmpfile" +rm "$emacs_tarball" "$tmpfile" +rmdir "$module_dir" + + # # Try with the default profile. # diff --git a/tests/size.scm b/tests/size.scm index fcd590283d..068ebc1d68 100644 --- a/tests/size.scm +++ b/tests/size.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2015, 2016 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -54,7 +54,7 @@ (mbegin %store-monad (built-derivations (list file2)) (mlet %store-monad ((profiles (store-profile - (derivation->output-path file2))) + (list (derivation->output-path file2)))) (bash (interned-file (search-bootstrap-binary "bash" (%current-system)) "bash" diff --git a/tests/store.scm b/tests/store.scm index eeadcb94f8..38b8efce96 100644 --- a/tests/store.scm +++ b/tests/store.scm @@ -205,7 +205,8 @@ (%current-system)))) (d (derivation s "the-thing" b '("--help") #:inputs `((,b))))) - (references/substitutes s (list (derivation->output-path d) b)))))) + (references/substitutes s (list (derivation->output-path d) b)) + #f)))) (test-assert "references/substitutes with substitute info" (with-store s @@ -231,6 +232,32 @@ (,t1) ;refs of T2 ())))))) ;refs of T1 +(test-equal "substitutable-path-info when substitutes are turned off" + '() + (with-store s + (set-build-options s #:use-substitutes? #f) + (let* ((b (add-to-store s "bash" #t "sha256" + (search-bootstrap-binary "bash" + (%current-system)))) + (d (derivation s "the-thing" b '("--version") + #:inputs `((,b)))) + (o (derivation->output-path d))) + (with-derivation-narinfo d + (substitutable-path-info s (list o)))))) + +(test-equal "substitutable-paths when substitutes are turned off" + '() + (with-store s + (set-build-options s #:use-substitutes? #f) + (let* ((b (add-to-store s "bash" #t "sha256" + (search-bootstrap-binary "bash" + (%current-system)))) + (d (derivation s "the-thing" b '("--version") + #:inputs `((,b)))) + (o (derivation->output-path d))) + (with-derivation-narinfo d + (substitutable-paths s (list o)))))) + (test-assert "requisites" (let* ((t1 (add-text-to-store %store "random1" (random-text) '())) @@ -244,10 +271,12 @@ (and (= (length x) (length y)) (lset= equal? x y))) - (and (same? (requisites %store t1) (list t1)) - (same? (requisites %store t2) (list t1 t2)) - (same? (requisites %store t3) (list t1 t2 t3)) - (same? (requisites %store t4) (list t1 t2 t3 t4))))) + (and (same? (requisites %store (list t1)) (list t1)) + (same? (requisites %store (list t2)) (list t1 t2)) + (same? (requisites %store (list t3)) (list t1 t2 t3)) + (same? (requisites %store (list t4)) (list t1 t2 t3 t4)) + (same? (requisites %store (list t1 t2 t3 t4)) + (list t1 t2 t3 t4))))) (test-assert "derivers" (let* ((b (add-text-to-store %store "build" "echo $foo > $out" '())) |