Skip to contentSkip to conversation

update libglib2 and libsoup

Buildroot New Sven Neumann 2 participants 9 messages Feb 27, 2012 – Feb 28, 2012

lore
Share & tools
lore
#0 lore raw

This is a patchset that updates libglib2 and libsoup to the latest stable versions.

SSL/TLS support in libsoup does not any longer use libgcrypt directly but relies on GIO modules that are provided by glib-networking. Thus a new package "glib-networking" is introduced.

Packages using libsoup with SSL support don't need to be changed; the BR2_PACKAGE_LIBSOUP_SSL option takes care of selecting the new glib-networking package and compiling it with libgcrypt support.

There's also a patch included for gamin that is needed to make it compile with the latest libglib2.

#1 lore raw

PATCH 1/4 gamin: fix compilation with glib 2.30

G_CONST_RETURN is deprecated in glib 2.30 so remove occurences to avoid build failures.

Patch taken from http://patches.openembedded.org/patch/13079/

Cc Richard Purdie <[email protected]>
---
 package/gamin/gamin-0.1.10-no-const-return.patch |   57 ++++++++++++++++++++++
 1 files changed, 57 insertions(+), 0 deletions(-)
 create mode 100644 package/gamin/gamin-0.1.10-no-const-return.patch
package/gamin/gamin-0.1.10-no-const-return.patch new file +57 -0
new file mode 100644
index 0000000..3e6e905
@@ -0,0 +1,57 @@
+G_CONST_RETURN is deprecated in glib 2.30 so remove to to avoid
+build failures.
+
+Upstream-Status: Pending
+
+Index: gamin-0.1.10/server/gam_node.c
+===================================================================
+--- gamin-0.1.10.orig/server/gam_node.c	2011-10-12 15:25:45.217178314 +0100
++++ gamin-0.1.10/server/gam_node.c	2011-10-12 15:26:17.807178293 +0100
+@@ -122,7 +122,7 @@
+  * it has finished with the string.  If it must keep it longer, it
+  * should makes its own copy.  The returned string must not be freed.
+  */
+-G_CONST_RETURN char *
++const char *
+ gam_node_get_path(GamNode * node)
+ {
+     g_assert(node);
+Index: gamin-0.1.10/server/gam_node.h
+===================================================================
+--- gamin-0.1.10.orig/server/gam_node.h	2011-10-12 15:25:46.857178269 +0100
++++ gamin-0.1.10/server/gam_node.h	2011-10-12 15:26:28.637178297 +0100
+@@ -58,7 +58,7 @@
+ void                  gam_node_set_is_dir          (GamNode         *node,
+ 						   gboolean        is_dir);
+ 	
+-G_CONST_RETURN char  *gam_node_get_path            (GamNode         *node);
++const char  *gam_node_get_path            (GamNode         *node);
+ 
+ GList                *gam_node_get_subscriptions   (GamNode         *node);
+ 
+Index: gamin-0.1.10/server/gam_subscription.c
+===================================================================
+--- gamin-0.1.10.orig/server/gam_subscription.c	2011-10-12 15:25:40.497177525 +0100
++++ gamin-0.1.10/server/gam_subscription.c	2011-10-12 15:26:39.867178304 +0100
+@@ -141,7 +141,7 @@
+  * @param sub the GamSubscription
+  * @returns The path being monitored.  It should not be freed.
+  */
+-G_CONST_RETURN char *
++const char *
+ gam_subscription_get_path(GamSubscription * sub)
+ {
+     if (sub == NULL)
+Index: gamin-0.1.10/server/gam_subscription.h
+===================================================================
+--- gamin-0.1.10.orig/server/gam_subscription.h	2011-10-12 15:25:28.507178266 +0100
++++ gamin-0.1.10/server/gam_subscription.h	2011-10-12 15:25:58.817178285 +0100
+@@ -21,7 +21,7 @@
+ 
+ int                  gam_subscription_get_reqno    (GamSubscription *sub);
+ 
+-G_CONST_RETURN char *gam_subscription_get_path     (GamSubscription *sub);
++const char *gam_subscription_get_path     (GamSubscription *sub);
+ 
+ GamListener         *gam_subscription_get_listener (GamSubscription *sub);
+ 
Signature · 1 line
1.7.5.4
#2 lore raw

PATCH 2/4 libglib2: update to version 2.30.2

In reply to Sven Neumann

Update to latest stable release and add a dependency on libffi which is needed by GObject.

---
 package/libglib2/Config.in                         |    1 +
 ...b2-fix-compilation-with-no-builtin-atomic.patch |   25 --------------------
 package/libglib2/libglib2.mk                       |   14 +++++-----
 3 files changed, 8 insertions(+), 32 deletions(-)
 delete mode 100644 package/libglib2/libglib2-fix-compilation-with-no-builtin-atomic.patch
package/libglib2/Config.in +1 -0
index 3d42430..d1d7231 100644
@@ -3,6 +3,7 @@ config BR2_PACKAGE_LIBGLIB2
 	select BR2_PACKAGE_GETTEXT if BR2_NEEDS_GETTEXT
 	select BR2_PACKAGE_LIBINTL if BR2_NEEDS_GETTEXT
 	select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE
+	select BR2_PACKAGE_LIBFFI
 	select BR2_PACKAGE_ZLIB
 	depends on BR2_USE_WCHAR # gettext
 	help
package/libglib2/libglib2-fix-compilation-with-no-builtin-atomic.patch deleted +0 -25
deleted file mode 100644
index 39c0510..0000000
@@ -1,25 +0,0 @@
-From 58096320ea0888c4fbbff318839017a4d2e82703 Mon Sep 17 00:00:00 2001
-From: Lionel Landwerlin <[email protected]>
-Date: Sat, 6 Nov 2010 14:56:15 +0100
-Subject: [PATCH] glib: fix compilation with no builtin atomic operations compilers
-
-Signed-off-by: Lionel Landwerlin <[email protected]>
----
- glib/gatomic.c |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/glib/gatomic.c b/glib/gatomic.c
-index 845c866..01468ce 100644
---- a/glib/gatomic.c
-+++ b/glib/gatomic.c
-@@ -881,6 +881,7 @@ g_atomic_pointer_compare_and_exchange (volatile gpointer G_GNUC_MAY_ALIAS *atomi
- #endif /* DEFINE_WITH_WIN32_INTERLOCKED */
- 
- #ifdef DEFINE_WITH_MUTEXES
-+# include "gthread.h"
- /* We have to use the slow, but safe locking method */
- static GMutex *g_atomic_mutex; 
- 
--- 
-1.7.2.3
-
package/libglib2/libglib2.mk +7 -7
index 0832ac3..a35e525 100644
@@ -3,8 +3,8 @@
 # libglib2
 #
 #############################################################
-LIBGLIB2_VERSION_MAJOR = 2.28
-LIBGLIB2_VERSION_MINOR = 8
+LIBGLIB2_VERSION_MAJOR = 2.30
+LIBGLIB2_VERSION_MINOR = 2
 LIBGLIB2_VERSION = $(LIBGLIB2_VERSION_MAJOR).$(LIBGLIB2_VERSION_MINOR)
 LIBGLIB2_SOURCE = glib-$(LIBGLIB2_VERSION).tar.bz2
 LIBGLIB2_SITE = http://ftp.gnome.org/pub/gnome/sources/glib/$(LIBGLIB2_VERSION_MAJOR)
@@ -13,7 +13,7 @@ LIBGLIB2_INSTALL_STAGING = YES
 LIBGLIB2_INSTALL_TARGET = YES
 LIBGLIB2_INSTALL_STAGING_OPT = DESTDIR=$(STAGING_DIR) LDFLAGS=-L$(STAGING_DIR)/usr/lib install
 
-LIBGLIB2_CONF_ENV =	\
+LIBGLIB2_CONF_ENV = \
 		ac_cv_func_posix_getpwuid_r=yes glib_cv_stack_grows=no \
 		glib_cv_uscore=no ac_cv_func_strtod=yes \
 		ac_fsusage_space=yes fu_cv_sys_stat_statfs2_bsize=yes \
@@ -48,17 +48,17 @@ HOST_LIBGLIB2_CONF_OPT = \
 		--disable-gtk-doc \
 		--enable-debug=no \
 
-LIBGLIB2_DEPENDENCIES = host-pkg-config host-libglib2 zlib $(if $(BR2_NEEDS_GETTEXT),gettext libintl)
+LIBGLIB2_DEPENDENCIES = host-pkg-config host-libglib2 libffi zlib $(if $(BR2_NEEDS_GETTEXT),gettext libintl)
 
-HOST_LIBGLIB2_DEPENDENCIES = host-pkg-config host-zlib
+HOST_LIBGLIB2_DEPENDENCIES = host-pkg-config host-libffi host-zlib
 
 ifneq ($(BR2_ENABLE_LOCALE),y)
-LIBGLIB2_DEPENDENCIES+=libiconv
+LIBGLIB2_DEPENDENCIES += libiconv
 endif
 
 ifeq ($(BR2_PACKAGE_LIBICONV),y)
 LIBGLIB2_CONF_OPT += --with-libiconv=gnu
-LIBGLIB2_DEPENDENCIES+=libiconv
+LIBGLIB2_DEPENDENCIES += libiconv
 endif
 
 define LIBGLIB2_REMOVE_DEV_FILES
Signature · 1 line
1.7.5.4
#3 lore raw

PATCH 2/4 libglib2: update to version 2.30.2

Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Sven" == Sven Neumann <[email protected]> writes:

Sven> Update to latest stable release and add a dependency on libffi which Sven> is needed by GObject.

Looks like we'll need to fiddle with _CONF_ENV:

checking for qsort_r... yes
checking if qsort_r uses glibc compatible argument order... configure: error: in `/home/peko/source/buildroot/output/build/libglib2-2.30.2':
configure: error: cannot run test program while cross compiling
See `config.log' for more details

This is default internal toolchain config, ARM A8.

Signature · 1 line
Bye, Peter Korsgaard
#4 lore raw

PATCH 2/4 libglib2: update to version 2.30.2

Quoted 5 lines · Peter Korsgaard
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Sven" == Sven Neumann <[email protected]> writes:

Sven> Update to latest stable release and add a dependency on libffi which Sven> is needed by GObject.

Quoted 8 lines

Looks like we'll need to fiddle with _CONF_ENV:

checking for qsort_r... yes
checking if qsort_r uses glibc compatible argument order... configure: error: in `/home/peko/source/buildroot/output/build/libglib2-2.30.2':
configure: error: cannot run test program while cross compiling
See `config.log' for more details

This is default internal toolchain config, ARM A8.

I have just changed my buildroot environment to use the default uclibc configuration and now the build of libglib2 fails (with your build fix applied):

gqsort.c: In function 'g_qsort_with_data':
gqsort.c:65:3: warning: implicit declaration of function 'qsort_r' [-Wimplicit-function-declaration]

The problem is that you we pass glib_cv_have_qsort_r=yes to the configure script now. This is supposed to be only of relevance if we are building for glibc. But the glib configure script looks like this:

dnl don't use AC_CHECK_FUNCS here, otherwise HAVE_QSORT_R will dnl be automatically defined, which we don't want to do dnl until we have checked this function is actually usable AC_CHECK_FUNC([qsort_r])

# BSD has a qsort_r with wrong argument order
if test x$ac_cv_func_qsort_r = xyes ; then
AC_CACHE_CHECK([if qsort_r uses glibc compatible argument order],
glib_cv_have_qsort_r, [
AC_RUN_IFELSE([AC_LANG_SOURCE([[
// [test program deleted]
}]])],[glib_cv_have_qsort_r=yes],[glib_cv_have_qsort_r=no])])
fi

if test x$glib_cv_have_qsort_r = xyes ; then
AC_DEFINE(HAVE_QSORT_R, 1, [Define to 1 if you have the 'qsort_r'
function])
fi

So in the end what is tested is the value of glib_cv_have_qsort_r. With your fix this is now set even though uclibc does not provide qsort_r.

Regards,
Sven

#5 lore raw

PATCH 2/4 libglib2: update to version 2.30.2

Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Sven" == Sven Neumann <[email protected]> writes:

Hi,

Sven> So in the end what is tested is the value of glib_cv_have_qsort_r. With Sven> your fix this is now set even though uclibc does not provide qsort_r.

It does, but only from 0.9.33 and onwards. Sorry, didn't notice that it was relatively new. Will fix.

Signature · 1 line
Bye, Peter Korsgaard
#6 lore raw

PATCH 3/4 glib-networking: new package

In reply to Sven Neumann

glib-networking provides network-related GIO modules for glib. It is used by newer versions of libsoup to implement SSL/TLS support.

---
 package/Config.in                          |    1 +
 package/glib-networking/Config.in          |   11 +++++++++++
 package/glib-networking/glib-networking.mk |   22 ++++++++++++++++++++++
 3 files changed, 34 insertions(+), 0 deletions(-)
 create mode 100644 package/glib-networking/Config.in
 create mode 100644 package/glib-networking/glib-networking.mk
package/Config.in +1 -0
index 8a7c9c4..41cbb8c 100644
@@ -344,6 +344,7 @@ source "package/jsmin/Config.in"
 endmenu
 
 menu "Networking"
+source "package/glib-networking/Config.in"
 source "package/libcgi/Config.in"
 source "package/libcgicc/Config.in"
 source "package/libcurl/Config.in"
package/glib-networking/Config.in new file +11 -0
new file mode 100644
index 0000000..16f0d4a
@@ -0,0 +1,11 @@
+config BR2_PACKAGE_GLIB_NETWORKING
+	bool "glib-networking"
+	depends on BR2_USE_WCHAR # glib2
+	select BR2_PACKAGE_LIBGLIB2
+	select BR2_PACKAGE_GETTEXT if BR2_NEEDS_GETTEXT
+	select BR2_PACKAGE_LIBINTL if BR2_NEEDS_GETTEXT
+	help
+	  Network-related GIO modules for glib.
+
+comment "glib-networking requires a toolchain with WCHAR support"
+	depends on !BR2_USE_WCHAR
package/glib-networking/glib-networking.mk new file +22 -0
new file mode 100644
index 0000000..b1ad621
@@ -0,0 +1,22 @@
+#############################################################
+#
+# glib-networking
+#
+#############################################################
+
+GLIB_NETWORKING_MAJOR_VERSION = 2.30
+GLIB_NETWORLING_MINOR_VERSION = 2
+GLIB_NETWORKING_VERSION = $(GLIB_NETWORKING_MAJOR_VERSION).$(GLIB_NETWORLING_MINOR_VERSION)
+GLIB_NETWORKING_SITE = http://ftp.gnome.org/pub/gnome/sources/glib-networking/$(GLIB_NETWORKING_MAJOR_VERSION)
+GLIB_NETWORKING_SOURCE = glib-networking-$(GLIB_NETWORKING_VERSION).tar.xz
+
+GLIB_NETWORKING_INSTALL_STAGING = YES
+
+GLIB_NETWORKING_DEPENDENCIES = $(if $(BR2_NEEDS_GETTEXT_IF_LOCALE),gettext libintl) host-pkg-config libglib2
+
+ifeq ($(BR2_PACKAGE_GNUTLS),y)
+GLIB_NETWORKING_DEPENDENCIES += gnutls
+GLIB_NETWORKING_CONF_OPT = --with-libgcrypt-prefix=$(STAGING_DIR)/usr
+endif
+
+$(eval $(call AUTOTARGETS))
Signature · 1 line
1.7.5.4
#7 lore raw

PATCH 4/4 libsoup: update to version 2.36.1

In reply to Sven Neumann

Update to latest stable release. SSL support now depends on glib-networking with gnutls support instead of using gnutls directly.

Remove libsoup-CVE-2011-2054.patch, this is fixed upstream.

---
 package/libsoup/Config.in                   |    1 +
 package/libsoup/libsoup-CVE-2011-2054.patch |   32 ---------------------------
 package/libsoup/libsoup.mk                  |   19 ++++++---------
 3 files changed, 9 insertions(+), 43 deletions(-)
 delete mode 100644 package/libsoup/libsoup-CVE-2011-2054.patch
package/libsoup/Config.in +1 -0
index 347687c..eee6ade 100644
@@ -14,6 +14,7 @@ config BR2_PACKAGE_LIBSOUP
 
 config BR2_PACKAGE_LIBSOUP_SSL
 	bool "https support"
+	select BR2_PACKAGE_GLIB_NETWORKING
 	select BR2_PACKAGE_GNUTLS
 	depends on BR2_PACKAGE_LIBSOUP
 	help
package/libsoup/libsoup-CVE-2011-2054.patch deleted +0 -32
deleted file mode 100644
index 0dc5ecc..0000000
@@ -1,32 +0,0 @@
-From 4617b6ef6dd21931a0153070c5b5ff7ef21b46f8 Mon Sep 17 00:00:00 2001
-From: Dan Winship <[email protected]>
-Date: Wed, 29 Jun 2011 10:04:06 -0400
-Subject: [PATCH] SoupServer: fix to not allow smuggling ".." into path
-
-When SoupServer:raw-paths was set (the default), it was possible to
-sneak ".." segments into the path passed to the SoupServerHandler,
-which could then end up tricking some handlers into retrieving
-arbitrary files from the filesystem. Fix that.
-
-https://bugzilla.gnome.org/show_bug.cgi?id=653258
-
-diff --git a/libsoup/soup-server.c b/libsoup/soup-server.c
-index d56efd1..7225337 100644
---- a/libsoup/soup-server.c
-+++ b/libsoup/soup-server.c
-@@ -779,6 +779,15 @@ got_headers (SoupMessage *req, SoupClientContext *client)
- 
- 		uri = soup_message_get_uri (req);
- 		decoded_path = soup_uri_decode (uri->path);
-+
-+		if (strstr (decoded_path, "/../") ||
-+		    g_str_has_suffix (decoded_path, "/..")) {
-+			/* Introducing new ".." segments is not allowed */
-+			g_free (decoded_path);
-+			soup_message_set_status (req, SOUP_STATUS_BAD_REQUEST);
-+			return;
-+		}
-+
- 		soup_uri_set_path (uri, decoded_path);
- 		g_free (decoded_path);
- 	}
package/libsoup/libsoup.mk +8 -11
index 147b220..6572585 100644
@@ -4,10 +4,11 @@
 #
 #############################################################
 
-LIBSOUP_MAJOR_VERSION:=2.32
-LIBSOUP_VERSION:=$(LIBSOUP_MAJOR_VERSION).2
-LIBSOUP_SOURCE:=libsoup-$(LIBSOUP_VERSION).tar.bz2
-LIBSOUP_SITE:=http://ftp.gnome.org/pub/gnome/sources/libsoup/$(LIBSOUP_MAJOR_VERSION)
+LIBSOUP_MAJOR_VERSION = 2.36
+LIBSOUP_MINOR_VERSION = 1
+LIBSOUP_VERSION = $(LIBSOUP_MAJOR_VERSION).$(LIBSOUP_MINOR_VERSION)
+LIBSOUP_SOURCE = libsoup-$(LIBSOUP_VERSION).tar.bz2
+LIBSOUP_SITE = http://ftp.gnome.org/pub/gnome/sources/libsoup/$(LIBSOUP_MAJOR_VERSION)
 LIBSOUP_INSTALL_STAGING = YES
 
 LIBSOUP_CONF_ENV = ac_cv_path_GLIB_GENMARSHAL=$(LIBGLIB2_HOST_BINARY)
@@ -16,18 +17,14 @@ ifneq ($(BR2_INET_IPV6),y)
 LIBSOUP_CONF_ENV += soup_cv_ipv6=no
 endif
 
-LIBSOUP_CONF_OPT = \
-	--disable-explicit-deps \
-	--disable-glibtest	\
-	--without-gnome
+LIBSOUP_CONF_OPT = --disable-glibtest --without-gnome
 
 LIBSOUP_DEPENDENCIES = $(if $(BR2_NEEDS_GETTEXT_IF_LOCALE),gettext libintl) host-pkg-config host-libglib2 libglib2 libxml2
 
 ifeq ($(BR2_PACKAGE_LIBSOUP_SSL),y)
-LIBSOUP_DEPENDENCIES += gnutls
-LIBSOUP_CONF_OPT += --enable-ssl --with-libgcrypt-prefix=$(STAGING_DIR)/usr
+LIBSOUP_DEPENDENCIES += glib-networking
 else
-LIBSOUP_CONF_OPT += --disable-ssl
+LIBSOUP_CONF_OPT += --disable-tls-check
 endif
 
 $(eval $(call AUTOTARGETS))
Signature · 1 line
1.7.5.4
#8 lore raw
In reply to Sven Neumann
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Sven" == Sven Neumann <[email protected]> writes:

Sven> This is a patchset that updates libglib2 and libsoup to the latest Sven> stable versions.

Sven> SSL/TLS support in libsoup does not any longer use libgcrypt directly Sven> but relies on GIO modules that are provided by glib-networking. Thus Sven> a new package "glib-networking" is introduced.

Sven> Packages using libsoup with SSL support don't need to be changed; Sven> the BR2_PACKAGE_LIBSOUP_SSL option takes care of selecting the new Sven> glib-networking package and compiling it with libgcrypt support.

Sven> There's also a patch included for gamin that is needed to make it Sven> compile with the latest libglib2.

Committed series to next after fixing up glib build, thanks.

Signature · 1 line
Bye, Peter Korsgaard