[Buildroot] [PATCH v3 1/1] toolchain: handle toolchains with multiple ld*.so.* files

Yann E. MORIN yann.morin.1998 at free.fr
Mon Aug 30 08:45:14 UTC 2021


Jonah, All,

On 2021-08-29 20:25 -0400, Jonah Petri spake thusly:
> On 8/29/21 1:21 PM, Arnout Vandecappelle wrote:
> >On 26/08/2021 21:34, Jonah Petri wrote:
> >>  	fi ; \
> >>-	if [ ! -e $(STAGING_DIR)/lib/ld*.so.* ]; then \
> >>-		if [ -e $${ARCH_SYSROOT_DIR}/lib/ld*.so.* ]; then \
> >>-			cp -a $${ARCH_SYSROOT_DIR}/lib/ld*.so.* $(STAGING_DIR)/lib/ ; \
> >>-		fi ; \
> >>+	if [[ ! $$(find $(STAGING_DIR)/lib -name 'ld*.so.*' -print -quit) ]]; then \
> >  I was going to say: don't use [[, it's a bashism. However, we already use it in
> >helpers.mk, so I guess it's OK. It's up to whoever has a problem with it to get
> >rid of it :-)

He! Don't say such things when I'm around! ;-)

> >  Therefore, applied to next, thanks.
> 
> Thanks! I found it surprisingly hard to find a pleasing shell answer to
> "does this command succeed *and* output anything to stdout?" without
> invoking bashisms.

This is a bit less concise (two lines instead of one), but it's still
pretty easy, e.g. with a script that does not use 'set -e':

    output="$( some-command )"
    if [ ${?} -ne 0 -o -z "${output}" ]; then
        echo "Failed or output nothing"
    fi

If the script is using 'set -e', or one needs to differentiate the
reason for failure, then it is a bit more involved, but still pretty
easy and common:

    output="$( some-command )" || ret="${?}"
    if [ ${ret:-0} -ne 0 -o -z "${output}" ]; then
        echo "Exited with ${ret:-0}, or output nothing"
    fi

In our case, for Buildroot, we'd need to adapt the first solution:

    [...] ; \
    output="$$( some-command )"; \
    if [ $${?} -ne 0 -o -z "$${output}" ]; then \
        echo "Failed or output nothing"; \
    fi; \
    [...]

> I too was wary of using [[ before I saw the same usage
> lower in the file,

You caught me red-handed... I added that back in 4a5f878946c37... ;-]

> and noted that bash is a prerequisite for buildroot in
> general.

And even then, I like that we avoid bashisms when possible. But in this
case, well, it's acceptable and applied, so I won't whine (much). ;-)

> Hopefully some future dev won't curse me too much ☺ Thanks for
> applying!

Well, TIL that one can do [[ ! $(cmd) ]] to test output and return code
in one line, so... Thanks! :-)

Regards,
Yann E. MORIN.

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


More information about the buildroot mailing list