[OE-core] [PATCH] autogen: fix autoopts script generation to handle shebang

Belal, Awais Awais_Belal at mentor.com
Wed May 17 08:50:07 UTC 2017


> You should not patch out the use of POSIX_SHELL after the fact. Find
> where it is resolved/expanded in the source code in the first place, and
> patch it there. Also, please check why setting POSIX_SHELL in the recipe
> no longer has any effect - there is a patch called
> 0001-config-libopts.m4-regenerate-it-from-config-libopts.patch which
> should do the trick, but does not.

I guess I see the problem now. The mechanism in libopts.m4 won't allow setting POSIX_SHELL to anything other than an actual file because it does

test -x ${POSIX_SHELL} && break

Now the recipe sets POSIX_SHELL to "/usr/bin/env sh" which would resolve to the actual shell binary when used but itself it's just a string so the condition (test -x) fails because POSIX_SHELL at that particular moment is just a string and not an executable. Moving ahead the script does

POSIX_SHELL=`which bash`

which then resolves/expands to <build-dir>/tmp/hosttools/bash and obviously breaks what we're trying to achieve with "/usr/bin/env sh". I believe the first check in libopts.m4 for POSIX_SHELL should be changed to

test -n ${POSIX_SHELL} && break

So the user can set it to whatever he desires obviously he'll need to make sure that this would work as a proper shell. Thoughts?

BR,
Awais

________________________________________
From: Alexander Kanavin <alexander.kanavin at linux.intel.com>
Sent: Tuesday, May 16, 2017 4:32 PM
To: Belal, Awais; openembedded-core at lists.openembedded.org
Subject: Re: [OE-core] [PATCH] autogen: fix autoopts script generation to handle shebang

On 05/16/2017 08:36 AM, Belal, Awais wrote:
>> The standard way to fix too long #! lines in oe is to patch
>> upstream code to use #!/usr/bin/env something (where something is
>> just the binary name).
>
>> Why not simply replace ${POSIX_SHELL} with /bin/sh? Where and how
>> is it set?
>
> POSIX_SHELL is being set to "/usr/bin/env sh" already through the
> recipe but it gets resolved/expanded to
> <build-dir>/hosttools/<shell-bin> during the configuration process so
> it's not usable for shebang in deep directory hierarchy scenarios. I
> guess a better way would be simply to use the same technique that
> we're using for perl. So for shell we'll have
>
> #!/usr/bin/env sh
>
> in mk-tpl-config.sh directly. I'll submit the change as v2 if you
> think this is okay.

You should not patch out the use of POSIX_SHELL after the fact. Find
where it is resolved/expanded in the source code in the first place, and
patch it there. Also, please check why setting POSIX_SHELL in the recipe
no longer has any effect - there is a patch called
0001-config-libopts.m4-regenerate-it-from-config-libopts.patch which
should do the trick, but does not.

Alex




More information about the Openembedded-core mailing list