Merge branch 'master' into staging
This commit is contained in:
		
						commit
						2ac7d54616
					
				
					 94 changed files with 3801 additions and 680 deletions
				
			
		
							
								
								
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							|  | @ -125,3 +125,4 @@ config.cache | |||
| stamp-h[0-9] | ||||
| tmp | ||||
| /doc/os-config-lightweight-desktop.texi | ||||
| /nix/scripts/download | ||||
|  |  | |||
|  | @ -123,6 +123,7 @@ MODULES =					\ | |||
|   guix/import/elpa.scm   			\ | ||||
|   guix/scripts.scm				\ | ||||
|   guix/scripts/download.scm			\ | ||||
|   guix/scripts/perform-download.scm		\ | ||||
|   guix/scripts/build.scm			\ | ||||
|   guix/scripts/archive.scm			\ | ||||
|   guix/scripts/import.scm			\ | ||||
|  | @ -171,8 +172,8 @@ MODULES +=					\ | |||
| 
 | ||||
| endif BUILD_DAEMON_OFFLOAD | ||||
| 
 | ||||
| # Internal module with test suite support. | ||||
| dist_noinst_DATA = guix/tests.scm | ||||
| # Internal modules with test suite support. | ||||
| dist_noinst_DATA = guix/tests.scm guix/tests/http.scm | ||||
| 
 | ||||
| # Linux-Libre configurations. | ||||
| KCONFIGS =					\ | ||||
|  | @ -189,7 +190,7 @@ EXAMPLES =					\ | |||
|   gnu/system/examples/desktop.tmpl		\ | ||||
|   gnu/system/examples/lightweight-desktop.tmpl | ||||
| 
 | ||||
| GOBJECTS = $(MODULES:%.scm=%.go) guix/config.go guix/tests.go | ||||
| GOBJECTS = $(MODULES:%.scm=%.go) guix/config.go $(dist_noinst_DATA:%.scm=%.go) | ||||
| 
 | ||||
| nobase_dist_guilemodule_DATA =                  \ | ||||
|   $(MODULES) $(KCONFIGS) $(EXAMPLES)            \ | ||||
|  | @ -407,7 +408,7 @@ CLEANFILES =					\ | |||
| # the whole thing.  Likewise, set 'XDG_CACHE_HOME' to avoid loading possibly | ||||
| # stale files from ~/.cache/guile/ccache. | ||||
| %.go: make-go ; @: | ||||
| make-go: $(MODULES) guix/config.scm guix/tests.scm | ||||
| make-go: $(MODULES) guix/config.scm $(dist_noinst_DATA) | ||||
| 	$(AM_V_at)echo "Compiling Scheme modules..." ;			\ | ||||
| 	unset GUILE_LOAD_COMPILED_PATH ;				\ | ||||
| 	XDG_CACHE_HOME=/nowhere						\ | ||||
|  |  | |||
|  | @ -144,6 +144,8 @@ if test "x$guix_build_daemon" = "xyes"; then | |||
| 
 | ||||
|   AC_CONFIG_FILES([nix/scripts/list-runtime-roots], | ||||
|     [chmod +x nix/scripts/list-runtime-roots]) | ||||
|   AC_CONFIG_FILES([nix/scripts/download], | ||||
|     [chmod +x nix/scripts/download]) | ||||
|   AC_CONFIG_FILES([nix/scripts/substitute], | ||||
|     [chmod +x nix/scripts/substitute]) | ||||
|   AC_CONFIG_FILES([nix/scripts/guix-authenticate], | ||||
|  |  | |||
|  | @ -4836,6 +4836,10 @@ When using this option, you have @emph{absolutely no guarantee} that you | |||
| are communicating with the authentic server responsible for the given | ||||
| URL, which makes you vulnerable to ``man-in-the-middle'' attacks. | ||||
| 
 | ||||
| @item --output=@var{file} | ||||
| @itemx -o @var{file} | ||||
| Save the downloaded file to @var{file} instead of adding it to the | ||||
| store. | ||||
| @end table | ||||
| 
 | ||||
| @node Invoking guix hash | ||||
|  | @ -5375,9 +5379,11 @@ Identify inputs that should most likely be native inputs. | |||
| 
 | ||||
| @item source | ||||
| @itemx home-page | ||||
| @itemx mirror-url | ||||
| @itemx source-file-name | ||||
| Probe @code{home-page} and @code{source} URLs and report those that are | ||||
| invalid.  Check that the source file name is meaningful, e.g. is not | ||||
| invalid.  Suggest a @code{mirror://} URL when applicable.  Check that | ||||
| the source file name is meaningful, e.g. is not | ||||
| just a version number or ``git-checkout'', without a declared | ||||
| @code{file-name} (@pxref{origin Reference}). | ||||
| 
 | ||||
|  | @ -6399,7 +6405,9 @@ hardware is not supported on GuixSD. | |||
| One of the main areas where free drivers or firmware are lacking is WiFi | ||||
| devices.  WiFi devices known to work include those using Atheros chips | ||||
| (AR9271 and AR7010), which corresponds to the @code{ath9k} Linux-libre | ||||
| driver, and for which free firmware exists and is available | ||||
| driver, and those using Broadcom/AirForce chips (BCM43xx with | ||||
| Wireless-Core Revision 5), which corresponds to the @code{b43-open} | ||||
| Linux-libre driver.  Free firmware exists for both and is available | ||||
| out-of-the-box on GuixSD, as part of @var{%base-firmware} | ||||
| (@pxref{operating-system Reference, @code{firmware}}). | ||||
| 
 | ||||
|  | @ -7073,9 +7081,10 @@ the Linux kernel.  @xref{Initial RAM Disk}. | |||
| @cindex firmware | ||||
| List of firmware packages loadable by the operating system kernel. | ||||
| 
 | ||||
| The default includes firmware needed for Atheros-based WiFi devices | ||||
| (Linux-libre module @code{ath9k}).  @xref{Hardware Considerations}, for | ||||
| more info on supported hardware. | ||||
| The default includes firmware needed for Atheros- and Broadcom-based | ||||
| WiFi devices (Linux-libre modules @code{ath9k} and @code{b43-open}, | ||||
| respectively).  @xref{Hardware Considerations}, for more info on | ||||
| supported hardware. | ||||
| 
 | ||||
| @item @code{host-name} | ||||
| The host name. | ||||
|  | @ -8359,10 +8368,10 @@ Protocol (DHCP) client, on all the non-loopback network interfaces. | |||
| @end deffn | ||||
| 
 | ||||
| @deffn {Scheme Procedure} static-networking-service @var{interface} @var{ip} @ | ||||
|        [#:gateway #f] [#:name-servers @code{'()}] | ||||
|        [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}] | ||||
| Return a service that starts @var{interface} with address @var{ip}.  If | ||||
| @var{gateway} is true, it must be a string specifying the default network | ||||
| gateway. | ||||
| @var{netmask} is true, use it as the network mask.  If @var{gateway} is true, | ||||
| it must be a string specifying the default network gateway. | ||||
| @end deffn | ||||
| 
 | ||||
| @cindex wicd | ||||
|  | @ -11667,6 +11676,67 @@ A @code{<dicod-database>} object serving the GNU Collaborative International | |||
| Dictonary of English using the @code{gcide} package. | ||||
| @end defvr | ||||
| 
 | ||||
| @subsubsection Version Control | ||||
| 
 | ||||
| The @code{(gnu services version-control)} module provides the following services: | ||||
| 
 | ||||
| @subsubheading Git daemon service | ||||
| 
 | ||||
| @deffn {Scheme Procedure} git-daemon-service [#:config (git-daemon-configuration)] | ||||
| 
 | ||||
| Return a service that runs @command{git daemon}, a simple TCP server to | ||||
| expose repositiories over the Git protocol for annoymous access. | ||||
| 
 | ||||
| The optional @var{config} argument should be a | ||||
| @code{<git-daemon-configuration>} object, by default it allows read-only | ||||
| access to exported@footnote{By creating the magic file | ||||
| "git-daemon-export-ok" in the repository directory.} repositories under | ||||
| @file{/srv/git}. | ||||
| 
 | ||||
| @end deffn | ||||
| 
 | ||||
| @deftp {Data Type} git-daemon-configuration | ||||
| Data type representing the configuration for @code{git-daemon-service}. | ||||
| 
 | ||||
| @table @asis | ||||
| @item @code{package} (default: @var{git}) | ||||
| Package object of the Git distributed version control system. | ||||
| 
 | ||||
| @item @code{export-all?} (default: @var{#f}) | ||||
| Whether to allow access for all Git repositories, even if they do not | ||||
| have the @file{git-daemon-export-ok} file. | ||||
| 
 | ||||
| @item @code{base-path} (default: @file{/srv/git}) | ||||
| Whether to remap all the path requests as relative to the given path. | ||||
| If you run git daemon with @var{(base-path "/srv/git")} on example.com, | ||||
| then if you later try to pull @code{git://example.com/hello.git}, git | ||||
| daemon will interpret the path as @code{/srv/git/hello.git}. | ||||
| 
 | ||||
| @item @code{user-path} (default: @var{#f}) | ||||
| Whether to allow @code{~user} notation to be used in requests.  When | ||||
| specified with empty string, requests to @code{git://host/~alice/foo} is | ||||
| taken as a request to access @code{foo} repository in the home directory | ||||
| of user @code{alice}.  If @var{(user-path "path")} is specified, the | ||||
| same request is taken as a request to access @code{path/foo} repository | ||||
| in the home directory of user @code{alice}. | ||||
| 
 | ||||
| @item @code{listen} (default: @var{'()}) | ||||
| Whether to listen on specific IP addresses or hostnames, defaults to | ||||
| all. | ||||
| 
 | ||||
| @item @code{port} (default: @var{#f}) | ||||
| Whether to listen on an alternative port, which defaults to 9418. | ||||
| 
 | ||||
| @item @code{whitelist} (default: @var{'()}) | ||||
| If not empty, only allow access to this list of directories. | ||||
| 
 | ||||
| @item @code{extra-options} (default: @var{'()}) | ||||
| Extra options will be passed to @code{git daemon}, please run | ||||
| @command{man git-daemon} for more information. | ||||
| 
 | ||||
| @end table | ||||
| @end deftp | ||||
| 
 | ||||
| @node Setuid Programs | ||||
| @subsection Setuid Programs | ||||
| 
 | ||||
|  |  | |||
|  | @ -93,6 +93,13 @@ QEMU monitor and to the guest's backdoor REPL." | |||
|           "-device" "virtio-serial" | ||||
|           "-device" "virtconsole,chardev=repl")) | ||||
| 
 | ||||
|   (define (accept* port) | ||||
|     (match (select (list port) '() (list port) timeout) | ||||
|       (((port) () ()) | ||||
|        (accept port)) | ||||
|       (_ | ||||
|        (error "timeout in 'accept'" port)))) | ||||
| 
 | ||||
|   (let ((monitor (socket AF_UNIX SOCK_STREAM 0)) | ||||
|         (repl    (socket AF_UNIX SOCK_STREAM 0))) | ||||
|     (bind monitor (file->sockaddr "monitor")) | ||||
|  | @ -117,26 +124,20 @@ QEMU monitor and to the guest's backdoor REPL." | |||
|            (primitive-exit 1)))) | ||||
|       (pid | ||||
|        (format #t "QEMU runs as PID ~a~%" pid) | ||||
|        (sigaction SIGALRM | ||||
|          (lambda (signum) | ||||
|            (display "time is up!\n")              ;FIXME: break | ||||
|            #t)) | ||||
|        (alarm timeout) | ||||
| 
 | ||||
|        (match (accept monitor) | ||||
|        (match (accept* monitor) | ||||
|          ((monitor-conn . _) | ||||
|           (display "connected to QEMU's monitor\n") | ||||
|           (close-port monitor) | ||||
|           (wait-for-monitor-prompt monitor-conn) | ||||
|           (display "read QEMU monitor prompt\n") | ||||
|           (match (accept repl) | ||||
|           (match (accept* repl) | ||||
|             ((repl-conn . addr) | ||||
|              (display "connected to guest REPL\n") | ||||
|              (close-port repl) | ||||
|              (match (read repl-conn) | ||||
|                ('ready | ||||
|                 (alarm 0) | ||||
|                 (sigaction SIGALRM SIG_DFL) | ||||
|                 (display "marionette is ready\n") | ||||
|                 (marionette (append command extra-options) pid | ||||
|                             monitor-conn repl-conn))))))))))) | ||||
|  |  | |||
							
								
								
									
										11
									
								
								gnu/local.mk
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								gnu/local.mk
									
										
									
									
									
								
							|  | @ -295,6 +295,7 @@ GNU_SYSTEM_MODULES =				\ | |||
|   %D%/packages/pem.scm				\
 | ||||
|   %D%/packages/perl.scm				\
 | ||||
|   %D%/packages/photo.scm			\
 | ||||
|   %D%/packages/php.scm				\
 | ||||
|   %D%/packages/pkg-config.scm			\
 | ||||
|   %D%/packages/plotutils.scm			\
 | ||||
|   %D%/packages/polkit.scm			\
 | ||||
|  | @ -415,6 +416,7 @@ GNU_SYSTEM_MODULES =				\ | |||
|   %D%/services/sddm.scm				\
 | ||||
|   %D%/services/spice.scm				\
 | ||||
|   %D%/services/ssh.scm				\
 | ||||
|   %D%/services/version-control.scm              \
 | ||||
|   %D%/services/web.scm				\
 | ||||
|   %D%/services/xorg.scm				\
 | ||||
| 						\
 | ||||
|  | @ -551,8 +553,10 @@ dist_patch_DATA =						\ | |||
|   %D%/packages/patches/gcc-6-cross-environment-variables.patch	\
 | ||||
|   %D%/packages/patches/gd-CVE-2016-7568.patch			\
 | ||||
|   %D%/packages/patches/gd-CVE-2016-8670.patch			\
 | ||||
|   %D%/packages/patches/gd-fix-chunk-size-on-boundaries.patch	\
 | ||||
|   %D%/packages/patches/gd-fix-gd2-read-test.patch		\
 | ||||
|   %D%/packages/patches/gd-fix-tests-on-i686.patch		\
 | ||||
|   %D%/packages/patches/gd-fix-truecolor-format-correction.patch	\
 | ||||
|   %D%/packages/patches/gegl-CVE-2012-4433.patch			\
 | ||||
|   %D%/packages/patches/geoclue-config.patch			\
 | ||||
|   %D%/packages/patches/ghostscript-CVE-2013-5653.patch		\
 | ||||
|  | @ -587,6 +591,7 @@ dist_patch_DATA =						\ | |||
|   %D%/packages/patches/guile-linux-syscalls.patch		\
 | ||||
|   %D%/packages/patches/guile-present-coding.patch		\
 | ||||
|   %D%/packages/patches/guile-relocatable.patch			\
 | ||||
|   %D%/packages/patches/guile-repl-server-test.patch		\
 | ||||
|   %D%/packages/patches/guile-rsvg-pkgconfig.patch		\
 | ||||
|   %D%/packages/patches/gtk2-respect-GUIX_GTK2_PATH.patch	\
 | ||||
|   %D%/packages/patches/gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch \
 | ||||
|  | @ -594,6 +599,7 @@ dist_patch_DATA =						\ | |||
|   %D%/packages/patches/gtk3-respect-GUIX_GTK3_PATH.patch	\
 | ||||
|   %D%/packages/patches/gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch \
 | ||||
|   %D%/packages/patches/gtkglext-disable-disable-deprecated.patch \
 | ||||
|   %D%/packages/patches/handbrake-pkg-config-path.patch		\
 | ||||
|   %D%/packages/patches/hdf4-architectures.patch 		\
 | ||||
|   %D%/packages/patches/hdf4-reproducibility.patch 		\
 | ||||
|   %D%/packages/patches/hdf4-shared-fortran.patch 		\
 | ||||
|  | @ -612,6 +618,7 @@ dist_patch_DATA =						\ | |||
|   %D%/packages/patches/hypre-ldflags.patch			\
 | ||||
|   %D%/packages/patches/icecat-avoid-bundled-libraries.patch	\
 | ||||
|   %D%/packages/patches/icecat-binutils.patch			\
 | ||||
|   %D%/packages/patches/icecat-CVE-2016-9064.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		\
 | ||||
|  | @ -665,8 +672,6 @@ dist_patch_DATA =						\ | |||
|   %D%/packages/patches/libtiff-CVE-2016-5314.patch		\
 | ||||
|   %D%/packages/patches/libtiff-CVE-2016-5321.patch		\
 | ||||
|   %D%/packages/patches/libtiff-CVE-2016-5323.patch		\
 | ||||
|   %D%/packages/patches/libtiff-CVE-2016-5652.patch		\
 | ||||
|   %D%/packages/patches/libtiff-CVE-2016-9273.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		\
 | ||||
|  | @ -700,6 +705,7 @@ dist_patch_DATA =						\ | |||
|   %D%/packages/patches/luajit-no_ldconfig.patch			\
 | ||||
|   %D%/packages/patches/luajit-symlinks.patch			\
 | ||||
|   %D%/packages/patches/luit-posix.patch				\
 | ||||
|   %D%/packages/patches/lvm2-static-link.patch			\
 | ||||
|   %D%/packages/patches/make-impure-dirs.patch			\
 | ||||
|   %D%/packages/patches/mars-install.patch			\
 | ||||
|   %D%/packages/patches/mars-sfml-2.3.patch			\
 | ||||
|  | @ -785,6 +791,7 @@ dist_patch_DATA =						\ | |||
|   %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/pixman-CVE-2016-5296.patch		\
 | ||||
|   %D%/packages/patches/plink-1.07-unclobber-i.patch		\
 | ||||
|   %D%/packages/patches/plink-endian-detection.patch		\
 | ||||
|   %D%/packages/patches/plotutils-libpng-jmpbuf.patch		\
 | ||||
|  |  | |||
|  | @ -202,7 +202,7 @@ GP2C, the GP to C compiler, translates GP scripts to PARI programs.") | |||
| (define-public giac-xcas | ||||
|   (package | ||||
|     (name "giac-xcas") | ||||
|     (version "1.2.2-95") | ||||
|     (version "1.2.2-103") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               ;; "~parisse/giac" is not used because the maintainer regularly | ||||
|  | @ -214,7 +214,7 @@ GP2C, the GP to C compiler, translates GP scripts to PARI programs.") | |||
|                                   "source/giac_" version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1zyaz5pgj7w6ka4qxic4kmbcqcikpn8ry3jvhi2kd72hwa0v65y2")))) | ||||
|                 "1qrhjw2sdvyv2x8fqs9isqv8rgldn448gfxbi7zbva8m5va5b3z1")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:phases | ||||
|  |  | |||
|  | @ -1,7 +1,8 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com> | ||||
| ;;; Copyright ©2016 John Darrington <jmd@gnu.org> | ||||
| ;;; Copyright © 2016 John Darrington <jmd@gnu.org> | ||||
| ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -155,3 +156,10 @@ dictionaries, including personal ones.") | |||
|                      #:sha256 | ||||
|                      (base32 | ||||
|                       "0ffb87yjsh211hllpc4b9khqqrblial4pzi1h9r3v465z1yhn3j4"))) | ||||
| 
 | ||||
| (define-public aspell-dict-he | ||||
|   (aspell-dictionary "he" "Hebrew" | ||||
|                      #:version "1.0-0" | ||||
|                      #:sha256 | ||||
|                      (base32 | ||||
|                       "13bhbghx5b8g0119g3wxd4n8mlf707y41vlf59irxjj0kynankfn"))) | ||||
|  |  | |||
|  | @ -343,6 +343,57 @@ tools (analyzer, mono/stereo tools, crossovers).") | |||
|     ;; The plugins are released under LGPLv2.1+ | ||||
|     (license (list license:lgpl2.1+ license:gpl2+)))) | ||||
| 
 | ||||
| (define-public espeak | ||||
|   (package | ||||
|     (name "espeak") | ||||
|     (version "1.48.04") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://sourceforge/espeak/espeak/" | ||||
|                                   "espeak-" (version-major+minor version) | ||||
|                                   "/espeak-" version "-source.zip")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0n86gwh9pw0jqqpdz7mxggllfr8k0r7pc67ayy7w5z6z79kig6mz")) | ||||
|               (modules '((guix build utils))) | ||||
|               (snippet | ||||
|                ;; remove prebuilt binaries | ||||
|                '(delete-file-recursively "linux_32bit")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")) | ||||
|                           (string-append "DATADIR=" | ||||
|                                          (assoc-ref %outputs "out") | ||||
|                                          "/share/espeak-data") | ||||
|                           (string-append "LDFLAGS=-Wl,-rpath=" | ||||
|                                          (assoc-ref %outputs "out") | ||||
|                                          "/lib") | ||||
|                           "AUDIO=pulseaudio") | ||||
|        #:tests? #f ; no check target | ||||
|        #:phases | ||||
|        (modify-phases %standard-phases | ||||
|          (replace 'configure | ||||
|            (lambda _ | ||||
|              (chdir "src") | ||||
|              ;; We use version 19 of the PortAudio library, so we must copy the | ||||
|              ;; corresponding file to be sure that espeak compiles correctly. | ||||
|              (copy-file "portaudio19.h" "portaudio.h") | ||||
|              (substitute* "Makefile" | ||||
|                (("/bin/ln") "ln")) | ||||
|              #t))))) | ||||
|        (inputs | ||||
|         `(("portaudio" ,portaudio) | ||||
|           ("pulseaudio" ,pulseaudio))) | ||||
|        (native-inputs `(("unzip" ,unzip))) | ||||
|        (home-page "http://espeak.sourceforge.net/") | ||||
|        (synopsis "Software speech synthesizer") | ||||
|        (description "eSpeak is a software speech synthesizer for English and | ||||
| other languages.  eSpeak uses a \"formant synthesis\" method.  This allows many | ||||
| languages to be provided in a small size.  The speech is clear, and can be used | ||||
| at high speeds, but is not as natural or smooth as larger synthesizers which are | ||||
| based on human speech recordings.") | ||||
|        (license license:gpl3+))) | ||||
| 
 | ||||
| (define-public infamous-plugins | ||||
|   (package | ||||
|     (name "infamous-plugins") | ||||
|  | @ -2281,21 +2332,22 @@ interface.") | |||
| (define-public qsynth | ||||
|   (package | ||||
|     (name "qsynth") | ||||
|     (version "0.4.1") | ||||
|     (version "0.4.3") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append "mirror://sourceforge/qsynth/qsynth/" version | ||||
|                            "/qsynth-" version ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 "034p6mbwrjnxd9b6h20cidxi4ilkk3cgpjp154j0jzjs1ipf7x2h")))) | ||||
|         (base32 "1j5hm99fjrnaw8wbmlh4qixkv3rw5dl429mp1ag7js2ydrx0j9yy")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:tests? #f ; no "check" phase | ||||
|        #:configure-flags | ||||
|        '("CXXFLAGS=-std=gnu++11"))) | ||||
|     (native-inputs | ||||
|      `(("qttools" ,qttools))) | ||||
|      `(("qttools" ,qttools) | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|     (inputs | ||||
|      `(("fluidsynth" ,fluidsynth) | ||||
|        ("qtbase" ,qtbase) | ||||
|  |  | |||
|  | @ -1261,9 +1261,6 @@ splice junctions between exons.") | |||
|                       (assoc-ref outputs "out") "/share/doc/bwa")) | ||||
|                 (man (string-append | ||||
|                       (assoc-ref outputs "out") "/share/man/man1"))) | ||||
|             (mkdir-p bin) | ||||
|             (mkdir-p doc) | ||||
|             (mkdir-p man) | ||||
|             (install-file "bwa" bin) | ||||
|             (install-file "README.md" doc) | ||||
|             (install-file "bwa.1" man))) | ||||
|  | @ -2048,7 +2045,7 @@ identify enrichments with functional annotations of the genome.") | |||
| (define-public diamond | ||||
|   (package | ||||
|     (name "diamond") | ||||
|     (version "0.8.26") | ||||
|     (version "0.8.27") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|  | @ -2057,7 +2054,7 @@ identify enrichments with functional annotations of the genome.") | |||
|               (file-name (string-append name "-" version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "17s38pgjih6yc2z81040pircbv60c9wr33mbcyki2rfpv8rbxlh0")))) | ||||
|                 "0g0zdyfnri9v7nfbh8f7zqs4af1xydqkiw8m0cx4jc2ql4chpf6a")))) | ||||
|     (build-system cmake-build-system) | ||||
|     (arguments | ||||
|      '(#:tests? #f ; no "check" target | ||||
|  | @ -2155,7 +2152,6 @@ of nucleic acid binding proteins.") | |||
|              (lambda* (#:key outputs #:allow-other-keys) | ||||
|                (let* ((out (assoc-ref outputs "out")) | ||||
|                       (bin  (string-append out "/bin"))) | ||||
|                  (mkdir-p bin) | ||||
|                  (for-each (lambda (file) | ||||
|                              (install-file file bin)) | ||||
|                            (find-files "../bin" ".*")) | ||||
|  | @ -4834,7 +4830,6 @@ optionally compressed by gzip.") | |||
|            (lambda* (#:key outputs #:allow-other-keys) | ||||
|              (let* ((out (assoc-ref outputs "out")) | ||||
|                     (bin (string-append out "/bin"))) | ||||
|                (mkdir-p bin) | ||||
|                (install-file "snap-aligner" bin) | ||||
|                (install-file "SNAPCommand" bin) | ||||
|                #t)))))) | ||||
|  | @ -5694,7 +5689,6 @@ Needleman-Wunsch).") | |||
|          (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 | ||||
|  | @ -7572,7 +7566,6 @@ intervals (e.g. genes, sequence alignments).") | |||
|              (lambda* (#:key outputs #:allow-other-keys) | ||||
|                (let* ((out (assoc-ref outputs "out")) | ||||
|                       (bin (string-append out "/bin"))) | ||||
|                  (mkdir-p bin) | ||||
|                  (for-each (lambda (file) | ||||
|                              (install-file file bin)) | ||||
|                            (find-files "bin" ".*"))) | ||||
|  |  | |||
|  | @ -207,7 +207,7 @@ interface, for the Transmission BitTorrent daemon.") | |||
| (define-public aria2 | ||||
|   (package | ||||
|     (name "aria2") | ||||
|     (version "1.28.0") | ||||
|     (version "1.29.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 | ||||
|                 "1w3jblfxqg30n3ndh2wrbhbddcg92lrgcx438qiwzamrayjjb8g0")))) | ||||
|                 "0bn8j6yhjnsxlxr1cdxw39gphvsrk3qhvvq92rsirxjvwwix0r0s")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:configure-flags (list "--enable-libaria2" | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2016 Federico Beffa <beffa@fbengineering.ch> | ||||
| ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -34,7 +35,8 @@ | |||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages image) | ||||
|   #:use-module (gnu packages xorg) | ||||
|   #:use-module (ice-9 match)) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:use-module (srfi srfi-1)) | ||||
| 
 | ||||
| (define nanopass | ||||
|   (let ((version "1.9")) | ||||
|  | @ -94,12 +96,15 @@ | |||
|        (list ,(match (or (%current-target-system) (%current-system)) | ||||
|                 ("x86_64-linux" '(list "--machine=ta6le")) | ||||
|                 ("i686-linux" '(list "--machine=ti3le")) | ||||
|                 ;; FIXME: Some people succeeded in cross-compiling to | ||||
|                 ;; ARM. https://github.com/cisco/ChezScheme/issues/13 | ||||
|                 ;; Let autodetection have its attempt on other architectures. | ||||
|                 (_ | ||||
|                  '()))) | ||||
|        #:phases | ||||
|        (modify-phases %standard-phases | ||||
|          (add-after 'unpack 'patch-processor-detection | ||||
|            (lambda _ (substitute* "configure" | ||||
|                        (("uname -a") "uname -m")) | ||||
|              #t)) | ||||
|          ;; Adapt the custom 'configure' script. | ||||
|          (replace 'configure | ||||
|            (lambda* (#:key inputs outputs #:allow-other-keys) | ||||
|  | @ -187,7 +192,9 @@ | |||
|                     (find-files lib "scheme.boot")) | ||||
|                #t)))))) | ||||
|     ;; According to the documentation MIPS is not supported. | ||||
|     (supported-systems (delete "mips64el-linux" %supported-systems)) | ||||
|     ;; Cross-compiling for the Raspberry Pi is supported, but not native ARM. | ||||
|     (supported-systems (fold delete %supported-systems | ||||
|                              '("mips64el-linux" "armhf-linux"))) | ||||
|     (home-page "http://www.scheme.com") | ||||
|     (synopsis "R6RS Scheme compiler and run-time") | ||||
|     (description | ||||
|  |  | |||
|  | @ -36,7 +36,7 @@ | |||
| (define-public connman | ||||
|   (package | ||||
|     (name "connman") | ||||
|     (version "1.32") | ||||
|     (version "1.33") | ||||
|     (source | ||||
|       (origin | ||||
|         (method url-fetch) | ||||
|  | @ -44,7 +44,7 @@ | |||
|                             name "-" version ".tar.xz")) | ||||
|     (sha256 | ||||
|      (base32 | ||||
|       "0k4kw2j78gwxf0rq79a099qkzl6wi4v5i7rfs4rn0si0fd68d19i")))) | ||||
|       "187mknq2i907gf8dz0i79359gn1qc9mryvqkcgb280d7dw1ld2dw")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:configure-flags | ||||
|  |  | |||
|  | @ -329,7 +329,7 @@ no man page, refer to the home page for usage details.") | |||
|        ("gnupg" ,gnupg) | ||||
|        ("cryptsetup" ,cryptsetup) | ||||
|        ("e2fsprogs" ,e2fsprogs)         ;for mkfs.ext4 | ||||
|        ("gettext" ,gnu-gettext)         ;used at runtime | ||||
|        ("gettext" ,gettext-minimal)     ;used at runtime | ||||
|        ("mlocate" ,mlocate) | ||||
|        ("pinentry" ,pinentry) | ||||
|        ("qrencode" ,qrencode) | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -58,3 +59,67 @@ setup information in the partition header, enabling the users to transport | |||
| or migrate their data seamlessly.") | ||||
|    (license license:gpl2) | ||||
|    (home-page "https://gitlab.com/cryptsetup/cryptsetup"))) | ||||
| 
 | ||||
| (define (static-library library) | ||||
|   "Return a variant of package LIBRARY that provides static libraries ('.a' | ||||
| files).  This assumes LIBRARY uses Libtool." | ||||
|   (package | ||||
|     (inherit library) | ||||
|     (name (string-append (package-name library) "-static")) | ||||
|     (arguments | ||||
|      (substitute-keyword-arguments (package-arguments library) | ||||
|        ((#:configure-flags flags ''()) | ||||
|         `(append '("--disable-shared" "--enable-static") | ||||
|                  ,flags)))))) | ||||
| 
 | ||||
| (define-public cryptsetup-static | ||||
|   ;; Stripped-down statically-linked 'cryptsetup' command for use in initrds. | ||||
|   (package | ||||
|     (inherit cryptsetup) | ||||
|     (name "cryptsetup-static") | ||||
|     (arguments | ||||
|      '(#:configure-flags '("--disable-shared" | ||||
|                            "--enable-static-cryptsetup" | ||||
| 
 | ||||
|                            ;; 'libdevmapper.a' pulls in libpthread and libudev. | ||||
|                            "LIBS=-ludev -pthread") | ||||
| 
 | ||||
|        #:allowed-references ()                  ;this should be self-contained | ||||
| 
 | ||||
|        #:modules ((ice-9 ftw) | ||||
|                   (ice-9 match) | ||||
|                   (guix build utils) | ||||
|                   (guix build gnu-build-system)) | ||||
| 
 | ||||
|        #:phases (modify-phases %standard-phases | ||||
|                   (add-after 'install 'remove-cruft | ||||
|                     (lambda* (#:key outputs #:allow-other-keys) | ||||
|                       ;; Remove everything except the 'cryptsetup' command and | ||||
|                       ;; its friend. | ||||
|                       (let ((out (assoc-ref outputs "out"))) | ||||
|                         (with-directory-excursion out | ||||
|                           (let ((dirs (scandir "." | ||||
|                                                (match-lambda | ||||
|                                                  ((or "." "..") #f) | ||||
|                                                  (_ #t))))) | ||||
|                             (for-each delete-file-recursively | ||||
|                                       (delete "sbin" dirs)) | ||||
|                             (for-each (lambda (file) | ||||
|                                         (rename-file (string-append file | ||||
|                                                                     ".static") | ||||
|                                                      file) | ||||
|                                         (remove-store-references file)) | ||||
|                                       '("sbin/cryptsetup" "sbin/veritysetup")) | ||||
|                             #t)))))))) | ||||
|     (inputs | ||||
|      (let ((libgcrypt-static | ||||
|             (package | ||||
|               (inherit (static-library libgcrypt)) | ||||
|               (propagated-inputs | ||||
|                `(("libgpg-error-host" ,(static-library libgpg-error))))))) | ||||
|        `(("libgcrypt" ,libgcrypt-static) | ||||
|          ("lvm2" ,lvm2-static) | ||||
|          ("util-linux" ,util-linux "static") | ||||
|          ("util-linux" ,util-linux) | ||||
|          ("popt" ,popt)))) | ||||
|     (synopsis "Hard disk encryption tool (statically linked)"))) | ||||
|  |  | |||
|  | @ -558,6 +558,26 @@ widely deployed SQL database engine in the world.  The source code for SQLite | |||
| is in the public domain.") | ||||
|    (license public-domain))) | ||||
| 
 | ||||
| (define-public sqlite-3.15.1 | ||||
|   (package (inherit sqlite) | ||||
|            (version "3.15.1") | ||||
|            (source (origin | ||||
|                      (method url-fetch) | ||||
|                      (uri (let ((numeric-version | ||||
|                                  (match (string-split version #\.) | ||||
|                                    ((first-digit other-digits ...) | ||||
|                                     (string-append first-digit | ||||
|                                                    (string-pad-right | ||||
|                                                     (string-concatenate | ||||
|                                                      (map (cut string-pad <> 2 #\0) | ||||
|                                                           other-digits)) | ||||
|                                                     6 #\0)))))) | ||||
|                             (string-append "https://sqlite.org/2016/sqlite-autoconf-" | ||||
|                                            numeric-version ".tar.gz"))) | ||||
|                      (sha256 | ||||
|                       (base32 | ||||
|                        "1ig2d9jzzixiifmgqsl6kjcvy17jwxby3s24gfnc5qvyd6vqkyjx")))))) | ||||
| 
 | ||||
| (define-public tdb | ||||
|   (package | ||||
|     (name "tdb") | ||||
|  | @ -799,15 +819,15 @@ columns, primary keys, unique constraints and relationships.") | |||
| (define-public perl-dbd-mysql | ||||
|   (package | ||||
|     (name "perl-dbd-mysql") | ||||
|     (version "4.037") | ||||
|     (version "4.039") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append "mirror://cpan/authors/id/M/MI/MICHIELB/" | ||||
|        (uri (string-append "mirror://cpan/authors/id/C/CA/CAPTTOFU/" | ||||
|                            "DBD-mysql-" version ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "1z1wxnzhxfr9awjqb1d8pz9hf50shbk9ip2jmsmgdlwfyb78lmyz")))) | ||||
|          "0k4p3bjdbmxm2amb0qiiwmn8v83zrjkz5qp84xdjrg8k5v9aj0hn")))) | ||||
|     (build-system perl-build-system) | ||||
|     ;; Tests require running MySQL server | ||||
|     (arguments `(#:tests? #f)) | ||||
|  |  | |||
|  | @ -37,20 +37,14 @@ | |||
| (define-public dico | ||||
|   (package | ||||
|     (name "dico") | ||||
|     (version "2.3") | ||||
|     (version "2.4") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "mirror://gnu/dico/dico-" | ||||
|                                  version ".tar.xz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "13by0zimx90v2j8v7n4k9y3xwmh4q9jdc2f4f8yjs3x7f5bzm2pk")) | ||||
|              (snippet | ||||
|               ;; Upstream commit 89922fc. | ||||
|               '(substitute* "include/dico/markup.h" | ||||
|                  (("const char \\*dico_markup_type;") | ||||
|                   "extern const char *dico_markup_type;"))) | ||||
|              (modules '((guix build utils))))) | ||||
|                "13m7vahfbdj7hb38bjgd4cmfswavvxrcpppj9n4m4rar3wyzg52g")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:configure-flags (list (string-append "--with-guile-site-dir=" %output | ||||
|  |  | |||
|  | @ -1031,6 +1031,29 @@ light user interface.") | |||
| and seeking.") | ||||
|     (license license:gpl3+))) | ||||
| 
 | ||||
| (define-public emacs-emms-mode-line-cycle | ||||
|   (package | ||||
|     (name "emacs-emms-mode-line-cycle") | ||||
|     (version "0.2.5") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append "https://github.com/momomo5717/emms-mode-line-cycle" | ||||
|                            "/archive/" version ".tar.gz")) | ||||
|        (file-name (string-append name "-" version ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "0ifszi930pnaxk1x8pcydmvnp06868gc7nfx14q17zbajbx735k6")))) | ||||
|     (build-system emacs-build-system) | ||||
|     (propagated-inputs | ||||
|      `(("emms" ,emms))) | ||||
|     (home-page "https://github.com/momomo5717/emms-mode-line-cycle") | ||||
|     (synopsis "Display the EMMS mode line as a ticker") | ||||
|     (description | ||||
|      "This is a minor mode for updating the EMMS mode-line string cyclically | ||||
| within a specified width.  It is useful for displaying long track titles.") | ||||
|     (license license:gpl3+))) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; Miscellaneous. | ||||
|  | @ -3197,14 +3220,14 @@ passive voice.") | |||
| (define-public emacs-org | ||||
|   (package | ||||
|     (name "emacs-org") | ||||
|     (version "20160912") | ||||
|     (version "20161118") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "http://orgmode.org/elpa/org-" | ||||
|               (uri (string-append "http://elpa.gnu.org/packages/org-" | ||||
|                                   version ".tar")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1xawj0pdvqrgzlixxgbfa01gzajfaz47anr5m4aw035rhc6s02r7")))) | ||||
|                 "1w9g8r08kaiw9f4fjsj0hbffzq85rj734j5lxvbaafbnz7dbklk1")))) | ||||
|     (build-system emacs-build-system) | ||||
|     (home-page "http://orgmode.org/") | ||||
|     (synopsis "Outline-based notes management and organizer") | ||||
|  | @ -3241,7 +3264,7 @@ Flx has support for ido (interactively do things) through flx-ido.") | |||
| (define-public emacs-cyberpunk-theme | ||||
|   (package | ||||
|     (name "emacs-cyberpunk-theme") | ||||
|     (version "1.17") | ||||
|     (version "1.18") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|  | @ -3249,7 +3272,7 @@ Flx has support for ido (interactively do things) through flx-ido.") | |||
|                            "archive/" version ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "068jcn4g1bvwgpcvyfqygzw6ahill51c1sqzyyvj2paxckbd7h51")) | ||||
|          "0pxzbw0qjxgkhhs3gn3k9qy41kl1a4pfzbw83dk24l4b3nxd24wg")) | ||||
|        (file-name (string-append name "-" version ".tar.gz")))) | ||||
|     (build-system emacs-build-system) | ||||
|     (home-page "https://github.com/n3mo/cyberpunk-theme.el") | ||||
|  | @ -3259,6 +3282,35 @@ Flx has support for ido (interactively do things) through flx-ido.") | |||
| known loosely as deftheme.  Many mode-specific customizations are included.") | ||||
|     (license license:gpl3+))) | ||||
| 
 | ||||
| (define-public emacs-danneskjold-theme | ||||
|   (let* ((commit "8733d2fe8743e8a01826ea6d4430ef376c727e57") | ||||
|          (revision "1")) | ||||
|     (package | ||||
|       (name "emacs-danneskjold-theme") | ||||
|       (version (string-append "0.0.0-" revision "." (string-take commit 7))) | ||||
|       (home-page "https://github.com/rails-to-cosmos/danneskjold-theme") | ||||
|       (source | ||||
|        (origin | ||||
|          (method git-fetch) | ||||
|          (uri (git-reference | ||||
|                (url home-page) | ||||
|                (commit commit))) | ||||
|          (file-name (string-append name "-" version "-checkout")) | ||||
|          (sha256 | ||||
|           (base32 | ||||
|            "0s6rbsb0y8i8m5b9xm4gw1p1cxsxdqnqxqqb638pygz9f76mbir1")))) | ||||
|       (build-system emacs-build-system) | ||||
|       (arguments | ||||
|        `(#:phases | ||||
|          (modify-phases %standard-phases | ||||
|            (add-after 'unpack 'delete-screenshots | ||||
|              (lambda _ | ||||
|                (delete-file-recursively "screenshots") #t))))) | ||||
|       (synopsis "High-contrast Emacs theme") | ||||
|       (description | ||||
|        "@code{danneskjold-theme} is a high-contrast theme for Emacs.") | ||||
|       (license license:gpl3+)))) | ||||
| 
 | ||||
| (define-public emacs-auto-complete | ||||
|   (package | ||||
|     (name "emacs-auto-complete") | ||||
|  | @ -3298,7 +3350,7 @@ extensibility.") | |||
|         (base32 "1w08hnsbknrcjlzp42c99bgwc9hzsnf5m4apdv0dacql2s09zfm2")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("gettext" ,gnu-gettext))) | ||||
|      `(("gettext" ,gettext-minimal))) | ||||
|     (arguments | ||||
|      `(#:configure-flags | ||||
|        (list (string-append "--with-charmaps=" | ||||
|  | @ -3326,9 +3378,8 @@ This package contains the library database.") | |||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append | ||||
|              "http://download.savannah.gnu.org/releases/m17n/m17n-lib-" | ||||
|              version ".tar.gz")) | ||||
|        (uri (string-append "mirror://savannah/m17n/m17n-lib-" | ||||
|                            version ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 "10yv730i25g1rpzv6q49m6xn4p8fjm7jdwvik2h70sn8w3hm7f4f")))) | ||||
|     (build-system gnu-build-system) | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -19,11 +20,14 @@ | |||
| (define-module (gnu packages firmware) | ||||
|   #:use-module (guix licenses) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix git-download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages bison) | ||||
|   #:use-module (gnu packages cmake) | ||||
|   #:use-module (gnu packages cross-base) | ||||
|   #:use-module (gnu packages flex) | ||||
|   #:use-module (gnu packages perl)) | ||||
| 
 | ||||
| (define-public ath9k-htc-firmware | ||||
|  | @ -82,3 +86,91 @@ | |||
| 802.11n NICs (aka Wi-Fi USB dongles).  It is used by the ath9k driver of | ||||
| Linux-libre.") | ||||
|     (license (non-copyleft "http://directory.fsf.org/wiki/License:ClearBSD")))) | ||||
| 
 | ||||
| (define-public b43-tools | ||||
|   (let ((commit "8dce53297966b31b6c70a7a03c2433978dd9f288") | ||||
|         (rev "1")) | ||||
|     (package | ||||
|       (name "b43-tools") | ||||
|       (version (string-append "20140625-" rev "." (string-take commit 7))) | ||||
|       (source | ||||
|        (origin | ||||
|          (method git-fetch) | ||||
|          (uri (git-reference | ||||
|                (url "http://git.bues.ch/git/b43-tools.git") | ||||
|                (commit commit))) | ||||
|          (file-name (string-append name "-" version "-checkout")) | ||||
|          (sha256 | ||||
|           (base32 | ||||
|            "08k7sdr9jagm43r2zv4h03j86klhkblpk73p12444a3vzg1gy1lv")))) | ||||
|       (build-system gnu-build-system) | ||||
|       (native-inputs | ||||
|        `(("flex" ,flex) | ||||
|          ("bison" ,bison))) | ||||
|       (arguments | ||||
|        `(#:modules ((srfi srfi-1) | ||||
|                     (guix build gnu-build-system) | ||||
|                     (guix build utils)) | ||||
|          #:tests? #f                    ;no tests | ||||
|          #:phases | ||||
|          (let ((subdirs '("assembler" "disassembler"))) | ||||
|            (modify-phases %standard-phases | ||||
|              (delete 'configure) | ||||
|              (add-before 'build 'patch-/bin/true | ||||
|                (lambda _ | ||||
|                  (substitute* (find-files "." "Makefile") | ||||
|                    (("/bin/true") ":")) | ||||
|                  #t)) | ||||
|              (replace 'build | ||||
|                (lambda _ | ||||
|                  (every (lambda (dir) | ||||
|                           (zero? (system* "make" "-C" dir "CC=gcc"))) | ||||
|                         subdirs))) | ||||
|              (replace 'install | ||||
|                (lambda* (#:key outputs #:allow-other-keys) | ||||
|                  (let ((out (assoc-ref outputs "out"))) | ||||
|                    (mkdir-p (string-append out "/bin")) | ||||
|                    (every (lambda (dir) | ||||
|                             (zero? | ||||
|                              (system* "make" "-C" dir | ||||
|                                       (string-append "PREFIX=" out) | ||||
|                                       "install"))) | ||||
|                           subdirs)))))))) | ||||
|       (home-page | ||||
|        "http://bues.ch/cms/hacking/misc.html#linux_b43_driver_firmware_tools") | ||||
|       (synopsis "Collection of tools for the b43 wireless driver") | ||||
|       (description | ||||
|        "The b43 firmware tools is a collection of firmware extractor, | ||||
| assembler, disassembler, and debugging tools for the Linux kernel b43 wireless | ||||
| driver.") | ||||
|       (license gpl2)))) | ||||
| 
 | ||||
| (define-public openfwwf-firmware | ||||
|   (package | ||||
|     (name "openfwwf-firmware") | ||||
|     (version "5.2") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append "http://netweb.ing.unibs.it/~openfwwf/firmware/" | ||||
|                            "openfwwf-" version ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "1p60gdi7w88s7qw82d3g9v7mk887mhvidf4l5q5hh09j10h37q4x")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("b43-tools" ,b43-tools))) | ||||
|     (arguments | ||||
|      `(#:make-flags (list (string-append "PREFIX=" | ||||
|                                          (assoc-ref %outputs "out") | ||||
|                                          "/lib/firmware/b43-open")) | ||||
|        #:tests? #f                      ;no tests | ||||
|        #:phases (modify-phases %standard-phases | ||||
|                   (delete 'configure)))) | ||||
|     (home-page "http://netweb.ing.unibs.it/~openfwwf/") | ||||
|     (synopsis "Firmware for BCM43xx devices") | ||||
|     (description | ||||
|      "This is firmware from Open FirmWare for WiFi networks (OpenFWWF) for the | ||||
| Broadcom/AirForce chipset BCM43xx with Wireless-Core Revision 5.  It is used | ||||
| by the b43-open driver of Linux-libre.") | ||||
|     (license gpl2))) | ||||
|  |  | |||
|  | @ -142,7 +142,7 @@ FTP browser, as well as non-interactive commands such as 'ncftpput' and | |||
|     (native-inputs | ||||
|      `(("automake" ,automake) | ||||
|        ("autoconf" ,autoconf) | ||||
|        ("gettext" ,gnu-gettext))) | ||||
|        ("gettext" ,gettext-minimal))) | ||||
|     (arguments | ||||
|      `(#:phases | ||||
|        (modify-phases %standard-phases | ||||
|  |  | |||
|  | @ -946,7 +946,7 @@ Protocol).") | |||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "http://downloads.sourceforge.net/project/extremetuxracer/releases/" | ||||
|                     "mirror://sourceforge/extremetuxracer/releases/" | ||||
|                     version "/etr-" version ".tar.xz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|  | @ -2575,7 +2575,7 @@ in strikes against the evil corporation.") | |||
|                 "0jk2w5b6s6nkzri585bbz16cif2fhqcnl5l1mq3rd98r9nil3hd1")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs `(("pkg-config" ,pkg-config))) | ||||
|     (inputs `(("gettext" ,gnu-gettext) | ||||
|     (inputs `(("gettext" ,gettext-minimal) | ||||
|               ("glu" ,glu) | ||||
|               ("quesoglc" ,quesoglc) | ||||
|               ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer))))) | ||||
|  |  | |||
|  | @ -45,7 +45,7 @@ | |||
| 
 | ||||
| (define %gcc-infrastructure | ||||
|   ;; Base URL for GCC's infrastructure. | ||||
|   "ftp://gcc.gnu.org/pub/gcc/infrastructure/") | ||||
|   "mirror://gcc/infrastructure/") | ||||
| 
 | ||||
| (define (gcc-configure-flags-for-triplet target) | ||||
|   "Return a list of additional GCC `configure' flags for TARGET, a GNU triplet. | ||||
|  |  | |||
|  | @ -3868,7 +3868,7 @@ metadata in photo and video files of various formats.") | |||
| (define-public shotwell | ||||
|   (package | ||||
|     (name "shotwell") | ||||
|     (version "0.25.0") | ||||
|     (version "0.25.0.1") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://gnome/sources/" name "/" | ||||
|  | @ -3876,7 +3876,7 @@ metadata in photo and video files of various formats.") | |||
|                                   name "-" version ".tar.xz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0f3ly7nxy3kqwgs40avsqkxcz98bfmlhlk30n0d7j7ndk67zz57h")))) | ||||
|                 "19h0ckrgv0c6sj85m6ankyqkmy453ph9kq6zhf7ys2k5xsrrd776")))) | ||||
|     (build-system glib-or-gtk-build-system) | ||||
|     (propagated-inputs | ||||
|      `(("dconf" ,dconf))) | ||||
|  | @ -4747,6 +4747,7 @@ devices using the GNOME desktop.") | |||
|        ("cups" ,cups) | ||||
|        ("dconf" ,dconf) | ||||
|        ("docbook-xsl" ,docbook-xsl) | ||||
|        ("gdk-pixbuf" ,gdk-pixbuf) ; for loading SVG files | ||||
|        ("gnome-bluetooth" ,gnome-bluetooth) | ||||
|        ("gnome-desktop" ,gnome-desktop) | ||||
|        ("gnome-online-accounts" ,gnome-online-accounts) | ||||
|  |  | |||
|  | @ -213,14 +213,14 @@ compatible to GNU Pth.") | |||
| (define-public gnupg | ||||
|   (package | ||||
|     (name "gnupg") | ||||
|     (version "2.1.15") | ||||
|     (version "2.1.16") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://gnupg/gnupg/gnupg-" version | ||||
|                                   ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1pgz02gd84ab94w4xdg67p9z8kvkyr9d523bvcxxd2hviwh1m362")))) | ||||
|                 "0i483m9q032a0s50f1izb213g4h5i7pcgn395m6hvl3sg2kadfa9")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|  | @ -245,8 +245,6 @@ compatible to GNU Pth.") | |||
|       (modify-phases %standard-phases | ||||
|         (add-before 'configure 'patch-paths | ||||
|           (lambda* (#:key inputs #:allow-other-keys) | ||||
|             (substitute* "tests/openpgp/defs.inc" | ||||
|               (("/bin/pwd") (which "pwd"))) | ||||
|             (substitute* "scd/scdaemon.c" | ||||
|               (("\"(libpcsclite\\.so[^\"]*)\"" _ name) | ||||
|                (string-append "\"" (assoc-ref inputs "pcsc-lite") | ||||
|  | @ -256,13 +254,12 @@ compatible to GNU Pth.") | |||
|           (lambda _ | ||||
|             (substitute* (find-files "tests" ".\\.scm$") | ||||
|               (("/usr/bin/env gpgscm") | ||||
|                (string-append (getcwd) "/tests/gpgscm/gpgscm"))))) | ||||
|         (add-before 'check 'set-home | ||||
|           ;; Some tests require write access to $HOME, otherwise leading to | ||||
|           ;; 'failed to create directory /homeless-shelter/.asy' error. | ||||
|           ;; TODO Try removing this phase for GnuPG 2.1.16. | ||||
|                (string-append (getcwd) "/tests/gpgscm/gpgscm"))) | ||||
|             #t)) | ||||
|         ;; If this variable is undefined, /bin/pwd is invoked. | ||||
|         (add-before 'check 'set-gnupg-home | ||||
|           (lambda _ | ||||
|             (setenv "HOME" "/tmp") | ||||
|             (setenv "GNUPGHOME" (getcwd)) | ||||
|             #t))))) | ||||
|     (home-page "https://gnupg.org/") | ||||
|     (synopsis "GNU Privacy Guard") | ||||
|  |  | |||
|  | @ -346,13 +346,28 @@ standards.") | |||
|          ,(mozilla-patch "icecat-CVE-2016-5284-pt5.patch" "0799490f4e6f" "1ypv6i48nabbhcqbach8fbgz9bmnhm7q5z9dnfid44z8g54l3f33") | ||||
|          ,(mozilla-patch "icecat-CVE-2016-5284-pt6.patch" "fc990e4ae8bc" "1s2cj505ajwwiy4xvn5zlmyzqpgahxmqqvis0a6xm6mjbjh02gm4") | ||||
|          ,(mozilla-patch "icecat-bug-1251088.patch"       "5ffa912ed83e" "0v5lpv3c89c2d4y5acn0kyijv096axdnrvaj5ya5yypzfcaqxv24") | ||||
|          ,(mozilla-patch "icecat-bug-1292590.patch"       "d4b5b8f3e373" "0w8cxn6ryhgxryy8k8i06yw4mknv509ns9ff1avd0hmgxa83mcdp") | ||||
|          ,(mozilla-patch "icecat-bug-1298169.patch"       "adce603ae36d" "0mgs85cwx61bk17r7npl311l4m8yn4667wyhgjmm2ajiys6nn0yl") | ||||
|          ,(mozilla-patch "icecat-bug-1301496.patch"       "97268426bb6f" "1z7hg796cgag025gm9pp2szz7w870s7naagdri1dlsilj797v8hr") | ||||
|          ,(mozilla-patch "icecat-bug-1299519.patch"       "fc055950b6b8" "05iml5k3rzc653jk4imd111sh18625jxfxkcj12kjdihl0gdr4x4") | ||||
|          ,(mozilla-patch "icecat-bug-1303710.patch"       "6f845c23565b" "01dlbnmpsnwr448fajs276y62gl03r74k1hxnwsg6ihwhnfdvn5a") | ||||
|          ,(mozilla-patch "icecat-bug-1301343.patch"       "e5d51ca7a3c0" "0hshcz24hc6pkz5pcqxhajm17ibwrlfn1s00frfnpjjy56vacfz0") | ||||
|          ,(mozilla-patch "icecat-bug-1299686.patch"       "576f1725a57e" "1lic9d3r8r1vcniw1g3ca71390lw3dmwjsw55dp6z96hyjbcq3fd"))) | ||||
|          ,(mozilla-patch "icecat-CVE-2016-5290-pt1.patch" "d4b5b8f3e373" "0w8cxn6ryhgxryy8k8i06yw4mknv509ns9ff1avd0hmgxa83mcdp") | ||||
|          ,(mozilla-patch "icecat-CVE-2016-5290-pt2.patch" "adce603ae36d" "0mgs85cwx61bk17r7npl311l4m8yn4667wyhgjmm2ajiys6nn0yl") | ||||
|          ,(mozilla-patch "icecat-CVE-2016-5290-pt3.patch" "97268426bb6f" "1z7hg796cgag025gm9pp2szz7w870s7naagdri1dlsilj797v8hr") | ||||
|          ,(mozilla-patch "icecat-CVE-2016-5290-pt4.patch" "fc055950b6b8" "05iml5k3rzc653jk4imd111sh18625jxfxkcj12kjdihl0gdr4x4") | ||||
|          ,(mozilla-patch "icecat-CVE-2016-5290-pt5.patch" "6f845c23565b" "01dlbnmpsnwr448fajs276y62gl03r74k1hxnwsg6ihwhnfdvn5a") | ||||
|          ,(mozilla-patch "icecat-CVE-2016-5290-pt6.patch" "e5d51ca7a3c0" "0hshcz24hc6pkz5pcqxhajm17ibwrlfn1s00frfnpjjy56vacfz0") | ||||
|          ,(mozilla-patch "icecat-CVE-2016-5290-pt7.patch" "61d1463acd04" "1iig4a79dxmfcr6w82mdhyl88wy7d36g5n4p24632kbabgl9j9sz") | ||||
|          ,(mozilla-patch "icecat-CVE-2016-5290-pt8.patch" "8e0bab4216de" "1knq8h5ni8crfndi3p78b2pyj5lzchqw67vk0yx061r76mq4wp4r") | ||||
|          ,(mozilla-patch "icecat-CVE-2016-5290-pt9.patch" "bb10104dc89e" "1flvagckrzfk7hs2xzb5j3s5i0ck57ygyskh5494xmpa2a1nnsqj") | ||||
|          ,(mozilla-patch "icecat-CVE-2016-5290-pt10.patch" "7006b275b829" "0sqagm247wx94mf51fyhdkn0vf1a1qy9i829shjnhssd79srxmnn") | ||||
|          ,(mozilla-patch "icecat-CVE-2016-5290-pt11.patch" "32ce7be98543" "1y2r9i4p1qpqi75mlwmibr51whz5h1vj28c6mh6ik57dxkqxbclb") | ||||
|          ,(mozilla-patch "icecat-CVE-2016-5291.patch"     "3ff0c89f3b26" "1prn74aglshaj27jfrpd2s2i4slpljw4rbzjxc1qgwjvkq4m6j6f") | ||||
|          ,(mozilla-patch "icecat-CVE-2016-5297.patch"     "46b07bdbf8b2" "1n8y1c5l0ms81dra7jsx8mp633ak5qvx105drvlg9hn3m0fwv1lj") | ||||
|          ,(search-patch  "icecat-CVE-2016-9064.patch") ; adapted for icecat based on: | ||||
|                                         ;                 "00c2b7baaa0b" "0y02yb7r62656nq9dji9dnwils2lxqasjz5byv62j1xa87r7f9hp" | ||||
|          ,(mozilla-patch "icecat-CVE-2016-9066.patch"     "576f1725a57e" "1lic9d3r8r1vcniw1g3ca71390lw3dmwjsw55dp6z96hyjbcq3fd") | ||||
|          ,(mozilla-patch "icecat-bug-1212939.patch"       "4a0e851f83e4" "182vx1qxrr7r2175jjf0bcixwwm1khdj4sq0c8wnsyry7p9waq5q") | ||||
|          ,(mozilla-patch "icecat-bug-1168743.patch"       "a1e06af61ab3" "07llk1ba6axjasiv30vicz96k55ff4mybxy21vjxk6j0asgyjz23") | ||||
|          ,(mozilla-patch "icecat-bug-1287176.patch"       "0569d5dce9db" "1d41sqbq6jc3af73dz9w19win7v7c12kw1mp7j7b1gkadq46c4y7") | ||||
|          ,(mozilla-patch "icecat-bug-1263665.patch"       "a79cafee93f4" "0bn7hpm8mh8qmkpz5wiridr792irrs5sjxyvryazy2i0p4pjh62p") | ||||
|          ,(mozilla-patch "icecat-bug-1304962.patch"       "f61049d5f373" "04d1na31qqq7yq4jjvhq6vzqq3f23rwac8c6fw4h5fx1pdb3l997") | ||||
|          ,(mozilla-patch "icecat-bug-1314574.patch"       "46b2558ca469" "00q8676xg4wb7p371wgi04nl05j7idkb2kna9a0l08k6lks9wdhh"))) | ||||
|       (modules '((guix build utils))) | ||||
|       (snippet | ||||
|        '(begin | ||||
|  | @ -411,8 +426,7 @@ standards.") | |||
|        ("glib" ,glib) | ||||
|        ("gstreamer" ,gstreamer) | ||||
|        ("gst-plugins-base" ,gst-plugins-base) | ||||
|        ("gtk+" ,gtk+) | ||||
|        ("gtk+-2" ,gtk+-2) | ||||
|        ("gtk+" ,gtk+-2) | ||||
|        ("pango" ,pango) | ||||
|        ("freetype" ,freetype) | ||||
|        ("hunspell" ,hunspell) | ||||
|  | @ -456,7 +470,7 @@ standards.") | |||
|        ;; practice somehow.  See <http://hydra.gnu.org/build/378133>. | ||||
|        #:validate-runpath? #f | ||||
| 
 | ||||
|        #:configure-flags '("--enable-default-toolkit=cairo-gtk3" | ||||
|        #:configure-flags '("--enable-default-toolkit=cairo-gtk2" | ||||
|                            "--enable-pango" | ||||
|                            "--enable-gio" | ||||
|                            "--enable-svg" | ||||
|  |  | |||
|  | @ -127,9 +127,16 @@ | |||
|                        (("set -e") "exit 77\nset -e")) | ||||
|                      #t))))) | ||||
|     (inputs | ||||
|      `(;; ("lvm2" ,lvm2) | ||||
|        ("gettext" ,gettext-minimal) | ||||
|      `(("gettext" ,gettext-minimal) | ||||
| 
 | ||||
|        ;; Depend on LVM2 for libdevmapper, used by 'grub-probe' and | ||||
|        ;; 'grub-install' to recognize mapped devices (LUKS, etc.) | ||||
|        ("lvm2" ,lvm2) | ||||
| 
 | ||||
|        ;; Depend on mdadm, which is invoked by 'grub-probe' and 'grub-install' | ||||
|        ;; to determine whether the root file system is RAID. | ||||
|        ("mdadm" ,mdadm) | ||||
| 
 | ||||
|        ("freetype" ,freetype) | ||||
|        ;; ("libusb" ,libusb) | ||||
|        ;; ("fuse" ,fuse) | ||||
|  |  | |||
|  | @ -97,7 +97,7 @@ arrays of data.") | |||
| (define-public gstreamer | ||||
|   (package | ||||
|     (name "gstreamer") | ||||
|     (version "1.10.0") | ||||
|     (version "1.10.1") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|  | @ -106,7 +106,7 @@ arrays of data.") | |||
|             version ".tar.xz")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "01vjsgz58n6nrmnahs4ac7v4656yc042ymffqjzqa0a8pvx7hxqy")))) | ||||
|         "1npnpyrw8603ivi5g3ziglvh3hq2shypid2vjcmki6g6w2bgk3gn")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (outputs '("out" "doc")) | ||||
|     (arguments | ||||
|  | @ -145,7 +145,7 @@ This package provides the core library and elements.") | |||
| (define-public gst-plugins-base | ||||
|   (package | ||||
|     (name "gst-plugins-base") | ||||
|     (version "1.10.0") | ||||
|     (version "1.10.1") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|  | @ -153,7 +153,7 @@ This package provides the core library and elements.") | |||
|                           name "-" version ".tar.xz")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "0jp9rwv0am8qv32q3dzhdcbyygg5wjm4fg20njyhp6n6vybyzkdz")))) | ||||
|         "1jbnr6vbklzli493xdd8y5sflm32r90lifpacxw9vbvs9hlyxkv6")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (outputs '("out" "doc")) | ||||
|     (propagated-inputs | ||||
|  | @ -187,7 +187,8 @@ This package provides the core library and elements.") | |||
|          (add-before 'configure 'patch | ||||
|            (lambda _ | ||||
|              (substitute* "tests/check/libs/pbutils.c" | ||||
|                (("/bin/sh") (which "sh")))))))) | ||||
|                (("/bin/sh") (which "sh"))) | ||||
|              #t))))) | ||||
|     (home-page "https://gstreamer.freedesktop.org/") | ||||
|     (synopsis | ||||
|      "Plugins for the GStreamer multimedia library") | ||||
|  | @ -199,7 +200,7 @@ for the GStreamer multimedia library.") | |||
| (define-public gst-plugins-good | ||||
|   (package | ||||
|     (name "gst-plugins-good") | ||||
|     (version "1.10.0") | ||||
|     (version "1.10.1") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|  | @ -208,7 +209,7 @@ for the GStreamer multimedia library.") | |||
|             name "-" version ".tar.xz")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "1qhx6x3ax1qqbvm20zhqax3dsas4yzlx7vdjnjqllqzmcfbma0vs")))) | ||||
|         "1hkcap9l2603266gyi6jgvx7frbvfmb7xhfhjizbczy1wykjwr57")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("aalib" ,aalib) | ||||
|  | @ -264,14 +265,14 @@ developers consider to have good quality code and correct functionality.") | |||
| (define-public gst-plugins-bad | ||||
|   (package | ||||
|     (name "gst-plugins-bad") | ||||
|     (version "1.10.0") | ||||
|     (version "1.10.1") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "https://gstreamer.freedesktop.org/src/" | ||||
|                                   name "/" name "-" version ".tar.xz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0kqwh5r4j05f2w9m353grvypn0106hxcr52409f7rvm3w4b9sprx")))) | ||||
|                 "07cjra4fclrk6lpdm5hrsgp79aqpklx3v3l9scain091zvchwghk")))) | ||||
|     (outputs '("out" "doc")) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|  | @ -329,7 +330,7 @@ developers consider to have good quality code and correct functionality.") | |||
|        ;("qtx11extras" ,qtx11extras) | ||||
|        ("soundtouch" ,soundtouch) | ||||
|        ("x265" ,x265) | ||||
|        ;("wayland" ,wayland) ; needs wayland-protocols | ||||
|        ;("wayland" ,wayland) ; needs gtk+ built with wayland support | ||||
|        )) | ||||
|     (home-page "https://gstreamer.freedesktop.org/") | ||||
|     (synopsis "Plugins for the GStreamer multimedia library") | ||||
|  | @ -341,7 +342,7 @@ par compared to the rest.") | |||
| (define-public gst-plugins-ugly | ||||
|   (package | ||||
|     (name "gst-plugins-ugly") | ||||
|     (version "1.10.0") | ||||
|     (version "1.10.1") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|  | @ -349,7 +350,7 @@ par compared to the rest.") | |||
|                            name "/" name "-" version ".tar.xz")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "1q2m3bl8kh9q3grshj55lb2mqby4r20qfsrffc2l7ddb0ccqvplp")))) | ||||
|          "1hl385fys7hfx5ffipavvhciq6hwm731rs4d6r9fn7h9qagxbv55")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("gst-plugins-base" ,gst-plugins-base) | ||||
|  | @ -380,7 +381,7 @@ distribution problems in some jurisdictions, e.g. due to patent threats.") | |||
| (define-public gst-libav | ||||
|   (package | ||||
|     (name "gst-libav") | ||||
|     (version "1.10.0") | ||||
|     (version "1.10.1") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|  | @ -388,7 +389,7 @@ distribution problems in some jurisdictions, e.g. due to patent threats.") | |||
|                     name "-" version ".tar.xz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0nyqkggcxfrbflcf4jyj0h9l1rkbi3r5h61w4fcbp2n72522165g")))) | ||||
|                 "1ivjbh5g0l5ykfpc16kq5x2jz8d4ignyha14jpiz3pz6w26qpci7")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:configure-flags '("--with-system-libav") | ||||
|  | @ -418,7 +419,7 @@ compression formats through the use of the libav library.") | |||
| (define-public python-gst | ||||
|   (package | ||||
|     (name "python-gst") | ||||
|     (version "1.10.0") | ||||
|     (version "1.10.1") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|  | @ -426,7 +427,7 @@ compression formats through the use of the libav library.") | |||
|                     "gst-python-" version ".tar.xz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0hf71m0vqnd5sdj14li935xzzmqxh606qgw744a25w3vwj9v8nfy")))) | ||||
|                 "04xhh0z0c0s6aq7kvmfs4r6yl1pjnqz0krp05pbjy62ayx5b61ak")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      ;; XXX: Factorize python-sitedir with python-build-system. | ||||
|  |  | |||
|  | @ -1116,7 +1116,7 @@ extensive documentation, including API reference and a tutorial.") | |||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|       (uri (string-append "http://ftp.gnome.org/pub/GNOME/sources" | ||||
|       (uri (string-append "mirror://gnome/sources" | ||||
|                           "/pygtk/" (version-major+minor version) | ||||
|                           "/pygtk-" version ".tar.bz2")) | ||||
|       (sha256 | ||||
|  | @ -1289,7 +1289,8 @@ can also be used to document application code.") | |||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config) | ||||
|        ("intltool" ,intltool))) | ||||
|     (propagated-inputs | ||||
|     (inputs | ||||
|      ;; Don't propagate GTK+ to reduce "profile pollution". | ||||
|      `(("gtk+" ,gtk+-2))) ; required by gtk-engines-2.pc | ||||
|     (home-page "http://live.gnome.org/GnomeArt") | ||||
|     (synopsis "Theming engines for GTK+ 2.x") | ||||
|  |  | |||
|  | @ -217,7 +217,8 @@ without requiring the source code to be rewritten.") | |||
|                                   ".tar.xz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "12yqkr974y91ylgw6jnmci2v90i90s7h9vxa4zk0sai8vjnz4i1p")))))) | ||||
|                 "12yqkr974y91ylgw6jnmci2v90i90s7h9vxa4zk0sai8vjnz4i1p")) | ||||
|               (patches (search-patches "guile-repl-server-test.patch")))))) | ||||
| 
 | ||||
| (define-public guile-next | ||||
|   (package (inherit guile-2.0) | ||||
|  |  | |||
|  | @ -243,7 +243,7 @@ extracting icontainer icon files.") | |||
| (define-public libtiff | ||||
|   (package | ||||
|    (name "libtiff") | ||||
|    (replacement libtiff/fixed) | ||||
|    (replacement libtiff-4.0.7) | ||||
|    (version "4.0.6") | ||||
|    (source (origin | ||||
|             (method url-fetch) | ||||
|  | @ -283,24 +283,18 @@ collection of tools for doing simple manipulations of TIFF images.") | |||
|                                   "See COPYRIGHT in the distribution.")) | ||||
|    (home-page "http://www.remotesensing.org/libtiff/"))) | ||||
| 
 | ||||
| (define libtiff/fixed | ||||
| (define libtiff-4.0.7 | ||||
|   (package | ||||
|     (inherit libtiff) | ||||
|     (version "4.0.7") | ||||
|     (source (origin | ||||
|               (inherit (package-source libtiff)) | ||||
|               (patches (search-patches | ||||
|                          "libtiff-oob-accesses-in-decode.patch" | ||||
|                          "libtiff-oob-write-in-nextdecode.patch" | ||||
|                          "libtiff-CVE-2015-8665+CVE-2015-8683.patch" | ||||
|                          "libtiff-CVE-2016-3623.patch" | ||||
|                          "libtiff-CVE-2016-3945.patch" | ||||
|                          "libtiff-CVE-2016-3990.patch" | ||||
|                          "libtiff-CVE-2016-3991.patch" | ||||
|                          "libtiff-CVE-2016-5314.patch" | ||||
|                          "libtiff-CVE-2016-5321.patch" | ||||
|                          "libtiff-CVE-2016-5323.patch" | ||||
|                          "libtiff-CVE-2016-5652.patch" | ||||
|                          "libtiff-CVE-2016-9273.patch")))))) | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "ftp://download.osgeo.org/libtiff/tiff-" | ||||
|                                   version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "06ghqhr4db1ssq0acyyz49gr8k41gzw6pqb6mbn5r7jqp77s4hwz")))) | ||||
|     (home-page "http://www.simplesystems.org/libtiff/"))) | ||||
| 
 | ||||
| (define-public libwmf | ||||
|   (package | ||||
|  | @ -849,15 +843,16 @@ convert, manipulate, filter and display a wide variety of image formats.") | |||
| (define-public jasper | ||||
|   (package | ||||
|     (name "jasper") | ||||
|     (version "1.900.19") | ||||
|     (version "1.900.29") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "https://www.ece.uvic.ca/~frodo/jasper" | ||||
|                                   "/software/jasper-" version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0dm3k0wdny3s37zxm9s9riv46p69c14bnn532fv6cv5b6l1b0pwb")))) | ||||
|                 "1h1575wdzq1p7y2xvy1gbiypai1iils5awhy4gadr78qpb9ykrra")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs `(("libjpeg" ,libjpeg))) | ||||
|     (synopsis "JPEG-2000 library") | ||||
|     (description "The JasPer Project is an initiative to provide a reference | ||||
| implementation of the codec specified in the JPEG-2000 Part-1 standard (i.e., | ||||
|  | @ -944,7 +939,7 @@ differences in file encoding, image quality, and other small variations.") | |||
|               (patches (list (search-patch "steghide-fixes.patch"))))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("gettext" ,gnu-gettext) | ||||
|      `(("gettext" ,gettext-minimal) | ||||
|        ("libtool" ,libtool) | ||||
|        ("perl" ,perl)))                 ;for tests | ||||
|     (inputs | ||||
|  |  | |||
|  | @ -43,14 +43,14 @@ | |||
| (define-public imagemagick | ||||
|   (package | ||||
|     (name "imagemagick") | ||||
|     (version "6.9.6-4") | ||||
|     (version "6.9.6-5") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "mirror://imagemagick/ImageMagick-" | ||||
|                                  version ".tar.xz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "1mv2qihr9jfagz1dds42q46zirh0dvx0rai7pkqmbzy2bp2c48ym")))) | ||||
|                "037lg2m0y5b17lyi34jdlkq4h03ck67j5m6wr84nvwd3jfx240cd")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:configure-flags '("--with-frozenpaths" "--without-gcc-arch") | ||||
|  |  | |||
|  | @ -327,14 +327,14 @@ It has been modified to remove all non-free binary blobs.") | |||
| (define %intel-compatible-systems '("x86_64-linux" "i686-linux")) | ||||
| 
 | ||||
| (define-public linux-libre | ||||
|   (make-linux-libre "4.8.7" | ||||
|                     "1jbwm131zv59iyr6qw7qcbcfz49qqb2hhx30230gb99flyc5h4hg" | ||||
|   (make-linux-libre "4.8.10" | ||||
|                     "04kwarmpz5adz64wwy0xpwzxsri7jrjkhbmjlwxsac69x9a26bkl" | ||||
|                     %intel-compatible-systems | ||||
|                     #:configuration-file kernel-config)) | ||||
| 
 | ||||
| (define-public linux-libre-4.4 | ||||
|   (make-linux-libre "4.4.31" | ||||
|                     "1s4xdllvxw02g4yqlafcacgsgdpxccf6dlqafpqffm873q1y9n4d" | ||||
|   (make-linux-libre "4.4.34" | ||||
|                     "04ng40l2av34bcfwjs5vliv15f0m8bl0sfw08imspiplxvajd6ca" | ||||
|                     %intel-compatible-systems | ||||
|                     #:configuration-file kernel-config)) | ||||
| 
 | ||||
|  | @ -345,8 +345,8 @@ It has been modified to remove all non-free binary blobs.") | |||
|                     #:configuration-file kernel-config)) | ||||
| 
 | ||||
| ;; Avoid rebuilding kernel variants when there is a minor version bump. | ||||
| (define %linux-libre-version "4.8.7") | ||||
| (define %linux-libre-hash "1jbwm131zv59iyr6qw7qcbcfz49qqb2hhx30230gb99flyc5h4hg") | ||||
| (define %linux-libre-version "4.8.10") | ||||
| (define %linux-libre-hash "04kwarmpz5adz64wwy0xpwzxsri7jrjkhbmjlwxsac69x9a26bkl") | ||||
| 
 | ||||
| (define-public linux-libre-arm-generic | ||||
|   (make-linux-libre %linux-libre-version | ||||
|  | @ -1683,7 +1683,8 @@ time.") | |||
|                     (("confdir = .*$") | ||||
|                      "confdir = @sysconfdir@\n") | ||||
|                     (("DEFAULT_SYS_DIR = @DEFAULT_SYS_DIR@") | ||||
|                      "DEFAULT_SYS_DIR = @sysconfdir@")))))) | ||||
|                      "DEFAULT_SYS_DIR = @sysconfdir@")))) | ||||
|               (patches (search-patches "lvm2-static-link.patch")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config) | ||||
|  | @ -1738,6 +1739,22 @@ mapper.  Kernel components are part of Linux-libre.") | |||
|     ;; Command-line tools are GPLv2. | ||||
|     (license (list license:gpl2 license:lgpl2.1)))) | ||||
| 
 | ||||
| (define-public lvm2-static | ||||
|   (package | ||||
|     (inherit lvm2) | ||||
|     (name "lvm2-static") | ||||
| 
 | ||||
|     ;; Propagate udev because libdevmapper.a depends on libudev. | ||||
|     (inputs (alist-delete "udev" (package-inputs lvm2))) | ||||
|     (propagated-inputs `(("udev" ,eudev))) | ||||
| 
 | ||||
|     (arguments | ||||
|      (substitute-keyword-arguments (package-arguments lvm2) | ||||
|        ((#:configure-flags flags '()) | ||||
|         ;; LVM2 doesn't use Libtool, hence the custom option. | ||||
|         `(cons "--enable-static_link" ,flags)))) | ||||
|     (synopsis "Logical volume management for Linux (statically linked)"))) | ||||
| 
 | ||||
| (define-public wireless-tools | ||||
|   (package | ||||
|     (name "wireless-tools") | ||||
|  | @ -3128,7 +3145,7 @@ developers.") | |||
|                           (string-append "PREFIX=" %output)) | ||||
|        #:tests? #f))                    ; no tests | ||||
|     (native-inputs | ||||
|      `(("gnu-gettext" ,gnu-gettext) | ||||
|      `(("gettext" ,gettext-minimal) | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|     (inputs | ||||
|      `(("libdrm" ,libdrm) | ||||
|  |  | |||
|  | @ -537,14 +537,14 @@ invoking @command{notifymuch} from the post-new hook.") | |||
| (define-public notmuch | ||||
|   (package | ||||
|     (name "notmuch") | ||||
|     (version "0.23.1") | ||||
|     (version "0.23.2") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "https://notmuchmail.org/releases/notmuch-" | ||||
|                                   version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "106ijsnilqf8760z4cq99rqzjsvyaw86d0lgnzz7v95gm4d2l0g8")))) | ||||
|                 "1g4p5hsrqqbqk6s2w756als60wppvjgpyq104smy3w9vshl7bzgd")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:make-flags (list "V=1") ; Verbose test output. | ||||
|  | @ -568,6 +568,11 @@ invoking @command{notifymuch} from the post-new hook.") | |||
|                       ;; Patch various inline shell invocations. | ||||
|                       (substitute* (find-files "test" "\\.sh$") | ||||
|                         (("/bin/sh") (which "sh"))) | ||||
|                       ;; XXX: Some signature verification tests fail with | ||||
|                       ;; gnupg-2.1.16, so we skip them. See this thread: | ||||
|                       ;; https://notmuchmail.org/pipermail/notmuch/2016/023688.html | ||||
|                       (setenv "NOTMUCH_SKIP_TESTS" | ||||
|                               "T350-crypto.2 T350-crypto.3 T350-crypto.4 T350-crypto.15") | ||||
|                       #t))))) | ||||
|     (native-inputs | ||||
|      `(("bash-completion" ,bash-completion) | ||||
|  | @ -1471,15 +1476,15 @@ converts them to maildir format directories.") | |||
| (define-public mpop | ||||
|   (package | ||||
|     (name "mpop") | ||||
|     (version "1.2.5") | ||||
|     (version "1.2.6") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append "http://downloads.sourceforge.net/mpop/mpop-" | ||||
|                            version ".tar.xz")) | ||||
|        (uri (string-append "mirror://sourceforge/mpop/mpop/" version | ||||
|                            "/mpop-" version ".tar.xz")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "0n0ij258kn8lfa6nyr6l6plc4hf1wvyf1hkwicvdbjqdqrgjnq81")))) | ||||
|          "0p1ix63jh64dibrlccch8q7gxl9nn18wd2qpyr5z1h4gs2fpmv4z")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("gnutls" ,gnutls) | ||||
|  | @ -1605,14 +1610,14 @@ transfer protocols.") | |||
| (define-public opensmtpd | ||||
|   (package | ||||
|     (name "opensmtpd") | ||||
|     (version "5.9.2p1") | ||||
|     (version "6.0.2p1") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "https://www.opensmtpd.org/archives/" | ||||
|                                   name "-" version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "07d7f1m5sxyz6mkk228rcm7fsf7350994ayvmhgph333q5rz48im")))) | ||||
|                 "1b4h64w45hpmfq5721smhg4s0shs64gbcjqjpx3fbiw4hz8bdy9a")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("bdb" ,bdb) | ||||
|  | @ -1622,11 +1627,15 @@ transfer protocols.") | |||
|        ("linux-pam" ,linux-pam) | ||||
|        ("zlib" ,zlib))) | ||||
|     (native-inputs | ||||
|      `(("bison" ,bison))) | ||||
|      `(("bison" ,bison) | ||||
|        ("groff" ,groff))) | ||||
|     (arguments | ||||
|      `(#:configure-flags (list "--with-table-db" "--localstatedir=/var" | ||||
|                                "--with-user-smtpd=smtpd" "--with-user-queue=smtpq" | ||||
|                                "--with-group-queue=smtpq") | ||||
|      `(#:configure-flags | ||||
|        (list "--with-table-db" "--localstatedir=/var" | ||||
|              "--with-user-smtpd=smtpd" "--with-user-queue=smtpq" | ||||
|              "--with-group-queue=smtpq" | ||||
|              "--with-path-socket=/var/run" | ||||
|              "--with-path-CAfile=/etc/ssl/certs/ca-certificates.crt") | ||||
|        #:phases | ||||
|        (modify-phases %standard-phases | ||||
|          ;; OpenSMTPD provides a single utility smtpctl to control the daemon and | ||||
|  |  | |||
|  | @ -2723,7 +2723,6 @@ set.") | |||
|              ;; Custom install because docs/Makefile doesn't honor ${docdir}. | ||||
|              (let* ((doc (assoc-ref outputs "doc")) | ||||
|                     (docdir (string-append doc "/share/doc/hypre-" ,version))) | ||||
|                (mkdir-p docdir) | ||||
|                (with-directory-excursion "docs" | ||||
|                  (for-each (lambda (base) | ||||
|                              (install-file (string-append base ".pdf") docdir) | ||||
|  |  | |||
|  | @ -441,7 +441,6 @@ format.") | |||
|            (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 | ||||
|  |  | |||
|  | @ -183,7 +183,7 @@ terminal using ncurses.") | |||
| (define-public ncmpcpp | ||||
|   (package | ||||
|     (name "ncmpcpp") | ||||
|     (version "0.7.5") | ||||
|     (version "0.7.7") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri | ||||
|  | @ -191,7 +191,7 @@ terminal using ncurses.") | |||
|                               version ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0zg084m06y7dd8ccy6aq9hx8q7qi2s5kl0br5139hrmk40q68kvy")))) | ||||
|                 "1vq19m36608pvw1g8nbcaqqb89wsw05v35pi45xwr20z7g4bxg5p")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs `(("libmpdclient" ,libmpdclient) | ||||
|               ("boost"  ,boost) | ||||
|  | @ -301,7 +301,7 @@ interface for the Music Player Daemon.") | |||
|                  `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))) | ||||
|              #t))))) | ||||
|     (native-inputs | ||||
|      `(("gettext" ,gnu-gettext))) | ||||
|      `(("gettext" ,gettext-minimal))) | ||||
|     (inputs | ||||
|      `(("python-mpd2" ,python-mpd2) | ||||
|        ("gtk+" ,gtk+) | ||||
|  |  | |||
|  | @ -504,7 +504,7 @@ interface.  It is implemented as a frontend to @code{klick}.") | |||
| (define-public lilypond | ||||
|   (package | ||||
|     (name "lilypond") | ||||
|     (version "2.19.33") | ||||
|     (version "2.19.51") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|  | @ -513,7 +513,7 @@ interface.  It is implemented as a frontend to @code{klick}.") | |||
|                     name "-" version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0s4vbbfy4xwq4da4kmlnndalmcyx2jaz7y8praah2146qbnr90xh")))) | ||||
|                 "1b4jvc0fixbnp8x457fzk5wgb4zd03npwwivp60kc27fmv63w5l1")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:tests? #f ; out-test/collated-files.html fails | ||||
|  | @ -881,7 +881,7 @@ users to select LV2 plugins and run them with jalv.") | |||
| (define-public synthv1 | ||||
|   (package | ||||
|     (name "synthv1") | ||||
|     (version "0.7.5") | ||||
|     (version "0.8.0") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri | ||||
|  | @ -889,7 +889,7 @@ users to select LV2 plugins and run them with jalv.") | |||
|                               "/synthv1-" version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0h5zja78phf9705i9g54zh61iczb24iv7rxhljyms30sjgajig1y")))) | ||||
|                 "155pfyhr6d35ciw95pbxlqy7751cmij8j5d849rvblqbjzyzb5qx")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:tests? #f ; There are no tests. | ||||
|  | @ -909,6 +909,74 @@ users to select LV2 plugins and run them with jalv.") | |||
| oscillators and stereo effects.") | ||||
|     (license license:gpl2+))) | ||||
| 
 | ||||
| (define-public drumkv1 | ||||
|   (package | ||||
|     (name "drumkv1") | ||||
|     (version "0.8.0") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri | ||||
|                (string-append "mirror://sourceforge/drumkv1/drumkv1/" version | ||||
|                               "/drumkv1-" version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1n2kd468kn71yp2asmamprvblmdlvh0zd8lsh3598dwi4b7aa3ga")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:tests? #f ; There are no tests. | ||||
|        #:configure-flags | ||||
|        '("CXXFLAGS=-std=gnu++11"))) | ||||
|     (inputs | ||||
|      `(("jack" ,jack-1) | ||||
|        ("lv2" ,lv2) | ||||
|        ("libsndfile" ,libsndfile) | ||||
|        ("alsa-lib" ,alsa-lib) | ||||
|        ("liblo" ,liblo) | ||||
|        ("qtbase" ,qtbase))) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config) | ||||
|        ("qttools" ,qttools))) | ||||
|     (home-page "http://drumkv1.sourceforge.net") | ||||
|     (synopsis "Drum-kit sampler synthesizer with stereo effects") | ||||
|     (description | ||||
|      "Drumkv1 is an old-school drum-kit sampler synthesizer with stereo | ||||
| effects.") | ||||
|     (license license:gpl2+))) | ||||
| 
 | ||||
| (define-public samplv1 | ||||
|   (package | ||||
|     (name "samplv1") | ||||
|     (version "0.8.0") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri | ||||
|                (string-append "mirror://sourceforge/samplv1/samplv1/" version | ||||
|                               "/samplv1-" version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0j3hkmd9q0bw9b7nk9cssqywlrishkd1n790a9vq6gh3pdc5sf3r")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:tests? #f ; There are no tests. | ||||
|        #:configure-flags | ||||
|        '("CXXFLAGS=-std=gnu++11"))) | ||||
|     (inputs | ||||
|      `(("jack" ,jack-1) | ||||
|        ("lv2" ,lv2) | ||||
|        ("libsndfile" ,libsndfile) | ||||
|        ("alsa-lib" ,alsa-lib) | ||||
|        ("liblo" ,liblo) | ||||
|        ("qtbase" ,qtbase))) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config) | ||||
|        ("qttools" ,qttools))) | ||||
|     (home-page "http://samplv1.sourceforge.net") | ||||
|     (synopsis "Polyphonic sampler synthesizer with stereo effects") | ||||
|     (description | ||||
|      "Samplv1 is an old-school polyphonic sampler synthesizer with stereo | ||||
| effects.") | ||||
|     (license license:gpl2+))) | ||||
| 
 | ||||
| (define-public amsynth | ||||
|   (package | ||||
|     (name "amsynth") | ||||
|  | @ -1148,7 +1216,6 @@ is subjective.") | |||
|                     (lib   (string-append share "/java")) | ||||
|                     (swt   (assoc-ref inputs "java-swt"))) | ||||
|                (mkdir-p bin) | ||||
|                (mkdir-p lib) | ||||
|                ;; install all jars | ||||
|                (for-each (lambda (file) | ||||
|                            (install-file file lib)) | ||||
|  | @ -1407,7 +1474,7 @@ backends, including ALSA, OSS, Network and FluidSynth.") | |||
| (define-public zynaddsubfx | ||||
|   (package | ||||
|     (name "zynaddsubfx") | ||||
|     (version "2.5.4") | ||||
|     (version "3.0.0") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|  | @ -1415,7 +1482,7 @@ backends, including ALSA, OSS, Network and FluidSynth.") | |||
|                     version "/zynaddsubfx-" version ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "16llaa2wg2gbgjhwp3632b2vx9jvanj4csv7d41k233ms6d1sjq1")))) | ||||
|                 "0p640hlw28264nzrnd2lm4bi5snas4fvh80p8lpxvph2hjw3sncl")))) | ||||
|     (build-system cmake-build-system) | ||||
|     (arguments | ||||
|      `(#:phases | ||||
|  | @ -1433,6 +1500,7 @@ backends, including ALSA, OSS, Network and FluidSynth.") | |||
|     (inputs | ||||
|      `(("liblo" ,liblo) | ||||
|        ("ntk" ,ntk) | ||||
|        ("mesa" ,mesa) | ||||
|        ("alsa-lib" ,alsa-lib) | ||||
|        ("jack" ,jack-1) | ||||
|        ("fftw" ,fftw) | ||||
|  | @ -2177,8 +2245,8 @@ simulation of a push pull transistor fuzz effect with added high octave.")))) | |||
| pedal.")))) | ||||
| 
 | ||||
| (define-public gx-saturator-lv2 | ||||
|   (let ((commit "361399245d234b4d02f11f066d25ac15d90c6bf8") | ||||
|         (revision "1")) | ||||
|   (let ((commit "0b581ac85c515325b9f16e51937cae6e1bf81a0a") | ||||
|         (revision "2")) | ||||
|     (package (inherit gx-guvnor-lv2) | ||||
|       (name "gx-saturator-lv2") | ||||
|       (version (string-append "0-" revision "." (string-take commit 9))) | ||||
|  | @ -2189,27 +2257,16 @@ pedal.")))) | |||
|                       (commit commit))) | ||||
|                 (sha256 | ||||
|                  (base32 | ||||
|                   "13cf5gxr2wzp5954hdhbl79v98a665ll5434mb3668p4j33sv217")) | ||||
|                   "1cl785pzq8zk55m1rnhfd6qsabci6kpf4pf002gwr91vagyq246z")) | ||||
|                 (file-name (string-append name "-" version "-checkout")))) | ||||
|       (arguments | ||||
|        (substitute-keyword-arguments (package-arguments gx-guvnor-lv2) | ||||
|          ((#:phases phases) | ||||
|           `(modify-phases ,phases | ||||
|              (add-after 'unpack 'escape-shell-commands | ||||
|                (lambda _ | ||||
|                  (substitute* "Makefile" | ||||
|                    (("cat ") "$(shell cat ") | ||||
|                    (("/dev/null") "/dev/null)") | ||||
|                    (("SSE_CFLAGS = \"\"") "SSE_CFLAGS =")) | ||||
|                  #t)))))) | ||||
|       (home-page "https://github.com/brummer10/GxSaturator.lv2") | ||||
|       (synopsis "Saturation effect") | ||||
|       (description "This package provides the LV2 plugin \"GxSaturator\", a | ||||
| saturation effect.")))) | ||||
| 
 | ||||
| (define-public gx-hyperion-lv2 | ||||
|   (let ((commit "7d993bc77f9946b3df0e481632c61b2dcbb6549f") | ||||
|         (revision "1")) | ||||
|   (let ((commit "6a096a664e553e551e179e85cf390bd1683410fb") | ||||
|         (revision "2")) | ||||
|     (package (inherit gx-guvnor-lv2) | ||||
|       (name "gx-hyperion-lv2") | ||||
|       (version (string-append "0-" revision "." (string-take commit 9))) | ||||
|  | @ -2220,27 +2277,16 @@ saturation effect.")))) | |||
|                       (commit commit))) | ||||
|                 (sha256 | ||||
|                  (base32 | ||||
|                   "12klcyc6l9v93ii3478mqz44jzvh5np1sk8zzdmz42jp0w8qd429")) | ||||
|                   "1ksv3wmylhwbf6kjl2lnhr14h9rfl291cfm21471gnb1r68yqfxh")) | ||||
|                 (file-name (string-append name "-" version "-checkout")))) | ||||
|       (arguments | ||||
|        (substitute-keyword-arguments (package-arguments gx-guvnor-lv2) | ||||
|          ((#:phases phases) | ||||
|           `(modify-phases ,phases | ||||
|              (add-after 'unpack 'escape-shell-commands | ||||
|                (lambda _ | ||||
|                  (substitute* "Makefile" | ||||
|                    (("cat ") "$(shell cat ") | ||||
|                    (("/dev/null") "/dev/null)") | ||||
|                    (("SSE_CFLAGS = \"\"") "SSE_CFLAGS =")) | ||||
|                  #t)))))) | ||||
|       (home-page "https://github.com/brummer10/GxHyperion.lv2") | ||||
|       (synopsis "Simulation of the Hyperion Fuzz pedal") | ||||
|       (description "This package provides the LV2 plugin \"GxHyperion\", a | ||||
| simulation of the Hyperion Fuzz pedal.")))) | ||||
| 
 | ||||
| (define-public gx-voodoo-fuzz-lv2 | ||||
|   (let ((commit "d2d6b27bc279f98c2fd11bbd58ffe2fb2c321ec4") | ||||
|         (revision "1")) | ||||
|   (let ((commit "aec7889b489385e8add06126e7a36ae2e26254b1") | ||||
|         (revision "2")) | ||||
|     (package (inherit gx-guvnor-lv2) | ||||
|       (name "gx-voodoo-fuzz-lv2") | ||||
|       (version (string-append "0-" revision "." (string-take commit 9))) | ||||
|  | @ -2251,19 +2297,8 @@ simulation of the Hyperion Fuzz pedal.")))) | |||
|                       (commit commit))) | ||||
|                 (sha256 | ||||
|                  (base32 | ||||
|                   "1ji915bly588a8xwvwspvsqv0nh8ljgi6rky2mk1d9d6nz96jrbk")) | ||||
|                   "0mc41ldlv89069iaysnfiqxy5h5sr8mdi5cxm3ij5q5v4jv3viwx")) | ||||
|                 (file-name (string-append name "-" version "-checkout")))) | ||||
|       (arguments | ||||
|        (substitute-keyword-arguments (package-arguments gx-guvnor-lv2) | ||||
|          ((#:phases phases) | ||||
|           `(modify-phases ,phases | ||||
|              (add-after 'unpack 'escape-shell-commands | ||||
|                (lambda _ | ||||
|                  (substitute* "Makefile" | ||||
|                    (("cat ") "$(shell cat ") | ||||
|                    (("/dev/null") "/dev/null)") | ||||
|                    (("SSE_CFLAGS = \"\"") "SSE_CFLAGS =")) | ||||
|                  #t)))))) | ||||
|       (home-page "https://github.com/brummer10/GxVoodoFuzz.lv2") | ||||
|       (synopsis "Fuzz effect modelled after the Voodoo Lab SuperFuzz") | ||||
|       (description "This package provides the LV2 plugin \"GxVoodooFuzz\", a | ||||
|  | @ -2272,8 +2307,8 @@ Bosstone circuit, followed by the tone control of the FoxToneMachine in | |||
| parallel with a DarkBooster, followed by a volume control.")))) | ||||
| 
 | ||||
| (define-public gx-super-fuzz-lv2 | ||||
|   (let ((commit "9800354caeb4082a64ca55b2daa9a9a1f79b8c21") | ||||
|         (revision "1")) | ||||
|   (let ((commit "f40389575812c909007d140d327ce579930b71f7") | ||||
|         (revision "2")) | ||||
|     (package (inherit gx-guvnor-lv2) | ||||
|       (name "gx-super-fuzz-lv2") | ||||
|       (version (string-append "0-" revision "." (string-take commit 9))) | ||||
|  | @ -2284,19 +2319,8 @@ parallel with a DarkBooster, followed by a volume control.")))) | |||
|                       (commit commit))) | ||||
|                 (sha256 | ||||
|                  (base32 | ||||
|                   "1jclp53p01h94cpx17wm4765r7klbr41g7bvq87l53qwlrgkc7a9")) | ||||
|                   "174bibj8qzm8zr6f5h8bcj94iry17zravk8flpdy84n6yg7cixji")) | ||||
|                 (file-name (string-append name "-" version "-checkout")))) | ||||
|       (arguments | ||||
|        (substitute-keyword-arguments (package-arguments gx-guvnor-lv2) | ||||
|          ((#:phases phases) | ||||
|           `(modify-phases ,phases | ||||
|              (add-after 'unpack 'escape-shell-commands | ||||
|                (lambda _ | ||||
|                  (substitute* "Makefile" | ||||
|                    (("cat ") "$(shell cat ") | ||||
|                    (("/dev/null") "/dev/null)") | ||||
|                    (("SSE_CFLAGS = \"\"") "SSE_CFLAGS =")) | ||||
|                  #t)))))) | ||||
|       (home-page "https://github.com/brummer10/GxSuperFuzz.lv2") | ||||
|       (synopsis "Fuzz effect modelled after the UniVox SuperFuzz") | ||||
|       (description "This package provides the LV2 plugin \"GxVoodooFuzz\", an | ||||
|  | @ -2305,8 +2329,8 @@ pot, which is usualy in the housing, is exposed as a control parameter.  It | |||
| adjusts the amount of harmonics.")))) | ||||
| 
 | ||||
| (define-public gx-vintage-fuzz-master-lv2 | ||||
|   (let ((commit "c3ab9a3019a8381a398718b98615940b4a225b9e") | ||||
|         (revision "1")) | ||||
|   (let ((commit "0fec0bc1e8a8ba909a68e916e036138a3425d7db") | ||||
|         (revision "2")) | ||||
|     (package (inherit gx-guvnor-lv2) | ||||
|       (name "gx-vintage-fuzz-master-lv2") | ||||
|       (version (string-append "0-" revision "." (string-take commit 9))) | ||||
|  | @ -2317,27 +2341,16 @@ adjusts the amount of harmonics.")))) | |||
|                       (commit commit))) | ||||
|                 (sha256 | ||||
|                  (base32 | ||||
|                   "0s1ghysggx6psalyhcpgjnmf38vama6jcqgbldqmxii5c2w2ybsc")) | ||||
|                   "06szi6d2iwkygbw5azhwzhcl2as4lmk2gs9hanngsf46a1zbdcp7")) | ||||
|                 (file-name (string-append name "-" version "-checkout")))) | ||||
|       (arguments | ||||
|        (substitute-keyword-arguments (package-arguments gx-guvnor-lv2) | ||||
|          ((#:phases phases) | ||||
|           `(modify-phases ,phases | ||||
|              (add-after 'unpack 'escape-shell-commands | ||||
|                (lambda _ | ||||
|                  (substitute* "Makefile" | ||||
|                    (("cat ") "$(shell cat ") | ||||
|                    (("/dev/null") "/dev/null)") | ||||
|                    (("SSE_CFLAGS = \"\"") "SSE_CFLAGS =")) | ||||
|                  #t)))))) | ||||
|       (home-page "https://github.com/brummer10/GxVintageFuzzMaster.lv2") | ||||
|       (synopsis "Fuzz effect simulation of the vintage Fuzz Master") | ||||
|       (description "This package provides the LV2 plugin | ||||
| \"GxVintageFuzzMaster\", a simulation of the vintage Fuzz Master pedal.")))) | ||||
| 
 | ||||
| (define-public gx-slow-gear-lv2 | ||||
|   (let ((commit "1071c2b2936ebad859242cb578af2f3415f8900f") | ||||
|         (revision "1")) | ||||
|   (let ((commit "cb852e0426f4e6fe077e7f1ede73a4da335cfc5e") | ||||
|         (revision "2")) | ||||
|     (package (inherit gx-guvnor-lv2) | ||||
|       (name "gx-slow-gear-lv2") | ||||
|       (version (string-append "0-" revision "." (string-take commit 9))) | ||||
|  | @ -2348,27 +2361,16 @@ adjusts the amount of harmonics.")))) | |||
|                       (commit commit))) | ||||
|                 (sha256 | ||||
|                  (base32 | ||||
|                   "0c6099h5qkv7ilsvxxcrzwy1h6lkld1srh3fvbjxyw9q34kbqsyl")) | ||||
|                   "0dp7afi1r3kzciiyn1hrkz6arsq47ys9sx5g4b7xa9k1dv92ishp")) | ||||
|                 (file-name (string-append name "-" version "-checkout")))) | ||||
|       (arguments | ||||
|        (substitute-keyword-arguments (package-arguments gx-guvnor-lv2) | ||||
|          ((#:phases phases) | ||||
|           `(modify-phases ,phases | ||||
|              (add-after 'unpack 'escape-shell-commands | ||||
|                (lambda _ | ||||
|                  (substitute* "Makefile" | ||||
|                    (("cat ") "$(shell cat ") | ||||
|                    (("/dev/null") "/dev/null)") | ||||
|                    (("SSE_CFLAGS = \"\"") "SSE_CFLAGS =")) | ||||
|                  #t)))))) | ||||
|       (home-page "https://github.com/brummer10/GxSlowGear.lv2") | ||||
|       (synopsis "Slow gear audio effect") | ||||
|       (description "This package provides the LV2 plugin \"GxSlowGear\", a | ||||
| slow gear audio effect to produce volume swells.")))) | ||||
| 
 | ||||
| (define-public gx-switchless-wah-lv2 | ||||
|   (let ((commit "1d466240c482b7ce9136aee39044068ab96f1c92") | ||||
|         (revision "1")) | ||||
|   (let ((commit "7b08691203314612999f0ce2328cdc1161cd6665") | ||||
|         (revision "2")) | ||||
|     (package (inherit gx-guvnor-lv2) | ||||
|       (name "gx-switchless-wah-lv2") | ||||
|       (version (string-append "0-" revision "." (string-take commit 9))) | ||||
|  | @ -2379,19 +2381,8 @@ slow gear audio effect to produce volume swells.")))) | |||
|                       (commit commit))) | ||||
|                 (sha256 | ||||
|                  (base32 | ||||
|                   "0g6njgsm8s76n6yys09a8w77z93pjjgqq9hzhhsrl73hhvyr9qmy")) | ||||
|                   "04jqfpncmrrqn34p21w4v9m2x5a5wsqwbm4f3byxvq4vcibwxzk2")) | ||||
|                 (file-name (string-append name "-" version "-checkout")))) | ||||
|       (arguments | ||||
|        (substitute-keyword-arguments (package-arguments gx-guvnor-lv2) | ||||
|          ((#:phases phases) | ||||
|           `(modify-phases ,phases | ||||
|              (add-after 'unpack 'escape-shell-commands | ||||
|                (lambda _ | ||||
|                  (substitute* "Makefile" | ||||
|                    (("cat ") "$(shell cat ") | ||||
|                    (("/dev/null") "/dev/null)") | ||||
|                    (("SSE_CFLAGS = \"\"") "SSE_CFLAGS =")) | ||||
|                  #t)))))) | ||||
|       (home-page "https://github.com/brummer10/GxSwitchlessWah.lv2") | ||||
|       (synopsis "Wah emulation with switchless activation") | ||||
|       (description "This package provides the LV2 plugin \"GxSwitchlessWah\", | ||||
|  |  | |||
|  | @ -454,7 +454,7 @@ and up to 1 Mbit/s downstream.") | |||
|     (inputs | ||||
|      `(("libidn" ,libidn))) | ||||
|     (native-inputs | ||||
|      `(("gettext" ,gnu-gettext) | ||||
|      `(("gettext" ,gettext-minimal) | ||||
|        ("perl" ,perl))) | ||||
|     (synopsis "Improved whois client") | ||||
|     (description "This whois client is intelligent and can | ||||
|  | @ -467,7 +467,7 @@ which can be used to encrypt a password with @code{crypt(3)}.") | |||
| (define-public wireshark | ||||
|   (package | ||||
|     (name "wireshark") | ||||
|     (version "2.2.1") | ||||
|     (version "2.2.2") | ||||
|     (synopsis "Network traffic analyzer") | ||||
|     (source | ||||
|      (origin | ||||
|  | @ -476,7 +476,7 @@ which can be used to encrypt a password with @code{crypt(3)}.") | |||
|                            version ".tar.bz2")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "0jciaqz119vmznd8mi4gq5dgwz7vn453cnm2086mxcy80jpj43lh")))) | ||||
|          "1csm035ayfzn1xzzsmzcjk2ixx39d70aykr4nh0a88chk9gfzb7r")))) | ||||
|     (build-system glib-or-gtk-build-system) | ||||
|     (inputs `(("bison" ,bison) | ||||
|               ("c-ares" ,c-ares) | ||||
|  |  | |||
|  | @ -166,7 +166,7 @@ | |||
|                      ;; guix' always contains them. | ||||
|                      ("autoconf" ,(autoconf-wrapper)) | ||||
|                      ("automake" ,automake) | ||||
|                      ("gettext" ,gnu-gettext) | ||||
|                      ("gettext" ,gettext-minimal) | ||||
|                      ("texinfo" ,texinfo) | ||||
|                      ("graphviz" ,graphviz) | ||||
|                      ("help2man" ,help2man))) | ||||
|  | @ -222,9 +222,9 @@ the Nix package manager.") | |||
|   ;; | ||||
|   ;; Note: use a very short commit id; with a longer one, the limit on | ||||
|   ;; hash-bang lines would be exceeded while running the tests. | ||||
|   (let ((commit "7ca37da855fd921fa3925bb62f8015f770b7e784")) | ||||
|   (let ((commit "1f410017ff91458feda8c5788223d17696b71e36")) | ||||
|     (package (inherit guix-0.11.0) | ||||
|       (version (string-append "0.11.0-3." (string-take commit 4))) | ||||
|       (version (string-append "0.11.0-4." (string-take commit 4))) | ||||
|       (source (origin | ||||
|                 (method git-fetch) | ||||
|                 (uri (git-reference | ||||
|  | @ -234,7 +234,7 @@ the Nix package manager.") | |||
|                       (commit commit))) | ||||
|                 (sha256 | ||||
|                  (base32 | ||||
|                   "0bw5y9rgy2jq81lrd0g5c3gqpmlrjlgv0ynn7kz8v08lxkidaw8s")) | ||||
|                   "1mgzcbf1mry39wvvjflj76zggsshsip2pngxpaf2479yr3ri6v50")) | ||||
|                 (file-name (string-append "guix-" version "-checkout")))) | ||||
|       (arguments | ||||
|        (substitute-keyword-arguments (package-arguments guix-0.11.0) | ||||
|  |  | |||
							
								
								
									
										102
									
								
								gnu/packages/patches/gd-fix-chunk-size-on-boundaries.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								gnu/packages/patches/gd-fix-chunk-size-on-boundaries.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,102 @@ | |||
| This fixes PHP bug #73155: https://bugs.php.net/bug.php?id=73155 | ||||
| 
 | ||||
| Patch adapted from upstream source repository: | ||||
| 
 | ||||
| https://github.com/libgd/libgd/commit/8067a8ac336dfe0acbe96ec2eb24572209a7f279 | ||||
| 
 | ||||
| (.gitignore change removed) | ||||
| 
 | ||||
| From 8067a8ac336dfe0acbe96ec2eb24572209a7f279 Mon Sep 17 00:00:00 2001 | ||||
| From: "Christoph M. Becker" <cmbecker69@gmx.de> | ||||
| Date: Fri, 23 Sep 2016 18:29:52 +0200 | ||||
| Subject: [PATCH] Fix #309: gdImageGd2() writes wrong chunk sizes on boundaries | ||||
| 
 | ||||
| (cherry picked from commit bb1998a16e30d542ab22eba5501911a9aa066edb) | ||||
| ---
 | ||||
|  src/gd_gd2.c             |  4 ++-- | ||||
|  tests/gd2/CMakeLists.txt |  1 + | ||||
|  tests/gd2/Makemodule.am  |  1 + | ||||
|  tests/gd2/bug00309.c     | 37 +++++++++++++++++++++++++++++++++++++ | ||||
|  4 files changed, 41 insertions(+), 2 deletions(-) | ||||
|  create mode 100644 tests/gd2/bug00309.c | ||||
| 
 | ||||
| diff --git a/src/gd_gd2.c b/src/gd_gd2.c
 | ||||
| index 75e5e1f..b9b2f93 100644
 | ||||
| --- a/src/gd_gd2.c
 | ||||
| +++ b/src/gd_gd2.c
 | ||||
| @@ -938,8 +938,8 @@ _gdImageGd2 (gdImagePtr im, gdIOCtx * out, int cs, int fmt)
 | ||||
|  	}; | ||||
|   | ||||
|  	/* Work out number of chunks. */ | ||||
| -	ncx = im->sx / cs + 1;
 | ||||
| -	ncy = im->sy / cs + 1;
 | ||||
| +	ncx = (im->sx + cs - 1) / cs;
 | ||||
| +	ncy = (im->sy + cs - 1) / cs;
 | ||||
|   | ||||
|  	/* Write the standard header. */ | ||||
|  	_gd2PutHeader (im, out, cs, fmt, ncx, ncy); | ||||
| diff --git a/tests/gd2/CMakeLists.txt b/tests/gd2/CMakeLists.txt
 | ||||
| index 3b650ad..247b466 100644
 | ||||
| --- a/tests/gd2/CMakeLists.txt
 | ||||
| +++ b/tests/gd2/CMakeLists.txt
 | ||||
| @@ -1,5 +1,6 @@
 | ||||
|  SET(TESTS_FILES | ||||
|  	bug_289 | ||||
| +	bug00309
 | ||||
|  	gd2_empty_file | ||||
|  	gd2_im2im | ||||
|  	gd2_null | ||||
| diff --git a/tests/gd2/Makemodule.am b/tests/gd2/Makemodule.am
 | ||||
| index b8ee946..d69aee0 100644
 | ||||
| --- a/tests/gd2/Makemodule.am
 | ||||
| +++ b/tests/gd2/Makemodule.am
 | ||||
| @@ -1,5 +1,6 @@
 | ||||
|  libgd_test_programs += \ | ||||
|  	gd2/bug_289 \ | ||||
| +	gd2/bug00309 \
 | ||||
|  	gd2/gd2_empty_file \ | ||||
|  	gd2/php_bug_72339 \ | ||||
|  	gd2/gd2_read_corrupt | ||||
| diff --git a/tests/gd2/bug00309.c b/tests/gd2/bug00309.c
 | ||||
| new file mode 100644 | ||||
| index 0000000..b649cdc
 | ||||
| --- /dev/null
 | ||||
| +++ b/tests/gd2/bug00309.c
 | ||||
| @@ -0,0 +1,37 @@
 | ||||
| +/**
 | ||||
| + * Regression test for <https://github.com/libgd/libgd/issues/309>.
 | ||||
| + *
 | ||||
| + * We test that an image with 64x64 pixels reports only a single chunk in the
 | ||||
| + * GD2 image header when the chunk size is 64.
 | ||||
| + */
 | ||||
| +
 | ||||
| +
 | ||||
| +#include "gd.h"
 | ||||
| +#include "gdtest.h"
 | ||||
| +
 | ||||
| +
 | ||||
| +int main()
 | ||||
| +{
 | ||||
| +    gdImagePtr im;
 | ||||
| +    unsigned char *buf;
 | ||||
| +    int size, word;
 | ||||
| +
 | ||||
| +    im = gdImageCreate(64, 64);
 | ||||
| +    gdImageColorAllocate(im, 0, 0, 0);
 | ||||
| +
 | ||||
| +    buf = gdImageGd2Ptr(im, 64, 1, &size);
 | ||||
| +
 | ||||
| +    gdImageDestroy(im);
 | ||||
| +
 | ||||
| +    word = buf[10] << 8 | buf[11];
 | ||||
| +    gdTestAssertMsg(word == 64, "chunk size is %d, but expected 64\n", word);
 | ||||
| +    word = buf[14] << 8 | buf[15];
 | ||||
| +    gdTestAssertMsg(word == 1, "x chunk count is %d, but expected 1\n", word);
 | ||||
| +    word = buf[16] << 8 | buf[17];
 | ||||
| +    gdTestAssertMsg(word == 1, "y chunk count is %d, but expected 1\n", word);
 | ||||
| +    gdTestAssertMsg(size == 5145, "file size is %d, but expected 5145\n", size);
 | ||||
| +
 | ||||
| +    gdFree(buf);
 | ||||
| +
 | ||||
| +    return gdNumFailures();
 | ||||
| +}
 | ||||
|  | @ -0,0 +1,95 @@ | |||
| This fixes PHP bug #73159: https://bugs.php.net/bug.php?id=73159 | ||||
| 
 | ||||
| Patch lifted from upstream source repository: | ||||
| 
 | ||||
| https://github.com/libgd/libgd/commit/e1f61a4141d2e0937a13b8bfb1992b9f29eb05f5 | ||||
| 
 | ||||
| From e1f61a4141d2e0937a13b8bfb1992b9f29eb05f5 Mon Sep 17 00:00:00 2001 | ||||
| From: "Christoph M. Becker" <cmbecker69@gmx.de> | ||||
| Date: Mon, 15 Aug 2016 17:49:40 +0200 | ||||
| Subject: [PATCH] Fix #289: Passing unrecognized formats to gdImageGd2 results | ||||
|  in corrupted files | ||||
| 
 | ||||
| We must not apply the format correction twice for truecolor images. | ||||
| 
 | ||||
| (cherry picked from commit 09090c125658e23a4ae2a2e002646bb7278bd89e) | ||||
| ---
 | ||||
|  src/gd_gd2.c             |  2 +- | ||||
|  tests/gd2/CMakeLists.txt |  1 + | ||||
|  tests/gd2/Makemodule.am  |  1 + | ||||
|  tests/gd2/bug_289.c      | 33 +++++++++++++++++++++++++++++++++ | ||||
|  4 files changed, 36 insertions(+), 1 deletion(-) | ||||
|  create mode 100644 tests/gd2/bug_289.c | ||||
| 
 | ||||
| diff --git a/src/gd_gd2.c b/src/gd_gd2.c
 | ||||
| index 86c881e..75e5e1f 100644
 | ||||
| --- a/src/gd_gd2.c
 | ||||
| +++ b/src/gd_gd2.c
 | ||||
| @@ -918,7 +918,7 @@ _gdImageGd2 (gdImagePtr im, gdIOCtx * out, int cs, int fmt)
 | ||||
|  	/* Force fmt to a valid value since we don't return anything. */ | ||||
|  	/* */ | ||||
|  	if ((fmt != GD2_FMT_RAW) && (fmt != GD2_FMT_COMPRESSED)) { | ||||
| -		fmt = im->trueColor ? GD2_FMT_TRUECOLOR_COMPRESSED : GD2_FMT_COMPRESSED;
 | ||||
| +		fmt = GD2_FMT_COMPRESSED;
 | ||||
|  	}; | ||||
|  	if (im->trueColor) { | ||||
|  		fmt += 2; | ||||
| diff --git a/tests/gd2/CMakeLists.txt b/tests/gd2/CMakeLists.txt
 | ||||
| index 8aecacc..3b650ad 100644
 | ||||
| --- a/tests/gd2/CMakeLists.txt
 | ||||
| +++ b/tests/gd2/CMakeLists.txt
 | ||||
| @@ -1,4 +1,5 @@
 | ||||
|  SET(TESTS_FILES | ||||
| +	bug_289
 | ||||
|  	gd2_empty_file | ||||
|  	gd2_im2im | ||||
|  	gd2_null | ||||
| diff --git a/tests/gd2/Makemodule.am b/tests/gd2/Makemodule.am
 | ||||
| index 754a284..b8ee946 100644
 | ||||
| --- a/tests/gd2/Makemodule.am
 | ||||
| +++ b/tests/gd2/Makemodule.am
 | ||||
| @@ -1,4 +1,5 @@
 | ||||
|  libgd_test_programs += \ | ||||
| +	gd2/bug_289 \
 | ||||
|  	gd2/gd2_empty_file \ | ||||
|  	gd2/php_bug_72339 \ | ||||
|  	gd2/gd2_read_corrupt | ||||
| diff --git a/tests/gd2/bug_289.c b/tests/gd2/bug_289.c
 | ||||
| new file mode 100644 | ||||
| index 0000000..ad311e9
 | ||||
| --- /dev/null
 | ||||
| +++ b/tests/gd2/bug_289.c
 | ||||
| @@ -0,0 +1,33 @@
 | ||||
| +/**
 | ||||
| + * Passing an unrecognized format to gdImageGd2() should result in
 | ||||
| + * GD2_FMT_TRUECOLOR_COMPRESSED for truecolor images.
 | ||||
| + *
 | ||||
| + * See <https://github.com/libgd/libgd/issues/289>.
 | ||||
| + */
 | ||||
| +
 | ||||
| +#include "gd.h"
 | ||||
| +#include "gdtest.h"
 | ||||
| +
 | ||||
| +
 | ||||
| +#define GD2_FMT_UNRECOGNIZED 0
 | ||||
| +#define GD2_FMT_TRUECOLOR_COMPRESSED 4
 | ||||
| +
 | ||||
| +#define MSG "expected %s byte to be %d, but got %d\n"
 | ||||
| +
 | ||||
| +
 | ||||
| +int main()
 | ||||
| +{
 | ||||
| +    gdImagePtr im;
 | ||||
| +    char *buffer;
 | ||||
| +    int size;
 | ||||
| +
 | ||||
| +    im = gdImageCreateTrueColor(10, 10);
 | ||||
| +    gdTestAssert(im != NULL);
 | ||||
| +    buffer = (char *) gdImageGd2Ptr(im, 128, GD2_FMT_UNRECOGNIZED, &size);
 | ||||
| +    gdTestAssert(buffer != NULL);
 | ||||
| +    gdImageDestroy(im);
 | ||||
| +    gdTestAssertMsg(buffer[12] == 0, MSG, "1st", 0, buffer[12]);
 | ||||
| +    gdTestAssertMsg(buffer[13] == GD2_FMT_TRUECOLOR_COMPRESSED, MSG, "2nd", GD2_FMT_TRUECOLOR_COMPRESSED, buffer[13]);
 | ||||
| +
 | ||||
| +    return gdNumFailures();
 | ||||
| +}
 | ||||
							
								
								
									
										48
									
								
								gnu/packages/patches/guile-repl-server-test.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								gnu/packages/patches/guile-repl-server-test.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,48 @@ | |||
| commit 8d6209ea56241bb1890c142539927c9ef3fb5a13 | ||||
| Author: Ludovic Courtès <ludo@gnu.org> | ||||
| Date:   Fri Nov 4 22:44:32 2016 +0100 | ||||
| 
 | ||||
|     tests: Throw 'unresolved when the REPL server is too slow. | ||||
| 
 | ||||
| commit 2fbde7f02adb8c6585e9baf6e293ee49cd23d4c4 | ||||
| Author: Ludovic Courtès <ludo@gnu.org> | ||||
| Date:   Fri Nov 4 22:45:51 2016 +0100 | ||||
| 
 | ||||
|     tests: Avoid race condition in REPL server test. | ||||
| 
 | ||||
| index ca389ba..4b5ec0c 100644
 | ||||
| --- a/test-suite/tests/00-repl-server.test
 | ||||
| +++ b/test-suite/tests/00-repl-server.test
 | ||||
| @@ -61,10 +61,11 @@ socket connected to that server."
 | ||||
|                 (lambda () | ||||
|                   (connect client-socket sockaddr)) | ||||
|                 (lambda args | ||||
| -                 (when (and (memv (system-error-errno args)
 | ||||
| -                                  (list ENOENT ECONNREFUSED))
 | ||||
| -                            (< tries 3))
 | ||||
| -                   (sleep 1)
 | ||||
| +                 (when (memv (system-error-errno args)
 | ||||
| +                             (list ENOENT ECONNREFUSED))
 | ||||
| +                   (when (> tries 30)
 | ||||
| +                     (throw 'unresolved))
 | ||||
| +                   (usleep 100)
 | ||||
|                     (loop (+ tries 1)))))) | ||||
|   | ||||
|             (proc client-socket)) | ||||
| @@ -104,8 +105,14 @@ reached."
 | ||||
|        "scheme@(repl-server)> $1 = 42\n" | ||||
|      (with-repl-server socket | ||||
|        (read-until-prompt socket %last-line-before-prompt) | ||||
| -      (display "(+ 40 2)\n(quit)\n" socket)
 | ||||
| -      (read-string socket)))
 | ||||
| +
 | ||||
| +      ;; Wait until 'repl-reader' in boot-9 has written the prompt.
 | ||||
| +      ;; Otherwise, if we write too quickly, 'repl-reader' checks for
 | ||||
| +      ;; 'char-ready?' and doesn't print the prompt.
 | ||||
| +      (match (select (list socket) '() (list socket) 3)
 | ||||
| +        (((_) () ())
 | ||||
| +         (display "(+ 40 2)\n(quit)\n" socket)
 | ||||
| +         (read-string socket)))))
 | ||||
|   | ||||
|    (pass-if "HTTP inter-protocol attack"           ;CVE-2016-8606 | ||||
|      (with-repl-server socket | ||||
							
								
								
									
										24
									
								
								gnu/packages/patches/handbrake-pkg-config-path.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								gnu/packages/patches/handbrake-pkg-config-path.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,24 @@ | |||
| Do not clobber PKG_CONFIG_PATH during configure. | ||||
| 
 | ||||
| --- HandBrake-0.10.5/gtk/module.rules.orig	2016-02-11 14:14:05.000000000 -0600
 | ||||
| +++ HandBrake-0.10.5/gtk/module.rules	2016-10-29 22:27:50.550960848 -0500
 | ||||
| @@ -15,7 +15,7 @@
 | ||||
|  	set -e; cd $(GTK.src/); NOCONFIGURE=1 ./autogen.sh | ||||
|  	set -e; cd $(GTK.build/); $(call fn.ABSOLUTE,$(GTK.src/))configure \ | ||||
|  		$(GTK.CONFIGURE.extra) \ | ||||
| -		PKG_CONFIG_PATH=$(BUILD/)contrib/lib/pkgconfig \
 | ||||
| +		PKG_CONFIG_PATH=$(BUILD/)contrib/lib/pkgconfig$(if $(PKG_CONFIG_PATH),:)$(PKG_CONFIG_PATH) \
 | ||||
|  	    CFLAGS="$(call fn.ARGS,GTK.GCC,.g .O *D ?extra)" \ | ||||
|  	    LDFLAGS="$(call fn.ARGS,GTK.GCC,?strip .g .O ?extra.exe)" \ | ||||
|  	    --prefix=$(PREFIX) \ | ||||
| --- Handbrake-0.10.5-0.77d09e9-checkout/make/include/contrib.defs	1969-12-31 18:00:00.000000000 -0600
 | ||||
| +++ Handbrake-0.10.5-0.77d09e9-checkout/make/include/contrib.defs	2016-11-01 13:11:43.826144311 -0500
 | ||||
| @@ -119,7 +119,7 @@
 | ||||
|      endif | ||||
|      $(1).CONFIGURE.env.CPPFLAGS = CPPFLAGS="-I$$(call fn.ABSOLUTE,$(CONTRIB.build/))include $$(call fn.ARGS,$(1).GCC,*archs *sysroot *minver ?extra *D)" | ||||
|      $(1).CONFIGURE.env.LDFLAGS  = LDFLAGS="-L$$(call fn.ABSOLUTE,$(CONTRIB.build/))lib $$(call fn.ARGS,$(1).GCC,*archs *sysroot *minver ?extra.exe *D)" | ||||
| -    $(1).CONFIGURE.env.PKG_CONFIG_PATH  = PKG_CONFIG_PATH="$$(call fn.ABSOLUTE,$$(CONTRIB.build/))lib/pkgconfig"
 | ||||
| +    $(1).CONFIGURE.env.PKG_CONFIG_PATH  = PKG_CONFIG_PATH="$$(call fn.ABSOLUTE,$$(CONTRIB.build/))lib/pkgconfig$(if $(PKG_CONFIG_PATH),:)$(PKG_CONFIG_PATH)"
 | ||||
|   | ||||
|      $(1).CONFIGURE.env.args = !CC !CFLAGS !CXX !CXXFLAGS !CPPFLAGS !LD !LDFLAGS !PKG_CONFIG_PATH !LOCAL_PATH !CROSS | ||||
|      $(1).CONFIGURE.env = $$(call fn.ARGS,$(1).CONFIGURE.env,$$($(1).CONFIGURE.env.args)) | ||||
							
								
								
									
										996
									
								
								gnu/packages/patches/icecat-CVE-2016-9064.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										996
									
								
								gnu/packages/patches/icecat-CVE-2016-9064.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,996 @@ | |||
| Copied from | ||||
| <https://hg.mozilla.org/releases/mozilla-esr45/raw-rev/00c2b7baaa0b> | ||||
| but with one hunk omitted: the git binary patch for | ||||
| toolkit/mozapps/extensions/test/addons/test_update_multi2/addon.xpi | ||||
| which is not present in the IceCat sources. | ||||
| 
 | ||||
| # HG changeset patch | ||||
| # User Andrew Swan <aswan@mozilla.com> | ||||
| # Date 1474063218 25200 | ||||
| # Node ID 00c2b7baaa0b4bfb7d5f1aac31c094ea6b255e1f | ||||
| # Parent  46b07bdbf8b20cf3fdc28104add57ff58a55832b | ||||
| Bug 1303418 - Don't allow upgrades that change the addon ID. r=mossop, a=lizzard | ||||
| 
 | ||||
| MozReview-Commit-ID: JHINo8ShmeI | ||||
| 
 | ||||
| diff --git a/toolkit/mozapps/extensions/AddonManager.jsm b/toolkit/mozapps/extensions/AddonManager.jsm
 | ||||
| --- a/toolkit/mozapps/extensions/AddonManager.jsm
 | ||||
| +++ b/toolkit/mozapps/extensions/AddonManager.jsm
 | ||||
| @@ -2956,16 +2956,18 @@ this.AddonManager = {
 | ||||
|    // The downloaded file seems to be corrupted in some way. | ||||
|    ERROR_CORRUPT_FILE: -3, | ||||
|    // An error occured trying to write to the filesystem. | ||||
|    ERROR_FILE_ACCESS: -4, | ||||
|    // The add-on must be signed and isn't. | ||||
|    ERROR_SIGNEDSTATE_REQUIRED: -5, | ||||
|    // The downloaded add-on had a different type than expected. | ||||
|    ERROR_UNEXPECTED_ADDON_TYPE: -6, | ||||
| +  // The addon did not have the expected ID
 | ||||
| +  ERROR_INCORRECT_ID: -7,
 | ||||
|   | ||||
|    // These must be kept in sync with AddonUpdateChecker. | ||||
|    // No error was encountered. | ||||
|    UPDATE_STATUS_NO_ERROR: 0, | ||||
|    // The update check timed out | ||||
|    UPDATE_STATUS_TIMEOUT: -1, | ||||
|    // There was an error while downloading the update information. | ||||
|    UPDATE_STATUS_DOWNLOAD_ERROR: -2, | ||||
| diff --git a/toolkit/mozapps/extensions/internal/XPIProvider.jsm b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
 | ||||
| --- a/toolkit/mozapps/extensions/internal/XPIProvider.jsm
 | ||||
| +++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
 | ||||
| @@ -5473,16 +5473,37 @@ AddonInstall.prototype = {
 | ||||
|        // loadManifestFromZipReader performs the certificate verification for us | ||||
|        this.addon = yield loadManifestFromZipReader(zipreader, this.installLocation); | ||||
|      } | ||||
|      catch (e) { | ||||
|        zipreader.close(); | ||||
|        return Promise.reject([AddonManager.ERROR_CORRUPT_FILE, e]); | ||||
|      } | ||||
|   | ||||
| +    if (this.existingAddon) {
 | ||||
| +      // Check various conditions related to upgrades
 | ||||
| +      if (this.addon.id != this.existingAddon.id) {
 | ||||
| +        zipreader.close();
 | ||||
| +        return Promise.reject([AddonManager.ERROR_INCORRECT_ID,
 | ||||
| +                               `Refusing to upgrade addon ${this.existingAddon.id} to different ID ${this.addon.id}`]);
 | ||||
| +      }
 | ||||
| +
 | ||||
| +      if (this.addon.type == "multipackage") {
 | ||||
| +        zipreader.close();
 | ||||
| +        return Promise.reject([AddonManager.ERROR_UNEXPECTED_ADDON_TYPE,
 | ||||
| +                               `Refusing to upgrade addon ${this.existingAddon.id} to a multi-package xpi`]);
 | ||||
| +      }
 | ||||
| +
 | ||||
| +      if (this.existingAddon.type == "webextension" && this.addon.type != "webextension") {
 | ||||
| +        zipreader.close();
 | ||||
| +        return Promise.reject([AddonManager.ERROR_UNEXPECTED_ADDON_TYPE,
 | ||||
| +                               "Webextensions may not be updated to other extension types"]);
 | ||||
| +      }
 | ||||
| +    }
 | ||||
| +
 | ||||
|      if (mustSign(this.addon.type)) { | ||||
|        if (this.addon.signedState <= AddonManager.SIGNEDSTATE_MISSING) { | ||||
|          // This add-on isn't properly signed by a signature that chains to the | ||||
|          // trusted root. | ||||
|          let state = this.addon.signedState; | ||||
|          this.addon = null; | ||||
|          zipreader.close(); | ||||
|   | ||||
| @@ -5510,23 +5531,16 @@ AddonInstall.prototype = {
 | ||||
|          } else { | ||||
|            zipreader.close(); | ||||
|            return Promise.reject([AddonManager.ERROR_CORRUPT_FILE, | ||||
|                                   "XPI is incorrectly signed"]); | ||||
|          } | ||||
|        } | ||||
|      } | ||||
|   | ||||
| -    if (this.existingAddon && this.existingAddon.type == "webextension" &&
 | ||||
| -        this.addon.type != "webextension") {
 | ||||
| -      zipreader.close();
 | ||||
| -      return Promise.reject([AddonManager.ERROR_UNEXPECTED_ADDON_TYPE,
 | ||||
| -                             "WebExtensions may not be upated to other extension types"]);
 | ||||
| -    }
 | ||||
| -
 | ||||
|      if (this.addon.type == "multipackage") | ||||
|        return this._loadMultipackageManifests(zipreader); | ||||
|   | ||||
|      zipreader.close(); | ||||
|   | ||||
|      this.updateAddonURIs(); | ||||
|   | ||||
|      this.addon._install = this; | ||||
| @@ -5791,16 +5805,17 @@ AddonInstall.prototype = {
 | ||||
|            else { | ||||
|              // TODO Should we send some event here (bug 557716)? | ||||
|              this.state = AddonManager.STATE_CHECKING; | ||||
|              new UpdateChecker(this.addon, { | ||||
|                onUpdateFinished: aAddon => this.downloadCompleted(), | ||||
|              }, AddonManager.UPDATE_WHEN_ADDON_INSTALLED); | ||||
|            } | ||||
|          }, ([error, message]) => { | ||||
| +          this.removeTemporaryFile();
 | ||||
|            this.downloadFailed(error, message); | ||||
|          }); | ||||
|        } | ||||
|        else { | ||||
|          if (aRequest instanceof Ci.nsIHttpChannel) | ||||
|            this.downloadFailed(AddonManager.ERROR_NETWORK_FAILURE, | ||||
|                                aRequest.responseStatus + " " + | ||||
|                                aRequest.responseStatusText); | ||||
| diff --git a/toolkit/mozapps/extensions/test/addons/test_update_multi1/bootstrap.js b/toolkit/mozapps/extensions/test/addons/test_update_multi1/bootstrap.js
 | ||||
| new file mode 100644 | ||||
| --- /dev/null
 | ||||
| +++ b/toolkit/mozapps/extensions/test/addons/test_update_multi1/bootstrap.js
 | ||||
| @@ -0,0 +1,5 @@
 | ||||
| +
 | ||||
| +function install(data, reason) {}
 | ||||
| +function startup(data, reason) {}
 | ||||
| +function shutdown(data, reason) {}
 | ||||
| +function uninstall(data, reason) {}
 | ||||
| diff --git a/toolkit/mozapps/extensions/test/addons/test_update_multi1/install.rdf b/toolkit/mozapps/extensions/test/addons/test_update_multi1/install.rdf
 | ||||
| new file mode 100644 | ||||
| --- /dev/null
 | ||||
| +++ b/toolkit/mozapps/extensions/test/addons/test_update_multi1/install.rdf
 | ||||
| @@ -0,0 +1,16 @@
 | ||||
| +<?xml version="1.0"?>
 | ||||
| +<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | ||||
| +     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
 | ||||
| +<Description about="urn:mozilla:install-manifest">
 | ||||
| +  <em:id>updatemulti@tests.mozilla.org</em:id>
 | ||||
| +  <em:version>1.0</em:version>
 | ||||
| +  <em:updateURL>http://localhost:4444/data/test_update_multi.rdf</em:updateURL>
 | ||||
| +  <em:bootstrap>true</em:bootstrap>
 | ||||
| +  <em:name>Test Addon 1</em:name>
 | ||||
| +<em:targetApplication><Description>
 | ||||
| +  <em:id>xpcshell@tests.mozilla.org</em:id>
 | ||||
| +  <em:minVersion>1</em:minVersion>
 | ||||
| +  <em:maxVersion>1</em:maxVersion>
 | ||||
| +</Description></em:targetApplication>
 | ||||
| +</Description>
 | ||||
| +</RDF>
 | ||||
| diff --git a/toolkit/mozapps/extensions/test/addons/test_update_multi2/install.rdf b/toolkit/mozapps/extensions/test/addons/test_update_multi2/install.rdf
 | ||||
| new file mode 100644 | ||||
| --- /dev/null
 | ||||
| +++ b/toolkit/mozapps/extensions/test/addons/test_update_multi2/install.rdf
 | ||||
| @@ -0,0 +1,9 @@
 | ||||
| +<?xml version="1.0"?>
 | ||||
| +<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | ||||
| +     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
 | ||||
| +<Description about="urn:mozilla:install-manifest">
 | ||||
| +  <em:id>updatemulti@tests.mozilla.org</em:id>
 | ||||
| +  <em:type>32</em:type>
 | ||||
| +  <em:version>2.0</em:version>
 | ||||
| +</Description>
 | ||||
| +</RDF>
 | ||||
| diff --git a/toolkit/mozapps/extensions/test/addons/test_updateid1/bootstrap.js b/toolkit/mozapps/extensions/test/addons/test_updateid1/bootstrap.js
 | ||||
| new file mode 100644 | ||||
| --- /dev/null
 | ||||
| +++ b/toolkit/mozapps/extensions/test/addons/test_updateid1/bootstrap.js
 | ||||
| @@ -0,0 +1,5 @@
 | ||||
| +
 | ||||
| +function install(data, reason) {}
 | ||||
| +function startup(data, reason) {}
 | ||||
| +function shutdown(data, reason) {}
 | ||||
| +function uninstall(data, reason) {}
 | ||||
| diff --git a/toolkit/mozapps/extensions/test/addons/test_updateid1/install.rdf b/toolkit/mozapps/extensions/test/addons/test_updateid1/install.rdf
 | ||||
| new file mode 100644 | ||||
| --- /dev/null
 | ||||
| +++ b/toolkit/mozapps/extensions/test/addons/test_updateid1/install.rdf
 | ||||
| @@ -0,0 +1,16 @@
 | ||||
| +<?xml version="1.0"?>
 | ||||
| +<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | ||||
| +     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
 | ||||
| +<Description about="urn:mozilla:install-manifest">
 | ||||
| +  <em:id>addon1@tests.mozilla.org</em:id>
 | ||||
| +  <em:version>1.0</em:version>
 | ||||
| +  <em:updateURL>http://localhost:4444/data/test_updateid.rdf</em:updateURL>
 | ||||
| +  <em:bootstrap>true</em:bootstrap>
 | ||||
| +  <em:name>Test Addon 1</em:name>
 | ||||
| +<em:targetApplication><Description>
 | ||||
| +  <em:id>xpcshell@tests.mozilla.org</em:id>
 | ||||
| +  <em:minVersion>1</em:minVersion>
 | ||||
| +  <em:maxVersion>1</em:maxVersion>
 | ||||
| +</Description></em:targetApplication>
 | ||||
| +</Description>
 | ||||
| +</RDF>
 | ||||
| diff --git a/toolkit/mozapps/extensions/test/addons/test_updateid2/bootstrap.js b/toolkit/mozapps/extensions/test/addons/test_updateid2/bootstrap.js
 | ||||
| new file mode 100644 | ||||
| --- /dev/null
 | ||||
| +++ b/toolkit/mozapps/extensions/test/addons/test_updateid2/bootstrap.js
 | ||||
| @@ -0,0 +1,5 @@
 | ||||
| +
 | ||||
| +function install(data, reason) {}
 | ||||
| +function startup(data, reason) {}
 | ||||
| +function shutdown(data, reason) {}
 | ||||
| +function uninstall(data, reason) {}
 | ||||
| diff --git a/toolkit/mozapps/extensions/test/addons/test_updateid2/install.rdf b/toolkit/mozapps/extensions/test/addons/test_updateid2/install.rdf
 | ||||
| new file mode 100644 | ||||
| --- /dev/null
 | ||||
| +++ b/toolkit/mozapps/extensions/test/addons/test_updateid2/install.rdf
 | ||||
| @@ -0,0 +1,16 @@
 | ||||
| +<?xml version="1.0"?>
 | ||||
| +<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | ||||
| +     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
 | ||||
| +<Description about="urn:mozilla:install-manifest">
 | ||||
| +  <em:id>addon1.changed@tests.mozilla.org</em:id>
 | ||||
| +  <em:version>2.0</em:version>
 | ||||
| +  <em:updateURL>http://localhost:4444/data/test_updateid.rdf</em:updateURL>
 | ||||
| +  <em:bootstrap>true</em:bootstrap>
 | ||||
| +  <em:name>Test Addon 1</em:name>
 | ||||
| +<em:targetApplication><Description>
 | ||||
| +  <em:id>xpcshell@tests.mozilla.org</em:id>
 | ||||
| +  <em:minVersion>1</em:minVersion>
 | ||||
| +  <em:maxVersion>1</em:maxVersion>
 | ||||
| +</Description></em:targetApplication>
 | ||||
| +</Description>
 | ||||
| +</RDF>
 | ||||
| diff --git a/toolkit/mozapps/extensions/test/addons/test_updateid2_2/install.rdf b/toolkit/mozapps/extensions/test/addons/test_updateid2_2/install.rdf
 | ||||
| deleted file mode 100644 | ||||
| --- a/toolkit/mozapps/extensions/test/addons/test_updateid2_2/install.rdf
 | ||||
| +++ /dev/null
 | ||||
| @@ -1,24 +0,0 @@
 | ||||
| -<?xml version="1.0"?>
 | ||||
| -
 | ||||
| -<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | ||||
| -     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
 | ||||
| -
 | ||||
| -  <Description about="urn:mozilla:install-manifest">
 | ||||
| -    <em:id>addon2@tests.mozilla.org</em:id>
 | ||||
| -    <em:version>2.0</em:version>
 | ||||
| -    <em:updateURL>http://localhost:4444/data/test_updateid.rdf</em:updateURL>
 | ||||
| -
 | ||||
| -    <!-- Front End MetaData -->
 | ||||
| -    <em:name>Test 2</em:name>
 | ||||
| -    <em:description>Test Description</em:description>
 | ||||
| -
 | ||||
| -    <em:targetApplication>
 | ||||
| -      <Description>
 | ||||
| -        <em:id>xpcshell@tests.mozilla.org</em:id>
 | ||||
| -        <em:minVersion>1</em:minVersion>
 | ||||
| -        <em:maxVersion>1</em:maxVersion>
 | ||||
| -      </Description>
 | ||||
| -    </em:targetApplication>
 | ||||
| -
 | ||||
| -  </Description>
 | ||||
| -</RDF>
 | ||||
| diff --git a/toolkit/mozapps/extensions/test/addons/test_updateid2_5/install.rdf b/toolkit/mozapps/extensions/test/addons/test_updateid2_5/install.rdf
 | ||||
| deleted file mode 100644 | ||||
| --- a/toolkit/mozapps/extensions/test/addons/test_updateid2_5/install.rdf
 | ||||
| +++ /dev/null
 | ||||
| @@ -1,24 +0,0 @@
 | ||||
| -<?xml version="1.0"?>
 | ||||
| -
 | ||||
| -<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | ||||
| -     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
 | ||||
| -
 | ||||
| -  <Description about="urn:mozilla:install-manifest">
 | ||||
| -    <em:id>addon2@tests.mozilla.org</em:id>
 | ||||
| -    <em:version>5.0</em:version>
 | ||||
| -    <em:updateURL>http://localhost:4444/data/test_updateid.rdf</em:updateURL>
 | ||||
| -
 | ||||
| -    <!-- Front End MetaData -->
 | ||||
| -    <em:name>Test 2</em:name>
 | ||||
| -    <em:description>Test Description</em:description>
 | ||||
| -
 | ||||
| -    <em:targetApplication>
 | ||||
| -      <Description>
 | ||||
| -        <em:id>xpcshell@tests.mozilla.org</em:id>
 | ||||
| -        <em:minVersion>1</em:minVersion>
 | ||||
| -        <em:maxVersion>1</em:maxVersion>
 | ||||
| -      </Description>
 | ||||
| -    </em:targetApplication>
 | ||||
| -
 | ||||
| -  </Description>
 | ||||
| -</RDF>
 | ||||
| diff --git a/toolkit/mozapps/extensions/test/addons/test_updateid3_3/bootstrap.js b/toolkit/mozapps/extensions/test/addons/test_updateid3_3/bootstrap.js
 | ||||
| deleted file mode 100644 | ||||
| --- a/toolkit/mozapps/extensions/test/addons/test_updateid3_3/bootstrap.js
 | ||||
| +++ /dev/null
 | ||||
| @@ -1,21 +0,0 @@
 | ||||
| -Components.utils.import("resource://gre/modules/Services.jsm");
 | ||||
| -
 | ||||
| -function install(data, reason) {
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.installed_version", 3);
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.install_reason", reason);
 | ||||
| -}
 | ||||
| -
 | ||||
| -function startup(data, reason) {
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.active_version", 3);
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.startup_reason", reason);
 | ||||
| -}
 | ||||
| -
 | ||||
| -function shutdown(data, reason) {
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.active_version", 0);
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.shutdown_reason", reason);
 | ||||
| -}
 | ||||
| -
 | ||||
| -function uninstall(data, reason) {
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.installed_version", 0);
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.uninstall_reason", reason);
 | ||||
| -}
 | ||||
| diff --git a/toolkit/mozapps/extensions/test/addons/test_updateid3_3/install.rdf b/toolkit/mozapps/extensions/test/addons/test_updateid3_3/install.rdf
 | ||||
| deleted file mode 100644 | ||||
| --- a/toolkit/mozapps/extensions/test/addons/test_updateid3_3/install.rdf
 | ||||
| +++ /dev/null
 | ||||
| @@ -1,25 +0,0 @@
 | ||||
| -<?xml version="1.0"?>
 | ||||
| -
 | ||||
| -<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | ||||
| -     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
 | ||||
| -
 | ||||
| -  <Description about="urn:mozilla:install-manifest">
 | ||||
| -    <em:id>addon3@tests.mozilla.org</em:id>
 | ||||
| -    <em:version>3.0</em:version>
 | ||||
| -    <em:updateURL>http://localhost:4444/data/test_updateid.rdf</em:updateURL>
 | ||||
| -    <em:bootstrap>true</em:bootstrap>
 | ||||
| -
 | ||||
| -    <!-- Front End MetaData -->
 | ||||
| -    <em:name>Test 3</em:name>
 | ||||
| -    <em:description>Test Description</em:description>
 | ||||
| -
 | ||||
| -    <em:targetApplication>
 | ||||
| -      <Description>
 | ||||
| -        <em:id>xpcshell@tests.mozilla.org</em:id>
 | ||||
| -        <em:minVersion>1</em:minVersion>
 | ||||
| -        <em:maxVersion>1</em:maxVersion>
 | ||||
| -      </Description>
 | ||||
| -    </em:targetApplication>
 | ||||
| -
 | ||||
| -  </Description>
 | ||||
| -</RDF>
 | ||||
| diff --git a/toolkit/mozapps/extensions/test/addons/test_updateid4_4/bootstrap.js b/toolkit/mozapps/extensions/test/addons/test_updateid4_4/bootstrap.js
 | ||||
| deleted file mode 100644 | ||||
| --- a/toolkit/mozapps/extensions/test/addons/test_updateid4_4/bootstrap.js
 | ||||
| +++ /dev/null
 | ||||
| @@ -1,21 +0,0 @@
 | ||||
| -Components.utils.import("resource://gre/modules/Services.jsm");
 | ||||
| -
 | ||||
| -function install(data, reason) {
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.installed_version", 4);
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.install_reason", reason);
 | ||||
| -}
 | ||||
| -
 | ||||
| -function startup(data, reason) {
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.active_version", 4);
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.startup_reason", reason);
 | ||||
| -}
 | ||||
| -
 | ||||
| -function shutdown(data, reason) {
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.active_version", 0);
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.shutdown_reason", reason);
 | ||||
| -}
 | ||||
| -
 | ||||
| -function uninstall(data, reason) {
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.installed_version", 0);
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.uninstall_reason", reason);
 | ||||
| -}
 | ||||
| diff --git a/toolkit/mozapps/extensions/test/addons/test_updateid4_4/install.rdf b/toolkit/mozapps/extensions/test/addons/test_updateid4_4/install.rdf
 | ||||
| deleted file mode 100644 | ||||
| --- a/toolkit/mozapps/extensions/test/addons/test_updateid4_4/install.rdf
 | ||||
| +++ /dev/null
 | ||||
| @@ -1,25 +0,0 @@
 | ||||
| -<?xml version="1.0"?>
 | ||||
| -
 | ||||
| -<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | ||||
| -     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
 | ||||
| -
 | ||||
| -  <Description about="urn:mozilla:install-manifest">
 | ||||
| -    <em:id>addon4@tests.mozilla.org</em:id>
 | ||||
| -    <em:version>4.0</em:version>
 | ||||
| -    <em:updateURL>http://localhost:4444/data/test_updateid.rdf</em:updateURL>
 | ||||
| -    <em:bootstrap>true</em:bootstrap>
 | ||||
| -
 | ||||
| -    <!-- Front End MetaData -->
 | ||||
| -    <em:name>Test 4</em:name>
 | ||||
| -    <em:description>Test Description</em:description>
 | ||||
| -
 | ||||
| -    <em:targetApplication>
 | ||||
| -      <Description>
 | ||||
| -        <em:id>xpcshell@tests.mozilla.org</em:id>
 | ||||
| -        <em:minVersion>1</em:minVersion>
 | ||||
| -        <em:maxVersion>1</em:maxVersion>
 | ||||
| -      </Description>
 | ||||
| -    </em:targetApplication>
 | ||||
| -
 | ||||
| -  </Description>
 | ||||
| -</RDF>
 | ||||
| diff --git a/toolkit/mozapps/extensions/test/xpcshell/data/test_update_multi.rdf b/toolkit/mozapps/extensions/test/xpcshell/data/test_update_multi.rdf
 | ||||
| new file mode 100644 | ||||
| --- /dev/null
 | ||||
| +++ b/toolkit/mozapps/extensions/test/xpcshell/data/test_update_multi.rdf
 | ||||
| @@ -0,0 +1,26 @@
 | ||||
| +<?xml version="1.0" encoding="UTF-8"?>
 | ||||
| +
 | ||||
| +<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | ||||
| +     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
 | ||||
| +
 | ||||
| +  <Description about="urn:mozilla:extension:updatemulti@tests.mozilla.org">
 | ||||
| +    <em:updates>
 | ||||
| +      <Seq>
 | ||||
| +        <li>
 | ||||
| +          <Description>
 | ||||
| +            <em:version>2.0</em:version>
 | ||||
| +            <em:targetApplication>
 | ||||
| +              <Description>
 | ||||
| +                <em:id>xpcshell@tests.mozilla.org</em:id>
 | ||||
| +                <em:minVersion>1</em:minVersion>
 | ||||
| +                <em:maxVersion>1</em:maxVersion>
 | ||||
| +                <em:updateLink>http://localhost:4444/addons/test_update_multi2.xpi</em:updateLink>
 | ||||
| +              </Description>
 | ||||
| +            </em:targetApplication>
 | ||||
| +          </Description>
 | ||||
| +        </li>
 | ||||
| +      </Seq>
 | ||||
| +    </em:updates>
 | ||||
| +  </Description>
 | ||||
| +
 | ||||
| +</RDF>
 | ||||
| diff --git a/toolkit/mozapps/extensions/test/xpcshell/data/test_updateid.rdf b/toolkit/mozapps/extensions/test/xpcshell/data/test_updateid.rdf
 | ||||
| --- a/toolkit/mozapps/extensions/test/xpcshell/data/test_updateid.rdf
 | ||||
| +++ b/toolkit/mozapps/extensions/test/xpcshell/data/test_updateid.rdf
 | ||||
| @@ -9,77 +9,17 @@
 | ||||
|          <li> | ||||
|            <Description> | ||||
|              <em:version>2.0</em:version> | ||||
|              <em:targetApplication> | ||||
|                <Description> | ||||
|                  <em:id>xpcshell@tests.mozilla.org</em:id> | ||||
|                  <em:minVersion>1</em:minVersion> | ||||
|                  <em:maxVersion>1</em:maxVersion> | ||||
| -                <em:updateLink>http://localhost:4444/addons/test_updateid2_2.xpi</em:updateLink>
 | ||||
| -              </Description>
 | ||||
| -            </em:targetApplication>
 | ||||
| -          </Description>
 | ||||
| -        </li>
 | ||||
| -      </Seq>
 | ||||
| -    </em:updates>
 | ||||
| -  </Description>
 | ||||
| -
 | ||||
| -  <Description about="urn:mozilla:extension:addon2@tests.mozilla.org">
 | ||||
| -    <em:updates>
 | ||||
| -      <Seq>
 | ||||
| -        <li>
 | ||||
| -          <Description>
 | ||||
| -            <em:version>3.0</em:version>
 | ||||
| -            <em:targetApplication>
 | ||||
| -              <Description>
 | ||||
| -                <em:id>xpcshell@tests.mozilla.org</em:id>
 | ||||
| -                <em:minVersion>1</em:minVersion>
 | ||||
| -                <em:maxVersion>1</em:maxVersion>
 | ||||
| -                <em:updateLink>http://localhost:4444/addons/test_updateid3_3.xpi</em:updateLink>
 | ||||
| -              </Description>
 | ||||
| -            </em:targetApplication>
 | ||||
| -          </Description>
 | ||||
| -        </li>
 | ||||
| -      </Seq>
 | ||||
| -    </em:updates>
 | ||||
| -  </Description>
 | ||||
| -
 | ||||
| -  <Description about="urn:mozilla:extension:addon3@tests.mozilla.org">
 | ||||
| -    <em:updates>
 | ||||
| -      <Seq>
 | ||||
| -        <li>
 | ||||
| -          <Description>
 | ||||
| -            <em:version>4.0</em:version>
 | ||||
| -            <em:targetApplication>
 | ||||
| -              <Description>
 | ||||
| -                <em:id>xpcshell@tests.mozilla.org</em:id>
 | ||||
| -                <em:minVersion>1</em:minVersion>
 | ||||
| -                <em:maxVersion>1</em:maxVersion>
 | ||||
| -                <em:updateLink>http://localhost:4444/addons/test_updateid4_4.xpi</em:updateLink>
 | ||||
| -              </Description>
 | ||||
| -            </em:targetApplication>
 | ||||
| -          </Description>
 | ||||
| -        </li>
 | ||||
| -      </Seq>
 | ||||
| -    </em:updates>
 | ||||
| -  </Description>
 | ||||
| -
 | ||||
| -  <Description about="urn:mozilla:extension:addon4@tests.mozilla.org">
 | ||||
| -    <em:updates>
 | ||||
| -      <Seq>
 | ||||
| -        <li>
 | ||||
| -          <Description>
 | ||||
| -            <em:version>5.0</em:version>
 | ||||
| -            <em:targetApplication>
 | ||||
| -              <Description>
 | ||||
| -                <em:id>xpcshell@tests.mozilla.org</em:id>
 | ||||
| -                <em:minVersion>1</em:minVersion>
 | ||||
| -                <em:maxVersion>1</em:maxVersion>
 | ||||
| -                <em:updateLink>http://localhost:4444/addons/test_updateid2_5.xpi</em:updateLink>
 | ||||
| +                <em:updateLink>http://localhost:4444/addons/test_updateid2.xpi</em:updateLink>
 | ||||
|                </Description> | ||||
|              </em:targetApplication> | ||||
|            </Description> | ||||
|          </li> | ||||
|        </Seq> | ||||
|      </em:updates> | ||||
|    </Description> | ||||
|   | ||||
| diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_updateid.js b/toolkit/mozapps/extensions/test/xpcshell/test_updateid.js
 | ||||
| --- a/toolkit/mozapps/extensions/test/xpcshell/test_updateid.js
 | ||||
| +++ b/toolkit/mozapps/extensions/test/xpcshell/test_updateid.js
 | ||||
| @@ -2,421 +2,85 @@
 | ||||
|   * http://creativecommons.org/publicdomain/zero/1.0/ | ||||
|   */ | ||||
|   | ||||
|  // This verifies that updating an add-on to a new ID works | ||||
|   | ||||
|  // The test extension uses an insecure update url. | ||||
|  Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false); | ||||
|   | ||||
| -Components.utils.import("resource://testing-common/httpd.js");
 | ||||
| -var testserver;
 | ||||
|  const profileDir = gProfD.clone(); | ||||
|  profileDir.append("extensions"); | ||||
|   | ||||
| -function resetPrefs() {
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.active_version", -1);
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.installed_version", -1);
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.startup_reason", -1);
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.shutdown_reason", -1);
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.install_reason", -1);
 | ||||
| -  Services.prefs.setIntPref("bootstraptest.uninstall_reason", -1);
 | ||||
| -}
 | ||||
| -
 | ||||
| -function getActiveVersion() {
 | ||||
| -  return Services.prefs.getIntPref("bootstraptest.active_version");
 | ||||
| -}
 | ||||
| -
 | ||||
| -function getInstalledVersion() {
 | ||||
| -  return Services.prefs.getIntPref("bootstraptest.installed_version");
 | ||||
| -}
 | ||||
| -
 | ||||
| -function run_test() {
 | ||||
| -  createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
 | ||||
| -
 | ||||
| -  // Create and configure the HTTP server.
 | ||||
| -  testserver = new HttpServer();
 | ||||
| -  testserver.registerDirectory("/data/", do_get_file("data"));
 | ||||
| -  testserver.registerDirectory("/addons/", do_get_file("addons"));
 | ||||
| -  testserver.start(4444);
 | ||||
| -
 | ||||
| -  do_test_pending();
 | ||||
| -  run_test_1();
 | ||||
| -}
 | ||||
| -
 | ||||
| -function end_test() {
 | ||||
| -  testserver.stop(do_test_finished);
 | ||||
| -}
 | ||||
| -
 | ||||
| -function installUpdate(aInstall, aCallback) {
 | ||||
| -  aInstall.addListener({
 | ||||
| -    onInstallEnded: function(aInstall) {
 | ||||
| -      // give the startup time to run
 | ||||
| -      do_execute_soon(function() {
 | ||||
| -        aCallback(aInstall);
 | ||||
| -      });
 | ||||
| -    }
 | ||||
| -  });
 | ||||
| -
 | ||||
| -  aInstall.install();
 | ||||
| -}
 | ||||
| -
 | ||||
| -// Verify that an update to an add-on with a new ID uninstalls the old add-on
 | ||||
| -function run_test_1() {
 | ||||
| -  writeInstallRDFForExtension({
 | ||||
| -    id: "addon1@tests.mozilla.org",
 | ||||
| -    version: "1.0",
 | ||||
| -    updateURL: "http://localhost:4444/data/test_updateid.rdf",
 | ||||
| -    targetApplications: [{
 | ||||
| -      id: "xpcshell@tests.mozilla.org",
 | ||||
| -      minVersion: "1",
 | ||||
| -      maxVersion: "1"
 | ||||
| -    }],
 | ||||
| -    name: "Test Addon 1",
 | ||||
| -  }, profileDir);
 | ||||
| -
 | ||||
| -  startupManager();
 | ||||
| -
 | ||||
| -  AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
 | ||||
| -    do_check_neq(a1, null);
 | ||||
| -    do_check_eq(a1.version, "1.0");
 | ||||
| +function promiseInstallUpdate(install) {
 | ||||
| +  return new Promise((resolve, reject) => {
 | ||||
| +    install.addListener({
 | ||||
| +      onDownloadFailed: () => {
 | ||||
| +        let err = new Error("download error");
 | ||||
| +        err.code = install.error;
 | ||||
| +        reject(err);
 | ||||
| +      },
 | ||||
| +      onInstallFailed: () => {
 | ||||
| +        let err = new Error("install error");
 | ||||
| +        err.code = install.error;
 | ||||
| +        reject(err);
 | ||||
| +      },
 | ||||
| +      onInstallEnded: resolve,
 | ||||
| +    });
 | ||||
|   | ||||
| -    a1.findUpdates({
 | ||||
| -      onUpdateAvailable: function(addon, install) {
 | ||||
| -        do_check_eq(install.name, addon.name);
 | ||||
| -        do_check_eq(install.version, "2.0");
 | ||||
| -        do_check_eq(install.state, AddonManager.STATE_AVAILABLE);
 | ||||
| -        do_check_eq(install.existingAddon, a1);
 | ||||
| -
 | ||||
| -        installUpdate(install, check_test_1);
 | ||||
| -      }
 | ||||
| -    }, AddonManager.UPDATE_WHEN_USER_REQUESTED);
 | ||||
| -  });
 | ||||
| -}
 | ||||
| -
 | ||||
| -function check_test_1(install) {
 | ||||
| -  AddonManager.getAddonByID("addon1@tests.mozilla.org", callback_soon(function(a1) {
 | ||||
| -    // Existing add-on should have a pending upgrade
 | ||||
| -    do_check_neq(a1.pendingUpgrade, null);
 | ||||
| -    do_check_eq(a1.pendingUpgrade.id, "addon2@tests.mozilla.org");
 | ||||
| -    do_check_eq(a1.pendingUpgrade.install.existingAddon, a1);
 | ||||
| -    do_check_neq(a1.syncGUID);
 | ||||
| -
 | ||||
| -    let a1SyncGUID = a1.syncGUID;
 | ||||
| -
 | ||||
| -    restartManager();
 | ||||
| -
 | ||||
| -    AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
 | ||||
| -                                 "addon2@tests.mozilla.org"], function([a1, a2]) {
 | ||||
| -      // Should have uninstalled the old and installed the new
 | ||||
| -      do_check_eq(a1, null);
 | ||||
| -      do_check_neq(a2, null);
 | ||||
| -      do_check_neq(a2.syncGUID, null);
 | ||||
| -
 | ||||
| -      // The Sync GUID should change when the ID changes
 | ||||
| -      do_check_neq(a1SyncGUID, a2.syncGUID);
 | ||||
| -
 | ||||
| -      a2.uninstall();
 | ||||
| -
 | ||||
| -      do_execute_soon(run_test_2);
 | ||||
| -    });
 | ||||
| -  }));
 | ||||
| -}
 | ||||
| -
 | ||||
| -// Test that when the new add-on already exists we just upgrade that
 | ||||
| -function run_test_2() {
 | ||||
| -  restartManager();
 | ||||
| -  shutdownManager();
 | ||||
| -
 | ||||
| -  writeInstallRDFForExtension({
 | ||||
| -    id: "addon1@tests.mozilla.org",
 | ||||
| -    version: "1.0",
 | ||||
| -    updateURL: "http://localhost:4444/data/test_updateid.rdf",
 | ||||
| -    targetApplications: [{
 | ||||
| -      id: "xpcshell@tests.mozilla.org",
 | ||||
| -      minVersion: "1",
 | ||||
| -      maxVersion: "1"
 | ||||
| -    }],
 | ||||
| -    name: "Test Addon 1",
 | ||||
| -  }, profileDir);
 | ||||
| -  writeInstallRDFForExtension({
 | ||||
| -    id: "addon2@tests.mozilla.org",
 | ||||
| -    version: "1.0",
 | ||||
| -    targetApplications: [{
 | ||||
| -      id: "xpcshell@tests.mozilla.org",
 | ||||
| -      minVersion: "1",
 | ||||
| -      maxVersion: "1"
 | ||||
| -    }],
 | ||||
| -    name: "Test Addon 2",
 | ||||
| -  }, profileDir);
 | ||||
| -
 | ||||
| -  startupManager();
 | ||||
| -
 | ||||
| -  AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
 | ||||
| -    do_check_neq(a1, null);
 | ||||
| -    do_check_eq(a1.version, "1.0");
 | ||||
| -
 | ||||
| -    a1.findUpdates({
 | ||||
| -      onUpdateAvailable: function(addon, install) {
 | ||||
| -        installUpdate(install, check_test_2);
 | ||||
| -      }
 | ||||
| -    }, AddonManager.UPDATE_WHEN_USER_REQUESTED);
 | ||||
| +    install.install();
 | ||||
|    }); | ||||
|  } | ||||
|   | ||||
| -function check_test_2(install) {
 | ||||
| -  AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
 | ||||
| -                               "addon2@tests.mozilla.org"],
 | ||||
| -                               callback_soon(function([a1, a2]) {
 | ||||
| -    do_check_eq(a1.pendingUpgrade, null);
 | ||||
| -    // Existing add-on should have a pending upgrade
 | ||||
| -    do_check_neq(a2.pendingUpgrade, null);
 | ||||
| -    do_check_eq(a2.pendingUpgrade.id, "addon2@tests.mozilla.org");
 | ||||
| -    do_check_eq(a2.pendingUpgrade.install.existingAddon, a2);
 | ||||
| -
 | ||||
| -    restartManager();
 | ||||
| -
 | ||||
| -    AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
 | ||||
| -                                 "addon2@tests.mozilla.org"], function([a1, a2]) {
 | ||||
| -      // Should have uninstalled the old and installed the new
 | ||||
| -      do_check_neq(a1, null);
 | ||||
| -      do_check_neq(a2, null);
 | ||||
| -
 | ||||
| -      a1.uninstall();
 | ||||
| -      a2.uninstall();
 | ||||
| -
 | ||||
| -      do_execute_soon(run_test_3);
 | ||||
| -    });
 | ||||
| -  }));
 | ||||
| -}
 | ||||
| -
 | ||||
| -// Test that we rollback correctly when removing the old add-on fails
 | ||||
| -function run_test_3() {
 | ||||
| -  restartManager();
 | ||||
| -  shutdownManager();
 | ||||
| -
 | ||||
| -  // This test only works on Windows
 | ||||
| -  if (!("nsIWindowsRegKey" in AM_Ci)) {
 | ||||
| -    run_test_4();
 | ||||
| -    return;
 | ||||
| -  }
 | ||||
| -
 | ||||
| -  writeInstallRDFForExtension({
 | ||||
| -    id: "addon1@tests.mozilla.org",
 | ||||
| -    version: "1.0",
 | ||||
| -    updateURL: "http://localhost:4444/data/test_updateid.rdf",
 | ||||
| -    targetApplications: [{
 | ||||
| -      id: "xpcshell@tests.mozilla.org",
 | ||||
| -      minVersion: "1",
 | ||||
| -      maxVersion: "1"
 | ||||
| -    }],
 | ||||
| -    name: "Test Addon 1",
 | ||||
| -  }, profileDir);
 | ||||
| -
 | ||||
| -  startupManager();
 | ||||
| +// Create and configure the HTTP server.
 | ||||
| +let testserver = createHttpServer(4444);
 | ||||
| +testserver.registerDirectory("/data/", do_get_file("data"));
 | ||||
| +testserver.registerDirectory("/addons/", do_get_file("addons"));
 | ||||
|   | ||||
| -  AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
 | ||||
| -    do_check_neq(a1, null);
 | ||||
| -    do_check_eq(a1.version, "1.0");
 | ||||
| -
 | ||||
| -    a1.findUpdates({
 | ||||
| -      onUpdateAvailable: function(addon, install) {
 | ||||
| -        installUpdate(install, check_test_3);
 | ||||
| -      }
 | ||||
| -    }, AddonManager.UPDATE_WHEN_USER_REQUESTED);
 | ||||
| -  });
 | ||||
| -}
 | ||||
| -
 | ||||
| -function check_test_3(install) {
 | ||||
| -  AddonManager.getAddonByID("addon1@tests.mozilla.org", callback_soon(function(a1) {
 | ||||
| -    // Existing add-on should have a pending upgrade
 | ||||
| -    do_check_neq(a1.pendingUpgrade, null);
 | ||||
| -    do_check_eq(a1.pendingUpgrade.id, "addon2@tests.mozilla.org");
 | ||||
| -    do_check_eq(a1.pendingUpgrade.install.existingAddon, a1);
 | ||||
| -
 | ||||
| -    // Lock the old add-on open so it can't be uninstalled
 | ||||
| -    var file = profileDir.clone();
 | ||||
| -    file.append("addon1@tests.mozilla.org");
 | ||||
| -    if (!file.exists())
 | ||||
| -      file.leafName += ".xpi";
 | ||||
| -    else
 | ||||
| -      file.append("install.rdf");
 | ||||
| -
 | ||||
| -    var fstream = AM_Cc["@mozilla.org/network/file-output-stream;1"].
 | ||||
| -                  createInstance(AM_Ci.nsIFileOutputStream);
 | ||||
| -    fstream.init(file, FileUtils.MODE_APPEND | FileUtils.MODE_WRONLY, FileUtils.PERMS_FILE, 0);
 | ||||
| -
 | ||||
| -    restartManager();
 | ||||
| -
 | ||||
| -    fstream.close();
 | ||||
| -
 | ||||
| -    AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
 | ||||
| -                                 "addon2@tests.mozilla.org"],
 | ||||
| -                                 callback_soon(function([a1, a2]) {
 | ||||
| -      // Should not have installed the new add-on but it should still be
 | ||||
| -      // pending install
 | ||||
| -      do_check_neq(a1, null);
 | ||||
| -      do_check_eq(a2, null);
 | ||||
| -
 | ||||
| -      restartManager();
 | ||||
| -
 | ||||
| -      AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
 | ||||
| -                                   "addon2@tests.mozilla.org"], function([a1, a2]) {
 | ||||
| -        // Should have installed the new add-on
 | ||||
| -        do_check_eq(a1, null);
 | ||||
| -        do_check_neq(a2, null);
 | ||||
| -
 | ||||
| -        a2.uninstall();
 | ||||
| -
 | ||||
| -        do_execute_soon(run_test_4);
 | ||||
| -      });
 | ||||
| -    }));
 | ||||
| -  }));
 | ||||
| +function run_test() {
 | ||||
| +  createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
 | ||||
| +  startupManager();
 | ||||
| +  run_next_test();
 | ||||
|  } | ||||
|   | ||||
| -// Tests that upgrading to a bootstrapped add-on works but requires a restart
 | ||||
| -function run_test_4() {
 | ||||
| -  restartManager();
 | ||||
| -  shutdownManager();
 | ||||
| -
 | ||||
| -  writeInstallRDFForExtension({
 | ||||
| -    id: "addon2@tests.mozilla.org",
 | ||||
| -    version: "2.0",
 | ||||
| -    updateURL: "http://localhost:4444/data/test_updateid.rdf",
 | ||||
| -    targetApplications: [{
 | ||||
| -      id: "xpcshell@tests.mozilla.org",
 | ||||
| -      minVersion: "1",
 | ||||
| -      maxVersion: "1"
 | ||||
| -    }],
 | ||||
| -    name: "Test Addon 2",
 | ||||
| -  }, profileDir);
 | ||||
| -
 | ||||
| -  startupManager();
 | ||||
| -
 | ||||
| -  resetPrefs();
 | ||||
| -
 | ||||
| -  AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) {
 | ||||
| -    do_check_neq(a2, null);
 | ||||
| -    do_check_neq(a2.syncGUID, null);
 | ||||
| -    do_check_eq(a2.version, "2.0");
 | ||||
| -
 | ||||
| -    a2.findUpdates({
 | ||||
| -      onUpdateAvailable: function(addon, install) {
 | ||||
| -        installUpdate(install, check_test_4);
 | ||||
| -      }
 | ||||
| -    }, AddonManager.UPDATE_WHEN_USER_REQUESTED);
 | ||||
| -  });
 | ||||
| -}
 | ||||
| -
 | ||||
| -function check_test_4() {
 | ||||
| -  AddonManager.getAddonsByIDs(["addon2@tests.mozilla.org",
 | ||||
| -                               "addon3@tests.mozilla.org"],
 | ||||
| -                               callback_soon(function([a2, a3]) {
 | ||||
| -    // Should still be pending install even though the new add-on is restartless
 | ||||
| -    do_check_neq(a2, null);
 | ||||
| -    do_check_eq(a3, null);
 | ||||
| -
 | ||||
| -    do_check_neq(a2.pendingUpgrade, null);
 | ||||
| -    do_check_eq(a2.pendingUpgrade.id, "addon3@tests.mozilla.org");
 | ||||
| -
 | ||||
| -    do_check_eq(getInstalledVersion(), -1);
 | ||||
| -    do_check_eq(getActiveVersion(), -1);
 | ||||
| -
 | ||||
| -    restartManager();
 | ||||
| -
 | ||||
| -    AddonManager.getAddonsByIDs(["addon2@tests.mozilla.org",
 | ||||
| -                                 "addon3@tests.mozilla.org"], function([a2, a3]) {
 | ||||
| -      // Should have updated
 | ||||
| -      do_check_eq(a2, null);
 | ||||
| -      do_check_neq(a3, null);
 | ||||
| -
 | ||||
| -      do_check_eq(getInstalledVersion(), 3);
 | ||||
| -      do_check_eq(getActiveVersion(), 3);
 | ||||
| -
 | ||||
| -      do_execute_soon(run_test_5);
 | ||||
| -    });
 | ||||
| -  }));
 | ||||
| -}
 | ||||
| -
 | ||||
| -// Tests that upgrading to another bootstrapped add-on works without a restart
 | ||||
| -function run_test_5() {
 | ||||
| -  AddonManager.getAddonByID("addon3@tests.mozilla.org", function(a3) {
 | ||||
| -    do_check_neq(a3, null);
 | ||||
| -    do_check_eq(a3.version, "3.0");
 | ||||
| +// Verify that an update to an add-on with a new ID fails
 | ||||
| +add_task(function* test_update_new_id() {
 | ||||
| +  yield promiseInstallAllFiles([do_get_addon("test_updateid1")]);
 | ||||
|   | ||||
| -    a3.findUpdates({
 | ||||
| -      onUpdateAvailable: function(addon, install) {
 | ||||
| -        installUpdate(install, check_test_5);
 | ||||
| -      }
 | ||||
| -    }, AddonManager.UPDATE_WHEN_USER_REQUESTED);
 | ||||
| -  });
 | ||||
| -}
 | ||||
| -
 | ||||
| -function check_test_5() {
 | ||||
| -  AddonManager.getAddonsByIDs(["addon3@tests.mozilla.org",
 | ||||
| -                               "addon4@tests.mozilla.org"],
 | ||||
| -                               callback_soon(function([a3, a4]) {
 | ||||
| -    // Should have updated
 | ||||
| -    do_check_eq(a3, null);
 | ||||
| -    do_check_neq(a4, null);
 | ||||
| -
 | ||||
| -    do_check_eq(getInstalledVersion(), 4);
 | ||||
| -    do_check_eq(getActiveVersion(), 4);
 | ||||
| -
 | ||||
| -    restartManager();
 | ||||
| -
 | ||||
| -    AddonManager.getAddonsByIDs(["addon3@tests.mozilla.org",
 | ||||
| -                                 "addon4@tests.mozilla.org"], function([a3, a4]) {
 | ||||
| -      // Should still be gone
 | ||||
| -      do_check_eq(a3, null);
 | ||||
| -      do_check_neq(a4, null);
 | ||||
| -
 | ||||
| -      do_check_eq(getInstalledVersion(), 4);
 | ||||
| -      do_check_eq(getActiveVersion(), 4);
 | ||||
| -
 | ||||
| -      run_test_6();
 | ||||
| -    });
 | ||||
| -  }));
 | ||||
| -}
 | ||||
| +  let addon = yield promiseAddonByID("addon1@tests.mozilla.org");
 | ||||
| +  do_check_neq(addon, null);
 | ||||
| +  do_check_eq(addon.version, "1.0");
 | ||||
|   | ||||
| -// Tests that upgrading to a non-bootstrapped add-on works but requires a restart
 | ||||
| -function run_test_6() {
 | ||||
| -  AddonManager.getAddonByID("addon4@tests.mozilla.org", function(a4) {
 | ||||
| -    do_check_neq(a4, null);
 | ||||
| -    do_check_eq(a4.version, "4.0");
 | ||||
| -
 | ||||
| -    a4.findUpdates({
 | ||||
| -      onUpdateAvailable: function(addon, install) {
 | ||||
| -        installUpdate(install, check_test_6);
 | ||||
| -      }
 | ||||
| -    }, AddonManager.UPDATE_WHEN_USER_REQUESTED);
 | ||||
| -  });
 | ||||
| -}
 | ||||
| +  let update = yield promiseFindAddonUpdates(addon, AddonManager.UPDATE_WHEN_USER_REQUESTED);
 | ||||
| +  let install = update.updateAvailable;
 | ||||
| +  do_check_eq(install.name, addon.name);
 | ||||
| +  do_check_eq(install.version, "2.0");
 | ||||
| +  do_check_eq(install.state, AddonManager.STATE_AVAILABLE);
 | ||||
| +  do_check_eq(install.existingAddon, addon);
 | ||||
|   | ||||
| -function check_test_6() {
 | ||||
| -  AddonManager.getAddonsByIDs(["addon4@tests.mozilla.org",
 | ||||
| -                               "addon2@tests.mozilla.org"],
 | ||||
| -                               callback_soon(function([a4, a2]) {
 | ||||
| -    // Should still be pending install even though the old add-on is restartless
 | ||||
| -    do_check_neq(a4, null);
 | ||||
| -    do_check_eq(a2, null);
 | ||||
| -
 | ||||
| -    do_check_neq(a4.pendingUpgrade, null);
 | ||||
| -    do_check_eq(a4.pendingUpgrade.id, "addon2@tests.mozilla.org");
 | ||||
| -
 | ||||
| -    do_check_eq(getInstalledVersion(), 4);
 | ||||
| -    do_check_eq(getActiveVersion(), 4);
 | ||||
| +  yield Assert.rejects(promiseInstallUpdate(install),
 | ||||
| +                       function(err) { return err.code == AddonManager.ERROR_INCORRECT_ID },
 | ||||
| +                       "Upgrade to a different ID fails");
 | ||||
|   | ||||
| -    restartManager();
 | ||||
| +  addon.uninstall();
 | ||||
| +});
 | ||||
|   | ||||
| -    AddonManager.getAddonsByIDs(["addon4@tests.mozilla.org",
 | ||||
| -                                 "addon2@tests.mozilla.org"], function([a4, a2]) {
 | ||||
| -      // Should have updated
 | ||||
| -      do_check_eq(a4, null);
 | ||||
| -      do_check_neq(a2, null);
 | ||||
| +// Verify that an update to a multi-package xpi fails
 | ||||
| +add_task(function* test_update_new_id() {
 | ||||
| +  yield promiseInstallAllFiles([do_get_addon("test_update_multi1")]);
 | ||||
|   | ||||
| -      do_check_eq(getInstalledVersion(), 0);
 | ||||
| -      do_check_eq(getActiveVersion(), 0);
 | ||||
| +  let addon = yield promiseAddonByID("updatemulti@tests.mozilla.org");
 | ||||
| +  do_check_neq(addon, null);
 | ||||
| +  do_check_eq(addon.version, "1.0");
 | ||||
|   | ||||
| -      end_test();
 | ||||
| -    });
 | ||||
| -  }));
 | ||||
| -}
 | ||||
| +  let update = yield promiseFindAddonUpdates(addon, AddonManager.UPDATE_WHEN_USER_REQUESTED);
 | ||||
| +  let install = update.updateAvailable;
 | ||||
| +  do_check_eq(install.name, addon.name);
 | ||||
| +  do_check_eq(install.version, "2.0");
 | ||||
| +  do_check_eq(install.state, AddonManager.STATE_AVAILABLE);
 | ||||
| +  do_check_eq(install.existingAddon, addon);
 | ||||
| +
 | ||||
| +  yield Assert.rejects(promiseInstallUpdate(install),
 | ||||
| +                       function(err) { return err.code == AddonManager.ERROR_UNEXPECTED_ADDON_TYPE },
 | ||||
| +                       "Upgrade to a multipackage xpi fails");
 | ||||
| +
 | ||||
| +  addon.uninstall();
 | ||||
| +});
 | ||||
| 
 | ||||
|  | @ -1,47 +0,0 @@ | |||
| Fix CVE-2016-5652 (buffer overflow in t2p_readwrite_pdf_image_tile()). | ||||
| 
 | ||||
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-5652 | ||||
| 
 | ||||
| Patches exfiltrated from upstream CVS repo with: | ||||
| cvs diff -u -r 1.92 -r 1.94 tools/tiff2pdf.c | ||||
| 
 | ||||
| Index: tools/tiff2pdf.c
 | ||||
| ===================================================================
 | ||||
| RCS file: /cvs/maptools/cvsroot/libtiff/tools/tiff2pdf.c,v | ||||
| retrieving revision 1.92 | ||||
| retrieving revision 1.94 | ||||
| diff -u -r1.92 -r1.94
 | ||||
| --- a/tools/tiff2pdf.c	23 Sep 2016 22:12:18 -0000	1.92
 | ||||
| +++ b/tools/tiff2pdf.c	9 Oct 2016 11:03:36 -0000	1.94
 | ||||
| @@ -2887,21 +2887,24 @@
 | ||||
|  				return(0); | ||||
|  			} | ||||
|  			if(TIFFGetField(input, TIFFTAG_JPEGTABLES, &count, &jpt) != 0) { | ||||
| -				if (count > 0) {
 | ||||
| -					_TIFFmemcpy(buffer, jpt, count);
 | ||||
| +				if (count >= 4) {
 | ||||
| +                    /* Ignore EOI marker of JpegTables */
 | ||||
| +					_TIFFmemcpy(buffer, jpt, count - 2);
 | ||||
|  					bufferoffset += count - 2; | ||||
| +                    /* Store last 2 bytes of the JpegTables */
 | ||||
|  					table_end[0] = buffer[bufferoffset-2]; | ||||
|  					table_end[1] = buffer[bufferoffset-1]; | ||||
| -				}
 | ||||
| -				if (count > 0) {
 | ||||
|  					xuint32 = bufferoffset; | ||||
| +                    bufferoffset -= 2;
 | ||||
|  					bufferoffset += TIFFReadRawTile( | ||||
|  						input,  | ||||
|  						tile,  | ||||
| -						(tdata_t) &(((unsigned char*)buffer)[bufferoffset-2]), 
 | ||||
| +						(tdata_t) &(((unsigned char*)buffer)[bufferoffset]), 
 | ||||
|  						-1); | ||||
| -						buffer[xuint32-2]=table_end[0];
 | ||||
| -						buffer[xuint32-1]=table_end[1];
 | ||||
| +                    /* Overwrite SOI marker of image scan with previously */
 | ||||
| +                    /* saved end of JpegTables */
 | ||||
| +					buffer[xuint32-2]=table_end[0];
 | ||||
| +					buffer[xuint32-1]=table_end[1];
 | ||||
|  				} else { | ||||
|  					bufferoffset += TIFFReadRawTile( | ||||
|  						input,  | ||||
|  | @ -1,41 +0,0 @@ | |||
| Fix CVE-2016-9273: | ||||
| 
 | ||||
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-9273 | ||||
| http://bugzilla.maptools.org/show_bug.cgi?id=2587 | ||||
| 
 | ||||
| Patch extracted from upstream CVS repo: | ||||
| 
 | ||||
| 2016-11-10 Even Rouault <even.rouault at spatialys.com> | ||||
| 
 | ||||
| revision 1.37 | ||||
| date: 2016-11-09 18:00:49 -0500;  author: erouault;  state: Exp;  lines: +10 -1;  commitid: pzKipPxDJO2dxvtz; | ||||
| * libtiff/tif_strip.c: make TIFFNumberOfStrips() return the td->td_nstrips | ||||
| value when it is non-zero, instead of recomputing it. This is needed in | ||||
| TIFF_STRIPCHOP mode where td_nstrips is modified. Fixes a read outsize of | ||||
| array in tiffsplit (or other utilities using TIFFNumberOfStrips()). | ||||
| Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2587 | ||||
| 
 | ||||
| Index: libtiff/tif_strip.c
 | ||||
| ===================================================================
 | ||||
| RCS file: /cvs/maptools/cvsroot/libtiff/libtiff/tif_strip.c,v | ||||
| retrieving revision 1.36 | ||||
| retrieving revision 1.37 | ||||
| diff -u -r1.36 -r1.37
 | ||||
| --- a/libtiff/tif_strip.c	7 Jun 2015 22:35:40 -0000	1.36
 | ||||
| +++ b/libtiff/tif_strip.c	9 Nov 2016 23:00:49 -0000	1.37
 | ||||
| @@ -63,6 +63,15 @@
 | ||||
|  	TIFFDirectory *td = &tif->tif_dir; | ||||
|  	uint32 nstrips; | ||||
|   | ||||
| +    /* If the value was already computed and store in td_nstrips, then return it,
 | ||||
| +       since ChopUpSingleUncompressedStrip might have altered and resized the
 | ||||
| +       since the td_stripbytecount and td_stripoffset arrays to the new value
 | ||||
| +       after the initial affectation of td_nstrips = TIFFNumberOfStrips() in
 | ||||
| +       tif_dirread.c ~line 3612.
 | ||||
| +       See http://bugzilla.maptools.org/show_bug.cgi?id=2587 */
 | ||||
| +    if( td->td_nstrips )
 | ||||
| +        return td->td_nstrips;
 | ||||
| +
 | ||||
|  	nstrips = (td->td_rowsperstrip == (uint32) -1 ? 1 : | ||||
|  	     TIFFhowmany_32(td->td_imagelength, td->td_rowsperstrip)); | ||||
|  	if (td->td_planarconfig == PLANARCONFIG_SEPARATE) | ||||
							
								
								
									
										14
									
								
								gnu/packages/patches/lvm2-static-link.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								gnu/packages/patches/lvm2-static-link.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | |||
| Fix static linking of 'lvm.static', which indirectly depend on libpthread | ||||
| via libdevmapper.a. | ||||
| 
 | ||||
| --- LVM2.2.02.166/tools/Makefile.in	2016-11-22 21:31:15.521045149 +0100
 | ||||
| +++ LVM2.2.02.166/tools/Makefile.in	2016-11-22 21:31:24.085082767 +0100
 | ||||
| @@ -148,7 +148,7 @@ endif
 | ||||
|   | ||||
|  lvm.static: $(OBJECTS) lvm-static.o $(top_builddir)/lib/liblvm-internal.a  $(interfacebuilddir)/libdevmapper.a | ||||
|  	$(CC) $(CFLAGS) $(LDFLAGS) -static -L$(interfacebuilddir) -o $@ \ | ||||
| -	      $(OBJECTS) lvm-static.o $(LVMLIBS) $(STATIC_LIBS) $(LIBS)
 | ||||
| +	      $(OBJECTS) lvm-static.o $(LVMLIBS) $(STATIC_LIBS) $(LIBS) $(PTHREAD_LIBS)
 | ||||
|   | ||||
|  liblvm2cmd.a: $(top_builddir)/lib/liblvm-internal.a $(OBJECTS) lvmcmdlib.o lvm2cmd.o | ||||
|  	cat $(top_builddir)/lib/liblvm-internal.a > $@ | ||||
							
								
								
									
										19
									
								
								gnu/packages/patches/pixman-CVE-2016-5296.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								gnu/packages/patches/pixman-CVE-2016-5296.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| Fix CVE-2016-5296: Heap-buffer-overflow WRITE in rasterize_edges_1 | ||||
| Adapted for upstream pixman based on: | ||||
| 
 | ||||
|   https://hg.mozilla.org/releases/mozilla-esr45/rev/5e39c1c2fded | ||||
| 
 | ||||
| --- pixman-0.34.0/pixman/pixman-edge-imp.h.orig	2015-06-30 05:48:31.000000000 -0400
 | ||||
| +++ pixman-0.34.0/pixman/pixman-edge-imp.h	2016-11-16 01:09:34.046335106 -0500
 | ||||
| @@ -55,8 +55,9 @@
 | ||||
|  	 * | ||||
|  	 * (The AA case does a similar  adjustment in RENDER_SAMPLES_X) | ||||
|  	 */ | ||||
| -	lx += X_FRAC_FIRST(1) - pixman_fixed_e;
 | ||||
| -	rx += X_FRAC_FIRST(1) - pixman_fixed_e;
 | ||||
| +	/* we cast to unsigned to get defined behaviour for overflow */
 | ||||
| +	lx = (unsigned)lx + X_FRAC_FIRST(1) - pixman_fixed_e;
 | ||||
| +	rx = (unsigned)rx + X_FRAC_FIRST(1) - pixman_fixed_e;
 | ||||
|  #endif | ||||
|  	/* clip X */ | ||||
|  	if (lx < 0) | ||||
|  | @ -701,7 +701,6 @@ vector formats.") | |||
|                             (,(string-append sdl "/lib"))) | ||||
|                           `("PATH" ":" prefix     ;for pdftoppm | ||||
|                             (,(string-append xpdf "/bin")))) | ||||
|                         (mkdir-p man1) | ||||
|                         (install-file "impressive.1" man1) | ||||
|                         #t)))))) | ||||
|     (home-page "http://impressive.sourceforge.net") | ||||
|  |  | |||
|  | @ -7,7 +7,7 @@ | |||
| ;;; Copyright © 2016 Mark H Weaver <mhw@netris.org> | ||||
| ;;; Copyright © 2016 Jochem Raat <jchmrt@riseup.net> | ||||
| ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> | ||||
| ;;; Coypright © 2016 ng0 <ng0@we.make.ritual.n0.is> | ||||
| ;;; Coypright © 2016 ng0 <ng0@libertad.pw> | ||||
| ;;; Copyright © 2016 Alex Sassmannshausen <alex@pompo.co> | ||||
| ;;; Copyright © 2016 Roel Janssen <roel@gnu.org> | ||||
| ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com> | ||||
|  | @ -48,7 +48,7 @@ | |||
|     (version "5.24.0") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "http://www.cpan.org/src/5.0/perl-" | ||||
|              (uri (string-append "mirror://cpan/src/5.0/perl-" | ||||
|                                  version ".tar.gz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|  | @ -2055,6 +2055,35 @@ each stack frame.") | |||
| interface for the RFC 2104 HMAC mechanism.") | ||||
|     (license (package-license perl)))) | ||||
| 
 | ||||
| (define-public perl-digest-md5 | ||||
|   (package | ||||
|     (name "perl-digest-md5") | ||||
|     (version "2.55") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append "mirror://cpan/authors/id/G/GA/GAAS/Digest-MD5-" | ||||
|                            version ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "0g0fklbrm2krswc1xhp4iwn1dhqq71fqh2p5wm8xj9a4s6i9ic83")))) | ||||
|     (build-system perl-build-system) | ||||
|     (arguments | ||||
|      `(#:phases | ||||
|        (modify-phases %standard-phases | ||||
|          (add-after 'build 'set-permissions | ||||
|            (lambda _ | ||||
|              ;; Make MD5.so read-write so it can be stripped. | ||||
|              (chmod "blib/arch/auto/Digest/MD5/MD5.so" #o755)))))) | ||||
|     (home-page "http://search.cpan.org/dist/Digest-MD5") | ||||
|     (synopsis "Perl interface to the MD-5 algorithm") | ||||
|     (description | ||||
|      "The @code{Digest::MD5} module allows you to use the MD5 Message Digest | ||||
| algorithm from within Perl programs.  The algorithm takes as | ||||
| input a message of arbitrary length and produces as output a | ||||
| 128-bit \"fingerprint\" or \"message digest\" of the input.") | ||||
|     (license (package-license perl)))) | ||||
| 
 | ||||
| (define-public perl-digest-sha1 | ||||
|   (package | ||||
|     (name "perl-digest-sha1") | ||||
|  |  | |||
							
								
								
									
										334
									
								
								gnu/packages/php.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										334
									
								
								gnu/packages/php.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,334 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2016 Julien Lepiller <julien@lepiller.eu> | ||||
| ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.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 php) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages algebra) | ||||
|   #:use-module (gnu packages aspell) | ||||
|   #:use-module (gnu packages base) | ||||
|   #:use-module (gnu packages bison) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages curl) | ||||
|   #:use-module (gnu packages cyrus-sasl) | ||||
|   #:use-module (gnu packages databases) | ||||
|   #:use-module (gnu packages fontutils) | ||||
|   #:use-module (gnu packages gd) | ||||
|   #:use-module (gnu packages gettext) | ||||
|   #:use-module (gnu packages glib) | ||||
|   #:use-module (gnu packages gnupg) | ||||
|   #:use-module (gnu packages image) | ||||
|   #:use-module (gnu packages linux) | ||||
|   #:use-module (gnu packages multiprecision) | ||||
|   #:use-module (gnu packages openldap) | ||||
|   #:use-module (gnu packages pcre) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages readline) | ||||
|   #:use-module (gnu packages textutils) | ||||
|   #:use-module (gnu packages tls) | ||||
|   #:use-module (gnu packages web) | ||||
|   #:use-module (gnu packages xml) | ||||
|   #:use-module (gnu packages xorg) | ||||
|   #:use-module (gnu packages zip) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module ((guix licenses) #:prefix license:)) | ||||
| 
 | ||||
| ;; This fixes PHP bugs 73155 and 73159. Remove when gd | ||||
| ;; is updated to > 2.2.3. | ||||
| (define gd-for-php | ||||
|   (package (inherit gd) | ||||
|            (source | ||||
|             (origin | ||||
|               (inherit (package-source gd)) | ||||
|               (patches (search-patches | ||||
|                         "gd-fix-truecolor-format-correction.patch" | ||||
|                         "gd-fix-chunk-size-on-boundaries.patch")))))) | ||||
| 
 | ||||
| (define-public php | ||||
|   (package | ||||
|     (name "php") | ||||
|     (version "7.0.13") | ||||
|     (home-page "https://secure.php.net/") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append home-page "distributions/" | ||||
|                                   name "-" version ".tar.xz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1gzihbpcp51jc587gs1ryn59hsnr7vf5427dmcvdimvm77wsfyrm")) | ||||
|               (modules '((guix build utils))) | ||||
|               (snippet | ||||
|                '(with-directory-excursion "ext" | ||||
|                   (for-each delete-file-recursively | ||||
|                             ;; Some of the bundled libraries have no proper upstream. | ||||
|                             ;; Ideally we'd extract these out as separate packages: | ||||
|                             ;;"mbstring/libmbfl" | ||||
|                             ;;"date/lib" | ||||
|                             ;;"bcmath/libbcmath" | ||||
|                             ;;"fileinfo/libmagic" ; This is a patched version of libmagic. | ||||
|                             '("gd/libgd" | ||||
|                               "mbstring/oniguruma" | ||||
|                               "pcre/pcrelib" | ||||
|                               "sqlite3/libsqlite" | ||||
|                               "xmlrpc/libxmlrpc" | ||||
|                               "zip/lib")))))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:configure-flags | ||||
|        (let-syntax ((with (syntax-rules () | ||||
|                             ((_ option input) | ||||
|                              (string-append option "=" | ||||
|                                             (assoc-ref %build-inputs input)))))) | ||||
|          (list (with "--with-bz2" "bzip2") | ||||
|                (with "--with-curl" "curl") | ||||
|                (with "--with-freetype-dir" "freetype") | ||||
|                (with "--with-gd" "gd") | ||||
|                (with "--with-gdbm" "gdbm") | ||||
|                (with "--with-gettext" "glibc") ; libintl.h | ||||
|                (with "--with-gmp" "gmp") | ||||
|                (with "--with-jpeg-dir" "libjpeg") | ||||
|                (with "--with-ldap" "openldap") | ||||
|                (with "--with-ldap-sasl" "cyrus-sasl") | ||||
|                (with "--with-libzip" "zip") | ||||
|                (with "--with-libxml-dir" "libxml2") | ||||
|                (with "--with-onig" "oniguruma") | ||||
|                (with "--with-pcre-dir" "pcre") | ||||
|                (with "--with-pcre-regex" "pcre") | ||||
|                (with "--with-pdo-pgsql" "postgresql") | ||||
|                (with "--with-pdo-sqlite" "sqlite") | ||||
|                (with "--with-pgsql" "postgresql") | ||||
|                (with "--with-png-dir" "libpng") | ||||
|                ;; PHP’s Pspell extension, while retaining its current name, | ||||
|                ;; now uses the Aspell library. | ||||
|                (with "--with-pspell" "aspell") | ||||
|                (with "--with-readline" "readline") | ||||
|                (with "--with-sqlite3" "sqlite") | ||||
|                (with "--with-tidy" "tidy") | ||||
|                (with "--with-webp-dir" "libwebp") | ||||
|                (with "--with-xpm-dir" "libxpm") | ||||
|                (with "--with-xsl" "libxslt") | ||||
|                (with "--with-zlib-dir" "zlib") | ||||
|                ;; We could add "--with-snmp", but it requires netsnmp that | ||||
|                ;; we don't have a package for. It is used to build the snmp | ||||
|                ;; extension of php. | ||||
|                "--with-iconv" | ||||
|                "--with-openssl" | ||||
|                "--with-pdo-mysql" | ||||
|                "--with-zlib" | ||||
|                "--enable-calendar" | ||||
|                "--enable-dba=shared" | ||||
|                "--enable-exif" | ||||
|                "--enable-flatfile" | ||||
|                "--enable-fpm" | ||||
|                "--enable-ftp" | ||||
|                "--enable-inifile" | ||||
|                "--enable-mbstring" | ||||
|                "--enable-pcntl" | ||||
|                "--enable-sockets" | ||||
|                "--enable-threads")) | ||||
|        #:phases | ||||
|        (modify-phases %standard-phases | ||||
|          (add-after 'unpack 'do-not-record-build-flags | ||||
|            (lambda _ | ||||
|              ;; Prevent configure flags from being stored and causing | ||||
|              ;; unnecessary runtime dependencies. | ||||
|              (substitute* "scripts/php-config.in" | ||||
|                (("@CONFIGURE_OPTIONS@") "") | ||||
|                (("@PHP_LDFLAGS@") "")) | ||||
|              ;; This file has ISO-8859-1 encoding. | ||||
|              (with-fluids ((%default-port-encoding "ISO-8859-1")) | ||||
|                (substitute* "main/build-defs.h.in" | ||||
|                  (("@CONFIGURE_COMMAND@") "(omitted)"))) | ||||
|              #t)) | ||||
|          (add-before 'build 'patch-/bin/sh | ||||
|            (lambda _ | ||||
|              (substitute* '("run-tests.php" "ext/standard/proc_open.c") | ||||
|                (("/bin/sh") (which "sh"))) | ||||
|              #t)) | ||||
|          (add-before 'check 'prepare-tests | ||||
|            (lambda _ | ||||
|              ;; Some of these files have ISO-8859-1 encoding, whereas others | ||||
|              ;; use ASCII, so we can't use a "catch-all" find-files here. | ||||
|              (with-fluids ((%default-port-encoding "ISO-8859-1")) | ||||
|                (substitute* '("ext/mbstring/tests/mb_send_mail02.phpt" | ||||
|                               "ext/mbstring/tests/mb_send_mail04.phpt" | ||||
|                               "ext/mbstring/tests/mb_send_mail05.phpt" | ||||
|                               "ext/mbstring/tests/mb_send_mail06.phpt") | ||||
|                  (("/bin/cat") (which "cat")))) | ||||
|              (substitute* '("ext/mbstring/tests/mb_send_mail01.phpt" | ||||
|                             "ext/mbstring/tests/mb_send_mail03.phpt" | ||||
|                             "ext/mbstring/tests/bug52861.phpt" | ||||
|                             "ext/standard/tests/general_functions/bug34794.phpt" | ||||
|                             "ext/standard/tests/general_functions/bug44667.phpt" | ||||
|                             "ext/standard/tests/general_functions/proc_open.phpt") | ||||
|                (("/bin/cat") (which "cat"))) | ||||
|              ;; The encoding of this file is not recognized, so we simply drop it. | ||||
|              (delete-file "ext/mbstring/tests/mb_send_mail07.phpt") | ||||
| 
 | ||||
|              (substitute* "ext/standard/tests/streams/bug60602.phpt" | ||||
|                (("'ls'") (string-append "'" (which "ls") "'"))) | ||||
| 
 | ||||
|              ;; Drop tests that are known to fail. | ||||
|              (for-each delete-file | ||||
|                        '("ext/posix/tests/posix_getgrgid.phpt"    ; Requires /etc/group. | ||||
|                          "ext/sockets/tests/bug63000.phpt"        ; Fails to detect OS. | ||||
|                          "ext/sockets/tests/socket_shutdown.phpt" ; Requires DNS. | ||||
|                          "ext/sockets/tests/socket_send.phpt"     ; Likewise. | ||||
|                          "ext/sockets/tests/mcast_ipv4_recv.phpt" ; Requires multicast. | ||||
|                          ;; These needs /etc/services. | ||||
|                          "ext/standard/tests/general_functions/getservbyname_basic.phpt" | ||||
|                          "ext/standard/tests/general_functions/getservbyport_basic.phpt" | ||||
|                          "ext/standard/tests/general_functions/getservbyport_variation1.phpt" | ||||
|                          ;; And /etc/protocols. | ||||
|                          "ext/standard/tests/network/getprotobyname_basic.phpt" | ||||
|                          "ext/standard/tests/network/getprotobynumber_basic.phpt" | ||||
|                          ;; And exotic locales. | ||||
|                          "ext/standard/tests/strings/setlocale_basic1.phpt" | ||||
|                          "ext/standard/tests/strings/setlocale_basic2.phpt" | ||||
|                          "ext/standard/tests/strings/setlocale_basic3.phpt" | ||||
|                          "ext/standard/tests/strings/setlocale_variation1.phpt" | ||||
| 
 | ||||
|                          ;; XXX: These gd tests fails.  Likely because our version | ||||
|                          ;; is different from the (patched) bundled one. | ||||
|                          ;; Here, gd quits immediately after "fatal libpng error"; while the | ||||
|                          ;; test expects it to additionally return a "setjmp" error and warning. | ||||
|                          "ext/gd/tests/bug39780_extern.phpt" | ||||
|                          "ext/gd/tests/libgd00086_extern.phpt" | ||||
|                          ;; Extra newline in gd-png output. | ||||
|                          "ext/gd/tests/bug45799.phpt" | ||||
|                          ;; Different error message than expected from imagecrop(). | ||||
|                          "ext/gd/tests/bug66356.phpt" | ||||
|                          ;; Similarly for imagecreatefromgd2(). | ||||
|                          "ext/gd/tests/bug72339.phpt" | ||||
|                          ;; Call to undefined function imageantialias().  They are | ||||
|                          ;; supposed to fail anyway. | ||||
|                          "ext/gd/tests/bug72482.phpt" | ||||
|                          "ext/gd/tests/bug72482_2.phpt" | ||||
|                          "ext/gd/tests/bug73213.phpt" | ||||
|                          ;; Test expects generic "gd warning" but gets the actual function name. | ||||
|                          "ext/gd/tests/createfromwbmp2_extern.phpt" | ||||
|                          ;; TODO: Enable these when libgd is built with xpm support. | ||||
|                          "ext/gd/tests/xpm2gd.phpt" | ||||
|                          "ext/gd/tests/xpm2jpg.phpt" | ||||
|                          "ext/gd/tests/xpm2png.phpt" | ||||
| 
 | ||||
|                          ;; XXX: These iconv tests have the expected outcome, | ||||
|                          ;; but with different error messages. | ||||
|                          ;; Expects "illegal character", instead gets "unknown error (84)". | ||||
|                          "ext/iconv/tests/bug52211.phpt" | ||||
|                          ;; Expects "wrong charset", gets unknown error (22). | ||||
|                          "ext/iconv/tests/iconv_mime_decode_variation3.phpt" | ||||
|                          "ext/iconv/tests/iconv_strlen_error2.phpt" | ||||
|                          "ext/iconv/tests/iconv_strlen_variation2.phpt" | ||||
|                          "ext/iconv/tests/iconv_substr_error2.phpt" | ||||
|                          ;; Expects conversion error, gets "error condition Termsig=11". | ||||
|                          "ext/iconv/tests/iconv_strpos_error2.phpt" | ||||
|                          "ext/iconv/tests/iconv_strrpos_error2.phpt" | ||||
|                          ;; Similar, but iterating over multiple values. | ||||
|                          ;; iconv breaks the loop after the first error with Termsig=11. | ||||
|                          "ext/iconv/tests/iconv_strpos_variation4.phpt" | ||||
|                          "ext/iconv/tests/iconv_strrpos_variation3.phpt" | ||||
| 
 | ||||
|                          ;; XXX: These test failures appear legitimate, needs investigation. | ||||
|                          ;; open_basedir() restriction failure. | ||||
|                          "ext/curl/tests/bug61948.phpt" | ||||
|                          ;; Expects a false boolean, gets empty array from glob(). | ||||
|                          "ext/standard/tests/file/bug41655_1.phpt" | ||||
|                          "ext/standard/tests/file/glob_variation5.phpt" | ||||
|                          ;; Test output is correct, but in wrong order. | ||||
|                          "ext/standard/tests/streams/proc_open_bug64438.phpt" | ||||
|                          ;; The test expects an Array, but instead get the contents(?). | ||||
|                          "ext/gd/tests/bug43073.phpt" | ||||
|                          ;; imagettftext() returns wrong coordinates. | ||||
|                          "ext/gd/tests/bug48732.phpt" | ||||
|                          ;; Similarly for imageftbbox(). | ||||
|                          "ext/gd/tests/bug48801.phpt" | ||||
|                          ;; Different expected output from imagecolorallocate(). | ||||
|                          "ext/gd/tests/bug53504.phpt" | ||||
|                          ;; Wrong image size after scaling an image. | ||||
|                          "ext/gd/tests/bug73272.phpt" | ||||
|                          ;; Expects iconv to detect illegal characters, instead gets | ||||
|                          ;; "unknown error (84)" and heap corruption(!). | ||||
|                          "ext/iconv/tests/bug48147.phpt" | ||||
|                          ;; Expects illegal character ".", gets "=?utf-8?Q?." | ||||
|                          "ext/iconv/tests/bug51250.phpt" | ||||
|                          ;; @iconv() does not return expected output. | ||||
|                          "ext/iconv/tests/iconv003.phpt" | ||||
|                          ;; iconv throws "buffer length exceeded" on some string checks. | ||||
|                          "ext/iconv/tests/iconv_mime_encode.phpt" | ||||
|                          ;; file_get_contents(): iconv stream filter | ||||
|                          ;; ("ISO-8859-1"=>"UTF-8") unknown error. | ||||
|                          "ext/standard/tests/file/bug43008.phpt" | ||||
|                          ;; Table data not created in sqlite(?). | ||||
|                          "ext/pdo_sqlite/tests/bug_42589.phpt")) | ||||
| 
 | ||||
|              ;; Skip tests requiring network access. | ||||
|              (setenv "SKIP_ONLINE_TESTS" "1") | ||||
|              ;; Without this variable, 'make test' passes regardless of failures. | ||||
|              (setenv "REPORT_EXIT_STATUS" "1") | ||||
|              #t))) | ||||
|        #:test-target "test")) | ||||
|     (inputs | ||||
|      `(("aspell" ,aspell) | ||||
|        ("bzip2" ,bzip2) | ||||
|        ("curl" ,curl) | ||||
|        ("cyrus-sasl" ,cyrus-sasl) | ||||
|        ("freetype" ,freetype) | ||||
|        ("gd" ,gd-for-php) | ||||
|        ("gdbm" ,gdbm) | ||||
|        ("glibc" ,glibc) | ||||
|        ("gmp" ,gmp) | ||||
|        ("libgcrypt" ,libgcrypt) | ||||
|        ("libjpeg" ,libjpeg) | ||||
|        ("libpng" ,libpng) | ||||
|        ("libwebp" ,libwebp) | ||||
|        ("libxml2" ,libxml2) | ||||
|        ("libxpm" ,libxpm) | ||||
|        ("libxslt" ,libxslt) | ||||
|        ("libx11" ,libx11) | ||||
|        ("oniguruma" ,oniguruma) | ||||
|        ("openldap" ,openldap) | ||||
|        ("openssl" ,openssl) | ||||
|        ("pcre" ,pcre) | ||||
|        ("postgresql" ,postgresql) | ||||
|        ("readline" ,readline) | ||||
|        ("sqlite" ,sqlite-3.15.1) | ||||
|        ("tidy" ,tidy) | ||||
|        ("zip" ,zip) | ||||
|        ("zlib" ,zlib))) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config) | ||||
|        ("bison" ,bison) | ||||
|        ("intltool" ,intltool) | ||||
|        ("procps" ,procps)))         ; For tests. | ||||
|     (synopsis "PHP programming language") | ||||
|     (description | ||||
|       "PHP (PHP Hypertext Processor) is a server-side (CGI) scripting | ||||
| language designed primarily for web development but is also used as | ||||
| a general-purpose programming language.  PHP code may be embedded into | ||||
| HTML code, or it can be used in combination with various web template | ||||
| systems, web content management systems and web frameworks." ) | ||||
|     (license (list | ||||
|               (license:non-copyleft "file://LICENSE")       ; The PHP license. | ||||
|               (license:non-copyleft "file://Zend/LICENSE")  ; The Zend license. | ||||
|               license:lgpl2.1                               ; ext/mbstring/libmbfl | ||||
|               license:lgpl2.1+                              ; ext/bcmath/libbcmath | ||||
|               license:bsd-2                                 ; ext/fileinfo/libmagic | ||||
|               license:expat))))                             ; ext/date/lib | ||||
|  | @ -212,7 +212,7 @@ including psyced.") | |||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config) | ||||
|        ("bison" ,bison) | ||||
|        ("gnu-gettext" ,gnu-gettext) | ||||
|        ("gettext" ,gettext-minimal) | ||||
|        ("help2man" ,help2man) | ||||
|        ("autoconf" ,autoconf) | ||||
|        ("automake" ,automake))) | ||||
|  |  | |||
|  | @ -453,14 +453,14 @@ pidof, tty, taskset, pmap.") | |||
| (define-public python-passlib | ||||
|   (package | ||||
|     (name "python-passlib") | ||||
|     (version "1.6.5") | ||||
|     (version "1.7.0") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (pypi-uri "passlib" version)) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "1z27wdxs5rj5xhhqfzvzn3yg682irkxw6dcs5jj7mcf97psk8gd8")))) | ||||
|          "1vdbqsa1a31s98fxkinl052q8nnpvbxnb83qanxfpi2p6c2zdr0b")))) | ||||
|     (build-system python-build-system) | ||||
|     (native-inputs | ||||
|      `(("python-nose" ,python-nose) | ||||
|  | @ -1620,6 +1620,8 @@ standard library.") | |||
|         (base32 | ||||
|          "1ckvrypyvb7jbqlgwdz0y337ajagjv7dgxyns326nqwypn1wpq0i")))) | ||||
|     (build-system python-build-system) | ||||
|     (arguments | ||||
|      `(#:tests? #f)) ; Currently pafy can not find itself in the tests | ||||
|     (propagated-inputs | ||||
|      ;; Youtube-dl is a python package which is imported in the file | ||||
|      ;; "backend_youtube_dl.py", therefore it needs to be propagated. | ||||
|  | @ -2326,13 +2328,13 @@ files.") | |||
| (define-public python-pyld | ||||
|   (package | ||||
|     (name "python-pyld") | ||||
|     (version "0.6.8") | ||||
|     (version "0.7.1") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (pypi-uri "PyLD" version)) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0k881ffazpf8q1z8862g4bb3pzwpnz9whrci2mf311mvn1qbyqad")))) | ||||
|                 "1m0fs6897vxfkf7awah5i66i7b7smm5fnywf1w50fpzyfbfhr156")))) | ||||
|     (build-system python-build-system) | ||||
|     (inputs | ||||
|      `(("python-setuptools" ,python-setuptools))) | ||||
|  | @ -8200,13 +8202,13 @@ processes across test runs.") | |||
| (define-public python-icalendar | ||||
|   (package | ||||
|     (name "python-icalendar") | ||||
|     (version "3.10") | ||||
|     (version "3.11") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (pypi-uri "icalendar" version)) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "01amnk3621s7fagfla86npd25knbqirchg7h1jpqxqp103d02bs7")))) | ||||
|                "01v2f3swd5s72x65cdihw83dx1z799b4i49a6ncg7vqmcm20wapd")))) | ||||
|     (build-system python-build-system) | ||||
|     (propagated-inputs | ||||
|      `(("python-dateutil-2" ,python-dateutil-2) | ||||
|  |  | |||
|  | @ -117,7 +117,6 @@ | |||
|                  (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$")) | ||||
|  |  | |||
|  | @ -102,7 +102,7 @@ a focus on simplicity and productivity.") | |||
| 
 | ||||
| (define-public ruby-2.2 | ||||
|   (package (inherit ruby) | ||||
|     (version "2.2.5") | ||||
|     (version "2.2.6") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|  | @ -111,7 +111,7 @@ a focus on simplicity and productivity.") | |||
|                            "/ruby-" version ".tar.xz")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "1mw7bzw76g5w37cwhb57r6gxcl2vn9lfrlyf4h4xms3qlnhflvzq")))))) | ||||
|          "0fbk2pyjphynj4kxn27vb5rsq6brr3y85p784jd1rxwws30fq54l")))))) | ||||
| 
 | ||||
| (define-public ruby-2.1 | ||||
|   (package (inherit ruby) | ||||
|  | @ -4178,3 +4178,25 @@ patterns.") | |||
| libraries for compiling Ruby native extensions.") | ||||
|     (home-page "https://github.com/ruby-gnome2/pkg-config") | ||||
|     (license license:lgpl2.0+))) | ||||
| 
 | ||||
| (define-public ruby-net-http-digest-auth | ||||
|   (package | ||||
|     (name "ruby-net-http-digest-auth") | ||||
|     (version "1.4") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (rubygems-uri "net-http-digest_auth" version)) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "14801gr34g0rmqz9pv4rkfa3crfdbyfk6r48vpg5a5407v0sixqi")))) | ||||
|     (build-system ruby-build-system) | ||||
|     (native-inputs | ||||
|      `(("ruby-hoe" ,ruby-hoe))) | ||||
|     (synopsis "RFC 2617 HTTP digest authentication library") | ||||
|     (description | ||||
|      "This library implements HTTP's digest authentication scheme based on | ||||
| RFC 2617.  This enables the use of the digest authentication scheme instead | ||||
| of the more insecure basic authentication scheme.") | ||||
|     (home-page "http://github.com/drbrain/net-http-digest_auth") | ||||
|     (license license:expat))) | ||||
|  |  | |||
|  | @ -288,14 +288,14 @@ ksh, and tcsh.") | |||
| (define-public xonsh | ||||
|   (package | ||||
|     (name "xonsh") | ||||
|     (version "0.4.6") | ||||
|     (version "0.4.7") | ||||
|     (source | ||||
|       (origin | ||||
|         (method url-fetch) | ||||
|         (uri (pypi-uri "xonsh" version)) | ||||
|         (sha256 | ||||
|           (base32 | ||||
|             "0byxd9kjl99q2pyvjh9jy18l0di1i35wr0qqgnw4i6jh6ig3zcki")) | ||||
|             "04b0z41mxiwsp5rl21fzrixcdmx2kndjlh4gn3582qfga9hihf20")) | ||||
|         (modules '((guix build utils))) | ||||
|         (snippet | ||||
|          `(begin | ||||
|  |  | |||
|  | @ -53,7 +53,7 @@ | |||
|        #:make-flags (list (string-append "prefix=" (assoc-ref %outputs "out"))) | ||||
|        #:test-target "test")) | ||||
|     (native-inputs | ||||
|      `(("gettext" ,gnu-gettext) | ||||
|      `(("gettext" ,gettext-minimal) | ||||
|        ("perl" ,perl) | ||||
|        ("pkg-config" ,pkg-config) | ||||
|        ("ruby" ,ruby))) ; for tests | ||||
|  |  | |||
|  | @ -134,9 +134,8 @@ to initiate and control SIP sessions.") | |||
|    (version "4.1.0") | ||||
|    (source (origin | ||||
|             (method url-fetch) | ||||
|             (uri (string-append | ||||
|                   "http://download.savannah.gnu.org/releases/exosip/libeXosip2-" | ||||
|                   version ".tar.gz")) | ||||
|             (uri (string-append "mirror://savannah/exosip/libeXosip2-" | ||||
|                                 version ".tar.gz")) | ||||
|             (sha256 (base32 | ||||
|                      "17cna8kpc8nk1si419vgr6r42k2lda0rdk50vlxrw8rzg0xp2xrw")))) | ||||
|    (build-system gnu-build-system) | ||||
|  |  | |||
|  | @ -12,6 +12,7 @@ | |||
| ;;; Copyright © 2016 Dmitry Nikolaev <cameltheman@gmail.com> | ||||
| ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca> | ||||
| ;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is> | ||||
| ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -51,6 +52,7 @@ | |||
|   #:use-module (gnu packages base) | ||||
|   #:use-module (gnu packages bison) | ||||
|   #:use-module (gnu packages cdrom) | ||||
|   #:use-module (gnu packages cmake) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages curl) | ||||
|   #:use-module (gnu packages databases) | ||||
|  | @ -64,11 +66,14 @@ | |||
|   #:use-module (gnu packages gl) | ||||
|   #:use-module (gnu packages glib) | ||||
|   #:use-module (gnu packages guile) | ||||
|   #:use-module (gnu packages gnome) | ||||
|   #:use-module (gnu packages gnupg) | ||||
|   #:use-module (gnu packages gstreamer) | ||||
|   #:use-module (gnu packages gtk) | ||||
|   #:use-module (gnu packages image) | ||||
|   #:use-module (gnu packages linux) | ||||
|   #:use-module (gnu packages lua) | ||||
|   #:use-module (gnu packages m4) | ||||
|   #:use-module (gnu packages mp3) | ||||
|   #:use-module (gnu packages ncurses) | ||||
|   #:use-module (gnu packages ocr) | ||||
|  | @ -85,6 +90,7 @@ | |||
|   #:use-module (gnu packages tls) | ||||
|   #:use-module (gnu packages version-control) | ||||
|   #:use-module (gnu packages web) | ||||
|   #:use-module (gnu packages webkit) | ||||
|   #:use-module (gnu packages xdisorg) | ||||
|   #:use-module (gnu packages xiph) | ||||
|   #:use-module (gnu packages xml) | ||||
|  | @ -827,7 +833,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.") | |||
| (define-public mpv | ||||
|   (package | ||||
|     (name "mpv") | ||||
|     (version "0.21.0") | ||||
|     (version "0.22.0") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|  | @ -835,7 +841,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.") | |||
|                     ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1lwvvhldqrkp44zdm3wbi7qrsln13s8ympwwckqhwl4whp78wpyh")) | ||||
|                 "1xl2a0nfbkcq00f41m50fmfz9hl7hzpk7cq7j38r38rp1s7sryf0")) | ||||
|               (file-name (string-append name "-" version ".tar.gz")))) | ||||
|     (build-system waf-build-system) | ||||
|     (native-inputs | ||||
|  | @ -1478,7 +1484,7 @@ be used for realtime video capture via Linux-specific APIs.") | |||
| (define-public obs | ||||
|   (package | ||||
|     (name "obs") | ||||
|     (version "0.16.2") | ||||
|     (version "0.16.6") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "https://github.com/jp9000/obs-studio" | ||||
|  | @ -1486,7 +1492,7 @@ be used for realtime video capture via Linux-specific APIs.") | |||
|               (file-name (string-append name "-" version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0p2grxyaf79hb3nlja23xp7b2vc1w18llvzcyhnjn2lhwfjabcgm")))) | ||||
|                 "00vwdnf0gnwp029sznsr0s4lcky3brxbmpy0ch7igjpk5sf6mkqp")))) | ||||
|     (build-system cmake-build-system) | ||||
|     (arguments | ||||
|      `(#:tests? #f ; no tests | ||||
|  | @ -1702,6 +1708,12 @@ Content System specification.") | |||
|         (base32 | ||||
|          "1s7h35yx6f0szf8mm8612ic913w3v05m2kwphjfcxnpq0ammhyci")))) | ||||
|     (build-system python-build-system) | ||||
|     (arguments | ||||
|      ;; Tests need to be disabled until #556 upstream is fixed. It reads as if the | ||||
|      ;; test suite results differ depending on the country and also introduce | ||||
|      ;; non-determinism in the tests. | ||||
|      ;; https://github.com/mps-youtube/mps-youtube/issues/556 | ||||
|      `(#:tests? #f)) | ||||
|     (propagated-inputs | ||||
|      `(("python-pafy" ,python-pafy) | ||||
|        ("python-pygobject" ,python-pygobject))) ; For mpris2 support | ||||
|  | @ -1715,3 +1727,106 @@ It can use either mpv or mplayer for playback, and for conversion of | |||
| formats ffmpeg or libav is used.  Users should install one of the | ||||
| supported players in addition to this package.") | ||||
|     (license license:gpl3+))) | ||||
| 
 | ||||
| (define-public handbrake | ||||
|   (package | ||||
|     (name "handbrake") | ||||
|     (version "0.10.5") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "https://handbrake.fr/rotation.php?file=" | ||||
|                                   "HandBrake-" version ".tar.bz2")) | ||||
|               (file-name (string-append "handbrake-" version ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1w720y3bplkz187wgvy4a4xm0vpppg45mlni55l6yi8v2bfk14pv")) | ||||
|               (patches (search-patches "handbrake-pkg-config-path.patch")) | ||||
|               (modules '((guix build utils))) | ||||
|               (snippet | ||||
|                ;; Remove bundled libraries and source not necessary for | ||||
|                ;; running under a GNU environment. | ||||
|                '(begin | ||||
|                   (for-each delete-file-recursively '("contrib" "macosx" "win")) | ||||
|                   #t)))) | ||||
|     (build-system  glib-or-gtk-build-system) | ||||
|     (native-inputs | ||||
|      `(("automake" ,automake)           ;gui subpackage must be bootstrapped | ||||
|        ("autoconf" ,autoconf) | ||||
|        ("curl" ,curl)                   ;not actually used, but tested for | ||||
|        ("intltool" ,intltool) | ||||
|        ("libtool" ,libtool) | ||||
|        ("pkg-config" ,pkg-config) | ||||
|        ("python" ,python-2)))           ;for configuration | ||||
|     (inputs | ||||
|      `(("bzip2" ,bzip2) | ||||
|        ("dbus-glib" ,dbus-glib) | ||||
|        ("ffmpeg" ,ffmpeg) | ||||
|        ("fontconfig" ,fontconfig) | ||||
|        ("freetype" ,freetype) | ||||
|        ("glib" ,glib) | ||||
|        ("gstreamer" ,gstreamer) | ||||
|        ("gst-plugins-base" ,gst-plugins-base) | ||||
|        ("gtk+" ,gtk+) | ||||
|        ("lame" ,lame) | ||||
|        ("libass" ,libass) | ||||
|        ("libbluray" ,libbluray) | ||||
|        ("libdvdnav" ,libdvdnav) | ||||
|        ("libdvdread" ,libdvdread) | ||||
|        ("libgudev" ,libgudev) | ||||
|        ("libmpeg2" ,libmpeg2) | ||||
|        ("libnotify" ,libnotify) | ||||
|        ("libogg" ,libogg) | ||||
|        ("libsamplerate" ,libsamplerate) | ||||
|        ("libtheora" ,libtheora) | ||||
|        ("libvorbis" ,libvorbis) | ||||
|        ("libvpx" ,libvpx) | ||||
|        ("libxml2" ,libxml2) | ||||
|        ("libx264" ,libx264) | ||||
|        ("x265" ,x265) | ||||
|        ("zlib" ,zlib))) | ||||
|     (arguments | ||||
|      `(#:tests? #f             ;tests require Ruby and claim to be unsupported | ||||
|        #:phases | ||||
|        (modify-phases %standard-phases | ||||
|          (add-before 'patch-source-shebangs 'bootstrap-gtk | ||||
|            ;; Run bootstrap ahead of time so that shebangs get patched. | ||||
|            (lambda _ | ||||
|              (setenv "CONFIG_SHELL" (which "sh")) | ||||
|              (setenv "NOCONFIGURE" "1") | ||||
|              ;; Patch the Makefile so that it doesn't bootstrap again. | ||||
|              (substitute* "gtk/module.rules" | ||||
|                ((".*autogen\\.sh.*") "")) | ||||
|              (zero? (system* "sh" "./gtk/autogen.sh")))) | ||||
|          (add-before 'configure 'disable-contrib | ||||
|            (lambda _ | ||||
|              (substitute* "make/include/main.defs" | ||||
|                ;; Disable unconditional inclusion of some "contrib" | ||||
|                ;; libraries (ffmpeg, libvpx, libdvdread, libdvdnav, | ||||
|                ;; and libbluray), which would lead to fetching and | ||||
|                ;; building of these libraries.  Use our own instead. | ||||
|                (("MODULES \\+= contrib") "# MODULES += contrib")) | ||||
|              #t)) | ||||
|          (add-before 'configure 'fix-x265-linking | ||||
|            (lambda _ | ||||
|              (substitute* "test/module.defs" | ||||
|                ;; Fix missing library during linking error | ||||
|                (("TEST.GCC.l =") "TEST.GCC.l = x265")) | ||||
|              #t)) | ||||
|          (replace 'configure | ||||
|            (lambda* (#:key outputs configure-flags #:allow-other-keys) | ||||
|              ;; 'configure' is not an autoconf-generated script, and | ||||
|              ;; errors on unrecognized arguments, | ||||
|              ;; e.g. --enable-fast-install | ||||
|              (let ((out (assoc-ref outputs "out"))) | ||||
|                (zero? (apply system* "./configure" | ||||
|                              (string-append "--prefix=" out) | ||||
|                              (or configure-flags '())))))) | ||||
|          (add-after 'configure 'chdir-build | ||||
|            (lambda _ (chdir "./build") #t))))) | ||||
|     (home-page "https://handbrake.fr") | ||||
|     (synopsis "Video transcoder") | ||||
|     (description | ||||
|      "HandBrake is a tool for converting video from any format to a selection | ||||
| of modern, widely supported codecs.") | ||||
|     ;; Most under GPL version 2 or later, and portions under BSD 3 Clause | ||||
|     (license (list license:gpl2+ license:bsd-3)))) | ||||
|  |  | |||
|  | @ -49,7 +49,7 @@ | |||
| (define-public vim | ||||
|   (package | ||||
|     (name "vim") | ||||
|     (version "8.0.0073") | ||||
|     (version "8.0.0095") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "https://github.com/vim/vim/archive/v" | ||||
|  | @ -57,7 +57,7 @@ | |||
|              (file-name (string-append name "-" version ".tar.gz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "1snbzgj89scjs0v3m86p53wvpal9jgs1s6i3hv7jyknpnjvqv5q5")))) | ||||
|                "1whib2zzqdpgfhpr7ymqxj3das6iyiapvx0izw4147mkg9yanmp7")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:test-target "test" | ||||
|  | @ -129,7 +129,7 @@ configuration files.") | |||
|        ("fontconfig" ,fontconfig) | ||||
|        ("freetype" ,freetype) | ||||
|        ("gdk-pixbuf" ,gdk-pixbuf) | ||||
|        ("gettext" ,gnu-gettext) | ||||
|        ("gettext" ,gettext-minimal) | ||||
|        ("glib" ,glib) | ||||
|        ("gpm" ,gpm) | ||||
|        ("gtk" ,gtk+-2) | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ | |||
| ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> | ||||
| ;;; Copyright © 2016 Leo Famulari <leo@famulari.name> | ||||
| ;;; Copyright © 2016 Kei Kebreau <kei@openmailbox.org> | ||||
| ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -35,7 +36,7 @@ | |||
| (define-public w3m | ||||
|   (package | ||||
|     (name "w3m") | ||||
|     (version "0.5.3+git20161031") | ||||
|     (version "0.5.3+git20161120") | ||||
|     (source (origin | ||||
|               (method git-fetch) | ||||
|               ;; Debian's fork of w3m is the only one that is still | ||||
|  | @ -46,16 +47,17 @@ | |||
|               (file-name (string-append "w3m-" version "-checkout")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "142vkkmsk76wj9w6r4y2pa1hmy1kkzmc73an9zchx0ikm2z92x6s")))) | ||||
|                 "06n5a9jdyihkd4xdjmyci32dpqp1k2l5awia5g9ng0bn256bacdc")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments `(#:tests? #f  ; no check target | ||||
|                  #:phases (alist-cons-before | ||||
|                            'configure 'fix-perl | ||||
|                            (lambda _ | ||||
|                              (substitute* '("scripts/w3mmail.cgi.in" | ||||
|                                             "scripts/dirlist.cgi.in") | ||||
|                                (("@PERL@") (which "perl")))) | ||||
|                            %standard-phases))) | ||||
|     (arguments | ||||
|      '(#:tests? #f  ; no check target | ||||
|        #:phases | ||||
|        (modify-phases %standard-phases | ||||
|          (add-before 'configure 'fix-perl | ||||
|            (lambda _ (substitute* '("scripts/w3mmail.cgi.in" | ||||
|                                     "scripts/dirlist.cgi.in") | ||||
|                        (("@PERL@") (which "perl"))) | ||||
|              #t))))) | ||||
|     (inputs | ||||
|      `(("libgc" ,libgc) | ||||
|        ("ncurses" ,ncurses) | ||||
|  |  | |||
|  | @ -299,7 +299,7 @@ prompt.") | |||
|     (synopsis "Tiling window manager") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "http://hackage.haskell.org/package/xmonad/" | ||||
|               (uri (string-append "mirror://hackage/package/xmonad/" | ||||
|                                   name "-" version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|  | @ -355,7 +355,7 @@ tiled on several screens.") | |||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append "http://hackage.haskell.org/package/xmonad-contrib/" | ||||
|        (uri (string-append "mirror://hackage/package/xmonad-contrib/" | ||||
|                            "xmonad-contrib-" version ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org> | ||||
| ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org> | ||||
| ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org> | ||||
| ;;; Copyright © 2014, 2015, 2016 Alex Kost <alezost@gmail.com> | ||||
| ;;; Copyright © 2013, 2015 Ludovic Courtès <ludo@gnu.org> | ||||
|  | @ -15,6 +15,7 @@ | |||
| ;;; Copyright © 2016 Leo Famulari <leo@famulari.name> | ||||
| ;;; Copyright © 2016 Alex Kost <alezost@gmail.com> | ||||
| ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com> | ||||
| ;;; Copyright © 2016 Petter <petter@mykolab.ch> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -241,6 +242,7 @@ following the mouse.") | |||
|   (package | ||||
|     (name "pixman") | ||||
|     (version "0.34.0") | ||||
|     (replacement pixman/fixed) | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|  | @ -262,6 +264,13 @@ manipulation, providing features such as image compositing and trapezoid | |||
| rasterisation.") | ||||
|     (license license:x11))) | ||||
| 
 | ||||
| (define pixman/fixed | ||||
|   (package | ||||
|     (inherit pixman) | ||||
|     (source (origin | ||||
|               (inherit (package-source pixman)) | ||||
|               (patches (search-patches "pixman-CVE-2016-5296.patch")))))) | ||||
| 
 | ||||
| 
 | ||||
| (define-public libdrm | ||||
|   (package | ||||
|  | @ -1062,3 +1071,43 @@ XCB util-xrm module provides the following libraries: | |||
| 
 | ||||
| - xrm: utility functions for the X resource manager.") | ||||
|     (license license:x11))) | ||||
| 
 | ||||
| (define-public xcalib | ||||
|   (package | ||||
|     (name "xcalib") | ||||
|     (version "0.8") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://sourceforge/xcalib/xcalib/" version | ||||
|                                   "/xcalib-source-" version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1rh6xb51c5xz926dnn82a2fn643g0sr4a8z66rn6yi7523kjw4ca")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:make-flags '("CC=gcc") | ||||
|        #:tests? #f   ; No test suite | ||||
|        #:phases (modify-phases %standard-phases | ||||
|                   (delete 'configure) | ||||
|                   (replace 'install | ||||
|                     (lambda* (#:key outputs #:allow-other-keys) | ||||
|                       (let* ((out (assoc-ref outputs "out")) | ||||
|                              (bin (string-append out "/bin"))) | ||||
|                         (install-file "xcalib" bin)))) | ||||
|                   (add-after 'install 'install-doc | ||||
|                     (lambda* (#:key outputs #:allow-other-keys) | ||||
|                       (let ((doc (string-append(assoc-ref outputs "out") | ||||
|                                                "/share/doc/xcalib"))) | ||||
|                         (install-file "README" doc) | ||||
|                         ;; Avoid unspecified return value. | ||||
|                         #t)))))) | ||||
|     (inputs `(("libx11", libx11) | ||||
|               ("libxext", libxext) | ||||
|               ("libxxf86vm", libxxf86vm))) | ||||
|     (synopsis "Tiny monitor calibration loader for XFree86 (or X.org)") | ||||
|     (description "xcalib is a tiny tool to load the content of vcgt-Tags in ICC | ||||
| profiles to the video card's gamma ramp.  It does work with most video card | ||||
| drivers except the generic VESA driver.  Alter brightness, contrast, RGB, and | ||||
| invert colors on a specific display/screen.") | ||||
|     (home-page "http://xcalib.sourceforge.net/") | ||||
|     (license license:gpl2))) | ||||
|  |  | |||
|  | @ -356,7 +356,7 @@ decoding .opus files.") | |||
| (define opusfile | ||||
|   (package | ||||
|     (name "opusfile") | ||||
|     (version "0.7") | ||||
|     (version "0.8") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|  | @ -364,7 +364,7 @@ decoding .opus files.") | |||
|                     ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "00f3wwjv3hxwg05g22s6mkkxikz80ljsn70g39cmi43jph9ysawy")))) | ||||
|                 "192mp2jgn5s9815h31ybzsfipmbppmdhwx1dymrk26xarz9iw8rc")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (propagated-inputs | ||||
|      `(("opus" ,opus))) | ||||
|  |  | |||
|  | @ -105,15 +105,17 @@ database { | |||
|         (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))))) | ||||
|   (let ((dicod      (file-append (dicod-configuration-dico config) | ||||
|                                  "/bin/dicod")) | ||||
|         (dicod.conf (dicod-configuration-file config))) | ||||
|     (list (shepherd-service | ||||
|            (provision '(dicod)) | ||||
|            (documentation "Run the dicod daemon.") | ||||
|            (start #~(make-forkexec-constructor | ||||
|                      (list #$dicod "--foreground" | ||||
|                            (string-append "--config=" #$dicod.conf)) | ||||
|                      #:user "dicod" #:group "dicod")) | ||||
|           (stop #~(make-kill-destructor)))))) | ||||
| 
 | ||||
| (define dicod-service-type | ||||
|   (service-type | ||||
|  |  | |||
|  | @ -62,6 +62,7 @@ | |||
|             bitlbee-service | ||||
|             bitlbee-service-type | ||||
| 
 | ||||
|             wicd-service-type | ||||
|             wicd-service | ||||
|             network-manager-service | ||||
|             connman-service | ||||
|  | @ -112,21 +113,19 @@ fe80::1%lo0 apps.facebook.com\n") | |||
|   static-networking? | ||||
|   (interface static-networking-interface) | ||||
|   (ip static-networking-ip) | ||||
|   (netmask static-networking-netmask | ||||
|            (default #f)) | ||||
|   (gateway static-networking-gateway) | ||||
|   (provision static-networking-provision) | ||||
|   (name-servers static-networking-name-servers) | ||||
|   (net-tools static-networking-net-tools)) | ||||
|   (name-servers static-networking-name-servers)) | ||||
| 
 | ||||
| (define static-networking-service-type | ||||
|   (shepherd-service-type | ||||
|    'static-networking | ||||
|    (match-lambda | ||||
|      (($ <static-networking> interface ip gateway provision | ||||
|                              name-servers net-tools) | ||||
|      (($ <static-networking> interface ip netmask gateway provision | ||||
|                              name-servers) | ||||
|       (let ((loopback? (memq 'loopback provision))) | ||||
| 
 | ||||
|         ;; TODO: Eventually replace 'route' with bindings for the appropriate | ||||
|         ;; ioctls. | ||||
|         (shepherd-service | ||||
| 
 | ||||
|          ;; Unless we're providing the loopback interface, wait for udev to be up | ||||
|  | @ -139,18 +138,28 @@ fe80::1%lo0 apps.facebook.com\n") | |||
|          (start #~(lambda _ | ||||
|                     ;; Return #t if successfully started. | ||||
|                     (let* ((addr     (inet-pton AF_INET #$ip)) | ||||
|                            (sockaddr (make-socket-address AF_INET addr 0))) | ||||
|                            (sockaddr (make-socket-address AF_INET addr 0)) | ||||
|                            (mask     (and #$netmask | ||||
|                                           (inet-pton AF_INET #$netmask))) | ||||
|                            (maskaddr (and mask | ||||
|                                           (make-socket-address AF_INET | ||||
|                                                                mask 0))) | ||||
|                            (gateway  (and #$gateway | ||||
|                                           (inet-pton AF_INET #$gateway))) | ||||
|                            (gatewayaddr (and gateway | ||||
|                                              (make-socket-address AF_INET | ||||
|                                                                   gateway 0)))) | ||||
|                       (configure-network-interface #$interface sockaddr | ||||
|                                                    (logior IFF_UP | ||||
|                                                            #$(if loopback? | ||||
|                                                                  #~IFF_LOOPBACK | ||||
|                                                                  0)))) | ||||
|                     #$(if gateway | ||||
|                           #~(zero? (system* (string-append #$net-tools | ||||
|                                                            "/sbin/route") | ||||
|                                             "add" "-net" "default" | ||||
|                                             "gw" #$gateway)) | ||||
|                           #t) | ||||
|                                                                  0)) | ||||
|                                                    #:netmask maskaddr) | ||||
|                       (when gateway | ||||
|                         (let ((sock (socket AF_INET SOCK_DGRAM 0))) | ||||
|                           (add-network-route/gateway sock gatewayaddr) | ||||
|                           (close-port sock)))) | ||||
| 
 | ||||
|                     #$(if (pair? name-servers) | ||||
|                           #~(call-with-output-file "/etc/resolv.conf" | ||||
|                               (lambda (port) | ||||
|  | @ -160,35 +169,34 @@ fe80::1%lo0 apps.facebook.com\n") | |||
|                                 (for-each (lambda (server) | ||||
|                                             (format port "nameserver ~a~%" | ||||
|                                                     server)) | ||||
|                                           '#$name-servers))) | ||||
|                                           '#$name-servers) | ||||
|                                 #t)) | ||||
|                           #t))) | ||||
|          (stop #~(lambda _ | ||||
|                    ;; Return #f is successfully stopped. | ||||
|                    (let ((sock (socket AF_INET SOCK_STREAM 0))) | ||||
|                      (when #$gateway | ||||
|                        (delete-network-route sock | ||||
|                                              (make-socket-address | ||||
|                                               AF_INET INADDR_ANY 0))) | ||||
|                      (set-network-interface-flags sock #$interface 0) | ||||
|                      (close-port sock)) | ||||
|                    (not #$(if gateway | ||||
|                               #~(system* (string-append #$net-tools | ||||
|                                                         "/sbin/route") | ||||
|                                          "del" "-net" "default") | ||||
|                               #t)))) | ||||
|                      (close-port sock) | ||||
|                      #f))) | ||||
|          (respawn? #f))))))) | ||||
| 
 | ||||
| (define* (static-networking-service interface ip | ||||
|                                     #:key | ||||
|                                     gateway | ||||
|                                     netmask gateway | ||||
|                                     (provision '(networking)) | ||||
|                                     (name-servers '()) | ||||
|                                     (net-tools net-tools)) | ||||
|                                     (name-servers '())) | ||||
|   "Return a service that starts @var{interface} with address @var{ip}.  If | ||||
| @var{gateway} is true, it must be a string specifying the default network | ||||
| gateway." | ||||
| @var{netmask} is true, use it as the network mask.  If @var{gateway} is true, | ||||
| it must be a string specifying the default network gateway." | ||||
|   (service static-networking-service-type | ||||
|            (static-networking (interface interface) (ip ip) | ||||
|                               (gateway gateway) | ||||
|                               (netmask netmask) (gateway gateway) | ||||
|                               (provision provision) | ||||
|                               (name-servers name-servers) | ||||
|                               (net-tools net-tools)))) | ||||
|                               (name-servers name-servers)))) | ||||
| 
 | ||||
| (define dhcp-client-service-type | ||||
|   (shepherd-service-type | ||||
|  |  | |||
							
								
								
									
										141
									
								
								gnu/services/version-control.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								gnu/services/version-control.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,141 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is> | ||||
| ;;; Copyright © 2016 Sou Bunnbu <iyzsong@member.fsf.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 services version-control) | ||||
|   #:use-module (gnu services) | ||||
|   #:use-module (gnu services base) | ||||
|   #:use-module (gnu services shepherd) | ||||
|   #:use-module (gnu system shadow) | ||||
|   #:use-module (gnu packages version-control) | ||||
|   #:use-module (gnu packages admin) | ||||
|   #:use-module (guix records) | ||||
|   #:use-module (guix gexp) | ||||
|   #:use-module (srfi srfi-1) | ||||
|   #:use-module (srfi srfi-26) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:export (git-daemon-service | ||||
|             git-daemon-service-type | ||||
|             git-daemon-configuration | ||||
|             git-daemon-configuration?)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
| ;;; Version Control related services. | ||||
| ;;; | ||||
| ;;; Code: | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; Git daemon. | ||||
| ;;; | ||||
| 
 | ||||
| (define-record-type* <git-daemon-configuration> | ||||
|   git-daemon-configuration | ||||
|   make-git-daemon-configuration | ||||
|   git-daemon-configuration? | ||||
|   (package          git-daemon-configuration-package        ;package | ||||
|                     (default git)) | ||||
|   (export-all?      git-daemon-configuration-export-all     ;boolean | ||||
|                     (default #f)) | ||||
|   (base-path        git-daemon-configuration-base-path      ;string | #f | ||||
|                     (default "/srv/git")) | ||||
|   (user-path        git-daemon-configuration-user-path      ;string | #f | ||||
|                     (default #f)) | ||||
|   (listen           git-daemon-configuration-listen         ;list of string | ||||
|                     (default '())) | ||||
|   (port             git-daemon-configuration-port           ;number | #f | ||||
|                     (default #f)) | ||||
|   (whitelist        git-daemon-configuration-whitelist      ;list of string | ||||
|                     (default '())) | ||||
|   (extra-options    git-daemon-configuration-extra-options  ;list of string | ||||
|                     (default '()))) | ||||
| 
 | ||||
| (define git-daemon-shepherd-service | ||||
|   (match-lambda | ||||
|     (($ <git-daemon-configuration> | ||||
|         package export-all? base-path user-path | ||||
|         listen port whitelist extra-options) | ||||
|      (let* ((git     (file-append package "/bin/git")) | ||||
|             (command `(,git | ||||
|                        "daemon" "--syslog" "--reuseaddr" | ||||
|                        ,@(if export-all? | ||||
|                              '("--export-all") | ||||
|                              '()) | ||||
|                        ,@(if base-path | ||||
|                              `(,(string-append "--base-path=" base-path)) | ||||
|                              '()) | ||||
|                        ,@(if user-path | ||||
|                              `(,(string-append "--user-path=" user-path)) | ||||
|                              '()) | ||||
|                        ,@(map (cut string-append "--listen=" <>) listen) | ||||
|                        ,@(if port | ||||
|                              `(,(string-append | ||||
|                                  "--port=" (number->string port))) | ||||
|                              '()) | ||||
|                        ,@extra-options | ||||
|                        ,@whitelist))) | ||||
|        (list (shepherd-service | ||||
|               (documentation "Run the git-daemon.") | ||||
|               (requirement '(networking)) | ||||
|               (provision '(git-daemon)) | ||||
|               (start #~(make-forkexec-constructor '#$command | ||||
|                                                   #:user "git-daemon" | ||||
|                                                   #:group "git-daemon")) | ||||
|               (stop #~(make-kill-destructor)))))))) | ||||
| 
 | ||||
| (define %git-daemon-accounts | ||||
|   ;; User account and group for git-daemon. | ||||
|   (list (user-group | ||||
|          (name "git-daemon") | ||||
|          (system? #t)) | ||||
|         (user-account | ||||
|          (name "git-daemon") | ||||
|          (system? #t) | ||||
|          (group "git-daemon") | ||||
|          (comment "Git daemon user") | ||||
|          (home-directory "/var/empty") | ||||
|          (shell (file-append shadow "/sbin/nologin"))))) | ||||
| 
 | ||||
| (define (git-daemon-activation config) | ||||
|   "Return the activation gexp for git-daemon using CONFIG." | ||||
|   (let ((base-path (git-daemon-configuration-base-path config))) | ||||
|     #~(begin | ||||
|         (use-modules (guix build utils)) | ||||
|         ;; Create the 'base-path' directory when it's not '#f'. | ||||
|         (and=> #$base-path mkdir-p)))) | ||||
| 
 | ||||
| (define git-daemon-service-type | ||||
|   (service-type | ||||
|    (name 'git-daemon) | ||||
|    (extensions | ||||
|     (list (service-extension shepherd-root-service-type | ||||
|                              git-daemon-shepherd-service) | ||||
|           (service-extension account-service-type | ||||
|                              (const %git-daemon-accounts)) | ||||
|           (service-extension activation-service-type | ||||
|                              git-daemon-activation))))) | ||||
| 
 | ||||
| (define* (git-daemon-service #:key (config (git-daemon-configuration))) | ||||
|   "Return a service that runs @command{git daemon}, a simple TCP server to | ||||
| expose repositories over the Git protocol for annoymous access. | ||||
| 
 | ||||
| The optional @var{config} argument should be a | ||||
| @code{<git-daemon-configuration>} object, by default it allows read-only | ||||
| access to exported repositories under @file{/srv/git}." | ||||
|   (service git-daemon-service-type config)) | ||||
|  | @ -346,7 +346,8 @@ explicitly appear in OS." | |||
| 
 | ||||
| (define %base-firmware | ||||
|   ;; Firmware usable by default. | ||||
|   (list ath9k-htc-firmware)) | ||||
|   (list ath9k-htc-firmware | ||||
|         openfwwf-firmware)) | ||||
| 
 | ||||
| (define %base-packages | ||||
|   ;; Default set of packages globally visible.  It should include anything | ||||
|  |  | |||
|  | @ -317,7 +317,6 @@ of the GNU system as described by OS." | |||
|               (initrd (lambda (file-systems . rest) | ||||
|                         (apply base-initrd file-systems | ||||
|                                #:virtio? #t | ||||
|                                #:qemu-networking? #t | ||||
|                                rest))) | ||||
| 
 | ||||
|               ;; Force our own root file system. | ||||
|  | @ -386,7 +385,6 @@ environment with the store shared with the host.  MAPPINGS is a list of | |||
|               (apply base-initrd file-systems | ||||
|                      #:volatile-root? #t | ||||
|                      #:virtio? #t | ||||
|                      #:qemu-networking? #t | ||||
|                      rest))) | ||||
| 
 | ||||
|     ;; Disable swap. | ||||
|  |  | |||
|  | @ -150,14 +150,20 @@ info --version") | |||
|               (marionette-type "root\n\nid -un > logged-in\n" marionette) | ||||
| 
 | ||||
|               ;; It can take a while before the shell commands are executed. | ||||
|               (let loop ((i 0)) | ||||
|                 (unless (or (file-exists? "/root/logged-in") (> i 15)) | ||||
|                   (sleep 1) | ||||
|                   (loop (+ i 1)))) | ||||
|               (marionette-eval '(use-modules (rnrs io ports)) marionette) | ||||
|               (marionette-eval '(call-with-input-file "/root/logged-in" | ||||
|                                   get-string-all) | ||||
|                                marionette))) | ||||
|               (marionette-eval | ||||
|                '(let loop ((i 0)) | ||||
|                   (catch 'system-error | ||||
|                     (lambda () | ||||
|                       (call-with-input-file "/root/logged-in" | ||||
|                         get-string-all)) | ||||
|                     (lambda args | ||||
|                       (if (and (< i 15) (= ENOENT (system-error-errno args))) | ||||
|                           (begin | ||||
|                             (sleep 1) | ||||
|                             (loop (+ i 1))) | ||||
|                           (apply throw args))))) | ||||
|                marionette))) | ||||
| 
 | ||||
|           (test-assert "host name resolution" | ||||
|             (match (marionette-eval | ||||
|  |  | |||
|  | @ -87,12 +87,16 @@ | |||
|             all-network-interface-names | ||||
|             network-interface-names | ||||
|             network-interface-flags | ||||
|             network-interface-netmask | ||||
|             loopback-network-interface? | ||||
|             network-interface-address | ||||
|             set-network-interface-flags | ||||
|             set-network-interface-address | ||||
|             set-network-interface-netmask | ||||
|             set-network-interface-up | ||||
|             configure-network-interface | ||||
|             add-network-route/gateway | ||||
|             delete-network-route | ||||
| 
 | ||||
|             interface? | ||||
|             interface-name | ||||
|  | @ -202,7 +206,7 @@ result is the alignment of the \"most strictly aligned component\"." | |||
|                   types ...)))) | ||||
| 
 | ||||
| (define-syntax write-type | ||||
|   (syntax-rules (~ array) | ||||
|   (syntax-rules (~ array *) | ||||
|     ((_ bv offset (type ~ order) value) | ||||
|      (bytevector-uint-set! bv offset value | ||||
|                            (endianness order) (sizeof* type))) | ||||
|  | @ -215,6 +219,9 @@ result is the alignment of the \"most strictly aligned component\"." | |||
|            ((head . tail) | ||||
|             (write-type bv o type head) | ||||
|             (loop (+ 1 i) tail (+ o (sizeof* type)))))))) | ||||
|     ((_ bv offset '* value) | ||||
|      (bytevector-uint-set! bv offset (pointer-address value) | ||||
|                            (native-endianness) (sizeof* '*))) | ||||
|     ((_ bv offset type value) | ||||
|      (bytevector-uint-set! bv offset value | ||||
|                            (native-endianness) (sizeof* type))))) | ||||
|  | @ -262,6 +269,29 @@ result is the alignment of the \"most strictly aligned component\"." | |||
|                                         (align offset type0) | ||||
|                                         type0)))))) | ||||
| 
 | ||||
| (define-syntax define-c-struct-macro | ||||
|   (syntax-rules () | ||||
|     "Define NAME as a macro that can be queried to get information about the C | ||||
| struct it represents.  In particular: | ||||
| 
 | ||||
|   (NAME field-offset FIELD) | ||||
| 
 | ||||
| returns the offset in bytes of FIELD within the C struct represented by NAME." | ||||
|     ((_ name ((fields types) ...)) | ||||
|      (define-c-struct-macro name | ||||
|        (fields ...) 0 () | ||||
|        ((fields types) ...))) | ||||
|     ((_ name (fields ...) offset (clauses ...) ((field type) rest ...)) | ||||
|      (define-c-struct-macro name | ||||
|        (fields ...) | ||||
|        (+ (align offset type) (type-size type)) | ||||
|        (clauses ... ((_ field-offset field) (align offset type))) | ||||
|        (rest ...))) | ||||
|     ((_ name (fields ...) offset (clauses ...) ()) | ||||
|      (define-syntax name | ||||
|        (syntax-rules (field-offset fields ...) | ||||
|          clauses ...))))) | ||||
| 
 | ||||
| (define-syntax define-c-struct | ||||
|   (syntax-rules () | ||||
|     "Define SIZE as the size in bytes of the C structure made of FIELDS.  READ | ||||
|  | @ -269,6 +299,8 @@ as a deserializer and WRITE! as a serializer for the C structure with the | |||
| given TYPES.  READ uses WRAP-FIELDS to return its value." | ||||
|     ((_ name size wrap-fields read write! (fields types) ...) | ||||
|      (begin | ||||
|        (define-c-struct-macro name | ||||
|          ((fields types) ...)) | ||||
|        (define size | ||||
|          (struct-size 0 () types ...)) | ||||
|        (define (write! bv offset fields ...) | ||||
|  | @ -276,6 +308,12 @@ given TYPES.  READ uses WRAP-FIELDS to return its value." | |||
|        (define* (read bv #:optional (offset 0)) | ||||
|          (read-types wrap-fields bv offset (types ...) ())))))) | ||||
| 
 | ||||
| (define-syntax-rule (c-struct-field-offset type field) | ||||
|   "Return the offset in BYTES of FIELD within TYPE, where TYPE is a C struct | ||||
| defined with 'define-c-struct' and FIELD is a field identifier.  An | ||||
| expansion-time error is raised if FIELD does not exist in TYPE." | ||||
|   (type field-offset field)) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; FFI. | ||||
|  | @ -761,6 +799,22 @@ exception if it's already taken." | |||
|   (if (string-contains %host-type "linux") | ||||
|       #x8916                                      ;GNU/Linux | ||||
|       -1))                                        ;FIXME: GNU/Hurd? | ||||
| (define SIOCGIFNETMASK | ||||
|   (if (string-contains %host-type "linux") | ||||
|       #x891b                                      ;GNU/Linux | ||||
|       -1))                                        ;FIXME: GNU/Hurd? | ||||
| (define SIOCSIFNETMASK | ||||
|   (if (string-contains %host-type "linux") | ||||
|       #x891c                                      ;GNU/Linux | ||||
|       -1))                                        ;FIXME: GNU/Hurd? | ||||
| (define SIOCADDRT | ||||
|   (if (string-contains %host-type "linux") | ||||
|       #x890B                                      ;GNU/Linux | ||||
|       -1))                                        ;FIXME: GNU/Hurd? | ||||
| (define SIOCDELRT | ||||
|   (if (string-contains %host-type "linux") | ||||
|       #x890C                                      ;GNU/Linux | ||||
|       -1))                                        ;FIXME: GNU/Hurd? | ||||
| 
 | ||||
| ;; Flags and constants from <net/if.h>. | ||||
| 
 | ||||
|  | @ -770,10 +824,13 @@ exception if it's already taken." | |||
| 
 | ||||
| (define IF_NAMESIZE 16)                           ;maximum interface name size | ||||
| 
 | ||||
| (define ifconf-struct | ||||
|   ;; 'struct ifconf', from <net/if.h>. | ||||
|   (list int                                       ;int ifc_len | ||||
|         '*))                                      ;struct ifreq *ifc_ifcu | ||||
| (define-c-struct %ifconf-struct | ||||
|   sizeof-ifconf | ||||
|   list | ||||
|   read-ifconf | ||||
|   write-ifconf! | ||||
|   (length  int)                                   ;int ifc_len | ||||
|   (request '*))                                   ;struct ifreq *ifc_ifcu | ||||
| 
 | ||||
| (define ifreq-struct-size | ||||
|   ;; 'struct ifreq' begins with an array of IF_NAMESIZE bytes containing the | ||||
|  | @ -865,15 +922,18 @@ to interfaces that are currently up." | |||
|          (sock   (or sock (socket SOCK_STREAM AF_INET 0))) | ||||
|          (len    (* ifreq-struct-size 10)) | ||||
|          (reqs   (make-bytevector len)) | ||||
|          (conf   (make-c-struct ifconf-struct | ||||
|                                 (list len (bytevector->pointer reqs))))) | ||||
|          (conf   (make-bytevector sizeof-ifconf))) | ||||
|     (write-ifconf! conf 0 | ||||
|                    len (bytevector->pointer reqs)) | ||||
| 
 | ||||
|     (let-values (((ret err) | ||||
|                   (%ioctl (fileno sock) SIOCGIFCONF conf))) | ||||
|                   (%ioctl (fileno sock) SIOCGIFCONF | ||||
|                           (bytevector->pointer conf)))) | ||||
|       (when close? | ||||
|         (close-port sock)) | ||||
|       (if (zero? ret) | ||||
|           (bytevector->string-list reqs ifreq-struct-size | ||||
|                                    (match (parse-c-struct conf ifconf-struct) | ||||
|                                    (match (read-ifconf conf) | ||||
|                                      ((len . _) len))) | ||||
|           (throw 'system-error "network-interface-list" | ||||
|                  "network-interface-list: ~A" | ||||
|  | @ -961,6 +1021,22 @@ interface NAME." | |||
|                (list name (strerror err)) | ||||
|                (list err)))))) | ||||
| 
 | ||||
| (define (set-network-interface-netmask socket name sockaddr) | ||||
|   "Set the network mask of interface NAME to SOCKADDR." | ||||
|   (let ((req (make-bytevector ifreq-struct-size))) | ||||
|     (bytevector-copy! (string->utf8 name) 0 req 0 | ||||
|                       (min (string-length name) (- IF_NAMESIZE 1))) | ||||
|     ;; Set the 'ifr_addr' field. | ||||
|     (write-socket-address! sockaddr req IF_NAMESIZE) | ||||
|     (let-values (((ret err) | ||||
|                   (%ioctl (fileno socket) SIOCSIFNETMASK | ||||
|                           (bytevector->pointer req)))) | ||||
|       (unless (zero? ret) | ||||
|         (throw 'system-error "set-network-interface-netmask" | ||||
|                "set-network-interface-netmask on ~A: ~A" | ||||
|                (list name (strerror err)) | ||||
|                (list err)))))) | ||||
| 
 | ||||
| (define (network-interface-address socket name) | ||||
|   "Return the address of network interface NAME.  The result is an object of | ||||
| the same type as that returned by 'make-socket-address'." | ||||
|  | @ -977,15 +1053,35 @@ the same type as that returned by 'make-socket-address'." | |||
|                  (list name (strerror err)) | ||||
|                  (list err)))))) | ||||
| 
 | ||||
| (define (configure-network-interface name sockaddr flags) | ||||
| (define (network-interface-netmask socket name) | ||||
|   "Return the netmask of network interface NAME.  The result is an object of | ||||
| the same type as that returned by 'make-socket-address'." | ||||
|   (let ((req (make-bytevector ifreq-struct-size))) | ||||
|     (bytevector-copy! (string->utf8 name) 0 req 0 | ||||
|                       (min (string-length name) (- IF_NAMESIZE 1))) | ||||
|     (let-values (((ret err) | ||||
|                   (%ioctl (fileno socket) SIOCGIFNETMASK | ||||
|                           (bytevector->pointer req)))) | ||||
|       (if (zero? ret) | ||||
|           (read-socket-address req IF_NAMESIZE) | ||||
|           (throw 'system-error "network-interface-netmask" | ||||
|                  "network-interface-netmask on ~A: ~A" | ||||
|                  (list name (strerror err)) | ||||
|                  (list err)))))) | ||||
| 
 | ||||
| (define* (configure-network-interface name sockaddr flags | ||||
|                                       #:key netmask) | ||||
|   "Configure network interface NAME to use SOCKADDR, an address as returned by | ||||
| 'make-socket-address', and FLAGS, a bitwise-or of IFF_* constants." | ||||
| 'make-socket-address', and FLAGS, a bitwise-or of IFF_* constants.  If NETMASK | ||||
| is true, it must be a socket address to use as the network mask." | ||||
|   (let ((sock (socket (sockaddr:fam sockaddr) SOCK_STREAM 0))) | ||||
|     (dynamic-wind | ||||
|       (const #t) | ||||
|       (lambda () | ||||
|         (set-network-interface-address sock name sockaddr) | ||||
|         (set-network-interface-flags sock name flags)) | ||||
|         (set-network-interface-flags sock name flags) | ||||
|         (when netmask | ||||
|           (set-network-interface-netmask sock name netmask))) | ||||
|       (lambda () | ||||
|         (close-port sock))))) | ||||
| 
 | ||||
|  | @ -1002,6 +1098,106 @@ the same type as that returned by 'make-socket-address'." | |||
|       (lambda () | ||||
|         (close-port sock))))) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; Network routes. | ||||
| ;;; | ||||
| 
 | ||||
| (define-c-struct %rtentry                 ;'struct rtentry' from <net/route.h> | ||||
|   sizeof-rtentry | ||||
|   list | ||||
|   read-rtentry | ||||
|   write-rtentry! | ||||
|   (pad1            unsigned-long) | ||||
|   (destination     (array uint8 16))              ;struct sockaddr | ||||
|   (gateway         (array uint8 16))              ;struct sockaddr | ||||
|   (genmask         (array uint8 16))              ;struct sockaddr | ||||
|   (flags           unsigned-short) | ||||
|   (pad2            short) | ||||
|   (pad3            long) | ||||
|   (tos             uint8) | ||||
|   (class           uint8) | ||||
|   (pad4            (array uint8 (if (= 8 (sizeof* '*)) 3 1))) | ||||
|   (metric          short) | ||||
|   (device          '*) | ||||
|   (mtu             unsigned-long) | ||||
|   (window          unsigned-long) | ||||
|   (initial-rtt     unsigned-short)) | ||||
| 
 | ||||
| (define RTF_UP #x0001)                     ;'rtentry' flags from <net/route.h> | ||||
| (define RTF_GATEWAY #x0002) | ||||
| 
 | ||||
| (define %sockaddr-any | ||||
|   (make-socket-address AF_INET INADDR_ANY 0)) | ||||
| 
 | ||||
| (define add-network-route/gateway | ||||
|   ;; To allow field names to be matched as literals, we need to move them out | ||||
|   ;; of the lambda's body since the parameters have the same name.  A lot of | ||||
|   ;; fuss for very little. | ||||
|   (let-syntax ((gateway-offset (identifier-syntax | ||||
|                                 (c-struct-field-offset %rtentry gateway))) | ||||
|                (destination-offset (identifier-syntax | ||||
|                                     (c-struct-field-offset %rtentry destination))) | ||||
|                (genmask-offset (identifier-syntax | ||||
|                                 (c-struct-field-offset %rtentry genmask)))) | ||||
|     (lambda* (socket gateway | ||||
|                      #:key (destination %sockaddr-any) (genmask %sockaddr-any)) | ||||
|       "Add a network route for DESTINATION (a socket address as returned by | ||||
| 'make-socket-address') that goes through GATEWAY (a socket address).  For | ||||
| instance, the call: | ||||
| 
 | ||||
|   (add-network-route/gateway sock | ||||
|                              (make-socket-address | ||||
|                                AF_INET | ||||
|                                (inet-pton AF_INET \"192.168.0.1\") | ||||
|                                0)) | ||||
| 
 | ||||
| is equivalent to this 'net-tools' command: | ||||
| 
 | ||||
|   route add -net default gw 192.168.0.1 | ||||
| 
 | ||||
| because the default value of DESTINATION is \"0.0.0.0\"." | ||||
|       (let ((route (make-bytevector sizeof-rtentry 0))) | ||||
|         (write-socket-address! gateway route gateway-offset) | ||||
|         (write-socket-address! destination route destination-offset) | ||||
|         (write-socket-address! genmask route genmask-offset) | ||||
|         (bytevector-u16-native-set! route | ||||
|                                     (c-struct-field-offset %rtentry flags) | ||||
|                                     (logior RTF_UP RTF_GATEWAY)) | ||||
|         (let-values (((ret err) | ||||
|                       (%ioctl (fileno socket) SIOCADDRT | ||||
|                               (bytevector->pointer route)))) | ||||
|           (unless (zero? ret) | ||||
|             (throw 'system-error "add-network-route/gateway" | ||||
|                    "add-network-route/gateway: ~A" | ||||
|                    (list (strerror err)) | ||||
|                    (list err)))))))) | ||||
| 
 | ||||
| (define delete-network-route | ||||
|   (let-syntax ((destination-offset (identifier-syntax | ||||
|                                     (c-struct-field-offset %rtentry destination)))) | ||||
|     (lambda* (socket destination) | ||||
|       "Delete the network route for DESTINATION.  For instance, the call: | ||||
| 
 | ||||
|   (delete-network-route sock | ||||
|                         (make-socket-address AF_INET INADDR_ANY 0)) | ||||
| 
 | ||||
| is equivalent to the 'net-tools' command: | ||||
| 
 | ||||
|   route del -net default | ||||
| " | ||||
| 
 | ||||
|       (let ((route (make-bytevector sizeof-rtentry 0))) | ||||
|         (write-socket-address! destination route destination-offset) | ||||
|         (let-values (((ret err) | ||||
|                       (%ioctl (fileno socket) SIOCDELRT | ||||
|                               (bytevector->pointer route)))) | ||||
|           (unless (zero? ret) | ||||
|             (throw 'system-error "delete-network-route" | ||||
|                    "delete-network-route: ~A" | ||||
|                    (list (strerror err)) | ||||
|                    (list err)))))))) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; Details about network interfaces---aka. 'getifaddrs'. | ||||
|  |  | |||
|  | @ -86,6 +86,7 @@ | |||
|             derivation-path->output-path | ||||
|             derivation-path->output-paths | ||||
|             derivation | ||||
|             raw-derivation | ||||
| 
 | ||||
|             map-derivation | ||||
| 
 | ||||
|  | @ -1306,3 +1307,6 @@ ALLOWED-REFERENCES, DISALLOWED-REFERENCES, LOCAL-BUILD?, and SUBSTITUTABLE?." | |||
| 
 | ||||
| (define built-derivations | ||||
|   (store-lift build-derivations)) | ||||
| 
 | ||||
| (define raw-derivation | ||||
|   (store-lift derivation)) | ||||
|  |  | |||
|  | @ -309,27 +309,64 @@ | |||
|   (let ((module (resolve-interface '(gnu packages tls)))) | ||||
|     (module-ref module 'gnutls))) | ||||
| 
 | ||||
| (define* (url-fetch url hash-algo hash | ||||
|                     #:optional name | ||||
|                     #:key (system (%current-system)) | ||||
|                     (guile (default-guile))) | ||||
|   "Return a fixed-output derivation that fetches URL (a string, or a list of | ||||
| strings denoting alternate URLs), which is expected to have hash HASH of type | ||||
| HASH-ALGO (a symbol).  By default, the file name is the base name of URL; | ||||
| optionally, NAME can specify a different file name. | ||||
| (define built-in-builders* | ||||
|   (let ((cache (make-weak-key-hash-table))) | ||||
|     (lambda () | ||||
|       "Return, as a monadic value, the list of built-in builders supported by | ||||
| the daemon." | ||||
|       (lambda (store) | ||||
|         ;; Memoize the result to avoid repeated RPCs. | ||||
|         (values (or (hashq-ref cache store) | ||||
|                     (let ((result (built-in-builders store))) | ||||
|                       (hashq-set! cache store result) | ||||
|                       result)) | ||||
|                 store))))) | ||||
| 
 | ||||
| When one of the URL starts with mirror://, then its host part is | ||||
| interpreted as the name of a mirror scheme, taken from %MIRROR-FILE. | ||||
| (define* (built-in-download file-name url | ||||
|                             #:key system hash-algo hash | ||||
|                             mirrors content-addressed-mirrors | ||||
|                             (guile 'unused)) | ||||
|   "Download FILE-NAME from URL using the built-in 'download' builder. | ||||
| 
 | ||||
| Alternately, when URL starts with file://, return the corresponding file name | ||||
| in the store." | ||||
|   (define file-name | ||||
|     (match url | ||||
|       ((head _ ...) | ||||
|        (basename head)) | ||||
|       (_ | ||||
|        (basename url)))) | ||||
| This is an \"out-of-band\" download in that the returned derivation does not | ||||
| explicitly depend on Guile, GnuTLS, etc.  Instead, the daemon performs the | ||||
| download by itself using its own dependencies." | ||||
|   (mlet %store-monad ((mirrors (lower-object mirrors)) | ||||
|                       (content-addressed-mirrors | ||||
|                        (lower-object content-addressed-mirrors))) | ||||
|     (raw-derivation file-name "builtin:download" '() | ||||
|                     #:system system | ||||
|                     #:hash-algo hash-algo | ||||
|                     #:hash hash | ||||
|                     #:inputs `((,mirrors) | ||||
|                                (,content-addressed-mirrors)) | ||||
| 
 | ||||
|                     ;; Honor the user's proxy and locale settings. | ||||
|                     #:leaked-env-vars '("http_proxy" "https_proxy" | ||||
|                                         "LC_ALL" "LC_MESSAGES" "LANG" | ||||
|                                         "COLUMNS") | ||||
| 
 | ||||
|                     #:env-vars `(("url" . ,(object->string url)) | ||||
|                                  ("mirrors" . ,mirrors) | ||||
|                                  ("content-addressed-mirrors" | ||||
|                                   . ,content-addressed-mirrors)) | ||||
| 
 | ||||
|                     ;; Do not offload this derivation because we cannot be | ||||
|                     ;; sure that the remote daemon supports the 'download' | ||||
|                     ;; built-in.  We may remove this limitation when support | ||||
|                     ;; for that built-in is widespread. | ||||
|                     #:local-build? #t))) | ||||
| 
 | ||||
| (define* (in-band-download file-name url | ||||
|                            #:key system hash-algo hash | ||||
|                            mirrors content-addressed-mirrors | ||||
|                            guile) | ||||
|   "Download FILE-NAME from URL using a normal, \"in-band\" fixed-output | ||||
| derivation. | ||||
| 
 | ||||
| This is now deprecated since it has the drawback of causing bootstrapping | ||||
| issues: we may need to build GnuTLS just to be able to download the source of | ||||
| GnuTLS itself and its dependencies.  See <http://bugs.gnu.org/22774>." | ||||
|   (define need-gnutls? | ||||
|     ;; True if any of the URLs need TLS support. | ||||
|     (let ((https? (cut string-prefix? "https://" <>))) | ||||
|  | @ -366,47 +403,81 @@ in the store." | |||
|                                             read)))) | ||||
|             (url-fetch (value-from-environment "guix download url") | ||||
|                        #$output | ||||
|                        #:mirrors (call-with-input-file #$%mirror-file read) | ||||
|                        #:mirrors (call-with-input-file #$mirrors read) | ||||
| 
 | ||||
|                        ;; Content-addressed mirrors. | ||||
|                        #:hashes | ||||
|                        (value-from-environment "guix download hashes") | ||||
|                        #:content-addressed-mirrors | ||||
|                        (primitive-load #$%content-addressed-mirror-file) | ||||
|                        (primitive-load #$content-addressed-mirrors) | ||||
| 
 | ||||
|                        ;; No need to validate certificates since we know the | ||||
|                        ;; hash of the expected result. | ||||
|                        #:verify-certificate? #f))))) | ||||
| 
 | ||||
|   (mlet %store-monad ((guile (package->derivation guile system))) | ||||
|     (gexp->derivation file-name builder | ||||
|                       #:guile-for-build guile | ||||
|                       #:system system | ||||
|                       #:hash-algo hash-algo | ||||
|                       #:hash hash | ||||
| 
 | ||||
|                       ;; Use environment variables and a fixed script | ||||
|                       ;; name so there's only one script in store for | ||||
|                       ;; all the downloads. | ||||
|                       #:script-name "download" | ||||
|                       #:env-vars | ||||
|                       `(("guix download url" . ,(object->string url)) | ||||
|                         ("guix download hashes" | ||||
|                          . ,(object->string `((,hash-algo . ,hash))))) | ||||
| 
 | ||||
|                       ;; Honor the user's proxy settings. | ||||
|                       #:leaked-env-vars '("http_proxy" "https_proxy") | ||||
| 
 | ||||
|                       ;; In general, offloading downloads is not a good | ||||
|                       ;; idea.  Daemons before 0.8.3 would also | ||||
|                       ;; interpret this as "do not substitute" (see | ||||
|                       ;; <https://bugs.gnu.org/18747>.) | ||||
|                       #:local-build? #t))) | ||||
| 
 | ||||
| (define* (url-fetch url hash-algo hash | ||||
|                     #:optional name | ||||
|                     #:key (system (%current-system)) | ||||
|                     (guile (default-guile))) | ||||
|   "Return a fixed-output derivation that fetches URL (a string, or a list of | ||||
| strings denoting alternate URLs), which is expected to have hash HASH of type | ||||
| HASH-ALGO (a symbol).  By default, the file name is the base name of URL; | ||||
| optionally, NAME can specify a different file name. | ||||
| 
 | ||||
| When one of the URL starts with mirror://, then its host part is | ||||
| interpreted as the name of a mirror scheme, taken from %MIRROR-FILE. | ||||
| 
 | ||||
| Alternately, when URL starts with file://, return the corresponding file name | ||||
| in the store." | ||||
|   (define file-name | ||||
|     (match url | ||||
|       ((head _ ...) | ||||
|        (basename head)) | ||||
|       (_ | ||||
|        (basename url)))) | ||||
| 
 | ||||
|   (let ((uri (and (string? url) (string->uri url)))) | ||||
|     (if (or (and (string? url) (not uri)) | ||||
|             (and uri (memq (uri-scheme uri) '(#f file)))) | ||||
|         (interned-file (if uri (uri-path uri) url) | ||||
|                        (or name file-name)) | ||||
|         (mlet %store-monad ((guile (package->derivation guile system))) | ||||
|           (gexp->derivation (or name file-name) builder | ||||
|                             #:guile-for-build guile | ||||
|                             #:system system | ||||
|                             #:hash-algo hash-algo | ||||
|                             #:hash hash | ||||
| 
 | ||||
|                             ;; Use environment variables and a fixed script | ||||
|                             ;; name so there's only one script in store for | ||||
|                             ;; all the downloads. | ||||
|                             #:script-name "download" | ||||
|                             #:env-vars | ||||
|                             `(("guix download url" . ,(object->string url)) | ||||
|                               ("guix download hashes" | ||||
|                                . ,(object->string `((,hash-algo . ,hash))))) | ||||
| 
 | ||||
|                             ;; Honor the user's proxy settings. | ||||
|                             #:leaked-env-vars '("http_proxy" "https_proxy") | ||||
| 
 | ||||
|                             ;; In general, offloading downloads is not a good | ||||
|                             ;; idea.  Daemons before 0.8.3 would also | ||||
|                             ;; interpret this as "do not substitute" (see | ||||
|                             ;; <https://bugs.gnu.org/18747>.) | ||||
|                             #:local-build? #t))))) | ||||
|         (mlet* %store-monad ((builtins (built-in-builders*)) | ||||
|                              (download -> (if (member "download" builtins) | ||||
|                                               built-in-download | ||||
|                                               in-band-download))) | ||||
|           (download (or name file-name) url | ||||
|                     #:guile guile | ||||
|                     #:system system | ||||
|                     #:hash-algo hash-algo | ||||
|                     #:hash hash | ||||
|                     #:mirrors %mirror-file | ||||
|                     #:content-addressed-mirrors | ||||
|                     %content-addressed-mirror-file))))) | ||||
| 
 | ||||
| (define* (url-fetch/tarbomb url hash-algo hash | ||||
|                             #:optional name | ||||
|  |  | |||
|  | @ -453,9 +453,6 @@ whether this should be considered a \"native\" input or not." | |||
|                           '())) | ||||
|                        (gexp-references gexp))))) | ||||
| 
 | ||||
| (define raw-derivation | ||||
|   (store-lift derivation)) | ||||
| 
 | ||||
| (define* (lower-inputs inputs | ||||
|                        #:key system target) | ||||
|   "Turn any package from INPUTS into a derivation for SYSTEM; return the | ||||
|  |  | |||
|  | @ -501,10 +501,6 @@ if not found." | |||
|                          #t)))) | ||||
|             items)) | ||||
| 
 | ||||
|     ;; TODO: Factorize. | ||||
|     (define references* | ||||
|       (store-lift references)) | ||||
| 
 | ||||
|     (with-monad %store-monad | ||||
|       (match (manifest-entry-item entry) | ||||
|         ((? package? package) | ||||
|  |  | |||
|  | @ -23,12 +23,15 @@ | |||
|   #:use-module (guix hash) | ||||
|   #:use-module (guix utils) | ||||
|   #:use-module (guix base32) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module ((guix build download) #:select (current-terminal-columns)) | ||||
|   #:use-module ((guix build syscalls) #:select (terminal-columns)) | ||||
|   #:use-module ((guix download) #:hide (url-fetch)) | ||||
|   #:use-module ((guix build download) | ||||
|                 #:select (url-fetch current-terminal-columns)) | ||||
|   #:use-module ((guix build syscalls) | ||||
|                 #:select (terminal-columns)) | ||||
|   #:use-module (web uri) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:use-module (srfi srfi-1) | ||||
|   #:use-module (srfi srfi-26) | ||||
|   #:use-module (srfi srfi-37) | ||||
|   #:use-module (rnrs bytevectors) | ||||
|   #:use-module (ice-9 binary-ports) | ||||
|  | @ -39,15 +42,31 @@ | |||
| ;;; Command-line options. | ||||
| ;;; | ||||
| 
 | ||||
| (define (download-to-file url file) | ||||
|   "Download the file at URI to FILE.  Return FILE." | ||||
|   (let ((uri (string->uri url))) | ||||
|     (match (uri-scheme uri) | ||||
|       ((or 'file #f) | ||||
|        (copy-file (uri-path uri) file)) | ||||
|       (_ | ||||
|        (url-fetch url file))) | ||||
|     file)) | ||||
| 
 | ||||
| (define* (download-to-store* url #:key (verify-certificate? #t)) | ||||
|   (with-store store | ||||
|     (download-to-store store url | ||||
|                        #:verify-certificate? verify-certificate?))) | ||||
| 
 | ||||
| (define %default-options | ||||
|   ;; Alist of default option values. | ||||
|   `((format . ,bytevector->nix-base32-string) | ||||
|     (verify-certificate? . #t))) | ||||
|     (verify-certificate? . #t) | ||||
|     (download-proc . ,download-to-store*))) | ||||
| 
 | ||||
| (define (show-help) | ||||
|   (display (_ "Usage: guix download [OPTION] URL | ||||
| Download the file at URL, add it to the store, and print its store path | ||||
| and the hash of its contents. | ||||
| Download the file at URL to the store or to the given file, and print its | ||||
| file name and the hash of its contents. | ||||
| 
 | ||||
| Supported formats: 'nix-base32' (default), 'base32', and 'base16' | ||||
| ('hex' and 'hexadecimal' can be used as well).\n")) | ||||
|  | @ -56,6 +75,8 @@ Supported formats: 'nix-base32' (default), 'base32', and 'base16' | |||
|   (format #t (_ " | ||||
|       --no-check-certificate | ||||
|                          do not validate the certificate of HTTPS servers ")) | ||||
|   (format #f (_ " | ||||
|   -o, --output=FILE      download to FILE")) | ||||
|   (newline) | ||||
|   (display (_ " | ||||
|   -h, --help             display this help and exit")) | ||||
|  | @ -84,6 +105,12 @@ Supported formats: 'nix-base32' (default), 'base32', and 'base16' | |||
|         (option '("no-check-certificate") #f #f | ||||
|                 (lambda (opt name arg result) | ||||
|                   (alist-cons 'verify-certificate? #f result))) | ||||
|         (option '(#\o "output") #t #f | ||||
|                 (lambda (opt name arg result) | ||||
|                   (alist-cons 'download-proc | ||||
|                               (lambda* (url #:key verify-certificate?) | ||||
|                                 (download-to-file url arg)) | ||||
|                               (alist-delete 'download result)))) | ||||
| 
 | ||||
|         (option '(#\h "help") #f #f | ||||
|                 (lambda args | ||||
|  | @ -113,24 +140,17 @@ Supported formats: 'nix-base32' (default), 'base32', and 'base16' | |||
| 
 | ||||
|   (with-error-handling | ||||
|     (let* ((opts  (parse-options)) | ||||
|            (store (open-connection)) | ||||
|            (arg   (or (assq-ref opts 'argument) | ||||
|                       (leave (_ "no download URI was specified~%")))) | ||||
|            (uri   (or (string->uri arg) | ||||
|                       (leave (_ "~a: failed to parse URI~%") | ||||
|                              arg))) | ||||
|            (path  (case (uri-scheme uri) | ||||
|                     ((file) | ||||
|                      (add-to-store store (basename (uri-path uri)) | ||||
|                                    #f "sha256" (uri-path uri))) | ||||
|                     (else | ||||
|                      (parameterize ((current-terminal-columns | ||||
|                                      (terminal-columns))) | ||||
|                        (download-to-store store (uri->string uri) | ||||
|                                           (basename (uri-path uri)) | ||||
|                                           #:verify-certificate? | ||||
|                                           (assoc-ref opts | ||||
|                                                      'verify-certificate?)))))) | ||||
|            (fetch (assq-ref opts 'download-proc)) | ||||
|            (path  (parameterize ((current-terminal-columns | ||||
|                                   (terminal-columns))) | ||||
|                     (fetch arg | ||||
|                            #:verify-certificate? | ||||
|                            (assq-ref opts 'verify-certificate?)))) | ||||
|            (hash  (call-with-input-file | ||||
|                       (or path | ||||
|                           (leave (_ "~a: download failed~%") | ||||
|  |  | |||
|  | @ -65,6 +65,7 @@ | |||
|             check-home-page | ||||
|             check-source | ||||
|             check-source-file-name | ||||
|             check-mirror-url | ||||
|             check-license | ||||
|             check-vulnerabilities | ||||
|             check-formatting | ||||
|  | @ -567,6 +568,14 @@ descriptions maintained upstream." | |||
|                  (location->string loc) (package-full-name package) | ||||
|                  (fill-paragraph (escape-quotes upstream) 77 7))))))) | ||||
| 
 | ||||
| (define (origin-uris origin) | ||||
|   "Return the list of URIs (strings) for ORIGIN." | ||||
|   (match (origin-uri origin) | ||||
|     ((? string? uri) | ||||
|      (list uri)) | ||||
|     ((uris ...) | ||||
|      uris))) | ||||
| 
 | ||||
| (define (check-source package) | ||||
|   "Emit a warning if PACKAGE has an invalid 'source' field, or if that | ||||
| 'source' is not reachable." | ||||
|  | @ -583,10 +592,7 @@ descriptions maintained upstream." | |||
|   (let ((origin (package-source package))) | ||||
|     (when (and origin | ||||
|                (eqv? (origin-method origin) url-fetch)) | ||||
|       (let* ((strings (origin-uri origin)) | ||||
|              (uris (if (list? strings) | ||||
|                        (map string->uri strings) | ||||
|                        (list (string->uri strings))))) | ||||
|       (let ((uris (map string->uri (origin-uris origin)))) | ||||
| 
 | ||||
|         ;; Just make sure that at least one of the URIs is valid. | ||||
|         (call-with-values | ||||
|  | @ -626,6 +632,31 @@ descriptions maintained upstream." | |||
|                     (_ "the source file name should contain the package name") | ||||
|                     'source)))) | ||||
| 
 | ||||
| (define (check-mirror-url package) | ||||
|   "Check whether PACKAGE uses source URLs that should be 'mirror://'." | ||||
|   (define (check-mirror-uri uri)                  ;XXX: could be optimized | ||||
|     (let loop ((mirrors %mirrors)) | ||||
|       (match mirrors | ||||
|         (() | ||||
|          #t) | ||||
|         (((mirror-id mirror-urls ...) rest ...) | ||||
|          (match (find (cut string-prefix? <> uri) mirror-urls) | ||||
|            (#f | ||||
|             (loop rest)) | ||||
|            (prefix | ||||
|             (emit-warning package | ||||
|                           (format #f (_ "URL should be \ | ||||
| 'mirror://~a/~a'") | ||||
|                                   mirror-id | ||||
|                                   (string-drop uri (string-length prefix))) | ||||
|                           'source))))))) | ||||
| 
 | ||||
|   (let ((origin (package-source package))) | ||||
|     (when (and (origin? origin) | ||||
|                (eqv? (origin-method origin) url-fetch)) | ||||
|       (let ((uris (origin-uris origin))) | ||||
|         (for-each check-mirror-uri uris))))) | ||||
| 
 | ||||
| (define (check-derivation package) | ||||
|   "Emit a warning if we fail to compile PACKAGE to a derivation." | ||||
|   (catch #t | ||||
|  | @ -863,6 +894,10 @@ or a list thereof") | |||
|      (name        'source) | ||||
|      (description "Validate source URLs") | ||||
|      (check       check-source)) | ||||
|    (lint-checker | ||||
|      (name        'mirror-url) | ||||
|      (description "Suggest 'mirror://' URLs") | ||||
|      (check       check-mirror-url)) | ||||
|    (lint-checker | ||||
|      (name        'source-file-name) | ||||
|      (description "Validate file names of sources") | ||||
|  |  | |||
							
								
								
									
										113
									
								
								guix/scripts/perform-download.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								guix/scripts/perform-download.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,113 @@ | |||
| ;;; 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 (guix scripts perform-download) | ||||
|   #:use-module (guix ui) | ||||
|   #:use-module (guix derivations) | ||||
|   #:use-module ((guix store) #:select (derivation-path?)) | ||||
|   #:use-module (guix build download) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:export (guix-perform-download)) | ||||
| 
 | ||||
| ;; This program is a helper for the daemon's 'download' built-in builder. | ||||
| 
 | ||||
| (define-syntax derivation-let | ||||
|   (syntax-rules () | ||||
|     ((_ drv ((id name) rest ...) body ...) | ||||
|      (let ((id (assoc-ref (derivation-builder-environment-vars drv) | ||||
|                           name))) | ||||
|        (derivation-let drv (rest ...) body ...))) | ||||
|     ((_ drv () body ...) | ||||
|      (begin body ...)))) | ||||
| 
 | ||||
| (define %user-module | ||||
|   ;; Module in which content-address mirror procedures are evaluated. | ||||
|   (let ((module (make-fresh-user-module))) | ||||
|     (module-use! module (resolve-interface '(guix base32))) | ||||
|     module)) | ||||
| 
 | ||||
| (define (perform-download drv) | ||||
|   "Perform the download described by DRV, a fixed-output derivation." | ||||
|   (derivation-let drv ((url "url") | ||||
|                        (output "out") | ||||
|                        (executable "executable") | ||||
|                        (mirrors "mirrors") | ||||
|                        (content-addressed-mirrors "content-addressed-mirrors")) | ||||
|     (unless url | ||||
|       (leave (_ "~a: missing URL~%") (derivation-file-name drv))) | ||||
| 
 | ||||
|     (let* ((url        (call-with-input-string url read)) | ||||
|            (drv-output (assoc-ref (derivation-outputs drv) "out")) | ||||
|            (algo       (derivation-output-hash-algo drv-output)) | ||||
|            (hash       (derivation-output-hash drv-output))) | ||||
|       (unless (and algo hash) | ||||
|         (leave (_ "~a is not a fixed-output derivation~%") | ||||
|                (derivation-file-name drv))) | ||||
| 
 | ||||
|       ;; We're invoked by the daemon, which gives us write access to OUTPUT. | ||||
|       (when (url-fetch url output | ||||
|                        #:mirrors (if mirrors | ||||
|                                      (call-with-input-file mirrors read) | ||||
|                                      '()) | ||||
|                        #:content-addressed-mirrors | ||||
|                        (if content-addressed-mirrors | ||||
|                            (call-with-input-file content-addressed-mirrors | ||||
|                              (lambda (port) | ||||
|                                (eval (read port) %user-module))) | ||||
|                            '()) | ||||
|                        #:hashes `((,algo . ,hash)) | ||||
| 
 | ||||
|                        ;; Since DRV's output hash is known, X.509 certificate | ||||
|                        ;; validation is pointless. | ||||
|                        #:verify-certificate? #f) | ||||
|         (when (and executable (string=? executable "1")) | ||||
|           (chmod output #o755)))))) | ||||
| 
 | ||||
| (define (assert-low-privileges) | ||||
|   (when (zero? (getuid)) | ||||
|     (leave (_ "refusing to run with elevated privileges (UID ~a)~%") | ||||
|            (getuid)))) | ||||
| 
 | ||||
| (define (guix-perform-download . args) | ||||
|   "Perform the download described by the given fixed-output derivation. | ||||
| 
 | ||||
| This is an \"out-of-band\" download in that this code is executed directly by | ||||
| the daemon and not explicitly described as an input of the derivation.  This | ||||
| allows us to sidestep bootstrapping problems, such downloading the source code | ||||
| of GnuTLS over HTTPS, before we have built GnuTLS.  See | ||||
| <http://bugs.gnu.org/22774>." | ||||
|   (with-error-handling | ||||
|     (match args | ||||
|       (((? derivation-path? drv)) | ||||
|        ;; This program must be invoked by guix-daemon under an unprivileged | ||||
|        ;; UID to prevent things downloading from 'file:///etc/shadow' or | ||||
|        ;; arbitrary code execution via the content-addressed mirror | ||||
|        ;; procedures.  (That means we exclude users who did not pass | ||||
|        ;; '--build-users-group'.) | ||||
|        (assert-low-privileges) | ||||
|        (perform-download (call-with-input-file drv read-derivation))) | ||||
|       (("--version") | ||||
|        (show-version-and-exit)) | ||||
|       (x | ||||
|        (leave (_ "fixed-output derivation name expected~%")))))) | ||||
| 
 | ||||
| ;; Local Variables: | ||||
| ;; eval: (put 'derivation-let 'scheme-indent-function 2) | ||||
| ;; End: | ||||
| 
 | ||||
| ;; perform-download.scm ends here | ||||
|  | @ -77,9 +77,6 @@ | |||
| ;;; Installation. | ||||
| ;;; | ||||
| 
 | ||||
| ;; TODO: Factorize. | ||||
| (define references* | ||||
|   (store-lift references)) | ||||
| (define topologically-sorted* | ||||
|   (store-lift topologically-sorted)) | ||||
| 
 | ||||
|  |  | |||
|  | @ -95,8 +95,10 @@ | |||
|             path-info-registration-time | ||||
|             path-info-nar-size | ||||
| 
 | ||||
|             built-in-builders | ||||
|             references | ||||
|             references/substitutes | ||||
|             references* | ||||
|             requisites | ||||
|             referrers | ||||
|             optimize-store | ||||
|  | @ -187,7 +189,8 @@ | |||
|   (query-substitutable-paths 32) | ||||
|   (query-valid-derivers 33) | ||||
|   (optimize-store 34) | ||||
|   (verify-store 35)) | ||||
|   (verify-store 35) | ||||
|   (built-in-builders 80)) | ||||
| 
 | ||||
| (define-enumerate-type hash-algo | ||||
|   ;; hash.hh | ||||
|  | @ -283,7 +286,7 @@ | |||
|      (write-string (bytevector->base16-string arg) p)))) | ||||
| 
 | ||||
| (define-syntax read-arg | ||||
|   (syntax-rules (integer boolean string store-path store-path-list | ||||
|   (syntax-rules (integer boolean string store-path store-path-list string-list | ||||
|                  substitutable-path-list path-info base16) | ||||
|     ((_ integer p) | ||||
|      (read-int p)) | ||||
|  | @ -295,6 +298,8 @@ | |||
|      (read-store-path p)) | ||||
|     ((_ store-path-list p) | ||||
|      (read-store-path-list p)) | ||||
|     ((_ string-list p) | ||||
|      (read-string-list p)) | ||||
|     ((_ substitutable-path-list p) | ||||
|      (read-substitutable-path-list p)) | ||||
|     ((_ path-info p) | ||||
|  | @ -914,6 +919,23 @@ that there is no guarantee that the order of the resulting list matches the | |||
| order of PATHS." | ||||
|              substitutable-path-list)) | ||||
| 
 | ||||
| (define built-in-builders | ||||
|   (let ((builders (operation (built-in-builders) | ||||
|                              "Return the built-in builders." | ||||
|                              string-list))) | ||||
|     (lambda (store) | ||||
|       "Return the names of the supported built-in derivation builders | ||||
| supported by STORE." | ||||
|       ;; Check whether STORE's version supports this RPC and built-in | ||||
|       ;; derivation builders in general, which appeared in Guix > 0.11.0. | ||||
|       ;; Return the empty list if it doesn't.  Note that this RPC does not | ||||
|       ;; exist in 'nix-daemon'. | ||||
|       (if (or (> (nix-server-major-version store) #x100) | ||||
|               (and (= (nix-server-major-version store) #x100) | ||||
|                    (>= (nix-server-minor-version store) #x60))) | ||||
|           (builders store) | ||||
|           '())))) | ||||
| 
 | ||||
| (define-operation (optimize-store) | ||||
|   "Optimize the store by hard-linking identical files (\"deduplication\".) | ||||
| Return #t on success." | ||||
|  | @ -1149,6 +1171,9 @@ where FILE is the entry's absolute file name and STAT is the result of | |||
| (define set-build-options* | ||||
|   (store-lift set-build-options)) | ||||
| 
 | ||||
| (define references* | ||||
|   (store-lift references)) | ||||
| 
 | ||||
| (define-inlinable (current-system) | ||||
|   ;; Consult the %CURRENT-SYSTEM fluid at bind time.  This is equivalent to | ||||
|   ;; (lift0 %current-system %store-monad), but inlinable, thus avoiding | ||||
|  |  | |||
							
								
								
									
										120
									
								
								guix/tests/http.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								guix/tests/http.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,120 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014, 2015, 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 (guix tests http) | ||||
|   #:use-module (ice-9 threads) | ||||
|   #:use-module (web server) | ||||
|   #:use-module (web server http) | ||||
|   #:use-module (web response) | ||||
|   #:use-module (srfi srfi-39) | ||||
|   #:export (with-http-server | ||||
|             call-with-http-server | ||||
|             %http-server-port | ||||
|             %http-server-socket | ||||
|             %local-url)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
| ;;; Code to spawn a Web server for testing purposes. | ||||
| ;;; | ||||
| ;;; Code: | ||||
| 
 | ||||
| (define %http-server-port | ||||
|   ;; TCP port to use for the stub HTTP server. | ||||
|   (make-parameter 9999)) | ||||
| 
 | ||||
| (define (%local-url) | ||||
|   ;; URL to use for 'home-page' tests. | ||||
|   (string-append "http://localhost:" (number->string (%http-server-port)) | ||||
|                  "/foo/bar")) | ||||
| 
 | ||||
| (define %http-server-socket | ||||
|   ;; Listening socket for the web server.  It is useful to export it so that | ||||
|   ;; tests can check whether we succeeded opening the socket and tests skip if | ||||
|   ;; needed. | ||||
|   (delay | ||||
|     (catch 'system-error | ||||
|       (lambda () | ||||
|         (let ((sock (socket PF_INET SOCK_STREAM 0))) | ||||
|           (setsockopt sock SOL_SOCKET SO_REUSEADDR 1) | ||||
|           (bind sock | ||||
|                 (make-socket-address AF_INET INADDR_LOOPBACK | ||||
|                                      (%http-server-port))) | ||||
|           sock)) | ||||
|       (lambda args | ||||
|         (let ((err (system-error-errno args))) | ||||
|           (format (current-error-port) | ||||
|                   "warning: cannot run Web server for tests: ~a~%" | ||||
|                   (strerror err)) | ||||
|           #f))))) | ||||
| 
 | ||||
| (define (http-write server client response body) | ||||
|   "Write RESPONSE." | ||||
|   (let* ((response (write-response response client)) | ||||
|          (port     (response-port response))) | ||||
|     (cond | ||||
|      ((not body))                                 ;pass | ||||
|      (else | ||||
|       (write-response-body response body))) | ||||
|     (close-port port) | ||||
|     (quit #t)                                     ;exit the server thread | ||||
|     (values))) | ||||
| 
 | ||||
| ;; Mutex and condition variable to synchronize with the HTTP server. | ||||
| (define %http-server-lock (make-mutex)) | ||||
| (define %http-server-ready (make-condition-variable)) | ||||
| 
 | ||||
| (define (http-open . args) | ||||
|   "Start listening for HTTP requests and signal %HTTP-SERVER-READY." | ||||
|   (with-mutex %http-server-lock | ||||
|     (let ((result (apply (@@ (web server http) http-open) args))) | ||||
|       (signal-condition-variable %http-server-ready) | ||||
|       result))) | ||||
| 
 | ||||
| (define-server-impl stub-http-server | ||||
|   ;; Stripped-down version of Guile's built-in HTTP server. | ||||
|   http-open | ||||
|   (@@ (web server http) http-read) | ||||
|   http-write | ||||
|   (@@ (web server http) http-close)) | ||||
| 
 | ||||
| (define (call-with-http-server code data thunk) | ||||
|   "Call THUNK with an HTTP server running and returning CODE and DATA (a | ||||
| string) on HTTP requests." | ||||
|   (define (server-body) | ||||
|     (define (handle request body) | ||||
|       (values (build-response #:code code | ||||
|                               #:reason-phrase "Such is life") | ||||
|               data)) | ||||
| 
 | ||||
|     (catch 'quit | ||||
|       (lambda () | ||||
|         (run-server handle stub-http-server | ||||
|                     `(#:socket ,(force %http-server-socket)))) | ||||
|       (const #t))) | ||||
| 
 | ||||
|   (with-mutex %http-server-lock | ||||
|     (let ((server (make-thread server-body))) | ||||
|       (wait-condition-variable %http-server-ready %http-server-lock) | ||||
|       ;; Normally SERVER exits automatically once it has received a request. | ||||
|       (thunk)))) | ||||
| 
 | ||||
| (define-syntax-rule (with-http-server code data body ...) | ||||
|   (call-with-http-server code data (lambda () body ...))) | ||||
| 
 | ||||
| ;;; http.scm ends here | ||||
|  | @ -1094,7 +1094,8 @@ DURATION-RELATION with the current time." | |||
|           (removed (lset-difference | ||||
|                     equal-entry? (list-entries old) (list-entries new)))) | ||||
|       (for-each (cut display-entry <> "+") added) | ||||
|       (for-each (cut display-entry <> "-") removed))) | ||||
|       (for-each (cut display-entry <> "-") removed) | ||||
|       (newline))) | ||||
| 
 | ||||
|   (display-diff profile gen1 gen2)) | ||||
| 
 | ||||
|  | @ -1184,7 +1185,8 @@ optionally contain a version number and an output name, as in these examples: | |||
| 
 | ||||
| (define (show-guix-help) | ||||
|   (define (internal? command) | ||||
|     (member command '("substitute" "authenticate" "offload"))) | ||||
|     (member command '("substitute" "authenticate" "offload" | ||||
|                       "perform-download"))) | ||||
| 
 | ||||
|   (format #t (_ "Usage: guix COMMAND ARGS... | ||||
| Run COMMAND with ARGS.\n")) | ||||
|  |  | |||
|  | @ -8,6 +8,7 @@ | |||
| #include "util.hh" | ||||
| #include "archive.hh" | ||||
| #include "affinity.hh" | ||||
| #include "builtins.hh" | ||||
| 
 | ||||
| #include <map> | ||||
| #include <sstream> | ||||
|  | @ -2047,7 +2048,12 @@ void DerivationGoal::runChild() | |||
|         commonChildInit(builderOut); | ||||
| 
 | ||||
| #if CHROOT_ENABLED | ||||
|         if (useChroot) { | ||||
| 	/* Note: built-in builders are *not* running in a chroot environment
 | ||||
| 	   so that we can easily implement them in Guile without having it as | ||||
| 	   a derivation input (they are running under a separate build user, | ||||
| 	   though).  */ | ||||
| 
 | ||||
|         if (useChroot && !isBuiltin(drv)) { | ||||
|             /* Initialise the loopback interface. */ | ||||
|             AutoCloseFD fd(socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)); | ||||
|             if (fd == -1) throw SysError("cannot open IP socket"); | ||||
|  | @ -2255,6 +2261,28 @@ void DerivationGoal::runChild() | |||
|                 throw SysError("setuid failed"); | ||||
|         } | ||||
| 
 | ||||
|         restoreSIGPIPE(); | ||||
| 
 | ||||
|         /* Indicate that we managed to set up the build environment. */ | ||||
|         writeFull(STDERR_FILENO, "\n"); | ||||
| 
 | ||||
|         /* Execute the program.  This should not return. */ | ||||
|         if (isBuiltin(drv)) { | ||||
|             try { | ||||
|                 logType = ltFlat; | ||||
| 
 | ||||
| 		auto buildDrv = lookupBuiltinBuilder(drv.builder); | ||||
|                 if (buildDrv != NULL) | ||||
|                     buildDrv(drv, drvPath); | ||||
|                 else | ||||
|                     throw Error(format("unsupported builtin function '%1%'") % string(drv.builder, 8)); | ||||
|                 _exit(0); | ||||
|             } catch (std::exception & e) { | ||||
|                 writeFull(STDERR_FILENO, "error: " + string(e.what()) + "\n"); | ||||
|                 _exit(1); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         /* Fill in the arguments. */ | ||||
|         Strings args; | ||||
|         string builderBasename = baseNameOf(drv.builder); | ||||
|  | @ -2262,12 +2290,6 @@ void DerivationGoal::runChild() | |||
|         foreach (Strings::iterator, i, drv.args) | ||||
|             args.push_back(rewriteHashes(*i, rewritesToTmp)); | ||||
| 
 | ||||
|         restoreSIGPIPE(); | ||||
| 
 | ||||
|         /* Indicate that we managed to set up the build environment. */ | ||||
|         writeFull(STDERR_FILENO, "\n"); | ||||
| 
 | ||||
|         /* Execute the program.  This should not return. */ | ||||
|         execve(drv.builder.c_str(), stringsToCharPtrs(args).data(), stringsToCharPtrs(envStrs).data()); | ||||
| 
 | ||||
|         throw SysError(format("executing `%1%'") % drv.builder); | ||||
|  |  | |||
							
								
								
									
										79
									
								
								nix/libstore/builtins.cc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								nix/libstore/builtins.cc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,79 @@ | |||
| /* GNU Guix --- Functional package management for GNU
 | ||||
|    Copyright (C) 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/>.  */
 | ||||
| 
 | ||||
| #include <builtins.hh> | ||||
| #include <util.hh> | ||||
| #include <globals.hh> | ||||
| 
 | ||||
| #include <unistd.h> | ||||
| 
 | ||||
| namespace nix { | ||||
| 
 | ||||
| static void builtinDownload(const Derivation &drv, | ||||
| 			    const std::string &drvPath) | ||||
| { | ||||
|     /* Invoke 'guix perform-download'.  */ | ||||
|     Strings args; | ||||
|     args.push_back("perform-download"); | ||||
|     args.push_back(drvPath); | ||||
| 
 | ||||
|     /* Close all other file descriptors. */ | ||||
|     closeMostFDs(set<int>()); | ||||
| 
 | ||||
|     const char *const argv[] = { "download", drvPath.c_str(), NULL }; | ||||
| 
 | ||||
|     /* XXX: Hack our way to use the 'download' script from 'LIBEXECDIR/guix'
 | ||||
|        or just 'LIBEXECDIR', depending on whether we're running uninstalled or | ||||
|        not.  */ | ||||
|     const string subdir = getenv("GUIX_UNINSTALLED") != NULL | ||||
| 	? "" : "/guix"; | ||||
| 
 | ||||
|     const string program = settings.nixLibexecDir + subdir + "/download"; | ||||
|     execv(program.c_str(), (char *const *) argv); | ||||
| 
 | ||||
|     throw SysError(format("failed to run download program '%1%'") % program); | ||||
| } | ||||
| 
 | ||||
| static const std::map<std::string, derivationBuilder> builtins = | ||||
| { | ||||
|     { "download", builtinDownload } | ||||
| }; | ||||
| 
 | ||||
| derivationBuilder lookupBuiltinBuilder(const std::string & name) | ||||
| { | ||||
|     if (name.substr(0, 8) == "builtin:") | ||||
|     { | ||||
| 	auto realName = name.substr(8); | ||||
| 	auto builder = builtins.find(realName); | ||||
| 	return builder == builtins.end() ? NULL : builder->second; | ||||
|     } | ||||
|     else | ||||
| 	return NULL; | ||||
| } | ||||
| 
 | ||||
| std::list<std::string> builtinBuilderNames() | ||||
| { | ||||
|     std::list<std::string> result; | ||||
|     for(auto&& iter: builtins) | ||||
|     { | ||||
| 	result.push_back(iter.first); | ||||
|     } | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										44
									
								
								nix/libstore/builtins.hh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								nix/libstore/builtins.hh
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,44 @@ | |||
| /* GNU Guix --- Functional package management for GNU
 | ||||
|    Copyright (C) 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/>.  */
 | ||||
| 
 | ||||
| /* Interface to built-in derivation builders.  */ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <derivations.hh> | ||||
| #include <map> | ||||
| #include <string> | ||||
| 
 | ||||
| namespace nix { | ||||
| 
 | ||||
|     inline bool isBuiltin(const Derivation & drv) | ||||
|     { | ||||
| 	return string(drv.builder, 0, 8) == "builtin:"; | ||||
|     } | ||||
| 
 | ||||
|     /* Build DRV, which lives at DRVPATH.  */ | ||||
|     typedef void (*derivationBuilder) (const Derivation &drv, | ||||
| 				       const std::string &drvPath); | ||||
| 
 | ||||
|     /* Return the built-in builder called BUILDER, or NULL if none was
 | ||||
|        found.  */ | ||||
|     derivationBuilder lookupBuiltinBuilder(const std::string &builder); | ||||
| 
 | ||||
|     /* Return the list of supported built-in builder names.  */ | ||||
|     std::list<std::string> builtinBuilderNames(); | ||||
| } | ||||
|  | @ -6,7 +6,7 @@ namespace nix { | |||
| #define WORKER_MAGIC_1 0x6e697863 | ||||
| #define WORKER_MAGIC_2 0x6478696f | ||||
| 
 | ||||
| #define PROTOCOL_VERSION 0x10f | ||||
| #define PROTOCOL_VERSION 0x160 | ||||
| #define GET_PROTOCOL_MAJOR(x) ((x) & 0xff00) | ||||
| #define GET_PROTOCOL_MINOR(x) ((x) & 0x00ff) | ||||
| 
 | ||||
|  | @ -43,7 +43,8 @@ typedef enum { | |||
|     wopQuerySubstitutablePaths = 32, | ||||
|     wopQueryValidDerivers = 33, | ||||
|     wopOptimiseStore = 34, | ||||
|     wopVerifyStore = 35 | ||||
|     wopVerifyStore = 35, | ||||
|     wopBuiltinBuilders = 80 | ||||
| } WorkerOp; | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -87,6 +87,7 @@ libstore_a_SOURCES =				\ | |||
|   %D%/libstore/build.cc				\
 | ||||
|   %D%/libstore/pathlocks.cc			\
 | ||||
|   %D%/libstore/derivations.cc			\
 | ||||
|   %D%/libstore/builtins.cc			\
 | ||||
|   %D%/libstore/sqlite.cc | ||||
| 
 | ||||
| libstore_headers =				\
 | ||||
|  | @ -98,6 +99,7 @@ libstore_headers =				\ | |||
|   %D%/libstore/misc.hh				\
 | ||||
|   %D%/libstore/local-store.hh			\
 | ||||
|   %D%/libstore/sqlite.hh			\
 | ||||
|   %D%/libstore/builtins.hh			\
 | ||||
|   %D%/libstore/store-api.hh | ||||
| 
 | ||||
| libstore_a_CPPFLAGS =				\
 | ||||
|  | @ -166,7 +168,8 @@ noinst_HEADERS =						\ | |||
| 
 | ||||
| nodist_pkglibexec_SCRIPTS =			\
 | ||||
|   %D%/scripts/list-runtime-roots		\
 | ||||
|   %D%/scripts/substitute | ||||
|   %D%/scripts/substitute			\
 | ||||
|   %D%/scripts/download | ||||
| 
 | ||||
| if BUILD_DAEMON_OFFLOAD | ||||
| 
 | ||||
|  |  | |||
|  | @ -6,6 +6,7 @@ | |||
| #include "archive.hh" | ||||
| #include "affinity.hh" | ||||
| #include "globals.hh" | ||||
| #include "builtins.hh" | ||||
| 
 | ||||
| #include <algorithm> | ||||
| 
 | ||||
|  | @ -671,6 +672,14 @@ static void performOp(bool trusted, unsigned int clientVersion, | |||
|         break; | ||||
|     } | ||||
| 
 | ||||
|     case wopBuiltinBuilders: { | ||||
| 	startWork(); | ||||
| 	auto names = builtinBuilderNames(); | ||||
| 	stopWork(); | ||||
| 	writeStrings(names, to); | ||||
| 	break; | ||||
|     } | ||||
| 
 | ||||
|     default: | ||||
|         throw Error(format("invalid operation %1%") % op); | ||||
|     } | ||||
|  |  | |||
							
								
								
									
										11
									
								
								nix/scripts/download.in
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								nix/scripts/download.in
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| #!@SHELL@ | ||||
| # A shorthand for "guix perform-download", for use by the daemon. | ||||
| 
 | ||||
| if test "x$GUIX_UNINSTALLED" = "x" | ||||
| then | ||||
|     prefix="@prefix@" | ||||
|     exec_prefix="@exec_prefix@" | ||||
|     exec "@bindir@/guix" perform-download "$@" | ||||
| else | ||||
|     exec guix perform-download "$@" | ||||
| fi | ||||
|  | @ -16,6 +16,8 @@ | |||
| ;;; You should have received a copy of the GNU General Public License | ||||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (unsetenv "http_proxy") | ||||
| 
 | ||||
| (define-module (test-derivations) | ||||
|   #:use-module (guix derivations) | ||||
|   #:use-module (guix grafts) | ||||
|  | @ -24,6 +26,7 @@ | |||
|   #:use-module (guix hash) | ||||
|   #:use-module (guix base32) | ||||
|   #:use-module (guix tests) | ||||
|   #:use-module (guix tests http) | ||||
|   #:use-module ((guix packages) #:select (package-derivation base32)) | ||||
|   #:use-module ((guix build utils) #:select (executable-file?)) | ||||
|   #:use-module ((gnu packages) #:select (search-bootstrap-binary)) | ||||
|  | @ -75,6 +78,9 @@ | |||
|         (lambda (e1 e2) | ||||
|           (string<? (car e1) (car e2))))) | ||||
| 
 | ||||
| ;; Avoid collisions with other tests. | ||||
| (%http-server-port 10500) | ||||
| 
 | ||||
|  | ||||
| (test-begin "derivations") | ||||
| 
 | ||||
|  | @ -205,6 +211,74 @@ | |||
|                 (= (stat:ino (lstat file1)) | ||||
|                    (stat:ino (lstat file2)))))))) | ||||
| 
 | ||||
| (test-equal "built-in-builders" | ||||
|   '("download") | ||||
|   (built-in-builders %store)) | ||||
| 
 | ||||
| (test-assert "unknown built-in builder" | ||||
|   (let ((drv (derivation %store "ohoh" "builtin:does-not-exist" '()))) | ||||
|     (guard (c ((nix-protocol-error? c) | ||||
|                (string-contains (nix-protocol-error-message c) "failed"))) | ||||
|       (build-derivations %store (list drv)) | ||||
|       #f))) | ||||
| 
 | ||||
| (unless (force %http-server-socket) | ||||
|   (test-skip 1)) | ||||
| (test-assert "'download' built-in builder" | ||||
|   (let ((text (random-text))) | ||||
|     (with-http-server 200 text | ||||
|       (let* ((drv (derivation %store "world" | ||||
|                               "builtin:download" '() | ||||
|                               #:env-vars `(("url" | ||||
|                                             . ,(object->string (%local-url)))) | ||||
|                               #:hash-algo 'sha256 | ||||
|                               #:hash (sha256 (string->utf8 text))))) | ||||
|         (and (build-derivations %store (list drv)) | ||||
|              (string=? (call-with-input-file (derivation->output-path drv) | ||||
|                          get-string-all) | ||||
|                        text)))))) | ||||
| 
 | ||||
| (unless (force %http-server-socket) | ||||
|   (test-skip 1)) | ||||
| (test-assert "'download' built-in builder, invalid hash" | ||||
|   (with-http-server 200 "hello, world!" | ||||
|     (let* ((drv (derivation %store "world" | ||||
|                             "builtin:download" '() | ||||
|                             #:env-vars `(("url" | ||||
|                                           . ,(object->string (%local-url)))) | ||||
|                             #:hash-algo 'sha256 | ||||
|                             #:hash (sha256 (random-bytevector 100))))) ;wrong | ||||
|       (guard (c ((nix-protocol-error? c) | ||||
|                  (string-contains (nix-protocol-error-message c) "failed"))) | ||||
|         (build-derivations %store (list drv)) | ||||
|         #f)))) | ||||
| 
 | ||||
| (unless (force %http-server-socket) | ||||
|   (test-skip 1)) | ||||
| (test-assert "'download' built-in builder, not found" | ||||
|   (with-http-server 404 "not found" | ||||
|     (let* ((drv (derivation %store "will-never-be-found" | ||||
|                             "builtin:download" '() | ||||
|                             #:env-vars `(("url" | ||||
|                                           . ,(object->string (%local-url)))) | ||||
|                             #:hash-algo 'sha256 | ||||
|                             #:hash (sha256 (random-bytevector 100))))) | ||||
|       (guard (c ((nix-protocol-error? c) | ||||
|                  (string-contains (nix-protocol-error-message (pk c)) "failed"))) | ||||
|         (build-derivations %store (list drv)) | ||||
|         #f)))) | ||||
| 
 | ||||
| (test-assert "'download' built-in builder, not fixed-output" | ||||
|   (let* ((source (add-text-to-store %store "hello" "hi!")) | ||||
|          (url    (string-append "file://" source)) | ||||
|          (drv    (derivation %store "world" | ||||
|                              "builtin:download" '() | ||||
|                              #:env-vars `(("url" . ,(object->string url)))))) | ||||
|     (guard (c ((nix-protocol-error? c) | ||||
|                (string-contains (nix-protocol-error-message c) "failed"))) | ||||
|       (build-derivations %store (list drv)) | ||||
|       #f))) | ||||
| 
 | ||||
| (test-equal "derivation-name" | ||||
|   "foo-0.0" | ||||
|   (let ((drv (derivation %store "foo-0.0" %bash '()))) | ||||
|  |  | |||
|  | @ -375,7 +375,7 @@ | |||
|                        (drv    (gexp->file "foo" exp)) | ||||
|                        (out -> (derivation->output-path drv)) | ||||
|                        (done   (built-derivations (list drv))) | ||||
|                        (refs   ((store-lift references) out))) | ||||
|                        (refs   (references* out))) | ||||
|     (return (and (equal? sexp (call-with-input-file out read)) | ||||
|                  (equal? (list guile) refs))))) | ||||
| 
 | ||||
|  | @ -386,7 +386,7 @@ | |||
|                        (drv    (gexp->file "foo" exp)) | ||||
|                        (out -> (derivation->output-path drv)) | ||||
|                        (done   (built-derivations (list drv))) | ||||
|                        (refs   ((store-lift references) out))) | ||||
|                        (refs   (references* out))) | ||||
|     (return (and (equal? (string-append guile "/bin/guile") | ||||
|                          (call-with-input-file out read)) | ||||
|                  (equal? (list guile) refs))))) | ||||
|  | @ -407,8 +407,8 @@ | |||
|                        (out ->  (derivation->output-path drv)) | ||||
|                        (out2 -> (derivation->output-path drv "2nd")) | ||||
|                        (done    (built-derivations (list drv))) | ||||
|                        (refs    ((store-lift references) out)) | ||||
|                        (refs2   ((store-lift references) out2)) | ||||
|                        (refs    (references* out)) | ||||
|                        (refs2   (references* out2)) | ||||
|                        (guile   (package-file %bootstrap-guile "bin/guile"))) | ||||
|     (return (and (string=? (readlink (string-append out "/foo")) guile) | ||||
|                  (string=? (readlink out2) file) | ||||
|  | @ -481,7 +481,7 @@ | |||
|                                               (ungexp output)))) | ||||
|                        (xdrv      (gexp->derivation "foo" exp | ||||
|                                                     #:target target)) | ||||
|                        (refs      ((store-lift references) | ||||
|                        (refs      (references* | ||||
|                                    (derivation-file-name xdrv))) | ||||
|                        (xcu       (package->cross-derivation coreutils | ||||
|                                                              target)) | ||||
|  | @ -506,7 +506,7 @@ | |||
|                                               (ungexp output)))) | ||||
|                        (xdrv      (gexp->derivation "foo" exp | ||||
|                                                     #:target target)) | ||||
|                        (refs      ((store-lift references) | ||||
|                        (refs      (references* | ||||
|                                    (derivation-file-name xdrv))) | ||||
|                        (xglibc    (package->cross-derivation glibc target)) | ||||
|                        (cu        (package->derivation coreutils))) | ||||
|  | @ -808,34 +808,33 @@ | |||
|                          (out -> (derivation->output-path drv))) | ||||
|       (mbegin %store-monad | ||||
|         (built-derivations (list drv)) | ||||
|         (mlet %store-monad ((refs ((store-lift references) out))) | ||||
|         (mlet %store-monad ((refs (references* out))) | ||||
|           (return (and (equal? refs (list text)) | ||||
|                        (equal? `(list "foo" ,text) | ||||
|                                (call-with-input-file out read))))))))) | ||||
| 
 | ||||
| (test-assert "text-file*" | ||||
|   (let ((references (store-lift references))) | ||||
|     (run-with-store %store | ||||
|       (mlet* %store-monad | ||||
|           ((drv  (package->derivation %bootstrap-guile)) | ||||
|            (guile -> (derivation->output-path drv)) | ||||
|            (file (text-file "bar" "This is bar.")) | ||||
|            (text (text-file* "foo" | ||||
|                              %bootstrap-guile "/bin/guile " | ||||
|                              (gexp-input %bootstrap-guile "out") "/bin/guile " | ||||
|                              drv "/bin/guile " | ||||
|                              file)) | ||||
|            (done (built-derivations (list text))) | ||||
|            (out -> (derivation->output-path text)) | ||||
|            (refs (references out))) | ||||
|         ;; Make sure we get the right references and the right content. | ||||
|         (return (and (lset= string=? refs (list guile file)) | ||||
|                      (equal? (call-with-input-file out get-string-all) | ||||
|                              (string-append guile "/bin/guile " | ||||
|                                             guile "/bin/guile " | ||||
|                                             guile "/bin/guile " | ||||
|                                             file))))) | ||||
|       #:guile-for-build (package-derivation %store %bootstrap-guile)))) | ||||
|   (run-with-store %store | ||||
|     (mlet* %store-monad | ||||
|         ((drv  (package->derivation %bootstrap-guile)) | ||||
|          (guile -> (derivation->output-path drv)) | ||||
|          (file (text-file "bar" "This is bar.")) | ||||
|          (text (text-file* "foo" | ||||
|                            %bootstrap-guile "/bin/guile " | ||||
|                            (gexp-input %bootstrap-guile "out") "/bin/guile " | ||||
|                            drv "/bin/guile " | ||||
|                            file)) | ||||
|          (done (built-derivations (list text))) | ||||
|          (out -> (derivation->output-path text)) | ||||
|          (refs (references* out))) | ||||
|       ;; Make sure we get the right references and the right content. | ||||
|       (return (and (lset= string=? refs (list guile file)) | ||||
|                    (equal? (call-with-input-file out get-string-all) | ||||
|                            (string-append guile "/bin/guile " | ||||
|                                           guile "/bin/guile " | ||||
|                                           guile "/bin/guile " | ||||
|                                           file))))) | ||||
|     #:guile-for-build (package-derivation %store %bootstrap-guile))) | ||||
| 
 | ||||
| (test-assertm "mixed-text-file" | ||||
|   (mlet* %store-monad ((file ->   (mixed-text-file "mixed" | ||||
|  | @ -847,7 +846,7 @@ | |||
|                        (guile ->  (derivation->output-path guile-drv))) | ||||
|     (mbegin %store-monad | ||||
|       (built-derivations (list drv)) | ||||
|       (mlet %store-monad ((refs ((store-lift references) out))) | ||||
|       (mlet %store-monad ((refs (references* out))) | ||||
|         (return (and (string=? (string-append "export PATH=" guile "/bin") | ||||
|                                (call-with-input-file out get-string-all)) | ||||
|                      (equal? refs (list guile)))))))) | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| # GNU Guix --- Functional package management for GNU | ||||
| # Copyright © 2012, 2015 Ludovic Courtès <ludo@gnu.org> | ||||
| # Copyright © 2012, 2015, 2016 Ludovic Courtès <ludo@gnu.org> | ||||
| # | ||||
| # This file is part of GNU Guix. | ||||
| # | ||||
|  | @ -35,6 +35,13 @@ then false; else true; fi | |||
| # This one should succeed. | ||||
| guix download "file://$abs_top_srcdir/README" | ||||
| 
 | ||||
| # This one too, even if it cannot talk to the daemon. | ||||
| output="t-download-$$" | ||||
| trap 'rm -f "$output"' EXIT | ||||
| GUIX_DAEMON_SOCKET="/nowhere" guix download -o "$output" \ | ||||
| 		  "file://$abs_top_srcdir/README" | ||||
| cmp "$output" "$abs_top_srcdir/README" | ||||
| 
 | ||||
| # This one should fail. | ||||
| if guix download "file:///does-not-exist" "file://$abs_top_srcdir/README" | ||||
| then false; else true; fi | ||||
|  |  | |||
							
								
								
									
										133
									
								
								tests/lint.scm
									
										
									
									
									
								
							
							
						
						
									
										133
									
								
								tests/lint.scm
									
										
									
									
									
								
							|  | @ -24,6 +24,7 @@ | |||
| 
 | ||||
| (define-module (test-lint) | ||||
|   #:use-module (guix tests) | ||||
|   #:use-module (guix tests http) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix git-download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|  | @ -33,101 +34,20 @@ | |||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages glib) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (web server) | ||||
|   #:use-module (web server http) | ||||
|   #:use-module (web response) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:use-module (ice-9 threads) | ||||
|   #:use-module (srfi srfi-9 gnu) | ||||
|   #:use-module (srfi srfi-64)) | ||||
| 
 | ||||
| ;; Test the linter. | ||||
| 
 | ||||
| (define %http-server-port | ||||
|   ;; TCP port to use for the stub HTTP server. | ||||
|   9999) | ||||
| 
 | ||||
| (define %local-url | ||||
|   ;; URL to use for 'home-page' tests. | ||||
|   (string-append "http://localhost:" (number->string %http-server-port) | ||||
|                  "/foo/bar")) | ||||
| ;; Avoid collisions with other tests. | ||||
| (%http-server-port 9999) | ||||
| 
 | ||||
| (define %null-sha256 | ||||
|   ;; SHA256 of the empty string. | ||||
|   (base32 | ||||
|    "0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73")) | ||||
| 
 | ||||
| (define %http-server-socket | ||||
|   ;; Socket used by the Web server. | ||||
|   (catch 'system-error | ||||
|     (lambda () | ||||
|       (let ((sock (socket PF_INET SOCK_STREAM 0))) | ||||
|         (setsockopt sock SOL_SOCKET SO_REUSEADDR 1) | ||||
|         (bind sock | ||||
|               (make-socket-address AF_INET INADDR_LOOPBACK | ||||
|                                    %http-server-port)) | ||||
|         sock)) | ||||
|     (lambda args | ||||
|       (let ((err (system-error-errno args))) | ||||
|         (format (current-error-port) | ||||
|                 "warning: cannot run Web server for tests: ~a~%" | ||||
|                 (strerror err)) | ||||
|         #f)))) | ||||
| 
 | ||||
| (define (http-write server client response body) | ||||
|   "Write RESPONSE." | ||||
|   (let* ((response (write-response response client)) | ||||
|          (port     (response-port response))) | ||||
|     (cond | ||||
|      ((not body))                                 ;pass | ||||
|      (else | ||||
|       (write-response-body response body))) | ||||
|     (close-port port) | ||||
|     (quit #t)                                     ;exit the server thread | ||||
|     (values))) | ||||
| 
 | ||||
| ;; Mutex and condition variable to synchronize with the HTTP server. | ||||
| (define %http-server-lock (make-mutex)) | ||||
| (define %http-server-ready (make-condition-variable)) | ||||
| 
 | ||||
| (define (http-open . args) | ||||
|   "Start listening for HTTP requests and signal %HTTP-SERVER-READY." | ||||
|   (with-mutex %http-server-lock | ||||
|     (let ((result (apply (@@ (web server http) http-open) args))) | ||||
|       (signal-condition-variable %http-server-ready) | ||||
|       result))) | ||||
| 
 | ||||
| (define-server-impl stub-http-server | ||||
|   ;; Stripped-down version of Guile's built-in HTTP server. | ||||
|   http-open | ||||
|   (@@ (web server http) http-read) | ||||
|   http-write | ||||
|   (@@ (web server http) http-close)) | ||||
| 
 | ||||
| (define (call-with-http-server code data thunk) | ||||
|   "Call THUNK with an HTTP server running and returning CODE and DATA (a | ||||
| string) on HTTP requests." | ||||
|   (define (server-body) | ||||
|     (define (handle request body) | ||||
|       (values (build-response #:code code | ||||
|                               #:reason-phrase "Such is life") | ||||
|               data)) | ||||
| 
 | ||||
|     (catch 'quit | ||||
|       (lambda () | ||||
|         (run-server handle stub-http-server | ||||
|                     `(#:socket ,%http-server-socket))) | ||||
|       (const #t))) | ||||
| 
 | ||||
|   (with-mutex %http-server-lock | ||||
|     (let ((server (make-thread server-body))) | ||||
|       (wait-condition-variable %http-server-ready %http-server-lock) | ||||
|       ;; Normally SERVER exits automatically once it has received a request. | ||||
|       (thunk)))) | ||||
| 
 | ||||
| (define-syntax-rule (with-http-server code data body ...) | ||||
|   (call-with-http-server code data (lambda () body ...))) | ||||
| 
 | ||||
| (define %long-string | ||||
|   (make-string 2000 #\a)) | ||||
| 
 | ||||
|  | @ -423,28 +343,28 @@ string) on HTTP requests." | |||
|         (check-home-page pkg))) | ||||
|     "domain not found"))) | ||||
| 
 | ||||
| (test-skip (if %http-server-socket 0 1)) | ||||
| (test-skip (if (force %http-server-socket) 0 1)) | ||||
| (test-assert "home-page: Connection refused" | ||||
|   (->bool | ||||
|    (string-contains | ||||
|     (with-warnings | ||||
|       (let ((pkg (package | ||||
|                    (inherit (dummy-package "x")) | ||||
|                    (home-page %local-url)))) | ||||
|                    (home-page (%local-url))))) | ||||
|         (check-home-page pkg))) | ||||
|     "Connection refused"))) | ||||
| 
 | ||||
| (test-skip (if %http-server-socket 0 1)) | ||||
| (test-skip (if (force %http-server-socket) 0 1)) | ||||
| (test-equal "home-page: 200" | ||||
|   "" | ||||
|   (with-warnings | ||||
|    (with-http-server 200 %long-string | ||||
|      (let ((pkg (package | ||||
|                   (inherit (dummy-package "x")) | ||||
|                   (home-page %local-url)))) | ||||
|                   (home-page (%local-url))))) | ||||
|        (check-home-page pkg))))) | ||||
| 
 | ||||
| (test-skip (if %http-server-socket 0 1)) | ||||
| (test-skip (if (force %http-server-socket) 0 1)) | ||||
| (test-assert "home-page: 200 but short length" | ||||
|   (->bool | ||||
|    (string-contains | ||||
|  | @ -452,11 +372,11 @@ string) on HTTP requests." | |||
|       (with-http-server 200 "This is too small." | ||||
|         (let ((pkg (package | ||||
|                      (inherit (dummy-package "x")) | ||||
|                      (home-page %local-url)))) | ||||
|                      (home-page (%local-url))))) | ||||
|           (check-home-page pkg)))) | ||||
|     "suspiciously small"))) | ||||
| 
 | ||||
| (test-skip (if %http-server-socket 0 1)) | ||||
| (test-skip (if (force %http-server-socket) 0 1)) | ||||
| (test-assert "home-page: 404" | ||||
|   (->bool | ||||
|    (string-contains | ||||
|  | @ -464,7 +384,7 @@ string) on HTTP requests." | |||
|       (with-http-server 404 %long-string | ||||
|         (let ((pkg (package | ||||
|                      (inherit (dummy-package "x")) | ||||
|                      (home-page %local-url)))) | ||||
|                      (home-page (%local-url))))) | ||||
|           (check-home-page pkg)))) | ||||
|     "not reachable: 404"))) | ||||
| 
 | ||||
|  | @ -545,7 +465,7 @@ string) on HTTP requests." | |||
|          (check-source-file-name pkg))) | ||||
|      "file name should contain the package name")))) | ||||
| 
 | ||||
| (test-skip (if %http-server-socket 0 1)) | ||||
| (test-skip (if (force %http-server-socket) 0 1)) | ||||
| (test-equal "source: 200" | ||||
|   "" | ||||
|   (with-warnings | ||||
|  | @ -554,11 +474,11 @@ string) on HTTP requests." | |||
|                   (inherit (dummy-package "x")) | ||||
|                   (source (origin | ||||
|                             (method url-fetch) | ||||
|                             (uri %local-url) | ||||
|                             (uri (%local-url)) | ||||
|                             (sha256 %null-sha256)))))) | ||||
|        (check-source pkg))))) | ||||
| 
 | ||||
| (test-skip (if %http-server-socket 0 1)) | ||||
| (test-skip (if (force %http-server-socket) 0 1)) | ||||
| (test-assert "source: 200 but short length" | ||||
|   (->bool | ||||
|    (string-contains | ||||
|  | @ -568,12 +488,12 @@ string) on HTTP requests." | |||
|                      (inherit (dummy-package "x")) | ||||
|                      (source (origin | ||||
|                                (method url-fetch) | ||||
|                                (uri %local-url) | ||||
|                                (uri (%local-url)) | ||||
|                                (sha256 %null-sha256)))))) | ||||
|           (check-source pkg)))) | ||||
|     "suspiciously small"))) | ||||
| 
 | ||||
| (test-skip (if %http-server-socket 0 1)) | ||||
| (test-skip (if (force %http-server-socket) 0 1)) | ||||
| (test-assert "source: 404" | ||||
|   (->bool | ||||
|    (string-contains | ||||
|  | @ -583,11 +503,30 @@ string) on HTTP requests." | |||
|                      (inherit (dummy-package "x")) | ||||
|                      (source (origin | ||||
|                                (method url-fetch) | ||||
|                                (uri %local-url) | ||||
|                                (uri (%local-url)) | ||||
|                                (sha256 %null-sha256)))))) | ||||
|           (check-source pkg)))) | ||||
|     "not reachable: 404"))) | ||||
| 
 | ||||
| (test-assert "mirror-url" | ||||
|   (string-null? | ||||
|    (with-warnings | ||||
|      (let ((source (origin | ||||
|                      (method url-fetch) | ||||
|                      (uri "http://example.org/foo/bar.tar.gz") | ||||
|                      (sha256 %null-sha256)))) | ||||
|        (check-mirror-url (dummy-package "x" (source source))))))) | ||||
| 
 | ||||
| (test-assert "mirror-url: one suggestion" | ||||
|   (string-contains | ||||
|    (with-warnings | ||||
|      (let ((source (origin | ||||
|                      (method url-fetch) | ||||
|                      (uri "http://ftp.gnu.org/pub/gnu/foo/foo.tar.gz") | ||||
|                      (sha256 %null-sha256)))) | ||||
|        (check-mirror-url (dummy-package "x" (source source))))) | ||||
|    "mirror://gnu/foo/foo.tar.gz")) | ||||
| 
 | ||||
| (test-assert "cve" | ||||
|   (mock ((guix scripts lint) package-vulnerabilities (const '())) | ||||
|         (string-null? | ||||
|  |  | |||
|  | @ -326,6 +326,27 @@ | |||
|         ;; We get EPERM with Linux 3.18ish and EACCES with 2.6.32. | ||||
|         (memv (system-error-errno args) (list EPERM EACCES)))))) | ||||
| 
 | ||||
| (test-equal "network-interface-netmask lo" | ||||
|   (make-socket-address AF_INET (inet-pton AF_INET "255.0.0.0") 0) | ||||
|   (let* ((sock (socket AF_INET SOCK_STREAM 0)) | ||||
|          (addr (network-interface-netmask sock "lo"))) | ||||
|     (close-port sock) | ||||
|     addr)) | ||||
| 
 | ||||
| (test-skip (if (zero? (getuid)) 1 0)) | ||||
| (test-assert "set-network-interface-netmask" | ||||
|   (let ((sock (socket AF_INET SOCK_STREAM 0))) | ||||
|     (catch 'system-error | ||||
|       (lambda () | ||||
|         (set-network-interface-netmask sock "nonexistent" | ||||
|                                        (make-socket-address | ||||
|                                         AF_INET | ||||
|                                         (inet-pton AF_INET "255.0.0.0") | ||||
|                                         0))) | ||||
|       (lambda args | ||||
|         (close-port sock) | ||||
|         (memv (system-error-errno args) (list EPERM EACCES)))))) | ||||
| 
 | ||||
| (test-equal "network-interfaces returns one or more interfaces" | ||||
|   '(#t #t #t) | ||||
|   (match (network-interfaces) | ||||
|  | @ -353,6 +374,30 @@ | |||
|              (#f #f) | ||||
|              (lo (interface-address lo))))))) | ||||
| 
 | ||||
| (test-skip (if (zero? (getuid)) 1 0)) | ||||
| (test-assert "add-network-route/gateway" | ||||
|   (let ((sock    (socket AF_INET SOCK_STREAM 0)) | ||||
|         (gateway (make-socket-address AF_INET | ||||
|                                       (inet-pton AF_INET "192.168.0.1") | ||||
|                                       0))) | ||||
|     (catch 'system-error | ||||
|       (lambda () | ||||
|         (add-network-route/gateway sock gateway)) | ||||
|       (lambda args | ||||
|         (close-port sock) | ||||
|         (memv (system-error-errno args) (list EPERM EACCES)))))) | ||||
| 
 | ||||
| (test-skip (if (zero? (getuid)) 1 0)) | ||||
| (test-assert "delete-network-route" | ||||
|   (let ((sock        (socket AF_INET SOCK_STREAM 0)) | ||||
|         (destination (make-socket-address AF_INET INADDR_ANY 0))) | ||||
|     (catch 'system-error | ||||
|       (lambda () | ||||
|         (delete-network-route sock destination)) | ||||
|       (lambda args | ||||
|         (close-port sock) | ||||
|         (memv (system-error-errno args) (list EPERM EACCES)))))) | ||||
| 
 | ||||
| (test-equal "tcgetattr ENOTTY" | ||||
|   ENOTTY | ||||
|   (catch 'system-error | ||||
|  |  | |||
		Reference in a new issue