commit:     b79ff94a27a41efd3983fa92295f351e952ae589
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sun Nov 17 02:32:13 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Nov 17 02:32:13 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b79ff94a

app-shells/dash: fix C23 compat

Signed-off-by: Sam James <sam <AT> gentoo.org>

 app-shells/dash/dash-0.5.12-r1.ebuild           |  70 +++++++++++
 app-shells/dash/files/dash-0.5.12-c23-lto.patch |  36 ++++++
 app-shells/dash/files/dash-0.5.12-c23.patch     | 150 ++++++++++++++++++++++++
 3 files changed, 256 insertions(+)

diff --git a/app-shells/dash/dash-0.5.12-r1.ebuild 
b/app-shells/dash/dash-0.5.12-r1.ebuild
new file mode 100644
index 000000000000..7695ee2933c2
--- /dev/null
+++ b/app-shells/dash/dash-0.5.12-r1.ebuild
@@ -0,0 +1,70 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit flag-o-matic toolchain-funcs
+
+DESCRIPTION="Debian Almquist Shell"
+HOMEPAGE="http://gondor.apana.org.au/~herbert/dash/";
+if [[ ${PV} == 9999 ]] ; then
+       EGIT_REPO_URI="https://git.kernel.org/pub/scm/utils/dash/dash.git";
+       inherit autotools git-r3
+else
+       SRC_URI="http://gondor.apana.org.au/~herbert/dash/files/${P}.tar.gz";
+       KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc 
~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos 
~x64-solaris"
+fi
+
+LICENSE="BSD"
+SLOT="0"
+IUSE="libedit static"
+
+BDEPEND="virtual/pkgconfig"
+RDEPEND="!static? ( libedit? ( dev-libs/libedit ) )"
+DEPEND="
+       ${RDEPEND}
+       libedit? ( static? ( dev-libs/libedit[static-libs] ) )
+"
+
+PATCHES=(
+       "${FILESDIR}"/${P}-c23.patch
+       "${FILESDIR}"/${PN}-0.5.12-c23-lto.patch
+)
+
+src_prepare() {
+       default
+
+       [[ ${PV} == 9999 ]] && eautoreconf
+
+       # Use pkg-config for libedit linkage
+       sed -i \
+               -e "/LIBS/s:-ledit:\`$(tc-getPKG_CONFIG) --libs libedit $(usex 
static --static '')\`:" \
+               configure || die
+}
+
+src_configure() {
+       if [[ ${CHOST} == *-solaris* ]] ; then
+               # don't redefine stat, open, dirent, etc. on Solaris
+               export ac_cv_func_stat64=yes
+               export ac_cv_func_open64=yes
+       fi
+
+       if [[ ${CHOST} == powerpc-*-darwin* ]] ; then
+               sed -i -e 's/= stpncpy(s, \([^,]\+\), \([0-9]\+\))/+= 
snprintf(s, \2, "%s", \1)/' \
+                       src/jobs.c || die
+       fi
+
+       use static && append-ldflags -static
+
+       append-cppflags -DJOBS=$(usex libedit 1 0)
+
+       # Do not pass --enable-glob due to #443552.
+       local myeconfargs=(
+               CC_FOR_BUILD="$(tc-getBUILD_CC)"
+               --bindir="${EPREFIX}"/bin
+               --enable-fnmatch
+               $(use_with libedit)
+       )
+
+       econf "${myeconfargs[@]}"
+}

diff --git a/app-shells/dash/files/dash-0.5.12-c23-lto.patch 
b/app-shells/dash/files/dash-0.5.12-c23-lto.patch
new file mode 100644
index 000000000000..bd53b4ca18d9
--- /dev/null
+++ b/app-shells/dash/files/dash-0.5.12-c23-lto.patch
@@ -0,0 +1,36 @@
+https://lore.kernel.org/dash/9f2a8ab063e595188df3fe0546484e5a8156318a.1731810617.git....@gentoo.org/
+
+From 9f2a8ab063e595188df3fe0546484e5a8156318a Mon Sep 17 00:00:00 2001
+Message-ID: 
<9f2a8ab063e595188df3fe0546484e5a8156318a.1731810632.git....@gentoo.org>
+From: Sam James <[email protected]>
+Date: Sun, 17 Nov 2024 02:28:07 +0000
+Subject: [PATCH] bltin: fix timescmd with C23
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+With C23 and LTO, we get the following warning (or error if promoted to such):
+```
+src/builtins.c:28:5: error: type of ‘timescmd’ does not match original 
declaration [-Werror=lto-type-mismatch]
+   28 | int timescmd(int, char **);
+      |     ^
+src/bltin/times.c:15:5: note: type mismatch in parameter 1
+src/bltin/times.c:15:5: note: type ‘void’ should match type ‘int’
+```
+
+Make the two consistent. This didn't show up before because pre-C23
+had unprototyped functions.
+--- a/src/bltin/times.c
++++ b/src/bltin/times.c
+@@ -12,7 +12,7 @@
+ #endif
+ #include "system.h"
+ 
+-int timescmd() {
++int timescmd(int argc, char *argv[]) {
+       struct tms buf;
+       long int clk_tck = sysconf(_SC_CLK_TCK);
+       int mutime, mstime, mcutime, mcstime;
+-- 
+2.47.0
+

diff --git a/app-shells/dash/files/dash-0.5.12-c23.patch 
b/app-shells/dash/files/dash-0.5.12-c23.patch
new file mode 100644
index 000000000000..63716b6276ce
--- /dev/null
+++ b/app-shells/dash/files/dash-0.5.12-c23.patch
@@ -0,0 +1,150 @@
+https://git.kernel.org/pub/scm/utils/dash/dash.git/commit/?id=b41b0d41228fe82991a63f475e0bef701f539db9
 (rebased)
+--- a/src/exec.c
++++ b/src/exec.c
+@@ -769,12 +769,8 @@ typecmd(int argc, char **argv)
+       return err;
+ }
+ 
+-STATIC int
+-describe_command(out, command, path, verbose)
+-      struct output *out;
+-      char *command;
+-      const char *path;
+-      int verbose;
++static int describe_command(struct output *out, char *command,
++                            const char *path, int verbose)
+ {
+       struct cmdentry entry;
+       struct tblentry *cmdp;
+@@ -875,10 +871,7 @@ out:
+       return 0;
+ }
+ 
+-int
+-commandcmd(argc, argv)
+-      int argc;
+-      char **argv;
++int commandcmd(int argc, char **argv)
+ {
+       char *cmd;
+       int c;
+--- a/src/jobs.c
++++ b/src/jobs.c
+@@ -243,10 +243,7 @@ close:
+ #endif
+ 
+ 
+-int
+-killcmd(argc, argv)
+-      int argc;
+-      char **argv;
++int killcmd(int argc, char **argv)
+ {
+       extern char *signal_names[];
+       int signo = -1;
+--- a/src/mksignames.c
++++ b/src/mksignames.c
+@@ -360,9 +360,7 @@ initialize_signames ()
+       }
+ }
+ 
+-void
+-write_signames (stream)
+-     FILE *stream;
++void write_signames(FILE *stream)
+ {
+   register int i;
+ 
+--- a/src/nodes.c.pat
++++ b/src/nodes.c.pat
+@@ -87,18 +87,14 @@ copyfunc(union node *n)
+ 
+ 
+ 
+-STATIC void
+-calcsize(n)
+-      union node *n;
++static void calcsize(union node *n)
+ {
+       %CALCSIZE
+ }
+ 
+ 
+ 
+-STATIC void
+-sizenodelist(lp)
+-      struct nodelist *lp;
++static void sizenodelist(struct nodelist *lp)
+ {
+       while (lp) {
+               funcblocksize += SHELL_ALIGN(sizeof(struct nodelist));
+@@ -109,9 +105,7 @@ sizenodelist(lp)
+ 
+ 
+ 
+-STATIC union node *
+-copynode(n)
+-      union node *n;
++static union node *copynode(union node *n)
+ {
+       union node *new;
+ 
+@@ -120,9 +114,7 @@ copynode(n)
+ }
+ 
+ 
+-STATIC struct nodelist *
+-copynodelist(lp)
+-      struct nodelist *lp;
++static struct nodelist *copynodelist(struct nodelist *lp)
+ {
+       struct nodelist *start;
+       struct nodelist **lpp;
+@@ -142,9 +134,7 @@ copynodelist(lp)
+ 
+ 
+ 
+-STATIC char *
+-nodesavestr(s)
+-      char   *s;
++static char *nodesavestr(char *s)
+ {
+       char   *rtn = funcstring;
+ 
+--- a/src/options.c
++++ b/src/options.c
+@@ -389,9 +389,7 @@ setcmd(int argc, char **argv)
+ }
+ 
+ 
+-void
+-getoptsreset(value)
+-      const char *value;
++void getoptsreset(const char *value)
+ {
+       shellparam.optind = number(value) ?: 1;
+       shellparam.optoff = -1;
+--- a/src/redir.c
++++ b/src/redir.c
+@@ -281,18 +281,12 @@ ecreate:
+ }
+ 
+ 
+-STATIC void
+ #ifdef notyet
+-dupredirect(redir, f, memory)
++static void dupredirect(union node *redir, int f, char memory[10])
+ #else
+-dupredirect(redir, f)
++static void dupredirect(union node *redir, int f)
+ #endif
+-      union node *redir;
+-      int f;
+-#ifdef notyet
+-      char memory[10];
+-#endif
+-      {
++{
+       int fd = redir->nfile.fd;
+       int err = 0;
+ 

Reply via email to