Package init

This commit is contained in:
overweight 2019-09-30 10:39:18 -04:00
commit 7ed1a8fb3b
7 changed files with 725 additions and 0 deletions

BIN
GConf-3.2.6.tar.xz Normal file

Binary file not shown.

360
GConf-gettext.patch Normal file
View File

@ -0,0 +1,360 @@
diff -up GConf-2.26.0/backends/markup-tree.c.gettext GConf-2.26.0/backends/markup-tree.c
--- GConf-2.26.0/backends/markup-tree.c.gettext 2009-04-26 23:33:05.258484987 -0400
+++ GConf-2.26.0/backends/markup-tree.c 2009-04-26 23:34:25.026700526 -0400
@@ -52,6 +52,7 @@ struct _MarkupEntry
char *schema_name;
char *mod_user;
GTime mod_time;
+ const char *gettext_domain;
};
static LocalSchemaInfo* local_schema_info_new (void);
@@ -1593,6 +1594,8 @@ markup_entry_set_value (MarkupEntry
gconf_schema_get_type (schema));
gconf_schema_set_owner (current_schema,
gconf_schema_get_owner (schema));
+ gconf_schema_set_gettext_domain (current_schema,
+ gconf_schema_get_gettext_domain (schema));
}
/* Update mod time */
@@ -1805,6 +1808,8 @@ markup_entry_get_value (MarkupEntry *ent
else if (c_local_schema && c_local_schema->long_desc)
gconf_schema_set_long_desc (schema, c_local_schema->long_desc);
+ gconf_schema_set_gettext_domain (schema, entry->gettext_domain);
+
return retval;
}
}
@@ -2339,8 +2344,9 @@ parse_value_element (GMarkupParseContext
const char *ltype;
const char *list_type;
const char *owner;
+
GConfValueType vtype;
- const char *dummy1, *dummy2, *dummy3, *dummy4;
+ const char *dummy1, *dummy2, *dummy3, *dummy4, *dummy5;
#if 0
g_assert (ELEMENT_IS ("entry") ||
@@ -2377,6 +2383,7 @@ parse_value_element (GMarkupParseContext
"muser", &dummy2,
"mtime", &dummy3,
"schema", &dummy4,
+ "gettext_domain", &dummy5,
NULL))
return;
@@ -2683,6 +2690,7 @@ parse_entry_element (GMarkupParseContext
const char *mtime;
const char *schema;
const char *type;
+ const char *gettext_domain;
const char *dummy1, *dummy2, *dummy3, *dummy4;
const char *dummy5, *dummy6, *dummy7;
GConfValue *value;
@@ -2693,6 +2701,7 @@ parse_entry_element (GMarkupParseContext
mtime = NULL;
schema = NULL;
type = NULL;
+ gettext_domain = NULL;
if (!locate_attributes (context, element_name, attribute_names, attribute_values,
error,
@@ -2701,6 +2710,7 @@ parse_entry_element (GMarkupParseContext
"mtime", &mtime,
"schema", &schema,
"type", &type,
+ "gettext_domain", &gettext_domain,
/* These are allowed but we don't use them until
* parse_value_element
@@ -2768,6 +2778,9 @@ parse_entry_element (GMarkupParseContext
*/
if (schema)
entry->schema_name = g_strdup (schema);
+
+ if (gettext_domain)
+ entry->gettext_domain = g_intern_string (gettext_domain);
}
else
{
@@ -3716,6 +3729,7 @@ write_value_element (GConfValue *value,
GConfSchema *schema;
GConfValueType stype;
const char *owner;
+ const char *gettext_domain;
schema = gconf_value_get_schema (value);
@@ -3741,6 +3755,23 @@ write_value_element (GConfValue *value,
g_free (s);
}
+
+ gettext_domain = gconf_schema_get_gettext_domain (schema);
+
+ if (gettext_domain)
+ {
+ char *s;
+
+ s = g_markup_escape_text (gettext_domain, -1);
+
+ if (fprintf (f, " gettext_domain=\"%s\"", s) < 0)
+ {
+ g_free (s);
+ return FALSE;
+ }
+
+ g_free (s);
+ }
if (stype == GCONF_VALUE_LIST)
{
diff -up GConf-2.26.0/doc/gconf-1.0.dtd.gettext GConf-2.26.0/doc/gconf-1.0.dtd
--- GConf-2.26.0/doc/gconf-1.0.dtd.gettext 2009-04-26 23:33:17.240736103 -0400
+++ GConf-2.26.0/doc/gconf-1.0.dtd 2009-04-26 23:34:25.027700384 -0400
@@ -7,7 +7,7 @@
<!-- A single schema. What I am trying to say is "this set of
elements, in any order". Duplicate elements (apart from <locale>) are
not allowed). -->
-<!ELEMENT schema (key|applyto*|owner?|type|(list_type|(car_type,cdr_type))?|default?|locale*)*>
+<!ELEMENT schema (key|applyto*|owner?|type|(list_type|(car_type,cdr_type))?|default?|locale*|gettext_domain?)*>
<!-- The key for this schema (e.g. /schemas/apps/foo/bar) -->
<!ELEMENT key (#PCDATA)>
diff -up GConf-2.26.0/gconf/gconf-internals.c.gettext GConf-2.26.0/gconf/gconf-internals.c
--- GConf-2.26.0/gconf/gconf-internals.c.gettext 2009-04-26 23:34:10.994700035 -0400
+++ GConf-2.26.0/gconf/gconf-internals.c 2009-04-26 23:34:53.767450191 -0400
@@ -513,6 +513,7 @@ gconf_fill_corba_schema_from_gconf_schem
cs->short_desc = CORBA_string_dup (gconf_schema_get_short_desc (sc) ? gconf_schema_get_short_desc (sc) : "");
cs->long_desc = CORBA_string_dup (gconf_schema_get_long_desc (sc) ? gconf_schema_get_long_desc (sc) : "");
cs->owner = CORBA_string_dup (gconf_schema_get_owner (sc) ? gconf_schema_get_owner (sc) : "");
+ cs->gettext_domain = CORBA_string_dup (gconf_schema_get_gettext_domain (sc) ? gconf_schema_get_gettext_domain (sc) : "");
{
gchar* encoded;
@@ -600,6 +601,14 @@ gconf_schema_from_corba_schema(const Con
gconf_schema_set_owner(sc, cs->owner);
}
+ if (*cs->gettext_domain != '\0')
+ {
+ if (!g_utf8_validate (cs->gettext_domain, -1, NULL))
+ gconf_log (GCL_ERR, _("Invalid UTF-8 in gettext domain for schema"));
+ else
+ gconf_schema_set_gettext_domain(sc, cs->gettext_domain);
+ }
+
{
GConfValue* val;
diff -up GConf-2.26.0/gconf/gconf-schema.c.gettext GConf-2.26.0/gconf/gconf-schema.c
--- GConf-2.26.0/gconf/gconf-schema.c.gettext 2009-04-26 23:33:26.787483545 -0400
+++ GConf-2.26.0/gconf/gconf-schema.c 2009-04-26 23:35:54.240450142 -0400
@@ -32,9 +32,10 @@ typedef struct {
GConfValueType car_type; /* Pair car type of the described entry */
GConfValueType cdr_type; /* Pair cdr type of the described entry */
gchar* locale; /* Schema locale */
- gchar* owner; /* Name of creating application */
+ const gchar* owner; /* Name of creating application */
gchar* short_desc; /* 40 char or less description, no newlines */
gchar* long_desc; /* could be a paragraph or so */
+ const gchar* gettext_domain; /* description gettext domain */
GConfValue* default_value; /* Default value of the key */
} GConfRealSchema;
@@ -63,7 +64,6 @@ gconf_schema_free (GConfSchema* sc)
g_free (real->locale);
g_free (real->short_desc);
g_free (real->long_desc);
- g_free (real->owner);
if (real->default_value)
gconf_value_free (real->default_value);
@@ -91,7 +91,9 @@ gconf_schema_copy (const GConfSchema* sc
dest->long_desc = g_strdup (real->long_desc);
- dest->owner = g_strdup (real->owner);
+ dest->gettext_domain = real->gettext_domain;
+
+ dest->owner = real->owner;
dest->default_value = real->default_value ? gconf_value_copy (real->default_value) : NULL;
@@ -136,6 +138,17 @@ gconf_schema_set_locale (GConfSchema* sc
REAL_SCHEMA (sc)->locale = NULL;
}
+void
+gconf_schema_set_gettext_domain (GConfSchema* sc, const gchar* domain)
+{
+ g_return_if_fail (domain == NULL || g_utf8_validate (domain, -1, NULL));
+
+ if (domain)
+ REAL_SCHEMA (sc)->gettext_domain = g_intern_string (domain);
+ else
+ REAL_SCHEMA (sc)->gettext_domain = NULL;
+}
+
void
gconf_schema_set_short_desc (GConfSchema* sc, const gchar* desc)
{
@@ -169,11 +182,8 @@ gconf_schema_set_owner (GConfSchema* sc,
{
g_return_if_fail (owner == NULL || g_utf8_validate (owner, -1, NULL));
- if (REAL_SCHEMA (sc)->owner)
- g_free (REAL_SCHEMA (sc)->owner);
-
if (owner)
- REAL_SCHEMA (sc)->owner = g_strdup (owner);
+ REAL_SCHEMA (sc)->owner = g_intern_string (owner);
else
REAL_SCHEMA (sc)->owner = NULL;
}
@@ -228,6 +238,14 @@ gconf_schema_validate (const GConfSchema
return FALSE;
}
+ if (real->gettext_domain && !g_utf8_validate (real->gettext_domain, -1, NULL))
+ {
+ g_set_error (err, GCONF_ERROR,
+ GCONF_ERROR_FAILED,
+ _("Schema contains invalid UTF-8"));
+ return FALSE;
+ }
+
if (real->owner && !g_utf8_validate (real->owner, -1, NULL))
{
g_set_error (err, GCONF_ERROR,
@@ -299,11 +317,32 @@ gconf_schema_get_locale (const GConfSche
}
const char*
+gconf_schema_get_gettext_domain (const GConfSchema *schema)
+{
+ g_return_val_if_fail (schema != NULL, NULL);
+
+ return REAL_SCHEMA (schema)->gettext_domain;
+}
+
+static inline const char *
+schema_translate (const GConfSchema *schema,
+ const char *string)
+{
+ if (REAL_SCHEMA (schema)->gettext_domain)
+ {
+ bind_textdomain_codeset (REAL_SCHEMA (schema)->gettext_domain, "UTF-8");
+ return g_dgettext(REAL_SCHEMA (schema)->gettext_domain, string);
+ }
+ else
+ return string;
+}
+
+const char*
gconf_schema_get_short_desc (const GConfSchema *schema)
{
g_return_val_if_fail (schema != NULL, NULL);
- return REAL_SCHEMA (schema)->short_desc;
+ return schema_translate (schema, REAL_SCHEMA (schema)->short_desc);
}
const char*
@@ -311,7 +350,7 @@ gconf_schema_get_long_desc (const GConfS
{
g_return_val_if_fail (schema != NULL, NULL);
- return REAL_SCHEMA (schema)->long_desc;
+ return schema_translate (schema, REAL_SCHEMA (schema)->long_desc);
}
const char*
diff -up GConf-2.26.0/gconf/gconf-schema.h.gettext GConf-2.26.0/gconf/gconf-schema.h
--- GConf-2.26.0/gconf/gconf-schema.h.gettext 2009-04-26 23:33:33.979744088 -0400
+++ GConf-2.26.0/gconf/gconf-schema.h 2009-04-26 23:34:25.030737043 -0400
@@ -48,6 +48,8 @@ void gconf_schema_set_cdr_type
GConfValueType type);
void gconf_schema_set_locale (GConfSchema *sc,
const gchar *locale);
+void gconf_schema_set_gettext_domain (GConfSchema *sc,
+ const gchar *domain);
void gconf_schema_set_short_desc (GConfSchema *sc,
const gchar *desc);
void gconf_schema_set_long_desc (GConfSchema *sc,
@@ -65,6 +67,7 @@ GConfValueType gconf_schema_get_list_typ
GConfValueType gconf_schema_get_car_type (const GConfSchema *schema);
GConfValueType gconf_schema_get_cdr_type (const GConfSchema *schema);
const char* gconf_schema_get_locale (const GConfSchema *schema);
+const char* gconf_schema_get_gettext_domain(const GConfSchema *schema);
const char* gconf_schema_get_short_desc (const GConfSchema *schema);
const char* gconf_schema_get_long_desc (const GConfSchema *schema);
const char* gconf_schema_get_owner (const GConfSchema *schema);
diff -up GConf-2.26.0/gconf/gconftool.c.gettext GConf-2.26.0/gconf/gconftool.c
--- GConf-2.26.0/gconf/gconftool.c.gettext 2009-04-26 23:33:41.907451190 -0400
+++ GConf-2.26.0/gconf/gconftool.c 2009-04-26 23:34:25.034736752 -0400
@@ -3295,6 +3295,7 @@ struct _SchemaInfo {
GConfValueType cdr_type;
GConfValue* global_default;
GHashTable* hash;
+ gchar* gettext_domain;
};
static int
@@ -3547,6 +3548,15 @@ extract_global_info(xmlNodePtr node,
else
g_printerr (_("WARNING: empty <applyto> node"));
}
+ else if (strcmp((char *)iter->name, "gettext_domain") == 0)
+ {
+ tmp = (char *)xmlNodeGetContent(iter);
+ if (tmp)
+ {
+ info->gettext_domain = g_strdup(tmp);
+ xmlFree(tmp);
+ }
+ }
else
g_printerr (_("WARNING: node <%s> not understood below <schema>\n"),
iter->name);
@@ -3636,6 +3646,9 @@ process_locale_info(xmlNodePtr node, Sch
if (info->owner != NULL)
gconf_schema_set_owner(schema, info->owner);
+ if (info->gettext_domain != NULL)
+ gconf_schema_set_gettext_domain(schema, info->gettext_domain);
+
xmlFree(name);
/* Locale-specific info */
@@ -3765,6 +3778,7 @@ get_schema_from_xml(xmlNodePtr node, gch
info.apply_to = NULL;
info.owner = NULL;
info.global_default = NULL;
+ info.gettext_domain = NULL;
info.hash = g_hash_table_new(g_str_hash, g_str_equal);
extract_global_info(node, &info);
@@ -3801,6 +3815,8 @@ get_schema_from_xml(xmlNodePtr node, gch
; /* nothing */
else if (strcmp((char *)iter->name, "applyto") == 0)
; /* nothing */
+ else if (strcmp((char *)iter->name, "gettext_domain") == 0)
+ ; /* nothing */
else if (strcmp((char *)iter->name, "locale") == 0)
{
process_locale_info(iter, &info);
diff -up GConf-2.26.0/gconf/GConfX.idl.gettext GConf-2.26.0/gconf/GConfX.idl
--- GConf-2.26.0/gconf/GConfX.idl.gettext 2009-04-26 23:33:58.457483190 -0400
+++ GConf-2.26.0/gconf/GConfX.idl 2009-04-26 23:34:53.764448732 -0400
@@ -16,6 +16,7 @@ struct ConfigSchema {
string short_desc;
string long_desc;
string owner;
+ string gettext_domain;
// Work around lack of recursive data types
string encoded_default_value;
};

121
GConf2.spec Normal file
View File

@ -0,0 +1,121 @@
Name: GConf2
Version: 3.2.6
Release: 22
Summary: GConf is a system for storing application preferences
License: LGPLv2+ and GPLv2+
URL: http://projects.gnome.org/gconf/
Source0: http://download.gnome.org/sources/GConf/3.2/GConf-%{version}.tar.xz
Source1: macros.gconf2
#PATCH-FIX-http://bugzilla.gnome.org/show_bug.cgi?id=568845
Patch0000: GConf-gettext.patch
#PATCH-FIX-https://bugzilla.gnome.org/show_bug.cgi?id=671490
Patch0001: drop-spew.patch
#PATCH-FIX-https://bugzilla.redhat.com/show_bug.cgi?id=755992
Patch0099: workaround-crash.patch
#PATCH-FIX-upstream-https://patchwork.kernel.org/patch/10583361/
Patch0100: pkill-hack.patch
BuildRequires: libxml2-devel >= 2.4.12 libxslt-devel glib2-devel >= 2.25.9 gtk-doc >= 0.9
BuildRequires: pkgconfig >= 0.14 gettext intltool polkit-devel >= 0.92 dbus-glib-devel >= 0.8
BuildRequires: gobject-introspection-devel >= 0.6.7 autoconf automake libtool
Requires: dbus psmisc
Conflicts: GConf2-dbus
Provides: GConf2-gtk = 3.2.6-6
Obsoletes: GConf2-gtk < 3.2.6-6
%description
The root motivation for GConf is to make application preferences more manageable for system administrators.
The initial GConf implementation has some shortcomings in this area; however, the client-side API should be correct,
and the initial implementation is a decent first cut GConf involves a few new concepts,
but no rocket science. Essentially GConf provides a preferences database, which is like a simple filesystem
%package devel
Summary: Development files for GConf2 package
Requires: %{name} = %{version}-%{release}
Requires: libxml2-devel >= 2.4.12 pkgconfig automake glib2-devel >= 2.25.9
Conflicts: GConf2-dbus-devel
%description devel
GConf2-devel package Contains library files needed for doing development.
Essentially GConf provides a preferences database, which is like a simple filesystem
%prep
%autosetup -n GConf-%{version} -p1
autoreconf -i -f
%build
%configure --disable-static --enable-defaults-service --disable-orbit --with-gtk=3.0
sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e \
's/ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/ \
func_append compile_command " -Wl,-O1,--as-needed"\n func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' \
libtool
%make_build
%install
%make_install
install -d $RPM_BUILD_ROOT%{_sysconfdir}/gconf/{schemas,gconf.xml.system}
install -d $RPM_BUILD_ROOT%{_rpmconfigdir}/macros.d/
install -d $RPM_BUILD_ROOT%{_localstatedir}/lib/rpm-state/gconf
install -d $RPM_BUILD_ROOT%{_datadir}/GConf/gsettings
install -p -m 644 %{SOURCE1} $RPM_BUILD_ROOT%{_rpmconfigdir}/macros.d/
%find_lang %name
%post
/sbin/ldconfig
if [ $1 -gt 1 ]; then
if ! fgrep -q gconf.xml.system %{_sysconfdir}/gconf/2/path; then
sed -i -e 's@xml:readwrite:$(HOME)/.gconf@&\n\n# Location for system-wide settings.\nxml:readonly:/etc/gconf/gconf.xml.system@' %{_sysconfdir}/gconf/2/path
fi
fi
%postun -p /sbin/ldconfig
%files -f %{name}.lang
%license COPYING
%doc NEWS README
%config(noreplace) %{_sysconfdir}/gconf/2/path
%dir %{_sysconfdir}/gconf/2
%dir %{_sysconfdir}/gconf/gconf.xml.defaults
%dir %{_sysconfdir}/gconf/gconf.xml.mandatory
%dir %{_sysconfdir}/gconf/gconf.xml.system
%dir %{_sysconfdir}/gconf/schemas
%{_bindir}/gconf*
%{_bindir}/gsettings-data-convert
%{_sysconfdir}/xdg/autostart/gsettings-data-convert.desktop
%{_libexecdir}/gconfd-2
%{_libdir}/*.so.*
%{_libdir}/GConf/2/*.so
%{_datadir}/sgml/gconf
%{_datadir}/GConf
%{_mandir}/man1/*
%exclude %{_mandir}/man1/gsettings-schema-convert.1*
%{_rpmconfigdir}/macros.d/macros.gconf2
%{_sysconfdir}/dbus-1/system.d/org.gnome.GConf.Defaults.conf
%{_libexecdir}/gconf-defaults-mechanism
%{_datadir}/polkit-1/actions/org.gnome.gconf.defaults.policy
%{_datadir}/dbus-1/system-services/org.gnome.GConf.Defaults.service
%{_datadir}/dbus-1/services/org.gnome.GConf.service
%{_localstatedir}/lib/rpm-state/gconf/
%{_libdir}/gio/modules/libgsettingsgconfbackend.so
%{_libdir}/girepository-1.0
%files devel
%{_libdir}/*.so
%{_includedir}/gconf
%exclude %{_libdir}/*.la
%exclude %{_libdir}/GConf/2/*.la
%exclude %{_libdir}/gio/modules/*.la
%{_datadir}/aclocal/*.m4
%{_datadir}/gtk-doc/html/gconf
%{_libdir}/pkgconfig/*
%{_datadir}/gir-1.0
%{_bindir}/gsettings-schema-convert
%{_mandir}/man1/gsettings-schema-convert.1*
%changelog
* Wed Sep 18 2019 openEuler jimmy<dukaitian@huawei.com> - 3.2.6-22
- Package init jimmy

98
drop-spew.patch Normal file
View File

@ -0,0 +1,98 @@
From b0895e1998ebc83ab030ec0f17c0685439f5b404 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 15 Apr 2013 09:57:34 -0400
Subject: [PATCH] dbus: Don't spew to console when unable to connect to dbus
daemon
Instead pass the error up for the caller to decide what to do.
This prevent untrappable warning messages from showing up at the
console if gconftool --makefile-install-rule is called.
---
gconf/gconf-dbus.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/gconf/gconf-dbus.c b/gconf/gconf-dbus.c
index 5610fcf..048e3ea 100644
--- a/gconf/gconf-dbus.c
+++ b/gconf/gconf-dbus.c
@@ -104,9 +104,9 @@ static GConfEngine *default_engine = NULL;
static GHashTable *engines_by_db = NULL;
static GHashTable *engines_by_address = NULL;
static gboolean dbus_disconnected = FALSE;
-static gboolean ensure_dbus_connection (void);
+static gboolean ensure_dbus_connection (GError **error);
static gboolean ensure_service (gboolean start_if_not_found,
GError **err);
static gboolean ensure_database (GConfEngine *conf,
gboolean start_if_not_found,
@@ -382,18 +382,20 @@ gconf_engine_detach (GConfEngine *conf)
}
}
static gboolean
-ensure_dbus_connection (void)
+ensure_dbus_connection (GError **err)
{
DBusError error;
if (global_conn != NULL)
return TRUE;
if (dbus_disconnected)
{
- g_warning ("The connection to DBus was broken. Can't reinitialize it.");
+ g_set_error (err, GCONF_ERROR,
+ GCONF_ERROR_NO_SERVER,
+ "The connection to DBus was broken. Can't reinitialize it.");
return FALSE;
}
dbus_error_init (&error);
@@ -401,9 +403,12 @@ ensure_dbus_connection (void)
global_conn = dbus_bus_get_private (DBUS_BUS_SESSION, &error);
if (!global_conn)
{
- g_warning ("Client failed to connect to the D-BUS daemon:\n%s", error.message);
+ g_set_error (err, GCONF_ERROR,
+ GCONF_ERROR_NO_SERVER,
+ "Client failed to connect to the D-BUS daemon:\n%s",
+ error.message);
dbus_error_free (&error);
return FALSE;
}
@@ -430,15 +435,10 @@ ensure_service (gboolean start_if_not_found,
DBusError error;
if (global_conn == NULL)
{
- if (!ensure_dbus_connection ())
- {
- g_set_error (err, GCONF_ERROR,
- GCONF_ERROR_NO_SERVER,
- _("No D-BUS daemon running\n"));
- return FALSE;
- }
+ if (!ensure_dbus_connection (err))
+ return FALSE;
g_assert (global_conn != NULL);
}
@@ -2511,9 +2511,9 @@ gboolean
gconf_ping_daemon (void)
{
if (global_conn == NULL)
{
- if (!ensure_dbus_connection ())
+ if (!ensure_dbus_connection (NULL))
{
return FALSE;
}
g_assert (global_conn != NULL);
--
1.8.1.4

86
macros.gconf2 Normal file
View File

@ -0,0 +1,86 @@
#
# RPM macros for gconf applications.
#
# (c) 2006-2007 SUSE LINUX
# Author: Stanislav Brabec <sbrabec@suse.cz>
# (c) 2009 Red Hat, Inc
# Author: Toshio Kuratomi <toshio@fedoraproject.org>
#
# License: LGPLv2+
#
# Usage:
#
# Preamble:
# Requires(pre): GConf2
# Requires(preun): GConf2
# Requires(post): GConf2
#
# schemas names are without path and suffix
#
#
# %pre
# %gconf_schema_obsolete schema1
# %gconf_schema_prepare schema2 schema3
#
# %preun
# %gconf_schema_remove schema2 schema3
#
# %post
# %gconf_schema_upgrade schema2 schema3
#
# %files
# %{_sysconfdir}/gconf/schemas/schema2.schemas
# %{_sysconfdir}/gconf/schemas/schema3.schemas
# Copy schemas from old package for later uninstall on upgrade
%gconf_schema_prepare() \
if [ "$1" -gt 1 ] ; then \
rm -rf %{_localstatedir}/lib/rpm-state/gconf/* \
for schema in %{*} ; do \
if test -f %{_sysconfdir}/gconf/schemas/"$schema".schemas ; then \
cp -p %{_sysconfdir}/gconf/schemas/"$schema".schemas %{_localstatedir}/lib/rpm-state/gconf/ || : \
fi \
done \
fi \
%{nil}
# Macro to remove schemas. Not meant to be used publically
%_do_gconf_schema_remove() \
if test -f %{_sysconfdir}/gconf/schemas/"$schema".schemas ; then \
export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source` \
gconftool-2 --makefile-uninstall-rule %{_sysconfdir}/gconf/schemas/"$schema".schemas > /dev/null || : \
fi \
%{nil}
# Remove schemas unconditionally
%gconf_schema_obsolete() \
for schema in %{*} ; do \
%_do_gconf_schema_remove \
done \
%{nil}
# Remove schemas on package removal (not upgrade)
%gconf_schema_remove() \
if [ "$1" -eq 0 ] ; then \
for schema in %{*} ; do \
%_do_gconf_schema_remove \
done \
fi \
%{nil}
%gconf_schema_upgrade() \
for schema in %{*} ; do \
if test -f %{_localstatedir}/lib/rpm-state/gconf/"$schema".schemas ; then \
cmp --quiet %{_sysconfdir}/gconf/schemas/"$schema".schemas %{_localstatedir}/lib/rpm-state/gconf/"$schema".schemas \
if test $? != 0; then\
export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source` \
gconftool-2 --makefile-uninstall-rule %{_localstatedir}/lib/rpm-state/gconf/"$schema".schemas > /dev/null || : \
gconftool-2 --makefile-install-rule %{_sysconfdir}/gconf/schemas/"$schema".schemas > /dev/null || : \
fi \
rm -f %{_localstatedir}/lib/rpm-state/gconf/"$schema".schemas \
else \
export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source` \
gconftool-2 --makefile-install-rule %{_sysconfdir}/gconf/schemas/"$schema".schemas > /dev/null || : \
fi \
done \
%{nil}

14
pkill-hack.patch Normal file
View File

@ -0,0 +1,14 @@
diff -up GConf-3.2.6/gconf/gconftool.c.pkill-hack GConf-3.2.6/gconf/gconftool.c
--- GConf-3.2.6/gconf/gconftool.c.pkill-hack 2013-04-17 10:46:13.225426329 -0400
+++ GConf-3.2.6/gconf/gconftool.c 2013-04-17 10:48:25.963508300 -0400
@@ -916,8 +916,8 @@ main (int argc, char** argv)
use_local_source = TRUE;
- /* shut down daemon, this is a race condition, but will usually work. */
- gconf_shutdown_daemon (NULL);
+ g_spawn_command_line_sync ("/usr/bin/pkill -HUP -f /usr/libexec/gconfd-2",
+ NULL, NULL, NULL, NULL);
}
if (config_source == NULL)

46
workaround-crash.patch Normal file
View File

@ -0,0 +1,46 @@
diff -up GConf-3.2.6/gconf/gconfd.c.workaround-crash GConf-3.2.6/gconf/gconfd.c
--- GConf-3.2.6/gconf/gconfd.c.workaround-crash 2013-04-15 10:12:54.480753142 -0400
+++ GConf-3.2.6/gconf/gconfd.c 2013-04-15 10:12:53.457736847 -0400
@@ -1076,17 +1076,6 @@ periodic_cleanup_timeout(gpointer data)
#endif
drop_old_databases ();
-#ifdef HAVE_DBUS
- if (no_databases_in_use () && gconfd_dbus_client_count () == 0)
-#else
- if (no_databases_in_use () && client_count () == 0)
-#endif
- {
- gconf_log (GCL_INFO, _("GConf server is not in use, shutting down."));
- gconfd_main_quit ();
- return FALSE;
- }
-
/* expire old locale cache entries */
gconfd_locale_cache_expire ();
@@ -1105,7 +1094,6 @@ periodic_cleanup_timeout(gpointer data)
return TRUE;
}
-
void
gconfd_need_log_cleanup (void)
{
@@ -1131,14 +1119,14 @@ gconf_main(void)
}
main_loops = g_slist_prepend(main_loops, loop);
+ main_loops = g_slist_prepend(main_loops, loop);
g_main_loop_run (loop);
main_loops = g_slist_remove(main_loops, loop);
- if (main_loops == NULL)
+ if (main_loops == NULL && timeout_id != 0)
{
- g_assert(timeout_id != 0);
g_source_remove(timeout_id);
timeout_id = 0;
}