#!/bin/sh set -eu base="${TMPDIR-/tmp}/mcpu-cpp-diagnostics-$$" mkdir -p "$base" trap 'rm -rf "$base"' EXIT HUP INT TERM cat > "$base/warning.c" <<'EOT' #define MESSAGE expanded_message before #warning MESSAGE is not expanded #warning one /* removed comment */ two #warning "spaces inside string" #warning Привет мир #if 0 #warning hidden warning #error hidden error #endif after EOT "$MCPU_CPP" --no-config "$base/warning.c" -o "$base/warning.out" 2>"$base/warning.err" grep '^before$' "$base/warning.out" >/dev/null grep '^after$' "$base/warning.out" >/dev/null ! grep '#warning' "$base/warning.out" >/dev/null grep 'warning: #warning MESSAGE is not expanded$' "$base/warning.err" >/dev/null grep 'warning: #warning one two$' "$base/warning.err" >/dev/null grep 'warning: #warning "spaces inside string"$' "$base/warning.err" >/dev/null grep 'warning: #warning Привет мир$' "$base/warning.err" >/dev/null ! grep 'expanded_message' "$base/warning.err" >/dev/null ! grep 'hidden warning' "$base/warning.err" >/dev/null ! grep 'hidden error' "$base/warning.err" >/dev/null "$MCPU_CPP" --no-config -dD "$base/warning.c" -o "$base/warning-dd.out" 2>"$base/warning-dd.err" grep '^#define MESSAGE expanded_message$' "$base/warning-dd.out" >/dev/null ! grep '#warning' "$base/warning-dd.out" >/dev/null grep 'warning: #warning MESSAGE is not expanded$' "$base/warning-dd.err" >/dev/null cat > "$base/line.c" <<'EOT' #line 62 "generated.mc" #warning logical location ok EOT "$MCPU_CPP" --no-config "$base/line.c" -o "$base/line.out" 2>"$base/line.err" grep '^generated\.mc:62: warning: #warning logical location$' "$base/line.err" >/dev/null grep '^ok$' "$base/line.out" >/dev/null cat > "$base/error.c" <<'EOT' #define WHY replacement #error WHY failed never EOT if "$MCPU_CPP" --no-config "$base/error.c" -o "$base/error.out" 2>"$base/error.err"; then echo '#error did not stop preprocessing' >&2 exit 1 fi grep 'error: #error WHY failed$' "$base/error.err" >/dev/null ! grep 'replacement' "$base/error.err" >/dev/null cat > "$base/empty.c" <<'EOT' #warning ok EOT "$MCPU_CPP" --no-config "$base/empty.c" -o "$base/empty.out" 2>"$base/empty.err" grep 'warning: #warning$' "$base/empty.err" >/dev/null grep '^ok$' "$base/empty.out" >/dev/null