2014-06-09 05:04:18

by Masahiro Yamada

[permalink] [raw]
Subject: [Question] Why CONFIG_SHELL

Hi experts.

I think all the macros with CONFIG_ prefix are supposed to be
defined in Kconfig.
But I've been long wondering why there exists one exception:
CONFIG_SHELL.

Is there any historical, or special reason?

Is it good to rename it to KBUILD_SHELL or something else?


Best Regards
Masahiro Yamada


2014-06-09 07:49:50

by Sam Ravnborg

[permalink] [raw]
Subject: Re: [Question] Why CONFIG_SHELL

On Mon, Jun 09, 2014 at 02:04:12PM +0900, Masahiro Yamada wrote:
> Hi experts.
>
> I think all the macros with CONFIG_ prefix are supposed to be
> defined in Kconfig.
> But I've been long wondering why there exists one exception:
> CONFIG_SHELL.
>
> Is there any historical, or special reason?
It has been like this as far back as I remmeber.
I assume that one has planned to set the shell in Kconfig back then.

> Is it good to rename it to KBUILD_SHELL or something else?
Please do so, to free up the CONFIG_ namespace.

I the end Michal will decide if he want this cleanup.
On the top of my head I see no problems in doing this,
but maybe there are some out-of-tree modules or similar
we need to consider...

Sam

2014-06-09 10:26:02

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [Question] Why CONFIG_SHELL

Hi Sam,


On Mon, 9 Jun 2014 09:49:35 +0200
Sam Ravnborg <[email protected]> wrote:

> On Mon, Jun 09, 2014 at 02:04:12PM +0900, Masahiro Yamada wrote:
> > Hi experts.
> >
> > I think all the macros with CONFIG_ prefix are supposed to be
> > defined in Kconfig.
> > But I've been long wondering why there exists one exception:
> > CONFIG_SHELL.
> >
> > Is there any historical, or special reason?
> It has been like this as far back as I remmeber.
> I assume that one has planned to set the shell in Kconfig back then.
>
> > Is it good to rename it to KBUILD_SHELL or something else?
> Please do so, to free up the CONFIG_ namespace.
>
> I the end Michal will decide if he want this cleanup.
> On the top of my head I see no problems in doing this,
> but maybe there are some out-of-tree modules or similar
> we need to consider...

Thanks for your commet.

Another question popped up.


CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
else if [ -x /bin/bash ]; then echo /bin/bash; \
else echo sh; fi ; fi)


If bash is not found on the system, CONFIG_SHELL falls back to "sh".

Does it mean, all shell scripts are written as sh-compatible ?

I guess bash is installed on the almost all system.
It is difficult to detect the problem even if some scripts don't work
on sh.


If we allow bash-specific syntax in shell scripts,
we should stop the build immedately if bash is missing,
like this?

KBUILD_SHELL := /bin/bash
if [ ! -x "$$BASH" ]; then
$(error $KBUILD_SHELL not found)
fi




Best Regards
Masahiro Yamada

2014-06-09 11:40:37

by Sam Ravnborg

[permalink] [raw]
Subject: Re: [Question] Why CONFIG_SHELL

On Mon, Jun 09, 2014 at 07:25:48PM +0900, Masahiro Yamada wrote:
> Hi Sam,
>
>
> On Mon, 9 Jun 2014 09:49:35 +0200
> Sam Ravnborg <[email protected]> wrote:
>
> > On Mon, Jun 09, 2014 at 02:04:12PM +0900, Masahiro Yamada wrote:
> > > Hi experts.
> > >
> > > I think all the macros with CONFIG_ prefix are supposed to be
> > > defined in Kconfig.
> > > But I've been long wondering why there exists one exception:
> > > CONFIG_SHELL.
> > >
> > > Is there any historical, or special reason?
> > It has been like this as far back as I remmeber.
> > I assume that one has planned to set the shell in Kconfig back then.
> >
> > > Is it good to rename it to KBUILD_SHELL or something else?
> > Please do so, to free up the CONFIG_ namespace.
> >
> > I the end Michal will decide if he want this cleanup.
> > On the top of my head I see no problems in doing this,
> > but maybe there are some out-of-tree modules or similar
> > we need to consider...
>
> Thanks for your commet.
>
> Another question popped up.
>
>
> CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
> else if [ -x /bin/bash ]; then echo /bin/bash; \
> else echo sh; fi ; fi)
>
>
> If bash is not found on the system, CONFIG_SHELL falls back to "sh".
>
> Does it mean, all shell scripts are written as sh-compatible ?
Not all - but most.
All shell scripts that are invoked with $(CONFIG_SHELL) must be sh-compatible,
or in practice dash compatible as well as bash compatible.
The preference is bash as expressed with the above code.

Sam