all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* Continuing the work on the recipes related to GNU Ring
@ 2017-03-18 23:20 Adonay Felipe Nogueira
  2017-03-19  2:25 ` John Darrington
                   ` (2 more replies)
  0 siblings, 3 replies; 18+ messages in thread
From: Adonay Felipe Nogueira @ 2017-03-18 23:20 UTC (permalink / raw)
  To: Desenvolvimento de Guix e GuixSD

[-- Attachment #1: Type: text/plain, Size: 1633 bytes --]

Here is a work-in-progress set of package definitions, the packages are
upgraded to their latest version, except for:

- pjproject(-sfl) :: Which I upgraded to 2.5.5 so as to respect the
  compatibility of the patches that are in "[Tarball with
  sfl-patches]/ring-project/daemon/contrib/src/pjproject". Although
  version 2.6 of the original pjprojects is out.

- argon2 and opendht :: For which I copied the recipe from Guix servers,
  bud didn't check for new versions yet (not even in the original
  recipes). I copied the original ones so as to try to apply the changes
  proposed by Mx. Gradl. However, I do know that we must send changes to
  upstream (this is why the first FIXME reflects such need), I just want
  to have a working patch (no need to commit it) so as to make sure
  things work across all Guix users.

Currently, the "configure" phase of the "libring" package is failing due
to missing "restbed" dependency.

-- 
- [[https://libreplanet.org/wiki/User:Adfeno]]
- Palestrante e consultor sobre /software/ livre (não confundir com
  gratis).
- "WhatsApp"? Ele não é livre, por isso não uso. Iguais a ele prefiro
  Ring, ou Tox. Quer outras formas de contato? Adicione o vCard que
  está no endereço acima aos teus contatos.
- Pretende me enviar arquivos .doc, .ppt, .cdr, ou .mp3? OK, eu
  aceito, mas não repasso. Entrego apenas em formatos favoráveis ao
  /software/ livre. Favor entrar em contato em caso de dúvida.
- "People said I should accept the world. Bullshit! I don't accept the
  world."
                                                 --- Richard Stallman

[-- Attachment #2: ring.scm --]
[-- Type: application/octet-stream, Size: 16520 bytes --]

(define-module (ring)
  #:use-module (gnu packages)
  #:use-module (gnu packages aidc)
  #:use-module (gnu packages audio)
  #:use-module (gnu packages autotools)
  #:use-module (gnu packages boost)
  #:use-module (gnu packages check)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages crypto)
  #:use-module (gnu packages documentation)
  #:use-module (gnu packages gettext)
  #:use-module (gnu packages glib)
  #:use-module (gnu packages gnome)
  #:use-module (gnu packages gtk)
  #:use-module (gnu packages libupnp)
  #:use-module (gnu packages linux)
  #:use-module (gnu packages multiprecision)
  #:use-module (gnu packages nettle)
  #:use-module (gnu packages pcre)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages pulseaudio)
  #:use-module (gnu packages qt)
  #:use-module (gnu packages readline)
  #:use-module (gnu packages serialization)
  #:use-module (gnu packages telephony)
  #:use-module (gnu packages tls)
  #:use-module (gnu packages video)
  #:use-module (gnu packages xiph)
  #:use-module (guix build-system gnu)
  #:use-module (guix build-system cmake)
  #:use-module (guix download)
  #:use-module (guix git-download)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix packages))

;;; FIXME Send patches to upstream.

(define-public pjproject-sfl
  (let ((sfl-patches
	 (origin
	  (method url-fetch)
	  (uri "http://dl.ring.cx/ring-release/tarballs/ring_20170316.1.06a3f0b.tar.gz")
	  (sha256
	   (base32
	    "1nqpql3343d7icjfbzlwkm8ai5hrx54x03v726g5d6c24ixlzdrb")))))
    (package
     (name "pjproject")
     (version "2.5.5")
     (source
      (origin
       (method url-fetch)
       (uri (string-append
	     "http://www.pjsip.org/release/";
	     version "/" name "-" version ".tar.bz2"))
       (modules '((guix build utils)))
       (snippet
	'(begin
	   ;; The following removes bundled packages except for 'resample'.
	   ;; Pjproject uses some of the source files of resample and one own
	   ;; header (resamplesubs.h) not included with resample to build a
	   ;; shared library.  Upstream resample does not build this
	   ;; library. The license of resample is the LGPL2;; The homepage of resample is at:
	   ;; https://ccrma.stanford.edu/~jos/resample/Free_Resampling_Software.html
	   (let ((third-party-directories
		  (list "BaseClasses" "bdsound" "bin" "g7221" "gsm"
			"ilbc" "lib" "milenage" "mp3" "speex" "srtp"
			;; Keep only resample, build and README.txt.
			"build/baseclasses" "build/g7221" "build/gsm"
			"build/ilbc" "build/milenage" "build/samplerate"
			"build/speex" "build/srtp")))
	     ;; Keep only Makefiles related to resample.
	     (for-each (lambda (file)
			 (delete-file-recursively
			  (string-append "third_party/" file)))
		       third-party-directories)
	     #t)
	   (let ((third-party-dirs
		  (list "gsm" "ilbc" "speex" "g7221" "srtp")))
	     (for-each
	      (lambda (dirs)
		(substitute* "third_party/build/os-linux.mak"
			     (((string-append "DIRS += " dirs)) "")))
	      third-party-dirs))))
       (sha256
	(base32
	 "1wq8lpfcd4dfrbl7bgy2yzgp3ldjzq5430fqkhcqad0xfrxj0fdb"))))
     (build-system gnu-build-system)
     (inputs
      `(("portaudio" ,portaudio)))
     (propagated-inputs
      ;; These packages are referenced in the Libs field of the pkg-config
      ;; file that will be installed by pjproject.
      `(("speex" ,speex)
	("libsrtp" ,libsrtp)
	("gnutls" ,gnutls)
	("util-linux" ,util-linux)))
     (native-inputs
      `(("sfl-patches" ,sfl-patches)
	;; These patches are distributed with the libring source.  They
	;; contain various nontrivial changes such as the use of gnutls
	;; instead of openssl.
	("autoconf" ,autoconf)
	("automake" ,automake)
	("pkg-config" ,pkg-config)
	("libtool" ,libtool)))
     (arguments
      `(#:tests? #f ; FIXME make: No rule to make target
		    ; 'pjlib-test-unknown-[something]-gnu'.
	;; #:test-target "selftest"
	#:configure-flags  ;; The disabled features are not used by libring.
	;; Comes from "ring-project/daemon/contrib/src/pjproject/rules.mak".
	(list "--disable-oss"
	      "--disable-sound"
	      "--disable-video"
	      "--enable-ext-sound"
	      "--disable-speex-aec"
	      "--disable-g711-codec"
	      "--disable-l16-codec"
	      "--disable-gsm-codec"
	      "--disable-g722-codec"
	      "--disable-g7221-codec"
	      "--disable-speex-codec"
	      "--disable-ilbc-codec"
	      "--disable-opencore-amr"
	      "--disable-silk"
	      "--disable-sdl"
	      "--disable-ffmpeg"
	      "--disable-v4l2"
	      "--disable-openh264"
	      "--disable-resample"
	      "--enable-ssl=gnutls"
	      ;; Now deviating from the rules.mak file.
	      "--with-external-srtp"
	      ;; Now back to following the rules.mak file.
	      "CFLAGS=-DPJ_ICE_MAX_CAND=32 -DPJ_ICE_MAX_CHECKS=150 -DPJ_ICE_COMP_BITS=2 -DPJ_ICE_MAX_STUN=3 -DPJSIP_MAX_PKT_LEN=8000")
	#:phases
	(modify-phases %standard-phases
		       (add-after 'unpack 'apply-patches
				  (lambda* (#:key inputs #:allow-other-keys)
					   (let ((patch-dir "patch-dir")
						 ;; Comes from
						 ;; "ring-project/daemon/contrib/src/pjproject/rules.mak".
						 (patches
						  '("endianness"
						    "gnutls"
						    "notestsapps"
						    "ipv6"
						    "ice_config"
						    "multiple_listeners"
						    "pj_ice_sess"
						    "fix_turn_fallback"
						    "fix_ioqueue_ipv6_sendto"
						    "add_dtls_transport")))
					     (mkdir patch-dir)
					     (system* "tar" "-xvf" (assoc-ref inputs "sfl-patches")
						      "-C" patch-dir "--strip-components=5" "ring-project/daemon/contrib/src/pjproject")
					     (for-each
					      (lambda (file)
						(zero?
						 (system* "patch" "--force" "-p1" "-i"
							  (string-append patch-dir "/"
									 file ".patch"))))
					      patches))))
		       (add-before 'build 'build-dep
				   (lambda _ (zero? (system* "make" "dep"))))
		       (add-before 'patch-source-shebangs 'autoconf
				   (lambda _
				     (zero?
				      (system* "autoconf" "-v" "-f" "-i" "-o"
					       "aconfigure" "aconfigure.ac"))))
		       (add-before 'autoconf 'disable-some-tests
				   ;; Three of the six test programs fail due to missing network
				   ;; access.
				   (lambda _
				     (substitute* "Makefile"
						  (("selftest: pjlib-test pjlib-util-test pjnath-test pjmedia-test pjsip-test pjsua-test")
						   "selftest: pjlib-test pjlib-util-test pjmedia-test")))))))		       
     (home-page "www.pjsip.org")
     (synopsis "Session Initiation Protocol (SIP) stack")
     (description "PJProject provides an implementation of the Session
Initiation Protocol (SIP) and a multimedia framework. This package is intended
for use with libring.  There are several custom patches, most notably the use
of gnutls instead of openssl for encryption.")
     (license '(license:gpl2 ; pjproject
		license:gpl3 ; sfl-patches
		license:lgpl2+))))) ; bundled resample

(define-public argon2
  (package
   (name "argon2")
   (version "20161029")
   (source
    (origin
     (method url-fetch)
     (uri
      (string-append "https://github.com/P-H-C/phc-winner-argon2/archive/"
		     version ".tar.gz"))
     (file-name (string-append name "-" version ".tar.gz"))
     (snippet
      '(let ((p (open-file "argon2.pc" "w")))
	 (begin
	   (display
	    (string-append "prefix=/usr/local\n"
			   "exec_prefix=${prefix}\n"
			   "includedir=${prefix}/include\n"
			   "libdir=${prefix}/lib\n\n"
			   "Name: Argon2\n"
			   "Description: "
			   "The Argon2 password hashing algorithm\n"
			   "Version: 1.0.0\n"
			   "Cflags: -I${includedir}/\n"
			   "Libs: -L${libdir} -largon2\n") p)
	   (close-output-port p))))
     (sha256
      (base32
       "1rymikbysasdadm325jx69i0q19d9srqkny69jwmhswlidr4j07y"))))
   (build-system gnu-build-system)
   (arguments
    `(#:test-target "test"
      #:make-flags '("CC=gcc")
      #:phases
      (modify-phases %standard-phases
		     (delete 'configure)
		     (add-after 'unpack 'fix-pkg-config
				(lambda _
				  (substitute* "argon2.pc"
					       (("/usr/local")
						(assoc-ref %outputs "out")))))
		     (replace 'install
			      (lambda _
				(let ((out (assoc-ref %outputs "out")))
				  (install-file "argon2" (string-append out "/bin"))
				  (install-file "libargon2.a" (string-append out "/lib"))
				  (install-file "libargon2.so" (string-append out "/lib"))
				  (install-file "argon2.pc"
						(string-append out "/lib/pkgconfig"))
				  (copy-recursively "include"
						    (string-append out "/include"))
				  (symlink (string-append out "/lib/libargon2.so")
					   (string-append out "/lib/libargon2.so.0"))))))))
   (home-page "https://www.argon2.com/")
   (synopsis "Password hashing library")
   (description "Argon2 provides a key derivation function that was declared
winner of the 2015 Password Hashing Competition.")
   (license license:cc0)))

(define-public opendht
  (package
   (name "opendht")
   (version "0.6.1")
   (source
    (origin
     (method url-fetch)
     (uri
      (string-append
       "https://github.com/savoirfairelinux/" name
       "/archive/" version ".tar.gz"))
     (file-name (string-append name "-" version ".tar.gz"))
     (modules '((guix build utils)))
     (snippet
      '(begin
	 (delete-file-recursively "src/argon2")
	 (substitute* "src/Makefile.am"
		      (("./argon2/libargon2.la") "")
		      (("SUBDIRS = argon2") "")
		      (("libopendht_la_LDFLAGS = @LDFLAGS@")
		       "libopendht_la_LDFLAGS = @LDFLAGS@ @argon2_LIBS@"))
	 (substitute* "src/crypto.cpp"
		      (("argon2/argon2.h") "argon2.h"))
	 (substitute* "configure.ac"
		      (("src/argon2/Makefile") "")
		      (("PKG_CHECK_MODULES..GNUTLS.. .gnutls .. 3.1..")
		       "PKG_CHECK_MODULES([GNUTLS], [gnutls >= 3.1])\nPKG_CHECK_MODULES([argon2], [argon2 >= 1.0])"))
	 (substitute* "opendht.pc.in"
		      (("Libs: -L..libdir. -lopendht")
		       (string-append "Libs: -L${libdir} -lopendht\n"
				      "Requires: argon2")))))
     (sha256
      (base32
       "09yvkmbqbym3b5md4n96qc1s9sf2n8ji404hagih45rmsj49599x"))))
   (build-system gnu-build-system)
   (inputs
    `(("gnutls" ,gnutls)
      ("nettle" ,nettle)
      ("readline" ,readline)))
   (propagated-inputs
    `(("argon2" ,argon2)
      ("msgpack" ,msgpack)))           ;included in several installed headers
   (native-inputs
    `(("autoconf" ,autoconf)
      ("pkg-config" ,pkg-config)
      ("automake" ,automake)
      ("libtool" ,libtool)))
   (arguments
    `(#:configure-flags '("--disable-tools" "--disable-python")
      #:phases (modify-phases %standard-phases
			      (add-before 'configure 'autoconf
					  (lambda _
					    (zero? (system* "autoreconf" "-vfi")))))))
   (home-page "https://github.com/savoirfairelinux/opendht/")
   (synopsis "Distributed Hash Table (DHT) library")
   (description "OpenDHT is a Distributed Hash Table (DHT) library.  It may
be used to manage peer-to-peer network connections as needed for real time
communication.")
   (license license:gpl3)))

(define-public libring
  ;; FIXME "configure" phase Fails due to missing "restbed".
  (package
   (name "libring")
   (version "20170316.1.06a3f0b")
   (source
    (origin
     (method url-fetch)
     (uri "http://dl.ring.cx/ring-release/tarballs/ring_20170316.1.06a3f0b.tar.gz")
     (modules '((guix build utils)))
     (snippet
      '(begin
	 (delete-file-recursively "daemon/contrib")))
     (sha256
      (base32
       "1nqpql3343d7icjfbzlwkm8ai5hrx54x03v726g5d6c24ixlzdrb"))))
   (build-system gnu-build-system)
   (inputs
    `(("alsa-lib" ,alsa-lib)
      ("boost" ,boost)
      ("dbus-c++" ,dbus-c++)
      ("eudev" ,eudev)
      ("ffmpeg" ,ffmpeg)
      ("flac" ,flac)
      ("gmp" ,gmp)
      ("gsm" ,gsm)
      ("jack" ,jack-1)
      ("jsoncpp" ,jsoncpp)
      ("libogg" ,libogg)
      ("opendht" ,opendht)
      ("opus" ,opus)
      ("pcre" ,pcre)
      ("pjproject" ,pjproject-sfl)
      ("pulseaudio" ,pulseaudio)
      ("libsamplerate" ,libsamplerate)
      ("libsndfile" ,libsndfile)
      ("speex" ,speex)
      ("libupnp" ,libupnp)
      ("libvorbis" ,libvorbis)
      ("libx264" ,libx264)
      ("yaml-cpp" ,yaml-cpp)
      ("zlib" ,zlib)))
   (native-inputs
    `(("autoconf" ,autoconf)
      ("pkg-config" ,pkg-config)
      ("automake" ,automake)
      ("libtool" ,libtool)
      ("cppunit" ,cppunit)
      ("perl" ,perl))) ; Needed for documentation.
   (arguments
    `(#:tests? #f ; The tests fail to compile due to missing headers.
      #:phases
      (modify-phases %standard-phases
		     (add-before 'configure 'change-directory-and-do-autoconf
				 (lambda _
				   (chdir "daemon")
				   (zero? (system* "autoreconf" "-vfi"))))
		     (add-before 'build 'add-lib-dir
				 (lambda _
				   (mkdir "src/lib"))))))
   (synopsis "Distributed multimedia communications platform")
   (description "Ring is a secure and distributed voice, video and chat
communication platform that requires no centralized server and leaves the
power of privacy in the hands of the user.  It supports the SIP and IAX
protocols, as well as decentralized calling using P2P-DHT.

This package provides a library and daemon implementing the Ring core 
functionality.")
   (home-page "https://ring.cx/")
   (license license:gpl3+)))

(define-public libringclient
  (package
   (name "libringclient")
   (version "20170316.1.06a3f0b")
   (source
    (origin
     (method url-fetch)
     (uri "http://dl.ring.cx/ring-release/tarballs/ring_20170316.1.06a3f0b.tar.gz")
     (sha256
      (base32
       "1nqpql3343d7icjfbzlwkm8ai5hrx54x03v726g5d6c24ixlzdrb"))))
   (build-system cmake-build-system)
   (propagated-inputs
    `(("libring" ,libring) ; For 'dring'.
      ("qtbase" ,qtbase) ; Qt is included in several installed headers.
      ("qttools" ,qttools)))
   (arguments
    `(#:tests? #f ; There is no testsuite.
      #:configure-flags
      (list (string-append
	     "-DRING_BUILD_DIR="
	     (assoc-ref %build-inputs "libring")
	     "/daemon/include"))
      #:phases
      (modify-phases %standard-phases
		     (add-after 'configure 'find-dbus-interfaces
				(lambda* (#:key inputs outputs #:allow-other-keys)
					 (substitute* "CMakeFiles/ringclient.dir/build.make"
						      (((string-append (assoc-ref outputs "out")
								       "/share/dbus-1/interfaces"))
						       (string-append (assoc-ref inputs "libring")
								      "/daemon/share/dbus-1/interfaces"))))))))
   (synopsis "Distributed multimedia communications platform")
   (description "Ring is a secure and distributed voice, video and chat
communication platform that requires no centralized server and leaves the
power of privacy in the hands of the user.  It supports the SIP and IAX
protocols, as well as decentralized calling using P2P-DHT.

This package provides a library common to all Ring clients.")
   (home-page "https://ring.cx/")
   (license license:gpl3+)))

(define-public ring-client-gnome
  ;; FIXME Find a way to tell Guix to only build what is inside
  ;; "client-gnome" path.
  (package
   (name "ring-client-gnome")
   (version "20170316.1.06a3f0b")
   (source
    (origin
     (method url-fetch)
     (uri "http://dl.ring.cx/ring-release/tarballs/ring_20170316.1.06a3f0b.tar.gz")
     (sha256
      (base32
       "1nqpql3343d7icjfbzlwkm8ai5hrx54x03v726g5d6c24ixlzdrb"))))
   (build-system cmake-build-system)
   (inputs
    `(("libringclient" ,libringclient)
      ("gtk+" ,gtk+)
      ("glib:bin" ,glib "bin")
      ("qrencode" ,qrencode)
      ("libnotify" ,libnotify)
      ("clutter" ,clutter)
      ("clutter-gtk" ,clutter-gtk)
      ("gettext" ,gnu-gettext)))
   (native-inputs
    `(("pkg-config" ,pkg-config)
      ("doxygen" ,doxygen)))
   (propagated-inputs
    `(("libring" ,libring) ; This is needed to run dring.
      ("adwaita-icon-theme" ,adwaita-icon-theme)
      ("evolution-data-server" ,evolution-data-server)))
   (arguments
    `(#:tests? #f ; There is no testsuite.
      #:phases
      (modify-phases %standard-phases
		     (add-before 'configure 'change-directory
				 (lambda _
				   (chdir "client-gnome"))))))
   (synopsis "Distributed multimedia communications platform")
   (description "Ring is a secure and distributed voice, video and chat
communication platform that requires no centralized server and leaves the
power of privacy in the hands of the user.  It supports the SIP and IAX
protocols, as well as decentralized calling using P2P-DHT.

This package provides the Ring client for the Gnome Desktop.")
   (home-page "https://ring.cx/")
   (license license:gpl3+)))

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Continuing the work on the recipes related to GNU Ring
  2017-03-18 23:20 Continuing the work on the recipes related to GNU Ring Adonay Felipe Nogueira
@ 2017-03-19  2:25 ` John Darrington
  2017-03-22 19:20 ` Adonay Felipe Nogueira
  2017-04-20 13:55 ` Adonay Felipe Nogueira
  2 siblings, 0 replies; 18+ messages in thread
From: John Darrington @ 2017-03-19  2:25 UTC (permalink / raw)
  To: Adonay Felipe Nogueira; +Cc: Desenvolvimento de Guix e GuixSD

[-- Attachment #1: Type: text/plain, Size: 1575 bytes --]

On Sat, Mar 18, 2017 at 08:20:32PM -0300, Adonay Felipe Nogueira wrote:
     Here is a work-in-progress set of package definitions, the packages are
     upgraded to their latest version, except for:
     
     - pjproject(-sfl) :: Which I upgraded to 2.5.5 so as to respect the
       compatibility of the patches that are in "[Tarball with
       sfl-patches]/ring-project/daemon/contrib/src/pjproject". Although
       version 2.6 of the original pjprojects is out.
     
     - argon2 and opendht :: For which I copied the recipe from Guix servers,
       bud didn't check for new versions yet (not even in the original
       recipes). I copied the original ones so as to try to apply the changes
       proposed by Mx. Gradl. However, I do know that we must send changes to
       upstream (this is why the first FIXME reflects such need), I just want
       to have a working patch (no need to commit it) so as to make sure
       things work across all Guix users.
     
     Currently, the "configure" phase of the "libring" package is failing due
     to missing "restbed" dependency.
     

Thanks for doing this.  I look forward to being able to make my first GNU Ring
call on GuixSD!

Are any of the outstanding things you mention reasonable candidates for another
developer to handle on his own?

J'


-- 
Avoid eavesdropping.  Send strong encrypted email.
PGP Public key ID: 1024D/2DE827B3 
fingerprint = 8797 A26D 0854 2EAB 0285  A290 8A67 719C 2DE8 27B3
See http://sks-keyservers.net or any PGP keyserver for public key.


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Continuing the work on the recipes related to GNU Ring
  2017-03-18 23:20 Continuing the work on the recipes related to GNU Ring Adonay Felipe Nogueira
  2017-03-19  2:25 ` John Darrington
@ 2017-03-22 19:20 ` Adonay Felipe Nogueira
  2017-03-22 19:56   ` Leo Famulari
  2017-03-24 23:42   ` Adonay Felipe Nogueira
  2017-04-20 13:55 ` Adonay Felipe Nogueira
  2 siblings, 2 replies; 18+ messages in thread
From: Adonay Felipe Nogueira @ 2017-03-22 19:20 UTC (permalink / raw)
  To: guix-devel

[-- Attachment #1: Type: text/plain, Size: 4727 bytes --]

Today, I bring you some good and bad news! :)

* The good news

I'm attaching an improved version of my previous set of recipes.

This should allow *GuixSD* users to use GNU Ring straight away.

However, both Guix users (in foreign distributions) and GuixSD users,
must be advised that this is a work-in-progress, and there are still
untested parts, or parts that were overlooked due to my lack of
experience as developer and all things related to "ld"-stuff and with
other build and developer tools and practices.

If you really want to help out, even if just for testing, please read
on.

* The bad news

After installing at least ring-client-gnome, Guix now suggests the user
to add a custom XDG_DATA_DIRS variable to his "~/.profile" file. For
Guix users in foreign distributions, this might cause an unwanted log-in
loop, described in Guix bug #26202
([[http://lists.gnu.org/archive/html/bug-guix/2017-03/msg00200.html]] or
[[https://debbugs.gnu.org/cgi/bugreport.cgi?bug=26202]]).

* What was not tested

- Everything, including integration with GNOME Evolution data server
  (for contact list and management), both for GNOME Evolution comming
  from Guix, from GuixSD, or from a foreign distribution (because I
  don't use GNOME Evolution, although it comes by default in Trisquel
  7).

* What might need improvement

- Convince Ring to send their patches to their respective upstreams! :D

- Talk to Ring project to see if so much customization is really
  needed. Perhaps they have patches and "rules.mak" files only so that
  their work "gets lighter", but that might not be a requirement.

- For some reason, the Ring daemon (that is provided by "libring"
  package) doesn't come installed with Ring GNOME client (provided by
  "ring-client-gnome").

- Even after installed, the Ring daemon is actually located at
  "${HOME}/.guix-profile/lib/ring/dring". I guess this deosn't sound
  right for an executable.

- Look in the source code of the newly added packages for things I have
  missed, that might need to be corrected, like bundled stuff, or paths
  that should be pointing to store references.

- See section "What was not tested".

- Split the Ring tarball (ring[something].tar.gz) into useful separated
  ones.

  - Or find a way to get each part separatedly from their git
    repositories, making sure that we are indeed getting the code
    corresponding to beta 2.

- For more things to do, read the attached package definitions file.

* Notes for package maintainers

- All the packages are either new or heavily modified to follow patches
  and "rules.mak" files present inside
  "ring[something].tar.gz/ring-project/daemon/contrib/src".

- The only packages that are upgrades to existing ones (but still
  heavily modified) are argon2 and opendht.

* Notes for testers

- When installing:

  - Disable grafts (use `--no-grafts` option), otherwise you might be
    getting the original argon2 and opendht recipes.

  - Install "libring" and "ring-client-gnome".

- After installing:

  - If Guix tells you to change XDG_DATA_DIRS in your "~/.profile",
    don't do it, instead copy what is suggested to be done, and write it
    as a comment (prefixed with "#") to that file, and see the links I
    referenced so far. You'll still need what was suggested by Guix, so
    commenting it is an useful way to save it for later.

- Before using (each time):

  - In a new terminal, do:

    1. Take the line Guix suggested, and paste it (remove the "#" prefix,
       of course), and press Return (or Enter) to use it as command.

    2. Now run: ".guix-profile/lib/ring/dring" -p

    - This will start the Ring daemon in persistent mode, and make the
      current terminal busy (unresponsible, ignoring almost all
      input). It'll only exit if you press Ctrl + C (or force it to
      terminate.

    4. Do step 1 again in another terminal.

    5. Finally, in this other terminal, run "gnome-ring" client.

-- 
- [[https://libreplanet.org/wiki/User:Adfeno]]
- Palestrante e consultor sobre /software/ livre (não confundir com
  gratis).
- "WhatsApp"? Ele não é livre, por isso não uso. Iguais a ele prefiro
  Ring, ou Tox. Quer outras formas de contato? Adicione o vCard que
  está no endereço acima aos teus contatos.
- Pretende me enviar arquivos .doc, .ppt, .cdr, ou .mp3? OK, eu
  aceito, mas não repasso. Entrego apenas em formatos favoráveis ao
  /software/ livre. Favor entrar em contato em caso de dúvida.
- "People said I should accept the world. Bullshit! I don't accept the
  world."
                                                 --- Richard Stallman

[-- Attachment #2: ring.scm --]
[-- Type: application/octet-stream, Size: 27508 bytes --]

(define-module (ring)
  #:use-module (gnu packages)
  #:use-module (gnu packages aidc)
  #:use-module (gnu packages audio)
  #:use-module (gnu packages autotools)
  #:use-module (gnu packages base)
  #:use-module (gnu packages boost)
  #:use-module (gnu packages check)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages crypto)
  #:use-module (gnu packages documentation)
  #:use-module (gnu packages gettext)
  #:use-module (gnu packages glib)
  #:use-module (gnu packages gnome)
  #:use-module (gnu packages gtk)
  #:use-module (gnu packages libupnp)
  #:use-module (gnu packages linux)
  #:use-module (gnu packages multiprecision)
  #:use-module (gnu packages nettle)
  #:use-module (gnu packages pcre)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages python)
  #:use-module (gnu packages pulseaudio)
  #:use-module (gnu packages qt)
  #:use-module (gnu packages readline)
  #:use-module (gnu packages serialization)
  #:use-module (gnu packages telephony)
  #:use-module (gnu packages tls)
  #:use-module (gnu packages video)
  #:use-module (gnu packages webkit)
  #:use-module (gnu packages xiph)
  #:use-module (gnu packages xorg)
  #:use-module (gnu packages zip)
  #:use-module (guix build-system gnu)
  #:use-module (guix build-system cmake)
  #:use-module (guix download)
  #:use-module (guix git-download)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix packages)
  #:use-module (guix utils)
  #:use-module (ice-9 match))

;;; FIXME Convince upstream, Ring, to send patches to their upstreams.
;;; FIXME See if the combination of Savoir-faire Linux's pjproject +
;;; restbed + Ring daemon is OK.

(define-public savoir-faire-linux-pjproject
  (let ((savoir-faire-linux-patches
	 (origin
	  (method url-fetch)
	  (uri "http://dl.ring.cx/ring-release/tarballs/ring_20170316.1.06a3f0b.tar.gz")
	  (sha256
	   (base32
	    "1nqpql3343d7icjfbzlwkm8ai5hrx54x03v726g5d6c24ixlzdrb")))))
    (package
     (name "pjproject")
     (version "2.5.5")
     (source
      (origin
       (method url-fetch)
       (uri (string-append
	     "http://www.pjsip.org/release/";
	     version "/" name "-" version ".tar.bz2"))
       (modules '((guix build utils)))
       (snippet
	'(begin
	   (let ((third-party-directories
		  (list "BaseClasses" "bdsound" "bin" "g7221" "gsm"
			"ilbc" "lib" "milenage" "mp3" "speex" "srtp"
			"resample"
			;; Keep only resample, build and README.txt.
			"build/baseclasses" "build/g7221" "build/gsm"
			"build/ilbc" "build/milenage" "build/samplerate"
			"build/speex" "build/srtp"
			"build/resample" "build/yuv")))
	     ;; Keep only Makefiles related to resample.
	     (for-each (lambda (file)
			 (delete-file-recursively
			  (string-append "third_party/" file)))
		       third-party-directories)
	     #t)
	   (let ((third-party-dirs
		  (list "gsm" "ilbc" "speex" "g7221" "srtp"
			"portaudio" "resample")))
	     (for-each
	      (lambda (dirs)
		(substitute* "third_party/build/os-linux.mak"
			     (((string-append "DIRS += " dirs)) "")))
	      third-party-dirs))))
       (sha256
	(base32
	 "1wq8lpfcd4dfrbl7bgy2yzgp3ldjzq5430fqkhcqad0xfrxj0fdb"))))
     (build-system gnu-build-system)
     (inputs
      `(("portaudio" ,portaudio)))
     (propagated-inputs
      ;; These packages are referenced in the Libs field of the pkg-config
      ;; file that will be installed by pjproject.
      `(("speex" ,speex)
	("libsrtp" ,libsrtp)
	("gnutls" ,gnutls)
	("util-linux" ,util-linux)))
     (native-inputs
      `(("savoir-faire-linux-patches" ,savoir-faire-linux-patches)
	("autoconf" ,autoconf)
	("automake" ,automake)
	("pkg-config" ,pkg-config)
	("libtool" ,libtool)))
     (arguments
      `(#:tests? #f ; FIXME make: No rule to make target
		    ; 'pjlib-test-unknown-[something]-gnu'.
	;; #:test-target "selftest"
	#:configure-flags
	;; The disabled features are not used by libring.  Comes from
	;; "ring-project/daemon/contrib/src/pjproject/rules.mak".
	;; NOTE This doesn't seem right, other packages might want
	;; some of these. We must talk to Ring project and ask why we
	;; need things to be built this way. One way out of this would
	;; be to tell it to use external things instead of disabling.
	(list "--enable-ext-sound"
	      "--enable-ssl=gnutls"
	      "--disable-oss"
	      "--disable-sound"
	      "--disable-video"
	      "--disable-speex-aec"
	      "--disable-g711-codec"
	      "--disable-l16-codec"
	      "--disable-gsm-codec"
	      "--disable-g722-codec"
	      "--disable-g7221-codec"
	      "--disable-speex-codec"
	      "--disable-ilbc-codec"
	      "--disable-opencore-amr"
	      "--disable-silk"
	      "--disable-sdl"
	      "--disable-ffmpeg"
	      "--disable-v4l2"
	      "--disable-openh264"
	      "--disable-resample"
	      ;; Now deviating from the rules.mak file.
	      "--with-external-srtp"
	      ;; Now back to following the rules.mak file.
	      "CFLAGS=-DPJ_ICE_MAX_CAND=32 -DPJ_ICE_MAX_CHECKS=150 -DPJ_ICE_COMP_BITS=2 -DPJ_ICE_MAX_STUN=3 -DPJSIP_MAX_PKT_LEN=8000")
	#:phases
	(modify-phases %standard-phases
		       (add-after 'unpack 'apply-patches
				  (lambda* (#:key inputs #:allow-other-keys)
					   (let ((savoir-faire-linux-patches-directory "Savoir-faire Linux patches")
						 ;; Comes from
						 ;; "ring-project/daemon/contrib/src/pjproject/rules.mak".
						 ;; NOTE These amount
						 ;; for huge changes
						 ;; in pjproject.
						 ;; Particularly, they
						 ;; add support for
						 ;; GnuTLS, which is
						 ;; completely lacking
						 ;; in pjproject
						 ;; 2.5.5.
						 (savoir-faire-linux-patches
						  '("endianness"
						    "gnutls"
						    "notestsapps"
						    "ipv6"
						    "ice_config"
						    "multiple_listeners"
						    "pj_ice_sess"
						    "fix_turn_fallback"
						    "fix_ioqueue_ipv6_sendto"
						    "add_dtls_transport")))
					     (mkdir savoir-faire-linux-patches-directory)
					     (system* "tar" "-xvf" (assoc-ref inputs "savoir-faire-linux-patches")
						      "-C" savoir-faire-linux-patches-directory "--strip-components=5" "ring-project/daemon/contrib/src/pjproject")
					     (for-each
					      (lambda (file)
						(zero?
						 (system* "patch" "--force" "-p1" "-i"
							  (string-append savoir-faire-linux-patches-directory "/"
									 file ".patch"))))
					      savoir-faire-linux-patches))))
		       (add-before 'build 'build-dep
				   (lambda _ (zero? (system* "make" "dep"))))
		       (add-before 'patch-source-shebangs 'autoconf
				   (lambda _
				     (zero?
				      (system* "autoconf" "-v" "-f" "-i" "-o"
					       "aconfigure" "aconfigure.ac"))))
		       (add-before 'autoconf 'disable-some-tests
				   ;; Three of the six test programs fail due to missing network
				   ;; access.
				   (lambda _
				     (substitute* "Makefile"
						  (("selftest: pjlib-test pjlib-util-test pjnath-test pjmedia-test pjsip-test pjsua-test")
						   "selftest: pjlib-test pjlib-util-test pjmedia-test")))))))		       
     (home-page "www.pjsip.org")
     (synopsis "Session Initiation Protocol (SIP) stack")
     (description "PJProject provides an implementation of the Session
Initiation Protocol (SIP) and a multimedia framework. This package is intended
for use with libring.  There are several custom patches, most notably the use
of gnutls instead of openssl for encryption.")
     ;; We should make the license only one, the one which is
     ;; effective as result of applying savoir-faire-linux-patches,
     ;; because we don't want to say that the whole package has two
     ;; licenses for which the user can "choose" from (dual licensing).
     (license '(license:gpl2+ ; NEW pjproject is under GNU GPL 2+, not
			      ; GNU GPL 2 (only).
		license:gpl3))))) ; Last time we checked, the
				  ; Savoir-faire Linux patches were
				  ; under GNU GPL 3 (only). Is this
				  ; still true?

(define-public argon2
  (package
   (name "argon2")
   (version "20161029")
   (source
    (origin
     (method url-fetch)
     (uri
      (string-append "https://github.com/P-H-C/phc-winner-argon2/archive/"
		     version ".tar.gz"))
     (file-name (string-append name "-" version ".tar.gz"))
     (snippet
      ;; As we already know, this is probably better to be already
      ;; included in argon2.
      '(let ((p (open-file "argon2.pc" "w")))
	 (begin
	   (display
	    (string-append "prefix=/usr/local\n"
			   "exec_prefix=${prefix}\n"
			   "includedir=${prefix}/include\n"
			   "libdir=${prefix}/lib\n\n"
			   "Name: Argon2\n"
			   "Description: "
			   "The Argon2 password hashing algorithm\n"
			   "Version: 1.0.0\n"
			   "Cflags: -I${includedir}/\n"
			   "Libs: -L${libdir} -largon2\n") p)
	   (close-output-port p))))
     (sha256
      (base32
       "1rymikbysasdadm325jx69i0q19d9srqkny69jwmhswlidr4j07y"))))
   (build-system gnu-build-system)
   (arguments
    `(#:test-target "test"
      #:make-flags '("CC=gcc")
      #:phases
      (modify-phases %standard-phases
		     (delete 'configure)
		     (add-after 'unpack 'fix-pkg-config
				(lambda _
				  (substitute* "argon2.pc"
					       (("/usr/local")
						(assoc-ref %outputs "out")))))
		     (replace 'install
			      (lambda _
				(let ((out (assoc-ref %outputs "out")))
				  (install-file "argon2" (string-append out "/bin"))
				  (install-file "libargon2.a" (string-append out "/lib"))
				  (install-file "libargon2.so" (string-append out "/lib"))
				  (install-file "argon2.pc"
						(string-append out "/lib/pkgconfig"))
				  (copy-recursively "include"
						    (string-append out "/include"))
				  (symlink (string-append out "/lib/libargon2.so")
					   (string-append out "/lib/libargon2.so.0"))))))))
   (home-page "https://www.argon2.com/")
   (synopsis "Password hashing library")
   (description "Argon2 provides a key derivation function that was declared
winner of the 2015 Password Hashing Competition.")
   (license license:cc0)))

(define-public opendht
  (package
   (name "opendht")
   (version "1.3.0")
   (source
    (origin
     (method url-fetch)
     (uri
      (string-append
       "https://github.com/savoirfairelinux/" name
       "/archive/" version ".tar.gz"))
     (file-name (string-append name "-" version ".tar.gz"))
     (modules '((guix build utils)))
     (snippet
      '(begin
	 (delete-file-recursively "src/argon2")
	 (substitute* "src/Makefile.am"
		      (("./argon2/libargon2.la") "")
		      (("SUBDIRS = argon2") "")
		      (("libopendht_la_LDFLAGS = @LDFLAGS@" all)
		       (string-append all " @argon2_LIBS@")))
	 (substitute* "src/crypto.cpp"
		      (("argon2/argon2.h") "argon2.h"))
	 (substitute* "configure.ac"
		      (("src/argon2/Makefile") "")
		      (("PKG_CHECK_MODULES\\(\\[[Gg][Nn][Uu][Tt][Ll][Ss]\\],[[:blank:]]+\\[gnutls.*$" all)
		       (string-append all "PKG_CHECK_MODULES([argon2], [argon2])\n")))
	 (substitute* "opendht.pc.in"
		      (("Libs: -L\\$\\{libdir\\} -lopendht" all)
		       (string-append all "\nRequires: argon2")))))
     (sha256
      (base32
       "1gqsxjfv7l5m25zxsyxyp70abcf3bvz3iqkv5aa1lj6fzz1rliws"))))
   (build-system gnu-build-system)
   (inputs
    `(("gnutls" ,gnutls)
      ("nettle" ,nettle)
      ("readline" ,readline)))
   (propagated-inputs
    `(("argon2" ,argon2)
      ("msgpack" ,msgpack))) ; included in several installed headers
   (native-inputs
    `(("autoconf" ,autoconf)
      ("pkg-config" ,pkg-config)
      ("automake" ,automake)
      ("libtool" ,libtool)))
   (arguments
    `(#:configure-flags '("--disable-tools"
			  "--disable-python")
      #:phases (modify-phases %standard-phases
			      (add-before 'configure 'autoconf
					  (lambda _
					    (zero? (system* "autoreconf" "-vfi")))))))
   (home-page "https://github.com/savoirfairelinux/opendht/")
   (synopsis "Distributed Hash Table (DHT) library")
   (description "OpenDHT is a Distributed Hash Table (DHT) library.  It may
be used to manage peer-to-peer network connections as needed for real time
communication.")
   (license license:gpl3+))) ; NEW It's under GNU GPL3+.

(define-public savoir-faire-linux-asio
  (let ((savoir-faire-linux-patches
	 (origin
	  (method url-fetch)
	  (uri "http://dl.ring.cx/ring-release/tarballs/ring_20170316.1.06a3f0b.tar.gz")
	  (sha256
	   (base32
	    "1nqpql3343d7icjfbzlwkm8ai5hrx54x03v726g5d6c24ixlzdrb")))))
    (package
     (name "asio")
     (version "28d9b8d")
     (source
      (origin
       (method url-fetch)
       (uri "https://github.com/chriskohlhoff/asio/archive/28d9b8d6df708024af5227c551673fdb2519f5bf.tar.gz")
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
	(base32 "07wp56vibqp1qp8ca1ahbhs8md7k22im7nmlx0haqxdgszp1zcvb"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("autoconf" ,autoconf)
	("automake" ,automake)
	("savoir-faire-linux-patches" ,savoir-faire-linux-patches)))
     (arguments
      ;; Comes from "ring-project/daemon/contrib/src/asio/rules.mak".
      ;; We must talk to Ring to know if disabling Asio integration
      ;; with Boost is a requirement.
      `(#:configure-flags '("--without-boost")
	#:phases
	(modify-phases %standard-phases
		       (add-after 'unpack 'change-directory-and-apply-patches
				  (lambda* (#:key inputs #:allow-other-keys)
					   (let ((savoir-faire-linux-patches-directory "Savoir-faire Linux patches")
						 ;; These patches just
						 ;; disable tests and
						 ;; examples.  We
						 ;; should convince
						 ;; Ring to send these
						 ;; patches to their
						 ;; upstream, asio.
						 (savoir-faire-linux-patches
						  '("no_tests_examples")))
					     (chdir "asio")
					     (mkdir savoir-faire-linux-patches-directory)
					     (system* "tar" "-xvf" (assoc-ref inputs "savoir-faire-linux-patches")
						      "-C" savoir-faire-linux-patches-directory "--strip-components=5" "ring-project/daemon/contrib/src/asio")
					     (for-each
					      (lambda (file)
						(zero?
						 (system* "patch" "--force" "-p1" "-i"
							  (string-append savoir-faire-linux-patches-directory "/"
									 file ".patch"))))
					      savoir-faire-linux-patches))))
		       (add-before 'configure 'run-autogen
				  (lambda _
				    (zero? (system* "./autogen.sh")))))))
     (synopsis "Asynchronous RESTful functionality to C++11 applications")
     (description "Restbed is a comprehensive and consistent programming
model for building applications that require seamless and secure
communication over HTTP.")
     (home-page "https://github.com/Corvusoft/restbed")
     (license license:boost1.0))))

(define-public savoir-faire-linux-restbed
  (let ((savoir-faire-linux-patches
	 (origin
	  (method url-fetch)
	  (uri "http://dl.ring.cx/ring-release/tarballs/ring_20170316.1.06a3f0b.tar.gz")
	  (sha256
	   (base32
	    "1nqpql3343d7icjfbzlwkm8ai5hrx54x03v726g5d6c24ixlzdrb")))))
    (package
     (name "restbed")
     (version "3418750")
     (source
      (origin
       (method url-fetch)
       (uri "https://github.com/Corvusoft/restbed/archive/34187502642144ab9f749ab40f5cdbd8cb17a54a.tar.gz")
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
	(base32 "1c96w83v0iz61bqd0safza698g8622dhsrrf01aigibj4cmsbjph"))))
     (build-system cmake-build-system)
     (inputs
      `(("asio" ,savoir-faire-linux-asio)
	("catch" ,catch-framework)
	("glibc" ,glibc)
	("openssl" ,openssl)))
     (native-inputs
      `(("savoir-faire-linux-patches" ,savoir-faire-linux-patches)))
     (arguments
      `(#:tests? #f
	;; Comes from "ring-project/daemon/contrib/src/restbed/rules.mak".
	#:configure-flags
	'("-DBUILD_TESTS=NO"
	  "-DBUILD_EXAMPLES=NO"
	  "-DBUILD_SSL=NO"
	  "-DBUILD_SHARED=NO")
	#:phases
	(modify-phases %standard-phases
		       (add-after 'unpack 'apply-patches-and-fix-paths
				  (lambda* (#:key inputs #:allow-other-keys)
					   (let ((savoir-faire-linux-patches-directory "Savoir-faire Linux patches")
						 (asio (assoc-ref inputs "asio"))
						 (catch (assoc-ref inputs "catch"))
						 (glibc (assoc-ref inputs "glibc"))
						 (openssl (assoc-ref inputs "openssl"))
						 ;; These patches deal
						 ;; with minor fixes.
						 ;; We should convince
						 ;; Ring upstream to
						 ;; send these patches
						 ;; to their upstream,
						 ;; restbed.
						 (savoir-faire-linux-patches
						  '("CMakeLists"
						    "strand"
						    "uri_cpp")))
					     (mkdir savoir-faire-linux-patches-directory)
					     (system* "tar" "-xvf" (assoc-ref inputs "savoir-faire-linux-patches")
						      "-C" savoir-faire-linux-patches-directory "--strip-components=5" "ring-project/daemon/contrib/src/restbed")
					     (for-each
					      (lambda (file)
						(zero?
						 (system* "patch" "--force" "-p1" "-i"
							  (string-append savoir-faire-linux-patches-directory "/"
									 file ".patch"))))
					      savoir-faire-linux-patches)
					     (substitute* "cmake/modules/Findasio.cmake"
							 (("(find_path\\( asio_INCLUDE asio\\.hpp HINTS ).*$" all begin)
							  (string-append begin " \"" asio "/include\" )")))
					     (substitute* "cmake/modules/Findcatch.cmake"
							 (("(find_path\\( catch_INCLUDE catch\\.hpp HINTS ).*$" all begin)
							  (string-append begin " \"" catch "/include\" )")))
					     (substitute* "cmake/modules/Findopenssl.cmake"
							 (("(find_library\\( ssl_LIBRARY ssl ssleay32 HINTS ).*$" all begin)
							  (string-append begin " \"" openssl "/lib\" )"))
							 (("(find_library\\( crypto_LIBRARY crypto libeay32 HINTS ).*$" all begin)
							  (string-append begin " \"" openssl "/lib\" )"))
							 (("(find_path\\( ssl_INCLUDE openssl/ssl\\.h HINTS ).*$" all begin)
							  (string-append begin " \"" openssl "/include\" )")))
					     (substitute* "cmake/modules/Findsyslog.cmake"
							 (("(find_path\\( syslog_INCLUDE syslog\\.h HINTS ).*$" all begin)
							  (string-append begin " \"" glibc "/include\" )")))))))))
     (synopsis "Asynchronous RESTful functionality to C++11 applications")
     (description "Restbed is a comprehensive and consistent programming
model for building applications that require seamless and secure
communication over HTTP.")
     (home-page "https://github.com/Corvusoft/restbed")
     (license license:agpl3+))))

(define-public crypto++
  (package
   (name "crypto++")
   (version "5.6.5")
   (source (origin
	    (method url-fetch)
	    (uri (let ((numeric-version
			(match (string-split version #\.)
			       ((first-digit other-digits ...)
				(string-append first-digit
					       (string-concatenate
						other-digits))))))
		   (string-append "https://cryptopp.com/cryptopp";
				  numeric-version ".zip")))
	    (sha256
	     (base32
	      "0d1cqdz369ivi082k59025wvxzywvkizw7i0pf5h0a1izs3g8pm7"))))
   (build-system gnu-build-system)
   (arguments
    `(#:make-flags
      (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
	    (string-append "BINDIR=" (assoc-ref %outputs "bin") "/bin")
	    (string-append "DATADIR=" (assoc-ref %outputs "doc") "/share")
	    "DISABLE_CXXFLAGS_OPTIMIZATIONS=1"
	    ;; Override "/sbin/ldconfig" with simply "echo" since
	    ;; we don't need ldconfig(8).
	    "LDCONF=echo")
      #:phases
      (modify-phases %standard-phases
		     (add-after 'unpack 'enter-source
				;; ??? Why are we in the TestData folder.
				(lambda _ (chdir "..") #t))
		     (add-after 'enter-source 'disable-optimizations
				(lambda _
				  ;; XXX: The disable optimizations
				  ;; flag above is not recognized in
				  ;; the current version. See
				  ;; https://github.com/weidai11/cryptopp/pull/354.
				  ;; For now, just remove it the dirty
				  ;; way.
				  (substitute* "GNUmakefile"
					       (("-march=native") ""))
				  #t))
		     (delete 'configure)
		     (add-after 'build 'build-shared
				(lambda _
				  ;; By default, only the static
				  ;; library is built.
				  (zero? (system* "make" "shared"))))
		     (add-after 'install 'move-static-library
				(lambda* (#:key outputs #:allow-other-keys)
					 (let* ((out (assoc-ref outputs "out"))
						(lib (string-append out "/lib"))
						(static (assoc-ref outputs "static"))
						(slib (string-append static "/lib")))
					   (mkdir-p slib)
					   (for-each (lambda (file)
						       (install-file file slib)
						       (delete-file file))
						     (find-files lib "\\.l?a$"))
					   #t)))
		     (add-after 'move-static-library 'add-so-version-symlink
				;; The library is named
				;; MAJOR.MINOR.PATCHLEVEL. Some
				;; programs expect a MAJOR.MINOR
				;; symlink.
				(lambda* (#:key outputs #:allow-other-keys)
					 (let ((out (assoc-ref outputs "out"))
					       (major+minor ,(version-major+minor version)))
					   (with-directory-excursion (string-append out "/lib")
								     (symlink (string-append "libcryptopp.so." ,version)
									      (string-append "libcryptopp.so." major+minor))
								     #t)))))))
   (outputs '("out"              ; 6.4M shared library and headers
	      "bin"              ; 6.3M cryptest.exe
	      "doc"              ; 6.4M documentation and examples
	      "static"))         ; 15M static library
   (native-inputs
    `(("unzip" ,unzip)))
   (synopsis "C++ class library of cryptographic schemes")
   (description "Crypto++ is a large collection of cryptograhic algorithms and related utilities for C++.")
   (home-page "https://cryptopp.com")
	      ;; The compilation is licensed under Boost 1.0, while
	      ;; most individual files are in the public domain.
	      ;; Should we add two licenses?
   (license (list license:boost1.0
		  license:public-domain))))

(define-public libring
  (package
   (name "libring")
   (version "20170316.1.06a3f0b")
   (source
    (origin
     (method url-fetch)
     (uri "http://dl.ring.cx/ring-release/tarballs/ring_20170316.1.06a3f0b.tar.gz")
     (modules '((guix build utils)))
     (snippet
      '(begin
	 (delete-file-recursively "daemon/contrib")))
     (sha256
      (base32
       "1nqpql3343d7icjfbzlwkm8ai5hrx54x03v726g5d6c24ixlzdrb"))))
   (build-system gnu-build-system)
   (inputs
    `(("alsa-lib" ,alsa-lib)
      ("boost" ,boost)
      ("dbus-c++" ,dbus-c++)
      ("eudev" ,eudev)
      ("ffmpeg" ,ffmpeg)
      ("flac" ,flac)
      ("gmp" ,gmp)
      ("gsm" ,gsm)
      ("jack" ,jack-1)
      ("jsoncpp" ,jsoncpp)
      ("libogg" ,libogg)
      ("libva" ,libva)
      ("opendht" ,opendht)
      ("opus" ,opus)
      ("pcre" ,pcre)
      ("pjproject" ,savoir-faire-linux-pjproject)
      ("pulseaudio" ,pulseaudio)
      ("libsamplerate" ,libsamplerate)
      ("libsndfile" ,libsndfile)
      ("speex" ,speex)
      ("libupnp" ,libupnp)
      ("libvorbis" ,libvorbis)
      ("libx264" ,libx264)
      ("yaml-cpp" ,yaml-cpp)
      ("zlib" ,zlib)
      ;; These were added by adfeno here for now, please fix this if
      ;; this isn't the right place for them,
      ("crypto++" ,crypto++)
      ("python" ,python)
      ("python-wrapper" ,python-wrapper)
      ("restbed" ,savoir-faire-linux-restbed)
      ("libx11" ,libx11)))
   (native-inputs
    `(("autoconf" ,autoconf)
      ("pkg-config" ,pkg-config)
      ("automake" ,automake)
      ("libtool" ,libtool)
      ("cppunit" ,cppunit)
      ("perl" ,perl))) ; Needed for documentation.
   (arguments
    `(#:tests? #f ; The tests fail to compile due to missing headers.
      #:phases
      (modify-phases %standard-phases
		     (add-after 'unpack 'change-directory
				(lambda _
				  (chdir "daemon")))
		     (add-before 'configure 'autoconf
				 (lambda _
				   (zero? (system* "autoreconf" "-vfi"))))
		     (add-before 'build 'add-lib-dir
				 (lambda _
				   (mkdir "src/lib"))))))
   (synopsis "Distributed multimedia communications platform")
   (description "Ring is a secure and distributed voice, video and chat
communication platform that requires no centralized server and leaves the
power of privacy in the hands of the user.  It supports the SIP and IAX
protocols, as well as decentralized calling using P2P-DHT.

This package provides a library and daemon implementing the Ring core 
functionality.")
   (home-page "https://gnu.org/software/ring")
   (license license:gpl3+)))

(define-public libringclient
  (package
   (name "libringclient")
   (version "20170316.1.06a3f0b")
   (source
    (origin
     (method url-fetch)
     (uri "http://dl.ring.cx/ring-release/tarballs/ring_20170316.1.06a3f0b.tar.gz")
     (sha256
      (base32
       "1nqpql3343d7icjfbzlwkm8ai5hrx54x03v726g5d6c24ixlzdrb"))))
   (build-system cmake-build-system)
   (propagated-inputs
    `(("libring" ,libring) ; For 'dring'.
      ("qtbase" ,qtbase) ; Qt is included in several installed headers.
      ("qttools" ,qttools)))
   (arguments
    `(#:tests? #f ; There is no testsuite.
      #:configure-flags
      (list (string-append "-DRING_BUILD_DIR="
			   (assoc-ref %build-inputs "libring") "/include"))
			   ;; "/daemon/include"))
      #:phases
      (modify-phases %standard-phases
		     (add-after 'unpack 'change-directory
				(lambda _
				  (chdir "lrc")))
		     (add-before 'configure 'fix-dbus-interfaces-path
				(lambda* (#:key inputs #:allow-other-keys)
					 (substitute* "CMakeLists.txt"
						      (("\\$\\{CMAKE_INSTALL_PREFIX\\}(/share/dbus-1/interfaces)" _ dbus-interfaces-path-suffix)
						       (string-append (assoc-ref inputs "libring")
								      dbus-interfaces-path-suffix))))))))
   (synopsis "Distributed multimedia communications platform")
   (description "Ring is a secure and distributed voice, video and chat
communication platform that requires no centralized server and leaves the
power of privacy in the hands of the user.  It supports the SIP and IAX
protocols, as well as decentralized calling using P2P-DHT.

This package provides a library common to all Ring clients.")
   (home-page "https://gnu.org/software/ring")
   (license license:gpl3+)))

(define-public ring-client-gnome
  ;; FIXME Find a way to tell Guix to only build what is inside
  ;; "client-gnome" path.
  (package
   (name "ring-client-gnome")
   (version "20170316.1.06a3f0b")
   (source
    (origin
     (method url-fetch)
     (uri "http://dl.ring.cx/ring-release/tarballs/ring_20170316.1.06a3f0b.tar.gz")
     (sha256
      (base32
       "1nqpql3343d7icjfbzlwkm8ai5hrx54x03v726g5d6c24ixlzdrb"))))
   (build-system cmake-build-system)
   (inputs
    `(("libringclient" ,libringclient)
      ("gtk+" ,gtk+)
      ("glib:bin" ,glib "bin")
      ("qrencode" ,qrencode)
      ("libnotify" ,libnotify)
      ("clutter" ,clutter)
      ("clutter-gtk" ,clutter-gtk)
      ("gettext" ,gnu-gettext)
      ("webkitgtk" ,webkitgtk)))
   (native-inputs
    `(("pkg-config" ,pkg-config)
      ("doxygen" ,doxygen)))
   (propagated-inputs
    `(("libring" ,libring) ; This is needed to run dring.
      ("adwaita-icon-theme" ,adwaita-icon-theme)
      ("evolution-data-server" ,evolution-data-server)))
   (arguments
    `(#:tests? #f ; There is no testsuite.
      #:phases
      (modify-phases %standard-phases
		     (add-after 'unpack 'change-directory
				(lambda _
				  (chdir "client-gnome"))))))
   (synopsis "Distributed multimedia communications platform")
   (description "Ring is a secure and distributed voice, video and chat
communication platform that requires no centralized server and leaves the
power of privacy in the hands of the user.  It supports the SIP and IAX
protocols, as well as decentralized calling using P2P-DHT.

This package provides the Ring client for the Gnome Desktop.")
   (home-page "https://gnu.org/software/ring")
   (license license:gpl3+)))

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Continuing the work on the recipes related to GNU Ring
  2017-03-22 19:20 ` Adonay Felipe Nogueira
@ 2017-03-22 19:56   ` Leo Famulari
  2017-03-22 20:41     ` Adonay Felipe Nogueira
  2017-03-24 23:42   ` Adonay Felipe Nogueira
  1 sibling, 1 reply; 18+ messages in thread
From: Leo Famulari @ 2017-03-22 19:56 UTC (permalink / raw)
  To: Adonay Felipe Nogueira; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 402 bytes --]

On Wed, Mar 22, 2017 at 04:20:02PM -0300, Adonay Felipe Nogueira wrote:
> * Notes for testers
> 
> - When installing:
> 
>   - Disable grafts (use `--no-grafts` option), otherwise you might be
>     getting the original argon2 and opendht recipes.

Can you clarify this? Not using grafts will mean that testers will lack
a large number of security fixes applied to the Ring dependency graph.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Continuing the work on the recipes related to GNU Ring
  2017-03-22 19:56   ` Leo Famulari
@ 2017-03-22 20:41     ` Adonay Felipe Nogueira
  0 siblings, 0 replies; 18+ messages in thread
From: Adonay Felipe Nogueira @ 2017-03-22 20:41 UTC (permalink / raw)
  To: guix-devel

Oh... So perhaps I misunderstood what "grafts" mean.

The first time I tested my custom argon2 and opendht recipes, they where
built so quickly that I thought it was using the "old" recipes.

Please ignore my suggestion for using `--no-grafts`. :)

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Continuing the work on the recipes related to GNU Ring
  2017-03-22 19:20 ` Adonay Felipe Nogueira
  2017-03-22 19:56   ` Leo Famulari
@ 2017-03-24 23:42   ` Adonay Felipe Nogueira
  2017-03-25  0:01     ` Adonay Felipe Nogueira
  1 sibling, 1 reply; 18+ messages in thread
From: Adonay Felipe Nogueira @ 2017-03-24 23:42 UTC (permalink / raw)
  To: guix-devel

More good news!

It turns out that the XDG_DATA_DIRS bug is due to foreign distributions
using some Xsession.d scripts that do tests to check if that variable is
empty, and if it does exist, then they do nothing. This causes the
system to simply not set XDG_DATA_DIRS to useful values for foreign
distributions, thus leaving the user with a never-ending log-in loop.

So what must the user do?

1. Test without setting XDG_DATA_DIRS, and take note of its value.

2. Set XDG_DATA_DIRS as Guix tells you to, however, replace the
following part:

${XDG_DATA_DIRS:+:}$XDG_DATA_DIRS

With the following:

:[Value that you took note of, without this surrounding braces.]

Now back on topic: Setting XDG_DATA_DIRS makes all problems related to
having to start Ring daemon and client separatedly go away for the
average user, this means that:

Set that variable, and now you can simply run Ring directly.

The other points I raised earlier are still valid (like: need for testing,
improvement, sending patches upstream, wrong dring placement).


Respectfully, Adonay.
-- 
- [[https://libreplanet.org/wiki/User:Adfeno]]
- Palestrante e consultor sobre /software/ livre (não confundir com
  gratis).
- "WhatsApp"? Ele não é livre, por isso não uso. Iguais a ele prefiro
  Ring, ou Tox. Quer outras formas de contato? Adicione o vCard que
  está no endereço acima aos teus contatos.
- Pretende me enviar arquivos .doc, .ppt, .cdr, ou .mp3? OK, eu
  aceito, mas não repasso. Entrego apenas em formatos favoráveis ao
  /software/ livre. Favor entrar em contato em caso de dúvida.
- "People said I should accept the world. Bullshit! I don't accept the
  world."
                                                 --- Richard Stallman

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Continuing the work on the recipes related to GNU Ring
  2017-03-24 23:42   ` Adonay Felipe Nogueira
@ 2017-03-25  0:01     ` Adonay Felipe Nogueira
  2017-03-26 13:21       ` Ludovic Courtès
  0 siblings, 1 reply; 18+ messages in thread
From: Adonay Felipe Nogueira @ 2017-03-25  0:01 UTC (permalink / raw)
  To: guix-devel

Also, setting XDG_DATA_DIRS makes .desktop menu items, and also icon
themes be recognized for different applications, although some packages
that I have since almost 5 months didn't make Guix suggest setting this
variable, not even adwaita-icon-theme.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Continuing the work on the recipes related to GNU Ring
  2017-03-25  0:01     ` Adonay Felipe Nogueira
@ 2017-03-26 13:21       ` Ludovic Courtès
  2017-03-31 19:05         ` Adonay Felipe Nogueira
  0 siblings, 1 reply; 18+ messages in thread
From: Ludovic Courtès @ 2017-03-26 13:21 UTC (permalink / raw)
  To: Adonay Felipe Nogueira; +Cc: guix-devel

Hi Adonay!

Adonay Felipe Nogueira <adfeno@openmailbox.org> skribis:

> Also, setting XDG_DATA_DIRS makes .desktop menu items, and also icon
> themes be recognized for different applications, although some packages
> that I have since almost 5 months didn't make Guix suggest setting this
> variable, not even adwaita-icon-theme.

Right, XDG_DATA_DIRS is not automatically suggested by Guix because of a
limitation in how search path variables are handled:
<https://bugs.gnu.org/22138>.

That said, high fives for getting Ring up and running!  \o/

Do you feel like you could email patches piecemeal to
guix-patches@gnu.org (one per package)?  That would be awesome.

Thank you!

Ludo’.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Continuing the work on the recipes related to GNU Ring
  2017-03-26 13:21       ` Ludovic Courtès
@ 2017-03-31 19:05         ` Adonay Felipe Nogueira
  0 siblings, 0 replies; 18+ messages in thread
From: Adonay Felipe Nogueira @ 2017-03-31 19:05 UTC (permalink / raw)
  To: guix-devel

About sending patches for each package definition separatedly: Will do!
:)

However, I'd like to refrain from doing it now while the package's
specific configure/make/build options in their "rules.mak" files aren't
addressed clearly. This is an ongoing discussion at:
[[http://lists.gnu.org/archive/html/ring/2017-03/msg00005.html]].

Some people contributed with useful information. However, the custom
options for pjsip/pjproject are still somewhat unclear for me (except
for the `--with-ssl=gnutls` option, which is related to "gnutls" patch,
and for which if they were to use OpenSSL, there would be a licensing
issue, according to replies to a bug report referenced in the
discussion).

Of course, if Guix project wants to, I can make the set of recipes into
separated patches anyways, with all customizations applied anyways, and
still watch for that discussion. However, due to the amount of patches
and since I don't have confirmation that the patches are being sent to
Ring's upstreams, I would still have to decide between:

a. Taking Ring's patches and registering them formerly at
   "gnu/packages/patches" directory (and related files), and then use
   apply-patch and similar procedures. This would allow better control
   of which patches are applied, but future version upgrades for the
   packages would need testing to see if the patches were applied.

b. Leave the phases that deal with patches as they are. This would allow
   future patches to be picked up as long as the temporary
   "savoir-faire-linux-patches" package definitions are updated
   accordingly, but might also cause future upgrades to not have the
   patches applied (because the custom phases name the patches that are
   wanted).

Personally, I'm more towards choosing (a). But I would like other's
opinions.


Respectfully, Adonay.
-- 
- [[https://libreplanet.org/wiki/User:Adfeno]]
- Palestrante e consultor sobre /software/ livre (não confundir com
  gratis).
- "WhatsApp"? Ele não é livre, por isso não uso. Iguais a ele prefiro
  Ring, ou Tox. Quer outras formas de contato? Adicione o vCard que está
  no endereço acima aos teus contatos.
- Pretende me enviar arquivos .doc, .ppt, .cdr, ou .mp3? OK, eu aceito,
  mas não repasso. Entrego apenas em formatos favoráveis ao /software/
  livre. Favor entrar em contato em caso de dúvida.
- "People said I should accept the world. Bullshit! I don't accept the
  world."
                                                  --- Richard Stallman

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Continuing the work on the recipes related to GNU Ring
  2017-03-18 23:20 Continuing the work on the recipes related to GNU Ring Adonay Felipe Nogueira
  2017-03-19  2:25 ` John Darrington
  2017-03-22 19:20 ` Adonay Felipe Nogueira
@ 2017-04-20 13:55 ` Adonay Felipe Nogueira
  2017-04-20 15:24   ` Maxim Cournoyer
  2 siblings, 1 reply; 18+ messages in thread
From: Adonay Felipe Nogueira @ 2017-04-20 13:55 UTC (permalink / raw)
  To: guix-devel

[-- Attachment #1: Type: text/plain, Size: 1439 bytes --]

Hi all! :)

I bring you a request: We might need "real" developers working on this
--- because I don't know how to make programs in the languages being
used by upstreams. Also, I'm somewhat "up to my ears" on study paperwork
now. :)

I have attached an improved set of recipes (in one .scm file, still not
a patch), that take suggestions from
[[https://lists.gnu.org/archive/html/ring/2017-03/msg00007.html]] ---
the list archive item doesn't show it, but someone replied privately to
me saying that msgpack must be made with "C++11" set.

Here is the notes that I have made so far:

- I did not test the changes I made yet, but I plan to once I can
  upgrade my packages installed through Guix.

- Updated commit of ring-project.tar.gz still has lots of patches that
  are applied to their upstream. The attached set of recipes, however,
  doesn't have the updated version yet (due to lack of my time).

  - Also, I just tried contacting pjsip/pjproject on an old issue that
    relates to the "gnutls" patch:
    [[http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/2017-April/019937.html]].

- For the detailed questions of which license the patched *result*
  should have, I recommend you to talk to ssalenick and dkc in #ring
  channel at chat.freenode.net, because I already talked with them
  briefely. Also, if they don't remember, tell them that they were
  discussing this with "adfeno".

- Other notes are in the .scm file.

[-- Attachment #2: ring.scm --]
[-- Type: application/octet-stream, Size: 29831 bytes --]

;;; Copyright © 2016 Lukas Gradl
;;; Copyright © 2017 Marius Bakke
;;; Copyright © 2017 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@openmailbox.org>

;;; Before creating patches out of these recipes, please guarantee that there's contact information for Mx. Gradl and Mx. Bakke.

;;; TODO For other atributions, look for:
;;; - <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01541.html>.
;;; - <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01937.html>.
;;; - <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01938.html>.
;;; - <http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01216.html>.
;;; - <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01061.html>.
;;; - <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01062.html>.
;;; - <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01063.html>.

(define-module (ring)
  #:use-module (gnu packages)
  #:use-module (gnu packages aidc)
  #:use-module (gnu packages audio)
  #:use-module (gnu packages autotools)
  #:use-module (gnu packages base)
  #:use-module (gnu packages boost)
  #:use-module (gnu packages check)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages crypto)
  #:use-module (gnu packages documentation)
  #:use-module (gnu packages gettext)
  #:use-module (gnu packages glib)
  #:use-module (gnu packages gnome)
  #:use-module (gnu packages gtk)
  #:use-module (gnu packages libupnp)
  #:use-module (gnu packages linux)
  #:use-module (gnu packages multiprecision)
  #:use-module (gnu packages nettle)
  #:use-module (gnu packages pcre)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages python)
  #:use-module (gnu packages pulseaudio)
  #:use-module (gnu packages qt)
  #:use-module (gnu packages readline)
  #:use-module (gnu packages serialization)
  #:use-module (gnu packages telephony)
  #:use-module (gnu packages tls)
  #:use-module (gnu packages video)
  #:use-module (gnu packages webkit)
  #:use-module (gnu packages xiph)
  #:use-module (gnu packages xorg)
  #:use-module (gnu packages zip)
  #:use-module (guix build-system gnu)
  #:use-module (guix build-system cmake)
  #:use-module (guix download)
  #:use-module (guix git-download)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix packages)
  #:use-module (guix utils)
  #:use-module (ice-9 match))

;;; FIXME Convince upstream, Ring, to send patches to their upstreams.
;;; FIXME See if the combination of Savoir-faire Linux's pjproject +
;;; restbed + Ring daemon is OK.

;;; Dependencies on OpenSSL were disabled due to licensing issues.

;;; Based on
;;; <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01541.html>.
(define-public savoir-faire-linux-pjproject
  (let ((savoir-faire-linux-patches
	 (origin
	  (method url-fetch)
	  (uri "http://dl.ring.cx/ring-release/tarballs/ring_20170316.1.06a3f0b.tar.gz")
	  (sha256
	   (base32
	    "1nqpql3343d7icjfbzlwkm8ai5hrx54x03v726g5d6c24ixlzdrb")))))
    (package
     (name "pjproject")
     (version "2.5.5")
     (source
      (origin
       (method url-fetch)
       (uri (string-append
	     "http://www.pjsip.org/release/";
	     version "/" name "-" version ".tar.bz2"))
       (modules '((guix build utils)))
       (snippet
	'(begin
	   (let ((third-party-directories
		  (list "BaseClasses" "bdsound" "bin" "g7221" "gsm"
			"ilbc" "lib" "milenage" "mp3" "speex" "srtp"
			"resample"
			;; Keep only resample, build and README.txt.
			"build/baseclasses" "build/g7221" "build/gsm"
			"build/ilbc" "build/milenage" "build/samplerate"
			"build/speex" "build/srtp"
			"build/resample" "build/yuv")))
	     ;; Keep only Makefiles related to resample.
	     (for-each (lambda (file)
			 (delete-file-recursively
			  (string-append "third_party/" file)))
		       third-party-directories)
	     #t)
	   (let ((third-party-dirs
		  (list "gsm" "ilbc" "speex" "g7221" "srtp"
			"portaudio" "resample")))
	     (for-each
	      (lambda (dirs)
		(substitute* "third_party/build/os-linux.mak"
			     (((string-append "DIRS += " dirs)) "")))
	      third-party-dirs))))
       (sha256
	(base32
	 "1wq8lpfcd4dfrbl7bgy2yzgp3ldjzq5430fqkhcqad0xfrxj0fdb"))))
     (build-system gnu-build-system)
     (inputs
      `(("portaudio" ,portaudio)))
     (propagated-inputs
      ;; These packages are referenced in the Libs field of the pkg-config
      ;; file that will be installed by pjproject.
      `(("speex" ,speex)
	("libsrtp" ,libsrtp)
	("gnutls" ,gnutls)
	("util-linux" ,util-linux)))
     (native-inputs
      `(("savoir-faire-linux-patches" ,savoir-faire-linux-patches)
	("autoconf" ,autoconf)
	("automake" ,automake)
	("pkg-config" ,pkg-config)
	("libtool" ,libtool)))
     (arguments
      `(#:tests? #f ; FIXME make: No rule to make target
		    ; 'pjlib-test-unknown-[something]-gnu'.
	;; #:test-target "selftest"
	#:configure-flags
	;; The disabled features are not used by libring.  Comes from
	;; "ring-project/daemon/contrib/src/pjproject/rules.mak".
	;; NOTE This doesn't seem right, other packages might want
	;; some of these. We must talk to Ring project and ask why we
	;; need things to be built this way. One way out of this would
	;; be to tell it to use external things instead of disabling.
	(list "--enable-ext-sound"
	      "--enable-ssl=gnutls"
	      "--disable-oss"
	      "--disable-sound"
	      "--disable-video"
	      "--disable-speex-aec"
	      "--disable-g711-codec"
	      "--disable-l16-codec"
	      "--disable-gsm-codec"
	      "--disable-g722-codec"
	      "--disable-g7221-codec"
	      "--disable-speex-codec"
	      "--disable-ilbc-codec"
	      "--disable-opencore-amr"
	      "--disable-silk"
	      "--disable-sdl"
	      "--disable-ffmpeg"
	      "--disable-v4l2"
	      "--disable-openh264"
	      "--disable-resample"
	      ;; Now deviating from the rules.mak file.
	      "--with-external-srtp"
	      ;; Now back to following the rules.mak file.
	      "CFLAGS=-DPJ_ICE_MAX_CAND=32 -DPJ_ICE_MAX_CHECKS=150 -DPJ_ICE_COMP_BITS=2 -DPJ_ICE_MAX_STUN=3 -DPJSIP_MAX_PKT_LEN=8000")
	#:phases
	(modify-phases %standard-phases
		       (add-after 'unpack 'apply-patches
				  (lambda* (#:key inputs #:allow-other-keys)
					   (let ((savoir-faire-linux-patches-directory "Savoir-faire Linux patches")
						 ;; Comes from
						 ;; "ring-project/daemon/contrib/src/pjproject/rules.mak".
						 ;; We already asked
						 ;; Ring to contribute
						 ;; upstrea, please
						 ;; see:
						 ;; https://tuleap.ring.cx/plugins/tracker/?aid=1546.
						 ;; NOTE These amount
						 ;; for huge changes
						 ;; in pjproject.
						 ;; Particularly, they
						 ;; add support for
						 ;; GnuTLS, which is
						 ;; completely lacking
						 ;; in pjproject
						 ;; 2.5.5.
						 (savoir-faire-linux-patches
						  '("endianness"
						    "gnutls"
						    "notestsapps"
						    "ipv6"
						    "ice_config"
						    "multiple_listeners"
						    "pj_ice_sess"
						    "fix_turn_fallback"
						    "fix_ioqueue_ipv6_sendto"
						    "add_dtls_transport")))
					     (mkdir savoir-faire-linux-patches-directory)
					     (system* "tar" "-xvf" (assoc-ref inputs "savoir-faire-linux-patches")
						      "-C" savoir-faire-linux-patches-directory "--strip-components=5" "ring-project/daemon/contrib/src/pjproject")
					     (for-each
					      (lambda (file)
						(zero?
						 (system* "patch" "--force" "-p1" "-i"
							  (string-append savoir-faire-linux-patches-directory "/"
									 file ".patch"))))
					      savoir-faire-linux-patches))))
		       (add-before 'build 'build-dep
				   (lambda _ (zero? (system* "make" "dep"))))
		       (add-before 'patch-source-shebangs 'autoconf
				   (lambda _
				     (zero?
				      (system* "autoconf" "-v" "-f" "-i" "-o"
					       "aconfigure" "aconfigure.ac"))))
		       (add-before 'autoconf 'disable-some-tests
				   ;; Three of the six test programs fail due to missing network
				   ;; access.
				   (lambda _
				     (substitute* "Makefile"
						  (("selftest: pjlib-test pjlib;3R-util-test pjnath-test pjmedia-test pjsip-test pjsua-test")
						   "selftest: pjlib-test pjlib-util-test pjmedia-test")))))))		       
     (home-page "www.pjsip.org")
     (synopsis "Session Initiation Protocol (SIP) stack")
     (description "PJProject provides an implementation of the Session
Initiation Protocol (SIP) and a multimedia framework. This package is intended
for use with libring.  There are several custom patches, most notably the use
of gnutls instead of openssl for encryption.")
     ;; We should make the license only one, the one which is
     ;; effective as result of applying savoir-faire-linux-patches,
     ;; because we don't want to say that the whole package has two
     ;; licenses for which the user can "choose" from (dual licensing).
     (license '(license:gpl2+ ; NEW pjproject is under GNU GPL 2+, not
			      ; GNU GPL 2 (only).
		license:gpl3))))) ; Last time we checked, the
				  ; Savoir-faire Linux patches were
				  ; under GNU GPL 3 (only). Is this
				  ; still true?

;;; From <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01937.html>.
(define-public argon2
  (package
   (name "argon2")
   (version "20161029")
   (source
    (origin
     (method url-fetch)
     (uri
      (string-append "https://github.com/P-H-C/phc-winner-argon2/archive/"
		     version ".tar.gz"))
     (file-name (string-append name "-" version ".tar.gz"))
     (snippet
      ;; As we already know, this is probably better to be already
      ;; included in argon2.
      '(let ((p (open-file "argon2.pc" "w")))
	 (begin
	   (display
	    (string-append "prefix=/usr/local\n"
			   "exec_prefix=${prefix}\n"
			   "includedir=${prefix}/include\n"
			   "libdir=${prefix}/lib\n\n"
			   "Name: Argon2\n"
			   "Description: "
			   "The Argon2 password hashing algorithm\n"
			   "Version: 1.0.0\n"
			   "Cflags: -I${includedir}/\n"
			   "Libs: -L${libdir} -largon2\n") p)
	   (close-output-port p))))
     (sha256
      (base32
       "1rymikbysasdadm325jx69i0q19d9srqkny69jwmhswlidr4j07y"))))
   (build-system gnu-build-system)
   (arguments
    `(#:test-target "test"
      #:make-flags '("CC=gcc")
      #:phases
      (modify-phases %standard-phases
		     (delete 'configure)
		     (add-after 'unpack 'fix-pkg-config
				(lambda _
				  (substitute* "argon2.pc"
					       (("/usr/local")
						(assoc-ref %outputs "out")))))
		     (replace 'install
			      (lambda _
				(let ((out (assoc-ref %outputs "out")))
				  (install-file "argon2" (string-append out "/bin"))
				  (install-file "libargon2.a" (string-append out "/lib"))
				  (install-file "libargon2.so" (string-append out "/lib"))
				  (install-file "argon2.pc"
						(string-append out "/lib/pkgconfig"))
				  (copy-recursively "include"
						    (string-append out "/include"))
				  (symlink (string-append out "/lib/libargon2.so")
					   (string-append out "/lib/libargon2.so.0"))))))))
   (home-page "https://www.argon2.com/")
   (synopsis "Password hashing library")
   (description "Argon2 provides a key derivation function that was declared
winner of the 2015 Password Hashing Competition.")
   (license license:cc0)))

(define-public msgpack-c++-11
  (package (inherit msgpack)
	   (name "msgpack-c++-11")
	   (arguments
	    (substitute-keyword-arguments (package-arguments msgpack)
					  ((#:make-flags msgpack-make-flags)
					   `(append ,msgpack-make-flags '("-DMSGPACK_CXX11=ON")))))))

;;; Based on
;;; <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01938.html>.
(define-public opendht
  (package
   (name "opendht")
   (version "1.3.0")
   (source
    (origin
     (method url-fetch)
     (uri
      (string-append
       "https://github.com/savoirfairelinux/" name
       "/archive/" version ".tar.gz"))
     (file-name (string-append name "-" version ".tar.gz"))
     (modules '((guix build utils)))
     (snippet
      '(begin
	 (delete-file-recursively "src/argon2")
	 (substitute* "src/Makefile.am"
		      (("./argon2/libargon2.la") "")
		      (("SUBDIRS = argon2") "")
		      (("libopendht_la_LDFLAGS = @LDFLAGS@" all)
		       (string-append all " @argon2_LIBS@")))
	 (substitute* "src/crypto.cpp"
		      (("argon2/argon2.h") "argon2.h"))
	 (substitute* "configure.ac"
		      (("src/argon2/Makefile") "")
		      (("PKG_CHECK_MODULES\\(\\[[Gg][Nn][Uu][Tt][Ll][Ss]\\],[[:blank:]]+\\[gnutls.*$" all)
		       (string-append all "PKG_CHECK_MODULES([argon2], [argon2])\n")))
	 (substitute* "opendht.pc.in"
		      (("Libs: -L\\$\\{libdir\\} -lopendht" all)
		       (string-append all "\nRequires: argon2")))))
     (sha256
      (base32
       "1gqsxjfv7l5m25zxsyxyp70abcf3bvz3iqkv5aa1lj6fzz1rliws"))))
   (build-system gnu-build-system)
   (inputs
    `(("gnutls" ,gnutls)
      ("nettle" ,nettle)
      ("readline" ,readline)))
   (propagated-inputs
    `(("argon2" ,argon2)
      ("msgpack" ,msgpack))) ; included in several installed headers
   (native-inputs
    `(("autoconf" ,autoconf)
      ("pkg-config" ,pkg-config)
      ("automake" ,automake)
      ("libtool" ,libtool)))
   (arguments
    `(;; #:configure-flags '("--disable-tools"
      ;;                     "--disable-python")
      #:phases (modify-phases %standard-phases
			      (add-before 'configure 'autoconf
					  (lambda _
					    (zero? (system* "autoreconf" "-vfi")))))))
   (home-page "https://github.com/savoirfairelinux/opendht/")
   (synopsis "Distributed Hash Table (DHT) library")
   (description "OpenDHT is a Distributed Hash Table (DHT) library.  It may
be used to manage peer-to-peer network connections as needed for real time
communication.")
   (license license:gpl3+))) ; NEW It's under GNU GPL3+.

(define-public opendht-with-msgpack-c++-11
  (package (inherit opendht)
	   (name "opendht-with-msgpack-c++-11")
	   (propagated-inputs
	    `(("msgpack-c++-11" ,msgpack-c++-11)
	      ,@(alist-delete
		 "msgpack"
		 (package-propagated-inputs opendht))))))

(define-public savoir-faire-linux-asio
  (let ((savoir-faire-linux-patches
	 (origin
	  (method url-fetch)
	  (uri "http://dl.ring.cx/ring-release/tarballs/ring_20170316.1.06a3f0b.tar.gz")
	  (sha256
	   (base32
	    "1nqpql3343d7icjfbzlwkm8ai5hrx54x03v726g5d6c24ixlzdrb")))))
    (package
     (name "asio")
     (version "28d9b8d")
     (source
      (origin
       (method url-fetch)
       (uri "https://github.com/chriskohlhoff/asio/archive/28d9b8d6df708024af5227c551673fdb2519f5bf.tar.gz")
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
	(base32 "07wp56vibqp1qp8ca1ahbhs8md7k22im7nmlx0haqxdgszp1zcvb"))))
     (build-system gnu-build-system)
     (inputs
      `(("boost" ,boost)))
     (native-inputs
      `(("autoconf" ,autoconf)
	("automake" ,automake)
	("savoir-faire-linux-patches" ,savoir-faire-linux-patches)))
     (arguments
      ;; Comes from "ring-project/daemon/contrib/src/asio/rules.mak".
      ;; We must talk to Ring to know if disabling Asio integration
      ;; with Boost is a requirement.
      `(;; #:configure-flags '("--without-boost")
	#:configure-flags '((string-append "--with-boost=\""
					   (assoc-ref inputs "boost")
					   "\""))
	#:phases
	(modify-phases %standard-phases
		       (add-after 'unpack 'change-directory-and-apply-patches
				  (lambda* (#:key inputs #:allow-other-keys)
					   (let ((savoir-faire-linux-patches-directory "Savoir-faire Linux patches")
						 ;; We asked Ring to
						 ;; send patches to
						 ;; their upstream,
						 ;; status can be seen
						 ;; at:
						 ;; https://tuleap.ring.cx/plugins/tracker/?aid=1546.
						 ;; These patches just
						 ;; disable tests and
						 ;; examples.  We
						 ;; should convince
						 ;; Ring to send these
						 ;; patches to their
						 ;; upstream, asio.
						 (savoir-faire-linux-patches
						  '("no_tests_examples")))
					     (chdir "asio")
					     (mkdir savoir-faire-linux-patches-directory)
					     (system* "tar" "-xvf" (assoc-ref inputs "savoir-faire-linux-patches")
						      "-C" savoir-faire-linux-patches-directory "--strip-components=5" "ring-project/daemon/contrib/src/asio")
					     (for-each
					      (lambda (file)
						(zero?
						 (system* "patch" "--force" "-p1" "-i"
							  (string-append savoir-faire-linux-patches-directory "/"
									 file ".patch"))))
					      savoir-faire-linux-patches))))
		       (add-before 'configure 'run-autogen
				  (lambda _
				    (zero? (system* "./autogen.sh")))))))
     (synopsis "Asynchronous RESTful functionality to C++11 applications")
     (description "Restbed is a comprehensive and consistent programming
model for building applications that require seamless and secure
communication over HTTP.")
     (home-page "https://github.com/Corvusoft/restbed")
     (license license:boost1.0))))

(define-public savoir-faire-linux-restbed
  (let ((savoir-faire-linux-patches
	 (origin
	  (method url-fetch)
	  (uri "http://dl.ring.cx/ring-release/tarballs/ring_20170316.1.06a3f0b.tar.gz")
	  (sha256
	   (base32
	    "1nqpql3343d7icjfbzlwkm8ai5hrx54x03v726g5d6c24ixlzdrb")))))
    (package
     (name "restbed")
     (version "3418750")
     (source
      (origin
       (method url-fetch)
       (uri "https://github.com/Corvusoft/restbed/archive/34187502642144ab9f749ab40f5cdbd8cb17a54a.tar.gz")
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
	(base32 "1c96w83v0iz61bqd0safza698g8622dhsrrf01aigibj4cmsbjph"))))
     (build-system cmake-build-system)
     (inputs
      `(("asio" ,savoir-faire-linux-asio)
	("catch" ,catch-framework)
	("glibc" ,glibc)))
     (native-inputs
      `(("savoir-faire-linux-patches" ,savoir-faire-linux-patches)))
     (arguments
      `(#:tests? #f
	;; Comes from "ring-project/daemon/contrib/src/restbed/rules.mak".
	#:configure-flags
	'("-DBUILD_TESTS=NO"
	  "-DBUILD_EXAMPLES=NO"
	  "-DBUILD_SSL=NO"
	  "-DBUILD_SHARED=NO")
	#:phases
	(modify-phases %standard-phases
		       (add-after 'unpack 'apply-patches-and-fix-paths
				  (lambda* (#:key inputs #:allow-other-keys)
					   (let ((savoir-faire-linux-patches-directory "Savoir-faire Linux patches")
						 (asio (assoc-ref inputs "asio"))
						 (catch (assoc-ref inputs "catch"))
						 (glibc (assoc-ref inputs "glibc"))
						 ;; We asked Ring to
						 ;; send patches
						 ;; upstream, status
						 ;; can be seen at:
						 ;; https://tuleap.ring.cx/plugins/tracker/?aid=1546.
						 ;; These patches deal
						 ;; with minor fixes.
						 ;; We should convince
						 ;; Ring upstream to
						 ;; send these patches
						 ;; to their upstream,
						 ;; restbed.
						 (savoir-faire-linux-patches
						  '("CMakeLists"
						    "strand"
						    "uri_cpp")))
					     (mkdir savoir-faire-linux-patches-directory)
					     (system* "tar" "-xvf" (assoc-ref inputs "savoir-faire-linux-patches")
						      "-C" savoir-faire-linux-patches-directory "--strip-components=5" "ring-project/daemon/contrib/src/restbed")
					     (for-each
					      (lambda (file)
						(zero?
						 (system* "patch" "--force" "-p1" "-i"
							  (string-append savoir-faire-linux-patches-directory "/"
									 file ".patch"))))
					      savoir-faire-linux-patches)
					     (substitute* "cmake/modules/Findasio.cmake"
							 (("(find_path\\( asio_INCLUDE asio\\.hpp HINTS ).*$" all begin)
							  (string-append begin " \"" asio "/include\" )")))
					     (substitute* "cmake/modules/Findcatch.cmake"
							 (("(find_path\\( catch_INCLUDE catch\\.hpp HINTS ).*$" all begin)
							  (string-append begin " \"" catch "/include\" )")))
					     (substitute* "cmake/modules/Findsyslog.cmake"
							 (("(find_path\\( syslog_INCLUDE syslog\\.h HINTS ).*$" all begin)
							  (string-append begin " \"" glibc "/include\" )")))))))))
     (synopsis "Asynchronous RESTful functionality to C++11 applications")
     (description "Restbed is a comprehensive and consistent programming
model for building applications that require seamless and secure
communication over HTTP.")
     (home-page "https://github.com/Corvusoft/restbed")
     (license license:agpl3+))))

;;; From
;;; <http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01216.html>.
;;; Not including
;;; <http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01392.html>.
;;; When prearing patches, must include this attribution.
(define-public crypto++
  (package
   (name "crypto++")
   (version "5.6.5")
   (source (origin
	    (method url-fetch)
	    (uri (let ((numeric-version
			(match (string-split version #\.)
			       ((first-digit other-digits ...)
				(string-append first-digit
					       (string-concatenate
						other-digits))))))
		   (string-append "https://cryptopp.com/cryptopp";
				  numeric-version ".zip")))
	    (sha256
	     (base32
	      "0d1cqdz369ivi082k59025wvxzywvkizw7i0pf5h0a1izs3g8pm7"))))
   (build-system gnu-build-system)
   (arguments
    `(#:make-flags
      (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
	    (string-append "BINDIR=" (assoc-ref %outputs "bin") "/bin")
	    (string-append "DATADIR=" (assoc-ref %outputs "doc") "/share")
	    "DISABLE_CXXFLAGS_OPTIMIZATIONS=1"
	    ;; Override "/sbin/ldconfig" with simply "echo" since
	    ;; we don't need ldconfig(8).
	    "LDCONF=echo")
      #:phases
      (modify-phases %standard-phases
		     (add-after 'unpack 'enter-source
				;; ??? Why are we in the TestData folder.
				(lambda _ (chdir "..") #t))
		     (add-after 'enter-source 'disable-optimizations
				(lambda _
				  ;; XXX: The disable optimizations
				  ;; flag above is not recognized in
				  ;; the current version. See
				  ;; https://github.com/weidai11/cryptopp/pull/354.
				  ;; For now, just remove it the dirty
				  ;; way.
				  (substitute* "GNUmakefile"
					       (("-march=native") ""))
				  #t))
		     (delete 'configure)
		     (add-after 'build 'build-shared
				(lambda _
				  ;; By default, only the static
				  ;; library is built.
				  (zero? (system* "make" "shared"))))
		     (add-after 'install 'move-static-library
				(lambda* (#:key outputs #:allow-other-keys)
					 (let* ((out (assoc-ref outputs "out"))
						(lib (string-append out "/lib"))
						(static (assoc-ref outputs "static"))
						(slib (string-append static "/lib")))
					   (mkdir-p slib)
					   (for-each (lambda (file)
						       (install-file file slib)
						       (delete-file file))
						     (find-files lib "\\.l?a$"))
					   #t)))
		     (add-after 'move-static-library 'add-so-version-symlink
				;; The library is named
				;; MAJOR.MINOR.PATCHLEVEL. Some
				;; programs expect a MAJOR.MINOR
				;; symlink.
				(lambda* (#:key outputs #:allow-other-keys)
					 (let ((out (assoc-ref outputs "out"))
					       (major+minor ,(version-major+minor version)))
					   (with-directory-excursion (string-append out "/lib")
								     (symlink (string-append "libcryptopp.so." ,version)
									      (string-append "libcryptopp.so." major+minor))
								     #t)))))))
   (outputs '("out" ; 6.4M shared library and headers
	      "bin" ; 6.3M cryptest.exe
	      "doc" ; 6.4M documentation and examples
	      "static")) ; 15M static library
   (native-inputs
    `(("unzip" ,unzip)))
   (synopsis "C++ class library of cryptographic schemes")
   (description "Crypto++ is a large collection of cryptograhic algorithms and related utilities for C++.")
   (home-page "https://cryptopp.com")
	      ;; The compilation is licensed under Boost 1.0, while
	      ;; most individual files are in the public domain.
	      ;; Should we add two licenses?
   (license (list license:boost1.0
		  license:public-domain))))

;;; Based on
;;; <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01061.html>.
(define-public libring
  (package
   (name "libring")
   (version "20170316.1.06a3f0b")
   (source
    (origin
     (method url-fetch)
     (uri "http://dl.ring.cx/ring-release/tarballs/ring_20170316.1.06a3f0b.tar.gz")
     (modules '((guix build utils)))
     (snippet
      '(begin
	 (delete-file-recursively "daemon/contrib")))
     (sha256
      (base32
       "1nqpql3343d7icjfbzlwkm8ai5hrx54x03v726g5d6c24ixlzdrb"))))
   (build-system gnu-build-system)
   (inputs
    `(("alsa-lib" ,alsa-lib)
      ("boost" ,boost)
      ("dbus-c++" ,dbus-c++)
      ("eudev" ,eudev)
      ("ffmpeg" ,ffmpeg)
      ("flac" ,flac)
      ("gmp" ,gmp)
      ("gsm" ,gsm)
      ("jack" ,jack-1)
      ("jsoncpp" ,jsoncpp)
      ("libogg" ,libogg)
      ("libva" ,libva)
      ;; ("opendht" ,opendht)
      ("opendht-with-msgpack-c++-11" ,opendht-with-msgpack-c++-11)
      ("opus" ,opus)
      ("pcre" ,pcre)
      ("pjproject" ,savoir-faire-linux-pjproject)
      ("pulseaudio" ,pulseaudio)
      ("libsamplerate" ,libsamplerate)
      ("libsndfile" ,libsndfile)
      ("speex" ,speex)
      ("libupnp" ,libupnp)
      ("libvorbis" ,libvorbis)
      ("libx264" ,libx264)
      ("yaml-cpp" ,yaml-cpp)
      ("zlib" ,zlib)
      ;; These were added by adfeno here for now, please fix this if
      ;; this isn't the right place for them,
      ("crypto++" ,crypto++)
      ("python" ,python)
      ("python-wrapper" ,python-wrapper)
      ("restbed" ,savoir-faire-linux-restbed)
      ("libx11" ,libx11)))
   (native-inputs
    `(("autoconf" ,autoconf)
      ("pkg-config" ,pkg-config)
      ("automake" ,automake)
      ("libtool" ,libtool)
      ("cppunit" ,cppunit)
      ("perl" ,perl))) ; Needed for documentation.
   (arguments
    `(#:tests? #f ; The tests fail to compile due to missing headers.
      #:phases
      (modify-phases %standard-phases
		     (add-after 'unpack 'change-directory
				(lambda _
				  (chdir "daemon")))
		     (add-before 'configure 'autoconf
				 (lambda _
				   (zero? (system* "autoreconf" "-vfi"))))
		     (add-before 'build 'add-lib-dir
				 (lambda _
				   (mkdir "src/lib"))))))
   (synopsis "Distributed multimedia communications platform")
   (description "Ring is a secure and distributed voice, video and chat
communication platform that requires no centralized server and leaves the
power of privacy in the hands of the user.  It supports the SIP and IAX
protocols, as well as decentralized calling using P2P-DHT.

This package provides a library and daemon implementing the Ring core 
functionality.")
   (home-page "https://gnu.org/software/ring")
   (license license:gpl3+)))

;;; Based on
;;; <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01062.html>.
(define-public libringclient
  (package
   (name "libringclient")
   (version "20170316.1.06a3f0b")
   (source
    (origin
     (method url-fetch)
     (uri "http://dl.ring.cx/ring-release/tarballs/ring_20170316.1.06a3f0b.tar.gz")
     (sha256
      (base32
       "1nqpql3343d7icjfbzlwkm8ai5hrx54x03v726g5d6c24ixlzdrb"))))
   (build-system cmake-build-system)
   (propagated-inputs
    `(("libring" ,libring) ; For 'dring'.
      ("qtbase" ,qtbase) ; Qt is included in several installed headers.
      ("qttools" ,qttools)))
   (arguments
    `(#:tests? #f ; There is no testsuite.
      #:configure-flags
      (list (string-append "-DRING_BUILD_DIR="
			   (assoc-ref %build-inputs "libring") "/include"))
			   ;; "/daemon/include"))
      #:phases
      (modify-phases %standard-phases
		     (add-after 'unpack 'change-directory
				(lambda _
				  (chdir "lrc")))
		     (add-before 'configure 'fix-dbus-interfaces-path
				(lambda* (#:key inputs #:allow-other-keys)
					 (substitute* "CMakeLists.txt"
						      (("\\$\\{CMAKE_INSTALL_PREFIX\\}(/share/dbus-1/interfaces)" _ dbus-interfaces-path-suffix)
						       (string-append (assoc-ref inputs "libring")
								      dbus-interfaces-path-suffix))))))))
   (synopsis "Distributed multimedia communications platform")
   (description "Ring is a secure and distributed voice, video and chat
communication platform that requires no centralized server and leaves the
power of privacy in the hands of the user.  It supports the SIP and IAX
protocols, as well as decentralized calling using P2P-DHT.

This package provides a library common to all Ring clients.")
   (home-page "https://gnu.org/software/ring")
   (license license:gpl3+)))

;;; Based on
;;; <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01063.html>.
(define-public ring-client-gnome
  (package
   (name "ring-client-gnome")
   (version "20170316.1.06a3f0b")
   (source
    (origin
     (method url-fetch)
     (uri "http://dl.ring.cx/ring-release/tarballs/ring_20170316.1.06a3f0b.tar.gz")
     (sha256
      (base32
       "1nqpql3343d7icjfbzlwkm8ai5hrx54x03v726g5d6c24ixlzdrb"))))
   (build-system cmake-build-system)
   (inputs
    `(("libringclient" ,libringclient)
      ("gtk+" ,gtk+)
      ("glib:bin" ,glib "bin")
      ("qrencode" ,qrencode)
      ("libnotify" ,libnotify)
      ("clutter" ,clutter)
      ("clutter-gtk" ,clutter-gtk)
      ("gettext" ,gnu-gettext)
      ("webkitgtk" ,webkitgtk)))
   (native-inputs
    `(("pkg-config" ,pkg-config)
      ("doxygen" ,doxygen)))
   (propagated-inputs
    `(("libring" ,libring) ; This is needed to run dring.
      ("adwaita-icon-theme" ,adwaita-icon-theme)
      ("evolution-data-server" ,evolution-data-server)))
   (arguments
    `(#:tests? #f ; There is no testsuite.
      #:phases
      (modify-phases %standard-phases
		     (add-after 'unpack 'change-directory
				(lambda _
				  (chdir "client-gnome"))))))
   (synopsis "Distributed multimedia communications platform")
   (description "Ring is a secure and distributed voice, video and chat
communication platform that requires no centralized server and leaves the
power of privacy in the hands of the user.  It supports the SIP and IAX
protocols, as well as decentralized calling using P2P-DHT.

This package provides the Ring client for the Gnome Desktop.")
   (home-page "https://gnu.org/software/ring")
   (license license:gpl3+)))

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Continuing the work on the recipes related to GNU Ring
  2017-04-20 13:55 ` Adonay Felipe Nogueira
@ 2017-04-20 15:24   ` Maxim Cournoyer
  2017-04-20 16:22     ` Adonay Felipe Nogueira
  2017-06-09 19:00     ` Adonay Felipe Nogueira
  0 siblings, 2 replies; 18+ messages in thread
From: Maxim Cournoyer @ 2017-04-20 15:24 UTC (permalink / raw)
  To: Adonay Felipe Nogueira; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 1845 bytes --]

Hi Adonay!

Adonay Felipe Nogueira <adfeno@openmailbox.org> writes:

> Hi all! :)
>
> I bring you a request: We might need "real" developers working on this
> --- because I don't know how to make programs in the languages being
> used by upstreams. Also, I'm somewhat "up to my ears" on study paperwork
> now. :)
>
> I have attached an improved set of recipes (in one .scm file, still not
> a patch), that take suggestions from
> [[https://lists.gnu.org/archive/html/ring/2017-03/msg00007.html]] ---
> the list archive item doesn't show it, but someone replied privately to
> me saying that msgpack must be made with "C++11" set.
>
> Here is the notes that I have made so far:
>
> - I did not test the changes I made yet, but I plan to once I can
>   upgrade my packages installed through Guix.
>
> - Updated commit of ring-project.tar.gz still has lots of patches that
>   are applied to their upstream. The attached set of recipes, however,
>   doesn't have the updated version yet (due to lack of my time).
>
>   - Also, I just tried contacting pjsip/pjproject on an old issue that
>     relates to the "gnutls" patch:
>     [[http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/2017-April/019937.html]].
>
> - For the detailed questions of which license the patched *result*
>   should have, I recommend you to talk to ssalenick and dkc in #ring
>   channel at chat.freenode.net, because I already talked with them
>   briefely. Also, if they don't remember, tell them that they were
>   discussing this with "adfeno".
>
> - Other notes are in the .scm file.

Interesting coincidence! I was looking into GNU Ring as of last weekend
and would be interested in getting it packaged. There's still 2 things I
want to finish being free to work on it, so I might get around it in a
week or so.

If no one else volunteers, I can take it!

Maxim

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Continuing the work on the recipes related to GNU Ring
  2017-04-20 15:24   ` Maxim Cournoyer
@ 2017-04-20 16:22     ` Adonay Felipe Nogueira
  2017-06-09 19:00     ` Adonay Felipe Nogueira
  1 sibling, 0 replies; 18+ messages in thread
From: Adonay Felipe Nogueira @ 2017-04-20 16:22 UTC (permalink / raw)
  To: guix-devel

Thank you all for taking it. :)

Also, before I forget: For the recipes we made so far, I agree to
license the recipes made so far under the license that is used for most
package recipes in Guix, just add my copyright/attribution line. :)

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Continuing the work on the recipes related to GNU Ring
  2017-04-20 15:24   ` Maxim Cournoyer
  2017-04-20 16:22     ` Adonay Felipe Nogueira
@ 2017-06-09 19:00     ` Adonay Felipe Nogueira
  2017-06-11 20:40       ` Ludovic Courtès
  1 sibling, 1 reply; 18+ messages in thread
From: Adonay Felipe Nogueira @ 2017-06-09 19:00 UTC (permalink / raw)
  To: guix-devel

[-- Attachment #1: Type: text/plain, Size: 1222 bytes --]

More improvements, as described in:

- [[http://lists.gnu.org/archive/html/ring/2017-06/msg00004.html]].

- The above reference was also made in an Enhancement tracker in Ring's
  Tuleap instance, but I'm currently unable to visit/access their Tuleap
  instance. For the sake of transparency, once their tracker is
  available again, look for enhancement by searching for "Send patches
  upstream".

I have attached a set of package recipes for those wanting to test.

The problem with the customized flags, and the problem with the highly
patched pjsip/pjproject still persists, but patches for other packages
are mostly upstream now, except for a few two or three patches.

-- 
- [[https://libreplanet.org/wiki/User:Adfeno]]
- Palestrante e consultor sobre /software/ livre (não confundir com
  gratis).
- "WhatsApp"? Ele não é livre, por isso não uso. Iguais a ele prefiro
  GNU Ring, ou Tox. Quer outras formas de contato? Adicione o vCard
  que está no endereço acima aos teus contatos.
- Pretende me enviar arquivos .doc, .ppt, .cdr, ou .mp3? OK, eu
  aceito, mas não repasso. Entrego apenas em formatos favoráveis ao
  /software/ livre. Favor entrar em contato em caso de dúvida.

[-- Attachment #2: ring.scm --]
[-- Type: application/octet-stream, Size: 30793 bytes --]

;;; Copyright © 2016 Lukas Gradl
;;; Copyright © 2017 Marius Bakke
;;; Copyright © 2017 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@openmailbox.org>

;;; Before creating patches out of these recipes, please guarantee that there's contact information for Mx. Gradl and Mx. Bakke.

;;; TODO For other atributions, look for:
;;; - <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01541.html>.
;;; - <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01937.html>.
;;; - <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01938.html>.
;;; - <http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01216.html>.
;;; - <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01061.html>.
;;; - <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01062.html>.
;;; - <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01063.html>.

(define-module (ring)
  #:use-module (gnu packages)
  #:use-module (gnu packages aidc)
  #:use-module (gnu packages audio)
  #:use-module (gnu packages autotools)
  #:use-module (gnu packages base)
  #:use-module (gnu packages boost)
  #:use-module (gnu packages check)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages crypto)
  #:use-module (gnu packages documentation)
  #:use-module (gnu packages gettext)
  #:use-module (gnu packages glib)
  #:use-module (gnu packages gnome)
  #:use-module (gnu packages gtk)
  #:use-module (gnu packages libupnp)
  #:use-module (gnu packages linux)
  #:use-module (gnu packages multiprecision)
  #:use-module (gnu packages nettle)
  #:use-module (gnu packages pcre)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages python)
  #:use-module (gnu packages pulseaudio)
  #:use-module (gnu packages qt)
  #:use-module (gnu packages readline)
  #:use-module (gnu packages serialization)
  #:use-module (gnu packages telephony)
  #:use-module (gnu packages tls)
  #:use-module (gnu packages video)
  #:use-module (gnu packages webkit)
  #:use-module (gnu packages xiph)
  #:use-module (gnu packages xorg)
  #:use-module (gnu packages zip)
  #:use-module (guix build-system gnu)
  #:use-module (guix build-system cmake)
  #:use-module (guix build-system trivial)
  #:use-module (guix download)
  #:use-module (guix git-download)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix packages)
  #:use-module (guix utils)
  #:use-module (ice-9 match)
  #:use-module (srfi srfi-1))

;;; FIXME Convince upstream, Ring, to send patches to their upstreams.
;;; FIXME See if the combination of Savoir-faire Linux's pjproject +
;;; restbed + Ring daemon is OK.

;;; Dependencies on OpenSSL were disabled due to licensing issues.

(define-public gnu-ring-release
  (let ((release "20170524.2.745efce")
	(revision 4))
    (package
     (name "gnu-ring-release")
     (version (if (zero? revision)
     		  release
     		  (string-append release "-"
     				 (number->string revision))))
     (source (origin
	      (method url-fetch)
	      (uri (string-append "http://dl.ring.cx/ring-release/tarballs/ring_"
				  release ".tar.gz"))
	      (file-name (string-append name "-" version ".tar.gz"))
	      (sha256
	       (base32
		"0xcp0dcjn3m7ay8jb8f3km776da2m49sb0xz4clqi3njih2fkc45"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
	#:builder
	(begin
	  (use-modules (guix build utils))
	  (let ((gzip (assoc-ref %build-inputs "gzip"))
	  	(source (assoc-ref %build-inputs "source"))
	  	(tar (assoc-ref %build-inputs "tar")))
	    (setenv "PATH" (string-append gzip "/bin:"
	  				  tar "/bin")) 
	    (mkdir-p %output)
	    (system* "tar" "-xvf" source "-C" %output)
	    (chdir (string-append %output "/ring-project"))))))
     (native-inputs
      `(("source" ,source)
	("tar" ,tar)
	("gzip" ,gzip)))
     (synopsis "Distributed multimedia communications platform")
     (description "Ring is a secure and distributed voice, video and chat
communication platform that requires no centralized server and leaves the
power of privacy in the hands of the user.  It supports the SIP and IAX
protocols, as well as decentralized calling using P2P-DHT.")
     (home-page "https://gnu.org/software/ring")
     (license license:gpl3+))))

;;; Based on
;;; <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01541.html>.
(define-public savoir-faire-linux-pjproject
  (let ((release "2.5.5")
	(revision 3))
    (package
     (name "pjproject")
     (version (if (zero? revision)
     		  release
     		  (string-append release "-"
     				 (number->string revision))))
     (source (origin
	      (method url-fetch)
	      (uri (string-append "http://www.pjsip.org/release/"
				  release "/" name "-" release ".tar.bz2"))
	      (file-name (string-append name "-" version ".tar.bz2"))
	      (modules '((guix build utils)))
	      (snippet
	       '(begin
		  (let ((third-party-directories
			 '( "BaseClasses" "bdsound" "bin" "g7221" "gsm"
			    "ilbc" "lib" "milenage" "mp3" "speex" "srtp"
			    "resample" "yuv"
			    ;; Keep only resample, build and README.txt.
			    "build/baseclasses" "build/g7221" "build/gsm"
			    "build/ilbc" "build/milenage" "build/samplerate"
			    "build/speex" "build/srtp"
			    ;; Keep only Makefiles related to resample.
			    "build/resample" "build/yuv")))
		    (for-each (lambda (file)
				(delete-file-recursively (string-append "third_party/"
									file)))
			      third-party-directories)
		    #t)
		  (let ((third-party-directories
			 '( "gsm" "ilbc" "speex" "g7221" "srtp"
			    "portaudio"
			    "resample")))
		    (for-each
		     (lambda (directory-path)
		       (substitute* "third_party/build/os-linux.mak"
				    (((string-append "DIRS += " directory-path)) "")))
		     third-party-directories))))
	      (sha256
	       (base32
		"1wq8lpfcd4dfrbl7bgy2yzgp3ldjzq5430fqkhcqad0xfrxj0fdb"))))
     (build-system gnu-build-system)
     (inputs
      `(("portaudio" ,portaudio)))
     (propagated-inputs
      ;; These packages are referenced in the Libs field of the pkg-config
      ;; file that will be installed by pjproject.
      `(("speex" ,speex)
	("libsrtp" ,libsrtp)
	("gnutls" ,gnutls)
	("util-linux" ,util-linux)))
     (native-inputs
      `(("gnu-ring-release" ,gnu-ring-release)
	("autoconf" ,autoconf)
	("automake" ,automake)
	("pkg-config" ,pkg-config)
	("libtool" ,libtool)))
     (arguments
      `(#:tests? #f ; FIXME make: No rule to make target
	            ; 'pjlib/bin/pjlib-test-i686-unknown-linux-gnu'.
	;; #:test-target "selftest"
	#:configure-flags
	;; The disabled features are not used by libring.  Comes from
	;; "ring-project/daemon/contrib/src/pjproject/rules.mak".
	;; NOTE This doesn't seem right, other packages might want
	;; some of these. We must talk to Ring project and ask why we
	;; need things to be built this way. One way out of this would
	;; be to tell it to use external things instead of disabling.
	'( "--disable-oss"
	   "--disable-sound"
	   "--disable-video"
	   "--enable-ext-sound"
	   "--disable-speex-aec"
	   "--disable-g711-codec"
	   "--disable-l16-codec"
	   "--disable-gsm-codec"
	   "--disable-g722-codec"
	   "--disable-g7221-codec"
	   "--disable-speex-codec"
	   "--disable-ilbc-codec"
	   "--disable-opencore-amr"
	   "--disable-silk"
	   "--disable-sdl"
	   "--disable-ffmpeg"
	   "--disable-v4l2"
	   "--disable-openh264"
	   "--disable-resample"
	   "--enable-ssl=gnutls"
	   ;; Now deviating from the rules.mak file.
	   "--with-external-srtp"
	   ;; Now back to following the rules.mak file.
	   "CFLAGS=-DPJ_ICE_MAX_CAND=32 -DPJ_ICE_MAX_CHECKS=150 -DPJ_ICE_COMP_BITS=2 -DPJ_ICE_MAX_STUN=3 -DPJSIP_MAX_PKT_LEN=8000")
	#:phases
	(modify-phases %standard-phases
		       (add-after 'unpack 'apply-patches
				  (lambda* (#:key inputs #:allow-other-keys)
					   ;; Comes from
					   ;; "ring-project/daemon/contrib/src/pjproject/rules.mak".
					   ;; We already asked
					   ;; Ring to contribute
					   ;; upstrea, please
					   ;; see:
					   ;; https://tuleap.ring.cx/plugins/tracker/?aid=1546.
					   ;; NOTE These amount
					   ;; for huge changes
					   ;; in pjproject.
					   ;; Particularly, they
					   ;; add support for
					   ;; GnuTLS, which is
					   ;; completely lacking
					   ;; in pjproject
					   ;; 2.5.5.
					   (let ((savoir-faire-linux-patches
						  '("endianness"
						    "gnutls"
						    "notestsapps"
						    "fix_base64"
						    "ipv6"
						    "ice_config"
						    "multiple_listeners"
						    "pj_ice_sess"
						    "fix_turn_fallback"
						    "fix_ioqueue_ipv6_sendto"
						    "add_dtls_transport"))
						 (patches-directory "savoir-faire-linux-patches"))
					     (mkdir patches-directory)
					     (for-each
					      (lambda (file)
						(copy-file
						 (string-append (assoc-ref inputs "gnu-ring-release")
								"/ring-project/daemon/contrib/src/pjproject/" file ".patch")
						 (string-append patches-directory
								"/" file ".patch"))
						(zero? (system* "patch" "-f" "-p1" "-i"
								(string-append patches-directory
									       "/" file ".patch"))))
					      savoir-faire-linux-patches))))
		       (add-before 'build 'build-dependencies
				   (lambda _
				     (zero? (system* "make" "dep"))))
		       (add-before 'patch-source-shebangs 'autoconf
				   (lambda _
				     (zero? (system* "autoconf" "-v" "-f" "-i" "-o"
						     "aconfigure" "aconfigure.ac"))))
		       (add-before 'autoconf 'disable-some-tests
				   ;; Three of the six test programs
				   ;; fail due to missing network
				   ;; access.
				   (lambda _
				     (substitute* "Makefile"
						  (("selftest: pjlib-test pjlib;3R-util-test pjnath-test pjmedia-test pjsip-test pjsua-test")
						   "selftest: pjlib-test pjlib-util-test pjmedia-test")))))))
     (home-page "www.pjsip.org")
     (synopsis "Session Initiation Protocol (SIP) stack")
     (description "PJProject provides an implementation of the Session
Initiation Protocol (SIP) and a multimedia framework. This package is intended
for use with libring.  There are several custom patches, most notably the use
of gnutls instead of openssl for encryption.")
     ;; We should make the license only one, the one which is
     ;; effective as result of applying savoir-faire-linux-patches,
     ;; because we don't want to say that the whole package has two
     ;; licenses for which the user can "choose" from (dual licensing).
     ;; NEW pjproject is under GNU GPL 2+, not GPL 2 (only).
     ;; Last time we checked, the
     ;; Savoir-faire Linux patches were under
     ;; GNU GPL 3 (only). Is this still true?
     (license '(license:gpl2+
		license:gpl3)))))

(define-public savoir-faire-linux-asio
  (let ((release "1.10.8")
	(commit "28d9b8d6df708024af5227c551673fdb2519f5bf")
	(revision 2))
    (package
     (name "asio")
     (version (if (zero? revision)
     		  release
     		  (string-append release "-"
     				 (number->string revision)
     				 "." (string-take commit 7))))
     (source (origin
	      (method url-fetch)
	      (uri (string-append "https://github.com/chriskohlhoff/asio/archive/"
				  commit ".tar.gz"))
	      (file-name (string-append name "-" version ".tar.gz"))
	      (sha256
	       (base32
		"07wp56vibqp1qp8ca1ahbhs8md7k22im7nmlx0haqxdgszp1zcvb"))))
     (build-system gnu-build-system)
     (inputs
      `(("boost" ,boost)))
     (native-inputs
      `(("autoconf" ,autoconf)
	("automake" ,automake)
	("gnu-ring-release" ,gnu-ring-release)))
     (arguments
      `(#:configure-flags
	`(,(string-append "--with-boost=\""
			  (assoc-ref %build-inputs "boost") "\""))
	#:phases
	(modify-phases %standard-phases
		       (add-after 'unpack 'change-directory-and-apply-patches
				  (lambda* (#:key inputs #:allow-other-keys)
					   ;; We asked Ring to
					   ;; send patches to
					   ;; their upstream,
					   ;; status can be seen
					   ;; at:
					   ;; https://tuleap.ring.cx/plugins/tracker/?aid=1546.
					   ;; These patches just
					   ;; disable tests and
					   ;; examples.  We
					   ;; should convince
					   ;; Ring to send these
					   ;; patches to their
					   ;; upstream, asio.
					   (let ((savoir-faire-linux-patches
						  '("no_tests_examples"))
						 (patches-directory "savoir-faire-linux-patches"))
					     (chdir "asio")
					     (mkdir patches-directory)
					     (for-each
					      (lambda (file)
						(copy-file
						 (string-append (assoc-ref inputs "gnu-ring-release")
								"/ring-project/daemon/contrib/src/asio/" file ".patch")
						 (string-append patches-directory
								"/" file ".patch"))
						(zero? (system* "patch" "-f" "-p1" "-i"
								(string-append patches-directory
									       "/" file ".patch"))))
					      savoir-faire-linux-patches))))
		       (add-before 'configure 'run-autogen
				   (lambda _
				     (zero? (system* "./autogen.sh")))))))
     (synopsis "Asio C++ Library")
     (description "Asio is a cross-platform C++ library for network
and low-level I/O programming that provides developers with a
consistent asynchronous model using a modern C++ approach.")
     (home-page "https://github.com/chriskohlhoff/asio")
     (license license:boost1.0))))

(define-public savoir-faire-linux-restbed
  (let ((release "45.5-RC1")
	(commit "6dd46e1d9ab3801a6c6e1aabaee74d066e12c5e1")
	(revision 2))
    (package
     (name "restbed")
     (version (if (zero? revision)
     		  release
     		  (string-append release "-"
     				 (number->string revision)
     				 "." (string-take commit 7))))
     (source (origin
	      (method url-fetch)
	      (uri (string-append "https://github.com/Corvusoft/restbed/archive/"
				  commit ".tar.gz"))
	      (file-name (string-append name "-" version ".tar.gz"))
	      (sha256
	       (base32
		"0wl52qmpmxmrq8mcm8ckpqfqrrj6dfcvmc3qkigymf3mj2ckf9n3"))))
     (build-system cmake-build-system)
     (inputs
      `(("asio" ,savoir-faire-linux-asio)
	("catch" ,catch-framework)
	("glibc" ,glibc)
	("kashmir" ,kashmir)))
     (native-inputs
      `(("gnu-ring-release" ,gnu-ring-release)))
     (arguments
      `(#:tests? #f
	;; Comes from "ring-project/daemon/contrib/src/restbed/rules.mak".
	#:configure-flags
	`(,(string-append "-DCMAKE_INSTALL_LIBDIR="
			 (assoc-ref %outputs "out") "/lib")
	  "-DBUILD_TESTS=NO"
	  "-DBUILD_EXAMPLES=NO"
	  "-DBUILD_SSL=NO"
	  "-DBUILD_SHARED=NO")
	#:phases
	(modify-phases %standard-phases
		       (add-after 'unpack 'apply-patches-and-fix-paths
				  (lambda* (#:key inputs #:allow-other-keys)
					   (let ((asio (assoc-ref inputs "asio"))
						 (catch (assoc-ref inputs "catch"))
						 (glibc (assoc-ref inputs "glibc"))
						 (kashmir (assoc-ref inputs "kashmir"))
						 ;; We asked Ring to
						 ;; send patches
						 ;; upstream, status
						 ;; can be seen at:
						 ;; https://tuleap.ring.cx/plugins/tracker/?aid=1546.
						 ;; These patches deal
						 ;; with minor fixes.
						 ;; We should convince
						 ;; Ring upstream to
						 ;; send these patches
						 ;; to their upstream,
						 ;; restbed.
						 (savoir-faire-linux-patches
						  '("strand"))
						 (patches-directory "savoir-faire-linux-patches"))
					     (mkdir patches-directory)
					     (for-each
					      (lambda (file)
						(copy-file
						 (string-append (assoc-ref inputs "gnu-ring-release")
								"/ring-project/daemon/contrib/src/restbed/" file ".patch")
						 (string-append patches-directory
								"/" file ".patch"))
						(zero? (system* "patch" "-f" "-p1" "-i"
								(string-append patches-directory
									       "/" file ".patch"))))
					      savoir-faire-linux-patches)
					     (substitute* "cmake/modules/Findasio.cmake"
							  (("(find_path\\( asio_INCLUDE asio\\.hpp HINTS )[^\n]*\n" _ begin)
							   (string-append begin "\"" asio "/include\" )\n")))
					     (substitute* "cmake/modules/Findcatch.cmake"
							  (("(find_path\\( catch_INCLUDE catch\\.hpp HINTS )[^\n]*\n" _ begin)
							   (string-append begin "\"" catch "/include\" )\n")))
					     (substitute* "cmake/modules/Findkashmir.cmake"
							  (("(find_path\\( kashmir_INCLUDE kashmir HINTS )[^\n]*\n" _ begin)
							   (string-append begin "\"" kashmir "/kashmir-dependency\" )\n")))
					     (substitute* "cmake/modules/Findsyslog.cmake"
							  (("(find_path\\( syslog_INCLUDE syslog\\.h HINTS )[^\n]*\n" _ begin)
							   (string-append begin "\"" glibc "/include\" )\n")))))))))
     (synopsis "Asynchronous RESTful functionality to C++11 applications")
     (description "Restbed is a comprehensive and consistent programming
model for building applications that require seamless and secure
communication over HTTP.")
     (home-page "https://github.com/Corvusoft/restbed")
     (license license:agpl3+))))

;;; Based on
;;; <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01061.html>.
(define-public libring
  (package
   (inherit gnu-ring-release)
   (name "libring")
   (source (origin
	    (inherit (package-source gnu-ring-release))
	    (modules '((guix build utils)))
	    (snippet
	     '(begin
		(delete-file-recursively "daemon/contrib")))))
   (build-system gnu-build-system)
   (inputs
    `(("alsa-lib" ,alsa-lib)
      ("boost" ,boost)
      ("dbus-c++" ,dbus-c++)
      ("eudev" ,eudev)
      ("ffmpeg" ,ffmpeg)
      ("flac" ,flac)
      ("gmp" ,gmp)
      ("gsm" ,gsm)
      ("jack" ,jack-1)
      ("jsoncpp" ,jsoncpp)
      ("libogg" ,libogg)
      ("libsamplerate" ,libsamplerate)
      ("libsndfile" ,libsndfile)
      ("libupnp" ,libupnp)
      ("libva" ,libva)
      ("libvorbis" ,libvorbis)
      ("libx264" ,libx264)
      ("opendht-with-msgpack-c++-11" ,opendht-with-msgpack-c++-11)
      ("opus" ,opus)
      ("pcre" ,pcre)
      ("pjproject" ,savoir-faire-linux-pjproject)
      ("pulseaudio" ,pulseaudio)
      ("speex" ,speex)
      ("yaml-cpp" ,yaml-cpp)
      ("zlib" ,zlib)
      ("crypto++" ,crypto++)
      ("libx11" ,libx11)
      ("python" ,python)
      ("python-wrapper" ,python-wrapper)
      ("restbed" ,savoir-faire-linux-restbed)
      ("speexdsp" ,speexdsp)))
   (native-inputs
    `(("autoconf" ,autoconf)
      ("automake" ,automake)
      ("cppunit" ,cppunit)
      ("libtool" ,libtool)
      ("perl" ,perl)
      ("pkg-config" ,pkg-config)))
   (arguments
    `(#:tests? #f ; FIXME The tests fail to compile due to missing headers.
      #:phases
      (modify-phases %standard-phases
		     (add-after 'unpack 'change-directory
				(lambda _
				  (chdir "daemon")))
		     (add-before 'configure 'autoconf
				 (lambda _
				   (zero? (system* "autoreconf" "-vfi"))))
		     (add-before 'build 'add-lib-dir
				 (lambda _
				   (mkdir "src/lib"))))))
   (description
    (string-append (package-description gnu-ring-release) "

This package provides a library and daemon implementing the Ring core
functionality."))))

;;; Based on
;;; <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01062.html>.
(define-public libringclient
  (package
   (inherit gnu-ring-release)
   (name "libringclient")
   (build-system cmake-build-system)
   (propagated-inputs
    `(("libring" ,libring) ; For 'dring'.
      ("qtbase" ,qtbase) ; Qt is included in several installed headers.
      ("qttools" ,qttools)))
   (arguments
    `(#:tests? #f ; There is no testsuite.
      #:configure-flags
      `(,(string-append "-DRING_BUILD_DIR="
			(assoc-ref %build-inputs "libring") "/include"))
      #:phases
      (modify-phases %standard-phases
		     (add-after 'unpack 'change-directory
				(lambda _
				  (chdir "lrc")))
		     (add-before 'configure 'fix-dbus-interfaces-path
				 (lambda* (#:key inputs #:allow-other-keys)
					  (substitute* "CMakeLists.txt"
						       (("\\$\\{CMAKE_INSTALL_PREFIX\\}(/share/dbus-1/interfaces)" _ dbus-interfaces-path-suffix)
							(string-append (assoc-ref inputs "libring")
								       dbus-interfaces-path-suffix))))))))
   (description
    (string-append (package-description gnu-ring-release) "

This package provides a library common to all Ring clients."))))

;;; Based on
;;; <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01063.html>.
(define-public ring-client-gnome
  (package
   (inherit gnu-ring-release)
   (name "ring-client-gnome")
   (build-system cmake-build-system)
   (inputs
    `(("libringclient" ,libringclient)
      ("gtk+" ,gtk+)
      ("glib:bin" ,glib "bin")
      ("qrencode" ,qrencode)
      ("libnotify" ,libnotify)
      ("clutter" ,clutter)
      ("clutter-gtk" ,clutter-gtk)
      ("gettext" ,gnu-gettext)
      ("webkitgtk" ,webkitgtk)))
   (native-inputs
    `(("pkg-config" ,pkg-config)
      ("doxygen" ,doxygen)))
   (propagated-inputs
    `(("libring" ,libring) ; This is needed to run dring.
      ("adwaita-icon-theme" ,adwaita-icon-theme)
      ("evolution-data-server" ,evolution-data-server)))
   (arguments
    `(#:tests? #f ; There is no testsuite.
      #:phases
      (modify-phases %standard-phases
		     (add-after 'unpack 'change-directory
				(lambda _
				  (chdir "client-gnome"))))))
   (description
    (string-append (package-description gnu-ring-release) "

This package provides the Ring client for the Gnome Desktop."))))

;;; From <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01937.html>.
(define-public argon2
  (let ((release "20161029")
	(commit "9e3ae0f5e91eced6de3c28a9b61f2d91200119e3")
	(revision 4))
    (package
     (name "argon2")
     (version (if (zero? revision)
     		  release
     		  (string-append release "-"
     				 (number->string revision)
     				 "." (string-take commit 7))))
     (source (origin
	      (method url-fetch)
	      (uri (string-append "https://github.com/P-H-C/phc-winner-argon2/archive/"
				  commit ".tar.gz"))
	      (file-name (string-append name "-" version ".tar.gz"))
	      (modules '((guix build utils)))
	      (snippet
	       '(begin
		  (substitute* "Makefile"
			       (("ifneq \\(\\$\\(OPTTEST\\), 0\\)")
				"ifneq (1, 0)"))))
	      (sha256
	       (base32
		"122rpbrl2lbhgwj7sanbgyn81dnp3azr8ydxr5sc0rwqlyg3iqdp"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
	#:make-flags '("CC=gcc")
	#:phases
	(modify-phases %standard-phases
		       (delete 'configure)
		       (add-after 'unpack 'fix-pkg-config-and-makefile
				  (lambda _
				    (substitute* "libargon2.pc"
						 (("/usr")
						  (assoc-ref %outputs "out"))
						 (("@HOST_MULTIARCH@")
						  ,(or (%current-target-system)
						       (%current-system)))
						 (("@UPSTREAM_VER@")
						  ,release))))
		       (replace 'install
				(lambda _
				  (let ((out (assoc-ref %outputs "out")))
				    (install-file "argon2"
						  (string-append out "/bin"))
				    (install-file "libargon2.a"
						  (string-append out "/lib"))
				    (install-file "libargon2.so.0"
						  (string-append out "/lib"))
				    (install-file "libargon2.pc"
				    		  (string-append out "/lib/pkgconfig"))
				    (copy-recursively "include"
						      (string-append out "/include"))
				    (symlink (string-append out "/lib/libargon2.so.0")
				    	     (string-append out "/lib/libargon2.so"))))))))
     (home-page "https://www.argon2.com/")
     (synopsis "Password hashing library")
     (description "Argon2 provides a key derivation function that was declared
winner of the 2015 Password Hashing Competition.")
     (license license:cc0))))

(define-public msgpack-c++-11
  (package
   (inherit msgpack)
   (name "msgpack-c++-11")
   (arguments
    (substitute-keyword-arguments (package-arguments msgpack)
				  ((#:make-flags msgpack-make-flags)
				   `(append ,msgpack-make-flags
					    '("-DMSGPACK_CXX11=ON")))))))

;;; Based on
;;; <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg01938.html>.
(define-public opendht
  (let ((release "1.3.3")
	(revision 5))
    (package
     (name "opendht") 
     (version (if (zero? revision)
     		  release
     		  (string-append release "-"
     				 (number->string revision))))
     (source (origin
	      (method url-fetch)
	      (uri (string-append "https://github.com/savoirfairelinux/" name
				  "/archive/" release ".tar.gz"))
	      (file-name (string-append name "-" version ".tar.gz"))
	      (sha256
	       (base32
		"07c8pj3wd7vmz505w508nlc4pssv38ca9s1asv8ydq9qvppd780b"))))
     (build-system gnu-build-system)
     (inputs
      `(("gnutls" ,gnutls)
	("nettle" ,nettle)
	("readline" ,readline)))
     (propagated-inputs
      `(("argon2" ,argon2)
	("msgpack" ,msgpack))) ; included in several installed headers
     (native-inputs
      `(("autoconf" ,autoconf)
	("pkg-config" ,pkg-config)
	("automake" ,automake)
	("libtool" ,libtool)))
     (arguments
      `(#:configure-flags '("--with-argon2")
	#:phases (modify-phases %standard-phases
				(add-before 'configure 'autoconf
					    (lambda _
					      (zero?
					       (system* "autoreconf" "-vfi")))))))
     (home-page "https://github.com/savoirfairelinux/opendht/")
     (synopsis "Distributed Hash Table (DHT) library")
     (description "OpenDHT is a Distributed Hash Table (DHT) library.  It may
be used to manage peer-to-peer network connections as needed for real time
communication.")
     ;; NEW It's under GNU GPL3+.
     (license license:gpl3+))))

(define-public opendht-with-msgpack-c++-11
  (package
   (inherit opendht)
   (name "opendht-with-msgpack-c++-11")
   (propagated-inputs
    `(("msgpack-c++-11" ,msgpack-c++-11)
      ,@(alist-delete "msgpack" (package-propagated-inputs opendht))))))

;;; From
;;; <http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01216.html>.
;;; Not including
;;; <http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01392.html>.
;;; When prearing patches, must include this attribution.
(define-public crypto++
  (let ((release "5.6.5")
	(revision 1))
    (package
     (name "crypto++")
     (version (if (zero? revision)
     		  release
     		  (string-append release "-"
     				 (number->string revision))))
     (source (origin
	      (method url-fetch)
	      (uri (let ((numeric-version
			  (match (string-split release #\.)
				 ((first-digit other-digits ...)
				  (string-append first-digit
						 (string-concatenate
						  other-digits))))))
		     (string-append "https://cryptopp.com/cryptopp"
				    numeric-version ".zip")))
	      (sha256
	       (base32
		"0d1cqdz369ivi082k59025wvxzywvkizw7i0pf5h0a1izs3g8pm7"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
	`(,(string-append "PREFIX=" (assoc-ref %outputs "out"))
	  ,(string-append "BINDIR=" (assoc-ref %outputs "bin") "/bin")
	  ,(string-append "DATADIR=" (assoc-ref %outputs "doc") "/share")
	  "DISABLE_CXXFLAGS_OPTIMIZATIONS=1"
	  ;; Override "/sbin/ldconfig" with simply "echo" since
	  ;; we don't need ldconfig(8).
	  "LDCONF=echo")
	#:phases
	(modify-phases %standard-phases
		       (add-after 'unpack 'enter-source
				  ;; They have made a zip-bomb.
				  (lambda _ (chdir "..") #t))
		       (add-after 'enter-source 'disable-optimizations
				  (lambda _
				    ;; XXX: The disable optimizations
				    ;; flag above is not recognized in
				    ;; the current version. See
				    ;; https://github.com/weidai11/cryptopp/pull/354.
				    ;; For now, just remove it the dirty
				    ;; way.
				    (substitute* "GNUmakefile"
						 (("-march=native") ""))
				    #t))
		       (delete 'configure)
		       (add-after 'build 'build-shared
				  (lambda _
				    ;; By default, only the static
				    ;; library is built.
				    (zero?
				     (system* "make" "shared"))))
		       (add-after 'install 'move-static-library
				  (lambda* (#:key outputs #:allow-other-keys)
					   (let* ((out (assoc-ref outputs "out"))
						  (lib (string-append out "/lib"))
						  (static (assoc-ref outputs "static"))
						  (slib (string-append static "/lib")))
					     (mkdir-p slib)
					     (for-each (lambda (file)
							 (install-file file slib)
							 (delete-file file))
						       (find-files lib "\\.l?a$"))
					     #t)))
		       (add-after 'move-static-library 'add-so-version-symlink
				  ;; The library is named
				  ;; MAJOR.MINOR.PATCHLEVEL. Some
				  ;; programs expect a MAJOR.MINOR
				  ;; symlink.
				  (lambda* (#:key outputs #:allow-other-keys)
					   (let ((out (assoc-ref outputs "out"))
						 (major+minor ,(version-major+minor release)))
					     (with-directory-excursion (string-append out "/lib")
								       (symlink (string-append "libcryptopp.so." ,release)
										(string-append "libcryptopp.so." major+minor))
								       #t)))))))
     (outputs
      '("out" ; 6.4M shared library and headers
	"bin" ; 6.3M cryptest.exe
	"doc" ; 6.4M documentation and examples
	"static")) ; 15M static library
     (native-inputs
      `(("unzip" ,unzip)))
     (synopsis "C++ class library of cryptographic schemes")
     (description "Crypto++ is a large collection of cryptograhic
algorithms and related utilities for C++.")
     (home-page "https://cryptopp.com")
     ;; The compilation is licensed under Boost 1.0, while
     ;; most individual files are in the public domain.
     ;; Should we add two licenses?
     (license '(license:boost1.0
		license:public-domain)))))

(define-public kashmir
  (let ((release "0")
	(commit "2f3913f49c4ac7f9bff9224db5178f6f8f0ff3ee")
	(revision 1))
    (package
     (name "kashmir")
     (version (if (zero? revision)
     		  release
     		  (string-append release "-"
     				 (number->string revision)
     				 "." (string-take commit 7))))
     (source (origin
	      (method url-fetch)
	      (uri (string-append "https://github.com/Corvusoft/" name
				  "-dependency/archive/" commit ".tar.gz"))
	      (file-name (string-append name "-" version ".tar.gz"))
	      (sha256
	       (base32
		"11hbh3d7w74gng9qgz3hdrzvxjgil1pymk2bzxv1ajh9vp60xxs9"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
	#:builder
	(begin
	  (use-modules (guix build utils))
	  (let ((gzip (assoc-ref %build-inputs "gzip"))
		(source (assoc-ref %build-inputs "source"))
		(tar (assoc-ref %build-inputs "tar")))
	    (setenv "PATH" (string-append gzip "/bin:"
					  tar "/bin"))
	    (mkdir-p %output)
	    (system* "tar" "-xvf" source "-C" %output)
	    (chdir %output)
	    (for-each (lambda (file)
			(rename-file file "kashmir-dependency"))
		      (find-files "." "kashmir-dependency-" #:directories? #t))))))
     (native-inputs
      `(("source" ,source)
	("tar" ,tar)
	("gzip" ,gzip)))
     (synopsis "C++ library providing extra functionality for projects")
     (description "The Kashmir Library is intended to provide
functionality needed in many software projects, but not present in the
C++ standard library.")
     (home-page "tps://github.com/corvusoft/kashmir-dependency")
     (license license:boost1.0))))

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Continuing the work on the recipes related to GNU Ring
  2017-06-09 19:00     ` Adonay Felipe Nogueira
@ 2017-06-11 20:40       ` Ludovic Courtès
  2017-06-30 13:09         ` Adonay Felipe Nogueira
  0 siblings, 1 reply; 18+ messages in thread
From: Ludovic Courtès @ 2017-06-11 20:40 UTC (permalink / raw)
  To: Adonay Felipe Nogueira; +Cc: guix-devel

Hi,

Adonay Felipe Nogueira <adfeno@openmailbox.org> skribis:

> More improvements, as described in:
>
> - [[http://lists.gnu.org/archive/html/ring/2017-06/msg00004.html]].
>
> - The above reference was also made in an Enhancement tracker in Ring's
>   Tuleap instance, but I'm currently unable to visit/access their Tuleap
>   instance. For the sake of transparency, once their tracker is
>   available again, look for enhancement by searching for "Send patches
>   upstream".
>
> I have attached a set of package recipes for those wanting to test.
>
> The problem with the customized flags, and the problem with the highly
> patched pjsip/pjproject still persists, but patches for other packages
> are mostly upstream now, except for a few two or three patches.

Very nice, good to hear about progress on this front!

When you feel like some of these packages are ready, you can consider
submitting them piecemeal.  That will be less intimidating than a set of
20 packages.  ;-)

Also I noticed that the file you sent includes a couple of OpenDHT
variants.  We already have an ‘opendht’ package, but if you think it
should be adjusted, let’s do that.

Thank you!

Ludo’.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Continuing the work on the recipes related to GNU Ring
  2017-06-11 20:40       ` Ludovic Courtès
@ 2017-06-30 13:09         ` Adonay Felipe Nogueira
  2017-07-30  9:55           ` ng0
  0 siblings, 1 reply; 18+ messages in thread
From: Adonay Felipe Nogueira @ 2017-06-30 13:09 UTC (permalink / raw)
  To: guix-devel

Hi, I have sent some patches, see
[[http://lists.gnu.org/archive/html/guix-patches/2017-06/msg00831.html]].

-- 
- [[https://libreplanet.org/wiki/User:Adfeno]]
- Palestrante e consultor sobre /software/ livre (não confundir com
  gratis).
- "WhatsApp"? Ele não é livre, por isso não uso. Iguais a ele prefiro
  GNU Ring, ou Tox. Quer outras formas de contato? Adicione o vCard
  que está no endereço acima aos teus contatos.
- Pretende me enviar arquivos .doc, .ppt, .cdr, ou .mp3? OK, eu
  aceito, mas não repasso. Entrego apenas em formatos favoráveis ao
  /software/ livre. Favor entrar em contato em caso de dúvida.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Continuing the work on the recipes related to GNU Ring
  2017-06-30 13:09         ` Adonay Felipe Nogueira
@ 2017-07-30  9:55           ` ng0
  2017-07-30 13:16             ` Adonay Felipe Nogueira
  0 siblings, 1 reply; 18+ messages in thread
From: ng0 @ 2017-07-30  9:55 UTC (permalink / raw)
  To: Adonay Felipe Nogueira; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 439 bytes --]

Adonay Felipe Nogueira transcribed 0.7K bytes:
> Hi, I have sent some patches, see
> [[http://lists.gnu.org/archive/html/guix-patches/2017-06/msg00831.html]].

Can you please resend them to guix-patches@gnu.org in case
no one has reviewed them? It's easier to be able to track
them.
-- 
ng0
GnuPG: A88C8ADD129828D7EAC02E52E22F9BBFEE348588
GnuPG: https://n0is.noblogs.org/my-keys
https://www.infotropique.org https://krosos.org

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Continuing the work on the recipes related to GNU Ring
  2017-07-30  9:55           ` ng0
@ 2017-07-30 13:16             ` Adonay Felipe Nogueira
  2017-07-30 14:45               ` ng0
  0 siblings, 1 reply; 18+ messages in thread
From: Adonay Felipe Nogueira @ 2017-07-30 13:16 UTC (permalink / raw)
  To: guix-devel

Do you mean creating a new patch report in guix-patches (even though the
patches have already been sent to guix-patches)? This would result in
two patch submissions being openned (one which is the older, and is
still open, and other that would be the new one).

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Continuing the work on the recipes related to GNU Ring
  2017-07-30 13:16             ` Adonay Felipe Nogueira
@ 2017-07-30 14:45               ` ng0
  0 siblings, 0 replies; 18+ messages in thread
From: ng0 @ 2017-07-30 14:45 UTC (permalink / raw)
  To: Adonay Felipe Nogueira; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 693 bytes --]

Adonay Felipe Nogueira transcribed 0.3K bytes:
> Do you mean creating a new patch report in guix-patches (even though the
> patches have already been sent to guix-patches)? This would result in
> two patch submissions being openned (one which is the older, and is
> still open, and other that would be the new one).

Okay, I didn't know there was already one open. I just saw this post
where you said you submitted patches, no one replied for almost 4 weeks
and thought it was lost.
If there's nothing to be done here, it's all good.
-- 
ng0
GnuPG: A88C8ADD129828D7EAC02E52E22F9BBFEE348588
GnuPG: https://n0is.noblogs.org/my-keys
https://www.infotropique.org https://krosos.org

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2017-07-30 14:45 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-18 23:20 Continuing the work on the recipes related to GNU Ring Adonay Felipe Nogueira
2017-03-19  2:25 ` John Darrington
2017-03-22 19:20 ` Adonay Felipe Nogueira
2017-03-22 19:56   ` Leo Famulari
2017-03-22 20:41     ` Adonay Felipe Nogueira
2017-03-24 23:42   ` Adonay Felipe Nogueira
2017-03-25  0:01     ` Adonay Felipe Nogueira
2017-03-26 13:21       ` Ludovic Courtès
2017-03-31 19:05         ` Adonay Felipe Nogueira
2017-04-20 13:55 ` Adonay Felipe Nogueira
2017-04-20 15:24   ` Maxim Cournoyer
2017-04-20 16:22     ` Adonay Felipe Nogueira
2017-06-09 19:00     ` Adonay Felipe Nogueira
2017-06-11 20:40       ` Ludovic Courtès
2017-06-30 13:09         ` Adonay Felipe Nogueira
2017-07-30  9:55           ` ng0
2017-07-30 13:16             ` Adonay Felipe Nogueira
2017-07-30 14:45               ` ng0

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.