commit:     4840372b76a3a23e06e3fb8142c1e8b66597e39e
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 25 04:38:06 2026 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Jan 25 04:38:06 2026 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=4840372b

app-editors/nano: fix build w/ glibc-2.43 + c23

Closes: https://bugs.gentoo.org/969220
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../nano/files/nano-8.7-glibc-2.43-c23.patch       | 142 +++++++++++++++++++++
 app-editors/nano/nano-8.7-r1.ebuild                | 117 +++++++++++++++++
 2 files changed, 259 insertions(+)

diff --git a/app-editors/nano/files/nano-8.7-glibc-2.43-c23.patch 
b/app-editors/nano/files/nano-8.7-glibc-2.43-c23.patch
new file mode 100644
index 000000000000..1f375ec03c24
--- /dev/null
+++ b/app-editors/nano/files/nano-8.7-glibc-2.43-c23.patch
@@ -0,0 +1,142 @@
+https://bugs.gentoo.org/969220
+https://src.fedoraproject.org/rpms/nano/blob/rawhide/f/nano-8.7-gnulib-c23.patch
+
+From c028b6f1804a8fef398d7642d8ccb7d8f73150fb Mon Sep 17 00:00:00 2001
+From: Paul Eggert <[email protected]>
+Date: Sun, 23 Nov 2025 00:50:40 -0800
+Subject: [PATCH] Port to C23 qualifier-generic fns like strchr
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This ports Gnulib to strict C23 platforms that reject code
+like ‘char *q = strchr (P, 'x');’ when P is a pointer to const,
+because in C23 strchr is a qualifier-generic function so
+strchr (P, 'x') returns char const *.
+This patch does not attempt to do the following two things,
+which might be useful in the future:
+1. When compiling on non-C23 platforms, check user code for
+portability to platforms that define qualifier-generic functions.
+2. Port Gnulib to platforms that have qualifier-generic functions
+not listed in the C23 standard, e.g., strchrnul.  I don’t know
+of any such platforms.
+* lib/c++defs.h (_GL_FUNCDECL_SYS_NAME): New macro.
+* lib/c++defs.h (_GL_FUNCDECL_SYS):
+* lib/stdlib.in.h (bsearch):
+Use it, to prevent C23 names like strchr from acting like macros.
+* lib/string.in.h (memchr, strchr, strpbrk, strrchr):
+Do not #undef when GNULIB_POSIXCHECK is defined, as this could
+cause conforming C23 code to fail to conform.  It’s not clear why
+_GL_WARN_ON_USE_CXX; perhaps it was needed but isn’t any more?
+But for now, limit the removal of #undef to these four functions
+where #undeffing is clearly undesirable in C23.
+* lib/wchar.in.h (wmemchr): Parenthesize function name in decl,
+to prevent it from acting like a macro.
+
+Cherry-picked-by: Lukáš Zaoral <[email protected]>
+Upstream-commit: df17f4f37ed3ca373d23ad42eae51122bdb96626
+---
+ lib/c++defs.h   | 12 +++++++++++-
+ lib/stdlib.in.h |  6 +++---
+ lib/string.in.h |  4 ----
+ lib/wchar.in.h  |  2 +-
+ 4 files changed, 15 insertions(+), 9 deletions(-)
+
+diff --git a/lib/c++defs.h b/lib/c++defs.h
+index b77979a..7384457 100644
+--- a/lib/c++defs.h
++++ b/lib/c++defs.h
+@@ -127,6 +127,16 @@
+ #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \
+   _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters
+ 
++/* _GL_FUNCDECL_SYS_NAME (func) expands to plain func if C++, and to
++   parenthsized func otherwise.  Parenthesization is needed in C23 if
++   the function is like strchr and so is a qualifier-generic macro
++   that expands to something more complicated.  */
++#ifdef __cplusplus
++# define _GL_FUNCDECL_SYS_NAME(func) func
++#else
++# define _GL_FUNCDECL_SYS_NAME(func) (func)
++#endif
++
+ /* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]);
+    declares the system function, named func, with the given prototype,
+    consisting of return type, parameters, and attributes.
+@@ -139,7 +149,7 @@
+      _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), 
_GL_ATTRIBUTE_NODISCARD);
+  */
+ #define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \
+-  _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters
++  _GL_EXTERN_C_FUNC __VA_ARGS__ rettype _GL_FUNCDECL_SYS_NAME (func) 
parameters
+ 
+ /* _GL_CXXALIAS_RPL (func, rettype, parameters);
+    declares a C++ alias called GNULIB_NAMESPACE::func
+diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h
+index bef0aaa..fd0e1e0 100644
+--- a/lib/stdlib.in.h
++++ b/lib/stdlib.in.h
+@@ -224,9 +224,9 @@ _GL_INLINE_HEADER_BEGIN
+ 
+ /* Declarations for ISO C N3322.  */
+ #if defined __GNUC__ && __GNUC__ >= 15 && !defined __clang__
+-_GL_EXTERN_C void *bsearch (const void *__key,
+-                            const void *__base, size_t __nmemb, size_t __size,
+-                            int (*__compare) (const void *, const void *))
++_GL_EXTERN_C void *_GL_FUNCDECL_SYS_NAME (bsearch)
++  (const void *__key, const void *__base, size_t __nmemb, size_t __size,
++   int (*__compare) (const void *, const void *))
+   _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 3) _GL_ARG_NONNULL ((5));
+ _GL_EXTERN_C void qsort (void *__base, size_t __nmemb, size_t __size,
+                          int (*__compare) (const void *, const void *))
+diff --git a/lib/string.in.h b/lib/string.in.h
+index fdcdd21..8b56acf 100644
+--- a/lib/string.in.h
++++ b/lib/string.in.h
+@@ -409,7 +409,6 @@ _GL_CXXALIASWARN1 (memchr, void const *,
+ _GL_CXXALIASWARN (memchr);
+ # endif
+ #elif defined GNULIB_POSIXCHECK
+-# undef memchr
+ /* Assume memchr is always declared.  */
+ _GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - "
+                  "use gnulib module memchr for portability" );
+@@ -674,7 +673,6 @@ _GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - "
+ #if defined GNULIB_POSIXCHECK
+ /* strchr() does not work with multibyte strings if the locale encoding is
+    GB18030 and the character to be searched is a digit.  */
+-# undef strchr
+ /* Assume strchr is always declared.  */
+ _GL_WARN_ON_USE_CXX (strchr,
+                      const char *, char *, (const char *, int),
+@@ -981,7 +979,6 @@ _GL_CXXALIASWARN (strpbrk);
+    Even in this simple case, it does not work with multibyte strings if the
+    locale encoding is GB18030 and one of the characters to be searched is a
+    digit.  */
+-#  undef strpbrk
+ _GL_WARN_ON_USE_CXX (strpbrk,
+                      const char *, char *, (const char *, const char *),
+                      "strpbrk cannot work correctly on character strings "
+@@ -1011,7 +1008,6 @@ _GL_WARN_ON_USE (strspn, "strspn cannot work correctly 
on character strings "
+ #if defined GNULIB_POSIXCHECK
+ /* strrchr() does not work with multibyte strings if the locale encoding is
+    GB18030 and the character to be searched is a digit.  */
+-# undef strrchr
+ /* Assume strrchr is always declared.  */
+ _GL_WARN_ON_USE_CXX (strrchr,
+                      const char *, char *, (const char *, int),
+diff --git a/lib/wchar.in.h b/lib/wchar.in.h
+index ab602a2..6be4515 100644
+--- a/lib/wchar.in.h
++++ b/lib/wchar.in.h
+@@ -301,7 +301,7 @@ _GL_EXTERN_C int wcsncmp (const wchar_t *__s1, const 
wchar_t *__s2, size_t __n)
+   _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3)
+   _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 3);
+ # ifndef __cplusplus
+-_GL_EXTERN_C wchar_t *wmemchr (const wchar_t *__s, wchar_t __wc, size_t __n)
++_GL_EXTERN_C wchar_t *(wmemchr) (const wchar_t *__s, wchar_t __wc, size_t __n)
+   _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3);
+ # endif
+ _GL_EXTERN_C wchar_t *wmemset (wchar_t *__s, wchar_t __wc, size_t __n)
+-- 
+2.52.0

diff --git a/app-editors/nano/nano-8.7-r1.ebuild 
b/app-editors/nano/nano-8.7-r1.ebuild
new file mode 100644
index 000000000000..9cb7919fc344
--- /dev/null
+++ b/app-editors/nano/nano-8.7-r1.ebuild
@@ -0,0 +1,117 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+if [[ ${PV} == 9999 ]] ; then
+       EGIT_REPO_URI="https://git.savannah.gnu.org/git/nano.git";
+       inherit autotools git-r3
+else
+       MY_P="${PN}-${PV/_}"
+       VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/bennoschulenberg.asc
+       inherit verify-sig
+
+       SRC_URI="
+               https://www.nano-editor.org/dist/v${PV:0:1}/${MY_P}.tar.xz
+               verify-sig? ( 
https://www.nano-editor.org/dist/v${PV:0:1}/${MY_P}.tar.xz.asc )
+       "
+       KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc 
~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos ~x64-solaris"
+
+       BDEPEND="verify-sig? ( sec-keys/openpgp-keys-bennoschulenberg )"
+fi
+
+DESCRIPTION="GNU GPL'd Pico clone with more functionality"
+HOMEPAGE="https://www.nano-editor.org/ https://wiki.gentoo.org/wiki/Nano/Guide";
+
+LICENSE="GPL-3+ LGPL-2.1+ || ( GPL-3+ FDL-1.2+ )"
+SLOT="0"
+IUSE="debug justify magic minimal ncurses nls +spell unicode"
+
+RDEPEND="
+       >=sys-libs/ncurses-5.9-r1:=[unicode(+)?]
+       magic? ( sys-apps/file )
+       nls? ( virtual/libintl )
+"
+DEPEND="${RDEPEND}"
+BDEPEND+="
+       virtual/pkgconfig
+       nls? ( sys-devel/gettext )
+"
+
+REQUIRED_USE="
+       magic? ( !minimal )
+"
+
+# gnulib FPs
+QA_CONFIG_IMPL_DECL_SKIP=( unreachable MIN static_assert )
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-8.7-glibc-2.43-c23.patch
+)
+
+src_prepare() {
+       default
+
+       if [[ ${PV} == 9999 ]] ; then
+               eautoreconf
+       fi
+}
+
+src_configure() {
+       local myconfargs=(
+               --bindir="${EPREFIX}"/bin
+               --htmldir=/trash
+               $(use_enable !minimal color)
+               $(use_enable !minimal multibuffer)
+               $(use_enable !minimal nanorc)
+               $(use_enable magic libmagic)
+               $(use_enable spell speller)
+               $(use_enable justify)
+               $(use_enable debug)
+               $(use_enable nls)
+               $(use_enable unicode utf8)
+               $(use_enable minimal tiny)
+       )
+
+       econf "${myconfargs[@]}"
+}
+
+src_install() {
+       default
+
+       # Don't use "${ED}" here or things break (#654534)
+       rm -r "${D}"/trash || die
+
+       dodoc doc/sample.nanorc
+       docinto html
+       dodoc doc/faq.html
+       insinto /etc
+       newins doc/sample.nanorc nanorc
+
+       if ! use minimal ; then
+               # Enable colorization by default.
+               sed -i \
+                       -e '/^# include /s:# *::' \
+                       "${ED}"/etc/nanorc || die
+
+               # Since nano-5.0 these are no longer being "enabled" by default
+               # (bug #736848)
+               local rcdir="/usr/share/nano"
+               mv "${ED}"${rcdir}/extra/* "${ED}"/${rcdir}/ || die
+               rmdir "${ED}"${rcdir}/extra || die
+
+               insinto "${rcdir}"
+               newins "${FILESDIR}/gentoo.nanorc-r1" gentoo.nanorc
+       fi
+}
+
+pkg_postrm() {
+       [[ -n ${REPLACED_BY_VERSION} ]] && return
+
+       local e
+       e=$(unset EDITOR; . "${EROOT}"/etc/profile &>/dev/null; echo 
"${EDITOR}")
+       if [[ ${e##*/} == nano ]]; then
+               ewarn "The EDITOR variable is still set to ${e}."
+               ewarn "You can update it with \"eselect editor\"."
+       fi
+}

Reply via email to