@@ -2197,6 +2197,7 @@ F: package/tstools/
N: Vadim Kochan <vadim4j@gmail.com>
F: package/brcm-patchram-plus/
+F: package/gettext-tiny/
N: Valentin Korenblit <valentinkorenblit@gmail.com>
F: package/clang/
@@ -154,6 +154,7 @@ menu "Development tools"
source "package/gawk/Config.in"
source "package/gettext/Config.in"
source "package/gettext-gnu/Config.in"
+ source "package/gettext-tiny/Config.in"
source "package/git/Config.in"
source "package/git-crypt/Config.in"
source "package/gperf/Config.in"
@@ -21,4 +21,4 @@ config BR2_PACKAGE_PROVIDES_GETTEXT
endif
config BR2_PACKAGE_PROVIDES_HOST_GETTEXT
- default "host-gettext-gnu"
+ default "host-gettext-gnu" if BR2_SYSTEM_ENABLE_NLS
new file mode 100644
@@ -0,0 +1,55 @@
+From 34f631ce80700aa1eaadc032026f12f86584bd8a Mon Sep 17 00:00:00 2001
+From: Vadim Kochan <vadim4j@gmail.com>
+Date: Mon, 31 Dec 2018 00:40:29 +0200
+Subject: [PATCH] gettext-tiny: Fix format not a string literal error
+
+Add 'format_arg' attribute for the functions which may return string
+as formatted parameter, otherwise it fails to compile on high versions
+of gcc.
+
+Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
+---
+ include/libintl.h | 27 +++++++++++++++++++++------
+ 1 file changed, 21 insertions(+), 6 deletions(-)
+
+diff --git a/include/libintl.h b/include/libintl.h
+index b1af2b4..1883e1b 100644
+--- a/include/libintl.h
++++ b/include/libintl.h
+@@ -4,12 +4,27 @@
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+-char *gettext(const char *msgid);
+-char *dgettext(const char *domainname, const char *msgid);
+-char *dcgettext(const char *domainname, const char *msgid, int category);
+-char *ngettext(const char *msgid1, const char *msgid2, unsigned long n);
+-char *dngettext(const char *domainname, const char *msgid1, const char *msgid2, unsigned long n);
+-char *dcngettext(const char *domainname, const char *msgid1, const char *msgid2, unsigned long n, int category);
++/* _INTL_MAY_RETURN_STRING_ARG(n) declares that the given function may return
++ * its n-th argument literally. This enables GCC to warn for example about
++ * printf (gettext ("foo %y")). */
++#if defined __GNUC__ && __GNUC__ >= 3 && !(defined __APPLE_CC__ && __APPLE_CC__ > 1 && defined __cplusplus)
++# define _INTL_MAY_RETURN_STRING_ARG(n) __attribute__ ((__format_arg__ (n)))
++#else
++# define _INTL_MAY_RETURN_STRING_ARG(n)
++#endif
++
++char *gettext(const char *msgid)
++ _INTL_MAY_RETURN_STRING_ARG(1);
++char *dgettext(const char *domainname, const char *msgid)
++ _INTL_MAY_RETURN_STRING_ARG(2);
++char *dcgettext(const char *domainname, const char *msgid, int category)
++ _INTL_MAY_RETURN_STRING_ARG(2);
++char *ngettext(const char *msgid1, const char *msgid2, unsigned long n)
++ _INTL_MAY_RETURN_STRING_ARG(1) _INTL_MAY_RETURN_STRING_ARG(2);
++char *dngettext(const char *domainname, const char *msgid1, const char *msgid2, unsigned long n)
++ _INTL_MAY_RETURN_STRING_ARG(2) _INTL_MAY_RETURN_STRING_ARG(3);
++char *dcngettext(const char *domainname, const char *msgid1, const char *msgid2, unsigned long n, int category)
++ _INTL_MAY_RETURN_STRING_ARG(2) _INTL_MAY_RETURN_STRING_ARG(3);
+
+ char *textdomain(const char *domainname);
+ char *bind_textdomain_codeset(const char *domainname, const char *codeset);
+--
+2.14.1
+
new file mode 100644
@@ -0,0 +1,18 @@
+config BR2_PACKAGE_GETTEXT_TINY
+ bool
+ select BR2_PACKAGE_HAS_GETTEXT
+ help
+ Stub and/or lightweight replacements of the gnu gettext
+ suite; because the GNU one takes ages to compile.
+
+ https://github.com/sabotage-linux/gettext-tiny
+
+if BR2_PACKAGE_GETTEXT_TINY
+
+config BR2_PACKAGE_PROVIDES_GETTEXT
+ default "gettext-tiny"
+
+endif
+
+config BR2_PACKAGE_PROVIDES_HOST_GETTEXT
+ default "host-gettext-tiny" if !BR2_SYSTEM_ENABLE_NLS
new file mode 100644
@@ -0,0 +1,5 @@
+# Locally Computed:
+sha256 654dcd52f2650476c8822b60bee89c20a0aa7f6a1bf6001701eeacd71a9e388b gettext-tiny-v0.3.1.tar.gz
+# From http://lists.gnu.org/archive/html/bug-gettext/2016-06/msg00008.html
+md5 df3f5690eaa30fd228537b00cb7b7590 gettext-0.19.8.1.tar.xz
+sha1 e0fe90ede22f7f16bbde7bdea791a835f2773fc9 gettext-0.19.8.1.tar.xz
new file mode 100644
@@ -0,0 +1,114 @@
+################################################################################
+#
+# gettext-tiny
+#
+################################################################################
+
+GETTEXT_TINY_VERSION = v0.3.1
+GETTEXT_TINY_SITE = $(call github,sabotage-linux,gettext-tiny,$(GETTEXT_TINY_VERSION))
+GETTEXT_TINY_LICENSE = MIT, GPL-3.0+ (extra gettext)
+GETTEXT_TINY_INSTALL_STAGING = YES
+GETTEXT_TINY_LICENSE_FILES = LICENSE, extra/COPYING
+GETTEXT_TINY_OPTS = LIBINTL=NOOP
+
+GETTEXT_TINY_PROVIDES = gettext
+
+# needed for gettextize
+GETTEXT_TINY_ARCHIVE_VERSION = 0.19.8
+
+GETTEXT_TINY_EXTRA_GETTEXT_FILES = \
+ gettext-tools/misc/gettextize.in \
+ gettext-tools/po/Makevars.template \
+ gettext-runtime/m4/lock.m4 \
+ gettext-runtime/po/boldquot.sed \
+ gettext-runtime/po/en@boldquot.header \
+ gettext-runtime/po/en@quot.header \
+ gettext-runtime/po/insert-header.sin \
+ gettext-runtime/po/quot.sed \
+ gettext-runtime/po/remove-potcdate.sin \
+ gettext-runtime/po/Rules-quot \
+ gettext-runtime/po/Makefile.in.in \
+ COPYING
+
+HOST_GETTEXT_TINY_EXTRA_DOWNLOADS = $(GETTEXT_GNU_SITE)/$(GETTEXT_GNU_SOURCE)
+
+define HOST_GETTEXT_TINY_EXTRACT_GNU_GETTEXT
+ mkdir -p $(@D)/gettext-gnu
+ $(call suitable-extractor,$(GETTEXT_GNU_SOURCE)) \
+ $(GETTEXT_GNU_DL_DIR)/$(GETTEXT_GNU_SOURCE) | \
+ $(TAR) --strip-components=1 -C $(@D)/gettext-gnu $(TAR_OPTIONS) -
+endef
+HOST_GETTEXT_TINY_POST_EXTRACT_HOOKS += HOST_GETTEXT_TINY_EXTRACT_GNU_GETTEXT
+
+define HOST_GETTEXT_TINY_COPY_EXTRA_FILES
+ $(foreach f,$(GETTEXT_TINY_EXTRA_GETTEXT_FILES),\
+ $(INSTALL) -D -m 0644 $(@D)/gettext-gnu/$(f) $(@D)/extra/$(notdir $(f))
+ )
+ $(INSTALL) -D -m 0755 $(@D)/gettext-gnu/build-aux/config.rpath \
+ $(@D)/build-aux/config.rpath
+endef
+HOST_GETTEXT_TINY_POST_PATCH_HOOKS += HOST_GETTEXT_TINY_COPY_EXTRA_FILES
+
+ifeq ($(BR2_ENABLE_LOCALE),)
+HOST_GETTEXT_TINY_DEPENDENCIES = libiconv
+endif
+
+define HOST_GETTEXT_TINY_BUILD_CMDS
+ $(HOST_MAKE_ENV) $(MAKE) -C $(@D) \
+ $(HOST_CONFIGURE_OPTS) \
+ $(GETTEXT_TINY_OPTS)
+
+ cp $(@D)/extra/gettextize.in $(@D)/gettextize
+
+ $(SED) 's,@PACKAGE@,gettext-tools,g;' $(@D)/gettextize
+ $(SED) 's,@VERSION@,$(GETTEXT_GNU_VERSION),g;' $(@D)/gettextize
+ $(SED) 's,@ARCHIVE_VERSION@,$(GETTEXT_TINY_ARCHIVE_VERSION),' $(@D)/gettextize
+ $(SED) 's,@prefix@,$(HOST_DIR),g;' $(@D)/gettextize
+ $(SED) 's,@datarootdir@,$${prefix}/share,g;' $(@D)/gettextize
+ $(SED) 's,@datadir@,$${prefix}/share,g;' $(@D)/gettextize
+ $(SED) 's,@PATH_SEPARATOR@,:,g;' $(@D)/gettextize
+ $(SED) 's,@RELOCATABLE@,no,g;' $(@D)/gettextize
+ $(SED) 's,@exec_prefix@,$${prefix},g;' $(@D)/gettextize
+ $(SED) 's,@bindir@,$${exec_prefix}/bin,g;' $(@D)/gettextize
+endef
+
+define HOST_GETTEXT_TINY_INSTALL_CMDS
+ $(Q)mkdir -p $(HOST_DIR)/share/gettext-tiny/po
+ $(Q)mkdir -p $(HOST_DIR)/share/gettext-tiny/m4
+
+ $(HOST_MAKE_ENV) $(MAKE) -C $(@D) \
+ $(HOST_CONFIGURE_OPTS) \
+ prefix=$(HOST_DIR) install
+
+ $(SED) '/read dummy/d' $(@D)/gettextize
+
+ $(INSTALL) -m 0755 -D $(@D)/gettextize $(HOST_DIR)/bin/gettextize
+ $(INSTALL) -m 0644 -D $(@D)/build-aux/config.rpath $(HOST_DIR)/share/gettext-tiny/config.rpath
+ $(INSTALL) -m 0644 -D $(@D)/extra/lock.m4 $(HOST_DIR)/share/gettext-tiny/m4/lock.m4
+ $(INSTALL) -m 0644 -D $(@D)/extra/Makefile.in.in $(HOST_DIR)/share/gettext-tiny/po/Makefile.in.in
+ $(INSTALL) -m 0644 -D $(@D)/extra/boldquot.sed $(HOST_DIR)/share/gettext-tiny/po/boldquot.sed
+ $(INSTALL) -m 0644 -D $(@D)/extra/en@boldquot.header $(HOST_DIR)/share/gettext-tiny/po/en@boldquot.header
+ $(INSTALL) -m 0644 -D $(@D)/extra/en@quot.header $(HOST_DIR)/share/gettext-tiny/po/en@quot.header
+ $(INSTALL) -m 0644 -D $(@D)/extra/insert-header.sin $(HOST_DIR)/share/gettext-tiny/po/insert-header.sin
+ $(INSTALL) -m 0644 -D $(@D)/extra/quot.sed $(HOST_DIR)/share/gettext-tiny/po/quot.sed
+ $(INSTALL) -m 0644 -D $(@D)/extra/remove-potcdate.sin $(HOST_DIR)/share/gettext-tiny/po/remove-potcdate.sin
+ $(INSTALL) -m 0644 -D $(@D)/extra/Rules-quot $(HOST_DIR)/share/gettext-tiny/po/Rules-quot
+ $(INSTALL) -m 0644 -D $(@D)/extra/Makevars.template $(HOST_DIR)/share/gettext-tiny/po/Makevars.template
+
+ $(Q)touch $(HOST_DIR)/share/gettext-tiny/ABOUT-NLS
+endef
+
+# Install simple echo wrapper for gettext tool
+define GETTEXT_TINY_INSTALL_TARGET_CMDS
+ $(INSTALL) -m 0755 -D $(GETTEXT_TINY_PKGDIR)/gettext-wrapper $(TARGET_DIR)/usr/bin/gettext
+endef
+
+ifeq ($(BR2_SYSTEM_ENABLE_NLS),)
+GETTEXTIZE = $(HOST_CONFIGURE_OPTS) \
+ AUTOM4TE=$(HOST_DIR)/bin/autom4te \
+ gettext_datadir=$(HOST_DIR)/usr/share/gettext-tiny \
+ $(HOST_DIR)/bin/gettextize -f
+endif
+
+$(eval $(generic-package))
+$(eval $(host-generic-package))
new file mode 100644
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# Thanks to "Yann E. MORIN" <yann.morin.1998@free.fr>
+# for this gettext replacement.
+
+while [ ${#} -ne 0 ]; do
+ case "${1}" in
+ (-h) printf "no help\n"; return 0;;
+ (-V) printf "0.0.0\n"; return 0;;
+ (-d|--domain) shift 2;;
+ (-d*|--domain=*) shift 1;;
+ (-e|-E|-n) shift 1;;
+ (-s) shift 1;; # Ignore?
+ (-*) printf "invalid option '%s'\n" "${1}" >&2; return 1;;
+ (*) break;;
+ esac
+done
+
+case ${#} in
+ (0) printf "missing arguments\n" >&2; return 1;;
+ (1) printf "%s" "${1}";;
+ (2) shift; printf "%s" "${2}";;
+ (*) printf "too many arguments\n" >&2; return 1;;
+esac
@@ -1,10 +1,7 @@
config BR2_PACKAGE_GETTEXT
bool "gettext"
- depends on BR2_USE_WCHAR
- select BR2_PACKAGE_GETTEXT_GNU
-
-comment "gettext needs a toolchain w/ wchar"
- depends on !BR2_USE_WCHAR
+ select BR2_PACKAGE_GETTEXT_GNU if BR2_SYSTEM_ENABLE_NLS
+ select BR2_PACKAGE_GETTEXT_TINY if !BR2_SYSTEM_ENABLE_NLS
config BR2_PACKAGE_GETTEXT_PROVIDES_LIBINTL
bool