diff --git a/pkgs/by-name/sh/sharutils/gcc15-c23-port.patch b/pkgs/by-name/sh/sharutils/gcc15-c23-port.patch new file mode 100644 index 000000000000..be321476ff48 --- /dev/null +++ b/pkgs/by-name/sh/sharutils/gcc15-c23-port.patch @@ -0,0 +1,125 @@ +From: Petr Písař + +With GCC 15, which defaults to ISO 23, a build failed, for example like +this: + + gcc -DLOCALEDIR=\"/usr/local/share/locale\" -DHAVE_CONFIG_H -I. -I.. -I../libopts -I. -I.. -I../lib -I + ../lib -I../intl -Wno-format-contains-nul -g -O2 -Wno-format-contains-nul -c -o shar.o shar.c + In file included from local.h:23, + from shar-opts.h:354, + from shar.c:46: + ../lib/system.h:78:7: error: conflicting types for ‘fdopen’; have ‘FILE *(void)’ + 78 | FILE *fdopen (); + | ^~~~~~ + +The cause is that ISO C23 changed a meaning of an empty argument list +from an unspecified list to no arguments. + +Also K&R syntax is now deprecated and the compiler warned: + + encode.c: In function ‘write_encoded_bytes’: + encode.c:33:1: warning: old-style function definition [-Wold-style-definition] + 33 | write_encoded_bytes (group, file) + | ^~~~~~~~~~~~~~~~~~~ + +This patch fixes both the erros and the warnigs by specifying all the +arguments in the modern syntax. + +Signed-off-by: Petr Písař +--- + lib/system.h | 6 +++--- + src/encode.c | 13 +++---------- + src/shar.c | 2 +- + src/uudecode.c | 2 +- + 4 files changed, 8 insertions(+), 15 deletions(-) + +diff --git a/lib/system.h b/lib/system.h +index 2b9846b..811e8cf 100644 +--- a/lib/system.h ++++ b/lib/system.h +@@ -52,7 +52,7 @@ typedef enum {false = 0, true = 1} bool; + #endif + + #if !HAVE_DECL_STRTOIMAX && !defined strtoimax +-intmax_t strtoimax (); ++intmax_t strtoimax (const char *nptr, char **endptr, int base); + #endif + + #if HAVE_STRING_H +@@ -75,8 +75,8 @@ intmax_t strtoimax (); + # include + #endif + +-FILE *fdopen (); +-FILE *popen (); ++FILE *fdopen (int fd, const char *mode); ++FILE *popen (const char *command, const char *type); + + /* Global functions of the shar package. */ + +diff --git a/src/encode.c b/src/encode.c +index 09e0c69..b1de8bd 100644 +--- a/src/encode.c ++++ b/src/encode.c +@@ -30,9 +30,7 @@ + `------------------------------------------*/ + + static void +-write_encoded_bytes (group, file) +- char *group; +- FILE *file; ++write_encoded_bytes (char *group, FILE *file) + { + int c1, c2, c3, c4; + +@@ -52,10 +50,7 @@ write_encoded_bytes (group, file) + `--------------------------------------------------------------------*/ + + static int +-read_raw_bytes (file, buffer, buffer_size) +- FILE *file; +- char *buffer; +- int buffer_size; ++read_raw_bytes (FILE *file, char *buffer, int buffer_size) + { + int character; + int counter; +@@ -75,9 +70,7 @@ read_raw_bytes (file, buffer, buffer_size) + `----------------------------------------------------*/ + + void +-copy_file_encoded (input, output) +- FILE *input; +- FILE *output; ++copy_file_encoded (FILE *input, FILE *output) + { + char buffer[LINE_BUFFER_SIZE]; + int counter; +diff --git a/src/shar.c b/src/shar.c +index 6d7ed1d..2c6e2e1 100644 +--- a/src/shar.c ++++ b/src/shar.c +@@ -109,7 +109,7 @@ static inline unsigned char to_uchar (char ch) { return ch; } + #define IS_GRAPH(_c) (isprint (to_uchar (_c)) && !isspace (to_uchar (_c))) + #endif + +-struct tm *localtime (); ++struct tm *localtime (const time_t *timep); + + #if MSDOS + /* 1 extra for CR. */ +diff --git a/src/uudecode.c b/src/uudecode.c +index 0621c99..b8a316e 100644 +--- a/src/uudecode.c ++++ b/src/uudecode.c +@@ -82,7 +82,7 @@ static char const cright_years_z[] = + #define UU_CHMOD(_n, _fd, _m) chmod ((_n), UU_MODE_BITS(_m)) + #endif + +-struct passwd *getpwnam (); ++struct passwd *getpwnam (const char *name); + + static uudecode_exit_code_t read_stduu( + const char *inname, const char *outname); +-- +2.48.1 diff --git a/pkgs/by-name/sh/sharutils/gcc15-getcwdm4-port.patch b/pkgs/by-name/sh/sharutils/gcc15-getcwdm4-port.patch new file mode 100644 index 000000000000..0c0d7fdac4b1 --- /dev/null +++ b/pkgs/by-name/sh/sharutils/gcc15-getcwdm4-port.patch @@ -0,0 +1,37 @@ +From: Petr Písař + +Some confgure tests failed because of function arguments missing from +the prototypes: + + configure:16105: checking whether getcwd (NULL, 0) allocates memory for result + configure:16162: gcc -o conftest -g -O2 conftest.c >&5 + conftest.c:186:16: error: conflicting types for 'getcwd'; have 'char *(void)' + 186 | char *getcwd (); + | ^~~~~~ + In file included from conftest.c:181: + /usr/include/unistd.h:531:14: note: previous declaration of 'getcwd' with type 'char *(char *, size_t)' + +This patch fixes it. + +Maintainer is encouraged to rebase the m4 files to the latest gnulib. + +Signed-off-by: Petr Písař +--- + m4/getcwd.m4 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/m4/getcwd.m4 b/m4/getcwd.m4 +index b9fbcec..6f24b14 100644 +--- a/m4/getcwd.m4 ++++ b/m4/getcwd.m4 +@@ -21,7 +21,7 @@ AC_DEFUN([gl_FUNC_GETCWD_NULL], + # include + # endif + # ifndef getcwd +- char *getcwd (); ++ char *getcwd (char *buf, size_t size); + # endif + ]], [[ + #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +-- +2.48.1 diff --git a/pkgs/by-name/sh/sharutils/gcc15-stdboolm4-backport.patch b/pkgs/by-name/sh/sharutils/gcc15-stdboolm4-backport.patch new file mode 100644 index 000000000000..ae8d27306774 --- /dev/null +++ b/pkgs/by-name/sh/sharutils/gcc15-stdboolm4-backport.patch @@ -0,0 +1,202 @@ +From: Petr Písař + +The bundled gnulib check for stdbool.h did not account for ISO C23 +which provides its own false and true keywords. As a result stdbool.h +presence was not correctly detected and libopts/compat/compat.h, +bundled from AutoGen, failed to compile with GCC 15 which defaults to +ISO C23: + + In file included from autoopts/project.h:30, + from libopts.c:2: + ./compat/compat.h:188:19: error: cannot use keyword ‘false’ as enumeration constant + 188 | typedef enum { false = 0, true = 1 } _Bool; + | ^~~~~ + ./compat/compat.h:188:19: note: ‘false’ is a keyword with ‘-std=c23’ onwards + ./compat/compat.h:188:41: error: expected ‘;’, identifier or ‘(’ before ‘_Bool’ + 188 | typedef enum { false = 0, true = 1 } _Bool; + | ^~~~~ + +Signed-off-by: Petr Písař +--- + m4/stdbool.m4 | 129 +++++++++++++++++++++++++++++--------------------- + 1 file changed, 74 insertions(+), 55 deletions(-) + +diff --git a/m4/stdbool.m4 b/m4/stdbool.m4 +index 7273b82..8e00e4a 100644 +--- a/m4/stdbool.m4 ++++ b/m4/stdbool.m4 +@@ -1,27 +1,40 @@ + # Check for stdbool.h that conforms to C99. + +-dnl Copyright (C) 2002-2006, 2009-2015 Free Software Foundation, Inc. ++dnl Copyright (C) 2002-2006, 2009-2023 Free Software Foundation, Inc. + dnl This file is free software; the Free Software Foundation + dnl gives unlimited permission to copy and/or distribute it, + dnl with or without modifications, as long as this notice is preserved. + +-#serial 5 ++#serial 10 + + # Prepare for substituting if it is not supported. + + AC_DEFUN([AM_STDBOOL_H], + [ + AC_REQUIRE([AC_CHECK_HEADER_STDBOOL]) ++ AC_REQUIRE([AC_CANONICAL_HOST]) + +- # Define two additional variables used in the Makefile substitution. +- ++ dnl On some platforms, does not exist or does not conform to C99. ++ dnl On Solaris 10 with CC=cc CXX=CC, exists but is not usable ++ dnl in C++ mode (and no exists). In this case, we use our ++ dnl replacement, also in C mode (for binary compatibility between C and C++). + if test "$ac_cv_header_stdbool_h" = yes; then +- STDBOOL_H='' ++ case "$host_os" in ++ solaris*) ++ if test -z "$GCC"; then ++ GL_GENERATE_STDBOOL_H=true ++ else ++ GL_GENERATE_STDBOOL_H=false ++ fi ++ ;; ++ *) ++ GL_GENERATE_STDBOOL_H=false ++ ;; ++ esac + else +- STDBOOL_H='stdbool.h' ++ GL_GENERATE_STDBOOL_H=true + fi +- AC_SUBST([STDBOOL_H]) +- AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"]) ++ AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test "$GL_GENERATE_STDBOOL_H" = "true"]) + + if test "$ac_cv_type__Bool" = yes; then + HAVE__BOOL=1 +@@ -31,70 +44,76 @@ AC_DEFUN([AM_STDBOOL_H], + AC_SUBST([HAVE__BOOL]) + ]) + +-# AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future. +-AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H]) +- +-# This version of the macro is needed in autoconf <= 2.68. ++m4_version_prereq([2.72], [], [ + + AC_DEFUN([AC_CHECK_HEADER_STDBOOL], +- [AC_CACHE_CHECK([for stdbool.h that conforms to C99], ++ [AC_CHECK_TYPES([_Bool]) ++ AC_CACHE_CHECK([for stdbool.h that conforms to C99 or later], + [ac_cv_header_stdbool_h], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( +- [[ +- #include +- #ifndef bool +- "error: bool is not defined" ++ [[#include ++ ++ /* "true" and "false" should be usable in #if expressions and ++ integer constant expressions, and "bool" should be a valid ++ type name. ++ ++ Although C99 requires bool, true, and false to be macros, ++ C23 and C++11 overrule that, so do not test for that. ++ Although C99 requires __bool_true_false_are_defined and ++ _Bool, C23 says they are obsolescent, so do not require ++ them. */ ++ ++ #if !true ++ #error "'true' is not true" + #endif +- #ifndef false +- "error: false is not defined" ++ #if true != 1 ++ #error "'true' is not equal to 1" + #endif ++ char b[true == 1 ? 1 : -1]; ++ char c[true]; ++ + #if false +- "error: false is not 0" ++ #error "'false' is not false" + #endif +- #ifndef true +- "error: true is not defined" +- #endif +- #if true != 1 +- "error: true is not 1" +- #endif +- #ifndef __bool_true_false_are_defined +- "error: __bool_true_false_are_defined is not defined" ++ #if false != 0 ++ #error "'false' is not equal to 0" + #endif ++ char d[false == 0 ? 1 : -1]; ++ ++ enum { e = false, f = true, g = false * true, h = true * 256 }; ++ ++ char i[(bool) 0.5 == true ? 1 : -1]; ++ char j[(bool) 0.0 == false ? 1 : -1]; ++ char k[sizeof (bool) > 0 ? 1 : -1]; ++ ++ struct sb { bool s: 1; bool t; } s; ++ char l[sizeof s.t > 0 ? 1 : -1]; + +- struct s { _Bool s: 1; _Bool t; } s; +- +- char a[true == 1 ? 1 : -1]; +- char b[false == 0 ? 1 : -1]; +- char c[__bool_true_false_are_defined == 1 ? 1 : -1]; +- char d[(bool) 0.5 == true ? 1 : -1]; +- /* See body of main program for 'e'. */ +- char f[(_Bool) 0.0 == false ? 1 : -1]; +- char g[true]; +- char h[sizeof (_Bool)]; +- char i[sizeof s.t]; +- enum { j = false, k = true, l = false * true, m = true * 256 }; + /* The following fails for + HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ +- _Bool n[m]; +- char o[sizeof n == m * sizeof n[0] ? 1 : -1]; +- char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; ++ bool m[h]; ++ char n[sizeof m == h * sizeof m[0] ? 1 : -1]; ++ char o[-1 - (bool) 0 < 0 ? 1 : -1]; + /* Catch a bug in an HP-UX C compiler. See +- http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html +- http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html ++ https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html ++ https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html + */ +- _Bool q = true; +- _Bool *pq = &q; ++ bool p = true; ++ bool *pp = &p; + ]], + [[ +- bool e = &s; +- *pq |= q; +- *pq |= ! q; +- /* Refer to every declared value, to avoid compiler optimizations. */ +- return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l +- + !m + !n + !o + !p + !q + !pq); ++ bool ps = &s; ++ *pp |= p; ++ *pp |= ! p; ++ ++ /* Refer to every declared value, so they cannot be ++ discarded as unused. */ ++ return (!b + !c + !d + !e + !f + !g + !h + !i + !j + !k ++ + !l + !m + !n + !o + !p + !pp + !ps); + ]])], + [ac_cv_header_stdbool_h=yes], + [ac_cv_header_stdbool_h=no])]) +- AC_CHECK_TYPES([_Bool]) +-]) ++])# AC_CHECK_HEADER_STDBOOL ++ ++]) # m4_version_prereq 2.72 +-- +2.48.1 diff --git a/pkgs/by-name/sh/sharutils/package.nix b/pkgs/by-name/sh/sharutils/package.nix index 959940b27672..8128c520b1f2 100644 --- a/pkgs/by-name/sh/sharutils/package.nix +++ b/pkgs/by-name/sh/sharutils/package.nix @@ -3,6 +3,7 @@ stdenv, fetchurl, fetchpatch, + autoreconfHook, gettext, coreutils, updateAutotoolsGnuConfigScriptsHook, @@ -21,6 +22,7 @@ stdenv.mkDerivation rec { # GNU Gettext is needed on non-GNU platforms. buildInputs = [ + autoreconfHook coreutils gettext ]; @@ -55,6 +57,12 @@ stdenv.mkDerivation rec { url = "https://lists.gnu.org/archive/html/bug-gnu-utils/2020-01/txt5Z_KZup0yN.txt"; sha256 = "0an8vfy3qj6sss9w0i4j8ilf7g5mbc7y13l644jy5bcm9przcjbd"; }) + + # various build fixes for >= gcc 15, sourced from + # https://lists.gnu.org/archive/html/bug-gnu-utils/2025-03/msg00000.html + ./gcc15-stdboolm4-backport.patch + ./gcc15-getcwdm4-port.patch + ./gcc15-c23-port.patch ]; postPatch =