about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/libraries/gtk
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2019-09-11 15:24:55 +0000
committerAlyssa Ross <hi@alyssa.is>2019-09-16 22:14:45 +0000
commit89c4dccbd5f33f71808d4b1baafe619696af1162 (patch)
treefb1b8d3a2f171164a05d404ab2340cfb1a9d3e21 /nixpkgs/pkgs/development/libraries/gtk
parent8920a0e4d962a919238bab69ddc607d7f3396f70 (diff)
parente19054ab3cd5b7cc9a01d0efc71c8fe310541065 (diff)
downloadnixlib-89c4dccbd5f33f71808d4b1baafe619696af1162.tar
nixlib-89c4dccbd5f33f71808d4b1baafe619696af1162.tar.gz
nixlib-89c4dccbd5f33f71808d4b1baafe619696af1162.tar.bz2
nixlib-89c4dccbd5f33f71808d4b1baafe619696af1162.tar.lz
nixlib-89c4dccbd5f33f71808d4b1baafe619696af1162.tar.xz
nixlib-89c4dccbd5f33f71808d4b1baafe619696af1162.tar.zst
nixlib-89c4dccbd5f33f71808d4b1baafe619696af1162.zip
Merge commit 'e19054ab3cd5b7cc9a01d0efc71c8fe310541065'
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/gtk')
-rw-r--r--nixpkgs/pkgs/development/libraries/gtk/01-build-Fix-path-handling-in-pkgconfig.patch30
-rw-r--r--nixpkgs/pkgs/development/libraries/gtk/2.0-darwin-x11.patch22
-rw-r--r--nixpkgs/pkgs/development/libraries/gtk/2.0-immodules.cache.patch27
-rw-r--r--nixpkgs/pkgs/development/libraries/gtk/2.x.nix96
-rw-r--r--nixpkgs/pkgs/development/libraries/gtk/3.0-darwin-x11.patch28
-rw-r--r--nixpkgs/pkgs/development/libraries/gtk/3.0-immodules.cache.patch27
-rw-r--r--nixpkgs/pkgs/development/libraries/gtk/3.x.nix198
-rw-r--r--nixpkgs/pkgs/development/libraries/gtk/gtk2-theme-paths.patch40
-rw-r--r--nixpkgs/pkgs/development/libraries/gtk/gtk3-setup-hook.sh10
-rw-r--r--nixpkgs/pkgs/development/libraries/gtk/setup-hook.sh10
10 files changed, 488 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/gtk/01-build-Fix-path-handling-in-pkgconfig.patch b/nixpkgs/pkgs/development/libraries/gtk/01-build-Fix-path-handling-in-pkgconfig.patch
new file mode 100644
index 000000000000..ec69a12514fe
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gtk/01-build-Fix-path-handling-in-pkgconfig.patch
@@ -0,0 +1,30 @@
+From 7b692e618c4183a51af3d3b0037f106c4fec2355 Mon Sep 17 00:00:00 2001
+From: worldofpeace <worldofpeace@protonmail.ch>
+Date: Fri, 19 Jul 2019 13:32:57 -0400
+Subject: [PATCH] build: Fix path handling in pkgconfig
+
+---
+ meson.build | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 36913b3f04..161b378ba5 100644
+--- a/meson.build
++++ b/meson.build
+@@ -834,10 +834,10 @@ configure_file(input: 'config.h.meson',
+ # pkg-config files - bit of a mess all of this
+ pkgconf = configuration_data()
+ 
+-pkgconf.set('prefix', get_option('prefix'))
++pkgconf.set('prefix', gtk_prefix)
+ pkgconf.set('exec_prefix', '${prefix}')
+-pkgconf.set('libdir', '${prefix}/@0@'.format(get_option('libdir')))
+-pkgconf.set('includedir', '${prefix}/@0@'.format(get_option('includedir')))
++pkgconf.set('libdir', gtk_libdir)
++pkgconf.set('includedir', join_paths('${prefix}', gtk_includedir))
+ pkgconf.set('GTK_API_VERSION', gtk_api_version)
+ pkgconf.set('VERSION', meson.project_version())
+ pkgconf.set('GTK_BINARY_VERSION', gtk_binary_version)
+-- 
+2.22.0
+
diff --git a/nixpkgs/pkgs/development/libraries/gtk/2.0-darwin-x11.patch b/nixpkgs/pkgs/development/libraries/gtk/2.0-darwin-x11.patch
new file mode 100644
index 000000000000..9725cfb84260
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gtk/2.0-darwin-x11.patch
@@ -0,0 +1,22 @@
+--- a/gdk/x11/gdkapplaunchcontext-x11.c
++++ b/gdk/x11/gdkapplaunchcontext-x11.c
+@@ -26,7 +26,6 @@
+ #include <unistd.h>
+ 
+ #include <glib.h>
+-#include <gio/gdesktopappinfo.h>
+ 
+ #include "gdkx.h"
+ #include "gdkapplaunchcontext.h"
+@@ -363,10 +362,7 @@
+   else
+     workspace_str = NULL;
+ 
+-  if (G_IS_DESKTOP_APP_INFO (info))
+-    application_id = g_desktop_app_info_get_filename (G_DESKTOP_APP_INFO (info));
+-  else
+-    application_id = NULL;
++  application_id = NULL;
+ 
+   startup_id = g_strdup_printf ("%s-%lu-%s-%s-%d_TIME%lu",
+                                 g_get_prgname (),
diff --git a/nixpkgs/pkgs/development/libraries/gtk/2.0-immodules.cache.patch b/nixpkgs/pkgs/development/libraries/gtk/2.0-immodules.cache.patch
new file mode 100644
index 000000000000..1b8231756e71
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gtk/2.0-immodules.cache.patch
@@ -0,0 +1,27 @@
+--- a/gtk/gtkrc.c	2014-09-30 05:02:17.000000000 +0900
++++ b/gtk/gtkrc.c	2016-04-09 17:39:51.363288355 +0900
+@@ -445,5 +445,23 @@
+   if (var)
+     result = g_strdup (var);
+ 
++  // check NIX_PROFILES paths.
++  const gchar *nixProfilesEnv = g_getenv ("NIX_PROFILES");
++  gchar *cachePath;
++  guint i;
++
++  if(nixProfilesEnv && !result){
++    gchar **paths = g_strsplit(nixProfilesEnv, " ", -1);
++    for (i = 0; paths[i] != NULL; i++){
++      cachePath = g_build_filename(paths[i], "etc", "gtk-2.0", "immodules.cache", NULL);
++      if( g_file_test( cachePath, G_FILE_TEST_EXISTS) ){
++        if(result) g_free(result);
++        result = g_strdup(cachePath);
++      }
++      g_free(cachePath);
++    }
++    g_strfreev(paths);
++  }
++
+   if (!result)
+     {
+
diff --git a/nixpkgs/pkgs/development/libraries/gtk/2.x.nix b/nixpkgs/pkgs/development/libraries/gtk/2.x.nix
new file mode 100644
index 000000000000..f1a53390467a
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gtk/2.x.nix
@@ -0,0 +1,96 @@
+{ config, stdenv, fetchurl, pkgconfig, gettext, glib, atk, pango, cairo, perl, xorg
+, gdk-pixbuf, xlibsWrapper, gobject-introspection
+, xineramaSupport ? stdenv.isLinux
+, cupsSupport ? config.gtk2.cups or stdenv.isLinux, cups ? null
+, gdktarget ? if stdenv.isDarwin then "quartz" else "x11"
+, AppKit, Cocoa
+, fetchpatch
+}:
+
+assert xineramaSupport -> xorg.libXinerama != null;
+assert cupsSupport -> cups != null;
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  name = "gtk+-2.24.32";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gtk+/2.24/${name}.tar.xz";
+    sha256 = "b6c8a93ddda5eabe3bfee1eb39636c9a03d2a56c7b62828b359bf197943c582e";
+  };
+
+  outputs = [ "out" "dev" "devdoc" ];
+  outputBin = "dev";
+
+  enableParallelBuilding = true;
+
+  setupHook = ./setup-hook.sh;
+
+  nativeBuildInputs = [ setupHook perl pkgconfig gettext gobject-introspection ];
+
+  patches = [
+    ./2.0-immodules.cache.patch
+    ./gtk2-theme-paths.patch
+  ] ++ optionals stdenv.isDarwin [
+    (fetchpatch {
+      url = https://bug557780.bugzilla-attachments.gnome.org/attachment.cgi?id=306776;
+      sha256 = "0sp8f1r5c4j2nlnbqgv7s7nxa4cfwigvm033hvhb1ld652pjag4r";
+    })
+    ./2.0-darwin-x11.patch
+  ];
+
+  propagatedBuildInputs = with xorg;
+    [ glib cairo pango gdk-pixbuf atk ]
+    ++ optionals (stdenv.isLinux || stdenv.isDarwin) [
+         libXrandr libXrender libXcomposite libXi libXcursor
+       ]
+    ++ optionals stdenv.isDarwin [ xlibsWrapper libXdamage ]
+    ++ optional xineramaSupport libXinerama
+    ++ optionals cupsSupport [ cups ]
+    ++ optionals stdenv.isDarwin [ AppKit Cocoa ];
+
+  configureFlags = [
+    "--with-gdktarget=${gdktarget}"
+    "--with-xinput=yes"
+  ] ++ optionals stdenv.isDarwin [
+    "--disable-glibtest"
+    "--disable-introspection"
+    "--disable-visibility"
+  ];
+
+  doCheck = false; # needs X11
+
+  postInstall = ''
+    moveToOutput share/gtk-2.0/demo "$devdoc"
+    # The updater is needed for nixos env and it's tiny.
+    moveToOutput bin/gtk-update-icon-cache "$out"
+  '';
+
+  passthru = {
+    gtkExeEnvPostBuild = ''
+      rm $out/lib/gtk-2.0/2.10.0/immodules.cache
+      $out/bin/gtk-query-immodules-2.0 $out/lib/gtk-2.0/2.10.0/immodules/*.so > $out/lib/gtk-2.0/2.10.0/immodules.cache
+    ''; # workaround for bug of nix-mode for Emacs */ '';
+    inherit gdktarget;
+  };
+
+  meta = {
+    description = "A multi-platform toolkit for creating graphical user interfaces";
+    homepage    = https://www.gtk.org/;
+    license     = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ lovek323 raskin ];
+    platforms   = platforms.all;
+
+    longDescription = ''
+      GTK is a highly usable, feature rich toolkit for creating
+      graphical user interfaces which boasts cross platform
+      compatibility and an easy to use API.  GTK it is written in C,
+      but has bindings to many other popular programming languages
+      such as C++, Python and C# among others.  GTK is licensed
+      under the GNU LGPL 2.1 allowing development of both free and
+      proprietary software with GTK without any license fees or
+      royalties.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/gtk/3.0-darwin-x11.patch b/nixpkgs/pkgs/development/libraries/gtk/3.0-darwin-x11.patch
new file mode 100644
index 000000000000..86631634b5bd
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gtk/3.0-darwin-x11.patch
@@ -0,0 +1,28 @@
+--- a/gdk/x11/gdkapplaunchcontext-x11.c
++++ b/gdk/x11/gdkapplaunchcontext-x11.c
+@@ -27,7 +27,9 @@
+ #include "gdkprivate-x11.h"
+ 
+ #include <glib.h>
++#if defined(HAVE_GIO_UNIX) && !defined(__APPLE__)
+ #include <gio/gdesktopappinfo.h>
++#endif
+ 
+ #include <string.h>
+ #include <unistd.h>
+@@ -352,10 +354,15 @@
+   else
+     workspace_str = NULL;
+ 
++#if defined(HAVE_GIO_UNIX) && !defined(__APPLE__)
+   if (G_IS_DESKTOP_APP_INFO (info))
+     application_id = g_desktop_app_info_get_filename (G_DESKTOP_APP_INFO (info));
+   else
+     application_id = NULL;
++#else
++  application_id = NULL;
++#warning Please add support for creating AppInfo from id for your OS
++#endif
+ 
+   startup_id = g_strdup_printf ("%s-%lu-%s-%s-%d_TIME%lu",
+                                 g_get_prgname (),
diff --git a/nixpkgs/pkgs/development/libraries/gtk/3.0-immodules.cache.patch b/nixpkgs/pkgs/development/libraries/gtk/3.0-immodules.cache.patch
new file mode 100644
index 000000000000..bbe5f28dbd3e
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gtk/3.0-immodules.cache.patch
@@ -0,0 +1,27 @@
+--- a/gtk/deprecated/gtkrc.c	2016-04-02 18:43:08.401663112 +0900
++++ b/gtk/deprecated/gtkrc.c	2016-04-02 18:29:19.927608592 +0900
+@@ -774,5 +774,23 @@
+   if (var)
+     result = g_strdup (var);
+ 
++  // check NIX_PROFILES paths.
++  const gchar *nixProfilesEnv = g_getenv ("NIX_PROFILES");
++  gchar *cachePath;
++  guint i;
++
++  if(nixProfilesEnv && !result){
++    gchar **paths = g_strsplit(nixProfilesEnv, " ", -1);
++    for (i = 0; paths[i] != NULL; i++){
++      cachePath = g_build_filename(paths[i], "etc", "gtk-3.0", "immodules.cache", NULL);
++      if( g_file_test( cachePath, G_FILE_TEST_EXISTS) ){
++        if(result) g_free(result);
++        result = g_strdup(cachePath);
++      }
++      g_free(cachePath);
++    }
++    g_strfreev(paths);
++  }
++
+   if (!result)
+     {
+ 
diff --git a/nixpkgs/pkgs/development/libraries/gtk/3.x.nix b/nixpkgs/pkgs/development/libraries/gtk/3.x.nix
new file mode 100644
index 000000000000..aee97d9bad00
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gtk/3.x.nix
@@ -0,0 +1,198 @@
+{ stdenv
+, fetchurl
+, fetchpatch
+, pkgconfig
+, gettext
+, meson
+, ninja
+, python3
+, makeWrapper
+, shared-mime-info
+, isocodes
+, expat
+, glib
+, cairo
+, pango
+, gdk-pixbuf
+, atk
+, at-spi2-atk
+, gobject-introspection
+, fribidi
+, xorg
+, epoxy
+, json-glib
+, libxkbcommon
+, gmp
+, gnome3
+, hicolor-icon-theme
+, gsettings-desktop-schemas
+, sassc
+, x11Support ? stdenv.isLinux
+, waylandSupport ? stdenv.isLinux
+, mesa
+, wayland
+, wayland-protocols
+, xineramaSupport ? stdenv.isLinux
+, cupsSupport ? stdenv.isLinux
+, cups ? null
+, AppKit
+, Cocoa
+}:
+
+assert cupsSupport -> cups != null;
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "gtk+3";
+  version = "3.24.10";
+
+  outputs = [ "out" "dev" ];
+  outputBin = "dev";
+
+  setupHook = ./gtk3-setup-hook.sh;
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gtk+/${stdenv.lib.versions.majorMinor version}/gtk+-${version}.tar.xz";
+    sha256 = "00qvq1r96ikdalv7xzgng1kad9i0rcahqk01gwhxl3xrw83z3a1m";
+  };
+
+  patches = [
+    ./3.0-immodules.cache.patch
+    (fetchpatch {
+      name = "Xft-setting-fallback-compute-DPI-properly.patch";
+      url = "https://bug757142.bugzilla-attachments.gnome.org/attachment.cgi?id=344123";
+      sha256 = "0g6fhqcv8spfy3mfmxpyji93k8d4p4q4fz1v9a1c1cgcwkz41d7p";
+    })
+    # https://gitlab.gnome.org/GNOME/gtk/merge_requests/1002
+    ./01-build-Fix-path-handling-in-pkgconfig.patch
+  ] ++ optionals stdenv.isDarwin [
+    # X11 module requires <gio/gdesktopappinfo.h> which is not installed on Darwin
+    # let’s drop that dependency in similar way to how other parts of the library do it
+    # e.g. https://gitlab.gnome.org/GNOME/gtk/blob/3.24.4/gtk/gtk-launch.c#L31-33
+    ./3.0-darwin-x11.patch
+  ];
+
+  mesonFlags = [
+    "-Dtests=false"
+  ];
+
+  # These are the defines that'd you'd get with --enable-debug=minimum (default).
+  # See: https://developer.gnome.org/gtk3/stable/gtk-building.html#extra-configuration-options
+  NIX_CFLAGS_COMPILE = [
+    "-DG_ENABLE_DEBUG"
+    "-DG_DISABLE_CAST_CHECKS"
+  ];
+
+  postPatch = ''
+    files=(
+      build-aux/meson/post-install.py
+      demos/gtk-demo/geninclude.py
+      gdk/broadway/gen-c-array.py
+      gdk/gen-gdk-gresources-xml.py
+      gtk/cursor/dnd-copy.png
+      gtk/gen-gtk-gresources-xml.py
+      gtk/gen-rc.py
+      gtk/gentypefuncs.py
+    )
+
+    chmod +x ''${files[@]}
+    patchShebangs ''${files[@]}
+  '';
+
+  nativeBuildInputs = [
+    gettext
+    gobject-introspection
+    hicolor-icon-theme # setup-hook
+    makeWrapper
+    meson
+    ninja
+    pkgconfig
+    python3
+    sassc
+    setupHook
+  ];
+
+  buildInputs = [
+    libxkbcommon
+    epoxy
+    json-glib
+    isocodes
+  ]
+  ++ optional stdenv.isDarwin AppKit
+  ;
+
+  propagatedBuildInputs = with xorg; [
+    at-spi2-atk
+    atk
+    cairo
+    expat
+    fribidi
+    gdk-pixbuf
+    glib
+    gsettings-desktop-schemas
+    libICE
+    libSM
+    libXcomposite
+    libXcursor
+    libXi
+    libXrandr
+    libXrender
+    pango
+  ]
+  ++ optional stdenv.isDarwin Cocoa  # explicitly propagated, always needed
+  ++ optionals waylandSupport [ mesa wayland wayland-protocols ]
+  ++ optional xineramaSupport libXinerama
+  ++ optional cupsSupport cups
+  ;
+  #TODO: colord?
+
+  doCheck = false; # needs X11
+
+  postInstall = optionalString (!stdenv.isDarwin) ''
+    # The updater is needed for nixos env and it's tiny.
+    moveToOutput bin/gtk-update-icon-cache "$out"
+    # Launcher
+    moveToOutput bin/gtk-launch "$out"
+
+    # TODO: patch glib directly
+    for f in $dev/bin/gtk-encode-symbolic-svg; do
+      wrapProgram $f --prefix XDG_DATA_DIRS : "${shared-mime-info}/share"
+    done
+  '';
+
+  # Wrap demos
+  postFixup =  optionalString (!stdenv.isDarwin) ''
+    demos=(gtk3-demo gtk3-demo-application gtk3-icon-browser gtk3-widget-factory)
+
+    for program in ''${demos[@]}; do
+      wrapProgram $dev/bin/$program \
+        --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH:$out/share/gsettings-schemas/${pname}-${version}"
+    done
+  '';
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = "gtk+";
+      attrPath = "gtk3";
+    };
+  };
+
+  meta = {
+    description = "A multi-platform toolkit for creating graphical user interfaces";
+    longDescription = ''
+      GTK is a highly usable, feature rich toolkit for creating
+      graphical user interfaces which boasts cross platform
+      compatibility and an easy to use API.  GTK it is written in C,
+      but has bindings to many other popular programming languages
+      such as C++, Python and C# among others.  GTK is licensed
+      under the GNU LGPL 2.1 allowing development of both free and
+      proprietary software with GTK without any license fees or
+      royalties.
+    '';
+    homepage = https://www.gtk.org/;
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ raskin vcunat lethalman ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/gtk/gtk2-theme-paths.patch b/nixpkgs/pkgs/development/libraries/gtk/gtk2-theme-paths.patch
new file mode 100644
index 000000000000..edd69b078076
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gtk/gtk2-theme-paths.patch
@@ -0,0 +1,40 @@
+Subject: [PATCHv2] gtk: Patch GTK+ to look for themes in profiles.
+To: guix-devel@gnu.org
+Date: Sun, 13 Mar 2016 15:17:37 +1100
+Url: https://lists.gnu.org/archive/html/guix-devel/2016-03/msg00492.html
+
+diff -Naur gtk+-2.24.28.new/gtk/gtkrc.c gtk+-2.24.28/gtk/gtkrc.c
+--- gtk+-2.24.28.new/gtk/gtkrc.c	2016-03-13 10:31:14.413644362 +1100
++++ gtk+-2.24.28/gtk/gtkrc.c	2016-03-13 12:51:34.723398423 +1100
+@@ -808,6 +808,8 @@
+   gchar *path = NULL;
+   const gchar *home_dir;
+   gchar *subpath;
++  const gchar * const *xdg_data_dirs;
++  gint i;
+ 
+   if (type)
+     subpath = g_strconcat ("gtk-2.0-", type,
+@@ -830,6 +832,22 @@
+     }
+ 
+   if (!path)
++    {
++      xdg_data_dirs = g_get_system_data_dirs ();
++      for (i = 0; xdg_data_dirs[i]; i++)
++        {
++          path = g_build_filename (xdg_data_dirs[i], "themes", name, subpath, NULL);
++          if (g_file_test (path, G_FILE_TEST_EXISTS))
++            break;
++          else
++            {
++              g_free (path);
++              path = NULL;
++            }
++        }
++    }
++
++  if (!path)
+     {
+       gchar *theme_dir = gtk_rc_get_theme_dir ();
+       path = g_build_filename (theme_dir, name, subpath, NULL);
diff --git a/nixpkgs/pkgs/development/libraries/gtk/gtk3-setup-hook.sh b/nixpkgs/pkgs/development/libraries/gtk/gtk3-setup-hook.sh
new file mode 100644
index 000000000000..bddeb2d25d50
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gtk/gtk3-setup-hook.sh
@@ -0,0 +1,10 @@
+fixupOutputHooks+=(_gtk3CleanComments)
+
+# Clean comments that link to generator of the file
+_gtk3CleanComments() {
+    local f="$prefix/lib/gtk-3.0/3.0.0/immodules.cache"
+    if [ -f "$f" ]; then
+        sed 's|Created by .*bin/gtk-query-|Created by bin/gtk-query-|' -i "$f"
+    fi
+}
+
diff --git a/nixpkgs/pkgs/development/libraries/gtk/setup-hook.sh b/nixpkgs/pkgs/development/libraries/gtk/setup-hook.sh
new file mode 100644
index 000000000000..c2b0ab502db7
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gtk/setup-hook.sh
@@ -0,0 +1,10 @@
+fixupOutputHooks+=(_gtk2CleanComments)
+
+# Clean comments that link to generator of the file
+_gtk2CleanComments() {
+    local f="$prefix/lib/gtk-2.0/2.10.0/immodules.cache"
+    if [ -f "$f" ]; then
+        sed 's|Created by .*bin/gtk-query-|Created by bin/gtk-query-|' -i "$f"
+    fi
+}
+