xref: /netbsd-src/tests/usr.bin/xlint/lint1/accept.sh (revision 3d6a50253cd682dca85a66a49baee893251dac65)
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