102832e24Srillig#! /bin/sh 2*3d6a5025Srillig# $NetBSD: accept.sh,v 1.17 2025/01/03 03:14:47 rillig Exp $ 302832e24Srillig# 402832e24Srillig# Copyright (c) 2021 The NetBSD Foundation, Inc. 502832e24Srillig# All rights reserved. 602832e24Srillig# 702832e24Srillig# Redistribution and use in source and binary forms, with or without 802832e24Srillig# modification, are permitted provided that the following conditions 902832e24Srillig# are met: 1002832e24Srillig# 1. Redistributions of source code must retain the above copyright 1102832e24Srillig# notice, this list of conditions and the following disclaimer. 1202832e24Srillig# 2. Redistributions in binary form must reproduce the above copyright 1302832e24Srillig# notice, this list of conditions and the following disclaimer in the 1402832e24Srillig# documentation and/or other materials provided with the distribution. 1502832e24Srillig# 1602832e24Srillig# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 1702832e24Srillig# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 1802832e24Srillig# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1902832e24Srillig# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 2002832e24Srillig# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2102832e24Srillig# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2202832e24Srillig# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2302832e24Srillig# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2402832e24Srillig# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2502832e24Srillig# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2602832e24Srillig# POSSIBILITY OF SUCH DAMAGE. 2702832e24Srillig# 2802832e24Srillig 29d2c16d57Srillig# usage: accept.sh [-u] <pattern>... 3002832e24Srillig# 315716ac4bSrillig# Run one or more lint tests, saving their output in the corresponding 325716ac4bSrillig# .exp files, for incorporating the messages into the .c files as 335716ac4bSrillig# 'expect' comments. 3402832e24Srillig 3502832e24Srilligset -eu 3602832e24Srillig 37*3d6a5025Srilligatf_get_srcdir() { 38*3d6a5025Srillig echo "." 39*3d6a5025Srillig} 40*3d6a5025Srilligatf_test_case() { 41*3d6a5025Srillig : 42*3d6a5025Srillig} 43*3d6a5025Srillig 44f87e5fc9Srillig: "${archsubdir:=$(make -v ARCHSUBDIR)}" 45f87e5fc9Srillig. './t_integration.sh' # for configure_test_case 4602832e24Srillig 47223ac6e8Srilligupdate_flags='' 48223ac6e8Srilligwhile getopts 'u' opt; do 49223ac6e8Srillig case $opt in 50223ac6e8Srillig u) update_flags='-u';; 51223ac6e8Srillig *) echo "usage: $0 [-u] pattern..." 1>&2 52223ac6e8Srillig exit 1;; 53223ac6e8Srillig esac 54223ac6e8Srilligdone 55223ac6e8Srilligshift $((OPTIND - 1)) 56223ac6e8Srillig 57908cc94bSrilligdone_tests='' 5802832e24Srilligfor pattern in "$@"; do 59dd4ca8c6Srillig # shellcheck disable=SC2231 60908cc94bSrillig for cfile in *$pattern*.c; do 61908cc94bSrillig base=${cfile%.*} 62afb87394Srillig exp_tmp_file="$base.exp.tmp" 63afb87394Srillig exp_file="$base.exp" 6487eefb90Srillig ln_tmp_file="$base.exp-ln.tmp" 65827aba36Srillig ln_file="$base.exp-ln" 6602832e24Srillig 6702832e24Srillig configure_test_case "$cfile" 68618beb45Srillig # shellcheck disable=SC2154 69dd4ca8c6Srillig if [ "$skip" = yes ]; then 7002832e24Srillig continue 7102832e24Srillig fi 7202832e24Srillig 7302832e24Srillig if [ ! -f "$ln_file" ]; then 7402832e24Srillig ln_file='/dev/null' 7502832e24Srillig fi 7602832e24Srillig 77618beb45Srillig # shellcheck disable=SC2154 78618beb45Srillig # shellcheck disable=SC2086 79afb87394Srillig if "$lint1" $flags "$base.c" "$ln_tmp_file" > "$exp_tmp_file"; then 80afb87394Srillig if [ -s "$exp_tmp_file" ]; then 8102832e24Srillig echo "$base produces output but exits successfully" 82afb87394Srillig sed 's,^,| ,' "$exp_tmp_file" 8302832e24Srillig fi 8440c013a5Srillig elif [ $? -ge 128 ]; then 8540c013a5Srillig echo "$base crashed" 8640c013a5Srillig continue 8702832e24Srillig fi 8802832e24Srillig 89afb87394Srillig if [ -f "$exp_file" ] && cmp -s "$exp_tmp_file" "$exp_file"; then 90afb87394Srillig rm "$exp_tmp_file" 91afb87394Srillig else 92afb87394Srillig mv "$exp_tmp_file" "$exp_file" 93afb87394Srillig fi 94afb87394Srillig 9587eefb90Srillig if [ ! -f "$ln_tmp_file" ]; then 9687eefb90Srillig : 'No cleanup necessary.' 9787eefb90Srillig elif [ "$ln_file" = '/dev/null' ]; then 9887eefb90Srillig rm "$ln_tmp_file" 9987eefb90Srillig else 10068b44b78Srillig if tr -d ' \t' < "$ln_file" | sed '/^$/d' > "$ln_file.trimmed.tmp" && 10187eefb90Srillig tr -d ' \t' < "$ln_tmp_file" > "$ln_tmp_file.trimmed.tmp" && 10287eefb90Srillig cmp -s "$ln_file.trimmed.tmp" "$ln_tmp_file.trimmed.tmp"; then 10387eefb90Srillig rm "$ln_tmp_file" 10487eefb90Srillig else 10587eefb90Srillig echo "Replacing $ln_file" 10687eefb90Srillig mv "$ln_tmp_file" "$ln_file" 10787eefb90Srillig fi 10887eefb90Srillig rm -f "$ln_file.trimmed.tmp" "$ln_tmp_file.trimmed.tmp" 10987eefb90Srillig fi 11087eefb90Srillig 11102832e24Srillig case "$base" in (msg_*) 112bc46a7bbSrillig if grep 'This message is not used\.' "$cfile" >/dev/null; then 113bc46a7bbSrillig : 'Skip further checks.' 114afb87394Srillig elif [ ! -s "$exp_file" ]; then 11502832e24Srillig echo "$base should produce warnings" 1165716ac4bSrillig elif grep '^TODO: "Add example code' "$cfile" >/dev/null; then 11702832e24Srillig : 'ok, this test is not yet written' 11802832e24Srillig else 11902832e24Srillig msgid=${base} 12002832e24Srillig msgid=${msgid#msg_00} 12102832e24Srillig msgid=${msgid#msg_0} 12202832e24Srillig msgid=${msgid#msg_} 1234e074207Srillig msgid=${msgid%%_*} 124afb87394Srillig if ! grep "\\[$msgid\\]\$" "$exp_file" >/dev/null; then 12502832e24Srillig echo "$base should trigger the message '$msgid'" 12602832e24Srillig fi 12702832e24Srillig fi 12802832e24Srillig esac 129908cc94bSrillig 130908cc94bSrillig done_tests="$done_tests $cfile" 13102832e24Srillig done 13202832e24Srilligdone 13302832e24Srillig 134908cc94bSrillig# shellcheck disable=SC2086 135223ac6e8Srilliglua './check-expect.lua' $update_flags $done_tests 136