Subject: bug#77840: [bug-diffutils] bug#77840: Testing diffutils 3.12 on PPC Mac OS X 10.4.11, Tiger, produces so many failures

From: Peter Dyballa <[email-masked]>
Date: Thu, 5 Jun 2025 12:10:25 +0200

> Am 21.05.2025 um 13:35 schrieb Peter Dyballa <[email-masked]>:
> 
> On my recent Mac with Sonoma 14.7 testing diffutils 3.12 shows same results as in the supplied reference. On the old PowerBook G4 the log files from tests show that the just built binaries do not work in many cases because of "program error".

This report from PPC Mac OS X 10.4.11, Tiger, is also true for PPC Mac OS X 10.5.8, Leopard. Repeatedly a "program error" happens – and then tests stall:

	+ case $abs_path_dir_ in
	+ PATH=/opt/local/var/macports/build/_Volumes_BSD-Linux_MacPorts-Ports_sysutils_diffutils/diffutils/work/diffutils-3.12/tests/../src:/opt/local/var/macports/build/_Volumes_BSD-Linux_MacPorts-Ports_sysutils_diffutils/diffutils/work/diffutils-3.12/src:/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin
	+ create_exe_shims_ /opt/local/var/macports/build/_Volumes_BSD-Linux_MacPorts-Ports_sysutils_diffutils/diffutils/work/diffutils-3.12/tests/../src
	+ case $EXEEXT in
	+ return 0
	+ shift
	+ test 0 '!=' 0
	+ export PATH
	+ fail=0
	+ cat
	+ cat
	+ cat
	+ echo a
	+ echo b
	+ for opt in ''\'''\''' -u -c
	+ returns_ 1 diff a b
	+ fail=1
	+ sed -e 's/^\([-+*][-+*][-+*] [^	]*\)	.*/\1/' out
	+ mv k out
	++ echo
	++ tr ' ' _
	+ compare exp- out
	+ compare_dev_null_ exp- out
	+ test 2 = 2
	+ test xexp- = x/dev/null
	+ test xout = x/dev/null
	+ return 2
	+ case $? in
	+ compare_ exp- out
	+ LC_ALL=C
	+ diff -u exp- out
	diff: program error
	diff: program error
	--- exp-	2025-06-05 09:22:29.000000000 +0200
	+++ out	2025-06-05 09:22:34.000000000 +0200
	@@ -1,4 +1,4 @@
	-1c1
	-< a
	----
	-> b
	-./init.sh: line 692: 28308 Abort trap              LC_ALL=C diff $diff_opt_ "$@"
	+ fail=1
	+ for opt in ''\'''\''' -u -c
	+ returns_ 1 diff -u a b

The trap closes here:

	  640	
	  641	# Arrange not to let diff or cmp operate on /dev/null,
	  642	# since on some systems (at least OSF/1 5.1), that doesn't work.
	  643	# When there are not two arguments, or no argument is /dev/null, return 2.
	  644	# When one argument is /dev/null and the other is not empty,
	  645	# cat the nonempty file to stderr and return 1.
	  646	# Otherwise, return 0.
	  647	compare_dev_null_ ()
	  648	{
	  649	  test $# = 2 || return 2
	  650	
	  651	  if test "x$1" = x/dev/null; then
	  652	    test -s "$2" || return 0
	  653	    emit_diff_u_header_ "$@"; sed 's/^/+/' "$2"
	  654	    return 1
	  655	  fi
	  656	
	  657	  if test "x$2" = x/dev/null; then
	  658	    test -s "$1" || return 0
	  659	    emit_diff_u_header_ "$@"; sed 's/^/-/' "$1"
	  660	    return 1
	  661	  fi
	  662	
	  663	  return 2
	  664	}
	  665	
	  666	for diff_opt_ in -u -U3 -c '' no; do
	  667	  test "$diff_opt_" != no &&
	  668	    diff_out_=`exec 2>/dev/null
	  669	      LC_ALL=C diff $diff_opt_ "$0" "$0" < /dev/null` &&
	  670	    break
	  671	done
	  672	if test "$diff_opt_" != no; then
	  673	  if test -z "$diff_out_"; then
	  674	    # diff on msys2 does not support the '-' argument for denoting stdin.
	  675	    case `(uname -o) 2>/dev/null` in
	  676	      Msys)
	  677	        compare_ ()
	  678	        {
	  679	          if test " $1" = " -"; then
	  680	            cat > '(stdin)'
	  681	            LC_ALL=C diff $diff_opt_ '(stdin)' "$2"
	  682	          elif test " $2" = " -"; then
	  683	            cat > '(stdin)'
	  684	            LC_ALL=C diff $diff_opt_ "$1" '(stdin)'
	  685	          else
	  686	            LC_ALL=C diff $diff_opt_ "$@"
	  687	          fi
	  688	        }
	  689	        ;;
	  690	      *)
	  691	        compare_ ()
	  692	        {
	  693	          LC_ALL=C diff $diff_opt_ "$@"
	  694	        }
	  695	    esac
	  696	  else
	  697	    compare_ ()
	  698	    {
	  699	      # If no differences were found, AIX and HP-UX 'diff' produce output
	  700	      # like "No differences encountered".  Hide this output.
	  701	      LC_ALL=C diff $diff_opt_ "$@" > diff.out
	  702	      diff_status_=$?
	  703	      test $diff_status_ -eq 0 || cat diff.out || diff_status_=2
	  704	      rm -f diff.out || diff_status_=2
	  705	      return $diff_status_
	  706	    }
	  707	  fi
	  708	elif cmp -s /dev/null /dev/null 2>/dev/null; then
	  709	  compare_ () { cmp -s "$@"; }
	  710	else
	  711	  compare_ () { cmp "$@"; }
	  712	fi

--
Greetings

  Pete

Rain is saved up in cloud banks.