git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: clar unit testing framework FTBFS on uclibc systems (wchar_t unsupported)

From
Bagas Sanjaya <bagasdotme@gmail.com>
Date
Oct 18, 2024, 13:49 UTC
Message-ID
<ZxJnfYtuxnAEBc1E@archie.me>
In-Reply-To
<ZxEXFI80i4Q_4NJT@pks.im>
On Thu, Oct 17, 2024 at 03:54:28PM +0200, Patrick Steinhardt wrote:
Show 61 quoted lines
> Okay, uclibc indeed has _optional_ support for `wchar_t`. But what
> really throws me off: "include/wchar.h" from uclibc has the following
> snippet right at the top:
> 
>     #ifndef __UCLIBC_HAS_WCHAR__
>     #error Attempted to include wchar.h when uClibc built without wide char support.
>     #endif
> 
> We unconditionally include <wchar.h>, and your system does not seem to
> have support for it built in. So why doesn't the `#error` trigger? It's
> also not like this is a recent error, it has been added with 581deed72
> (The obligatory forgotten files..., 2002-05-06).
> 
> We can do something like the below patch in clar, but I'd first like to
> understand why your platform seems to be broken in such a way.
> 
> Patrick
> 
> diff --git a/clar.c b/clar.c
> index 64879cf..06fe3d1 100644
> --- a/clar.c
> +++ b/clar.c
> @@ -9,6 +9,11 @@
>  #define _DARWIN_C_SOURCE
>  #define _DEFAULT_SOURCE
>  
> +#if defined(__UCLIBC__) && ! defined(__UCLIBC_HAS_WCHAR__)
> +#else
> +#	define HAVE_WCHAR
> +#endif
> +
>  #include <errno.h>
>  #include <setjmp.h>
>  #include <stdlib.h>
> @@ -16,7 +21,9 @@
>  #include <string.h>
>  #include <math.h>
>  #include <stdarg.h>
> +#ifdef HAVE_WCHAR
>  #include <wchar.h>
> +#endif
>  #include <time.h>
>  #include <inttypes.h>
>  
> @@ -766,6 +773,7 @@ void clar__assert_equal(
>  			}
>  		}
>  	}
> +#ifdef HAVE_WCHAR
>  	else if (!strcmp("%ls", fmt)) {
>  		const wchar_t *wcs1 = va_arg(args, const wchar_t *);
>  		const wchar_t *wcs2 = va_arg(args, const wchar_t *);
> @@ -801,6 +809,7 @@ void clar__assert_equal(
>  			}
>  		}
>  	}
> +#endif // HAVE_WCHAR
>  	else if (!strcmp("%"PRIuMAX, fmt) || !strcmp("%"PRIxMAX, fmt)) {
>  		uintmax_t sz1 = va_arg(args, uintmax_t), sz2 = va_arg(args, uintmax_t);
>  		is_equal = (sz1 == sz2);
> 
Hi,

On Buildroot site, Edgar Bonet (Cc:'ed) suggests to improve your patch by wrapping strcmps [1]:

---- >8 ----
diff --git a/t/unit-tests/clar/clar.c b/t/unit-tests/clar/clar.c
index cef0f023c2..6de0b415b1 100644
--- a/t/unit-tests/clar/clar.c
+++ b/t/unit-tests/clar/clar.c
@@ -18,6 +18,13 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 
+#if defined(__UCLIBC__) && ! defined(__UCLIBC_HAS_WCHAR__)
+   /* uClibc can be built without wchar support, in which case the
+      installed <wchar.h> is a stub that does not define wchar_t. */
+#else
+#  define HAVE_WCHAR
+#endif
+
 #ifdef _WIN32
 #	define WIN32_LEAN_AND_MEAN
 #	include <windows.h>
@@ -763,6 +770,7 @@ void clar__assert_equal(
 			}
 		}
 	}
+#ifdef HAVE_WCHAR
 	else if (!strcmp("%ls", fmt)) {
 		const wchar_t *wcs1 = va_arg(args, const wchar_t *);
 		const wchar_t *wcs2 = va_arg(args, const wchar_t *);
@@ -798,6 +806,7 @@ void clar__assert_equal(
 			}
 		}
 	}
+#endif // HAVE_WCHAR
 	else if (!strcmp("%"PRIuZ, fmt) || !strcmp("%"PRIxZ, fmt)) {
 		size_t sz1 = va_arg(args, size_t), sz2 = va_arg(args, size_t);
 		is_equal = (sz1 == sz2);

Thanks.

[1]: https://lore.kernel.org/buildroot/f517190c-6fcd-4101-afa6-f6ea521feb9e@grenoble.cnrs.fr/
-- 
An old man doll... just what I always wanted! - Clara
Previous: Jeff KingNext: Patrick Steinhardt
Message 17 of 18 in “clar unit testing framework FTBFS on uclibc systems (wchar_t unsupported)”
  1. Bagas SanjayaOct 17, 2024
  2. Patrick SteinhardtOct 17, 2024
  3. Patrick SteinhardtOct 17, 2024
  4. Taylor BlauOct 17, 2024
  5. brian m. carlsonOct 17, 2024
  6. Jeff KingOct 18, 2024
  7. Patrick SteinhardtOct 18, 2024
  8. Jeff KingOct 18, 2024
  9. Patrick SteinhardtOct 18, 2024
  10. Taylor BlauOct 18, 2024
  11. Patrick SteinhardtOct 21, 2024
  12. Jeff KingOct 21, 2024
  13. Taylor BlauOct 21, 2024
  14. brian m. carlsonOct 18, 2024
  15. Jeff KingOct 21, 2024
  16. Jeff KingOct 21, 2024
  17. Bagas SanjayaOct 18, 2024
  18. Patrick SteinhardtOct 21, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.