[Buildroot] [PATCH] Fix uClibc utils compilation

Paulius Zaleckas paulius.zaleckas at gmail.com
Thu Jan 28 21:32:27 UTC 2010


When compiling with locale support:
../utils/iconv.c: In function 'main':
../utils/iconv.c:182: error: '__iconv_codesets' undeclared (first use in this function)
../utils/iconv.c:182: error: (Each undeclared identifier is reported only once
../utils/iconv.c:182: error: for each function it appears in.)

Following patch from uClibc upstream fixes this problem.

Signed-off-by: Paulius Zaleckas <paulius.zaleckas at gmail.com>
---

 .../uClibc-0.9.30.2-fix-iconv-compilation.patch    |  153 ++++++++++++++++++++
 1 files changed, 153 insertions(+), 0 deletions(-)
 create mode 100644 toolchain/uClibc/uClibc-0.9.30.2-fix-iconv-compilation.patch

diff --git a/toolchain/uClibc/uClibc-0.9.30.2-fix-iconv-compilation.patch b/toolchain/uClibc/uClibc-0.9.30.2-fix-iconv-compilation.patch
new file mode 100644
index 0000000..526dfb1
--- /dev/null
+++ b/toolchain/uClibc/uClibc-0.9.30.2-fix-iconv-compilation.patch
@@ -0,0 +1,153 @@
+From d75ad2e129b3f22296cead3db53c784527deab60 Mon Sep 17 00:00:00 2001
+From: Bernhard Reutner-Fischer <rep.dot.nop at gmail.com>
+Date: Fri, 18 Sep 2009 14:07:31 +0000
+Subject: fix make {,install_}{,host}utils
+
+Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop at gmail.com>
+---
+diff --git a/extra/locale/programs/locale.c b/extra/locale/programs/locale.c
+index 462a579..dfd2029 100644
+--- a/extra/locale/programs/locale.c
++++ b/extra/locale/programs/locale.c
+@@ -10,10 +10,9 @@
+  *
+  */
+ 
+-
++#include <string.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+-#include <string.h>
+ #include <langinfo.h>
+ #include <unistd.h>
+ #ifdef __UCLIBC_HAS_GETOPT_LONG__
+diff --git a/libc/misc/wchar/wchar.c b/libc/misc/wchar/wchar.c
+index 290e680..3ce884d 100644
+--- a/libc/misc/wchar/wchar.c
++++ b/libc/misc/wchar/wchar.c
+@@ -171,7 +171,6 @@ extern size_t _wchar_utf8sntowcs(wchar_t *__restrict pwc, size_t wn,
+ 
+ extern size_t _wchar_wcsntoutf8s(char *__restrict s, size_t n,
+ 					const wchar_t **__restrict src, size_t wn) attribute_hidden;
+-
+ #endif /* _LIBC */
+ /**********************************************************************/
+ #ifdef L_btowc
+@@ -1201,45 +1200,6 @@ typedef struct {
+ 	int skip_invalid_input;		/* To support iconv -c option. */
+ } _UC_iconv_t;
+ 
+-
+-
+-#ifdef L_iconv
+-
+-#include <iconv.h>
+-#include <string.h>
+-#include <endian.h>
+-#include <byteswap.h>
+-
+-#if (__BYTE_ORDER != __BIG_ENDIAN) && (__BYTE_ORDER != __LITTLE_ENDIAN)
+-#error unsupported endianness for iconv
+-#endif
+-
+-#ifndef __CTYPE_HAS_8_BIT_LOCALES
+-#error currently iconv requires 8 bit locales
+-#endif
+-#ifndef __CTYPE_HAS_UTF_8_LOCALES
+-#error currently iconv requires UTF-8 locales
+-#endif
+-
+-
+-enum {
+-	IC_WCHAR_T = 0xe0,
+-	IC_MULTIBYTE = 0xe0,
+-#if __BYTE_ORDER == __BIG_ENDIAN
+-	IC_UCS_4 =	0xec,
+-	IC_UTF_32 = 0xe4,
+-	IC_UCS_2 =	0xe2,
+-	IC_UTF_16 = 0xea,
+-#else
+-	IC_UCS_4 =	0xed,
+-	IC_UTF_32 = 0xe5,
+-	IC_UCS_2 =	0xe3,
+-	IC_UTF_16 = 0xeb,
+-#endif
+-	IC_UTF_8 = 2,
+-	IC_ASCII = 1
+-};
+-
+ /* For the multibyte
+  * bit 0 means swap endian
+  * bit 1 means 2 byte
+@@ -1247,8 +1207,13 @@ enum {
+  *
+  */
+ 
++#if defined L_iconv && defined _LIBC
++/* Used externally only by iconv utility */
+ extern const unsigned char __iconv_codesets[];
+ libc_hidden_proto(__iconv_codesets)
++#endif
++
++#if defined L_iconv || defined L_iconv_main
+ const unsigned char __iconv_codesets[] =
+ 	"\x0a\xe0""WCHAR_T\x00"		/* superset of UCS-4 but platform-endian */
+ #if __BYTE_ORDER == __BIG_ENDIAN
+@@ -1281,7 +1246,48 @@ const unsigned char __iconv_codesets[] =
+ 	"\x08\x02""UTF-8\x00"
+ 	"\x0b\x01""US-ASCII\x00"
+ 	"\x07\x01""ASCII";			/* Must be last! (special case to save a nul) */
++#endif
++#if defined L_iconv && defined _LIBC
+ libc_hidden_data_def(__iconv_codesets)
++#endif
++
++
++#ifdef L_iconv
++
++#include <iconv.h>
++#include <string.h>
++#include <endian.h>
++#include <byteswap.h>
++
++#if (__BYTE_ORDER != __BIG_ENDIAN) && (__BYTE_ORDER != __LITTLE_ENDIAN)
++#error unsupported endianness for iconv
++#endif
++
++#ifndef __CTYPE_HAS_8_BIT_LOCALES
++#error currently iconv requires 8 bit locales
++#endif
++#ifndef __CTYPE_HAS_UTF_8_LOCALES
++#error currently iconv requires UTF-8 locales
++#endif
++
++
++enum {
++	IC_WCHAR_T = 0xe0,
++	IC_MULTIBYTE = 0xe0,
++#if __BYTE_ORDER == __BIG_ENDIAN
++	IC_UCS_4 =	0xec,
++	IC_UTF_32 = 0xe4,
++	IC_UCS_2 =	0xe2,
++	IC_UTF_16 = 0xea,
++#else
++	IC_UCS_4 =	0xed,
++	IC_UTF_32 = 0xe5,
++	IC_UCS_2 =	0xe3,
++	IC_UTF_16 = 0xeb,
++#endif
++	IC_UTF_8 = 2,
++	IC_ASCII = 1
++};
+ 
+ /* Experimentally off - libc_hidden_proto(strcasecmp) */
+ 
+@@ -1575,6 +1581,4 @@ size_t weak_function iconv(iconv_t cd, char **__restrict inbuf,
+ 	}
+ 	return nrcount;
+ }
+-
+ #endif
+-
+--
+cgit v0.8.2.1



More information about the buildroot mailing list