Make makegen/m4.sh report m4 failure by returning 1.
authorTaylor R Campbell <campbell@mumble.net>
Sat, 17 Apr 2010 05:28:16 +0000 (01:28 -0400)
committerTaylor R Campbell <campbell@mumble.net>
Sat, 17 Apr 2010 05:28:16 +0000 (01:28 -0400)
Previously, the return code of m4 was totally ignored, because it was
invoked only in a pipeline not at the end.  Because of brain damage
in shell script, we have to use a temporary file to let the subshell
in which we run m4 report the failure to the script so that the
script can know to return 1.

src/microcode/makegen/m4.sh

index 2411fc79fd75c8cdc1179e8d070886ee8d79e336..bf01c4490fe7948af847f90c51402f6c92635b50 100755 (executable)
 
 # Processing to simulate m4 accepting definition arguments.
 
+set -e
+
+TMP_FILE="m4.tmp"
+
+clean ()
+{
+  rm -f "${TMP_FILE}"
+}
+
+run_m4 ()
+{
+  m4 && clean
+}
+
+trap clean EXIT INT QUIT TERM
+rm -f "${TMP_FILE}"
+touch "${TMP_FILE}"
+
 if [ $# = 0 ]
 then
-  sed -e '/^#/D' | m4 | sed -e 's/@/$/g' -e 's/^\f$//'
+  sed -e '/^#/D' | run_m4 | sed -e 's/@/$/g' -e 's/^\f$//'
 else
-  TMP_FILE="m4.tmp"
   SEEN_INPUT=0
-  rm -f "${TMP_FILE}"
   while [ $# != 0 ]; do
     if [ "${1}" = "-P" ]; then
       echo "define(${2})" >> "${TMP_FILE}"
@@ -44,6 +60,13 @@ else
   if [ ${SEEN_INPUT} -eq 0 ]; then
     sed -e '/^#/D' >> "${TMP_FILE}"
   fi
-  m4 < "${TMP_FILE}" | sed -e 's/@/$/g' -e 's/^\f$//'
-  rm -f "${TMP_FILE}"
+  run_m4 < "${TMP_FILE}" | sed -e 's/@/$/g' -e 's/^\f$//'
+fi
+
+# If m4 was successful, run_m4 has deleted the temporary file.  If
+# not, report the failure; exiting will have the effect of running
+# `clean', which will delete the temporary file.
+
+if [ -f "${TMP_FILE}" ]; then
+  exit 1
 fi