>From 9d972705a38a280d877dc3179cb8a8fa659b4fbb Mon Sep 17 00:00:00 2001 From: Bernhard Guillon Date: Fri, 26 Feb 2010 20:22:50 +0100 Subject: [PATCH 3/3] acl: add gettext hack for uclibc, bump PR Signed-off-by: Bernhard Guillon --- recipes/udev/acl_2.2.49.bb | 4 +- recipes/udev/files/acl.ulibc.gettext.HACK | 311 +++++++++++++++++++++++++++++ 2 files changed, 314 insertions(+), 1 deletions(-) create mode 100644 recipes/udev/files/acl.ulibc.gettext.HACK diff --git a/recipes/udev/acl_2.2.49.bb b/recipes/udev/acl_2.2.49.bb index b2b1272..ccd73e1 100644 --- a/recipes/udev/acl_2.2.49.bb +++ b/recipes/udev/acl_2.2.49.bb @@ -1,12 +1,14 @@ DESCRIPTION = "Commands for Manipulating POSIX Access Control Lists" LICENSE = "GPLv2" -PR = "r1" +PR = "r2" DEPENDS = "attr" SRC_URI = "http://mirror.its.uidaho.edu/pub/savannah/acl/acl-${PV}.src.tar.gz" +SRC_URI_append_linux-uclibc = " file://acl.ulibc.gettext.HACK;patch=1 " + inherit autotools lib_package EXTRA_OECONF = " --enable-gettext=yes ac_cv_path_XGETTEXT=${STAGING_BINDIR_NATIVE}/xgettext" diff --git a/recipes/udev/files/acl.ulibc.gettext.HACK b/recipes/udev/files/acl.ulibc.gettext.HACK new file mode 100644 index 0000000..e01999d --- /dev/null +++ b/recipes/udev/files/acl.ulibc.gettext.HACK @@ -0,0 +1,311 @@ +diff -Nur acl-2.2.49.vanilla/chacl/chacl.c acl-2.2.49/chacl/chacl.c +--- acl-2.2.49.vanilla/chacl/chacl.c 2009-06-22 20:37:31.000000000 +0200 ++++ acl-2.2.49/chacl/chacl.c 2010-02-26 20:18:13.750565624 +0100 +@@ -32,6 +32,8 @@ + #include + #include "config.h" + ++#include "../gettext.h" ++ + static int acl_delete_file (const char * path, acl_type_t type); + static int list_acl(char *file); + static int set_acl(acl_t acl, acl_t dacl, const char *fname); +diff -Nur acl-2.2.49.vanilla/getfacl/getfacl.c acl-2.2.49/getfacl/getfacl.c +--- acl-2.2.49.vanilla/getfacl/getfacl.c 2009-06-29 21:17:25.000000000 +0200 ++++ acl-2.2.49/getfacl/getfacl.c 2010-02-26 20:17:47.318562563 +0100 +@@ -40,6 +40,8 @@ + #include "walk_tree.h" + #include "misc.h" + ++#include "../gettext.h" ++ + #define POSIXLY_CORRECT_STR "POSIXLY_CORRECT" + + #if !POSIXLY_CORRECT +diff -Nur acl-2.2.49.vanilla/gettext.h acl-2.2.49/gettext.h +--- acl-2.2.49.vanilla/gettext.h 1970-01-01 01:00:00.000000000 +0100 ++++ acl-2.2.49/gettext.h 2010-02-26 20:17:17.871546058 +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 acl-2.2.49.vanilla/setfacl/setfacl.c acl-2.2.49/setfacl/setfacl.c +--- acl-2.2.49.vanilla/setfacl/setfacl.c 2009-06-29 21:17:25.000000000 +0200 ++++ acl-2.2.49/setfacl/setfacl.c 2010-02-26 20:17:32.258566043 +0100 +@@ -37,6 +37,8 @@ + #include "walk_tree.h" + #include "misc.h" + ++#include "../gettext.h" ++ + #define POSIXLY_CORRECT_STR "POSIXLY_CORRECT" + + /* '-' stands for `process non-option arguments in loop' */ -- 1.6.3.3