This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH v2] Don't use Bash-specific ${parameter/pattern/string} expansion
- From: "Patrick 'P. J.' McDermott" <pj at pehjota dot net>
- To: libc-alpha at sourceware dot org
- Date: Wed, 11 Sep 2013 17:53:08 -0400
- Subject: [PATCH v2] Don't use Bash-specific ${parameter/pattern/string} expansion
- Authentication-results: sourceware.org; auth=none
- References: <522CDBAD dot 8000104 at pehjota dot net>
sysdeps/unix/make-syscalls.sh and sysdeps/unix/Makefile use GNU Bash's
${parameter/pattern/string} parameter expansion. Non-Bash shells (e.g.
dash or BusyBox ash when built with CONFIG_ASH_BASH_COMPAT disabled)
don't support this expansion syntax. So glibc will fail to build when
$(SHELL) expands to a path that isn't provided by Bash.
An example build failure:
for dir in [...]; do \
test -f $dir/syscalls.list && \
{ sysdirs='[...]' \
asm_CPP='gcc -c -I[...] -D_LIBC_REENTRANT -include include/libc-symbols.h -DASSEMBLER -g -Wa,--noexecstack -E -x assembler-with-cpp' \
/bin/sh sysdeps/unix/make-syscalls.sh $dir || exit 1; }; \
test $dir = sysdeps/unix && break; \
done > [build-dir]/sysd-syscallsT
sysdeps/unix/make-syscalls.sh: line 273: syntax error: bad substitution
This patch simply replaces the three instances of the Bash-only syntax
in these files with an echo and sed command substitution.
2013-09-11 P. J. McDermott <pj@pehjota.net>
* sysdeps/unix/Makefile: Don't use Bash-specific
${parameter/pattern/string} parameter expansion.
* sysdeps/unix/make-syscalls.sh: Likewise.
Changes in v2:
* Use quotes around "$ver" and "$vdso_symver" expansions.
---
sysdeps/unix/Makefile | 6 ++++--
sysdeps/unix/make-syscalls.sh | 2 +-
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/sysdeps/unix/Makefile b/sysdeps/unix/Makefile
index 375561f..2b607a0 100644
--- a/sysdeps/unix/Makefile
+++ b/sysdeps/unix/Makefile
@@ -51,12 +51,14 @@ $(objpfx)stub-syscalls.c: $(common-objpfx)sysd-syscalls \
for call in $(unix-stub-syscalls); do \
case $$call in \
*@@*) \
- ver=$${call##*@}; call=$${call%%@*}; ver=$${ver//./_}; \
+ ver=$${call##*@}; call=$${call%%@*}; \
+ ver=`echo "$ver" | sed 's/\./_/g'`; \
echo "strong_alias (_no_syscall, __$${call}_$${ver})"; \
echo "versioned_symbol (libc, __$${call}_$${ver}, $$call, $$ver);"\
;; \
*@*) \
- ver=$${call##*@}; call=$${call%%@*}; ver=$${ver//./_}; \
+ ver=$${call##*@}; call=$${call%%@*}; \
+ ver=`echo "$ver" | sed 's/\./_/g'`; \
echo "strong_alias (_no_syscall, __$${call}_$${ver})"; \
echo "compat_symbol (libc, __$${call}_$${ver}, $$call, $$ver);" \
;; \
diff --git a/sysdeps/unix/make-syscalls.sh b/sysdeps/unix/make-syscalls.sh
index f04f2ab..6eba62c 100644
--- a/sysdeps/unix/make-syscalls.sh
+++ b/sysdeps/unix/make-syscalls.sh
@@ -275,7 +275,7 @@ while read file srcfile caller syscall args strong weak; do
# name in the vDSO and KERNEL_X.Y is its symbol version.
vdso_symbol="${vdso_syscall%@*}"
vdso_symver="${vdso_syscall#*@}"
- vdso_symver="${vdso_symver//./_}"
+ vdso_symver=`echo "$vdso_symver" | sed 's/\./_/g'`
echo "\
\$(foreach p,\$(sysd-rules-targets),\$(objpfx)\$(patsubst %,\$p,$file).os): \\
\$(..)sysdeps/unix/make-syscalls.sh\
--
Patrick "P. J." McDermott
http://www.pehjota.net/
Lead Developer, ProteanOS
http://www.proteanos.com/