summaryrefslogtreecommitdiffstats
path: root/meta/recipes-gnome/libglade/libglade-2.6.4/no-xml2.patch
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@linux.intel.com>2010-08-27 15:14:24 +0100
committerRichard Purdie <rpurdie@linux.intel.com>2010-08-27 15:29:45 +0100
commit29d6678fd546377459ef75cf54abeef5b969b5cf (patch)
tree8edd65790e37a00d01c3f203f773fe4b5012db18 /meta/recipes-gnome/libglade/libglade-2.6.4/no-xml2.patch
parentda49de6885ee1bc424e70bc02f21f6ab920efb55 (diff)
downloadpoky-29d6678fd546377459ef75cf54abeef5b969b5cf.tar.gz
Major layout change to the packages directory
Having one monolithic packages directory makes it hard to find things and is generally overwhelming. This commit splits it into several logical sections roughly based on function, recipes.txt gives more information about the classifications used. The opportunity is also used to switch from "packages" to "recipes" as used in OpenEmbedded as the term "packages" can be confusing to people and has many different meanings. Not all recipes have been classified yet, this is just a first pass at separating things out. Some packages are moved to meta-extras as they're no longer actively used or maintained. Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'meta/recipes-gnome/libglade/libglade-2.6.4/no-xml2.patch')
-rw-r--r--meta/recipes-gnome/libglade/libglade-2.6.4/no-xml2.patch499
1 files changed, 499 insertions, 0 deletions
diff --git a/meta/recipes-gnome/libglade/libglade-2.6.4/no-xml2.patch b/meta/recipes-gnome/libglade/libglade-2.6.4/no-xml2.patch
new file mode 100644
index 0000000000..1c2e215b8d
--- /dev/null
+++ b/meta/recipes-gnome/libglade/libglade-2.6.4/no-xml2.patch
@@ -0,0 +1,499 @@
1diff -urN libglade-2.4.2.orig/configure.in libglade-2.4.2/configure.in
2--- libglade-2.4.2.orig/configure.in 2005-02-11 12:42:58.000000000 +0100
3+++ libglade-2.4.2/configure.in 2005-03-22 01:22:00.000000000 +0100
4@@ -52,11 +52,33 @@
5 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
6
7 PKG_CHECK_MODULES(LIBGLADE, [dnl
8- libxml-2.0 >= required_libxml_version dnl
9 atk >= required_atk_version dnl
10 gtk+-2.0 >= required_gtk_version dnl
11 glib-2.0 >= required_glib_version])
12
13+disable_xml2=no
14+AC_ARG_WITH([libxml2],
15+ AC_HELP_STRING([--without-libxml2], [Don't use libxml2, use Glib's GMarkupParser instead]),
16+ [disable_xml2=yes],
17+ [disable_xml2=no])
18+
19+AC_MSG_CHECKING([if we are using libxml2])
20+if test "x$disable_xml2" == "xno"; then
21+ AC_MSG_RESULT(yes)
22+ PKG_CHECK_MODULES(XML2, libxml-2.0 >= 2.4.10)
23+ PKGCFG_REQUIRE_LIBXML2="libxml-2.0"
24+ LIBGLADE_CFLAGS="$LIBGLADE_CFLAGS $XML2_CFLAGS"
25+ LIBGLADE_LIBS="$LIBGLADE_LIBS $XML2_LIBS"
26+else
27+ LIBGLADE_CFLAGS="$LIBGLADE_CFLAGS -DUSE_GMARKUP_PARSER"
28+ PKGCFG_REQUIRE_LIBXML2=""
29+ AC_MSG_RESULT(no)
30+fi
31+
32+AC_SUBST(XML2_LIBS)
33+AC_SUBST(XML2_CFLAGS)
34+AC_SUBST(PKGCFG_REQUIRE_LIBXML2)
35+
36 AC_MSG_CHECKING([for native Win32])
37 case "$host" in
38 *-*-mingw*)
39@@ -116,6 +138,21 @@
40 fi
41 fi
42
43+if test "x$disable_xml2" == "xyes"; then
44+ echo "*****************************************************"
45+ echo " You chose to disable libxml2 and use Glib's"
46+ echo " GMarkupParser instead."
47+ echo
48+ echo " Please bear in mind that using libglade with"
49+ echo " GMarkupParser is an experimental feature only."
50+ echo
51+ echo " Please post problems or success stories to"
52+ echo " the glade-devel mailing list. Thank you."
53+ echo "*****************************************************"
54+fi
55+
56+
57+
58 GTK_DOC_CHECK(1.0)
59
60 dnl gettext stuff ... there is no message catalog for libglade -- libglade
61diff -urN libglade-2.4.2.orig/glade/glade-parser.c libglade-2.4.2/glade/glade-parser.c
62--- libglade-2.4.2.orig/glade/glade-parser.c 2004-11-11 11:56:13.000000000 +0100
63+++ libglade-2.4.2/glade/glade-parser.c 2005-03-22 01:20:00.000000000 +0100
64@@ -34,7 +34,15 @@
65 # define dgettext(Domain, String) (String)
66 #endif
67
68-#include <libxml/parser.h>
69+#ifdef USE_GMARKUP_PARSER
70+# include <zlib.h>
71+#else
72+# include <libxml/parser.h>
73+#endif
74+
75+#ifdef USE_GMARKUP_PARSER
76+# define xmlChar gchar
77+#endif
78
79 #include "glade-parser.h"
80 #include "glade-private.h"
81@@ -508,7 +516,9 @@
82 case PARSER_START:
83 if (!strcmp(name, "glade-interface")) {
84 state->state = PARSER_GLADE_INTERFACE;
85-#if 0
86+
87+#ifndef USE_GMARKUP_PARSER
88+ #if 0
89 /* check for correct XML namespace */
90 for (i = 0; attrs && attrs[i] != NULL; i += 2) {
91 if (!strcmp(attrs[i], "xmlns") &&
92@@ -518,7 +528,9 @@
93 g_warning("unknown attribute `%s' for <glade-interface>",
94 attrs[i]);
95 }
96+ #endif
97 #endif
98+
99 } else {
100 g_warning("Expected <glade-interface>. Got <%s>.", name);
101 state->prev_state = state->state;
102@@ -1063,12 +1075,18 @@
103 }
104 }
105
106+#ifndef USE_GMARKUP_PARSER
107+
108 static xmlEntityPtr
109 glade_parser_get_entity(GladeParseState *state, const xmlChar *name)
110 {
111 return xmlGetPredefinedEntity(name);
112 }
113
114+#endif /* !defined(USE_GMARKUP_PARSER) */
115+
116+#ifndef USE_GMARKUP_PARSER
117+
118 static void
119 glade_parser_warning(GladeParseState *state, const char *msg, ...)
120 {
121@@ -1079,6 +1097,10 @@
122 va_end(args);
123 }
124
125+#endif /* !defined(USE_GMARKUP_PARSER) */
126+
127+#ifndef USE_GMARKUP_PARSER
128+
129 static void
130 glade_parser_error(GladeParseState *state, const char *msg, ...)
131 {
132@@ -1089,6 +1111,10 @@
133 va_end(args);
134 }
135
136+#endif /* !defined(USE_GMARKUP_PARSER) */
137+
138+#ifndef USE_GMARKUP_PARSER
139+
140 static void
141 glade_parser_fatal_error(GladeParseState *state, const char *msg, ...)
142 {
143@@ -1099,6 +1125,10 @@
144 va_end(args);
145 }
146
147+#endif /* !defined(USE_GMARKUP_PARSER) */
148+
149+#ifndef USE_GMARKUP_PARSER
150+
151 static xmlSAXHandler glade_parser = {
152 (internalSubsetSAXFunc)NULL, /* internalSubset */
153 (isStandaloneSAXFunc)NULL, /* isStandalone */
154@@ -1126,6 +1156,82 @@
155 (fatalErrorSAXFunc)glade_parser_fatal_error, /* fatalError */
156 };
157
158+#else /* USE_GMARKUP_PARSER */
159+
160+static void
161+glade_parser_start_element_wrapper(GMarkupParseContext *context,
162+ const gchar *name,
163+ const gchar **attr_names,
164+ const gchar **attr_values,
165+ gpointer state,
166+ GError **error)
167+{
168+ guint i = 0;
169+
170+ /* Pack attribute names/values from two separate
171+ * arrays (GMarkupParser style) into one single
172+ * array (libxml SAXParser style). This is not
173+ * very efficient, but we do it to make the
174+ * GMarkupParser code as little invasive as
175+ * possible. */
176+
177+ while (attr_names[i] != NULL) {
178+ ++i;
179+ }
180+
181+ if (1)
182+ {
183+ const gchar *attr[(i*2)+1];
184+ guint j, k;
185+
186+ for (j=0, k=0; k < i; j += 2)
187+ {
188+ attr[j] = attr_names[k];
189+ attr[j+1] = attr_values[k];
190+ ++k;
191+ }
192+ attr[i*2] = NULL;
193+
194+ glade_parser_start_element((GladeParseState*)state, name, attr);
195+ }
196+}
197+
198+static void
199+glade_parser_end_element_wrapper(GMarkupParseContext *context,
200+ const gchar *name,
201+ gpointer state,
202+ GError **err)
203+{
204+ glade_parser_end_element((GladeParseState*)state, name);
205+}
206+
207+static void
208+glade_parser_characters_wrapper(GMarkupParseContext *context,
209+ const gchar *chars,
210+ gsize len,
211+ gpointer state,
212+ GError **err)
213+{
214+ glade_parser_characters((GladeParseState*)state, chars, (int) len);
215+}
216+
217+static void
218+glade_parser_error(GMarkupParseContext *context, GError *err, gpointer data)
219+{
220+ g_log("Glade-Parser", G_LOG_LEVEL_CRITICAL, "%s", err->message);
221+}
222+
223+static const GMarkupParser glade_parser = {
224+ glade_parser_start_element_wrapper, /* element open */
225+ glade_parser_end_element_wrapper, /* element close */
226+ glade_parser_characters_wrapper, /* text content */
227+ NULL, /* passthrough */
228+ glade_parser_error, /* parse error */
229+};
230+
231+#endif /* USE_GMARKUP_PARSER */
232+
233+
234 static void
235 widget_info_free(GladeWidgetInfo *info)
236 {
237@@ -1191,6 +1297,9 @@
238 *
239 * Returns: the GladeInterface structure for the XML file.
240 */
241+
242+#ifndef USE_GMARKUP_PARSER
243+
244 GladeInterface *
245 glade_parser_parse_file(const gchar *file, const gchar *domain)
246 {
247@@ -1222,6 +1331,31 @@
248 return state.interface;
249 }
250
251+#else /* defined(USE_GMARKUP_PARSER) */
252+
253+GladeInterface *
254+glade_parser_parse_file(const gchar *file, const gchar *domain)
255+{
256+ GladeInterface *interface;
257+ GError *err = NULL;
258+ gchar *content = NULL;
259+ gsize clen;
260+
261+ if (!g_file_get_contents(file, &content, &clen, &err)) {
262+ g_warning("could not load glade file: %s", err->message);
263+ g_error_free(err);
264+ return NULL;
265+ }
266+
267+ interface = glade_parser_parse_buffer(content, (gint) clen, domain);
268+
269+ g_free(content);
270+
271+ return interface;
272+}
273+
274+#endif /* USE_GMARKUP_PARSER */
275+
276 /**
277 * glade_parser_parse_buffer
278 * @buffer: a buffer in memory containing XML data.
279@@ -1237,6 +1371,9 @@
280 *
281 * Returns: the GladeInterface structure for the XML buffer.
282 */
283+
284+#ifndef USE_GMARKUP_PARSER
285+
286 GladeInterface *
287 glade_parser_parse_buffer(const gchar *buffer, gint len, const gchar *domain)
288 {
289@@ -1263,6 +1400,161 @@
290 return state.interface;
291 }
292
293+#else /* defined(USE_GMARKUP_PARSER) */
294+
295+
296+static GladeInterface *
297+glade_parser_parse_buffer_internal(const gchar *buffer, gint len, const gchar *domain)
298+{
299+ GMarkupParseContext *context;
300+ GladeParseState state = { 0 };
301+ GError *err = NULL;
302+
303+ state.interface = NULL;
304+ if (domain)
305+ state.domain = domain;
306+ else
307+ state.domain = textdomain(NULL);
308+
309+ /* FIXME: This strstr() is not safe, as it ignores the len
310+ * argument and assumes the buffer is NUL-terminated */
311+ if (strstr(buffer, "<?xml") == NULL) {
312+ g_warning("No XML header found in document!");
313+ return NULL;
314+ }
315+
316+ context = g_markup_parse_context_new(&glade_parser, (GMarkupParseFlags) 0, &state, NULL);
317+
318+ glade_parser_start_document(&state);
319+
320+ if (!g_markup_parse_context_parse(context, buffer, (gssize) len, &err)) {
321+ g_warning("document not well formed: %s", err->message);
322+ g_error_free(err);
323+ if (state.interface)
324+ glade_interface_destroy (state.interface);
325+ return NULL;
326+ }
327+
328+ glade_parser_end_document(&state);
329+
330+ if (state.state != PARSER_FINISH) {
331+ g_warning("did not finish in PARSER_FINISH state!");
332+
333+ if (state.interface)
334+ glade_interface_destroy(state.interface);
335+
336+ return NULL;
337+ }
338+
339+ return state.interface;
340+}
341+
342+struct _gzip_rfc1952_hdr
343+{
344+ guint8 id1, id2, cm, flags;
345+ guint32 mtime;
346+ guint8 xflags;
347+ guint8 os;
348+};
349+
350+static GladeInterface *
351+glade_parser_parse_gzipped_buffer(const gchar *buffer, gint len, const gchar *domain)
352+{
353+ struct _gzip_rfc1952_hdr *hdr = (struct _gzip_rfc1952_hdr*)buffer;
354+ struct z_stream_s zstream;
355+ GladeInterface *interface;
356+ const guint8 *cbuf; /* start of compressed data */
357+ guint8 *decompress_buf;
358+ gulong decompress_len = 0;
359+ gint ret;
360+
361+ g_assert(hdr != NULL && hdr->id1 == 0x1f && hdr->id2 == 0x8b);
362+
363+ if (hdr->cm != Z_DEFLATED) {
364+ g_warning("Unknown decompression method %u", (guint) hdr->cm);
365+ return NULL;
366+ }
367+
368+ /* Uncompressed size (modulo 2^32) is last
369+ * 4 bytes of gzipped file, and little endian.
370+ * See RFC 1952 */
371+ decompress_len = GUINT32_FROM_LE(*((guint32*)(((guint8*)buffer) + len - 4)));
372+
373+ /* paranoid mode: glade files > 5MB are unlikely */
374+ g_return_val_if_fail(decompress_len < 5*1024*1024, NULL);
375+
376+ decompress_buf = g_malloc0(decompress_len + 1); /* +1 for NUL-terminator */
377+
378+ /* find start of compressed data, skipping header stuff */
379+ cbuf = (guint8*)buffer + 10;
380+ if (hdr->flags & 0x04) {
381+ guint16 xlen = GUINT16_FROM_LE(*((guint16*)cbuf));
382+ cbuf += xlen + 2;
383+ }
384+ if (hdr->flags & 0x08) {
385+ guint16 onamelen = strlen(cbuf);
386+ cbuf += onamelen + 1;
387+ }
388+ if (hdr->flags & 0x10) {
389+ guint16 commentlen = strlen(cbuf);
390+ cbuf += commentlen + 1;
391+ }
392+ if (hdr->flags & 0x02)
393+ {
394+ cbuf += 2; /* skip header CRC16 */
395+ }
396+
397+ zstream.next_in = (void*)cbuf;
398+ zstream.avail_in = (uLongf) len - ((void*)cbuf-(void*)buffer) - 4 - 4 +1;
399+ zstream.next_out = decompress_buf;
400+ zstream.avail_out= decompress_len;
401+ zstream.zalloc = Z_NULL;
402+ zstream.zfree = Z_NULL;
403+ zstream.opaque = Z_NULL;
404+
405+ ret = inflateInit2(&zstream, -MAX_WBITS);
406+
407+ if (ret != Z_OK) {
408+ g_warning("inflateInit2() failed. zlib error code: %d", ret);
409+ g_free(decompress_buf);
410+ return NULL;
411+ }
412+
413+ ret = inflate(&zstream, Z_FINISH);
414+
415+ if (ret != Z_STREAM_END) {
416+ g_warning("zlib decompression failed. zlib error code: %d", ret);
417+ g_free(decompress_buf);
418+ return NULL;
419+ }
420+
421+ interface = glade_parser_parse_buffer_internal(decompress_buf, decompress_len, domain);
422+
423+ g_free(decompress_buf);
424+
425+ return interface;
426+}
427+
428+GladeInterface *
429+glade_parser_parse_buffer(const gchar *buffer, gint len, const gchar *domain)
430+{
431+ g_return_val_if_fail(buffer != NULL, NULL);
432+ g_return_val_if_fail(len > 0, NULL);
433+
434+ /* Check if buffer is gzipped */
435+ if (buffer[0] == 0x1f && buffer[1] == (gchar)0x8b) {
436+ return glade_parser_parse_gzipped_buffer(buffer, len, domain);
437+ }
438+
439+ /* Buffer is cleartext. */
440+ return glade_parser_parse_buffer_internal(buffer, len, domain);
441+}
442+
443+#endif /* USE_GMARKUP_PARSER */
444+
445+
446+#ifndef USE_GMARKUP_PARSER
447+
448 static void
449 dump_widget(xmlNode *parent, GladeWidgetInfo *info, gint indent)
450 {
451@@ -1382,6 +1674,8 @@
452 xmlNodeAddContent(widget, " ");
453 }
454
455+#endif /* !defined(USE_GMARKUP_PARSER) */
456+
457 /**
458 * glade_interface_dump
459 * @interface: the GladeInterface
460@@ -1390,6 +1684,9 @@
461 * This function dumps the contents of a GladeInterface into a file as
462 * XML. It is intended mainly as a debugging tool.
463 */
464+
465+#ifndef USE_GMARKUP_PARSER
466+
467 void
468 glade_interface_dump(GladeInterface *interface, const gchar *filename)
469 {
470@@ -1428,6 +1725,17 @@
471 xmlFreeDoc(doc);
472 }
473
474+#else /* defined(USE_GMARKUP_PARSER) */
475+
476+void
477+glade_interface_dump(GladeInterface *interface, const gchar *filename)
478+{
479+ g_warning("glade_interface_dump() is only available with libxml2.");
480+}
481+
482+#endif /* USE_GMARKUP_PARSER */
483+
484+
485 #if 0
486 int
487 main(int argc, char **argv) {
488diff -urN libglade-2.4.2.orig/libglade-2.0.pc.in libglade-2.4.2/libglade-2.0.pc.in
489--- libglade-2.4.2.orig/libglade-2.0.pc.in 2001-12-12 15:28:23.000000000 +0100
490+++ libglade-2.4.2/libglade-2.0.pc.in 2005-03-22 01:20:00.000000000 +0100
491@@ -11,7 +11,7 @@
492 Name: Libglade
493 Description: a library for dynamically loading GLADE interface files
494 Version: @VERSION@
495-Requires: gtk+-2.0 libxml-2.0
496+Requires: gtk+-2.0 @PKGCFG_REQUIRE_LIBXML2@
497 Libs: -L${libdir} -lglade-2.0
498 Cflags: -I${includedir}/libglade-2.0
499