Subject: Compilation of gzip 1.13 fails on PPC Tiger, Mac OS X 10.4.11
From: Peter Dyballa <[email-masked]>
To: [email-masked]
Date: Mon, 14 Apr 2025 21:09:41 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello!

I am building the software out of a MacPorts installation on an Apple PowerBook G4 with Mac OS X 10.4.11, Tiger:

    Executing:  cd "/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13" && ./configure --prefix=/opt/local --disable-silent-rules DEFS=NO_ASM --disable-year2038 

    /opt/local/bin/gcc-apple-4.2 -std=gnu99 -DHAVE_CONFIG_H -I.   -I/opt/local/include   -Wno-cast-qual -Wno-conversion -Wno-float-equal -Wno-sign-compare -Wno-undef -Wno-unused-function -Wno-unused-parameter -pipe -Os -arch ppc -MT libgzip_a-error.o -MD -MP -MF .deps/libgzip_a-error.Tpo -c -o libgzip_a-error.o `test -f 'error.c' || echo './'`error.c
    In file included from /usr/include/sys/wait.h:110,
                     from /usr/include/stdlib.h:64,
                     from ./stdlib.h:36,
                     from error.c:29:
    /usr/include/sys/signal.h:145: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mcontext64_t'
    /usr/include/sys/signal.h:177: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'ucontext64_t'
    make[3]: *** [libgzip_a-error.o] Error 1

pre-processed C file has:

 1604	# 27 "/usr/include/machine/_types.h" 2 3 4
 1605	# 28 "/usr/include/sys/_types.h" 2 3 4
...
 1612	struct __darwin_mcontext;
 1613	# 49 "/usr/include/sys/_types.h" 3 4
...
 1640	# 93 "/usr/include/sys/_types.h" 3 4
...
 1658	typedef struct __darwin_mcontext *__darwin_mcontext_t;
...
 1709	struct __darwin_ucontext
 1710	
 1711	{
 1712	 int uc_onstack;
 1713	 __darwin_sigset_t uc_sigmask;
 1714	 __darwin_stack_t uc_stack;
 1715	
 1716	
 1717	
 1718	 struct __darwin_ucontext *uc_link;
 1719	
 1720	 __darwin_size_t uc_mcsize;
 1721	 __darwin_mcontext_t uc_mcontext;
 1722	};
 1723	
 1724	
 1725	
 1726	typedef struct __darwin_ucontext __darwin_ucontext_t;
 1727	# 28 "/usr/include/_types.h" 2 3 4
...
 4361	# 128 "/usr/include/sys/signal.h" 3 4
 4362	#define SIG_DFL (void (*)( ))0
 4363	#define SIG_IGN (void (*)( ))1
 4364	#define SIG_HOLD (void (*)( ))5
 4365	#define SIG_ERR ((void (*)( ))-1)
 4366	
 4367	
 4368	
 4369	
 4370	
 4371	
 4372	#define _MCONTEXT_T 
 4373	typedef __darwin_mcontext_t mcontext_t;
 4374	
 4375	
 4376	
 4377	
 4378	#define _MCONTEXT64_T 
 4379	typedef __darwin_mcontext64_t mcontext64_t;
 4380	# 160 "/usr/include/sys/signal.h" 3 4
 4381	#define _SIGSET_T 
 4382	typedef __darwin_sigset_t sigset_t;
 4383	# 170 "/usr/include/sys/signal.h" 3 4
 4384	#define _UCONTEXT_T 
 4385	typedef __darwin_ucontext_t ucontext_t;
 4386	
 4387	
 4388	
 4389	
 4390	#define _UCONTEXT64_T 
 4391	typedef __darwin_ucontext64_t ucontext64_t;
 4392	# 186 "/usr/include/sys/signal.h" 3 4

/usr/include/sys/signal.h has:

  134	#ifndef _ANSI_SOURCE
  135	#include <sys/_types.h>
  136	
  137	#ifndef _MCONTEXT_T
  138	#define _MCONTEXT_T
  139	typedef __darwin_mcontext_t		mcontext_t;
  140	#endif
  141	
  142	#ifndef _POSIX_C_SOURCE
  143	#ifndef _MCONTEXT64_T
  144	#define _MCONTEXT64_T
  145	typedef __darwin_mcontext64_t		mcontext64_t;
  146	#endif
  147	#endif /* _POSIX_C_SOURCE */
...
  169	#ifndef _UCONTEXT_T
  170	#define _UCONTEXT_T
  171	typedef __darwin_ucontext_t		ucontext_t;
  172	#endif
  173	
  174	#ifndef _POSIX_C_SOURCE
  175	#ifndef _UCONTEXT64_T
  176	#define _UCONTEXT64_T
  177	typedef __darwin_ucontext64_t		ucontext64_t;
  178	#endif
  179	#endif /* _POSIX_C_SOURCE */

A search gives (my Mac is PPC):

    pete 244 /\ find /usr/include -type f -name '*.h' -exec ggrep -En '[um]context' {} /dev/null \;
    /usr/include/i386/ucontext.h:31:struct mcontext
    /usr/include/i386/ucontext.h:33:struct __darwin_mcontext
    /usr/include/i386/ucontext.h:57:typedef __darwin_mcontext_t	mcontext_t;
    /usr/include/machine/ucontext.h:26:#include "ppc/ucontext.h"
    /usr/include/machine/ucontext.h:28:#include "i386/ucontext.h"
    /usr/include/ppc/ucontext.h:30:struct mcontext {
    /usr/include/ppc/ucontext.h:38:struct __darwin_mcontext {
    /usr/include/ppc/ucontext.h:48:typedef __darwin_mcontext_t		mcontext_t;
    /usr/include/ppc/ucontext.h:52:struct mcontext64 {
    /usr/include/ppc/ucontext.h:62:typedef struct mcontext64  * mcontext64_t;
    /usr/include/sys/_types.h:31:struct mcontext;
    /usr/include/sys/_types.h:32:struct mcontext64;
    /usr/include/sys/_types.h:34:struct __darwin_mcontext;
    /usr/include/sys/_types.h:107:typedef struct mcontext *__darwin_mcontext_t;	/* [???] machine context */
    /usr/include/sys/_types.h:108:typedef struct mcontext64 *__darwin_mcontext64_t; /* [???] machine context */
    /usr/include/sys/_types.h:110:typedef struct __darwin_mcontext *__darwin_mcontext_t; /* [???] machine context */
    /usr/include/sys/_types.h:159:struct ucontext
    /usr/include/sys/_types.h:161:struct __darwin_ucontext
    /usr/include/sys/_types.h:168:	struct ucontext	*uc_link;		/* pointer to resuming context */
    /usr/include/sys/_types.h:170:	struct __darwin_ucontext *uc_link;	/* pointer to resuming context */
    /usr/include/sys/_types.h:173:	__darwin_mcontext_t	uc_mcontext;	/* pointer to machine specific context */
    /usr/include/sys/_types.h:176:typedef struct ucontext __darwin_ucontext_t;	/* [???] user context */
    /usr/include/sys/_types.h:178:typedef struct __darwin_ucontext __darwin_ucontext_t; /* [???] user context */
    /usr/include/sys/_types.h:182:struct ucontext64 {
    /usr/include/sys/_types.h:186:	struct ucontext64 *uc_link;		/* pointer to resuming context */
    /usr/include/sys/_types.h:188:	__darwin_mcontext64_t uc_mcontext64;	/* pointer to machine specific context */
    /usr/include/sys/_types.h:190:typedef struct ucontext64 __darwin_ucontext64_t; /* [???] user context */
    /usr/include/sys/signal.h:139:typedef __darwin_mcontext_t		mcontext_t;
    /usr/include/sys/signal.h:145:typedef __darwin_mcontext64_t		mcontext64_t;
    /usr/include/sys/signal.h:171:typedef __darwin_ucontext_t		ucontext_t;
    /usr/include/sys/signal.h:177:typedef __darwin_ucontext64_t		ucontext64_t;
    /usr/include/sys/ucontext.h:28:#include <machine/ucontext.h>
    /usr/include/sys/ucontext.h:43:typedef struct ucontext 	ucontext_t;
    /usr/include/sys/ucontext.h:45:typedef struct __darwin_ucontext ucontext_t;
    /usr/include/sys/ucontext.h:52:typedef struct ucontext64	ucontext64_t;
    /usr/include/ucontext.h:27:#include <sys/ucontext.h>

Of all these seven C header files

     /usr/include/i386/ucontext.h
     /usr/include/machine/ucontext.h
     /usr/include/ppc/ucontext.h
     /usr/include/sys/_types.h
     /usr/include/sys/signal.h
     /usr/include/sys/ucontext.h
     /usr/include/ucontext.h

only

   13	..... /usr/include/sys/_types.h
   48	.... /usr/include/sys/signal.h

are included (running GCC with -H). Possibly not enough…

Patching with

--- lib/error.c~	2023-05-28 03:10:34.000000000 +0200
+++ lib/error.c	2025-04-14 09:44:06.000000000 +0200
@@ -24,6 +24,7 @@
 
 #include "error.h"
 
+#include <ucontext.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>

now

   13	..... /usr/include/sys/_types.h
   44	. /usr/include/ucontext.h
   45	.. /usr/include/sys/ucontext.h
   46	... /usr/include/machine/ucontext.h
   47	.... /usr/include/ppc/ucontext.h
   53	.... /usr/include/sys/signal.h

are included, and the result is now:

    /opt/local/bin/gcc-apple-4.2 -std=gnu99 -DHAVE_CONFIG_H -I.   -I/opt/local/include   -Wno-cast-qual -Wno-conversion -Wno-float-equal -Wno-sign-compare -Wno-undef -Wno-unused-function -Wno-unused-parameter -pipe -Os -arch ppc -MT libgzip_a-fclose.o -MD -MP -MF .deps/libgzip_a-fclose.Tpo -c -o libgzip_a-fclose.o `test -f 'fclose.c' || echo './'`fclose.c
    In file included from /usr/include/signal.h:63,
                     from ./signal.h:52,
                     from /usr/include/sys/select.h:146,
                     from /usr/include/unistd.h:483,
                     from ./unistd.h:40,
                     from fclose.c:23:
    /usr/include/sys/signal.h:145: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mcontext64_t'
    /usr/include/sys/signal.h:177: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'ucontext64_t'
    make[3]: *** [libgzip_a-fclose.o] Error 1

I.e. SUCCESS, another source file needs a patch.

--- lib/fclose.c~	2023-01-02 02:20:46.000000000 +0100
+++ lib/fclose.c	2025-04-14 09:50:41.000000000 +0200
@@ -17,6 +17,7 @@
 #include <config.h>
 
 /* Specification.  */
+#include <ucontext.h>
 #include <stdio.h>
 
 #include <errno.h>

leads to instant new SUCCESS:

    /opt/local/bin/gcc-apple-4.2 -std=gnu99 -DHAVE_CONFIG_H -I.   -I/opt/local/include   -Wno-cast-qual -Wno-conversion -Wno-float-equal -Wno-sign-compare -Wno-undef -Wno-unused-function -Wno-unused-parameter -pipe -Os -arch ppc -MT libgzip_a-fflush.o -MD -MP -MF .deps/libgzip_a-fflush.Tpo -c -o libgzip_a-fflush.o `test -f 'fflush.c' || echo './'`fflush.c
    In file included from /usr/include/signal.h:63,
                     from ./signal.h:52,
                     from /usr/include/sys/select.h:146,
                     from /usr/include/unistd.h:483,
                     from ./unistd.h:40,
                     from fflush.c:25:
    /usr/include/sys/signal.h:145: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mcontext64_t'
    /usr/include/sys/signal.h:177: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'ucontext64_t'

--- lib/fflush.c~	2023-04-07 06:15:26.000000000 +0200
+++ lib/fflush.c	2025-04-14 09:54:11.000000000 +0200
@@ -19,6 +19,7 @@
 #include <config.h>
 
 /* Specification.  */
+#include <ucontext.h>
 #include <stdio.h>
 
 #include <errno.h>

leads to:

    /opt/local/bin/gcc-apple-4.2 -std=gnu99 -DHAVE_CONFIG_H -I.   -I/opt/local/include   -Wno-cast-qual -Wno-conversion -Wno-float-equal -Wno-sign-compare -Wno-undef -Wno-unused-function -Wno-unused-parameter -pipe -Os -arch ppc -MT libgzip_a-fpurge.o -MD -MP -MF .deps/libgzip_a-fpurge.Tpo -c -o libgzip_a-fpurge.o `test -f 'fpurge.c' || echo './'`fpurge.c
    In file included from /usr/include/sys/wait.h:110,
                     from /usr/include/stdlib.h:64,
                     from ./stdlib.h:36,
                     from fpurge.c:27:
    /usr/include/sys/signal.h:145: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mcontext64_t'
    /usr/include/sys/signal.h:177: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'ucontext64_t'
    fpurge.c: In function 'rpl_fpurge':
    fpurge.c:47: warning: implicit declaration of function 'fpurge'

The warning is caused in /usr/include/stdio.h by:

    319 #ifndef _POSIX_C_SOURCE
    320 __const char 
    321         *fmtcheck(const char *, const char *); 
    322 int      fpurge(FILE *); 
    323 #endif /* not POSIX */

_POSIX_C_SOURCE is handled in the pre-compiled output here:

 1485	# 18 "fpurge.c" 2
 1486	
 1487	
 1488	# 1 "./stdio.h" 1
 1489	# 20 "./stdio.h"
 1490	       
 1491	# 21 "./stdio.h" 3
 1492	# 42 "./stdio.h" 3
 1493	#define _POSIX_C_SOURCE 200809L
 1494	#define _GL_DEFINED__POSIX_C_SOURCE 
...
 2003	# 50 "./stdio.h" 2 3
 2004	
 2005	#undef _GL_ALREADY_INCLUDING_STDIO_H
 2006	
 2007	
 2008	#undef _GL_DEFINED__POSIX_C_SOURCE
 2009	#undef _POSIX_C_SOURCE

*fpurge() is handled in the pre-compiled output here:

 4078	# 1064 "./stdio.h" 3
 4079	#define fpurge rpl_fpurge
 4080	
 4081	extern int rpl_fpurge (FILE *gl_stream) __attribute__ ((__nonnull__ (1)));
...
 5238	# 30 "fpurge.c" 2
 5239	
 5240	int
 5241	rpl_fpurge (FILE *fp)
 5242	{
 5243	# 43 "fpurge.c"
 5244	#undef fpurge
 5245	
 5246	
 5247	
 5248	  int result = fpurge (fp);
 5249	
 5250	
 5251	  if (result == 0)
 5252	
 5253	
 5254	
 5255	
 5256	
 5257	
 5258	    if ((fp->_flags & 0x0004) != 0)
 5259	      fp->_w = 0;
 5260	
 5261	  return result;
 5262	# 150 "fpurge.c"
 5263	}

Is line #43 in original fpurge.c too much for Mac OS X 10.4.11, Tiger? config.status has

    D["HAVE_FPURGE"]=" 1"
    D["HAVE_DECL_FPURGE"]=" 1"
    
no line with HAVE___FPURGE (or HAVE_STDIO_EXT_H).

lib/fpurge.c has:

   22	#if HAVE___FPURGE                   /* glibc >= 2.2, Haiku, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.10, Android API >= 23, musl libc */
   23	# if HAVE_STDIO_EXT_H
   24	#  include <stdio_ext.h>
   25	# endif
   26	#endif
   27	#include <stdlib.h>
   28	
   29	#include "stdio-impl.h"
   30	
   31	int
   32	fpurge (FILE *fp)
   33	{
   34	#if HAVE___FPURGE                   /* glibc >= 2.2, Haiku, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.10, Android API >= 23, musl libc */
   35	
   36	  __fpurge (fp);
   37	  /* The __fpurge function does not have a return value.  */
   38	  return 0;
   39	
   40	#elif HAVE_FPURGE                   /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin >= 1.7 */
   41	
   42	  /* Call the system's fpurge function.  */
   43	# undef fpurge
   44	# if !HAVE_DECL_FPURGE
   45	  extern int fpurge (FILE *);
   46	# endif
   47	  int result = fpurge (fp);
   48	# if defined __sferror || defined __DragonFly__ || defined __ANDROID__
   49	  /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
   50	  if (result == 0)
   51	    /* Correct the invariants that fpurge broke.
   52	       <stdio.h> on BSD systems says:
   53	         "The following always hold: if _flags & __SRD, _w is 0."
   54	       If this invariant is not fulfilled and the stream is read-write but
   55	       currently reading, subsequent putc or fputc calls will write directly
   56	       into the buffer, although they shouldn't be allowed to.  */
   57	    if ((fp_->_flags & __SRD) != 0)
   58	      fp_->_w = 0;
   59	# endif
   60	  return result;
   61	
   62	#else
   63	
   64	  /* Most systems provide FILE as a struct and the necessary bitmask in
   65	     <stdio.h>, because they need it for implementing getc() and putc() as
   66	     fast macros.  */
   67	# if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
   68	  /* GNU libc, BeOS, Haiku, Linux libc5 */
   69	  fp->_IO_read_end = fp->_IO_read_ptr;
   70	  fp->_IO_write_ptr = fp->_IO_write_base;
   71	  /* Avoid memory leak when there is an active ungetc buffer.  */
   72	  if (fp->_IO_save_base != NULL)
   73	    {
   74	      free (fp->_IO_save_base);
   75	      fp->_IO_save_base = NULL;
   76	    }
   77	  return 0;
   78	# elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
   79	  /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
   80	  fp_->_p = fp_->_bf._base;
   81	  fp_->_r = 0;
   82	  fp_->_w = ((fp_->_flags & (__SLBF | __SNBF | __SRD)) == 0 /* fully buffered and not currently reading? */
   83	             ? fp_->_bf._size
   84	             : 0);
   85	  /* Avoid memory leak when there is an active ungetc buffer.  */
   86	  if (fp_ub._base != NULL)
   87	    {
   88	      if (fp_ub._base != fp_->_ubuf)
   89	        free (fp_ub._base);
   90	      fp_ub._base = NULL;
   91	    }
   92	  return 0;
   93	# elif defined __EMX__              /* emx+gcc */
   94	  fp->_ptr = fp->_buffer;
   95	  fp->_rcount = 0;
   96	  fp->_wcount = 0;
   97	  fp->_ungetc_count = 0;
   98	  return 0;
   99	# elif defined __minix              /* Minix */
  100	  fp->_ptr = fp->_buf;
  101	  if (fp->_ptr != NULL)
  102	    fp->_count = 0;
  103	  return 0;
  104	# elif defined _IOERR               /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */
  105	  fp_->_ptr = fp_->_base;
  106	  if (fp_->_ptr != NULL)
  107	    fp_->_cnt = 0;
  108	  return 0;
  109	# elif defined __UCLIBC__           /* uClibc */
  110	#  ifdef __STDIO_BUFFERS
  111	  if (fp->__modeflags & __FLAG_WRITING)
  112	    fp->__bufpos = fp->__bufstart;
  113	  else if (fp->__modeflags & (__FLAG_READONLY | __FLAG_READING))
  114	    fp->__bufpos = fp->__bufread;
  115	#  endif
  116	  return 0;
  117	# elif defined __QNX__              /* QNX */
  118	  fp->_Rback = fp->_Back + sizeof (fp->_Back);
  119	  fp->_Rsave = NULL;
  120	  if (fp->_Mode & 0x2000 /* _MWRITE */)
  121	    /* fp->_Buf <= fp->_Next <= fp->_Wend */
  122	    fp->_Next = fp->_Buf;
  123	  else
  124	    /* fp->_Buf <= fp->_Next <= fp->_Rend */
  125	    fp->_Rend = fp->_Next;
  126	  return 0;
  127	# elif defined __MINT__             /* Atari FreeMiNT */
  128	  if (fp->__pushed_back)
  129	    {
  130	      fp->__bufp = fp->__pushback_bufp;
  131	      fp->__pushed_back = 0;
  132	    }
  133	  /* Preserve the current file position.  */
  134	  if (fp->__target != -1)
  135	    fp->__target += fp->__bufp - fp->__buffer;
  136	  fp->__bufp = fp->__buffer;
  137	  /* Nothing in the buffer, next getc is nontrivial.  */
  138	  fp->__get_limit = fp->__bufp;
  139	  /* Nothing in the buffer, next putc is nontrivial.  */
  140	  fp->__put_limit = fp->__buffer;
  141	  return 0;
  142	# elif defined EPLAN9               /* Plan9 */
  143	  fp->rp = fp->wp = fp->lp = fp->buf;
  144	  return 0;
  145	# else
  146	#  error "Please port gnulib fpurge.c to your platform! Look at the definitions of fflush, setvbuf and ungetc on your system, then report this to bug-gnulib."
  147	# endif
  148	
  149	#endif
  150	}

The patch

--- lib/fpurge.c~	2023-01-02 02:20:46.000000000 +0100
+++ lib/fpurge.c	2025-04-14 11:27:29.000000000 +0200
@@ -17,6 +17,7 @@
 #include <config.h>
 
 /* Specification.  */
+#include <ucontext.h>
 #include <stdio.h>
 
 #if HAVE___FPURGE                   /* glibc >= 2.2, Haiku, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.10, Android API >= 23, musl libc */

still leaves a warning

    fpurge.c: In function 'rpl_fpurge':
    fpurge.c:48: warning: implicit declaration of function 'fpurge'

so I finally used the patch:

--- lib/fpurge.c~	2023-01-02 02:20:46.000000000 +0100
+++ lib/fpurge.c	2025-04-14 11:29:37.000000000 +0200
@@ -17,6 +17,7 @@
 #include <config.h>
 
 /* Specification.  */
+#include <ucontext.h>
 #include <stdio.h>
 
 #if HAVE___FPURGE                   /* glibc >= 2.2, Haiku, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.10, Android API >= 23, musl libc */
@@ -40,7 +41,6 @@
 #elif HAVE_FPURGE                   /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin >= 1.7 */
 
   /* Call the system's fpurge function.  */
-# undef fpurge
 # if !HAVE_DECL_FPURGE
   extern int fpurge (FILE *);
 # endif

The next error is with lib/fseek.c:

    /opt/local/bin/gcc-apple-4.2 -std=gnu99 -DHAVE_CONFIG_H -I.   -I/opt/local/include   -Wno-cast-qual -Wno-conversion -Wno-float-equal -Wno-sign-compare -Wno-undef -Wno-unused-function -Wno-unused-parameter -pipe -Os -arch ppc -MT libgzip_a-fseek.o -MD -MP -MF .deps/libgzip_a-fseek.Tpo -c -o libgzip_a-fseek.o `test -f 'fseek.c' || echo './'`fseek.c
    In file included from /usr/include/signal.h:63,
                     from ./signal.h:52,
                     from /usr/include/sys/select.h:146,
                     from /usr/include/unistd.h:483,
                     from ./unistd.h:40,
                     from fseek.c:23:
    /usr/include/sys/signal.h:145: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mcontext64_t'
    /usr/include/sys/signal.h:177: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'ucontext64_t'

The patch

--- lib/fseek.c~	2023-01-02 02:20:46.000000000 +0100
+++ lib/fseek.c	2025-04-14 11:31:49.000000000 +0200
@@ -17,6 +17,7 @@
 #include <config.h>
 
 /* Specification.  */
+#include <ucontext.h>
 #include <stdio.h>
 
 /* Get off_t.  */

cures it and leads to:

    /opt/local/bin/gcc-apple-4.2 -std=gnu99 -DHAVE_CONFIG_H -I.   -I/opt/local/include   -Wno-cast-qual -Wno-conversion -Wno-float-equal -Wno-sign-compare -Wno-undef -Wno-unused-function -Wno-unused-parameter -pipe -Os -arch ppc -MT libgzip_a-fseeko.o -MD -MP -MF .deps/libgzip_a-fseeko.Tpo -c -o libgzip_a-fseeko.o `test -f 'fseeko.c' || echo './'`fseeko.c
    In file included from /usr/include/signal.h:63,
                     from ./signal.h:52,
                     from /usr/include/sys/select.h:146,
                     from /usr/include/unistd.h:483,
                     from ./unistd.h:40,
                     from fseeko.c:23:
    /usr/include/sys/signal.h:145: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mcontext64_t'
    /usr/include/sys/signal.h:177: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'ucontext64_t'

The cure is:

--- lib/fseeko.c~	2023-01-02 02:20:46.000000000 +0100
+++ lib/fseeko.c	2025-04-14 11:33:31.000000000 +0200
@@ -17,6 +17,7 @@
 #include <config.h>
 
 /* Specification.  */
+#include <ucontext.h>
 #include <stdio.h>
 
 /* Get off_t, lseek, _POSIX_VERSION.  */

giving:

    /opt/local/bin/gcc-apple-4.2 -std=gnu99 -DHAVE_CONFIG_H -I.   -I/opt/local/include   -pipe -Os -arch ppc -MT fprintf.o -MD -MP -MF $depbase.Tpo -c -o fprintf.o fprintf.c &&\
    mv -f $depbase.Tpo $depbase.Po
    In file included from /usr/include/sys/wait.h:110,
                     from /usr/include/stdlib.h:64,
                     from ./stdlib.h:36,
                     from fprintf.c:27:
    /usr/include/sys/signal.h:145: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mcontext64_t'
    /usr/include/sys/signal.h:177: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'ucontext64_t'

Again, the cure is:

--- lib/fprintf.c~	2023-01-02 02:20:46.000000000 +0100
+++ lib/fprintf.c	2025-04-14 11:35:15.000000000 +0200
@@ -19,6 +19,7 @@
 #endif
 
 /* Specification.  */
+#include <ucontext.h>
 #include <stdio.h>
 
 #include <errno.h>

which leads to:

    /opt/local/bin/gcc-apple-4.2 -std=gnu99 -DHAVE_CONFIG_H -I.   -I/opt/local/include   -pipe -Os -arch ppc -MT vasnprintf.o -MD -MP -MF $depbase.Tpo -c -o vasnprintf.o vasnprintf.c &&\
    mv -f $depbase.Tpo $depbase.Po
    In file included from /usr/include/sys/wait.h:110,
                     from /usr/include/stdlib.h:64,
                     from ./stdlib.h:36,
                     from vasnprintf.c:84:
    /usr/include/sys/signal.h:145: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mcontext64_t'
    /usr/include/sys/signal.h:177: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'ucontext64_t'

From

--- lib/vasnprintf.c~	2023-07-16 18:50:01.000000000 +0200
+++ lib/vasnprintf.c	2025-04-14 11:37:10.000000000 +0200
@@ -79,6 +79,7 @@
 # endif
 #endif
 
+#include <ucontext.h>
 #include <locale.h>     /* localeconv() */
 #include <stdio.h>      /* snprintf(), sprintf() */
 #include <stdlib.h>     /* abort(), malloc(), realloc(), free() */

I get:

    /opt/local/bin/gcc-apple-4.2 -std=gnu99 -DHAVE_CONFIG_H -I.   -I/opt/local/include   -pipe -Os -arch ppc -MT vfprintf.o -MD -MP -MF $depbase.Tpo -c -o vfprintf.o vfprintf.c &&\
    mv -f $depbase.Tpo $depbase.Po
    In file included from /usr/include/sys/wait.h:110,
                     from /usr/include/stdlib.h:64,
                     from ./stdlib.h:36,
                     from vfprintf.c:27:
    /usr/include/sys/signal.h:145: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mcontext64_t'
    /usr/include/sys/signal.h:177: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'ucontext64_t'

And

--- lib/vfprintf.c~	2023-01-02 02:20:46.000000000 +0100
+++ lib/vfprintf.c	2025-04-14 11:39:33.000000000 +0200
@@ -19,6 +19,7 @@
 #endif
 
 /* Specification.  */
+#include <ucontext.h>
 #include <stdio.h>
 
 #include <errno.h>

leads to: Compilation finished at Mon Apr 14 11:39:58

To check whether the built binaries work correctly I invoked 'make test':

--->  Testing gzip
Executing:  cd "/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13" && /usr/bin/make check 
if test -d ./.git				\
	&& git --version >/dev/null 2>&1; then			\
  cd . &&						\
  git submodule --quiet foreach					\
      'test "$(git rev-parse "$sha1")"			\
	  = "$(git merge-base origin "$sha1")"'		\
    || { echo 'maint.mk: found non-public submodule commit' >&2;	\
	 exit 1; };						\
else								\
  : ;								\
fi
/usr/bin/make  check-recursive
Making check in lib
/usr/bin/make  check-am
make[3]: Nothing to be done for `check-am'.
Making check in doc
make[2]: Nothing to be done for `check'.
Making check in .
/usr/bin/make  check-local
./gzip < ./gzip.doc >gzip.doc.gz-t && mv gzip.doc.gz-t gzip.doc.gz
PATH=.:$PATH; { test '.' != . \
			    || zdiff gzip.doc.gz; }
PATH=.:$PATH; zdiff ./gzip.doc ./gzip.doc
PATH=.:$PATH; zdiff ./gzip.doc gzip.doc.gz
PATH=.:$PATH; zdiff - ./gzip.doc <gzip.doc.gz
PATH=.:$PATH; zdiff gzip.doc.gz gzip.doc.gz
PATH=.:$PATH; zgrep -iV >/dev/null
PATH=.:$PATH;				\
for opt in --rsyncable '' -1 -9; do		\
          for file in gunzip gzexe zcat zcmp zdiff zegrep zfgrep zforce zgrep zless zmore znew ./ChangeLog ./configure ./gzip.c; do		\
            gzip $opt -c -- "$file"			\
              | gzip -d | cmp - "$file" || exit 1;	\
          done;						\
done
Making check in tests
/usr/bin/make  check-TESTS
PASS: gzip-env
PASS: helin-segv
PASS: help-version
PASS: hufts
PASS: keep
PASS: list
PASS: list-big
PASS: memcpy-abuse
PASS: mixed
PASS: null-suffix-clobber
PASS: pipe-output
PASS: reproducible
PASS: stdin
PASS: timestamp
PASS: two-files
PASS: trailing-nul
PASS: unpack-invalid
PASS: unpack-valid
PASS: upper-suffix
PASS: write-error
PASS: z-suffix
PASS: zdiff
PASS: zgrep-f
PASS: zgrep-abuse
PASS: zgrep-binary
PASS: zgrep-context
zgrep-signal: set-up failure: signal handling busted on this host
ERROR: zgrep-signal
PASS: znew-k
=====================================
   gzip 1.13: tests/test-suite.log
=====================================

# TOTAL: 28
# PASS:  27
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 1

.. contents:: :depth: 2

ERROR: zgrep-signal
===================

++ initial_cwd_=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests
+++ testdir_prefix_
+++ printf gt
++ pfx_=gt
+++ mktempd_ /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests gt-zgrep-signal.XXXX
+++ destdir_=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests
+++ template_=gt-zgrep-signal.XXXX
+++ MAX_TRIES_=4
+++ destdir_slash_=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/
++++ unset TMPDIR
+++ d=/tmp/-p.VvzFjBXf
gt-zgrep-signal.s07R
++++ echo gt-zgrep-signal.XXXX
++++ sed 's/XX*$//'
+++ base_template_=gt-zgrep-signal.
++++ echo gt-zgrep-signal.XXXX
++++ wc -c
+++ template_length_=      21
++++ echo gt-zgrep-signal.
++++ wc -c
+++ nx_=      17
++++ expr 21 - 17
+++ nx_=4
+++ err_=
+++ i_=1
+++ :
++++ rand_bytes_ 4
++++ n_=4
++++ chars_=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
++++ dev_rand_=/dev/urandom
++++ test -r /dev/urandom
++++ dd ibs=4 count=1 if=/dev/urandom
++++ LC_ALL=C
++++ tr -c abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 01234567abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
++++ return
+++ X_=Nubu
+++ candidate_dir_=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/gt-zgrep-signal.Nubu
++++ mkdir -m 0700 /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/gt-zgrep-signal.Nubu
+++ err_=
+++ echo /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/gt-zgrep-signal.Nubu
+++ return
++ test_dir_=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/gt-zgrep-signal.Nubu
++ cd /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/gt-zgrep-signal.Nubu
++ srcdir=../.
++ builddir=..
++ export srcdir builddir
++ gl_init_sh_nl_=

++ IFS= 	

+++ expr 1 + 128
++ eval 'trap '\''Exit 129'\'' 1'
+++ trap 'Exit 129' 1
+++ expr 2 + 128
++ eval 'trap '\''Exit 130'\'' 2'
+++ trap 'Exit 130' 2
+++ expr 3 + 128
++ eval 'trap '\''Exit 131'\'' 3'
+++ trap 'Exit 131' 3
+++ expr 13 + 128
++ eval 'trap '\''Exit 141'\'' 13'
+++ trap 'Exit 141' 13
+++ expr 15 + 128
++ eval 'trap '\''Exit 143'\'' 15'
+++ trap 'Exit 143' 15
++ saved_IFS= 	

++ IFS=:
++ new_PATH=
++ sep_=
++ test -d /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13
++ sep_=:
++ test -d /opt/local/bin/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13:/opt/local/bin
++ sep_=:
++ test -d /opt/local/sbin/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13:/opt/local/bin:/opt/local/sbin
++ sep_=:
++ test -d /bin/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13:/opt/local/bin:/opt/local/sbin:/bin
++ sep_=:
++ test -d /sbin/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13:/opt/local/bin:/opt/local/sbin:/bin:/sbin
++ sep_=:
++ test -d /usr/bin/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13:/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin
++ sep_=:
++ test -d /usr/sbin/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13:/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin
++ sep_=:
++ IFS= 	

++ PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13:/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin
++ export PATH
++ trap remove_tmp_ EXIT
+ path_prepend_ ..
+ test 1 '!=' 0
+ path_dir_=..
+ abs_path_dir_=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/..
+ PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/..:/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13:/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin
+ create_exe_shims_ /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/..
+ return 0
+ shift
+ test 0 '!=' 0
+ export PATH
+ echo a
+ gzip -c
+ test x = x
+ PERL=perl
+ write_to_dangling_pipe cat f.gz f.gz
+ program=cat
+ shift
+ args=
+ args=, 'f.gz'
+ args=, 'f.gz', 'f.gz'
+ perl -e '
     use POSIX qw(dup2);
     $SIG{PIPE} = "DEFAULT";
     pipe my ($read_end, $write_end) or die "pipe: $!\n";
     dup2 fileno $write_end, 1 or die "dup2: $!\n";
     close $read_end or die "close: $!\n";
     exec '\''cat'\'', '\''f.gz'\'', '\''f.gz'\'';
  '
cat: f.gz: Bad file descriptor
+ signal_status=1
+ test 128 -lt 1
+ framework_failure_ 'signal handling busted on this host'
+ warn_ 'zgrep-signal: set-up failure: signal handling busted on this host'
+ printf '%s\n' 'zgrep-signal: set-up failure: signal handling busted on this host'
zgrep-signal: set-up failure: signal handling busted on this host
+ test 9 = 2
+ printf '%s\n' 'zgrep-signal: set-up failure: signal handling busted on this host'
+ sed 1q
+ Exit 99
+ set +e
+ exit 99
+ exit 99
+ remove_tmp_
+ __st=99
+ cleanup_
+ :
+ test '' = yes
+ cd /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests
+ chmod -R u+rwx /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/gt-zgrep-signal.Nubu
+ rm -rf /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/gt-zgrep-signal.Nubu
+ exit 99
ERROR zgrep-signal (exit status: 99)

============================================================================
Testsuite summary for gzip 1.13
============================================================================
# TOTAL: 28
# PASS:  27
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 1
============================================================================
See tests/test-suite.log
Please report to [email-masked]
============================================================================
make[4]: *** [test-suite.log] Error 1
make[3]: *** [check-TESTS] Error 2
make[2]: *** [check-am] Error 2
make[1]: *** [check-recursive] Error 1
make: *** [check] Error 2

•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
After removing the software I built again from archive file, now automatically applying all the patches:

patching file lib/error.c
patching file lib/fclose.c
patching file lib/fflush.c
patching file lib/fpurge.c
patching file lib/fseek.c
patching file lib/fseeko.c
patching file lib/fprintf.c
patching file lib/vasnprintf.c
patching file lib/vfprintf.c

The new tests produced:

--->  Testing gzip
Executing:  cd "/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13" && /usr/bin/make check 
if test -d ./.git				\
	&& git --version >/dev/null 2>&1; then			\
  cd . &&						\
  git submodule --quiet foreach					\
      'test "$(git rev-parse "$sha1")"			\
	  = "$(git merge-base origin "$sha1")"'		\
    || { echo 'maint.mk: found non-public submodule commit' >&2;	\
	 exit 1; };						\
else								\
  : ;								\
fi
/usr/bin/make  check-recursive
Making check in lib
/usr/bin/make  check-am
make[3]: Nothing to be done for `check-am'.
Making check in doc
make[2]: Nothing to be done for `check'.
Making check in .
/usr/bin/make  check-local
./gzip < ./gzip.doc >gzip.doc.gz-t && mv gzip.doc.gz-t gzip.doc.gz
PATH=.:$PATH; { test '.' != . \
			    || zdiff gzip.doc.gz; }
PATH=.:$PATH; zdiff ./gzip.doc ./gzip.doc
PATH=.:$PATH; zdiff ./gzip.doc gzip.doc.gz
PATH=.:$PATH; zdiff - ./gzip.doc <gzip.doc.gz
PATH=.:$PATH; zdiff gzip.doc.gz gzip.doc.gz
PATH=.:$PATH; zgrep -iV >/dev/null
PATH=.:$PATH;				\
for opt in --rsyncable '' -1 -9; do		\
          for file in gunzip gzexe zcat zcmp zdiff zegrep zfgrep zforce zgrep zless zmore znew ./ChangeLog ./configure ./gzip.c; do		\
            gzip $opt -c -- "$file"			\
              | gzip -d | cmp - "$file" || exit 1;	\
          done;						\
done
Making check in tests
/usr/bin/make  check-TESTS
PASS: gzip-env
PASS: helin-segv
PASS: help-version
PASS: hufts
PASS: keep
PASS: list
PASS: list-big
PASS: memcpy-abuse
PASS: mixed
PASS: null-suffix-clobber
PASS: pipe-output
PASS: reproducible
PASS: stdin
PASS: timestamp
PASS: two-files
PASS: trailing-nul
PASS: unpack-invalid
PASS: unpack-valid
PASS: upper-suffix
PASS: write-error
PASS: z-suffix
PASS: zdiff
PASS: zgrep-f
PASS: zgrep-abuse
PASS: zgrep-binary
PASS: zgrep-context
zgrep-signal: set-up failure: signal handling busted on this host
ERROR: zgrep-signal
PASS: znew-k
=====================================
   gzip 1.13: tests/test-suite.log
=====================================

# TOTAL: 28
# PASS:  27
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 1

.. contents:: :depth: 2

ERROR: zgrep-signal
===================

++ initial_cwd_=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests
+++ testdir_prefix_
+++ printf gt
++ pfx_=gt
+++ mktempd_ /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests gt-zgrep-signal.XXXX
+++ destdir_=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests
+++ template_=gt-zgrep-signal.XXXX
+++ MAX_TRIES_=4
+++ destdir_slash_=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/
++++ unset TMPDIR
+++ d=/tmp/-p.5fCj3sjp
gt-zgrep-signal.bFPK
++++ echo gt-zgrep-signal.XXXX
++++ sed 's/XX*$//'
+++ base_template_=gt-zgrep-signal.
++++ echo gt-zgrep-signal.XXXX
++++ wc -c
+++ template_length_=      21
++++ echo gt-zgrep-signal.
++++ wc -c
+++ nx_=      17
++++ expr 21 - 17
+++ nx_=4
+++ err_=
+++ i_=1
+++ :
++++ rand_bytes_ 4
++++ n_=4
++++ chars_=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
++++ dev_rand_=/dev/urandom
++++ test -r /dev/urandom
++++ dd ibs=4 count=1 if=/dev/urandom
++++ LC_ALL=C
++++ tr -c abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 01234567abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
++++ return
+++ X_=8MuU
+++ candidate_dir_=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/gt-zgrep-signal.8MuU
++++ mkdir -m 0700 /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/gt-zgrep-signal.8MuU
+++ err_=
+++ echo /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/gt-zgrep-signal.8MuU
+++ return
++ test_dir_=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/gt-zgrep-signal.8MuU
++ cd /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/gt-zgrep-signal.8MuU
++ srcdir=../.
++ builddir=..
++ export srcdir builddir
++ gl_init_sh_nl_=

++ IFS= 	

+++ expr 1 + 128
++ eval 'trap '\''Exit 129'\'' 1'
+++ trap 'Exit 129' 1
+++ expr 2 + 128
++ eval 'trap '\''Exit 130'\'' 2'
+++ trap 'Exit 130' 2
+++ expr 3 + 128
++ eval 'trap '\''Exit 131'\'' 3'
+++ trap 'Exit 131' 3
+++ expr 13 + 128
++ eval 'trap '\''Exit 141'\'' 13'
+++ trap 'Exit 141' 13
+++ expr 15 + 128
++ eval 'trap '\''Exit 143'\'' 15'
+++ trap 'Exit 143' 15
++ saved_IFS= 	

++ IFS=:
++ new_PATH=
++ sep_=
++ test -d /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13
++ sep_=:
++ test -d /opt/local/bin/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13:/opt/local/bin
++ sep_=:
++ test -d /opt/local/sbin/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13:/opt/local/bin:/opt/local/sbin
++ sep_=:
++ test -d /bin/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13:/opt/local/bin:/opt/local/sbin:/bin
++ sep_=:
++ test -d /sbin/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13:/opt/local/bin:/opt/local/sbin:/bin:/sbin
++ sep_=:
++ test -d /usr/bin/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13:/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin
++ sep_=:
++ test -d /usr/sbin/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13:/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin
++ sep_=:
++ IFS= 	

++ PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13:/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin
++ export PATH
++ trap remove_tmp_ EXIT
+ path_prepend_ ..
+ test 1 '!=' 0
+ path_dir_=..
+ abs_path_dir_=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/..
+ PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/..:/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13:/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin
+ create_exe_shims_ /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/..
+ return 0
+ shift
+ test 0 '!=' 0
+ export PATH
+ echo a
+ gzip -c
+ test x = x
+ PERL=perl
+ write_to_dangling_pipe cat f.gz f.gz
+ program=cat
+ shift
+ args=
+ args=, 'f.gz'
+ args=, 'f.gz', 'f.gz'
+ perl -e '
     use POSIX qw(dup2);
     $SIG{PIPE} = "DEFAULT";
     pipe my ($read_end, $write_end) or die "pipe: $!\n";
     dup2 fileno $write_end, 1 or die "dup2: $!\n";
     close $read_end or die "close: $!\n";
     exec '\''cat'\'', '\''f.gz'\'', '\''f.gz'\'';
  '
cat: f.gz: Bad file descriptor
+ signal_status=1
+ test 128 -lt 1
+ framework_failure_ 'signal handling busted on this host'
+ warn_ 'zgrep-signal: set-up failure: signal handling busted on this host'
+ printf '%s\n' 'zgrep-signal: set-up failure: signal handling busted on this host'
zgrep-signal: set-up failure: signal handling busted on this host
+ test 9 = 2
+ printf '%s\n' 'zgrep-signal: set-up failure: signal handling busted on this host'
+ sed 1q
+ Exit 99
+ set +e
+ exit 99
+ exit 99
+ remove_tmp_
+ __st=99
+ cleanup_
+ :
+ test '' = yes
+ cd /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests
+ chmod -R u+rwx /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/gt-zgrep-signal.8MuU
+ rm -rf /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.13/tests/gt-zgrep-signal.8MuU
+ exit 99
ERROR zgrep-signal (exit status: 99)

============================================================================
Testsuite summary for gzip 1.13
============================================================================
# TOTAL: 28
# PASS:  27
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 1
============================================================================
See tests/test-suite.log
Please report to [email-masked]
============================================================================
make[4]: *** [test-suite.log] Error 1
make[3]: *** [check-TESTS] Error 2
make[2]: *** [check-am] Error 2
make[1]: *** [check-recursive] Error 1
make: *** [check] Error 2
•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

Both tests produce the same results. Gzip 1.12, not needing any patches to build, gives these test results:

--->  Testing gzip
Executing:  cd "/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12" && /usr/bin/make check 
if test -d ./.git				\
	&& git --version >/dev/null 2>&1; then			\
  cd . &&						\
  git submodule --quiet foreach					\
      'test "$(git rev-parse "$sha1")"			\
	  = "$(git merge-base origin "$sha1")"'		\
    || { echo 'maint.mk: found non-public submodule commit' >&2;	\
	 exit 1; };						\
else								\
  : ;								\
fi
/usr/bin/make  check-recursive
Making check in lib
/usr/bin/make  check-am
make[3]: Nothing to be done for `check-am'.
Making check in doc
make[2]: Nothing to be done for `check'.
Making check in .
/usr/bin/make  check-local
./gzip < ./gzip.doc >gzip.doc.gz-t && mv gzip.doc.gz-t gzip.doc.gz
PATH=.:$PATH; { test '.' != . \
			    || zdiff gzip.doc.gz; }
PATH=.:$PATH; zdiff ./gzip.doc ./gzip.doc
PATH=.:$PATH; zdiff ./gzip.doc gzip.doc.gz
PATH=.:$PATH; zdiff - ./gzip.doc <gzip.doc.gz
PATH=.:$PATH; zdiff gzip.doc.gz gzip.doc.gz
PATH=.:$PATH; zgrep -iV >/dev/null
PATH=.:$PATH;				\
for opt in --rsyncable '' -1 -9; do		\
          for file in gunzip gzexe zcat zcmp zdiff zegrep zfgrep zforce zgrep zless zmore znew ./ChangeLog ./configure ./gzip.c; do		\
            gzip $opt -c -- "$file"			\
              | gzip -d | cmp - "$file" || exit 1;	\
          done;						\
done
Making check in tests
/usr/bin/make  check-TESTS
PASS: gzip-env
PASS: helin-segv
PASS: help-version
PASS: hufts
PASS: keep
PASS: list
PASS: list-big
PASS: memcpy-abuse
PASS: mixed
PASS: null-suffix-clobber
PASS: reproducible
PASS: stdin
PASS: timestamp
PASS: two-files
PASS: trailing-nul
PASS: unpack-invalid
PASS: unpack-valid
PASS: upper-suffix
PASS: z-suffix
PASS: zdiff
PASS: zgrep-f
PASS: zgrep-abuse
PASS: zgrep-binary
PASS: zgrep-context
zgrep-signal: set-up failure: signal handling busted on this host
ERROR: zgrep-signal
PASS: znew-k
=====================================
   gzip 1.12: tests/test-suite.log
=====================================

# TOTAL: 26
# PASS:  25
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 1

.. contents:: :depth: 2

ERROR: zgrep-signal
===================

++ initial_cwd_=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12/tests
+++ testdir_prefix_
+++ printf gt
++ pfx_=gt
+++ mktempd_ /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12/tests gt-zgrep-signal.XXXX
+++ destdir_=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12/tests
+++ template_=gt-zgrep-signal.XXXX
+++ MAX_TRIES_=4
+++ destdir_slash_=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12/tests/
++++ unset TMPDIR
+++ d=/tmp/-p.cts5cSrW
gt-zgrep-signal.jhm7
++++ echo gt-zgrep-signal.XXXX
++++ sed 's/XX*$//'
+++ base_template_=gt-zgrep-signal.
++++ echo gt-zgrep-signal.XXXX
++++ wc -c
+++ template_length_=      21
++++ echo gt-zgrep-signal.
++++ wc -c
+++ nx_=      17
++++ expr 21 - 17
+++ nx_=4
+++ err_=
+++ i_=1
+++ :
++++ rand_bytes_ 4
++++ n_=4
++++ chars_=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
++++ dev_rand_=/dev/urandom
++++ test -r /dev/urandom
++++ dd ibs=4 count=1 if=/dev/urandom
++++ LC_ALL=C
++++ tr -c abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 01234567abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
++++ return
+++ X_=IOgc
+++ candidate_dir_=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12/tests/gt-zgrep-signal.IOgc
++++ mkdir -m 0700 /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12/tests/gt-zgrep-signal.IOgc
+++ err_=
+++ echo /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12/tests/gt-zgrep-signal.IOgc
+++ return
++ test_dir_=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12/tests/gt-zgrep-signal.IOgc
++ cd /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12/tests/gt-zgrep-signal.IOgc
++ srcdir=../.
++ builddir=..
++ export srcdir builddir
++ gl_init_sh_nl_=

++ IFS= 	

+++ expr 1 + 128
++ eval 'trap '\''Exit 129'\'' 1'
+++ trap 'Exit 129' 1
+++ expr 2 + 128
++ eval 'trap '\''Exit 130'\'' 2'
+++ trap 'Exit 130' 2
+++ expr 3 + 128
++ eval 'trap '\''Exit 131'\'' 3'
+++ trap 'Exit 131' 3
+++ expr 13 + 128
++ eval 'trap '\''Exit 141'\'' 13'
+++ trap 'Exit 141' 13
+++ expr 15 + 128
++ eval 'trap '\''Exit 143'\'' 15'
+++ trap 'Exit 143' 15
++ saved_IFS= 	

++ IFS=:
++ new_PATH=
++ sep_=
++ test -d /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12
++ sep_=:
++ test -d /opt/local/bin/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12:/opt/local/bin
++ sep_=:
++ test -d /opt/local/sbin/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12:/opt/local/bin:/opt/local/sbin
++ sep_=:
++ test -d /bin/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12:/opt/local/bin:/opt/local/sbin:/bin
++ sep_=:
++ test -d /sbin/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12:/opt/local/bin:/opt/local/sbin:/bin:/sbin
++ sep_=:
++ test -d /usr/bin/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12:/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin
++ sep_=:
++ test -d /usr/sbin/.
++ new_PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12:/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin
++ sep_=:
++ IFS= 	

++ PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12:/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin
++ export PATH
++ trap remove_tmp_ 0
+ path_prepend_ ..
+ test 1 '!=' 0
+ path_dir_=..
+ abs_path_dir_=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12/tests/..
+ PATH=/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12/tests/..:/opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12:/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin
+ create_exe_shims_ /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12/tests/..
+ return 0
+ shift
+ test 0 '!=' 0
+ export PATH
+ echo a
+ gzip -c
+ test x = x
+ PERL=perl
+ write_to_dangling_pipe cat f.gz f.gz
+ program=cat
+ shift
+ args=
+ args=, 'f.gz'
+ args=, 'f.gz', 'f.gz'
+ perl -e '
     use POSIX qw(dup2);
     $SIG{PIPE} = "DEFAULT";
     pipe my ($read_end, $write_end) or die "pipe: $!\n";
     dup2 fileno $write_end, 1 or die "dup2: $!\n";
     close $read_end or die "close: $!\n";
     exec '\''cat'\'', '\''f.gz'\'', '\''f.gz'\'';
  '
cat: f.gz: Bad file descriptor
+ signal_status=1
+ test 128 -lt 1
+ framework_failure_ 'signal handling busted on this host'
+ warn_ 'zgrep-signal: set-up failure: signal handling busted on this host'
+ printf '%s\n' 'zgrep-signal: set-up failure: signal handling busted on this host'
zgrep-signal: set-up failure: signal handling busted on this host
+ test 9 = 2
+ printf '%s\n' 'zgrep-signal: set-up failure: signal handling busted on this host'
+ sed 1q
+ Exit 99
+ set +e
+ exit 99
+ exit 99
+ remove_tmp_
+ __st=99
+ cleanup_
+ :
+ test '' = yes
+ cd /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12/tests
+ chmod -R u+rwx /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12/tests/gt-zgrep-signal.IOgc
+ rm -rf /opt/local/var/macports/build/nue.de.rsync.macports.org_macports_release_tarballs_ports_archivers_gzip/gzip/work/gzip-1.12/tests/gt-zgrep-signal.IOgc
+ exit 99
ERROR zgrep-signal (exit status: 99)

============================================================================
Testsuite summary for gzip 1.12
============================================================================
# TOTAL: 26
# PASS:  25
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 1
============================================================================
See tests/test-suite.log
Please report to [email-masked]
============================================================================

So both releases give similar test results.

Attached is the set of patches I used on Tiger.

--

Greetings
  Pete

Perl—the only language that looks the same before and after RSA encryption.
				- Keith Bostic