Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
ece541813c | ||
|
0e7dd55218 | ||
|
9466b148b9 | ||
|
b5249c24e7 | ||
|
f2a59ac4cd | ||
|
a4380b5521 | ||
|
572cef69be | ||
|
c867079ea9 | ||
|
fb27811bc4 | ||
|
5e4a709a11 | ||
|
3451eacb03 | ||
|
82eb152578 |
8
.gitignore
vendored
8
.gitignore
vendored
@ -23,3 +23,11 @@ glib-2.25.13.tar.bz2
|
|||||||
/glib-2.29.8.tar.xz
|
/glib-2.29.8.tar.xz
|
||||||
/glib-2.29.10.tar.xz
|
/glib-2.29.10.tar.xz
|
||||||
/glib-2.29.14.tar.xz
|
/glib-2.29.14.tar.xz
|
||||||
|
/glib-2.29.16.tar.xz
|
||||||
|
/glib-2.29.18.tar.xz
|
||||||
|
/glib-2.29.90.tar.xz
|
||||||
|
/glib-2.29.92.tar.xz
|
||||||
|
/glib-2.30.0.tar.xz
|
||||||
|
/glib-2.30.1.tar.xz
|
||||||
|
/glib-2.30.2.tar.xz
|
||||||
|
/glib-2.30.3.tar.xz
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
From eb454a1cb4d8ea16f6b5575c69e58c2877ea350e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Matthias Clasen <mclasen@redhat.com>
|
|
||||||
Date: Sun, 27 Jun 2010 19:27:04 -0400
|
|
||||||
Subject: [PATCH] Fix a alloc/free mismatch
|
|
||||||
|
|
||||||
Pointed out in http://bugzilla.redhat.com/show_bug.cgi?id=608453
|
|
||||||
by David Tardon.
|
|
||||||
---
|
|
||||||
glib/gbuffer.c | 2 +-
|
|
||||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gbuffer.c b/glib/gbuffer.c
|
|
||||||
index 4eb83df..5830f04 100644
|
|
||||||
--- a/glib/gbuffer.c
|
|
||||||
+++ b/glib/gbuffer.c
|
|
||||||
@@ -138,7 +138,7 @@ g_buffer_free_usernotify (GBuffer *buffer)
|
|
||||||
GUserNotifyBuffer *ubuffer = (GUserNotifyBuffer *) buffer;
|
|
||||||
|
|
||||||
ubuffer->user_destroy (ubuffer->user_data);
|
|
||||||
- g_slice_free (GBuffer, buffer);
|
|
||||||
+ g_slice_free (GUserNotifyBuffer, ubuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* < private >
|
|
||||||
--
|
|
||||||
1.7.1
|
|
||||||
|
|
@ -1,225 +0,0 @@
|
|||||||
From 5bb94348f4760352f6ae974002db48cb130343a4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Zeuthen <davidz@redhat.com>
|
|
||||||
Date: Wed, 18 Aug 2010 11:35:25 -0400
|
|
||||||
Subject: [PATCH 1/4] GDBusProxy: Call into well-known name if no name owner currently exists
|
|
||||||
|
|
||||||
This is really what (API) users expect from GDBusProxy - in
|
|
||||||
particular, mclasen and I ran into this problem while debugging a
|
|
||||||
upower issue, see
|
|
||||||
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=624125
|
|
||||||
|
|
||||||
In a nutshell, the problem is that polkitd crashes while upower holds
|
|
||||||
a PolkitAuthority object (which in turns contains a GDBusProxy for the
|
|
||||||
well-known name org.freedesktop.PolicyKit1). This means that
|
|
||||||
subsequent calls on the PolkitAuthority (which is translated into
|
|
||||||
calls into the GDBusProxy) fails since :g-name-owner is NULL.
|
|
||||||
|
|
||||||
With this fix, we'll be requesting the bus daemon to launch polkitd
|
|
||||||
since we will start calling into org.freedesktop.PolicyKit1 as soon as
|
|
||||||
we notice that there is no owner for this name.
|
|
||||||
|
|
||||||
Unfortunately our test suite doesn't cover service activation so there
|
|
||||||
is no way to reliably test this. I will file a bug about this.
|
|
||||||
|
|
||||||
Signed-off-by: David Zeuthen <davidz@redhat.com>
|
|
||||||
---
|
|
||||||
gio/gdbusproxy.c | 108 ++++++++++++++++++++++++++++++++++++++++--------------
|
|
||||||
1 files changed, 80 insertions(+), 28 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/gio/gdbusproxy.c b/gio/gdbusproxy.c
|
|
||||||
index d47a4ad..17e6730 100644
|
|
||||||
--- a/gio/gdbusproxy.c
|
|
||||||
+++ b/gio/gdbusproxy.c
|
|
||||||
@@ -61,9 +61,13 @@
|
|
||||||
* name is tracked and can be read from
|
|
||||||
* #GDBusProxy:g-name-owner. Connect to the #GObject::notify signal to
|
|
||||||
* get notified of changes. Additionally, only signals and property
|
|
||||||
- * changes emitted from the current name owner are considered. This
|
|
||||||
- * avoids a number of race conditions when the name is lost by one
|
|
||||||
- * owner and claimed by another.
|
|
||||||
+ * changes emitted from the current name owner are considered and
|
|
||||||
+ * calls are always sent to the current name owner. This avoids a
|
|
||||||
+ * number of race conditions when the name is lost by one owner and
|
|
||||||
+ * claimed by another. However, if no name owner currently exists,
|
|
||||||
+ * then calls will be sent to the well-known name which may result in
|
|
||||||
+ * the message bus launching an owner (unless
|
|
||||||
+ * %G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START is set).
|
|
||||||
*
|
|
||||||
* The generic #GDBusProxy::g-properties-changed and #GDBusProxy::g-signal
|
|
||||||
* signals are not very convenient to work with. Therefore, the recommended
|
|
||||||
@@ -2179,6 +2183,31 @@ lookup_method_info_or_warn (GDBusProxy *proxy,
|
|
||||||
return info;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static const gchar *
|
|
||||||
+get_destination_for_call (GDBusProxy *proxy)
|
|
||||||
+{
|
|
||||||
+ const gchar *ret;
|
|
||||||
+
|
|
||||||
+ ret = NULL;
|
|
||||||
+
|
|
||||||
+ /* If proxy->priv->name is a unique name, then proxy->priv->name_owner
|
|
||||||
+ * is never NULL and always the same as proxy->priv->name. We use this
|
|
||||||
+ * knowledge to avoid checking if proxy->priv->name is a unique or
|
|
||||||
+ * well-known name.
|
|
||||||
+ */
|
|
||||||
+ ret = proxy->priv->name_owner;
|
|
||||||
+ if (ret != NULL)
|
|
||||||
+ goto out;
|
|
||||||
+
|
|
||||||
+ if (proxy->priv->flags & G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START)
|
|
||||||
+ goto out;
|
|
||||||
+
|
|
||||||
+ ret = proxy->priv->name;
|
|
||||||
+
|
|
||||||
+ out:
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* g_dbus_proxy_call:
|
|
||||||
* @proxy: A #GDBusProxy.
|
|
||||||
@@ -2243,9 +2272,9 @@ g_dbus_proxy_call (GDBusProxy *proxy,
|
|
||||||
gboolean was_split;
|
|
||||||
gchar *split_interface_name;
|
|
||||||
const gchar *split_method_name;
|
|
||||||
- const GDBusMethodInfo *expected_method_info;
|
|
||||||
const gchar *target_method_name;
|
|
||||||
const gchar *target_interface_name;
|
|
||||||
+ const gchar *destination;
|
|
||||||
GVariantType *reply_type;
|
|
||||||
|
|
||||||
g_return_if_fail (G_IS_DBUS_PROXY (proxy));
|
|
||||||
@@ -2253,6 +2282,9 @@ g_dbus_proxy_call (GDBusProxy *proxy,
|
|
||||||
g_return_if_fail (parameters == NULL || g_variant_is_of_type (parameters, G_VARIANT_TYPE_TUPLE));
|
|
||||||
g_return_if_fail (timeout_msec == -1 || timeout_msec >= 0);
|
|
||||||
|
|
||||||
+ reply_type = NULL;
|
|
||||||
+ split_interface_name = NULL;
|
|
||||||
+
|
|
||||||
simple = g_simple_async_result_new (G_OBJECT (proxy),
|
|
||||||
callback,
|
|
||||||
user_data,
|
|
||||||
@@ -2265,17 +2297,30 @@ g_dbus_proxy_call (GDBusProxy *proxy,
|
|
||||||
g_object_set_data_full (G_OBJECT (simple), "-gdbus-proxy-method-name", g_strdup (target_method_name), g_free);
|
|
||||||
|
|
||||||
/* Warn if method is unexpected (cf. :g-interface-info) */
|
|
||||||
- expected_method_info = NULL;
|
|
||||||
if (!was_split)
|
|
||||||
- expected_method_info = lookup_method_info_or_warn (proxy, target_method_name);
|
|
||||||
+ {
|
|
||||||
+ const GDBusMethodInfo *expected_method_info;
|
|
||||||
+ expected_method_info = lookup_method_info_or_warn (proxy, target_method_name);
|
|
||||||
+ if (expected_method_info != NULL)
|
|
||||||
+ reply_type = _g_dbus_compute_complete_signature (expected_method_info->out_args);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- if (expected_method_info)
|
|
||||||
- reply_type = _g_dbus_compute_complete_signature (expected_method_info->out_args);
|
|
||||||
- else
|
|
||||||
- reply_type = NULL;
|
|
||||||
+ destination = NULL;
|
|
||||||
+ if (proxy->priv->name != NULL)
|
|
||||||
+ {
|
|
||||||
+ destination = get_destination_for_call (proxy);
|
|
||||||
+ if (destination == NULL)
|
|
||||||
+ {
|
|
||||||
+ g_simple_async_result_set_error (simple,
|
|
||||||
+ G_IO_ERROR,
|
|
||||||
+ G_IO_ERROR_FAILED,
|
|
||||||
+ _("Cannot invoke method; proxy is for a well-known name without an owner and proxy was constructed with the G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START flag"));
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
|
|
||||||
g_dbus_connection_call (proxy->priv->connection,
|
|
||||||
- proxy->priv->name_owner,
|
|
||||||
+ destination,
|
|
||||||
proxy->priv->object_path,
|
|
||||||
target_interface_name,
|
|
||||||
target_method_name,
|
|
||||||
@@ -2287,6 +2332,7 @@ g_dbus_proxy_call (GDBusProxy *proxy,
|
|
||||||
(GAsyncReadyCallback) reply_cb,
|
|
||||||
simple);
|
|
||||||
|
|
||||||
+ out:
|
|
||||||
if (reply_type != NULL)
|
|
||||||
g_variant_type_free (reply_type);
|
|
||||||
|
|
||||||
@@ -2392,9 +2438,9 @@ g_dbus_proxy_call_sync (GDBusProxy *proxy,
|
|
||||||
gboolean was_split;
|
|
||||||
gchar *split_interface_name;
|
|
||||||
const gchar *split_method_name;
|
|
||||||
- const GDBusMethodInfo *expected_method_info;
|
|
||||||
const gchar *target_method_name;
|
|
||||||
const gchar *target_interface_name;
|
|
||||||
+ const gchar *destination;
|
|
||||||
GVariantType *reply_type;
|
|
||||||
|
|
||||||
g_return_val_if_fail (G_IS_DBUS_PROXY (proxy), NULL);
|
|
||||||
@@ -2403,32 +2449,37 @@ g_dbus_proxy_call_sync (GDBusProxy *proxy,
|
|
||||||
g_return_val_if_fail (timeout_msec == -1 || timeout_msec >= 0, NULL);
|
|
||||||
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
|
|
||||||
|
|
||||||
+ reply_type = NULL;
|
|
||||||
+
|
|
||||||
was_split = maybe_split_method_name (method_name, &split_interface_name, &split_method_name);
|
|
||||||
target_method_name = was_split ? split_method_name : method_name;
|
|
||||||
target_interface_name = was_split ? split_interface_name : proxy->priv->interface_name;
|
|
||||||
|
|
||||||
- if (proxy->priv->expected_interface)
|
|
||||||
+ /* Warn if method is unexpected (cf. :g-interface-info) */
|
|
||||||
+ if (!was_split)
|
|
||||||
{
|
|
||||||
- expected_method_info = g_dbus_interface_info_lookup_method (proxy->priv->expected_interface, target_method_name);
|
|
||||||
- if (expected_method_info == NULL)
|
|
||||||
- {
|
|
||||||
- g_warning ("Trying to invoke method `%s' which isn't in expected interface `%s'",
|
|
||||||
- target_method_name,
|
|
||||||
- target_interface_name);
|
|
||||||
- }
|
|
||||||
+ const GDBusMethodInfo *expected_method_info;
|
|
||||||
+ expected_method_info = lookup_method_info_or_warn (proxy, target_method_name);
|
|
||||||
+ if (expected_method_info != NULL)
|
|
||||||
+ reply_type = _g_dbus_compute_complete_signature (expected_method_info->out_args);
|
|
||||||
}
|
|
||||||
- else
|
|
||||||
+
|
|
||||||
+ destination = NULL;
|
|
||||||
+ if (proxy->priv->name != NULL)
|
|
||||||
{
|
|
||||||
- expected_method_info = NULL;
|
|
||||||
+ destination = get_destination_for_call (proxy);
|
|
||||||
+ if (destination == NULL)
|
|
||||||
+ {
|
|
||||||
+ g_set_error_literal (error,
|
|
||||||
+ G_IO_ERROR,
|
|
||||||
+ G_IO_ERROR_FAILED,
|
|
||||||
+ _("Cannot invoke method; proxy is for a well-known name without an owner and proxy was constructed with the G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START flag"));
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (expected_method_info)
|
|
||||||
- reply_type = _g_dbus_compute_complete_signature (expected_method_info->out_args);
|
|
||||||
- else
|
|
||||||
- reply_type = NULL;
|
|
||||||
-
|
|
||||||
ret = g_dbus_connection_call_sync (proxy->priv->connection,
|
|
||||||
- proxy->priv->name_owner,
|
|
||||||
+ destination,
|
|
||||||
proxy->priv->object_path,
|
|
||||||
target_interface_name,
|
|
||||||
target_method_name,
|
|
||||||
@@ -2439,6 +2490,7 @@ g_dbus_proxy_call_sync (GDBusProxy *proxy,
|
|
||||||
cancellable,
|
|
||||||
error);
|
|
||||||
|
|
||||||
+ out:
|
|
||||||
if (reply_type != NULL)
|
|
||||||
g_variant_type_free (reply_type);
|
|
||||||
|
|
||||||
--
|
|
||||||
1.7.2.1
|
|
||||||
|
|
@ -1,110 +0,0 @@
|
|||||||
From c91720255261222d7be685f3a8f039706f04cce5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Matthias Clasen <mclasen@redhat.com>
|
|
||||||
Date: Mon, 6 Jun 2011 23:23:29 -0400
|
|
||||||
Subject: [PATCH 1/2] GDataList: don't hold the bitlock over callbacks
|
|
||||||
|
|
||||||
g_datalist_id_clear_i was dropping the dataset lock around
|
|
||||||
the destroy notifies, but kept the bitlock. This was causing
|
|
||||||
deadlocks when finalizing widgets.
|
|
||||||
---
|
|
||||||
glib/gdataset.c | 45 +++++++++++++++++++++++++++++----------------
|
|
||||||
1 files changed, 29 insertions(+), 16 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gdataset.c b/glib/gdataset.c
|
|
||||||
index e1b55c1..0c1f9c1 100644
|
|
||||||
--- a/glib/gdataset.c
|
|
||||||
+++ b/glib/gdataset.c
|
|
||||||
@@ -176,8 +176,7 @@ struct _GDataset
|
|
||||||
|
|
||||||
/* --- prototypes --- */
|
|
||||||
static inline GDataset* g_dataset_lookup (gconstpointer dataset_location);
|
|
||||||
-static inline void g_datalist_clear_i (GData **datalist,
|
|
||||||
- gboolean unlock_dataset);
|
|
||||||
+static inline void g_datalist_clear_i (GData **datalist);
|
|
||||||
static void g_dataset_destroy_internal (GDataset *dataset);
|
|
||||||
static inline gpointer g_data_set_internal (GData **datalist,
|
|
||||||
GQuark key_id,
|
|
||||||
@@ -228,8 +227,8 @@ g_datalist_unlock (GData **datalist)
|
|
||||||
/* Called with the datalist lock held, or the dataset global
|
|
||||||
* lock for dataset lists
|
|
||||||
*/
|
|
||||||
-void
|
|
||||||
-g_datalist_clear_i (GData **datalist, gboolean unlock_dataset)
|
|
||||||
+static void
|
|
||||||
+g_datalist_clear_i (GData **datalist)
|
|
||||||
{
|
|
||||||
GData *data;
|
|
||||||
gint i;
|
|
||||||
@@ -239,15 +238,13 @@ g_datalist_clear_i (GData **datalist, gboolean unlock_dataset)
|
|
||||||
|
|
||||||
if (data)
|
|
||||||
{
|
|
||||||
- if (unlock_dataset)
|
|
||||||
- G_UNLOCK (g_dataset_global);
|
|
||||||
+ G_UNLOCK (g_dataset_global);
|
|
||||||
for (i = 0; i < data->len; i++)
|
|
||||||
- {
|
|
||||||
- if (data->data[i].data && data->data[i].destroy)
|
|
||||||
- data->data[i].destroy (data->data[i].data);
|
|
||||||
- }
|
|
||||||
- if (unlock_dataset)
|
|
||||||
- G_LOCK (g_dataset_global);
|
|
||||||
+ {
|
|
||||||
+ if (data->data[i].data && data->data[i].destroy)
|
|
||||||
+ data->data[i].destroy (data->data[i].data);
|
|
||||||
+ }
|
|
||||||
+ G_LOCK (g_dataset_global);
|
|
||||||
|
|
||||||
g_free (data);
|
|
||||||
}
|
|
||||||
@@ -258,19 +255,35 @@ g_datalist_clear_i (GData **datalist, gboolean unlock_dataset)
|
|
||||||
* g_datalist_clear:
|
|
||||||
* @datalist: a datalist.
|
|
||||||
*
|
|
||||||
- * Frees all the data elements of the datalist. The data elements'
|
|
||||||
- * destroy functions are called if they have been set.
|
|
||||||
+ * Frees all the data elements of the datalist.
|
|
||||||
+ * The data elements' destroy functions are called
|
|
||||||
+ * if they have been set.
|
|
||||||
**/
|
|
||||||
void
|
|
||||||
g_datalist_clear (GData **datalist)
|
|
||||||
{
|
|
||||||
+ GData *data;
|
|
||||||
+ gint i;
|
|
||||||
+
|
|
||||||
g_return_if_fail (datalist != NULL);
|
|
||||||
|
|
||||||
g_datalist_lock (datalist);
|
|
||||||
|
|
||||||
- g_datalist_clear_i (datalist, FALSE);
|
|
||||||
+ data = G_DATALIST_GET_POINTER (datalist);
|
|
||||||
+ G_DATALIST_SET_POINTER (datalist, NULL);
|
|
||||||
|
|
||||||
g_datalist_unlock (datalist);
|
|
||||||
+
|
|
||||||
+ if (data)
|
|
||||||
+ {
|
|
||||||
+ for (i = 0; i < data->len; i++)
|
|
||||||
+ {
|
|
||||||
+ if (data->data[i].data && data->data[i].destroy)
|
|
||||||
+ data->data[i].destroy (data->data[i].data);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ g_free (data);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* HOLDS: g_dataset_global_lock */
|
|
||||||
@@ -307,7 +320,7 @@ g_dataset_destroy_internal (GDataset *dataset)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
- g_datalist_clear_i (&dataset->datalist, TRUE);
|
|
||||||
+ g_datalist_clear_i (&dataset->datalist);
|
|
||||||
dataset = g_dataset_lookup (dataset_location);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
--
|
|
||||||
1.7.5.2
|
|
||||||
|
|
218
0001-closure-fix-handling-of-ENUMs-and-integral-return-ty.patch
Normal file
218
0001-closure-fix-handling-of-ENUMs-and-integral-return-ty.patch
Normal file
@ -0,0 +1,218 @@
|
|||||||
|
From 8e82225aedf81ea8a33deb3eb27a8878cd606521 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dan Williams <dcbw@redhat.com>
|
||||||
|
Date: Fri, 23 Sep 2011 12:32:23 -0500
|
||||||
|
Subject: [PATCH] closure: fix handling of ENUMs and integral return types on
|
||||||
|
64-bit BE platforms
|
||||||
|
|
||||||
|
enums are stored in v_long but need to be marshalled as signed
|
||||||
|
integers. On platforms where int is 32 bits, taking the
|
||||||
|
address of v_long resulted in the wrong 32 bits being marshalled.
|
||||||
|
So we need to stuff the enum's int-sized value to a temporary
|
||||||
|
int-sized variable and marshall that instead.
|
||||||
|
|
||||||
|
Second, on return, libffi actually returns a pointer to a value
|
||||||
|
that's sized according to platform conventions, not according to
|
||||||
|
what the caller requested. ie if ffi_type_sint was requested, the
|
||||||
|
value can still be a 64-bit sign-extended long on a 64-bit
|
||||||
|
architecture like PPC64, thus the caller cannot simply cast
|
||||||
|
the return value as a pointer to the desired type, but must cast
|
||||||
|
as a pointer to an integral type and then cast to the desired
|
||||||
|
type to remove any sign extension complications.
|
||||||
|
|
||||||
|
For more information on how to correctly handle libffi return
|
||||||
|
values, see the following bug, specifically comment 35:
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=736489
|
||||||
|
|
||||||
|
"For 64-bit ABIs that extend integral returns types to 64-bits, libffi always
|
||||||
|
returns full 64-bit values that you can truncate in the calling code. It's
|
||||||
|
just the way it is has always been. Please don't change libffi. I'll document
|
||||||
|
this clearly for the next version (perhaps there is a mention of this, I
|
||||||
|
haven't looked yet).
|
||||||
|
|
||||||
|
The same is true for returning 8-bit values, for instance, on 32-bit systems.
|
||||||
|
All ABIs extend those results to the full 32-bits so you need to provide a
|
||||||
|
properly aligned buffer that's big enough to hold the result."
|
||||||
|
|
||||||
|
https://bugzilla.gnome.org/show_bug.cgi?id=659881
|
||||||
|
---
|
||||||
|
gobject/gclosure.c | 76 ++++++++++++++++++++++++++++++++++++++++-----------
|
||||||
|
1 files changed, 59 insertions(+), 17 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/gobject/gclosure.c b/gobject/gclosure.c
|
||||||
|
index 36ec4b0..6893484 100644
|
||||||
|
--- a/gobject/gclosure.c
|
||||||
|
+++ b/gobject/gclosure.c
|
||||||
|
@@ -944,21 +944,42 @@ g_signal_type_cclosure_new (GType itype,
|
||||||
|
|
||||||
|
#include <ffi.h>
|
||||||
|
static ffi_type *
|
||||||
|
-value_to_ffi_type (const GValue *gvalue, gpointer *value)
|
||||||
|
+value_to_ffi_type (const GValue *gvalue,
|
||||||
|
+ gpointer *value,
|
||||||
|
+ gint *enum_tmpval,
|
||||||
|
+ gboolean *tmpval_used)
|
||||||
|
{
|
||||||
|
ffi_type *rettype = NULL;
|
||||||
|
GType type = g_type_fundamental (G_VALUE_TYPE (gvalue));
|
||||||
|
g_assert (type != G_TYPE_INVALID);
|
||||||
|
|
||||||
|
+ if (enum_tmpval)
|
||||||
|
+ {
|
||||||
|
+ g_assert (tmpval_used != NULL);
|
||||||
|
+ *tmpval_used = FALSE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case G_TYPE_BOOLEAN:
|
||||||
|
case G_TYPE_CHAR:
|
||||||
|
case G_TYPE_INT:
|
||||||
|
- case G_TYPE_ENUM:
|
||||||
|
rettype = &ffi_type_sint;
|
||||||
|
*value = (gpointer)&(gvalue->data[0].v_int);
|
||||||
|
break;
|
||||||
|
+ case G_TYPE_ENUM:
|
||||||
|
+ /* enums are stored in v_long even though they are integers, which makes
|
||||||
|
+ * marshalling through libffi somewhat complicated. They need to be
|
||||||
|
+ * marshalled as signed ints, but we need to use a temporary int sized
|
||||||
|
+ * value to pass to libffi otherwise it'll pull the wrong value on
|
||||||
|
+ * BE machines with 32-bit integers when treating v_long as 32-bit int.
|
||||||
|
+ */
|
||||||
|
+ g_assert (enum_tmpval != NULL);
|
||||||
|
+ rettype = &ffi_type_sint;
|
||||||
|
+ *enum_tmpval = g_value_get_enum (gvalue);
|
||||||
|
+ *value = enum_tmpval;
|
||||||
|
+ *tmpval_used = TRUE;
|
||||||
|
+ break;
|
||||||
|
case G_TYPE_UCHAR:
|
||||||
|
case G_TYPE_UINT:
|
||||||
|
case G_TYPE_FLAGS:
|
||||||
|
@@ -1011,10 +1032,12 @@ value_to_ffi_type (const GValue *gvalue, gpointer *value)
|
||||||
|
static void
|
||||||
|
value_from_ffi_type (GValue *gvalue, gpointer *value)
|
||||||
|
{
|
||||||
|
+ ffi_arg *int_val = value;
|
||||||
|
+
|
||||||
|
switch (g_type_fundamental (G_VALUE_TYPE (gvalue)))
|
||||||
|
{
|
||||||
|
case G_TYPE_INT:
|
||||||
|
- g_value_set_int (gvalue, *(gint*)value);
|
||||||
|
+ g_value_set_int (gvalue, (gint) *int_val);
|
||||||
|
break;
|
||||||
|
case G_TYPE_FLOAT:
|
||||||
|
g_value_set_float (gvalue, *(gfloat*)value);
|
||||||
|
@@ -1023,43 +1046,43 @@ value_from_ffi_type (GValue *gvalue, gpointer *value)
|
||||||
|
g_value_set_double (gvalue, *(gdouble*)value);
|
||||||
|
break;
|
||||||
|
case G_TYPE_BOOLEAN:
|
||||||
|
- g_value_set_boolean (gvalue, *(gboolean*)value);
|
||||||
|
+ g_value_set_boolean (gvalue, (gboolean) *int_val);
|
||||||
|
break;
|
||||||
|
case G_TYPE_STRING:
|
||||||
|
g_value_set_string (gvalue, *(gchar**)value);
|
||||||
|
break;
|
||||||
|
case G_TYPE_CHAR:
|
||||||
|
- g_value_set_char (gvalue, *(gchar*)value);
|
||||||
|
+ g_value_set_char (gvalue, (gchar) *int_val);
|
||||||
|
break;
|
||||||
|
case G_TYPE_UCHAR:
|
||||||
|
- g_value_set_uchar (gvalue, *(guchar*)value);
|
||||||
|
+ g_value_set_uchar (gvalue, (guchar) *int_val);
|
||||||
|
break;
|
||||||
|
case G_TYPE_UINT:
|
||||||
|
- g_value_set_uint (gvalue, *(guint*)value);
|
||||||
|
+ g_value_set_uint (gvalue, (guint) *int_val);
|
||||||
|
break;
|
||||||
|
case G_TYPE_POINTER:
|
||||||
|
g_value_set_pointer (gvalue, *(gpointer*)value);
|
||||||
|
break;
|
||||||
|
case G_TYPE_LONG:
|
||||||
|
- g_value_set_long (gvalue, *(glong*)value);
|
||||||
|
+ g_value_set_long (gvalue, (glong) *int_val);
|
||||||
|
break;
|
||||||
|
case G_TYPE_ULONG:
|
||||||
|
- g_value_set_ulong (gvalue, *(gulong*)value);
|
||||||
|
+ g_value_set_ulong (gvalue, (gulong) *int_val);
|
||||||
|
break;
|
||||||
|
case G_TYPE_INT64:
|
||||||
|
- g_value_set_int64 (gvalue, *(gint64*)value);
|
||||||
|
+ g_value_set_int64 (gvalue, (gint64) *int_val);
|
||||||
|
break;
|
||||||
|
case G_TYPE_UINT64:
|
||||||
|
- g_value_set_uint64 (gvalue, *(guint64*)value);
|
||||||
|
+ g_value_set_uint64 (gvalue, (guint64) *int_val);
|
||||||
|
break;
|
||||||
|
case G_TYPE_BOXED:
|
||||||
|
g_value_set_boxed (gvalue, *(gpointer*)value);
|
||||||
|
break;
|
||||||
|
case G_TYPE_ENUM:
|
||||||
|
- g_value_set_enum (gvalue, *(gint*)value);
|
||||||
|
+ g_value_set_enum (gvalue, (gint) *int_val);
|
||||||
|
break;
|
||||||
|
case G_TYPE_FLAGS:
|
||||||
|
- g_value_set_flags (gvalue, *(guint*)value);
|
||||||
|
+ g_value_set_flags (gvalue, (guint) *int_val);
|
||||||
|
break;
|
||||||
|
case G_TYPE_PARAM:
|
||||||
|
g_value_set_param (gvalue, *(gpointer*)value);
|
||||||
|
@@ -1108,10 +1131,13 @@ g_cclosure_marshal_generic (GClosure *closure,
|
||||||
|
int i;
|
||||||
|
ffi_cif cif;
|
||||||
|
GCClosure *cc = (GCClosure*) closure;
|
||||||
|
+ gint *enum_tmpval;
|
||||||
|
+ gboolean tmpval_used = FALSE;
|
||||||
|
|
||||||
|
+ enum_tmpval = g_alloca (sizeof (gint));
|
||||||
|
if (return_gvalue && G_VALUE_TYPE (return_gvalue))
|
||||||
|
{
|
||||||
|
- rtype = value_to_ffi_type (return_gvalue, &rvalue);
|
||||||
|
+ rtype = value_to_ffi_type (return_gvalue, &rvalue, enum_tmpval, &tmpval_used);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
@@ -1124,22 +1150,38 @@ g_cclosure_marshal_generic (GClosure *closure,
|
||||||
|
atypes = g_alloca (sizeof (ffi_type *) * n_args);
|
||||||
|
args = g_alloca (sizeof (gpointer) * n_args);
|
||||||
|
|
||||||
|
+ if (tmpval_used)
|
||||||
|
+ enum_tmpval = g_alloca (sizeof (gint));
|
||||||
|
+
|
||||||
|
if (G_CCLOSURE_SWAP_DATA (closure))
|
||||||
|
{
|
||||||
|
atypes[n_args-1] = value_to_ffi_type (param_values + 0,
|
||||||
|
- &args[n_args-1]);
|
||||||
|
+ &args[n_args-1],
|
||||||
|
+ enum_tmpval,
|
||||||
|
+ &tmpval_used);
|
||||||
|
atypes[0] = &ffi_type_pointer;
|
||||||
|
args[0] = &closure->data;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- atypes[0] = value_to_ffi_type (param_values + 0, &args[0]);
|
||||||
|
+ atypes[0] = value_to_ffi_type (param_values + 0,
|
||||||
|
+ &args[0],
|
||||||
|
+ enum_tmpval,
|
||||||
|
+ &tmpval_used);
|
||||||
|
atypes[n_args-1] = &ffi_type_pointer;
|
||||||
|
args[n_args-1] = &closure->data;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 1; i < n_args - 1; i++)
|
||||||
|
- atypes[i] = value_to_ffi_type (param_values + i, &args[i]);
|
||||||
|
+ {
|
||||||
|
+ if (tmpval_used)
|
||||||
|
+ enum_tmpval = g_alloca (sizeof (gint));
|
||||||
|
+
|
||||||
|
+ atypes[i] = value_to_ffi_type (param_values + i,
|
||||||
|
+ &args[i],
|
||||||
|
+ enum_tmpval,
|
||||||
|
+ &tmpval_used);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (ffi_prep_cif (&cif, FFI_DEFAULT_ABI, n_args, rtype, atypes) != FFI_OK)
|
||||||
|
return;
|
||||||
|
--
|
||||||
|
1.7.6.4
|
||||||
|
|
@ -1,62 +0,0 @@
|
|||||||
From 3ce857f9a489ef3dbfda685623aaea108e53c89a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jonathan Matthew <jonathan@d14n.org>
|
|
||||||
Date: Sun, 27 Mar 2011 10:44:31 +1000
|
|
||||||
Subject: [PATCH] introspection: add annotations for g_file_load_contents and friends
|
|
||||||
|
|
||||||
https://bugzilla.gnome.org/show_bug.cgi?id=645789
|
|
||||||
---
|
|
||||||
gio/gfile.c | 10 +++++-----
|
|
||||||
1 files changed, 5 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/gio/gfile.c b/gio/gfile.c
|
|
||||||
index da3477b..4cecc8a 100644
|
|
||||||
--- a/gio/gfile.c
|
|
||||||
+++ b/gio/gfile.c
|
|
||||||
@@ -6124,7 +6124,7 @@ g_file_query_default_handler (GFile *file,
|
|
||||||
* g_file_load_contents:
|
|
||||||
* @file: input #GFile.
|
|
||||||
* @cancellable: optional #GCancellable object, %NULL to ignore.
|
|
||||||
- * @contents: (out) (transfer full): a location to place the contents of the file.
|
|
||||||
+ * @contents: (out) (transfer full) (element-type guint8) (array length=length): a location to place the contents of the file.
|
|
||||||
* @length: (out) (allow-none): a location to place the length of the contents of the file,
|
|
||||||
* or %NULL if the length is not needed
|
|
||||||
* @etag_out: (out) (allow-none): a location to place the current entity tag for the file,
|
|
||||||
@@ -6431,7 +6431,7 @@ g_file_load_partial_contents_async (GFile *file,
|
|
||||||
* g_file_load_partial_contents_finish:
|
|
||||||
* @file: input #GFile.
|
|
||||||
* @res: a #GAsyncResult.
|
|
||||||
- * @contents: (out) (transfer full): a location to place the contents of the file.
|
|
||||||
+ * @contents: (out) (transfer full) (element-type guint8) (array length=length): a location to place the contents of the file.
|
|
||||||
* @length: (out) (allow-none): a location to place the length of the contents of the file,
|
|
||||||
* or %NULL if the length is not needed
|
|
||||||
* @etag_out: (out) (allow-none): a location to place the current entity tag for the file,
|
|
||||||
@@ -6537,7 +6537,7 @@ g_file_load_contents_async (GFile *file,
|
|
||||||
* g_file_load_contents_finish:
|
|
||||||
* @file: input #GFile.
|
|
||||||
* @res: a #GAsyncResult.
|
|
||||||
- * @contents: (out) (transfer full): a location to place the contents of the file.
|
|
||||||
+ * @contents: (out) (transfer full) (element-type guint8) (array length=length): a location to place the contents of the file.
|
|
||||||
* @length: (out) (allow-none): a location to place the length of the contents of the file,
|
|
||||||
* or %NULL if the length is not needed
|
|
||||||
* @etag_out: (out) (allow-none): a location to place the current entity tag for the file,
|
|
||||||
@@ -6572,7 +6572,7 @@ g_file_load_contents_finish (GFile *file,
|
|
||||||
/**
|
|
||||||
* g_file_replace_contents:
|
|
||||||
* @file: input #GFile.
|
|
||||||
- * @contents: a string containing the new contents for @file.
|
|
||||||
+ * @contents: (element-type guint8) (array length=length): a string containing the new contents for @file.
|
|
||||||
* @length: the length of @contents in bytes.
|
|
||||||
* @etag: (allow-none): the old <link linkend="gfile-etag">entity tag</link>
|
|
||||||
* for the document, or %NULL
|
|
||||||
@@ -6785,7 +6785,7 @@ replace_contents_open_callback (GObject *obj,
|
|
||||||
/**
|
|
||||||
* g_file_replace_contents_async:
|
|
||||||
* @file: input #GFile.
|
|
||||||
- * @contents: string of contents to replace the file with.
|
|
||||||
+ * @contents: (element-type guint8) (array length=length): string of contents to replace the file with.
|
|
||||||
* @length: the length of @contents in bytes.
|
|
||||||
* @etag: (allow-none): a new <link linkend="gfile-etag">entity tag</link> for the @file, or %NULL
|
|
||||||
* @make_backup: %TRUE if a backup should be created.
|
|
||||||
--
|
|
||||||
1.7.4.2
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
|||||||
From a7689537605ade51b19be76baa3fba303527483d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ryan Lortie <desrt@desrt.ca>
|
|
||||||
Date: Sat, 19 Jun 2010 11:38:57 -0400
|
|
||||||
Subject: [PATCH 03/45] Fix bug in strinfo
|
|
||||||
|
|
||||||
We can't search for a larger needle inside of a smaller haystack, and
|
|
||||||
unsigned integer subtraction tends to result in very large numbers
|
|
||||||
rather than small ones.
|
|
||||||
|
|
||||||
Add a check for this case and abort out immediately.
|
|
||||||
|
|
||||||
Also add a test case (lifted directly from the docs) that demonstrates
|
|
||||||
the problem.
|
|
||||||
|
|
||||||
Issue discovered and tracked down by Milan Bouchet-Valat
|
|
||||||
---
|
|
||||||
gio/strinfo.c | 3 ++
|
|
||||||
gio/tests/gschema-compile.c | 3 +-
|
|
||||||
gio/tests/schema-tests/from-docs.gschema.xml | 34 ++++++++++++++++++++++++++
|
|
||||||
3 files changed, 39 insertions(+), 1 deletions(-)
|
|
||||||
create mode 100644 gio/tests/schema-tests/from-docs.gschema.xml
|
|
||||||
|
|
||||||
diff --git a/gio/strinfo.c b/gio/strinfo.c
|
|
||||||
index 9ba18aa..f762fc5 100644
|
|
||||||
--- a/gio/strinfo.c
|
|
||||||
+++ b/gio/strinfo.c
|
|
||||||
@@ -147,6 +147,9 @@ strinfo_scan (const guint32 *strinfo,
|
|
||||||
{
|
|
||||||
guint i = 0;
|
|
||||||
|
|
||||||
+ if (length < n_words)
|
|
||||||
+ return -1;
|
|
||||||
+
|
|
||||||
while (i <= length - n_words)
|
|
||||||
{
|
|
||||||
guint j = 0;
|
|
@ -1,120 +0,0 @@
|
|||||||
Index: gio/glocalfileinfo.c
|
|
||||||
===================================================================
|
|
||||||
--- gio/glocalfileinfo.c (revision 6871)
|
|
||||||
+++ gio/glocalfileinfo.c (working copy)
|
|
||||||
@@ -1706,6 +1706,24 @@
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
+get_string (const GFileAttributeValue *value,
|
|
||||||
+ const char **val_out,
|
|
||||||
+ GError **error)
|
|
||||||
+{
|
|
||||||
+ if (value->type != G_FILE_ATTRIBUTE_TYPE_STRING)
|
|
||||||
+ {
|
|
||||||
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
|
|
||||||
+ _("Invalid attribute type (byte string expected)"));
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ *val_out = value->u.string;
|
|
||||||
+
|
|
||||||
+ return TRUE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+static gboolean
|
|
||||||
set_unix_mode (char *filename,
|
|
||||||
const GFileAttributeValue *value,
|
|
||||||
GError **error)
|
|
||||||
@@ -1948,6 +1966,52 @@
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+
|
|
||||||
+static gboolean
|
|
||||||
+set_selinux_context (char *filename,
|
|
||||||
+ const GFileAttributeValue *value,
|
|
||||||
+ GError **error)
|
|
||||||
+{
|
|
||||||
+ const char *val;
|
|
||||||
+
|
|
||||||
+ if (!get_string (value, &val, error))
|
|
||||||
+ return FALSE;
|
|
||||||
+
|
|
||||||
+ if (val == NULL)
|
|
||||||
+ {
|
|
||||||
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
|
|
||||||
+ _("SELinux context must be non-NULL"));
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+#ifdef HAVE_SELINUX
|
|
||||||
+ if (is_selinux_enabled ()) {
|
|
||||||
+ security_context_t val_s;
|
|
||||||
+
|
|
||||||
+ val_s = g_strdup (val);
|
|
||||||
+
|
|
||||||
+ if (setfilecon_raw (filename, val_s) < 0)
|
|
||||||
+ {
|
|
||||||
+ int errsv = errno;
|
|
||||||
+
|
|
||||||
+ g_set_error (error, G_IO_ERROR,
|
|
||||||
+ g_io_error_from_errno (errsv),
|
|
||||||
+ _("Error setting SELinux context: %s"),
|
|
||||||
+ g_strerror (errsv));
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+ g_free (val_s);
|
|
||||||
+ } else {
|
|
||||||
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
|
|
||||||
+ _("SELinux is not enabled on this system"));
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+ return TRUE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
gboolean
|
|
||||||
_g_local_file_info_set_attribute (char *filename,
|
|
||||||
const char *attribute,
|
|
||||||
@@ -1993,6 +2057,11 @@
|
|
||||||
else if (g_str_has_prefix (attribute, "xattr-sys::"))
|
|
||||||
return set_xattr (filename, attribute, &value, error);
|
|
||||||
#endif
|
|
||||||
+
|
|
||||||
+#ifdef HAVE_SELINUX
|
|
||||||
+ else if (strcmp (attribute, G_FILE_ATTRIBUTE_SELINUX_CONTEXT) == 0)
|
|
||||||
+ return set_selinux_context (filename, &value, error);
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
|
|
||||||
_("Setting attribute %s not supported"), attribute);
|
|
||||||
@@ -2110,5 +2179,25 @@
|
|
||||||
|
|
||||||
/* xattrs are handled by default callback */
|
|
||||||
|
|
||||||
+
|
|
||||||
+ /* SELinux context */
|
|
||||||
+#ifdef HAVE_SELINUX
|
|
||||||
+ if (is_selinux_enabled ()) {
|
|
||||||
+ value = _g_file_info_get_attribute_value (info, G_FILE_ATTRIBUTE_SELINUX_CONTEXT);
|
|
||||||
+ if (value)
|
|
||||||
+ {
|
|
||||||
+ if (!set_selinux_context (filename, value, error))
|
|
||||||
+ {
|
|
||||||
+ value->status = G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING;
|
|
||||||
+ res = FALSE;
|
|
||||||
+ /* Don't set error multiple times */
|
|
||||||
+ error = NULL;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ value->status = G_FILE_ATTRIBUTE_STATUS_SET;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
return res;
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
diff -up glib-2.23.2/glib/gtestutils.c.abort_msg glib-2.23.2/glib/gtestutils.c
|
|
||||||
--- glib-2.23.2/glib/gtestutils.c.abort_msg 2010-01-25 18:32:10.793495994 -0500
|
|
||||||
+++ glib-2.23.2/glib/gtestutils.c 2010-01-25 18:33:23.898497049 -0500
|
|
||||||
@@ -40,7 +40,12 @@
|
|
||||||
#ifdef HAVE_SYS_SELECT_H
|
|
||||||
#include <sys/select.h>
|
|
||||||
#endif /* HAVE_SYS_SELECT_H */
|
|
||||||
-
|
|
||||||
+
|
|
||||||
+/* We can't use the libc variable, since rpm doesn't let us depend on
|
|
||||||
+ * GLIBC_PRIVATE symbols.
|
|
||||||
+ */
|
|
||||||
+#undef HAVE_LIBC_ABORT_MSG
|
|
||||||
+
|
|
||||||
/* if we have a recent enough glibc, use its __abort_msg variable for storing
|
|
||||||
* assertion messages (just like assert()). If not, declare our own variable,
|
|
||||||
* so that platforms with older glibc or different libc implementations can use
|
|
41
glib2.spec
41
glib2.spec
@ -2,13 +2,15 @@
|
|||||||
|
|
||||||
Summary: A library of handy utility functions
|
Summary: A library of handy utility functions
|
||||||
Name: glib2
|
Name: glib2
|
||||||
Version: 2.29.14
|
Version: 2.30.3
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
Group: System Environment/Libraries
|
Group: System Environment/Libraries
|
||||||
URL: http://www.gtk.org
|
URL: http://www.gtk.org
|
||||||
#VCS: git:git://git.gnome.org/glib
|
#VCS: git:git://git.gnome.org/glib
|
||||||
Source: http://download.gnome.org/sources/glib/2.29/glib-%{version}.tar.xz
|
Source: http://download.gnome.org/sources/glib/2.30/glib-%{version}.tar.xz
|
||||||
|
|
||||||
|
Patch0: 0001-closure-fix-handling-of-ENUMs-and-integral-return-ty.patch
|
||||||
|
|
||||||
BuildRequires: pkgconfig
|
BuildRequires: pkgconfig
|
||||||
BuildRequires: gamin-devel
|
BuildRequires: gamin-devel
|
||||||
@ -57,6 +59,7 @@ The glib2-static package includes static libraries of the GLib library.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n glib-%{version}
|
%setup -q -n glib-%{version}
|
||||||
|
%patch0 -p1 -b .ffi
|
||||||
|
|
||||||
%build
|
%build
|
||||||
# Support builds of both git snapshots and tarballs packed with autogoo
|
# Support builds of both git snapshots and tarballs packed with autogoo
|
||||||
@ -98,7 +101,6 @@ gio-querymodules-%{__isa_bits} %{_libdir}/gio/modules
|
|||||||
|
|
||||||
|
|
||||||
%files -f glib20.lang
|
%files -f glib20.lang
|
||||||
%defattr(-, root, root, -)
|
|
||||||
%doc AUTHORS COPYING NEWS README
|
%doc AUTHORS COPYING NEWS README
|
||||||
%{libdir}/libglib-2.0.so.*
|
%{libdir}/libglib-2.0.so.*
|
||||||
%{libdir}/libgthread-2.0.so.*
|
%{libdir}/libgthread-2.0.so.*
|
||||||
@ -123,7 +125,6 @@ gio-querymodules-%{__isa_bits} %{_libdir}/gio/modules
|
|||||||
|
|
||||||
|
|
||||||
%files devel
|
%files devel
|
||||||
%defattr(-, root, root, -)
|
|
||||||
%{_libdir}/lib*.so
|
%{_libdir}/lib*.so
|
||||||
%{_libdir}/glib-2.0
|
%{_libdir}/glib-2.0
|
||||||
%{_includedir}/*
|
%{_includedir}/*
|
||||||
@ -140,8 +141,8 @@ gio-querymodules-%{__isa_bits} %{_libdir}/gio/modules
|
|||||||
%{_bindir}/gobject-query
|
%{_bindir}/gobject-query
|
||||||
%{_bindir}/gtester
|
%{_bindir}/gtester
|
||||||
%{_bindir}/gdbus-codegen
|
%{_bindir}/gdbus-codegen
|
||||||
%dir %{_libdir}/gdbus-codegen
|
%dir %{_libdir}/gdbus-2.0/codegen
|
||||||
%{_libdir}/gdbus-codegen
|
%{_libdir}/gdbus-2.0/codegen
|
||||||
%attr (0755, root, root) %{_bindir}/gtester-report
|
%attr (0755, root, root) %{_bindir}/gtester-report
|
||||||
%doc %{_datadir}/gtk-doc/html/*
|
%doc %{_datadir}/gtk-doc/html/*
|
||||||
%doc %{_mandir}/man1/glib-genmarshal.1.gz
|
%doc %{_mandir}/man1/glib-genmarshal.1.gz
|
||||||
@ -157,11 +158,37 @@ gio-querymodules-%{__isa_bits} %{_libdir}/gio/modules
|
|||||||
|
|
||||||
|
|
||||||
%files static
|
%files static
|
||||||
%defattr(-, root, root, -)
|
|
||||||
%{_libdir}/lib*.a
|
%{_libdir}/lib*.a
|
||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sun Mar 11 2012 Matthias Clasen <mclasen@redhat.com> - 2.30.3-1
|
||||||
|
- Update to 2.30.3
|
||||||
|
|
||||||
|
* Mon Jan 9 2012 Dan Williams <dcbw@redhat.com> - 2.30.2-1
|
||||||
|
- Update to 2.30.2
|
||||||
|
|
||||||
|
* Fri Oct 14 2011 Matthias Clasen <mclasen@redhat.com> - 2.30.1-1
|
||||||
|
- Update to 2.30.1
|
||||||
|
|
||||||
|
* Wed Oct 05 2011 Dan Williams <dcbw@redhat.com> - 2.30.0-2
|
||||||
|
- Fix signal marshalling on 64-bit big-endian platforms (rh #736489)
|
||||||
|
|
||||||
|
* Mon Sep 26 2011 Ray <rstrode@redhat.com> - 2.30.0-1
|
||||||
|
- Update to 2.30.0
|
||||||
|
|
||||||
|
* Mon Sep 19 2011 Matthias Clasen <mclasen@redhat.com> - 2.29.92-1
|
||||||
|
- Update to 2.29.92
|
||||||
|
|
||||||
|
* Tue Sep 6 2011 Matthias Clasen <mclasen@redhat.com> - 2.29.90-1
|
||||||
|
- Update to 2.29.90
|
||||||
|
|
||||||
|
* Tue Aug 30 2011 Matthias Clasen <mclasen@redhat.com> - 2.29.18-1
|
||||||
|
- Update to 2.29.18
|
||||||
|
|
||||||
|
* Tue Aug 16 2011 Matthias Clasen <mclasen@redhat.com> - 2.29.16-1
|
||||||
|
- Update to 2.29.16
|
||||||
|
|
||||||
* Sat Jul 23 2011 Matthias Clasen <mclasen@redhat.com> - 2.29.14-1
|
* Sat Jul 23 2011 Matthias Clasen <mclasen@redhat.com> - 2.29.14-1
|
||||||
- Update to 2.29.14
|
- Update to 2.29.14
|
||||||
|
|
||||||
|
43
pyloc.patch
43
pyloc.patch
@ -1,43 +0,0 @@
|
|||||||
diff -up glib-2.22.0/configure.in.pyloc glib-2.22.0/configure.in
|
|
||||||
--- glib-2.22.0/configure.in.pyloc 2009-09-22 09:40:56.000000000 -0400
|
|
||||||
+++ glib-2.22.0/configure.in 2009-09-23 15:37:23.729418282 -0400
|
|
||||||
@@ -256,8 +256,10 @@ AC_ARG_WITH(runtime-libdir,
|
|
||||||
[Install runtime libraries relative to libdir])],
|
|
||||||
[],
|
|
||||||
[with_runtime_libdir=""])
|
|
||||||
-GLIB_RUNTIME_LIBDIR=$with_runtime_libdir
|
|
||||||
+GLIB_RUNTIME_LIBDIR="$with_runtime_libdir"
|
|
||||||
+ABS_GLIB_RUNTIME_LIBDIR="`readlink -f $libdir/$with_runtime_libdir`"
|
|
||||||
AC_SUBST(GLIB_RUNTIME_LIBDIR)
|
|
||||||
+AC_SUBST(ABS_GLIB_RUNTIME_LIBDIR)
|
|
||||||
AM_CONDITIONAL(HAVE_GLIB_RUNTIME_LIBDIR, [test "x$with_runtime_libdir" != "x"])
|
|
||||||
|
|
||||||
dnl Checks for programs.
|
|
||||||
diff -up glib-2.22.0/glib/Makefile.am.pyloc glib-2.22.0/glib/Makefile.am
|
|
||||||
--- glib-2.22.0/glib/Makefile.am.pyloc 2009-09-22 16:19:35.000000000 -0400
|
|
||||||
+++ glib-2.22.0/glib/Makefile.am 2009-09-23 15:53:09.109395306 -0400
|
|
||||||
@@ -380,8 +380,8 @@ libglib-gdb.py: libglib-gdb.py.in
|
|
||||||
|
|
||||||
|
|
||||||
install-data-hook: libglib-gdb.py
|
|
||||||
- mkdir -p $(DESTDIR)$(datadir)/gdb/auto-load${libdir}
|
|
||||||
- $(INSTALL) libglib-gdb.py $(DESTDIR)$(datadir)/gdb/auto-load${libdir}/libglib-2.0.so.0.$(LT_CURRENT).0-gdb.py
|
|
||||||
+ mkdir -p $(DESTDIR)$(datadir)/gdb/auto-load$(ABS_GLIB_RUNTIME_LIBDIR)
|
|
||||||
+ $(INSTALL) libglib-gdb.py $(DESTDIR)$(datadir)/gdb/auto-load$(ABS_GLIB_RUNTIME_LIBDIR)/libglib-2.0.so.0.$(LT_CURRENT).0-gdb.py
|
|
||||||
if HAVE_GLIB_RUNTIME_LIBDIR
|
|
||||||
mkdir -p $(DESTDIR)$(libdir)/$(GLIB_RUNTIME_LIBDIR)
|
|
||||||
mv $(DESTDIR)$(libdir)/libglib-2.0.so.0 $(DESTDIR)$(libdir)/$(GLIB_RUNTIME_LIBDIR)
|
|
||||||
diff -up glib-2.22.0/gobject/Makefile.am.pyloc glib-2.22.0/gobject/Makefile.am
|
|
||||||
--- glib-2.22.0/gobject/Makefile.am.pyloc 2009-09-22 16:19:20.000000000 -0400
|
|
||||||
+++ glib-2.22.0/gobject/Makefile.am 2009-09-23 15:53:18.011645753 -0400
|
|
||||||
@@ -274,8 +274,8 @@ uninstall-gdb:
|
|
||||||
-rm -r $(DESTDIR)$(datadir)/gdb
|
|
||||||
|
|
||||||
install-data-hook: libgobject-gdb.py
|
|
||||||
- mkdir -p $(DESTDIR)$(datadir)/gdb/auto-load${libdir}
|
|
||||||
- $(INSTALL) libgobject-gdb.py $(DESTDIR)$(datadir)/gdb/auto-load${libdir}/libgobject-2.0.so.0.$(LT_CURRENT).0-gdb.py
|
|
||||||
+ mkdir -p $(DESTDIR)$(datadir)/gdb/auto-load/$(ABS_GLIB_RUNTIME_LIBDIR)
|
|
||||||
+ $(INSTALL) libgobject-gdb.py $(DESTDIR)$(datadir)/gdb/auto-load/$(ABS_GLIB_RUNTIME_LIBDIR)/libgobject-2.0.so.0.$(LT_CURRENT).0-gdb.py
|
|
||||||
if HAVE_GLIB_RUNTIME_LIBDIR
|
|
||||||
mkdir -p $(DESTDIR)$(libdir)/$(GLIB_RUNTIME_LIBDIR)
|
|
||||||
mv $(DESTDIR)$(libdir)/libgobject-2.0.so.0 $(DESTDIR)$(libdir)/$(GLIB_RUNTIME_LIBDIR)
|
|
Loading…
Reference in New Issue
Block a user