diff --git a/meta-oe/recipes-support/sharutils/sharutils/0001-ISO-C23-Backport-stdbool.m4.patch b/meta-oe/recipes-support/sharutils/sharutils/0001-ISO-C23-Backport-stdbool.m4.patch new file mode 100644 index 0000000000..507c0c99cb --- /dev/null +++ b/meta-oe/recipes-support/sharutils/sharutils/0001-ISO-C23-Backport-stdbool.m4.patch @@ -0,0 +1,213 @@ +From c349e9656440fcde2f71950d466fcddaa9a59f72 Mon Sep 17 00:00:00 2001 +From: "mark.yang" +Date: Fri, 4 Apr 2025 14:19:00 +0900 +Subject: [PATCH 1/3] ISO C23: Backport stdbool.m4 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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ř + +Upstream-Status: Backport [https://lists.gnu.org/r/bug-gnu-utils/2025-03/msg00002.html] +Signed-off-by: mark.yang +--- + 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 diff --git a/meta-oe/recipes-support/sharutils/sharutils/0002-ISO-C23-Port-getcwd.m4-to-ISO-C23.patch b/meta-oe/recipes-support/sharutils/sharutils/0002-ISO-C23-Port-getcwd.m4-to-ISO-C23.patch new file mode 100644 index 0000000000..44991cad1b --- /dev/null +++ b/meta-oe/recipes-support/sharutils/sharutils/0002-ISO-C23-Port-getcwd.m4-to-ISO-C23.patch @@ -0,0 +1,49 @@ +From 01c13c5b455ec8d51240af20f59324b2ed15a337 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Fri, 4 Apr 2025 14:20:05 +0900 +Subject: [PATCH 2/3] ISO C23: Port getcwd.m4 to ISO C23 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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ř + +Upstream-Status: Backport [https://lists.gnu.org/r/bug-gnu-utils/2025-03/msg00003.html] +Signed-off-by: mark.yang +--- + 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__ diff --git a/meta-oe/recipes-support/sharutils/sharutils/0003-ISO-C23-Port-the-code-to-ISO-C23.patch b/meta-oe/recipes-support/sharutils/sharutils/0003-ISO-C23-Port-the-code-to-ISO-C23.patch new file mode 100644 index 0000000000..57e0ac3ed6 --- /dev/null +++ b/meta-oe/recipes-support/sharutils/sharutils/0003-ISO-C23-Port-the-code-to-ISO-C23.patch @@ -0,0 +1,143 @@ +From 4e50196673fc14bd6081e8a78cc940199566ba55 Mon Sep 17 00:00:00 2001 +From: "mark.yang" +Date: Fri, 4 Apr 2025 14:38:51 +0900 +Subject: [PATCH 3/3] ISO C23: Port the code to ISO C23 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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ř + +Upstream-Status: Backport [https://lists.gnu.org/r/bug-gnu-utils/2025-03/msg00001.html] +Signed-off-by: mark.yang +--- + lib/system.h | 6 +++--- + src/encode.c | 13 +++---------- + src/shar.c | 3 +-- + src/uudecode.c | 2 +- + 4 files changed, 8 insertions(+), 16 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..b5e84ff 100644 +--- a/src/shar.c ++++ b/src/shar.c +@@ -1,4 +1,3 @@ +- + static const char cright_years_z[] = + + /* Handle so called `shell archives'. +@@ -109,7 +108,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); diff --git a/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb b/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb index 1bded9f6d1..45bf341063 100644 --- a/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb +++ b/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb @@ -14,6 +14,9 @@ SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.gz \ file://0002-Do-not-include-lib-md5.c-into-src-shar.c.patch \ file://0001-configure.ac-Check-and-define-intmax_t-type.patch \ file://0001-libopts.m4-accept-POSIX_SHELL-from-the-environment-d.patch \ + file://0001-ISO-C23-Backport-stdbool.m4.patch \ + file://0002-ISO-C23-Port-getcwd.m4-to-ISO-C23.patch \ + file://0003-ISO-C23-Port-the-code-to-ISO-C23.patch \ " SRC_URI[sha256sum] = "ee336e68549664e7a19b117adf02edfdeac6307f22e5ba78baca457116914637"