Files
ExPkg/expkg/vendor/lz4/tests/check_stdvars.sh
2025-08-06 13:29:28 +08:00

90 lines
2.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env sh
set -e # exit on first command error
###############################################################################
# check_stdvars.sh verify that user-supplied CC/CFLAGS/CPPFLAGS/LDFLAGS/
# LDLIBS reach every compile- and link-command emitted by a recursive Make.
#
# Usage: tests/check_stdvars.sh build.log
# where build.log is produced with:
# make -nr V=1 \
# CC='cc -DCC_TEST' \
# CFLAGS='-DCFLAGS_TEST' \
# CPPFLAGS='-DCPPFLAGS_TEST' \
# LDFLAGS='-DLDFLAGS_TEST' \
# LDLIBS='-DLDLIBS_TEST' \
# > build.log
###############################################################################
log_file=${1:?need build-log file}
# marker flags injected by the Makefile test target
CC_TAG='-DCC_TEST'
CF_TAG='-DCFLAGS_TEST'
CP_TAG='-DCPPFLAGS_TEST'
LD_TAG='-DLDFLAGS_TEST'
LL_TAG='-DLDLIBS_TEST'
compile_seen=0 ; compile_ok=0
link_seen=0 ; link_ok=0
fail=0
report() {
echo "$1:" >&2
echo " $2" >&2
fail=1
}
# read log line-by-line
while IFS= read -r line
do
# skip blank lines, comments, or progress "echo …" lines
[ -z "$line" ] && continue
case "$line" in
\#*) continue ;;
' echo '*) continue ;; # leading whitespace + echo
'echo '*) continue ;; # echo with no leading whitespace
esac
# classify
step=other
case "$line" in
*' -c '*) step=compile ;; # compile if -c appears
*' cc '*|cc\ *|*' gcc '*|gcc\ *|*' clang '*|clang\ *|*' g++ '*|g++\ *|*' clang++ '*|clang++\ *)
step=link ;; # compiler without -c ⇒ link
esac
[ "$step" = other ] && continue
if [ "$step" = compile ]; then
compile_seen=$((compile_seen + 1))
ok=1
case "$line" in *"$CC_TAG"*) : ;; *) ok=0 ;; esac
case "$line" in *"$CF_TAG"*) : ;; *) ok=0 ;; esac
case "$line" in *"$CP_TAG"*) : ;; *) ok=0 ;; esac
if [ "$ok" -eq 1 ]; then
compile_ok=$((compile_ok + 1))
else
report "compile cmd missing marker(s)" "$line"
fi
else # link
link_seen=$((link_seen + 1))
ok=1
case "$line" in *"$LD_TAG"*) : ;; *) ok=0 ;; esac
case "$line" in *"$LL_TAG"*) : ;; *) ok=0 ;; esac
if [ "$ok" -eq 1 ]; then
link_ok=$((link_ok + 1))
else
report "link cmd missing marker(s)" "$line"
fi
fi
done < "$log_file"
if [ "$fail" -ne 0 ]; then
echo "standard-variable propagation test FAILED" >&2
echo " compile: $compile_ok / $compile_seen OK" >&2
echo " link : $link_ok / $link_seen OK" >&2
exit 1
fi
echo "$compile_seen compile + $link_seen link commands: all markers present"
exit 0