#!/bin/sh set -eu base="${TMPDIR-/tmp}/mcpu-cpp-search-dirs-$$" mkdir -p \ "$base/cmd-user" \ "$base/cmd-system" \ "$base/config-as" \ "$base/config-user" \ "$base/system" \ "$base/cmd-after" \ "$base/config-after" trap 'rm -rf "$base"' EXIT HUP INT TERM runtime_root=$(cd "$(dirname "$MCPU_CPP")/.." && pwd -P) cat > "$base/test.conf" < "$base/search.out" 2> "$base/verbose.out" cat > "$base/search.expected" <&2 exit 1 fi grep "^config: MCPU_CPP_AS_INCLUDE_PATH=$base/config-as$" "$base/verbose.out" >/dev/null grep "^config: MCPU_CPP_SYSTEM_INCLUDE_PATH=$base/system$" "$base/verbose.out" >/dev/null grep "^config: MCPU_CPP_AFTER_INCLUDE_PATH=$base/config-after$" "$base/verbose.out" >/dev/null # Even when an explicitly selected configuration file is empty, -v and # -dsearch-dirs must expose the runtime-derived installation system root. : > "$base/empty.conf" "$MCPU_CPP" --config-file "$base/empty.conf" -v -dsearch-dirs \ > "$base/default-search.out" 2> "$base/default-verbose.out" grep '^config: MCPU_CPP_SYSTEM_INCLUDE_PATH=' "$base/default-verbose.out" >/dev/null grep "^search: $runtime_root/include$" "$base/default-search.out" >/dev/null # -nostdinc removes both the generated system directories and the # configured system root from the directory dump, but keeps explicit -isystem. "$MCPU_CPP" \ --config-file "$base/test.conf" \ -isystem "$base/cmd-system" \ -nostdinc -dsearch-dirs > "$base/nostdinc.out" grep "^search: $base/cmd-system$" "$base/nostdinc.out" >/dev/null if grep "^search: $base/system" "$base/nostdinc.out" >/dev/null; then echo '-nostdinc left configured system directories in -dsearch-dirs' >&2 exit 1 fi # A dump action stops preprocessing. An input name may be present but need # not exist. "$MCPU_CPP" --config-file "$base/test.conf" -dsearch-dirs \ "$base/does-not-exist.c" > /dev/null if "$MCPU_CPP" --config-file "$base/test.conf" -dsearch-dirs -o "$base/out" \ > /dev/null 2>&1; then echo '-dsearch-dirs accepted an output file' >&2 exit 1 fi