[v3,bpf-next,01/14] samples: bpf: makefile: fix HDR_PROBE "echo"

Message ID 20190916105433.11404-2-ivan.khoronzhuk@linaro.org
State Superseded
Headers show
Series
  • samples: bpf: improve/fix cross-compilation
Related show

Commit Message

Ivan Khoronzhuk Sept. 16, 2019, 10:54 a.m.
echo should be replaced with echo -e to handle '\n' correctly, but
instead, replace it with printf as some systems can't handle echo -e.

Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>

---
 samples/bpf/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

-- 
2.17.1

Comments

Andreas Schwab Sept. 16, 2019, 9:35 p.m. | #1
On Sep 16 2019, Andrii Nakryiko <andrii.nakryiko@gmail.com> wrote:

> On Mon, Sep 16, 2019 at 3:59 AM Ivan Khoronzhuk

> <ivan.khoronzhuk@linaro.org> wrote:

>>

>> echo should be replaced with echo -e to handle '\n' correctly, but

>> instead, replace it with printf as some systems can't handle echo -e.

>>

>> Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>

>> ---

>>  samples/bpf/Makefile | 2 +-

>>  1 file changed, 1 insertion(+), 1 deletion(-)

>>

>> diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile

>> index 1d9be26b4edd..f50ca852c2a8 100644

>> --- a/samples/bpf/Makefile

>> +++ b/samples/bpf/Makefile

>> @@ -201,7 +201,7 @@ endif

>>

>>  # Don't evaluate probes and warnings if we need to run make recursively

>>  ifneq ($(src),)

>> -HDR_PROBE := $(shell echo "\#include <linux/types.h>\n struct list_head { int a; }; int main() { return 0; }" | \

>> +HDR_PROBE := $(shell printf "\#include <linux/types.h>\n struct list_head { int a; }; int main() { return 0; }" | \

>

> printf change is fine, but I'm confused about \# at the beginning of

> the string.


From the NEWS of make 4.3:

* WARNING: Backward-incompatibility!
  Number signs (#) appearing inside a macro reference or function invocation
  no longer introduce comments and should not be escaped with backslashes:
  thus a call such as:
    foo := $(shell echo '#')
  is legal.  Previously the number sign needed to be escaped, for example:
    foo := $(shell echo '\#')
  Now this latter will resolve to "\#".  If you want to write makefiles
  portable to both versions, assign the number sign to a variable:
    H := \#
    foo := $(shell echo '$H')
  This was claimed to be fixed in 3.81, but wasn't, for some reason.
  To detect this change search for 'nocomment' in the .FEATURES variable.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510  2552 DF73 E780 A9DA AEC1
"And now for something completely different."
Andrii Nakryiko Sept. 16, 2019, 10:01 p.m. | #2
On Mon, Sep 16, 2019 at 2:35 PM Andreas Schwab <schwab@linux-m68k.org> wrote:
>

> On Sep 16 2019, Andrii Nakryiko <andrii.nakryiko@gmail.com> wrote:

>

> > On Mon, Sep 16, 2019 at 3:59 AM Ivan Khoronzhuk

> > <ivan.khoronzhuk@linaro.org> wrote:

> >>

> >> echo should be replaced with echo -e to handle '\n' correctly, but

> >> instead, replace it with printf as some systems can't handle echo -e.

> >>

> >> Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>

> >> ---

> >>  samples/bpf/Makefile | 2 +-

> >>  1 file changed, 1 insertion(+), 1 deletion(-)

> >>

> >> diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile

> >> index 1d9be26b4edd..f50ca852c2a8 100644

> >> --- a/samples/bpf/Makefile

> >> +++ b/samples/bpf/Makefile

> >> @@ -201,7 +201,7 @@ endif

> >>

> >>  # Don't evaluate probes and warnings if we need to run make recursively

> >>  ifneq ($(src),)

> >> -HDR_PROBE := $(shell echo "\#include <linux/types.h>\n struct list_head { int a; }; int main() { return 0; }" | \

> >> +HDR_PROBE := $(shell printf "\#include <linux/types.h>\n struct list_head { int a; }; int main() { return 0; }" | \

> >

> > printf change is fine, but I'm confused about \# at the beginning of

> > the string.

>

> From the NEWS of make 4.3:

>

> * WARNING: Backward-incompatibility!

>   Number signs (#) appearing inside a macro reference or function invocation

>   no longer introduce comments and should not be escaped with backslashes:

>   thus a call such as:

>     foo := $(shell echo '#')

>   is legal.  Previously the number sign needed to be escaped, for example:

>     foo := $(shell echo '\#')

>   Now this latter will resolve to "\#".  If you want to write makefiles

>   portable to both versions, assign the number sign to a variable:

>     H := \#

>     foo := $(shell echo '$H')

>   This was claimed to be fixed in 3.81, but wasn't, for some reason.

>   To detect this change search for 'nocomment' in the .FEATURES variable.

>

> Andreas.


Oh, subtle... Thanks for explaining!

>

> --

> Andreas Schwab, schwab@linux-m68k.org

> GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510  2552 DF73 E780 A9DA AEC1

> "And now for something completely different."

Patch

diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile
index 1d9be26b4edd..f50ca852c2a8 100644
--- a/samples/bpf/Makefile
+++ b/samples/bpf/Makefile
@@ -201,7 +201,7 @@  endif
 
 # Don't evaluate probes and warnings if we need to run make recursively
 ifneq ($(src),)
-HDR_PROBE := $(shell echo "\#include <linux/types.h>\n struct list_head { int a; }; int main() { return 0; }" | \
+HDR_PROBE := $(shell printf "\#include <linux/types.h>\n struct list_head { int a; }; int main() { return 0; }" | \
 	$(HOSTCC) $(KBUILD_HOSTCFLAGS) -x c - -o /dev/null 2>/dev/null && \
 	echo okay)