Re: [PATCH] glib-or-gtk-build-system: new build-system

2014-10-11 Thread Federico Beffa
On Sat, Oct 11, 2014 at 12:13 PM, Ludovic Courtès l...@gnu.org wrote:
 (Adding guix-devel, which I think was dropped by mistake.)
 Did these libcanberra issues appear after you switched Evince and
 Inkscape to ‘glib-or-gtk-build-system’?

No, it was the same before.  If anything, with
glib-or-gtk-build-system, if I add
libcanberra as an input to the packages, the warning disappears.


 Did you browse /etc for things related to GTK+ modules?  Or maybe did
 you check your user account’s GSettings database (I believe there’s a
 graphical editor to do that)?

Yes, I've looked in various places, including /etc and using the
dconf-editor, but could not
find anything useful. However, I do not really understand how gdm3 and
gnome are started
up and configured on Debian. So, I may have messed the right spot.

Fede



Re: [PATCH] glib-or-gtk-build-system: new build-system

2014-10-10 Thread Federico Beffa
On Thu, Oct 9, 2014 at 11:10 PM, Ludovic Courtès l...@gnu.org wrote:
 Is the GTK_MODULES environment variable defined on your system?  AIUI,
 that tells GTK+ what modules to dlopen.

No, that variable is not defined on my system.

Regards,
Fede



Re: [PATCH] glib-or-gtk-build-system: new build-system

2014-10-10 Thread Ludovic Courtès
Federico Beffa be...@ieee.org skribis:

 l...@gnu.org (Ludovic Courtès) writes:

 Not sure.  Is libcanberra dlopened?  Do you know what dlopens it, and
 whether it systematically does?

 I've not found out.  I'm attaching the strace log of evince (actually
 the wrapper of my local package built with glib-or-gtk).  Maybe you see
 more than me.

 In any case, I've checked a couple more applications making use of the gtk
 toolkit: inkscape, icecat. They all complain about
 libcanberra-gtk-module. It looks like
 libcanberra is used by many gtk+ applications.

I’ve looked again at the strace log and can’t find anything obvious such
as a config file in /home or /etc that would tell it to load
libcanberra-module.

However, I built Evince locally with glib-or-gtk-build-system, and it
doesn’t mention anything about libcanberra:

--8---cut here---start-8---
$ /gnu/store/14ja1vpbc55yfgpp4irxwriw390zbl1g-evince-3.6.1/bin/evince 
doc/foo.pdf 

** (..evince-real-real:5821): WARNING **: Error retrieving accessibility bus 
address: org.freedesktop.DBus.Error.ServiceUnknown: The name org.a11y.Bus was 
not provided by any .service files
Error registering document: 
GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name 
org.gnome.evince.Daemon was not provided by any .service files
GLib-GIO-Message: Using the 'memory' GSettings backend.  Your settings will not 
be saved or shared with other applications.
--8---cut here---end---8---

So I’m pretty clueless.  Could it be that it receives some message over
D-Bus (on your machine) telling it to load the thing?  What does
‘dbus-monitor’ show?

 So this is the daemon the GSettings API normally connects to, right?

 I believe so. At least that's what I understood reading some of the
 documentation and some threads, e.g.:

 http://permalink.gmane.org/gmane.comp.gnome.shell/5897

 dconf is the replacement for gconf which is now considered deprecated.

 For emacs specifically it appears that the warning may be suppressed
 with configure flags --without-gsettings and --disable-gconf:

Sure, but that would be cheating.  :-)

Thanks,
Ludo’.



Re: [PATCH] glib-or-gtk-build-system: new build-system

2014-10-09 Thread Federico Beffa
l...@gnu.org (Ludovic Courtès) writes:

 Not sure.  Is libcanberra dlopened?  Do you know what dlopens it, and
 whether it systematically does?

I've not found out.  I'm attaching the strace log of evince (actually
the wrapper of my local package built with glib-or-gtk).  Maybe you see
more than me.

In any case, I've checked a couple more applications making use of the gtk
toolkit: inkscape, icecat. They all complain about
libcanberra-gtk-module. It looks like
libcanberra is used by many gtk+ applications.

On debian aptitude why libcanberra-gtk-module reports the following
depencencies:

i   task-gnome-desktop Dependsgnome-core
i A gnome-core Dependsmetacity (= 1:2.34)
i A metacity   Dependslibcanberra-gtk0 (= 0.2)
i A libcanberra-gtk0   Recommends libcanberra-gtk-module

 So this is the daemon the GSettings API normally connects to, right?

I believe so. At least that's what I understood reading some of the
documentation and some threads, e.g.:

http://permalink.gmane.org/gmane.comp.gnome.shell/5897

dconf is the replacement for gconf which is now considered deprecated.

For emacs specifically it appears that the warning may be suppressed
with configure flags --without-gsettings and --disable-gconf:

http://www.linuxquestions.org/questions/slackware-14/glib-gio-message-when-starting-emacs-after-latest-current-update-4175418191/

Not sure how emacs uses those features.

Regards,
Fede


evince-fbe-wrapper.log.gz
Description: application/gzip


Re: [PATCH] glib-or-gtk-build-system: new build-system

2014-10-09 Thread Ludovic Courtès
Federico Beffa be...@ieee.org skribis:

 l...@gnu.org (Ludovic Courtès) writes:

 Not sure.  Is libcanberra dlopened?  Do you know what dlopens it, and
 whether it systematically does?

 I've not found out.  I'm attaching the strace log of evince (actually
 the wrapper of my local package built with glib-or-gtk).  Maybe you see
 more than me.

Is the GTK_MODULES environment variable defined on your system?  AIUI,
that tells GTK+ what modules to dlopen.

Ludo’.



Re: [PATCH] glib-or-gtk-build-system: new build-system

2014-10-08 Thread Federico Beffa
On Mon, Oct 6, 2014 at 11:32 PM, Ludovic Courtès l...@gnu.org wrote:
 Excellent!  Would be nice to check Evince and EOG, which were known to
 have this kind of problem.

I've checked Evince and it works fine. I couldn't find EOG. What's the
name of the package?

 Great.  The strategy looks good to me.  Mark had concerns about the
 wrapper approach in general, but IMO it’s OK here.  Thoughts?

Yes, I've read Mark's comments. I'm not ignoring his comments. I just
do not have a better idea.

Attached an updated patch. If it is fine, I will update the
documentation in a separate patch to follow.

Regards,
Fede
From 3bcb914162de1950ff927bc44cb91ea20bd5c1d4 Mon Sep 17 00:00:00 2001
From: Federico Beffa be...@fbengineering.ch
Date: Mon, 6 Oct 2014 15:49:29 +0200
Subject: [PATCH] glib-or-gtk-build-system: New files

* guix/build-system/glib-or-gtk.scm, guix/build/glib-or-gtk-build-system.scm:
  Add initial version of a new build-system called 'glib-or-gtk-build-system'.
---
 guix/build-system/glib-or-gtk.scm   | 195 
 guix/build/glib-or-gtk-build-system.scm | 130 +
 2 files changed, 325 insertions(+)
 create mode 100644 guix/build-system/glib-or-gtk.scm
 create mode 100644 guix/build/glib-or-gtk-build-system.scm

diff --git a/guix/build-system/glib-or-gtk.scm b/guix/build-system/glib-or-gtk.scm
new file mode 100644
index 000..8abdf9f
--- /dev/null
+++ b/guix/build-system/glib-or-gtk.scm
@@ -0,0 +1,195 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013, 2014 Ludovic Courtès l...@gnu.org
+;;; Copyright © 2013 Cyril Roelandt tipec...@gmail.com
+;;; Copyright © 2014 Federico Beffa be...@fbengineering.ch
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see http://www.gnu.org/licenses/.
+
+(define-module (guix build-system glib-or-gtk)
+  #:use-module (guix store)
+  #:use-module (guix utils)
+  #:use-module (guix derivations)
+  #:use-module (guix build-system)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix packages)
+  #:use-module (ice-9 match)
+  #:export (glib-or-gtk-build
+glib-or-gtk-build-system))
+
+;; Commentary:
+;;
+;; This build system is an extension of the 'gnu-build-system'.  It
+;; accomodates the needs of applications making use of glib or gtk+ (with or
+;; to be interpreted in the mathematical sense).  This is achieved by adding
+;; two phases run after the 'install' phase:
+;;
+;; 'glib-or-gtk-wrap' phase:
+;; 
+;; a) This phase looks for GSettings schemas by verifying the existence of
+;; path datadir/glib-2.0/schemas in all input packages.  If the path is
+;; found in any package, then all programs in out/bin are wrapped in scripts
+;; where the environment variable XDG_DATA_DIRS is set and points to the
+;; list of found schemas directories.
+;;
+;; b) Looks for the existence of libdir/gtk-3.0 directories in all input
+;; packages.  If any is found, then the environment variable GTK_PATH is
+;; suitably set and added to the wrappers.  The variable GTK_PATH has been
+;; preferred over GTK_EXE_PREFIX because the latter can only point to a
+;; single directory, while we may need to point to several ones.
+;;
+;; 'glib-or-gtk-compile-schemas' phase:
+;; 
+;; Looks for the presence of out/share/glib-2.0/schemas.  If that directory
+;; exists and does not include a file named gschemas.compiled, then
+;; glib-compile-schemas is run in that directory.
+;;
+;; Code:
+
+(define %default-modules
+  ;; Build-side modules made available in the build environment.
+  '((guix build glib-or-gtk-build-system)
+(guix build utils)))
+
+(define %default-imported-modules
+  ;; Build-side modules imported and used by default.
+  '((guix build gnu-build-system)
+(guix build glib-or-gtk-build-system)
+(guix build utils)))
+
+(define (default-glib)
+  Return the default glib package from which we use
+\glib-compile-schemas\.
+  ;; Do not use `@' to avoid introducing circular dependencies.
+  (let ((module (resolve-interface '(gnu packages glib
+(module-ref module 'glib)))
+
+(define* (lower name
+#:key source inputs native-inputs outputs system target
+(glib (default-glib)) (implicit-inputs? #t)
+(strip-binaries? #t)
+#:allow-other-keys
+#:rest arguments)
+  Return a bag for NAME.
+  (define 

Re: [PATCH] glib-or-gtk-build-system: new build-system

2014-10-08 Thread Federico Beffa
On Wed, Oct 8, 2014 at 9:28 AM, Federico Beffa be...@ieee.org wrote:
 Attached an updated patch. If it is fine, I will update the
 documentation in a separate patch to follow.

I forgot to mention that I'm not sure how to update gnu-system.am. I
looked for cmake-build-system as an example, but it is not mentioned
in the file.

Regards,
Fede



Re: [PATCH] glib-or-gtk-build-system: new build-system

2014-10-08 Thread Ludovic Courtès
Federico Beffa be...@ieee.org skribis:

 On Wed, Oct 8, 2014 at 9:28 AM, Federico Beffa be...@ieee.org wrote:
 Attached an updated patch. If it is fine, I will update the
 documentation in a separate patch to follow.

 I forgot to mention that I'm not sure how to update gnu-system.am. I
 looked for cmake-build-system as an example, but it is not mentioned
 in the file.

It’s actually in Makefile.am.  gnu-system.am is for things under gnu/.

Ludo’.



Re: [PATCH] glib-or-gtk-build-system: new build-system

2014-10-08 Thread Ludovic Courtès
Federico Beffa be...@ieee.org skribis:

 On Mon, Oct 6, 2014 at 11:32 PM, Ludovic Courtès l...@gnu.org wrote:
 Excellent!  Would be nice to check Evince and EOG, which were known to
 have this kind of problem.

 I've checked Evince and it works fine.

Great.

 I couldn't find EOG. What's the name of the package?

I remember Cyril mentioned it in a discussion, but it’s not in the tree,
so forget about it.

 Attached an updated patch. If it is fine, I will update the
 documentation in a separate patch to follow.

OK.

 From 3bcb914162de1950ff927bc44cb91ea20bd5c1d4 Mon Sep 17 00:00:00 2001
 From: Federico Beffa be...@fbengineering.ch
 Date: Mon, 6 Oct 2014 15:49:29 +0200
 Subject: [PATCH] glib-or-gtk-build-system: New files

 * guix/build-system/glib-or-gtk.scm, guix/build/glib-or-gtk-build-system.scm:
   Add initial version of a new build-system called 'glib-or-gtk-build-system'.

I’ve pushed the patch after adding the files to Makefile.am and tweaking
the commit log (I realize I wasn’t clear: “New files” is for the body of
the commit log, whereas the subject line is typically a sentence.)

Thanks!

Ludo’.



Re: [PATCH] glib-or-gtk-build-system: new build-system

2014-10-08 Thread Federico Beffa
On Wed, Oct 8, 2014 at 12:04 PM, Ludovic Courtès l...@gnu.org wrote:
 Federico Beffa be...@ieee.org skribis:
 I've checked Evince and it works fine.


By the way, note that when started, it complains about missing
libcanberra as does emacs.
The problem is solved by adding libcanberra as an input to both programs.
Maybe libcanberra should be made a propagating-input of some lower
level library?

Also, as emacs, it give the warning

GLib-GIO-Message: Using the 'memory' GSettings backend.  Your settings
will not be saved or shared with other applications.

I believe this is because they can't find dconf. Any particular reason
for not being in gnome.scm?

Regards,
Fede



Re: [PATCH] glib-or-gtk-build-system: new build-system

2014-10-06 Thread Ludovic Courtès
Federico Beffa be...@ieee.org skribis:

 Please find attached a new build system for applications making use of
 glib or gtk+.
 It uses wrappers as previously discussed on this list.

 I've successfully tested it with three packages: emacs, libcanberra and gtk+.

Excellent!  Would be nice to check Evince and EOG, which were known to
have this kind of problem.

 Currently it is implemented as a separate build-system inheriting from
 the gnu-build-system. Essentially it adds 2 phases to the latter.
 IMO, it would make sense to make those 2 phases part of the
 gnu-build-system and enable them with the help of flags.

Great.  The strategy looks good to me.  Mark had concerns about the
wrapper approach in general, but IMO it’s OK here.  Thoughts?

Some mostly cosmetic comments:

 From dcb7dc451eac21e24e6972fa4c1a4524a7658af0 Mon Sep 17 00:00:00 2001
 From: Federico Beffa be...@fbengineering.ch
 Date: Mon, 6 Oct 2014 15:49:29 +0200
 Subject: [PATCH] glib-or-gtk-build-system: new build-system

 * guix/build-system/glib-or-gtk.scm, guix/build/glib-or-gtk-build-system.scm:
   Add initial version of a new build-system called 'glib-or-gtk-build-system'.

Just “New files.”  Also, make sure to add them to gnu-system.am and to
mention it in the log.

 +(define* (glib-or-gtk-build store name source inputs
 + #:key (guile #f)
 + (outputs '(out))
 + (search-paths '())
 + (configure-flags ''())
 + (make-flags ''())
 + (glib (default-glib))

Please align parameters with ‘store’.

This will have to be adjusted to the new “bags” interface.  Namely, the
part that adds inputs must be moved to a new procedure (called ‘lower’
in the other build systems), and ‘glib-or-gtk-build’ will be simplified
accordingly.

It should be simple to see what needs to be changed by looking at the
other build systems, but let me know if you have any questions.

 +(define (rel-path-exists? path rel-path)
 +  (directory-exists? (string-append path rel-path)))

Rather (subdirectory-exists? parent sub-directory).
(By convention GNU software uses “file names” or “directory names” here,
whereas “path” is used for search paths.)

 +(define (gtk-module-dirs inputs)
 +  Check for the existence of \libdir/gtk-v.0\ in INPUTS.  Return a list
 +with all found pathes.  If none is found return an empty list.

s/dirs/directories/ and s/pathes/directories/

No need for “If none is found...”, because it’s just a special case.

 +(define (glib-schemas input prev)
 +  (let* ((in (match input
 +   ((_ . dir) dir)
 +   (_ )))
 + (datadir (string-append in /share)))
 +(if (rel-path-exists? datadir /glib-2.0/schemas)
 +(cons datadir prev)
 +prev)))

I think this should be moved into ‘schemas-directories’.

 +(define (schemas-dirs inputs)
 +  Check for the existence of \datadir/glib-2.0/schemas\ in INPUTS.  Return
 +a list with all found pathes.  If none is found return an empty list.

Rather ‘schemas-directories’, and also “directories” instead of “pathes”.

 +(define* (glib-or-gtk-build #:key inputs (phases %standard-phases)
 +  #:allow-other-keys #:rest args)

Please align #:allow-other-keys with #:key.

Lastly, could add an entry in guix.texi under “Build Systems”, ideally
with references (@uref) to the GSettings and GTK+ module documentation?

Could you post an updated patch?

Thanks for all this!

Ludo’.