package/gettext-tiny: new package

Add gettext-tiny package from the sabotage-linux project:

    gettext-tiny provides lightweight replacements for tools typically used
    from the GNU gettext suite, which is incredibly bloated and takes a lot
    of time to build (in the order of an hour on slow devices). the most
    notable component is msgfmt which is used to create binary translation
    files in the .mo format out of textual input files in .po format. this
    is the most important tool for building software from source, because it
    is used from the build processes of many software packages.

Some files were taken from gettext-gnu (some po/* files and gettextize
script) to make possible perform gettextizing of packages.

The main purpose of gettext-tiny is to replace gettext for the "host" if
NLS support is not needed. There is no option to manually select
gettext-gnu or gettext-tiny, it is done automatically by virtual gettext
package. For the target gettext-tiny only installs gettext tool echo-wrapper
which might be called from shell scripts (i.e. ecryptfs-utils).

Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
Vadim Kochan 2019-03-28 01:08:31 +02:00 committed by Thomas Petazzoni
parent ea1e7ee606
commit 5367a1b253
9 changed files with 221 additions and 6 deletions

View File

@ -2205,6 +2205,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/

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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))

View File

@ -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

View File

@ -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