aboutsummaryrefslogtreecommitdiffstats
path: root/make-dist
diff options
context:
space:
mode:
authorPaul Eggert2015-10-10 18:03:49 -0700
committerPaul Eggert2015-10-10 18:11:27 -0700
commit29dfca23553b9995a8ec3b50090a652a6a0ecb01 (patch)
treea5d968df7cadd8259e029d89e6150dfe6762cb96 /make-dist
parentec0d4d24fd11b5040de9f7657b486c3b1e743071 (diff)
downloademacs-29dfca23553b9995a8ec3b50090a652a6a0ecb01.tar.gz
emacs-29dfca23553b9995a8ec3b50090a652a6a0ecb01.zip
Use ‘echo’ safely with ‘\’ or leading ‘-’
POSIX says that ‘echo FOO’ produces implementation-defined output if FOO contains leading ‘-’, or ‘\’ anywhere, so don’t assume GNU behavior in that case. * Makefile.in (removenullpaths): Remove. (epaths-force): Rewrite to avoid the need for ‘echo’. (install-etc): Be clearer about escaping the shell metacharacters ‘\’ and ‘$’. * Makefile.in (install-arch-indep, install-etcdoc): * admin/charsets/mapconv, admin/merge-gnulib, admin/merge-pkg-config: * admin/quick-install-emacs, build-aux/gitlog-to-emacslog: * configure.ac, lib-src/rcs2log, make-dist: * src/Makefile.in (lisp.mk): Don’t assume ‘echo’ outputs ‘\’ and leading ‘-’ unscathed. For example, use ‘printf '%s\n' "$foo"’ rather than ‘echo "$foo"’ if $foo can contain arbitrary characters. * lisp/Makefile.in (TAGS): Use ‘ls’, not ‘echo’, to avoid ‘\’ issues. * doc/lispref/two-volume.make (vol1.pdf): * test/etags/make-src/Makefile (web ftp publish): Use ‘printf’ rather than ‘echo -e’.
Diffstat (limited to 'make-dist')
-rwxr-xr-xmake-dist24
1 files changed, 13 insertions, 11 deletions
diff --git a/make-dist b/make-dist
index 79db904a2c8..48a2836fa0a 100755
--- a/make-dist
+++ b/make-dist
@@ -110,7 +110,7 @@ while [ $# -gt 0 ]; do
110 ;; 110 ;;
111 111
112 "--help") 112 "--help")
113 echo "Usage: ${progname} [options]" 113 printf '%s\n' "Usage: ${progname} [options]"
114 echo "" 114 echo ""
115 echo " --bzip2 use bzip2 instead of gzip" 115 echo " --bzip2 use bzip2 instead of gzip"
116 echo " --clean-up delete staging directories when done" 116 echo " --clean-up delete staging directories when done"
@@ -128,7 +128,7 @@ while [ $# -gt 0 ]; do
128 ;; 128 ;;
129 129
130 * ) 130 * )
131 echo "${progname}: Unrecognized argument: $1" >&2 131 printf '%s\n' "${progname}: Unrecognized argument: $1" >&2
132 exit 1 132 exit 1
133 ;; 133 ;;
134 esac 134 esac
@@ -137,9 +137,9 @@ done
137 137
138### Make sure we're running in the right place. 138### Make sure we're running in the right place.
139if [ ! -d src -o ! -f src/lisp.h -o ! -d lisp -o ! -f lisp/subr.el ]; then 139if [ ! -d src -o ! -f src/lisp.h -o ! -d lisp -o ! -f lisp/subr.el ]; then
140 echo "${progname}: Can't find 'src/lisp.h' and 'lisp/subr.el'." >&2 140 printf '%s\n' "${progname}: Can't find 'src/lisp.h' and 'lisp/subr.el'." >&2
141 echo "${progname} must be run in the top directory of the Emacs" >&2 141 printf '%s\n' "${progname} must be run in the top directory of the Emacs" >&2
142 echo "distribution tree. cd to that directory and try again." >&2 142 printf '%s\n' "distribution tree. cd to that directory and try again." >&2
143 exit 1 143 exit 1
144fi 144fi
145 145
@@ -155,7 +155,7 @@ then
155 /*) ;; 155 /*) ;;
156 *) 156 *)
157 if [ ! -f "$EMACS" ]; then 157 if [ ! -f "$EMACS" ]; then
158 echo "$0: You must set the EMACS environment variable " \ 158 printf '%s\n' "$0: You must set the EMACS environment variable " \
159 "to an absolute file name." 2>&1 159 "to an absolute file name." 2>&1
160 exit 1 160 exit 1
161 fi;; 161 fi;;
@@ -168,7 +168,8 @@ version=`
168 sed -n 's/^AC_INIT(GNU Emacs,[ ]*\([^ ,)]*\).*/\1/p' <configure.ac 168 sed -n 's/^AC_INIT(GNU Emacs,[ ]*\([^ ,)]*\).*/\1/p' <configure.ac
169` || version= 169` || version=
170if [ ! "${version}" ]; then 170if [ ! "${version}" ]; then
171 echo "${progname}: can't find current Emacs version in './src/emacs.c'" >&2 171 printf '%s\n' \
172 "${progname}: can't find current Emacs version in './src/emacs.c'" >&2
172 exit 1 173 exit 1
173fi 174fi
174 175
@@ -195,7 +196,7 @@ fi
195### Make sure the subdirectory is available. 196### Make sure the subdirectory is available.
196tempparent="make-dist.tmp.$$" 197tempparent="make-dist.tmp.$$"
197if [ -d ${tempparent} ]; then 198if [ -d ${tempparent} ]; then
198 echo "${progname}: staging directory '${tempparent}' already exists. 199 printf '%s\n' "${progname}: staging directory '${tempparent}' already exists.
199Perhaps a previous invocation of '${progname}' failed to clean up after 200Perhaps a previous invocation of '${progname}' failed to clean up after
200itself. Check that directories whose names are of the form 201itself. Check that directories whose names are of the form
201'make-dist.tmp.NNNNN' don't contain any important information, remove 202'make-dist.tmp.NNNNN' don't contain any important information, remove
@@ -530,7 +531,7 @@ for subdir in . etc leim lib lib-src lisp lwlib msdos nt src; do
530done 531done
531 532
532if [ "${newer}" ]; then 533if [ "${newer}" ]; then
533 echo "Removing files older than $newer" 534 printf '%s\n' "Removing files older than $newer"
534 ## We remove .elc files unconditionally, on the theory that anyone picking 535 ## We remove .elc files unconditionally, on the theory that anyone picking
535 ## up an incremental distribution already has a running Emacs to byte-compile 536 ## up an incremental distribution already has a running Emacs to byte-compile
536 ## them with. 537 ## them with.
@@ -544,8 +545,9 @@ find ${tempparent} \( -name '*~' -o -name '#*#' -o -name '.*ignore' -o -name '=*
544if [ "${make_tar}" = yes ]; then 545if [ "${make_tar}" = yes ]; then
545 echo "Looking for $default_gzip" 546 echo "Looking for $default_gzip"
546 found=0 547 found=0
547 temppath=`echo $PATH | sed -e 's/^:/.:/' -e 's/::/:.:/g' -e 's/:$/:./' \ 548 temppath=`printf '%s\n' "$PATH" |
548 -e 's/:/ /g'` 549 sed -e 's/^:/.:/' -e 's/::/:.:/g' -e 's/:$/:./' -e 's/:/ /g'
550 `
549 for dir in ${temppath}; do 551 for dir in ${temppath}; do
550 [ -x ${dir}/$default_gzip ] || continue 552 [ -x ${dir}/$default_gzip ] || continue
551 found=1; break 553 found=1; break