1 1.1 rillig #! /bin/sh 2 1.18 rillig # $NetBSD: accept.sh,v 1.18 2025/02/27 06:48:29 rillig Exp $ 3 1.1 rillig # 4 1.1 rillig # Copyright (c) 2021 The NetBSD Foundation, Inc. 5 1.1 rillig # All rights reserved. 6 1.1 rillig # 7 1.1 rillig # Redistribution and use in source and binary forms, with or without 8 1.1 rillig # modification, are permitted provided that the following conditions 9 1.1 rillig # are met: 10 1.1 rillig # 1. Redistributions of source code must retain the above copyright 11 1.1 rillig # notice, this list of conditions and the following disclaimer. 12 1.1 rillig # 2. Redistributions in binary form must reproduce the above copyright 13 1.1 rillig # notice, this list of conditions and the following disclaimer in the 14 1.1 rillig # documentation and/or other materials provided with the distribution. 15 1.1 rillig # 16 1.1 rillig # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 17 1.1 rillig # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 18 1.1 rillig # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19 1.1 rillig # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 20 1.1 rillig # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 1.1 rillig # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 1.1 rillig # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 1.1 rillig # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 1.1 rillig # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 1.1 rillig # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 1.1 rillig # POSSIBILITY OF SUCH DAMAGE. 27 1.1 rillig # 28 1.1 rillig 29 1.15 rillig # usage: accept.sh [-u] <pattern>... 30 1.1 rillig # 31 1.10 rillig # Run one or more lint tests, saving their output in the corresponding 32 1.10 rillig # .exp files, for incorporating the messages into the .c files as 33 1.10 rillig # 'expect' comments. 34 1.1 rillig 35 1.1 rillig set -eu 36 1.1 rillig 37 1.17 rillig atf_get_srcdir() { 38 1.17 rillig echo "." 39 1.17 rillig } 40 1.17 rillig atf_test_case() { 41 1.17 rillig : 42 1.17 rillig } 43 1.17 rillig 44 1.9 rillig : "${archsubdir:=$(make -v ARCHSUBDIR)}" 45 1.9 rillig . './t_integration.sh' # for configure_test_case 46 1.1 rillig 47 1.14 rillig update_flags='' 48 1.14 rillig while getopts 'u' opt; do 49 1.14 rillig case $opt in 50 1.14 rillig u) update_flags='-u';; 51 1.14 rillig *) echo "usage: $0 [-u] pattern..." 1>&2 52 1.14 rillig exit 1;; 53 1.14 rillig esac 54 1.14 rillig done 55 1.14 rillig shift $((OPTIND - 1)) 56 1.14 rillig 57 1.11 rillig done_tests='' 58 1.1 rillig for pattern in "$@"; do 59 1.5 rillig # shellcheck disable=SC2231 60 1.11 rillig for cfile in *$pattern*.c; do 61 1.11 rillig base=${cfile%.*} 62 1.13 rillig exp_tmp_file="$base.exp.tmp" 63 1.13 rillig exp_file="$base.exp" 64 1.12 rillig ln_tmp_file="$base.exp-ln.tmp" 65 1.4 rillig ln_file="$base.exp-ln" 66 1.1 rillig 67 1.1 rillig configure_test_case "$cfile" 68 1.2 rillig # shellcheck disable=SC2154 69 1.5 rillig if [ "$skip" = yes ]; then 70 1.1 rillig continue 71 1.1 rillig fi 72 1.1 rillig 73 1.1 rillig if [ ! -f "$ln_file" ]; then 74 1.1 rillig ln_file='/dev/null' 75 1.1 rillig fi 76 1.1 rillig 77 1.2 rillig # shellcheck disable=SC2154 78 1.2 rillig # shellcheck disable=SC2086 79 1.13 rillig if "$lint1" $flags "$base.c" "$ln_tmp_file" > "$exp_tmp_file"; then 80 1.13 rillig if [ -s "$exp_tmp_file" ]; then 81 1.1 rillig echo "$base produces output but exits successfully" 82 1.13 rillig sed 's,^,| ,' "$exp_tmp_file" 83 1.1 rillig fi 84 1.3 rillig elif [ $? -ge 128 ]; then 85 1.3 rillig echo "$base crashed" 86 1.3 rillig continue 87 1.1 rillig fi 88 1.1 rillig 89 1.18 rillig if [ -f "$exp_file" ] && cmp -s "$exp_tmp_file" "$exp_file"; then 90 1.13 rillig rm "$exp_tmp_file" 91 1.13 rillig else 92 1.13 rillig mv "$exp_tmp_file" "$exp_file" 93 1.13 rillig fi 94 1.13 rillig 95 1.12 rillig if [ ! -f "$ln_tmp_file" ]; then 96 1.12 rillig : 'No cleanup necessary.' 97 1.12 rillig elif [ "$ln_file" = '/dev/null' ]; then 98 1.12 rillig rm "$ln_tmp_file" 99 1.12 rillig else 100 1.16 rillig if tr -d ' \t' < "$ln_file" | sed '/^$/d' > "$ln_file.trimmed.tmp" && 101 1.12 rillig tr -d ' \t' < "$ln_tmp_file" > "$ln_tmp_file.trimmed.tmp" && 102 1.12 rillig cmp -s "$ln_file.trimmed.tmp" "$ln_tmp_file.trimmed.tmp"; then 103 1.12 rillig rm "$ln_tmp_file" 104 1.12 rillig else 105 1.12 rillig echo "Replacing $ln_file" 106 1.12 rillig mv "$ln_tmp_file" "$ln_file" 107 1.12 rillig fi 108 1.12 rillig rm -f "$ln_file.trimmed.tmp" "$ln_tmp_file.trimmed.tmp" 109 1.12 rillig fi 110 1.12 rillig 111 1.1 rillig case "$base" in (msg_*) 112 1.8 rillig if grep 'This message is not used\.' "$cfile" >/dev/null; then 113 1.8 rillig : 'Skip further checks.' 114 1.13 rillig elif [ ! -s "$exp_file" ]; then 115 1.1 rillig echo "$base should produce warnings" 116 1.10 rillig elif grep '^TODO: "Add example code' "$cfile" >/dev/null; then 117 1.1 rillig : 'ok, this test is not yet written' 118 1.1 rillig else 119 1.1 rillig msgid=${base} 120 1.1 rillig msgid=${msgid#msg_00} 121 1.1 rillig msgid=${msgid#msg_0} 122 1.1 rillig msgid=${msgid#msg_} 123 1.6 rillig msgid=${msgid%%_*} 124 1.13 rillig if ! grep "\\[$msgid\\]\$" "$exp_file" >/dev/null; then 125 1.1 rillig echo "$base should trigger the message '$msgid'" 126 1.1 rillig fi 127 1.1 rillig fi 128 1.1 rillig esac 129 1.11 rillig 130 1.11 rillig done_tests="$done_tests $cfile" 131 1.1 rillig done 132 1.1 rillig done 133 1.1 rillig 134 1.11 rillig # shellcheck disable=SC2086 135 1.14 rillig lua './check-expect.lua' $update_flags $done_tests 136