[Buildroot] [PATCHv2 3/6] gettext: optimize build time

Yann E. MORIN yann.morin.1998 at free.fr
Sun Jun 8 22:26:19 UTC 2014


Thomas, All,

On 2014-06-01 22:23 +0200, Thomas Petazzoni spake thusly:
> This commit significantly reduces the build time of host-gettext and
> gettext, by using the capacity of gettext to handle build things in a
> certain subdirectory:
> 
>  - For the host variant of gettext, we only need the gettext-tools,
>    available in the directory of the same name in the gettext sources.
> 
>  - For the target variant of gettext, we only need the gettext library
>    libintl, available in the gettext-runtime directory in the gettext
>    sources.
> 
> So by using appropriate values of GETTEXT_SUBDIR and
> HOST_GETTEXT_SUBDIR, we only build what's necessary. Moreover, by
> manually patching gettext-tools/Makefile.in and
> gettext-runtime/Makefile.in, we make sure to not build and install
> things like examples, documentation and so on.
> 
> In addition to this, these changes avoid the need to autoreconfigure
> the gettext package, which was particularly long.
> 
> Thanks to these changes, the build time of gettext goes from 1 minutes
> and 37 seconds to just 24 seconds, and the build of host-gettext goes
> from 2 minutes and 18 seconds to 1 minute and 13 seconds.
> 
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
> Tested-by: Andrew Ruder <andrew.ruder at elecsyscorp.com>

On my machine, I got these results:

                  Before patch    After patch   Improvement
    gettext:        2min 39s          38s         x 4.18
    host-gettext:   3min 41s       1min 51s       x 1.99

Woot! :-)

Not counting the fact that host-automake, host-autoconf, host-libtool,
and host-m4 are no longer needed!

I got the same set of libraries and utilities in the staging and target.

Tested-by: "Yann E. MORIN" <yann.morin.1998 at free.fr>
Reviewed-by: "Yann E. MORIN" <yann.morin.1998 at free.fr>

Regards,
Yann E. MORIN.

> ---
>  .../gettext-03-option-to-disable-tools.patch       | 42 ----------------------
>  .../gettext/gettext-04-remove-examples-tests.patch | 20 -----------
>  package/gettext/gettext.mk                         | 26 ++++++++------
>  3 files changed, 16 insertions(+), 72 deletions(-)
>  delete mode 100644 package/gettext/gettext-03-option-to-disable-tools.patch
>  delete mode 100644 package/gettext/gettext-04-remove-examples-tests.patch
> 
> diff --git a/package/gettext/gettext-03-option-to-disable-tools.patch b/package/gettext/gettext-03-option-to-disable-tools.patch
> deleted file mode 100644
> index 24a9996..0000000
> --- a/package/gettext/gettext-03-option-to-disable-tools.patch
> +++ /dev/null
> @@ -1,42 +0,0 @@
> -Add a --disable-tools option
> -
> -This patch adds a --disable-tools option that allows to disable the
> -compilation of the gettext tools, which may not be necessary on a
> -small embedded Linux system.
> -
> -Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
> -
> -Index: b/configure.ac
> -===================================================================
> ---- a/configure.ac
> -+++ b/configure.ac
> -@@ -37,6 +37,10 @@
> - 
> - dnl Checks for library functions.
> - 
> -+AC_ARG_ENABLE([tools], [--disable-tools  do not build tools],
> -+		       [enable_tools=$enableval], [enable_tools=yes])
> -+AM_CONDITIONAL([ENABLE_TOOLS], [test "$enable_tools" = "yes"])
> -+
> - AC_CONFIG_SUBDIRS([gettext-runtime gettext-tools])
> - 
> - dnl Ensure that "configure --help" lists all the command line options that
> -Index: b/Makefile.am
> -===================================================================
> ---- a/Makefile.am
> -+++ b/Makefile.am
> -@@ -20,7 +20,13 @@
> - ACLOCAL = build-aux/fixaclocal @ACLOCAL@
> - ACLOCAL_AMFLAGS = -I m4
> - 
> --SUBDIRS = gnulib-local gettext-runtime gettext-tools
> -+if ENABLE_TOOLS
> -+TOOLS_SUBDIR = gettext-tools
> -+else
> -+TOOLS_SUBDIR =
> -+endif
> -+
> -+SUBDIRS = gnulib-local gettext-runtime $(TOOLS_SUBDIR)
> - 
> - EXTRA_DIST = \
> -   version.sh DEPENDENCIES PACKAGING HACKING ChangeLog.0 autogen.sh \
> diff --git a/package/gettext/gettext-04-remove-examples-tests.patch b/package/gettext/gettext-04-remove-examples-tests.patch
> deleted file mode 100644
> index f7d88d9..0000000
> --- a/package/gettext/gettext-04-remove-examples-tests.patch
> +++ /dev/null
> @@ -1,20 +0,0 @@
> -Disable tests and examples
> -
> -This patch disables the gettext-tools tests and examples, which are
> -generally not necessary.
> -
> -Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
> -
> -Index: b/gettext-tools/Makefile.am
> -===================================================================
> ---- a/gettext-tools/Makefile.am
> -+++ b/gettext-tools/Makefile.am
> -@@ -20,7 +20,7 @@
> - ACLOCAL = ../build-aux/fixaclocal @ACLOCAL@
> - ACLOCAL_AMFLAGS = -I m4 -I ../gettext-runtime/m4 -I ../m4 -I gnulib-m4 -I libgrep/gnulib-m4 -I libgettextpo/gnulib-m4
> - 
> --SUBDIRS = doc intl gnulib-lib libgrep src libgettextpo po projects styles misc man m4 tests gnulib-tests examples
> -+SUBDIRS = doc intl gnulib-lib libgrep src libgettextpo po projects styles misc man m4
> - 
> - EXTRA_DIST = misc/DISCLAIM
> - MOSTLYCLEANFILES = core *.stackdump
> diff --git a/package/gettext/gettext.mk b/package/gettext/gettext.mk
> index 52a72db..948ab9d 100644
> --- a/package/gettext/gettext.mk
> +++ b/package/gettext/gettext.mk
> @@ -9,7 +9,6 @@ GETTEXT_SITE = $(BR2_GNU_MIRROR)/gettext
>  GETTEXT_INSTALL_STAGING = YES
>  GETTEXT_LICENSE = GPLv2+
>  GETTEXT_LICENSE_FILES = COPYING
> -GETTEXT_AUTORECONF = YES
>  
>  GETTEXT_DEPENDENCIES = $(if $(BR2_PACKAGE_LIBICONV),libiconv)
>  HOST_GETTEXT_DEPENDENCIES = # we don't want the libiconv dependency
> @@ -23,8 +22,7 @@ GETTEXT_CONF_OPT += \
>  	--disable-native-java \
>  	--disable-csharp \
>  	--disable-relocatable \
> -	--without-emacs \
> -	--disable-tools
> +	--without-emacs
>  
>  HOST_GETTEXT_CONF_OPT = \
>  	--disable-libasprintf \
> @@ -37,6 +35,21 @@ HOST_GETTEXT_CONF_OPT = \
>  	--disable-relocatable \
>  	--without-emacs
>  
> +# For the target version, we only need the runtime, and for the host
> +# version, we only need the tools.
> +GETTEXT_SUBDIR = gettext-runtime
> +HOST_GETTEXT_SUBDIR = gettext-tools
> +
> +# Disable the build of documentation and examples of gettext-tools,
> +# and the build of documentation and tests of gettext-runtime.
> +define HOST_GETTEXT_DISABLE_UNNEEDED
> +	$(SED) '/^SUBDIRS/s/ doc //;/^SUBDIRS/s/examples$$//' $(@D)/gettext-tools/Makefile.in
> +	$(SED) '/^SUBDIRS/s/ doc //;/^SUBDIRS/s/tests$$//' $(@D)/gettext-runtime/Makefile.in
> +endef
> +
> +GETTEXT_POST_PATCH_HOOKS += HOST_GETTEXT_DISABLE_UNNEEDED
> +HOST_GETTEXT_POST_PATCH_HOOKS += HOST_GETTEXT_DISABLE_UNNEEDED
> +
>  # Force build with NLS support, otherwise libintl is not built
>  # This is needed because some packages (eg. libglib2) requires
>  # locales, but do not properly depend on BR2_ENABLE_LOCALE, and
> @@ -46,13 +59,6 @@ ifeq ($(BR2_ENABLE_LOCALE),)
>  GETTEXT_CONF_OPT += --enable-nls
>  endif
>  
> -# When static libs are preferred the .so files aren't created
> -ifeq ($(BR2_PREFER_STATIC_LIB),)
> -define GETTEXT_INSTALL_TARGET_CMDS
> -	cp -dpf $(STAGING_DIR)/usr/lib/libintl*.so* $(TARGET_DIR)/usr/lib/
> -endef
> -endif
> -
>  # Disable interactive confirmation in host gettextize for package fixups
>  define HOST_GETTEXT_GETTEXTIZE_CONFIRMATION
>  	$(SED) '/read dummy/d' $(HOST_DIR)/usr/bin/gettextize
> -- 
> 1.9.3
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'


More information about the buildroot mailing list