don't use Bash-specific ${parameter/pattern/string} expansion
authorPatrick 'P. J.' McDermott <pj@pehjota.net>
Wed, 11 Sep 2013 21:53:08 +0000 (17:53 -0400)
committerMike Frysinger <vapier@gentoo.org>
Sun, 29 Sep 2013 03:03:09 +0000 (23:03 -0400)
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.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
ChangeLog
sysdeps/unix/Makefile
sysdeps/unix/make-syscalls.sh

index 19152d6..3594b32 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2013-09-11  P. J. McDermott  <pj@pehjota.net>
+
+       * sysdeps/unix/Makefile ($(objpfx)stub-syscalls.c): Don't use
+       ${Bash-specific parameter/pattern/string} parameter expansion.
+       * sysdeps/unix/make-syscalls.sh: Likewise.
+
 2013-09-27  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
 
        * sysdeps/sh/stackguard-macros.h: New file.
index 375561f..2b607a0 100644 (file)
@@ -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);" \
             ;; \
index f04f2ab..6eba62c 100644 (file)
@@ -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\