;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 Cyrill Schenkel ;;; Copyright © 2014, 2015 Eric Bavier ;;; Copyright © 2016 John J. Foerch ;;; ;;; 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 . (define-module (gnu packages conkeror) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system gnu) #:use-module (gnu packages) #:use-module (gnu packages gnuzilla)) (define-public conkeror (package (name "conkeror") (version "1.0.3") (source (origin (method url-fetch) (uri (string-append "http://repo.or.cz/conkeror.git/snapshot/" version ".tar.gz")) (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 "0ybmincxw3msnrfpby9gnckbq2x94c7fra2m66zham54cjc7mav3")))) (build-system gnu-build-system) (inputs `(("icecat" ,icecat))) (arguments `(#:tests? #f ;no tests #:make-flags `("CC=gcc" ,(string-append "PREFIX=" (assoc-ref %outputs "out"))) #:phases (modify-phases %standard-phases (delete 'configure) (add-after 'install 'install-app-launcher (lambda* (#:key inputs outputs #:allow-other-keys) ;; This overwrites the installed launcher, which execs xulrunner, ;; with one that execs 'icecat --app' (let* ((out (assoc-ref outputs "out")) (datadir (string-append out "/share/conkeror")) (launcher (string-append out "/bin/conkeror"))) (call-with-output-file launcher (lambda (p) (format p "#!~a/bin/bash exec ~a/bin/icecat --app ~a \"$@\"~%" (assoc-ref inputs "bash") ;implicit input (assoc-ref inputs "icecat") (string-append datadir "/application.ini")))) (chmod launcher #o555))))))) (synopsis "Keyboard focused web browser with Emacs look and feel") (description "Conkeror is a highly-programmable web browser based on Mozilla XULRunner which is the base of all Mozilla products including Firefox. Conkeror has a sophisticated keyboard system for running commands and interacting with web page content, modelled after Emacs and Lynx. It is self-documenting and extensible with JavaScript. It comes with builtin support for several Web 2.0 sites like several Google services (Search, Gmail, Maps, Reader, etc.), Del.icio.us, Reddit, Last.fm and YouTube. For easier editing of form fields, it can spawn external editors.") (home-page "http://conkeror.org") ;; Conkeror is triple licensed. (license (list ;; MPL 1.1 -- this license is not GPL compatible license:gpl2 license:lgpl2.1)))) .9+ changes....This partially fixes <https://issues.guix.gnu.org/54786>, allowing the 'jami' and 'jami-provisioning' system tests to pass again. In version 0.9.0, Shepherd constructors are now run concurrently, via cooperative scheduling (Guile Fibers). The Jami service previously relied on blocking sleeps while polling for D-Bus services to become ready after forking a process; this wouldn't work anymore since while blocking the service process wouldn't be given the chance to finish starting. The new reliance on Fibers in Shepherd's fork+exec-command in the helper 'send-dbus' procedure also meant that it wouldn't work outside of Shepherd anymore. Finally, the 'start-service' Shepherd procedure used in the test suite would cause the Jami daemon to be spawned multiple times (a bug introduced in Shepherd 0.9.0). To fix/simplify these problems, this change does the following: 1. Use the Guile AC/D-Bus library for D-Bus communication, which simplify things, such as avoiding the need to fork 'dbus-send' processes. 2. The non-blocking 'sleep' version of Fiber is used for the 'with-retries' waiting syntax. 3. A 'dbus' package variant is used to adjust the session bus configuration, tailoring it for the use case at hand. 4. Avoid start-service in the tests, preferring 'jami-service-available?' for now. * gnu/build/jami-service.scm (parse-dbus-reply, strip-quotes) (deserialize-item, serialize-boolean, dbus-dict->alist) (dbus-array->list, parse-account-ids, parse-account-details) (parse-contacts): Delete procedures. (%send-dbus-binary, %send-dbus-bus, %send-dbus-user, %send-dbus-group) (%send-dbus-debug): Delete parameters. (jami-service-running?): New procedure. (send-dbus/configuration-manager): Rename to... (call-configuration-manager-method): ... this. Turn METHOD into a positional argument. Turn ARGUMENTS into an optional argument. Invoke `call-dbus-method' instead of `send-dbus', adjusting callers accordingly. (get-account-ids, id->account-details, id->account-details) (id->volatile-account-details, username->id, add-account remove-account) (username->contacts, remove-contact, add-contact, set-account-details) (set-all-moderators, username->all-moderators?, username->moderators) (set-moderator): Adjust accordingly. (with-retries, send-dbus, dbus-available-services) (dbus-service-available?): Move to ... * gnu/build/dbus-service.scm: ... this new module. (send-dbus): Rewrite to use the Guile AC/D-Bus library. (%dbus-query-timeout, sleep*): New variables. (%current-dbus-connection): New parameter. (initialize-dbus-connection!, argument->signature-type) (call-dbus-method): New procedures. (dbus-available-services): Adjust accordingly. * gnu/local.mk (GNU_SYSTEM_MODULES): Register new module. * gnu/packages/glib.scm (dbus-for-jami): New variable. * gnu/services/telephony.scm: (jami-configuration)[dbus]: Default to dbus-for-jami. (jami-dbus-session-activation): Write a D-Bus daemon configuration file at '/var/run/jami/session-local.conf'. (jami-shepherd-services): Add the closure of guile-ac-d-bus and guile-fibers as extensions. Adjust imported modules. Remove no longer used parameters. <jami-dbus-session>: Use a PID file, avoiding the need for the manual synchronization. <jami>: Set DBUS_SESSION_BUS_ADDRESS environment variable. Poll using 'jami-service-available?' instead of 'dbus-service-available?'. * gnu/tests/telephony.scm (run-jami-test): Add needed Guile extensions. Set DBUS_SESSION_BUS_ADDRESS environment variable. Adjust all tests to use 'jami-service-available?' to determine if the service is started rather than the now problematic Shepherd's 'start-service'. Maxim Cournoyer