summaryrefslogtreecommitdiff
path: root/Makefile.in
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2015-10-10 18:03:49 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2015-10-10 18:11:27 -0700
commit29dfca23553b9995a8ec3b50090a652a6a0ecb01 (patch)
treea5d968df7cadd8259e029d89e6150dfe6762cb96 /Makefile.in
parentec0d4d24fd11b5040de9f7657b486c3b1e743071 (diff)
downloademacs-29dfca23553b9995a8ec3b50090a652a6a0ecb01.tar.gz
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 'Makefile.in')
-rw-r--r--Makefile.in25
1 files changed, 11 insertions, 14 deletions
diff --git a/Makefile.in b/Makefile.in
index 4ee84f96ad6..1245f76fabf 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -314,8 +314,6 @@ etc-emacsver:
${srcdir}/build-aux/move-if-change emacsver.tex.$$$$ \
${srcdir}/etc/refcards/emacsver.tex
-removenullpaths=sed -e 's/^:*//' -e 's/:*$$//g' -e 's/::*/:/g'
-
# Generate epaths.h from epaths.in. This target is invoked by 'configure'.
# See comments in configure.ac for why it is done this way, as opposed
# to just letting configure generate epaths.h from epaths.in in a
@@ -324,20 +322,18 @@ epaths-force:
@for dir in '$(abs_srcdir)' '$(lispdir)' '$(archlibdir)'; do \
case $$dir in \
*:*) \
- echo >&2 "Build or installation directory '$$dir'"; \
+ printf >&2 "Build or installation directory '%s'\\n" "$$dir"; \
echo >&2 "cannot contain ':'."; \
exit 1;; \
esac; \
done
- @(standardlisppath=`echo "${standardlisppath}" | ${removenullpaths}` ; \
- locallisppath=`echo "${locallisppath}" | ${removenullpaths}` ; \
- buildlisppath=`echo "${buildlisppath}" | ${removenullpaths}` ; \
- x_default_search_path=`echo ${x_default_search_path}`; \
- gamedir=`echo ${gamedir}`; \
+ @(gamedir='${gamedir}'; \
sed < ${srcdir}/src/epaths.in > epaths.h.$$$$ \
- -e 's;\(#.*PATH_LOADSEARCH\).*$$;\1 "'"$${standardlisppath}"'";' \
- -e 's;\(#.*PATH_SITELOADSEARCH\).*$$;\1 "'"$${locallisppath}"'";' \
- -e 's;\(#.*PATH_DUMPLOADSEARCH\).*$$;\1 "'"$${buildlisppath}"'";' \
+ -e 's;\(#.*PATH_LOADSEARCH\).*$$;\1 "${standardlisppath}";' \
+ -e 's;\(#.*PATH_SITELOADSEARCH\).*$$;\1 "${locallisppath}";' \
+ -e 's;\(#.*PATH_DUMPLOADSEARCH\).*$$;\1 "${buildlisppath}";' \
+ -e '/^#define PATH_[^ ]*SEARCH /s/\([":]\):*/\1/g' \
+ -e '/^#define PATH_[^ ]*SEARCH /s/:"/"/' \
-e 's;\(#.*PATH_EXEC\).*$$;\1 "${archlibdir}";' \
-e 's;\(#.*PATH_INFO\).*$$;\1 "${infodir}";' \
-e 's;\(#.*PATH_DATA\).*$$;\1 "${etcdir}";' \
@@ -577,7 +573,7 @@ install-arch-indep: lisp install-info install-man ${INSTALL_ARCH_INDEP_EXTRA}
fi; \
rm -rf "$${dest}" ; \
umask 022; ${MKDIR_P} "$${dest}" ; \
- echo "Copying $${dir} to $${dest}..." ; \
+ printf 'Copying %s to %s...\n' "$$dir" "$$dest" ; \
(cd $${dir}; tar -chf - . ) \
| (cd "$${dest}"; umask 022; \
tar -xvf - && cat > /dev/null) || exit 1; \
@@ -632,7 +628,8 @@ install-etcdoc: src install-arch-indep
if [ "`cd ./etc; /bin/pwd`" != "$$exp_etcdocdir" ]; \
then \
docfile="DOC"; \
- echo "Copying etc/$${docfile} to $(DESTDIR)${etcdocdir} ..." ; \
+ printf 'Copying %s to %s ...\n' "etc/$$docfile" \
+ "$(DESTDIR)${etcdocdir}"; \
${INSTALL_DATA} etc/$${docfile} "$(DESTDIR)${etcdocdir}/$${docfile}"; \
$(set_installuser); \
chown $${installuser} "$(DESTDIR)${etcdocdir}/$${docfile}" || true ; \
@@ -721,7 +718,7 @@ install-etc:
for icon in $${dir}/${EMACS_ICON}[.-]*; do \
[ -r $${icon} ] || continue ; \
ext=`echo "$${icon}" | sed -e 's|.*\.||'`; \
- dest=`echo "$${icon}" | sed -e 's|.*/||' -e "s|\.$${ext}$$||" -e 's/$(EMACS_ICON)/emacs/' -e '$(TRANSFORM)'`.$${ext} ; \
+ dest=`echo "$${icon}" | sed -e 's|.*/||' -e "s|\\.$${ext}\$$||" -e 's/$(EMACS_ICON)/emacs/' -e '$(TRANSFORM)'`.$${ext} ; \
( cd "$${thisdir}"; \
${INSTALL_DATA} ${iconsrcdir}/$${icon} "$(DESTDIR)${icondir}/$${dir}/$${dest}" ) \
|| exit 1; \