]> git.ipfire.org Git - ipfire-3.x.git/commitdiff
bison: Fix testsuite.
authorSchantl Stefan <Stevee@ipfire.org>
Tue, 16 Mar 2010 11:18:07 +0000 (12:18 +0100)
committerSchantl Stefan <Stevee@ipfire.org>
Tue, 16 Mar 2010 11:18:07 +0000 (12:18 +0100)
pkgs/core/bison/bison.nm
pkgs/core/bison/patches/bison-2.4-reap_subpipe.patch [new file with mode: 0644]

index 31ef43c8eaa6521392a2b7d2a5c9f4ac31d7ae21..e0ea4abf0fdd36dae3e2913ace5a3e86f8d5d87f 100644 (file)
@@ -45,10 +45,9 @@ define STAGE_CONFIGURE_CMDS
        cd $(DIR_APP) && echo '#define YYENABLE_NLS 1' >> lib/config.h
 endef
 
-# fails
-#define STAGE_TEST
-#      cd $(DIR_APP) && make check
-#endef
+define STAGE_TEST
+       cd $(DIR_APP) && make check
+endef
 
 define STAGE_INSTALL_CMDS
        -mkdir -pv $(BUILDROOT)/usr/lib
diff --git a/pkgs/core/bison/patches/bison-2.4-reap_subpipe.patch b/pkgs/core/bison/patches/bison-2.4-reap_subpipe.patch
new file mode 100644 (file)
index 0000000..3f72c3e
--- /dev/null
@@ -0,0 +1,87 @@
+diff -urp bison-2.4-pm/lib/subpipe.c bison-2.4/lib/subpipe.c
+--- bison-2.4-pm/lib/subpipe.c 2008-07-14 10:56:12.000000000 +0200
++++ bison-2.4/lib/subpipe.c    2008-11-20 14:37:42.000000000 +0100
+@@ -143,7 +143,9 @@ create_subpipe (char const * const *argv
+ }
+-/* Wait for the subprocess to exit.  */
++/* Wait for the subprocess to exit.  PROGRAM==NULL means errors
++   shouldn't be emitted, typically becuase we are reaping the subpipe
++   in response to some other error. */
+ void
+ reap_subpipe (pid_t pid, char const *program)
+@@ -151,11 +153,14 @@ reap_subpipe (pid_t pid, char const *pro
+ #if HAVE_WAITPID || defined waitpid
+   int wstatus;
+   if (waitpid (pid, &wstatus, 0) < 0)
+-    error (EXIT_FAILURE, errno, "waitpid");
++    {
++      if (program)
++      error (EXIT_FAILURE, errno, "waitpid");
++    }
+   else
+     {
+       int status = WIFEXITED (wstatus) ? WEXITSTATUS (wstatus) : -1;
+-      if (status)
++      if (status && program)
+       error (EXIT_FAILURE, 0,
+              _(status == 126
+                ? "subsidiary program `%s' could not be invoked"
+diff -urp bison-2.4-pm/src/output.c bison-2.4/src/output.c
+--- bison-2.4-pm/src/output.c  2008-11-02 19:09:10.000000000 +0100
++++ bison-2.4/src/output.c     2008-11-20 14:39:08.000000000 +0100
+@@ -467,6 +467,21 @@ prepare_actions (void)
+ | Call the skeleton parser.  |
+ `---------------------------*/
++static pid_t pid = 0;
++
++/* Clean up opened pipe. */
++static void
++die (void)
++{
++  static int dying = 0;
++  if (pid && !dying)
++    {
++      dying = 1;
++      reap_subpipe (pid, NULL);
++      pid = 0;
++    }
++}
++
+ static void
+ output_skeleton (void)
+ {
+@@ -474,7 +489,6 @@ output_skeleton (void)
+   FILE *out;
+   int filter_fd[2];
+   char const *argv[9];
+-  pid_t pid;
+   /* Compute the names of the package data dir and skeleton files.  */
+   char const m4sugar[] = "m4sugar/m4sugar.m4";
+@@ -586,6 +600,7 @@ output_skeleton (void)
+   scan_skel (in);
+   xfclose (in);
+   reap_subpipe (pid, m4);
++  pid = 0;
+   timevar_pop (TV_M4);
+ }
+@@ -653,6 +669,14 @@ prepare (void)
+ void
+ output (void)
+ {
++  /* Register shutdown handler.  */
++  static int registered = 0;
++  if (!registered)
++    {
++      registered = 1;
++      atexit (die);
++    }
++
+   obstack_init (&format_obstack);
+   prepare_symbols ();