[Buildroot] [PATCH 4/5] libglib2: fix noMMU build

Thomas Petazzoni thomas.petazzoni at free-electrons.com
Sat Mar 9 18:21:29 UTC 2013


Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
---
 package/libglib2/libglib2-nommu.patch |  109 +++++++++++++++++++++++++++++++++
 1 file changed, 109 insertions(+)
 create mode 100644 package/libglib2/libglib2-nommu.patch

diff --git a/package/libglib2/libglib2-nommu.patch b/package/libglib2/libglib2-nommu.patch
new file mode 100644
index 0000000..364dbe9
--- /dev/null
+++ b/package/libglib2/libglib2-nommu.patch
@@ -0,0 +1,109 @@
+Fix build on noMMU platforms
+
+Use vfork() instead fork() on noMMU platforms.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
+
+Index: libglib2-2.30.3/configure.ac
+===================================================================
+--- libglib2-2.30.3.orig/configure.ac	2013-03-09 17:25:38.000000000 +0100
++++ libglib2-2.30.3/configure.ac	2013-03-09 17:30:55.000000000 +0100
+@@ -578,7 +578,7 @@
+ # Checks for library functions.
+ AC_FUNC_VPRINTF
+ AC_FUNC_ALLOCA
+-AC_CHECK_FUNCS(mmap posix_memalign memalign valloc fsync pipe2)
++AC_CHECK_FUNCS(mmap posix_memalign memalign valloc fsync pipe2 fork)
+ AC_CHECK_FUNCS(atexit on_exit timegm gmtime_r)
+ 
+ dnl don't use AC_CHECK_FUNCS here, otherwise HAVE_QSORT_R will
+Index: libglib2-2.30.3/gio/libasyncns/asyncns.c
+===================================================================
+--- libglib2-2.30.3.orig/gio/libasyncns/asyncns.c	2013-03-09 17:25:38.000000000 +0100
++++ libglib2-2.30.3/gio/libasyncns/asyncns.c	2013-03-09 17:30:55.000000000 +0100
+@@ -804,8 +804,13 @@
+     for (asyncns->valid_workers = 0; asyncns->valid_workers < n_proc; asyncns->valid_workers++) {
+ 
+ #ifndef HAVE_PTHREAD
++#ifdef HAVE_FORK
+         if ((asyncns->workers[asyncns->valid_workers] = fork()) < 0)
+             goto fail;
++#else
++        if ((asyncns->workers[asyncns->valid_workers] = vfork()) < 0)
++            goto fail;
++#endif
+         else if (asyncns->workers[asyncns->valid_workers] == 0) {
+             int ret;
+ 
+Index: libglib2-2.30.3/glib/gbacktrace.c
+===================================================================
+--- libglib2-2.30.3.orig/glib/gbacktrace.c	2013-03-09 17:25:38.000000000 +0100
++++ libglib2-2.30.3/glib/gbacktrace.c	2013-03-09 17:30:55.000000000 +0100
+@@ -240,7 +240,11 @@
+   args[1] = (gchar*) prg_name;
+   args[2] = buf;
+ 
++#ifdef HAVE_FORK
+   pid = fork ();
++#else
++  pid = vfork ();
++#endif
+   if (pid == 0)
+     {
+       stack_trace (args);
+@@ -293,7 +297,11 @@
+       _exit (0);
+     }
+ 
++#ifdef HAVE_FORK
+   pid = fork ();
++#else
++  pid = vfork ();
++#endif
+   if (pid == 0)
+     {
+       close (0); dup (in_fd[0]);   /* set the stdin to the in pipe */
+Index: libglib2-2.30.3/glib/gspawn.c
+===================================================================
+--- libglib2-2.30.3.orig/glib/gspawn.c	2013-03-09 17:25:38.000000000 +0100
++++ libglib2-2.30.3/glib/gspawn.c	2013-03-09 17:30:55.000000000 +0100
+@@ -1228,7 +1228,11 @@
+   if (standard_error && !make_pipe (stderr_pipe, error))
+     goto cleanup_and_fail;
+ 
++#ifdef HAVE_FORK
+   pid = fork ();
++#else
++  pid = vfork ();
++#endif
+ 
+   if (pid < 0)
+     {
+@@ -1278,7 +1282,11 @@
+            */
+           GPid grandchild_pid;
+ 
++#ifdef HAVE_FORK
+           grandchild_pid = fork ();
++#else
++	  grandchild_pid = vfork ();
++#endif
+ 
+           if (grandchild_pid < 0)
+             {
+Index: libglib2-2.30.3/glib/gtestutils.c
+===================================================================
+--- libglib2-2.30.3.orig/glib/gtestutils.c	2013-03-09 17:25:38.000000000 +0100
++++ libglib2-2.30.3/glib/gtestutils.c	2013-03-09 17:30:55.000000000 +0100
+@@ -1716,7 +1716,11 @@
+   if (pipe (stdout_pipe) < 0 || pipe (stderr_pipe) < 0 || pipe (stdtst_pipe) < 0)
+     g_error ("failed to create pipes to fork test program: %s", g_strerror (errno));
+   signal (SIGCHLD, SIG_DFL);
++#ifdef HAVE_FORK
+   test_trap_last_pid = fork ();
++#else
++  test_trap_last_pid = vfork ();
++#endif
+   if (test_trap_last_pid < 0)
+     g_error ("failed to fork test program: %s", g_strerror (errno));
+   if (test_trap_last_pid == 0)  /* child */
-- 
1.7.9.5



More information about the buildroot mailing list