Home | History | Annotate | Line # | Download | only in lint1
      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