commit:     d0832514a96cdbcf546461cfeec91bdf1b1df16b
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Mon Nov 18 05:27:55 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Nov 18 05:34:48 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d0832514

app-arch/ncompress: fix C23 compat

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

 app-arch/ncompress/files/ncompress-5.0-c23.patch | 291 +++++++++++++++++++++++
 app-arch/ncompress/ncompress-5.0-r2.ebuild       |  40 ++++
 2 files changed, 331 insertions(+)

diff --git a/app-arch/ncompress/files/ncompress-5.0-c23.patch 
b/app-arch/ncompress/files/ncompress-5.0-c23.patch
new file mode 100644
index 000000000000..7e61ade43fc1
--- /dev/null
+++ b/app-arch/ncompress/files/ncompress-5.0-c23.patch
@@ -0,0 +1,291 @@
+https://github.com/vapier/ncompress/commit/af7d29d87ddf8b2002dad41152efa94e9c825b35
+https://github.com/vapier/ncompress/commit/aa359df10ec29a56c12f6e5c2bcec8d8ecfa2740
+https://github.com/vapier/ncompress/pull/40
+
+From af7d29d87ddf8b2002dad41152efa94e9c825b35 Mon Sep 17 00:00:00 2001
+From: Mike Frysinger <[email protected]>
+Date: Mon, 8 Feb 2021 00:28:08 -0500
+Subject: [PATCH] require standard C function prototype support
+
+We can drop the main prototype entirely as we don't need it.
+---
+ compress.c | 58 +++++++++++++++++++-----------------------------------
+ 2 files changed, 21 insertions(+), 38 deletions(-)
+
+diff --git a/compress.c b/compress.c
+index 12c89b8..ff3b51b 100644
+--- a/compress.c
++++ b/compress.c
+@@ -49,12 +49,6 @@
+       };
+ #endif
+ 
+-#ifdef        __STDC__
+-#     define  ARGS(a)                         a
+-#else
+-#     define  ARGS(a)                         ()
+-#endif
+-
+ #ifndef SIG_TYPE
+ #     define  SIG_TYPE        void (*)()
+ #endif
+@@ -365,17 +359,16 @@ unsigned short   codetab[HSIZE];
+       } ;
+ #endif
+ 
+-int   main                    ARGS((int,char **));
+-void          Usage                   ARGS((int));
+-void          comprexx                ARGS((const char *));
+-void          compdir                 ARGS((char *));
+-void          compress                ARGS((int,int));
+-void          decompress              ARGS((int,int));
+-void          read_error              ARGS((void));
+-void          write_error             ARGS((void));
+-void  abort_compress  ARGS((void));
+-void          prratio                 ARGS((FILE *,long,long));
+-void          about                   ARGS((void));
++void          Usage                   (int);
++void          comprexx                (const char *);
++void          compdir                 (char *);
++void          compress                (int, int);
++void          decompress              (int, int);
++void          read_error              (void);
++void          write_error             (void);
++void  abort_compress  (void);
++void          prratio                 (FILE *, long, long);
++void          about                   (void);
+ 
+ /*****************************************************************
+  * TAG( main )
+@@ -418,9 +411,7 @@ void       about                   ARGS((void));
+  *   procedure needs no input table, but tracks the way the table was built.
+  */ 
+ int
+-main(argc, argv)
+-      int      argc;
+-      char    *argv[];
++main(int argc, char *argv[])
+       {
+               char **filelist;
+               char **fileptr;
+@@ -632,8 +623,7 @@ Usage: %s [-dfhvcVr] [-b maxbits] [--] [path ...]\n\
+       }
+ 
+ void
+-comprexx(fileptr)
+-      const char      *fileptr;
++comprexx(const char   *fileptr)
+       {
+               int                              fdin = -1;
+               int                              fdout = -1;
+@@ -982,8 +972,7 @@ comprexx(fileptr)
+ 
+ #ifdef        RECURSIVE
+ void
+-compdir(dir)
+-      char    *dir;
++compdir(char *dir)
+       {
+               struct dirent *dp;
+               DIR *dirp;
+@@ -1059,9 +1048,7 @@ compdir(dir)
+  * questions about this implementation to ames!jaw.
+  */
+ void
+-compress(fdin, fdout)
+-      int             fdin;
+-      int             fdout;
++compress(int fdin, int fdout)
+       {
+               long hp;
+               int rpos;
+@@ -1294,9 +1281,7 @@ endlop:                  if (fcode.e.ent >= FIRST && 
rpos < rsize)
+  */
+ 
+ void
+-decompress(fdin, fdout)
+-      int             fdin;
+-      int             fdout;
++decompress(int fdin, int fdout)
+       {
+               char_type *stackp;
+               code_int code;
+@@ -1519,7 +1504,7 @@ resetbuf:        ;
+       }
+ 
+ void
+-read_error()
++read_error(void)
+       {
+               fprintf(stderr, "\nread error on");
+           perror((ifname[0] != '\0') ? ifname : "stdin");
+@@ -1527,7 +1512,7 @@ read_error()
+       }
+ 
+ void
+-write_error()
++write_error(void)
+       {
+               fprintf(stderr, "\nwrite error on");
+           perror(ofname ? ofname : "stdout");
+@@ -1535,7 +1520,7 @@ write_error()
+       }
+ 
+ void
+-abort_compress()
++abort_compress(void)
+       {
+               if (remove_ofname)
+               unlink(ofname);
+@@ -1544,10 +1529,7 @@ abort_compress()
+       }
+ 
+ void
+-prratio(stream, num, den)
+-      FILE            *stream;
+-      long int         num;
+-      long int         den;
++prratio(FILE *stream, long int num, long int den)
+       {
+               int q;                  /* Doesn't need to be long */
+ 
+@@ -1571,7 +1553,7 @@ prratio(stream, num, den)
+       }
+ 
+ void
+-about()
++about(void)
+       {
+               printf("Compress version: %s\n", version_id);
+               printf("Compile options:\n        ");
+
+
+From aa359df10ec29a56c12f6e5c2bcec8d8ecfa2740 Mon Sep 17 00:00:00 2001
+From: Mike Frysinger <[email protected]>
+Date: Mon, 8 Feb 2021 00:30:41 -0500
+Subject: [PATCH] mark all local functions as static
+
+This saves a small amount of space as the compiler can do better.
+---
+ compress.c | 20 ++++++++++----------
+ 2 files changed, 11 insertions(+), 10 deletions(-)
+
+diff --git a/compress.c b/compress.c
+index ff3b51b..86a8cda 100644
+--- a/compress.c
++++ b/compress.c
+@@ -359,16 +359,16 @@ unsigned short   codetab[HSIZE];
+       } ;
+ #endif
+ 
+-void          Usage                   (int);
+-void          comprexx                (const char *);
+-void          compdir                 (char *);
+-void          compress                (int, int);
+-void          decompress              (int, int);
+-void          read_error              (void);
+-void          write_error             (void);
+-void  abort_compress  (void);
+-void          prratio                 (FILE *, long, long);
+-void          about                   (void);
++static void Usage(int);
++static void comprexx(const char *);
++static void compdir(char *);
++static void compress(int, int);
++static void decompress(int, int);
++static void read_error(void);
++static void write_error(void);
++static void abort_compress(void);
++static void prratio(FILE *, long, long);
++static void about(void);
+ 
+ /*****************************************************************
+  * TAG( main )
+
+From 90810a7f11bf157b479c23c0fe6cee0bebec15c6 Mon Sep 17 00:00:00 2001
+From: Sergei Trofimovich <[email protected]>
+Date: Sat, 16 Nov 2024 18:49:48 +0000
+Subject: [PATCH] compress.c: fix -std=c23 build failure (signal handler
+ protos)
+
+gcc-15 switched to -std=c23 by default:
+
+    
https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=55e3bd376b2214e200fa76d12b67ff259b06c212
+
+As a result `ncompress` fails the build as:
+
+    compress.c: In function 'main':
+    compress.c:382:40: error:
+      passing argument 2 of 'signal' from incompatible pointer type 
[-Wincompatible-pointer-types]
+      382 |                         signal(SIGINT, (SIG_TYPE)abort_compress);
+          |                                        ^~~~~~~~~~~~~~~~~~~~~~~~
+          |                                        |
+          |                                        void (*)(void)
+    In file included from compress.c:30:
+    ...-glibc-2.40-36-dev/include/signal.h:88:57: note:
+      expected '__sighandler_t' {aka 'void (*)(int)'} but argument is of type 
'void (*)(void)'
+       88 | extern __sighandler_t signal (int __sig, __sighandler_t __handler)
+          |                                          ~~~~~~~~~~~~~~~^~~~~~~~~
+
+The change removes type casts around function prototypes and define
+signal handler as `void(*)(int)`.
+---
+ compress.c | 19 ++++++++++++-------
+ 1 file changed, 12 insertions(+), 7 deletions(-)
+
+diff --git a/compress.c b/compress.c
+index da91603..ea8081e 100644
+--- a/compress.c
++++ b/compress.c
+@@ -49,10 +49,6 @@
+       };
+ #endif
+ 
+-#ifndef SIG_TYPE
+-#     define  SIG_TYPE        void (*)()
+-#endif
+-
+ #if defined(AMIGA) || defined(DOS) || defined(MINGW) || defined(WINDOWS)
+ #     define  chmod(pathname, mode) 0
+ #     define  chown(pathname, owner, group) 0
+@@ -327,6 +323,7 @@ static void decompress(int, int);
+ static void read_error(void);
+ static void write_error(void);
+ static void abort_compress(void);
++static void abort_compress_handler(int);
+ static void prratio(FILE *, long, long);
+ static void about(void);
+ 
+@@ -379,14 +376,14 @@ main(int argc, char *argv[])
+ 
+ #ifdef SIGINT
+               if ((fgnd_flag = (signal(SIGINT, SIG_IGN)) != SIG_IGN))
+-                      signal(SIGINT, (SIG_TYPE)abort_compress);
++                      signal(SIGINT, abort_compress_handler);
+ #endif
+ 
+ #ifdef SIGTERM
+-              signal(SIGTERM, (SIG_TYPE)abort_compress);
++              signal(SIGTERM, abort_compress_handler);
+ #endif
+ #ifdef SIGHUP
+-              signal(SIGHUP, (SIG_TYPE)abort_compress);
++              signal(SIGHUP, abort_compress_handler);
+ #endif
+ 
+ #ifdef COMPATIBLE
+@@ -1489,6 +1486,14 @@ abort_compress(void)
+               exit(1);
+       }
+ 
++
++void
++abort_compress_handler(int signo)
++      {
++              (void)signo;
++              abort_compress();
++      }
++
+ void
+ prratio(FILE *stream, long int num, long int den)
+       {

diff --git a/app-arch/ncompress/ncompress-5.0-r2.ebuild 
b/app-arch/ncompress/ncompress-5.0-r2.ebuild
new file mode 100644
index 000000000000..3df3f1e865ab
--- /dev/null
+++ b/app-arch/ncompress/ncompress-5.0-r2.ebuild
@@ -0,0 +1,40 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="Classic compress & uncompress programs for .Z (LZW) files"
+HOMEPAGE="https://vapier.github.io/ncompress/";
+SRC_URI="https://github.com/vapier/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="public-domain"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 
~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-5.0-c23.patch
+)
+
+src_prepare() {
+       default
+       # First sed expression replaces hardlinking with
+       # symlinking. Second sed expression fixes the symlink target
+       # to use relative path to a file in the same directory as the
+       # symlink (so point to compress instead of
+       # $(DESTDIR)$(BINDIR)/compress).
+       sed -i \
+               -e 's:\bln :ln -s :' \
+               -e 's:\(\bln [^$]*\)\$(DESTDIR)\$(BINDIR)/:\1:' \
+               Makefile.def || die
+}
+
+src_configure() {
+       tc-export CC
+}
+
+src_install() {
+       emake install_core DESTDIR="${ED}" PREFIX="/usr"
+       dodoc Acknowleds Changes LZW.INFO README.md
+}

Reply via email to