diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/0001-sdiff-pacify-gcc-flto-Wmaybe-uninitialized.patch b/0001-sdiff-pacify-gcc-flto-Wmaybe-uninitialized.patch new file mode 100644 index 0000000..bd3edc0 --- /dev/null +++ b/0001-sdiff-pacify-gcc-flto-Wmaybe-uninitialized.patch @@ -0,0 +1,85 @@ +From 45a4762bf3241e7fb6a2e01d382791ae44236841 Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Wed, 23 Apr 2025 11:34:20 -0700 +Subject: [PATCH] sdiff: pacify gcc -flto -Wmaybe-uninitialized + +* src/sdiff.c (edit): Portmanteauize two locals into one, which +arguably makes the code clearer, and anyway pacifies gcc -flto +-Wmaybe-uninitialized with gcc (GCC) 15.0.1 20250329 (Red Hat +15.0.1-0) x86-64 (Bug#78019). +--- + src/sdiff.c | 19 +++++++++++-------- + 1 file changed, 11 insertions(+), 8 deletions(-) + +diff --git a/src/sdiff.c b/src/sdiff.c +index 5b1b162..15b8dce 100644 +--- a/src/sdiff.c ++++ b/src/sdiff.c +@@ -857,8 +857,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, + { + for (;;) + { +- int cmd0; +- int cmd1; ++ int cmd; + bool gotcmd = false; + + while (! gotcmd) +@@ -867,8 +866,8 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, + perror_fatal (_("write failed")); + ck_fflush (stdout); + +- cmd0 = skip_white (); +- switch (cmd0) ++ cmd = skip_white (); ++ switch (cmd) + { + case '1': case '2': case 'l': case 'r': + case 's': case 'v': case 'q': +@@ -882,12 +881,15 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, + break; + + case 'e': +- cmd1 = skip_white (); ++ int cmd1 = skip_white (); + switch (cmd1) + { + case '1': case '2': case 'b': case 'd': case 'l': case 'r': + if (skip_white () == '\n') +- gotcmd = true; ++ { ++ gotcmd = true; ++ cmd |= cmd1 << UCHAR_WIDTH; ++ } + else + { + give_help (); +@@ -908,7 +910,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, + if (feof (stdin)) + { + gotcmd = true; +- cmd0 = 'q'; ++ cmd = 'q'; + break; + } + FALLTHROUGH; +@@ -921,7 +923,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, + } + } + +- switch (cmd0) ++ switch (cmd & UCHAR_MAX) + { + case '1': case 'l': + lf_copy (left, llen, outfile); +@@ -954,6 +956,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, + if (! tmp) + perror_fatal (squote (0, tmpname)); + ++ int cmd1 = cmd >> UCHAR_WIDTH; + switch (cmd1) + { + case 'd': +-- +2.48.1 + diff --git a/0001-sdiff-port-back-to-C17.patch b/0001-sdiff-port-back-to-C17.patch new file mode 100644 index 0000000..c7fc16a --- /dev/null +++ b/0001-sdiff-port-back-to-C17.patch @@ -0,0 +1,27 @@ +From 686357a40ca038edc902276cb3b33f4757d8cfb2 Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Sat, 26 Apr 2025 12:54:06 -0700 +Subject: [PATCH] sdiff: port back to C17- + +* src/sdiff.c (edit): Do not use a label just before a statement. +Problem reported by Bruno Haible (Bug#78032). +--- + src/sdiff.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/sdiff.c b/src/sdiff.c +index 15b8dce..cc961c3 100644 +--- a/src/sdiff.c ++++ b/src/sdiff.c +@@ -880,7 +880,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, + } + break; + +- case 'e': ++ case 'e':; + int cmd1 = skip_white (); + switch (cmd1) + { +-- +2.48.1 + diff --git a/diffutils-3.12-cross-compiler-build-fail.patch b/diffutils-3.12-cross-compiler-build-fail.patch new file mode 100644 index 0000000..c2cba1c --- /dev/null +++ b/diffutils-3.12-cross-compiler-build-fail.patch @@ -0,0 +1,30 @@ +From d9083a4cc638cf9c7dfc3cc534a7c6b4debf50ab Mon Sep 17 00:00:00 2001 +From: Bruno Haible +Date: Thu, 10 Apr 2025 16:42:14 +0200 +Subject: strcasecmp: Support cross-compilation. + +Reported by Rudi Heitbaum in +. + +diff --git a/m4/strcasecmp.m4 b/m4/strcasecmp.m4 +index e40ee5d..eb4345d 100644 +--- a/m4/strcasecmp.m4 ++++ b/m4/strcasecmp.m4 +@@ -1,5 +1,5 @@ + # strcasecmp.m4 +-# serial 2 ++# serial 3 + dnl Copyright (C) 2002-2025 Free Software Foundation, Inc. + dnl This file is free software; the Free Software Foundation + dnl gives unlimited permission to copy and/or distribute it, +@@ -57,7 +57,7 @@ int main () + gl_cv_func_strcasecmp_works=no + fi + ], +- []) ++ [:]) + ]) + ]) + +-- +cgit v1.1 diff --git a/diffutils-3.12-sdiff-continue-break.patch b/diffutils-3.12-sdiff-continue-break.patch new file mode 100644 index 0000000..59fac2a --- /dev/null +++ b/diffutils-3.12-sdiff-continue-break.patch @@ -0,0 +1,65 @@ +commit 80053ab7b57c1f0825deb4a22018dacfa62d7272 +Author: Paul Eggert +Date: Wed Apr 23 11:17:53 2025 -0700 + + sdiff: continue → break + + * src/sdiff.c (edit): Don’t use ‘continue’ when a simple + break from the switch will do. + +diff --git a/src/sdiff.c b/src/sdiff.c +index 7734a82..5b1b162 100644 +--- a/src/sdiff.c ++++ b/src/sdiff.c +@@ -872,13 +872,13 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, + { + case '1': case '2': case 'l': case 'r': + case 's': case 'v': case 'q': +- if (skip_white () != '\n') ++ if (skip_white () == '\n') ++ gotcmd = true; ++ else + { + give_help (); + flush_line (); +- continue; + } +- gotcmd = true; + break; + + case 'e': +@@ -886,13 +886,13 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, + switch (cmd1) + { + case '1': case '2': case 'b': case 'd': case 'l': case 'r': +- if (skip_white () != '\n') ++ if (skip_white () == '\n') ++ gotcmd = true; ++ else + { + give_help (); + flush_line (); +- continue; + } +- gotcmd = true; + break; + case '\n': + gotcmd = true; +@@ -900,7 +900,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, + default: + give_help (); + flush_line (); +- continue; ++ break; + } + break; + +@@ -917,7 +917,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, + FALLTHROUGH; + case '\n': + give_help (); +- continue; ++ break; + } + } + diff --git a/diffutils.spec b/diffutils.spec index e0a2478..3c90eaf 100644 --- a/diffutils.spec +++ b/diffutils.spec @@ -1,11 +1,18 @@ Summary: GNU collection of diff utilities Name: diffutils Version: 3.12 -Release: 1%{?dist} +Release: 3%{?dist} URL: https://www.gnu.org/software/diffutils/diffutils.html Source: https://ftp.gnu.org/gnu/diffutils/diffutils-%{version}.tar.xz # upstream fixes - +# cross compile build of 3.12 diffutils fails +Patch: diffutils-3.12-cross-compiler-build-fail.patch +# sdiff: continue → break +Patch: diffutils-3.12-sdiff-continue-break.patch +# sdiff: pacify gcc -flto -Wmaybe-uninitialized +Patch: 0001-sdiff-pacify-gcc-flto-Wmaybe-uninitialized.patch +# sdiff: port back to C17 +Patch: 0001-sdiff-port-back-to-C17.patch License: GPL-3.0-or-later Provides: bundled(gnulib) BuildRequires: gcc @@ -55,6 +62,16 @@ make check %{_infodir}/diffutils.info* %changelog +* Wed Jul 23 2025 Fedora Release Engineering - 3.12-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Mon May 05 2025 Than Ngo - 3.12-2 +- Upstream patches + * cross compile build of 3.12 diffutils fails + * sdiff: continue → break + * sdiff: pacify gcc -flto -Wmaybe-uninitialized + * sdiff: port back to C17 + * Fri Apr 11 2025 Than Ngo - 3.12-1 - Fixed rhbz#2358545, Update to 3.12 diff --git a/plans/ci.fmf b/plans/ci.fmf new file mode 100644 index 0000000..c1627f9 --- /dev/null +++ b/plans/ci.fmf @@ -0,0 +1,5 @@ +summary: Basic smoke test +discover: + how: fmf +execute: + how: tmt diff --git a/tests/cmp-s-returns-1-even-if-files-are-identical/main.fmf b/tests/cmp-s-returns-1-even-if-files-are-identical/main.fmf new file mode 100644 index 0000000..d7910cc --- /dev/null +++ b/tests/cmp-s-returns-1-even-if-files-are-identical/main.fmf @@ -0,0 +1,17 @@ +summary: Test for cmp -s returns 1 even if files are identical +description: "Bug summary: cmp -s returns 1 even if files are identical\n\nDescription:\n\ + 'cmp -s' can return 1 even if files are identical, for example, if comparing\n\ + a file from /proc with a copy of that file in /tmp, since all files in\n/proc + have a size of 0 bytes.\n" +contact: Jeffrey Bastian +component: + - diffutils +test: ./runtest.sh +framework: beakerlib +recommend: + - diffutils +duration: 5m +extra-summary: + /CoreOS/diffutils/Regression/cmp-s-returns-1-even-if-files-are-identical +extra-task: + /CoreOS/diffutils/Regression/cmp-s-returns-1-even-if-files-are-identical diff --git a/tests/cmp-s-returns-1-even-if-files-are-identical/runtest.sh b/tests/cmp-s-returns-1-even-if-files-are-identical/runtest.sh old mode 100644 new mode 100755 index 4e16f2b..72ded09 --- a/tests/cmp-s-returns-1-even-if-files-are-identical/runtest.sh +++ b/tests/cmp-s-returns-1-even-if-files-are-identical/runtest.sh @@ -26,8 +26,7 @@ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Include rhts environment -. /usr/bin/rhts-environment.sh -. /usr/share/rhts-library/rhtslib.sh +. /usr/share/beakerlib/beakerlib.sh || exit 1 PACKAGE="diffutils" #set -x diff --git a/tests/diff-Z-hangs/main.fmf b/tests/diff-Z-hangs/main.fmf new file mode 100644 index 0000000..b978f00 --- /dev/null +++ b/tests/diff-Z-hangs/main.fmf @@ -0,0 +1,13 @@ +summary: Test for diffutils to check if comparing two files using diff -Z with + mixed line endings doesn't hang +description: "Bug summary: diff -Z hangs\n" +contact: Filip Holec +component: + - diffutils +test: ./runtest.sh +framework: beakerlib +recommend: + - diffutils +duration: 5m +extra-summary: /CoreOS/diffutils/Regression/diff-Z-hangs +extra-task: /CoreOS/diffutils/Regression/diff-Z-hangs diff --git a/tests/diff-Z-hangs/runtest.sh b/tests/diff-Z-hangs/runtest.sh old mode 100644 new mode 100755 index ef14e65..79b396a --- a/tests/diff-Z-hangs/runtest.sh +++ b/tests/diff-Z-hangs/runtest.sh @@ -27,7 +27,6 @@ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Include Beaker environment -. /usr/bin/rhts-environment.sh . /usr/share/beakerlib/beakerlib.sh PACKAGE="diffutils" diff --git a/tests/diff-hang-long-files/main.fmf b/tests/diff-hang-long-files/main.fmf new file mode 100644 index 0000000..e41e226 --- /dev/null +++ b/tests/diff-hang-long-files/main.fmf @@ -0,0 +1,20 @@ +summary: Diff appears to hang in long file +description: "Test Name: diff-hang-long-files\nAuthor: Michal Fabry \n\ + Location: /CoreOS/diffutils/Regression/diff-hang-long-files\n\nShort Description: + Diff appears to hang in long file\n\n\nLong Description:\n\nRunning the \"diff + -bBw\" command on a very large input file (eg 250 MB), in a multi-byte locale + (ie UTF-8), took a very long time to complete, if at all. In a reported case, + a diff ran for multiple days and did not complete. In certain situations, this + could cause 100% CPU usage.\n" +contact: Michal Fabry +component: + - diffutils +test: ./runtest.sh +framework: beakerlib +recommend: + - diffutils + - words + - time +duration: 5m +extra-summary: /CoreOS/diffutils/Regression/diff-hang-long-files +extra-task: /CoreOS/diffutils/Regression/diff-hang-long-files diff --git a/tests/diff-hang-long-files/runtest.sh b/tests/diff-hang-long-files/runtest.sh old mode 100644 new mode 100755 index 18d3606..1457dfe --- a/tests/diff-hang-long-files/runtest.sh +++ b/tests/diff-hang-long-files/runtest.sh @@ -15,7 +15,6 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Include Beaker environment -. /usr/bin/rhts-environment.sh || exit 1 . /usr/share/beakerlib/beakerlib.sh || exit 1 @@ -76,3 +75,4 @@ rlPhaseEnd #rlCreateLogFromJournal | tee $OUTPUTFILE rlJournalPrintText +rlJournalEnd diff --git a/tests/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space/main.fmf b/tests/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space/main.fmf new file mode 100644 index 0000000..06210fd --- /dev/null +++ b/tests/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space/main.fmf @@ -0,0 +1,17 @@ +summary: Test for diffutils to ensure U3000 ideographic space is treated as + space when used -b or -w options +description: "Bug summary: diff -w/-b doesn't treat U3000 (IDEOGRAPHIC SPACE) as space\n\ + \nTest for diffutils to ensure U3000 ideographic space is treated as space when + used -b or -w options\n" +contact: Filip Holec +component: + - diffutils +test: ./runtest.sh +framework: beakerlib +recommend: + - diffutils +duration: 5m +extra-summary: + /CoreOS/diffutils/Regression/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space +extra-task: + /CoreOS/diffutils/Regression/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space diff --git a/tests/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space/runtest.sh b/tests/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space/runtest.sh old mode 100644 new mode 100755 index 46a760d..d84af01 --- a/tests/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space/runtest.sh +++ b/tests/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space/runtest.sh @@ -27,7 +27,6 @@ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Include Beaker environment -. /usr/bin/rhts-environment.sh . /usr/share/beakerlib/beakerlib.sh PACKAGE="diffutils" diff --git a/tests/sdiff-does-not-recognize-E-option/main.fmf b/tests/sdiff-does-not-recognize-E-option/main.fmf new file mode 100644 index 0000000..6fe5268 --- /dev/null +++ b/tests/sdiff-does-not-recognize-E-option/main.fmf @@ -0,0 +1,14 @@ +summary: Test for sdiff does not recognize -E option +description: "Bug summary: sdiff does not recognize -E option\n\nThe test runs sdiff + -E on two files differing just in use of tab/8 spaces. sdiff shall not fail and + shall return that the files are identical.\n" +contact: Martin Kyral +component: + - diffutils +test: ./runtest.sh +framework: beakerlib +recommend: + - diffutils +duration: 10m +extra-summary: /CoreOS/diffutils/Regression/sdiff-does-not-recognize-E-option +extra-task: /CoreOS/diffutils/Regression/sdiff-does-not-recognize-E-option diff --git a/tests/sdiff-does-not-recognize-E-option/runtest.sh b/tests/sdiff-does-not-recognize-E-option/runtest.sh old mode 100644 new mode 100755 index d60f29b..be034f2 --- a/tests/sdiff-does-not-recognize-E-option/runtest.sh +++ b/tests/sdiff-does-not-recognize-E-option/runtest.sh @@ -27,8 +27,7 @@ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Include Beaker environment -. /usr/bin/rhts-environment.sh -. /usr/lib/beakerlib/beakerlib.sh +. /usr/share/beakerlib/beakerlib.sh || exit 1 PACKAGE="diffutils" diff --git a/tests/tests.yml b/tests/tests.yml deleted file mode 100644 index 7f41590..0000000 --- a/tests/tests.yml +++ /dev/null @@ -1,18 +0,0 @@ ---- -# Tests that run in classic context -- hosts: localhost - roles: - - role: standard-test-beakerlib - tags: - - classic - - container - - atomic - tests: - - cmp-s-returns-1-even-if-files-are-identical - - diff-hang-long-files - - diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space - - diff-Z-hangs - - sdiff-does-not-recognize-E-option - - whitespace - required_packages: - - findutils # beakerlib needs find command diff --git a/tests/whitespace/main.fmf b/tests/whitespace/main.fmf new file mode 100644 index 0000000..955e588 --- /dev/null +++ b/tests/whitespace/main.fmf @@ -0,0 +1,15 @@ +summary: diff -b should ignore whitespace +description: "Create 2 files, f1, f2 with contents \"abc\" and \"abc \" (without quotes),\n\ + i.e. the same line with a space on the end.\n\nDiff ignoring whitespace:\n\ndiff + -b f1 f2\n\nshould produce no diff output, but does on F8. Works fine on FC6.\n\ + \nversion: diffutils-2.8.1-17.fc8\n" +contact: Bill Peck +component: + - diffutils +test: ./runtest.sh +framework: beakerlib +recommend: + - diffutils +duration: 5m +extra-summary: /CoreOS/diffutils/whitespace +extra-task: /CoreOS/diffutils/whitespace diff --git a/tests/whitespace/runtest.sh b/tests/whitespace/runtest.sh old mode 100644 new mode 100755 index 50348e9..9f28bf1 --- a/tests/whitespace/runtest.sh +++ b/tests/whitespace/runtest.sh @@ -15,8 +15,7 @@ # # Author: Bill Peck -. /usr/bin/rhts-environment.sh -. /usr/share/rhts-library/rhtslib.sh +. /usr/share/beakerlib/beakerlib.sh || exit 1 PACKAGE="diffutils"