>From d8af51bc314f709ba86c05e3b9305e9abc6e701d Mon Sep 17 00:00:00 2001 From: Bernhard Guillon Date: Fri, 26 Feb 2010 19:55:15 +0100 Subject: [PATCH 2/3] attr: add gettext hack for uclibc, bump PR Signed-off-by: Bernhard Guillon --- recipes/udev/attr_2.4.44.bb | 8 +- recipes/udev/files/attr.uclibc.gettext.HACK | 311 +++++++++++++++++++++++++++ 2 files changed, 316 insertions(+), 3 deletions(-) create mode 100644 recipes/udev/files/attr.uclibc.gettext.HACK diff --git a/recipes/udev/attr_2.4.44.bb b/recipes/udev/attr_2.4.44.bb index 7cb9217..78cdf7c 100644 --- a/recipes/udev/attr_2.4.44.bb +++ b/recipes/udev/attr_2.4.44.bb @@ -1,14 +1,16 @@ DESCRIPTION = "Commands for Manipulating Filesystem Extended Attributes" LICENSE = "GPLv2" -PR = "r1" +PR = "r2" -SRC_URI = "http://mirror.its.uidaho.edu/pub/savannah/attr/attr-${PV}.src.tar.gz" +SRC_URI = "http://mirror.its.uidaho.edu/pub/savannah/attr/attr-${PV}.src.tar.gz " + +SRC_URI_append_linux-uclibc = " file://attr.uclibc.gettext.HACK;patch=1 " inherit gettext autotools lib_package EXTRA_OECONF = " --enable-gettext=yes ac_cv_path_XGETTEXT=${STAGING_BINDIR_NATIVE}/xgettext" - +#EXTRA_OECONF = " --enable-gettext=no" do_configure_append() { # gettext hack echo "#define _(str) str" >> ${S}/include/config.h diff --git a/recipes/udev/files/attr.uclibc.gettext.HACK b/recipes/udev/files/attr.uclibc.gettext.HACK new file mode 100644 index 0000000..ecbb79b --- /dev/null +++ b/recipes/udev/files/attr.uclibc.gettext.HACK @@ -0,0 +1,311 @@ +diff -Nur attr-2.4.44.vanilla/attr/attr.c attr-2.4.44/attr/attr.c +--- attr-2.4.44.vanilla/attr/attr.c 2009-07-31 11:02:14.000000000 +0200 ++++ attr-2.4.44/attr/attr.c 2010-02-26 19:06:59.527548378 +0100 +@@ -30,6 +30,8 @@ + #include + #include "config.h" + ++#include "../gettext.h" ++ + #define SETOP 1 /* do a SET operation */ + #define GETOP 2 /* do a GET operation */ + #define REMOVEOP 3 /* do a REMOVE operation */ +diff -Nur attr-2.4.44.vanilla/getfattr/getfattr.c attr-2.4.44/getfattr/getfattr.c +--- attr-2.4.44.vanilla/getfattr/getfattr.c 2009-07-31 11:03:50.000000000 +0200 ++++ attr-2.4.44/getfattr/getfattr.c 2010-02-26 19:07:25.718548780 +0100 +@@ -33,6 +33,8 @@ + #include "walk_tree.h" + #include "misc.h" + ++#include "../gettext.h" ++ + #define CMD_LINE_OPTIONS "n:de:m:hRLP" + #define CMD_LINE_SPEC "[-hRLP] [-n name|-d] [-e en] [-m pattern] path..." + +diff -Nur attr-2.4.44.vanilla/gettext.h attr-2.4.44/gettext.h +--- attr-2.4.44.vanilla/gettext.h 1970-01-01 01:00:00.000000000 +0100 ++++ attr-2.4.44/gettext.h 2010-02-26 19:06:30.662546095 +0100 +@@ -0,0 +1,271 @@ ++/* Convenience header for conditional use of GNU . ++ Copyright (C) 1995-1998, 2000-2002, 2004-2006 Free Software Foundation, Inc. ++ ++ This program is free software; you can redistribute it and/or modify it ++ under the terms of the GNU General Public License as published ++ by the Free Software Foundation; either version 2, or (at your option) ++ any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU General Public ++ License along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, ++ USA. */ ++ ++#ifndef _LIBGETTEXT_H ++#define _LIBGETTEXT_H 1 ++ ++/* NLS can be disabled through the configure --disable-nls option. */ ++#if ENABLE_NLS ++ ++/* Get declarations of GNU message catalog functions. */ ++# include ++ ++/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by ++ the gettext() and ngettext() macros. This is an alternative to calling ++ textdomain(), and is useful for libraries. */ ++# ifdef DEFAULT_TEXT_DOMAIN ++# undef gettext ++# define gettext(Msgid) \ ++ dgettext (DEFAULT_TEXT_DOMAIN, Msgid) ++# undef ngettext ++# define ngettext(Msgid1, Msgid2, N) \ ++ dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) ++# endif ++ ++#else ++ ++/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which ++ chokes if dcgettext is defined as a macro. So include it now, to make ++ later inclusions of a NOP. We don't include ++ as well because people using "gettext.h" will not include , ++ and also including would fail on SunOS 4, whereas ++ is OK. */ ++#if defined(__sun) ++# include ++#endif ++ ++/* Many header files from the libstdc++ coming with g++ 3.3 or newer include ++ , which chokes if dcgettext is defined as a macro. So include ++ it now, to make later inclusions of a NOP. */ ++#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) ++# include ++# if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H ++# include ++# endif ++#endif ++ ++/* Disabled NLS. ++ The casts to 'const char *' serve the purpose of producing warnings ++ for invalid uses of the value returned from these functions. ++ On pre-ANSI systems without 'const', the config.h file is supposed to ++ contain "#define const". */ ++# define gettext(Msgid) ((const char *) (Msgid)) ++# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) ++# define dcgettext(Domainname, Msgid, Category) \ ++ ((void) (Category), dgettext (Domainname, Msgid)) ++# define ngettext(Msgid1, Msgid2, N) \ ++ ((N) == 1 \ ++ ? ((void) (Msgid2), (const char *) (Msgid1)) \ ++ : ((void) (Msgid1), (const char *) (Msgid2))) ++# define dngettext(Domainname, Msgid1, Msgid2, N) \ ++ ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) ++# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ ++ ((void) (Category), dngettext(Domainname, Msgid1, Msgid2, N)) ++# define textdomain(Domainname) ((const char *) (Domainname)) ++# define bindtextdomain(Domainname, Dirname) \ ++ ((void) (Domainname), (const char *) (Dirname)) ++# define bind_textdomain_codeset(Domainname, Codeset) \ ++ ((void) (Domainname), (const char *) (Codeset)) ++ ++#endif ++ ++/* A pseudo function call that serves as a marker for the automated ++ extraction of messages, but does not call gettext(). The run-time ++ translation is done at a different place in the code. ++ The argument, String, should be a literal string. Concatenated strings ++ and other string expressions won't work. ++ The macro's expansion is not parenthesized, so that it is suitable as ++ initializer for static 'char[]' or 'const char[]' variables. */ ++#define gettext_noop(String) String ++ ++/* The separator between msgctxt and msgid in a .mo file. */ ++#define GETTEXT_CONTEXT_GLUE "\004" ++ ++/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a ++ MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be ++ short and rarely need to change. ++ The letter 'p' stands for 'particular' or 'special'. */ ++#ifdef DEFAULT_TEXT_DOMAIN ++# define pgettext(Msgctxt, Msgid) \ ++ pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) ++#else ++# define pgettext(Msgctxt, Msgid) \ ++ pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) ++#endif ++#define dpgettext(Domainname, Msgctxt, Msgid) \ ++ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) ++#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ ++ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) ++#ifdef DEFAULT_TEXT_DOMAIN ++# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ ++ npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) ++#else ++# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ ++ npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) ++#endif ++#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ ++ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) ++#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ ++ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) ++ ++#ifdef __GNUC__ ++__inline ++#else ++#ifdef __cplusplus ++inline ++#endif ++#endif ++static const char * ++pgettext_aux (const char *domain, ++ const char *msg_ctxt_id, const char *msgid, ++ int category) ++{ ++ const char *translation = dcgettext (domain, msg_ctxt_id, category); ++ if (translation == msg_ctxt_id) ++ return msgid; ++ else ++ return translation; ++} ++ ++#ifdef __GNUC__ ++__inline ++#else ++#ifdef __cplusplus ++inline ++#endif ++#endif ++static const char * ++npgettext_aux (const char *domain, ++ const char *msg_ctxt_id, const char *msgid, ++ const char *msgid_plural, unsigned long int n, ++ int category) ++{ ++ const char *translation = ++ dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); ++ if (translation == msg_ctxt_id || translation == msgid_plural) ++ return (n == 1 ? msgid : msgid_plural); ++ else ++ return translation; ++} ++ ++/* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID ++ can be arbitrary expressions. But for string literals these macros are ++ less efficient than those above. */ ++ ++#include ++ ++#define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \ ++ (((__GNUC__ >= 3 || __GNUG__ >= 2) && !__STRICT_ANSI__) \ ++ /* || __STDC_VERSION__ >= 199901L */ ) ++ ++#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS ++#include ++#endif ++ ++#define pgettext_expr(Msgctxt, Msgid) \ ++ dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES) ++#define dpgettext_expr(Domainname, Msgctxt, Msgid) \ ++ dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES) ++ ++#ifdef __GNUC__ ++__inline ++#else ++#ifdef __cplusplus ++inline ++#endif ++#endif ++static const char * ++dcpgettext_expr (const char *domain, ++ const char *msgctxt, const char *msgid, ++ int category) ++{ ++ size_t msgctxt_len = strlen (msgctxt) + 1; ++ size_t msgid_len = strlen (msgid) + 1; ++ const char *translation; ++#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS ++ char msg_ctxt_id[msgctxt_len + msgid_len]; ++#else ++ char buf[1024]; ++ char *msg_ctxt_id = ++ (msgctxt_len + msgid_len <= sizeof (buf) ++ ? buf ++ : (char *) malloc (msgctxt_len + msgid_len)); ++ if (msg_ctxt_id != NULL) ++#endif ++ { ++ memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); ++ msg_ctxt_id[msgctxt_len - 1] = '\004'; ++ memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); ++ translation = dcgettext (domain, msg_ctxt_id, category); ++#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS ++ if (msg_ctxt_id != buf) ++ free (msg_ctxt_id); ++#endif ++ if (translation != msg_ctxt_id) ++ return translation; ++ } ++ return msgid; ++} ++ ++#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ ++ dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) ++#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ ++ dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) ++ ++#ifdef __GNUC__ ++__inline ++#else ++#ifdef __cplusplus ++inline ++#endif ++#endif ++static const char * ++dcnpgettext_expr (const char *domain, ++ const char *msgctxt, const char *msgid, ++ const char *msgid_plural, unsigned long int n, ++ int category) ++{ ++ size_t msgctxt_len = strlen (msgctxt) + 1; ++ size_t msgid_len = strlen (msgid) + 1; ++ const char *translation; ++#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS ++ char msg_ctxt_id[msgctxt_len + msgid_len]; ++#else ++ char buf[1024]; ++ char *msg_ctxt_id = ++ (msgctxt_len + msgid_len <= sizeof (buf) ++ ? buf ++ : (char *) malloc (msgctxt_len + msgid_len)); ++ if (msg_ctxt_id != NULL) ++#endif ++ { ++ memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); ++ msg_ctxt_id[msgctxt_len - 1] = '\004'; ++ memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); ++ translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); ++#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS ++ if (msg_ctxt_id != buf) ++ free (msg_ctxt_id); ++#endif ++ if (!(translation == msg_ctxt_id || translation == msgid_plural)) ++ return translation; ++ } ++ return (n == 1 ? msgid : msgid_plural); ++} ++ ++#endif /* _LIBGETTEXT_H */ +diff -Nur attr-2.4.44.vanilla/setfattr/setfattr.c attr-2.4.44/setfattr/setfattr.c +--- attr-2.4.44.vanilla/setfattr/setfattr.c 2009-07-31 11:03:50.000000000 +0200 ++++ attr-2.4.44/setfattr/setfattr.c 2010-02-26 19:07:35.966552805 +0100 +@@ -31,6 +31,8 @@ + #include "config.h" + #include "misc.h" + ++#include "../gettext.h" ++ + #define CMD_LINE_OPTIONS "n:x:v:h" + #define CMD_LINE_SPEC1 "{-n name} [-v value] [-h] file..." + #define CMD_LINE_SPEC2 "{-x name} [-h] file..." -- 1.6.3.3