From mboxrd@z Thu Jan 1 00:00:00 1970 From: Fabrice Fontaine Date: Fri, 24 Jul 2020 23:07:38 +0200 Subject: [Buildroot] [PATCH 1/1] package/zbar: bump to version 0.23.1 Message-ID: <20200724210738.1077246-1-fontaine.fabrice@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: buildroot@busybox.net - Add new NLS dependency as well as a patch to fix a build failure without it: https://github.com/mchehab/zbar/issues/90 - Update indentation in hash file (two spaces) Signed-off-by: Fabrice Fontaine --- ...01-zbar-add-some-translation-support.patch | 329 ++++++++++++++++++ package/zbar/zbar.hash | 4 +- package/zbar/zbar.mk | 5 +- 3 files changed, 334 insertions(+), 4 deletions(-) create mode 100644 package/zbar/0001-zbar-add-some-translation-support.patch diff --git a/package/zbar/0001-zbar-add-some-translation-support.patch b/package/zbar/0001-zbar-add-some-translation-support.patch new file mode 100644 index 0000000000..a505887e15 --- /dev/null +++ b/package/zbar/0001-zbar-add-some-translation-support.patch @@ -0,0 +1,329 @@ +From d05911f8d5fb8c1e064bd93ed9ec9f038c5da096 Mon Sep 17 00:00:00 2001 +From: Mauro Carvalho Chehab +Date: Sun, 12 Apr 2020 14:45:40 +0200 +Subject: [PATCH] zbar: add some translation support + +A full zBar translation would take a while, but let's take the +first step and translate the help messages from the two +command line utils. + +This sets a baseline code to be used by other translations. + +Signed-off-by: Mauro Carvalho Chehab +[Retrieved (and updated to keep only gettext.h) from: +https://github.com/mchehab/zbar/commit/d05911f8d5fb8c1e064bd93ed9ec9f038c5da096] +Signed-off-by: Fabrice Fontaine +--- + Makefile.am | 20 ++- + config/config.rpath | 2 +- + configure.ac | 5 +- + po/Makevars | 72 +++++++++++ + po/POTFILES.in | 5 + + zbar/gettext.h | 294 ++++++++++++++++++++++++++++++++++++++++++++ + zbarcam/zbarcam.c | 33 ++++- + zbarimg/zbarimg.c | 106 ++++++++++------ + 8 files changed, 486 insertions(+), 51 deletions(-) + create mode 100644 po/Makevars + create mode 100644 po/POTFILES.in + create mode 100644 zbar/gettext.h + +diff --git a/zbar/gettext.h b/zbar/gettext.h +new file mode 100644 +index 0000000..bd8e87d +--- /dev/null ++++ b/zbar/gettext.h +@@ -0,0 +1,294 @@ ++/* Convenience header for conditional use of GNU . ++ Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2018 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 3 of the License, 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 General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see . */ ++ ++#ifndef _LIBGETTEXT_H ++#define _LIBGETTEXT_H 1 ++ ++/* NLS can be disabled through the configure --disable-nls option ++ or through "#define ENABLE NLS 0" before including this file. */ ++#if defined ENABLE_NLS && 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 && !defined __UCLIBC__) || _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". */ ++# undef gettext ++# define gettext(Msgid) ((const char *) (Msgid)) ++# undef dgettext ++# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) ++# undef dcgettext ++# define dcgettext(Domainname, Msgid, Category) \ ++ ((void) (Category), dgettext (Domainname, Msgid)) ++# undef ngettext ++# define ngettext(Msgid1, Msgid2, N) \ ++ ((N) == 1 \ ++ ? ((void) (Msgid2), (const char *) (Msgid1)) \ ++ : ((void) (Msgid1), (const char *) (Msgid2))) ++# undef dngettext ++# define dngettext(Domainname, Msgid1, Msgid2, N) \ ++ ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) ++# undef dcngettext ++# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ ++ ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N)) ++# undef textdomain ++# define textdomain(Domainname) ((const char *) (Domainname)) ++# undef bindtextdomain ++# define bindtextdomain(Domainname, Dirname) \ ++ ((void) (Domainname), (const char *) (Dirname)) ++# undef bind_textdomain_codeset ++# define bind_textdomain_codeset(Domainname, Codeset) \ ++ ((void) (Domainname), (const char *) (Codeset)) ++ ++#endif ++ ++/* Prefer gnulib's setlocale override over libintl's setlocale override. */ ++#ifdef GNULIB_defined_setlocale ++# undef setlocale ++# define setlocale rpl_setlocale ++#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 ++ ++#if (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \ ++ /* || (__STDC_VERSION__ == 199901L && !defined __HP_cc) ++ || (__STDC_VERSION__ >= 201112L && !defined __STDC_NO_VLA__) */ ) ++# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1 ++#else ++# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0 ++#endif ++ ++#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 ++ { ++ int found_translation; ++ 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); ++ found_translation = (translation != msg_ctxt_id); ++#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS ++ if (msg_ctxt_id != buf) ++ free (msg_ctxt_id); ++#endif ++ if (found_translation) ++ 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 ++ { ++ int found_translation; ++ 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); ++ found_translation = !(translation == msg_ctxt_id || translation == msgid_plural); ++#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS ++ if (msg_ctxt_id != buf) ++ free (msg_ctxt_id); ++#endif ++ if (found_translation) ++ return translation; ++ } ++ return (n == 1 ? msgid : msgid_plural); ++} ++ ++#endif /* _LIBGETTEXT_H */ diff --git a/package/zbar/zbar.hash b/package/zbar/zbar.hash index eae5b7ebf5..4277091892 100644 --- a/package/zbar/zbar.hash +++ b/package/zbar/zbar.hash @@ -1,3 +1,3 @@ # Locally computed: -sha256 e99fb8f3be85a76fe24784ad67fecb2da3a02b1e432696b05eefe212d448ad2e zbar-0.23.tar.bz2 -sha256 44260f9252c7fe38ba8dfb645330504f4a375e3a5e9dd7d5d6b9f04adb4952f1 LICENSE.md +sha256 dad260b47ef887a639e840a89e5e6e132217b6bba2a8473565d1f459bcb97c1f zbar-0.23.1.tar.bz2 +sha256 44260f9252c7fe38ba8dfb645330504f4a375e3a5e9dd7d5d6b9f04adb4952f1 LICENSE.md diff --git a/package/zbar/zbar.mk b/package/zbar/zbar.mk index 0550f3e23f..019df58ebe 100644 --- a/package/zbar/zbar.mk +++ b/package/zbar/zbar.mk @@ -4,7 +4,7 @@ # ################################################################################ -ZBAR_VERSION = 0.23 +ZBAR_VERSION = 0.23.1 ZBAR_SOURCE = zbar-$(ZBAR_VERSION).tar.bz2 ZBAR_SITE = https://www.linuxtv.org/downloads/zbar ZBAR_LICENSE = LGPL-2.1+ @@ -12,7 +12,8 @@ ZBAR_LICENSE_FILES = LICENSE.md ZBAR_INSTALL_STAGING = YES ZBAR_DEPENDENCIES = libv4l jpeg # add host-gettext for AM_ICONV macro -ZBAR_DEPENDENCIES += host-gettext +ZBAR_DEPENDENCIES += host-gettext $(TARGET_NLS_DEPENDENCIES) +ZBAR_CONF_ENV = LIBS=$(TARGET_NLS_LIBS) # uses C99 features ZBAR_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -std=gnu99" ZBAR_CONF_OPTS = \ -- 2.27.0