build: image: use printf for ModelNameLimit16
authorHuangbin Zhan <zhanhb88@gmail.com>
Tue, 29 Mar 2022 16:15:29 +0000 (00:15 +0800)
committerChristian Marangi <ansuelsmth@gmail.com>
Thu, 13 Oct 2022 13:57:35 +0000 (15:57 +0200)
Fix syntax error on macos, for substr is undefined results according to
the POSIX standard.

From expr on macos:
 According to the POSIX standard, the use of string arguments length,
 substr, index, or match produces undefined results.  In this version of
 expr, these arguments are treated just as their respective string values.

By a simple test Makefile:

define ModelNameLimit16
$(shell expr substr "$(word 2, $(subst _, ,$(1)))" 1 16)
endef

define ModelNameLimit16_2
$(shell printf %.16s "$(word 2, $(subst _, ,$(1)))")
endef

hello:
echo $(call ModelNameLimit16, technicolor_tg582n-telecom-italia)
echo $(call ModelNameLimit16_2, technicolor_tg582n-telecom-italia)

The same output is produced.

echo tg582n-telecom-i
tg582n-telecom-i
echo tg582n-telecom-i
tg582n-telecom-i

Signed-off-by: Huangbin Zhan <zhanhb88@gmail.com>
[ wrap commit description to 80 columns and improve it ]
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
include/image-commands.mk

index 6fe2890a1af51c9459acccf0c95843329fa27556..6b4bc4945cbe2a4b846dc5b5503107603c10cd00 100644 (file)
@@ -4,7 +4,7 @@ IMAGE_KERNEL = $(word 1,$^)
 IMAGE_ROOTFS = $(word 2,$^)
 
 define ModelNameLimit16
-$(shell expr substr "$(word 2, $(subst _, ,$(1)))" 1 16)
+$(shell printf %.16s "$(word 2, $(subst _, ,$(1)))")
 endef
 
 define rootfs_align