Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 11 Mar 2026 01:31:34 +0000
From:      Alexey Dokuchaev <danfe@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: edb0110477ad - main - devel/patch: update GNU patch to the latest version 2.8
Message-ID:  <69b0c5f6.237d3.5aa958e2@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by danfe:

URL: https://cgit.FreeBSD.org/ports/commit/?id=edb0110477ad8ecf2f1f9e5ee71a89188cab1f97

commit edb0110477ad8ecf2f1f9e5ee71a89188cab1f97
Author:     Alexey Dokuchaev <danfe@FreeBSD.org>
AuthorDate: 2026-03-11 01:29:52 +0000
Commit:     Alexey Dokuchaev <danfe@FreeBSD.org>
CommitDate: 2026-03-11 01:29:52 +0000

    devel/patch: update GNU patch to the latest version 2.8
    
    - GC previous Debian patches, backport new upstream fixes:
      add missing filename quoting, enable merge, skip read-only
      check when output file specified, reject empty filenames
    - On i386, apply the same fix as Debian for Hurd/i386
    - The port now seemingly builds fine with BSD make(1)
    - Install some standard documentation files
    
    PR:     285796
---
 devel/patch/Makefile                          | 27 +++++---
 devel/patch/distinfo                          |  8 +--
 devel/patch/files/patch-lib__Makefile.in      | 43 ------------
 devel/patch/files/patch-lib__localcharset.c   | 98 ---------------------------
 devel/patch/files/patch-src_patch.c           | 42 ++++++++++++
 devel/patch/files/patch-src_safe.c            | 11 +++
 devel/patch/files/patch-tests_bad-filenames   | 14 ++++
 devel/patch/files/patch-tests_read-only-files | 11 +++
 8 files changed, 97 insertions(+), 157 deletions(-)

diff --git a/devel/patch/Makefile b/devel/patch/Makefile
index 306d44745c9c..fde3be88ffac 100644
--- a/devel/patch/Makefile
+++ b/devel/patch/Makefile
@@ -1,10 +1,7 @@
 PORTNAME=	patch
-PORTVERSION=	2.7.6
-PORTREVISION=	2
+PORTVERSION=	2.8
 CATEGORIES=	devel
-MASTER_SITES=	GNU DEBIAN_POOL:dp
-DISTFILES=	${DISTNAME}${EXTRACT_SUFX} \
-		${PORTNAME}_${PORTVERSION}-7.debian${EXTRACT_SUFX}:dp
+MASTER_SITES=	GNU
 
 MAINTAINER=	danfe@FreeBSD.org
 COMMENT=	GNU patch utility
@@ -12,24 +9,32 @@ WWW=		https://savannah.gnu.org/projects/patch/
 
 LICENSE=	GPLv3+
 
-EXTRA_PATCHES=	${WRKDIR}/debian/patches/[^0]*.patch \
-		${WRKDIR}/debian/patches/0*.patch
-PATCH_STRIP=	-p1
-
 TEST_DEPENDS=	bash:shells/bash
 
-USES=		cpe charsetfix gmake tar:xz
+USES=		charsetfix cpe tar:xz
 GNU_CONFIGURE=	yes
-GNU_CONFIGURE_MANPREFIX=	${PREFIX}/share
 CONFIGURE_ARGS=	--program-prefix=g
 CPE_VENDOR=	gnu
 
 TEST_TARGET=	check
 
 PLIST_FILES=	bin/gpatch share/man/man1/gpatch.1.gz
+PORTDOCS=	AUTHORS NEWS README
+
+OPTIONS_DEFINE=	DOCS
+
+.include <bsd.port.options.mk>
+
+.if ${ARCH} == i386
+CONFIGURE_ARGS+=	--disable-year2038
+.endif
 
 post-patch:
 	@${REINPLACE_CMD} -e '/^LOG_COMPILER =/,+1s|$$(SHELL)|bash|' \
 		${WRKSRC}/tests/Makefile.in
 
+post-install-DOCS-on:
+	@${MKDIR} ${STAGEDIR}${DOCSDIR}
+	${INSTALL_DATA} ${PORTDOCS:S,^,${WRKSRC}/,} ${STAGEDIR}${DOCSDIR}
+
 .include <bsd.port.mk>
diff --git a/devel/patch/distinfo b/devel/patch/distinfo
index 040c48268c31..13484191763d 100644
--- a/devel/patch/distinfo
+++ b/devel/patch/distinfo
@@ -1,5 +1,3 @@
-TIMESTAMP = 1518689812
-SHA256 (patch-2.7.6.tar.xz) = ac610bda97abe0d9f6b7c963255a11dcb196c25e337c61f94e4778d632f1d8fd
-SIZE (patch-2.7.6.tar.xz) = 783756
-SHA256 (patch_2.7.6-7.debian.tar.xz) = 7725f30b042d8cf63516e480036e93ca2ff0ce5ad3754db4a4e69d33e96a2624
-SIZE (patch_2.7.6-7.debian.tar.xz) = 15084
+TIMESTAMP = 1743267130
+SHA256 (patch-2.8.tar.xz) = f87cee69eec2b4fcbf60a396b030ad6aa3415f192aa5f7ee84cad5e11f7f5ae3
+SIZE (patch-2.8.tar.xz) = 907208
diff --git a/devel/patch/files/patch-lib__Makefile.in b/devel/patch/files/patch-lib__Makefile.in
deleted file mode 100644
index b003f55b4db3..000000000000
--- a/devel/patch/files/patch-lib__Makefile.in
+++ /dev/null
@@ -1,43 +0,0 @@
---- ./lib/Makefile.in.orig	2018-02-03 13:33:56 UTC
-+++ ./lib/Makefile.in
-@@ -1603,7 +1603,7 @@ install-data: install-data-am
- uninstall: uninstall-am
- 
- install-am: all-am
--	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+	@$(MAKE) $(AM_MAKEFLAGS) install-data-am
- 
- installcheck: installcheck-am
- install-strip:
-@@ -1966,11 +1966,11 @@ install-exec-localcharset: all-local
- 	if test $(GLIBC21) = no; then \
- 	  case '$(host_os)' in \
- 	    darwin[56]*) \
--	      need_charset_alias=true ;; \
-+	      need_charset_alias=false ;; \
- 	    darwin* | cygwin* | mingw* | pw32* | cegcc*) \
- 	      need_charset_alias=false ;; \
- 	    *) \
--	      need_charset_alias=true ;; \
-+	      need_charset_alias=false ;; \
- 	  esac ; \
- 	else \
- 	  need_charset_alias=false ; \
-@@ -1978,7 +1978,7 @@ install-exec-localcharset: all-local
- 	if $$need_charset_alias; then \
- 	  $(mkinstalldirs) $(DESTDIR)$(libdir) ; \
- 	fi ; \
--	if test -f $(charset_alias); then \
-+	if false; then \
- 	  sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \
- 	  $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
- 	  rm -f $(charset_tmp) ; \
-@@ -1992,7 +1992,7 @@ install-exec-localcharset: all-local
- 
- uninstall-local: uninstall-localcharset
- uninstall-localcharset: all-local
--	if test -f $(charset_alias); then \
-+	if false; then \
- 	  sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \
- 	  if grep '^# Packages using this file: $$' $(charset_tmp) \
- 	      > /dev/null; then \
diff --git a/devel/patch/files/patch-lib__localcharset.c b/devel/patch/files/patch-lib__localcharset.c
deleted file mode 100644
index adc0bc917244..000000000000
--- a/devel/patch/files/patch-lib__localcharset.c
+++ /dev/null
@@ -1,98 +0,0 @@
---- ./lib/localcharset.c.orig	2018-02-03 12:42:20 UTC
-+++ ./lib/localcharset.c
-@@ -129,7 +129,7 @@ get_charset_aliases (void)
-   cp = charset_aliases;
-   if (cp == NULL)
-     {
--#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__ || defined OS2)
-+#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__ || defined OS2 || defined __FreeBSD__)
-       char *malloc_dir = NULL;
-       const char *dir;
-       const char *base = "charset.alias";
-@@ -259,6 +259,86 @@ get_charset_aliases (void)
- 
- #else
- 
-+# if defined __FreeBSD__
-+      /* To avoid the trouble of installing a file that is shared by many
-+         GNU packages -- many packaging systems have problems with this --,
-+         simply inline the aliases here.  */
-+      cp = "US-ASCII" "\0" "ASCII" "\0"
-+           "la_LN.ASCII" "\0" "ASCII" "\0"
-+           "lt_LN.ASCII" "\0" "ASCII" "\0"
-+           "da_DK.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "da_DK.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "de_AT.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "de_AT.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "de_CH.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "de_CH.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "de_DE.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "de_DE.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "en_AU.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "en_AU.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "en_CA.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "en_CA.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "en_GB.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "en_GB.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "en_US.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "en_US.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "es_ES.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "es_ES.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "fi_FI.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "fi_FI.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "fr_BE.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "fr_BE.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "fr_CA.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "fr_CA.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "fr_CH.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "fr_CH.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "fr_FR.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "fr_FR.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "is_IS.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "is_IS.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "it_CH.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "it_CH.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "it_IT.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "it_IT.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "la_LN.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "la_LN.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "lt_LN.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "lt_LN.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "nl_BE.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "nl_BE.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "nl_NL.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "nl_NL.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "no_NO.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "no_NO.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "pt_PT.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "pt_PT.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "sv_SE.ISO_8859-1" "\0" "ISO-8859-1" "\0"
-+           "sv_SE.DIS_8859-15" "\0" "ISO-8859-15" "\0"
-+           "cs_CZ.ISO_8859-2" "\0" "ISO-8859-2" "\0"
-+           "hr_HR.ISO_8859-2" "\0" "ISO-8859-2" "\0"
-+           "hu_HU.ISO_8859-2" "\0" "ISO-8859-2" "\0"
-+           "la_LN.ISO_8859-2" "\0" "ISO-8859-2" "\0"
-+           "lt_LN.ISO_8859-2" "\0" "ISO-8859-2" "\0"
-+           "pl_PL.ISO_8859-2" "\0" "ISO-8859-2" "\0"
-+           "sl_SI.ISO_8859-2" "\0" "ISO-8859-2" "\0"
-+           "la_LN.ISO_8859-4" "\0" "ISO-8859-4" "\0"
-+           "lt_LT.ISO_8859-4" "\0" "ISO-8859-4" "\0"
-+           "ru_RU.KOI8-R" "\0" "KOI8-R" "\0"
-+           "ru_RU.ISO_8859-5" "\0" "ISO-8859-5" "\0"
-+           "ru_RU.CP866" "\0" "CP866" "\0"
-+           "ru_SU.KOI8-R" "\0" "KOI8-R" "\0"
-+           "ru_SU.ISO_8859-5" "\0" "ISO-8859-5" "\0"
-+           "ru_SU.CP866" "\0" "CP866" "\0"
-+           "uk_UA.KOI8-U" "\0" "KOI8-U" "\0"
-+           "zh_TW.BIG5" "\0" "BIG5" "\0"
-+           "zh_TW.Big5" "\0" "BIG5" "\0"
-+           "zh_CN.EUC" "\0" "GB2312" "\0"
-+           "ja_JP.EUC" "\0" "EUC-JP" "\0"
-+           "ja_JP.SJIS" "\0" "SHIFT_JIS" "\0"
-+           "ja_JP.Shift_JIS" "\0" "SHIFT_JIS" "\0"
-+           "ko_KR.EUC" "\0" "EUC-KR" "\0";
-+# endif
-+
- # if defined DARWIN7
-       /* To avoid the trouble of installing a file that is shared by many
-          GNU packages -- many packaging systems have problems with this --,
diff --git a/devel/patch/files/patch-src_patch.c b/devel/patch/files/patch-src_patch.c
new file mode 100644
index 000000000000..c73213852bd2
--- /dev/null
+++ b/devel/patch/files/patch-src_patch.c
@@ -0,0 +1,42 @@
+--- src/patch.c.orig	2025-02-27 13:33:25 UTC
++++ src/patch.c
+@@ -204,7 +204,10 @@ main (int argc, char **argv)
+ 
+     init_output (&outstate);
+     if (outfile)
+-      outstate.ofp = open_outfile (outfile);
++      {
++        outstate.ofp = open_outfile (outfile);
++        read_only_behavior = RO_IGNORE;
++      }
+ 
+     /* Make sure we clean up in case of disaster.  */
+     init_signals ();
+@@ -323,7 +326,8 @@ main (int argc, char **argv)
+ 	    }
+ 	}
+ 
+-      if (read_only_behavior != RO_IGNORE
++      if (! skip_rest_of_patch
++	  && read_only_behavior != RO_IGNORE
+ 	  && ! inerrno && ! S_ISLNK (instat.st_mode)
+ 	  && safe_access (inname, W_OK) != 0)
+ 	{
+@@ -616,7 +620,7 @@ main (int argc, char **argv)
+ 		      struct stat outstat;
+ 
+ 		      if (stat_file (outname, &outstat) != 0)
+-			say ("Cannot stat file %s, skipping backup\n", outname);
++			say ("Cannot stat file %s, skipping backup\n", quotearg (outname));
+ 		      else
+ 			output_file (&(struct outfile) { .name = outname },
+ 				     &outstat, nullptr, nullptr,
+@@ -750,7 +754,7 @@ reinitialize_almost_everything (void)
+ }
+ 
+ static char const shortopts[] = "bB:cd:D:eEfF:g:i:l"
+-#if 0 && defined ENABLE_MERGE
++#if defined ENABLE_MERGE
+ 				"m"
+ #endif
+ 				"nNo:p:r:RstTuvV:x:Y:z:Z";
diff --git a/devel/patch/files/patch-src_safe.c b/devel/patch/files/patch-src_safe.c
new file mode 100644
index 000000000000..30c727e8bb69
--- /dev/null
+++ b/devel/patch/files/patch-src_safe.c
@@ -0,0 +1,11 @@
+--- src/safe.c.orig	2025-02-27 13:33:25 UTC
++++ src/safe.c
+@@ -571,6 +571,8 @@ safe_xstat (char *pathname, struct stat *buf, int flag
+   int dirfd = traverse_path (&pathname, false);
+   if (dirfd == DIRFD_INVALID)
+     return -1;
++  if (! strcmp (pathname, ""))
++    return EINVAL;
+   return fstatat (dirfd, pathname, buf, flags);
+ }
+ 
diff --git a/devel/patch/files/patch-tests_bad-filenames b/devel/patch/files/patch-tests_bad-filenames
new file mode 100644
index 000000000000..717200056ce7
--- /dev/null
+++ b/devel/patch/files/patch-tests_bad-filenames
@@ -0,0 +1,14 @@
+--- tests/bad-filenames.orig	2025-02-27 13:33:25 UTC
++++ tests/bad-filenames
+@@ -200,3 +200,11 @@ No file to patch.  Skipping patch.
+ 1 out of 1 hunk ignored
+ status: 1
+ EOF
++
++# Empty filenames are not allowed:
++
++check 'emit_patch f | patch -r- "" || echo status: $?' <<EOF
++File '' is not a regular file -- refusing to patch
++1 out of 1 hunk ignored
++status: 1
++EOF
diff --git a/devel/patch/files/patch-tests_read-only-files b/devel/patch/files/patch-tests_read-only-files
new file mode 100644
index 000000000000..85fa9b528356
--- /dev/null
+++ b/devel/patch/files/patch-tests_read-only-files
@@ -0,0 +1,11 @@
+--- tests/read-only-files.orig	2025-02-27 13:33:25 UTC
++++ tests/read-only-files
+@@ -67,3 +67,8 @@ check 'patch -f -p0 --read-only=ignore < f.diff || ech
+ patching file f
+ patching file f
+ EOF
++
++check 'patch -o - f /dev/null || echo "Status: $?"' <<EOF
++patching file - (read from f)
++three
++EOF


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69b0c5f6.237d3.5aa958e2>