Hello community, here is the log from the commit of package gnome-session for openSUSE:12.1 checked in at 2011-10-25 15:55:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:12.1/gnome-session (Old) and /work/SRC/openSUSE:12.1/.gnome-session.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gnome-session", Maintainer is "gnome-maintain...@suse.de" Changes: -------- --- /work/SRC/openSUSE:12.1/gnome-session/gnome-session.changes 2011-10-24 12:46:41.000000000 +0200 +++ /work/SRC/openSUSE:12.1/.gnome-session.new/gnome-session.changes 2011-10-25 15:55:39.000000000 +0200 @@ -1,0 +2,10 @@ +Wed Oct 19 11:18:10 UTC 2011 - vu...@opensuse.org + +- Add gnome-session-gnome.fallback-boot-arg.patch: let users be + able to pass gnome.fallback=0/1 argument at boot to choose + fallback/non-fallback mode. +- Add gnome-session-blacklist-hardware.patch: use an external file + to easily blacklist/whitelist some hardware when checking if + we have 3d support. + +------------------------------------------------------------------- New: ---- gnome-session-blacklist-hardware.patch gnome-session-gnome.fallback-boot-arg.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gnome-session.spec ++++++ --- /var/tmp/diff_new_pack.0TSvJQ/_old 2011-10-25 15:55:40.000000000 +0200 +++ /var/tmp/diff_new_pack.0TSvJQ/_new 2011-10-25 15:55:40.000000000 +0200 @@ -37,6 +37,10 @@ Patch2: gnome-session-wm-switch.patch # PATCH-NEEDS-REBASE gnome-session-bgo507101-tile-ui.patch bgo507101 vu...@novell.com -- Tile UI for logout dialog. (Was: PATCH-FIX-UPSTREAM) Patch3: gnome-session-bgo507101-tile-ui.patch +# PATCH-FEATURE-UPSTREAM gnome-session-gnome.fallback-boot-arg.patch vu...@opensuse.org -- Let users be able to pass gnome.fallback at boot to choose fallback/non-fallback +Patch4: gnome-session-gnome.fallback-boot-arg.patch +# PATCH-FEATURE-UPSTREAM gnome-session-blacklist-hardware.patch bgo#644325 vu...@opensuse.org -- Use an external file to easily blacklist/whitelist some hardware +Patch5: gnome-session-blacklist-hardware.patch BuildRequires: fdupes BuildRequires: gnome-common BuildRequires: gnome-patch-translation @@ -137,6 +141,8 @@ #%patch2 -p1 # needs-rebase #%patch3 -p0 +%patch4 -p1 +%patch5 -p1 # gnome-patch-translation-update %build @@ -215,9 +221,6 @@ %doc AUTHORS COPYING ChangeLog NEWS README %{_bindir}/gnome-session %{_bindir}/gnome-session-quit -# Helper for the session definitions, to know if hardware is accelerated -%{_libexecdir}/gnome-session-check-accelerated -%{_libexecdir}/gnome-session-check-accelerated-helper %{_datadir}/GConf/gsettings/gnome-session.convert %{_datadir}/glib-2.0/schemas/org.gnome.SessionManager.gschema.xml %dir %{_datadir}/gnome-session @@ -226,6 +229,10 @@ %{_datadir}/icons/hicolor/scalable/apps/gnome-session-sleep.svg %doc %{_mandir}/man1/gnome-session.1* %doc %{_mandir}/man1/gnome-session-quit.1* +# Helper for the session definitions, to know if hardware is accelerated +%{_libexecdir}/gnome-session-check-accelerated +%{_libexecdir}/gnome-session-check-accelerated-helper +%{_datadir}/gnome-session/hardware-compatibility %files lang -f %{name}-3.0.lang ++++++ gnome-session-blacklist-hardware.patch ++++++ >From 50b121a7737a13bde1195d1aea215ff8789f65fd Mon Sep 17 00:00:00 2001 From: Vincent Untz <vu...@gnome.org> Date: Wed, 19 Oct 2011 14:27:25 +0200 Subject: [PATCH 1/2] tools: Use whitelist/blacklist regexps when evaluating renderer The regexps are in a file that we also ship. https://bugzilla.gnome.org/show_bug.cgi?id=644325 --- data/Makefile.am | 5 +- data/hardware-compatibility | 20 +++++ tools/Makefile.am | 3 +- tools/gnome-session-check-accelerated-helper.c | 95 ++++++++++++++++++++++-- 4 files changed, 115 insertions(+), 8 deletions(-) create mode 100644 data/hardware-compatibility diff --git a/data/Makefile.am b/data/Makefile.am index cdd3201..6f0fb33 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -5,6 +5,9 @@ ui_DATA = \ session-properties.ui \ gsm-inhibit-dialog.ui +hwcompatdir = $(pkgdatadir) +hwcompat_DATA = hardware-compatibility + xsessiondir = $(datadir)/xsessions xsession_in_files = gnome.desktop.in xsession_DATA = $(xsession_in_files:.desktop.in=.desktop) @@ -39,7 +42,7 @@ EXTRA_DIST = \ $(session_in_in_files) \ $(gsettings_SCHEMAS:.xml=.xml.in) \ $(ui_DATA) \ - $(pixmap_DATA_dist) + $(hwcompat_DATA) CLEANFILES = \ $(gsettings_SCHEMAS) \ diff --git a/data/hardware-compatibility b/data/hardware-compatibility new file mode 100644 index 0000000..b311898 --- /dev/null +++ b/data/hardware-compatibility @@ -0,0 +1,20 @@ +## +## This file contains a list of blacklist/whitelist regular expressions for +## renderer strings. +## +## The regular expressions are case-insensitive POSIX Extended Regular +## Expressions. See regex(7) for details. +## +## Syntax: +## - Comment lines start with '#' +## - Lines starting with '+' are whitelisting. +## - Lines starting with '-' are blacklisting. +## - Lines not starting with '#', '+', '-' are ignored. +## + +# Old Mesa software GL renderer +-software rasterizer + +# Gallium has softpipe and llvmpipe +-softpipe +-llvmpipe diff --git a/tools/Makefile.am b/tools/Makefile.am index aaf1ca1..dc85836 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -26,7 +26,8 @@ gnome_session_quit_LDADD = \ gnome_session_check_accelerated_helper_SOURCES = \ gnome-session-check-accelerated-helper.c -gnome_session_check_accelerated_helper_CPPFLAGS = \ +gnome_session_check_accelerated_helper_CPPFLAGS = \ + -DPKGDATADIR=\""$(pkgdatadir)"\" \ $(GL_TEST_CFLAGS) gnome_session_check_accelerated_helper_LDADD = \ diff --git a/tools/gnome-session-check-accelerated-helper.c b/tools/gnome-session-check-accelerated-helper.c index c1b49e2..c0fa1e5 100644 --- a/tools/gnome-session-check-accelerated-helper.c +++ b/tools/gnome-session-check-accelerated-helper.c @@ -75,6 +75,8 @@ #include <stdlib.h> #include <string.h> +#include <regex.h> + #include <X11/Xlib.h> #include <X11/extensions/Xcomposite.h> #include <GL/gl.h> @@ -148,6 +150,92 @@ _has_composite (Display *display) } static int +_is_comment (const char *line) +{ + while (*line && isspace(*line)) + line++; + + if (*line == '#' || *line == '\0') + return 0; + else + return 1; +} + +static int +_is_gl_renderer_blacklisted (const char *renderer) +{ + FILE *blacklist; + char *line = NULL; + size_t line_len = 0; + int ret = 1; + + blacklist = fopen(PKGDATADIR "/hardware-compatibility", "r"); + if (blacklist == NULL) + goto out; + + while (getline (&line, &line_len, blacklist) != -1) { + int whitelist = 0; + const char *re_str; + regex_t re; + int status; + + if (line == NULL) + break; + + /* Drop trailing \n */ + line[strlen(line) - 1] = '\0'; + + if (_is_comment (line) == 0) { + free (line); + line = NULL; + continue; + } + + if (line[0] == '+') + whitelist = 1; + else if (line[0] == '-') + whitelist = 0; + else { + _print_error ("Invalid syntax in this line for hardware compatibility:"); + _print_error (line); + free (line); + line = NULL; + continue; + } + + re_str = line + 1; + + if (regcomp (&re, re_str, REG_EXTENDED|REG_ICASE|REG_NOSUB) != 0) { + _print_error ("Cannot use this regular expression for hardware compatibility:"); + _print_error (re_str); + } else { + status = regexec (&re, renderer, 0, NULL, 0); + regfree(&re); + + if (status == 0) { + if (whitelist) + ret = 0; + goto out; + } + } + + free (line); + line = NULL; + } + + ret = 0; + +out: + if (line != NULL) + free (line); + + if (blacklist != NULL) + fclose (blacklist); + + return ret; +} + +static int _has_hardware_gl (Display *display) { int screen; @@ -193,12 +281,7 @@ _has_hardware_gl (Display *display) goto out; renderer = (const char *) glGetString (GL_RENDERER); - /* The current Mesa software GL renderer string is - * "Software Rasterizer". - * Gallium has softpipe and llvmpipe. */ - if (strcasestr (renderer, "software rasterizer") != NULL || - strcasestr (renderer, "softpipe") != NULL || - strcasestr (renderer, "llvmpipe") != NULL) + if (_is_gl_renderer_blacklisted (renderer) != 0) goto out; /* we need to get the max texture size while we have a context, -- 1.7.7 >From 5762becdbb2a308647067e0e09617b3f91f0ac0e Mon Sep 17 00:00:00 2001 From: Vincent Untz <vu...@gnome.org> Date: Wed, 19 Oct 2011 14:36:57 +0200 Subject: [PATCH 2/2] data: Blacklist Intel 830-865 hardware https://bugzilla.gnome.org/show_bug.cgi?id=644325 --- data/hardware-compatibility | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/data/hardware-compatibility b/data/hardware-compatibility index b311898..ddbfe07 100644 --- a/data/hardware-compatibility +++ b/data/hardware-compatibility @@ -12,6 +12,9 @@ ## - Lines not starting with '#', '+', '-' are ignored. ## +# Intel 830-865 +-Intel(R) 8[[:digit:]]{2,2}[^[:digit:]] + # Old Mesa software GL renderer -software rasterizer -- 1.7.7 ++++++ gnome-session-gnome.fallback-boot-arg.patch ++++++ commit 2613036679b7691c93f5bbd1e15379d80fbb9bf6 Author: Vincent Untz <vu...@gnome.org> Date: Wed Oct 19 13:14:50 2011 +0200 tools: Look at gnome.fallback argument in kernel boot line This is a quick way to let users easily force the fallback (or non-fallback mode) with gnome.fallback=0/1 on boot. diff --git a/tools/gnome-session-check-accelerated-helper.c b/tools/gnome-session-check-accelerated-helper.c index 3f83f76..c1fbe9d 100644 --- a/tools/gnome-session-check-accelerated-helper.c +++ b/tools/gnome-session-check-accelerated-helper.c @@ -70,7 +70,9 @@ /* for strcasestr */ #define _GNU_SOURCE +#include <ctype.h> #include <stdio.h> +#include <stdlib.h> #include <string.h> #include <X11/Xlib.h> @@ -87,6 +89,54 @@ _print_error (const char *str) } static int +_parse_kcmdline (void) +{ + FILE *kcmdline; + char *line = NULL; + size_t line_len = 0; + int ret = -1; + + kcmdline = fopen("/proc/cmdline", "r"); + if (kcmdline == NULL) + return ret; + + while (getline (&line, &line_len, kcmdline) != -1) { + const char *arg; + const char *str; + int key_len = strlen ("gnome.fallback="); + + if (line == NULL) + break; + + /* don't break if we found the argument once: last mention wins */ + + str = line; + do { + arg = strstr (str, "gnome.fallback="); + str = arg + key_len; + + if (arg && + (arg == line || isspace (arg[-1])) && /* gnome.fallback= is really the beginning of an argument */ + (isdigit (arg[key_len]))) { /* the first character of the value of this argument is an integer */ + if ((arg[key_len+1] == '\0' || isspace (arg[key_len+1]))) /* the value of this argument is only one character long */ + ret = arg[key_len] - '0'; + else /* invalid value */ + ret = 0xDEAD; + + } + } while (arg != NULL); + + free (line); + line = NULL; + line_len = 0; + } + + fclose (kcmdline); + + return ret; +} + +static int _has_composite (Display *display) { int dummy1, dummy2; @@ -257,9 +307,23 @@ _is_max_texture_size_big_enough (Display *display) int main (int argc, char **argv) { + int kcmdline_parsed; Display *display = NULL; int ret = 1; + kcmdline_parsed = _parse_kcmdline (); + if (kcmdline_parsed >= 0) { + if (kcmdline_parsed == 0) { + _print_error ("Non-fallback mode forced by kernel command line."); + ret = 0; + goto out; + } else if (kcmdline_parsed == 1) { + _print_error ("Fallback mode forced by kernel command line."); + goto out; + } else + _print_error ("Invalid value for gnome.fallback passed in kernel command line."); + } + display = XOpenDisplay (NULL); if (!display) { _print_error ("No X display."); -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org