Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v3] package/coreutils: allow building individual binaries
Date: Thu, 20 Jun 2019 21:26:58 +0200	[thread overview]
Message-ID: <20190620212658.2d528ba9@windsurf> (raw)
In-Reply-To: <20190607021534.4657-1-mmayer@broadcom.com>

Hello Markus,

On Thu,  6 Jun 2019 19:15:34 -0700
Markus Mayer <mmayer@broadcom.com> wrote:

> We add configuration option BR2_PACKAGE_COREUTILS_INDIVIDUAL_BINARIES
> so that coreutils can be built and installed as individual binaries.
> It can be used if the target file system doesn't support symlinks or
> symlinks are undesirable.
> 
> The approach is modelled after Busybox's similarly named configuration
> option.
> 
> Signed-off-by: Markus Mayer <mmayer@broadcom.com>

I have applied your patch, but after some changes.

First I did some preparation commits:

  https://git.buildroot.org/buildroot/commit/?id=14644a66b60a4115f20f101f08966414852e446c
  https://git.buildroot.org/buildroot/commit/?id=840cda91152dd8f702de8e77af34cddfbe4c98c8

And then some changes (see below).

> diff --git a/package/coreutils/Config.in b/package/coreutils/Config.in
> index 11a6019e820f..a0a84c220a48 100644
> --- a/package/coreutils/Config.in
> +++ b/package/coreutils/Config.in
> @@ -19,3 +19,21 @@ comment "coreutils needs a toolchain w/ wchar"
>  	depends on BR2_USE_MMU
>  	depends on !BR2_USE_WCHAR
>  	depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS

This comment should have been at the end of the Config.in file. Indeed
having the comment between the main option and the sub-options prevent
the sub-options from being indented "under" the main option in
"menuconfig".

> -COREUTILS_CONF_OPTS = --disable-rpath --enable-single-binary=symlinks \
> +COREUTILS_CONF_OPTS = --disable-rpath \
>  	$(if $(BR2_TOOLCHAIN_USES_MUSL),--with-included-regex)
> +
> +ifeq ($(BR2_PACKAGE_COREUTILS_INDIVIDUAL_BINARIES),)
> +COREUTILS_CONF_OPTS += --enable-single-binary=symlinks
> +endif

I changed this to:

+ifeq ($(BR2_PACKAGE_COREUTILS_INDIVIDUAL_BINARIES),y)
+COREUTILS_CONF_OPTS += --disable-single-binary
+else
+COREUTILS_CONF_OPTS += --enable-single-binary=symlinks
+endif

To be fully explicit.

>  COREUTILS_CONF_ENV = ac_cv_c_restrict=no \
>  	ac_cv_func_chown_works=yes \
>  	ac_cv_func_euidaccess=no \
> @@ -59,6 +64,13 @@ COREUTILS_BIN_PROGS = base64 cat chgrp chmod chown cp date dd df dir echo false
>  	kill link ln ls mkdir mknod mktemp mv nice printenv pwd rm rmdir \
>  	vdir sleep stty sync touch true uname join
>  
> +# This is where our '[' symlink will point to.
> +ifeq ($(BR2_PACKAGE_COREUTILS_INDIVIDUAL_BINARIES),)
> +TEST_BINARY = coreutils
> +else
> +TEST_BINARY = test
> +endif

The namespace of variables in Buildroot is global, so using the name
TEST_BINARY is a *very* bad idea. It should have been
COREUTILS_TEST_BINARY. But in fact, I did this differently, and simply
added two definitions of COREUTILS_CREATE_TEST_SYMLINK.

>  ifeq ($(BR2_PACKAGE_ACL),y)
>  COREUTILS_DEPENDENCIES += acl
>  else
> @@ -96,13 +108,24 @@ COREUTILS_DEPENDENCIES += openssl
>  endif
>  
>  ifeq ($(BR2_ROOTFS_MERGED_USR),)
> +# We want to move a few binaries from /usr/bin to /bin. In the case
> of +# coreutils being built as multi-call binary, we do so by
> re-creating the +# corresponding symlinks. If coreutils is built with
> individual binaries, we +# actually move the binaries.
> +ifeq ($(BR2_PACKAGE_COREUTILS_INDIVIDUAL_BINARIES),)

I swapped the two cases to have the INDIVIDUAL_BINARIES=y case first
(so that all conditions use INDIVIDUAL_BINARIES=y).

>  define COREUTILS_CLEANUP_BIN
> -	# some things go in /bin rather than /usr/bin
>  	$(foreach f,$(COREUTILS_BIN_PROGS), \
>  		rm -f $(TARGET_DIR)/usr/bin/$(f) && \
>  		ln -sf ../usr/bin/coreutils $(TARGET_DIR)/bin/$(f)
>  	)
>  endef
> +else
> +define COREUTILS_CLEANUP_BIN
> +	$(foreach f,$(COREUTILS_BIN_PROGS), \
> +                mv $(TARGET_DIR)/usr/bin/$(f) $(TARGET_DIR)/bin
> +        )
> +endef
> +endif
>  COREUTILS_POST_INSTALL_TARGET_HOOKS += COREUTILS_CLEANUP_BIN
>  endif
>  
> @@ -110,14 +133,24 @@ ifeq ($(BR2_STATIC_LIBS),y)
>  COREUTILS_CONF_OPTS += --enable-no-install-program=stdbuf
>  endif
>  
> -define COREUTILS_CLEANUP
> +define COREUTILS_TEST_SYMLINK
>  	# link for archaic shells
> -	ln -fs coreutils $(TARGET_DIR)/usr/bin/[
> -	# gnu thinks chroot is in bin, debian thinks it's in sbin
> +	ln -fs $(TEST_BINARY) $(TARGET_DIR)/usr/bin/[

And I said above, I did two separate definitions of
COREUTILS_CREATE_TEST_SYMLINK instead.

See the final commit at
https://git.buildroot.org/buildroot/commit/?id=7989818466f8a963c4b6cc8b5014b04703535d3a.

Thanks a lot!

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

  reply	other threads:[~2019-06-20 19:26 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-07  2:15 [Buildroot] [PATCH v3] package/coreutils: allow building individual binaries Markus Mayer
2019-06-20 19:26 ` Thomas Petazzoni [this message]
2019-06-20 19:40   ` Markus Mayer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190620212658.2d528ba9@windsurf \
    --to=thomas.petazzoni@bootlin.com \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox