Currently, in the entire klibc bash is only used to identify the path of the perl binary. It is doing so using the bash built-in 'type' function, which is POSIX compliant according to [0], but the option -c is not. By using `command -v` instead, we achieve the same result, in a POSIX compliant manor [1], potentially removing the unneeded bash dependency. 0 https://www.unix.com/man-page/posix/1p/type/ 1 https://www.unix.com/man-page/posix/1p/command/ Signed-off-by: Olliver Schinagl <oliver at schinagl.nl> --- klcc/Kbuild | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/klcc/Kbuild b/klcc/Kbuild index eae753ff..0e625802 100644 --- a/klcc/Kbuild +++ b/klcc/Kbuild @@ -35,7 +35,7 @@ targets := $(KLIBCCROSS)klcc quiet_cmd_klcc = GEN $@ cmd_klcc = $(PERL) $< $(srctree)/$(src)/klcc.in \ $(obj)/$(KLIBCCROSS)klibc.config \ - $(shell bash -c 'type -p $(PERL)') \ + $(shell command -v $(PERL)) \ > $@ || ( rm -f $@ ; exit 1 ) && \ chmod a+x $@ $(obj)/$(KLIBCCROSS)klcc: $(src)/makeklcc.pl $(src)/klcc.in \ -- 2.27.0
On Sat, 2020-07-25 at 10:59 +0200, Olliver Schinagl wrote:> Currently, in the entire klibc bash is only used to identify the path of > the perl binary. It is doing so using the bash built-in 'type' function, > which is POSIX compliant according to [0], but the option -c is not. > > By using `command -v` instead, we achieve the same result, in a POSIX > compliant manor [1], potentially removing the unneeded bash dependency. > > 0 https://www.unix.com/man-page/posix/1p/type/ > 1 https://www.unix.com/man-page/posix/1p/command/ > > Signed-off-by: Olliver Schinagl <oliver at schinagl.nl>Applied, thanks. Ben.> --- > klcc/Kbuild | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/klcc/Kbuild b/klcc/Kbuild > index eae753ff..0e625802 100644 > --- a/klcc/Kbuild > +++ b/klcc/Kbuild > @@ -35,7 +35,7 @@ targets := $(KLIBCCROSS)klcc > quiet_cmd_klcc = GEN $@ > cmd_klcc = $(PERL) $< $(srctree)/$(src)/klcc.in \ > $(obj)/$(KLIBCCROSS)klibc.config \ > - $(shell bash -c 'type -p $(PERL)') \ > + $(shell command -v $(PERL)) \ > > $@ || ( rm -f $@ ; exit 1 ) && \ > chmod a+x $@ > $(obj)/$(KLIBCCROSS)klcc: $(src)/makeklcc.pl $(src)/klcc.in \-- Ben Hutchings Theory and practice are closer in theory than in practice - John Levine -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: This is a digitally signed message part URL: <https://lists.zytor.com/archives/klibc/attachments/20200726/529ec79f/attachment.sig>
Ben Hutchings <ben at decadent.org.uk> wrote:> On Sat, 2020-07-25 at 10:59 +0200, Olliver Schinagl wrote: >> Currently, in the entire klibc bash is only used to identify the path of >> the perl binary. It is doing so using the bash built-in 'type' function, >> which is POSIX compliant according to [0], but the option -c is not. >> >> By using `command -v` instead, we achieve the same result, in a POSIX >> compliant manor [1], potentially removing the unneeded bash dependency. >> >> 0 https://www.unix.com/man-page/posix/1p/type/ >> 1 https://www.unix.com/man-page/posix/1p/command/ >> >> Signed-off-by: Olliver Schinagl <oliver at schinagl.nl> > > Applied, thanks. > > Ben. > >> --- >> klcc/Kbuild | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/klcc/Kbuild b/klcc/Kbuild >> index eae753ff..0e625802 100644 >> --- a/klcc/Kbuild >> +++ b/klcc/Kbuild >> @@ -35,7 +35,7 @@ targets := $(KLIBCCROSS)klcc >> quiet_cmd_klcc = GEN $@ >> cmd_klcc = $(PERL) $< $(srctree)/$(src)/klcc.in \ >> $(obj)/$(KLIBCCROSS)klibc.config \ >> - $(shell bash -c 'type -p $(PERL)') \ >> + $(shell command -v $(PERL)) \ >> > $@ || ( rm -f $@ ; exit 1 ) && \ >> chmod a+x $@ >> $(obj)/$(KLIBCCROSS)klcc: $(src)/makeklcc.pl $(src)/klcc.in \This doesn't work with older versions of make. ?make 4.2.1 seems common now and does not support $(shell command). $ cat Makefile $(info take1: $(shell command -v ls)) $(info take2: $(shell bash -c 'type -p ls')) all: @true $ make-3.81/make make: command: Command not found take1: take2: /bin/ls $ make-4.2.1/make make: command: Command not found take1: take2: /bin/ls $ make-4.3/make take1: /bin/ls take2: /bin/ls https://git.savannah.gnu.org/cgit/make.git/commit/?id=1af314465e5dfe3e8baa839a32a72e83c04f26ef looks to be required and is in make 4.2.90+. The kernel went with https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=913ab9780fc021298949cc5514d6255a008e69f9 So we might want: $(shell command -v $(PERL) 2> /dev/null)
Reasonably Related Threads
- [PATCH] klcc: Remove the need for bash
- [klibc:master] klcc: Remove the need for bash
- [PATCH] klcc: Remove the need for bash
- [klibc:master] klcc: Enable stripping even if CONFIG_DEBUG_INFO is enabled
- [klibc:riscv64-enable-relax] Kbuild, klcc: Support multiple objects in KLIBCCRTSHARED