t_integration.sh revision 1.63 1 # $NetBSD: t_integration.sh,v 1.63 2021/06/27 19:41:15 rillig Exp $
2 #
3 # Copyright (c) 2008, 2010 The NetBSD Foundation, Inc.
4 # All rights reserved.
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
8 # are met:
9 # 1. Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer.
11 # 2. Redistributions in binary form must reproduce the above copyright
12 # notice, this list of conditions and the following disclaimer in the
13 # documentation and/or other materials provided with the distribution.
14 #
15 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 # POSSIBILITY OF SUCH DAMAGE.
26 #
27
28 lint1=/usr/libexec/lint1
29
30 machine_arch="$(sysctl -n hw.machine_arch)"
31
32
33 configure_test_case()
34 {
35 local awk
36
37 # shellcheck disable=SC2016
38 awk='
39 BEGIN {
40 machine_arch = "'"$machine_arch"'"
41 flags = "-g -S -w"
42 skip = 0
43 }
44 /^\/\* (lint1-flags|lint1-extra-flags): .*\*\/$/ {
45 if ($2 == "lint1-flags:")
46 flags = ""
47 for (i = 3; i < NF; i++)
48 flags = flags " " $i
49 }
50 /^\/\* lint1-only-on-arch: .* \*\/$/ && $3 != machine_arch {
51 skip = 1
52 }
53 /^\/\* lint1-not-on-arch: .* \*\/$/ && $3 == machine_arch {
54 skip = 1
55 }
56 END {
57 printf("flags='\''%s'\''\n", flags)
58 printf("skip=%s\n", skip ? "yes" : "no")
59 }
60 '
61
62 eval "$(awk "$awk" "$1")"
63 }
64
65 # shellcheck disable=SC2155
66 check_lint1()
67 {
68 local src="$(atf_get_srcdir)/$1"
69 local exp="${src%.c}.exp"
70 local exp_ln="${src%.c}.exp-ln"
71 local wrk_ln="${1%.c}.ln"
72 local flags=""
73 local skip=""
74
75 if [ ! -f "$exp_ln" ]; then
76 exp_ln='/dev/null'
77 wrk_ln='/dev/null'
78 fi
79
80 configure_test_case "$src"
81
82 if [ "$skip" = "yes" ]; then
83 atf_check -o 'ignore' echo 'skipped'
84 return
85 fi
86
87 if [ -f "$exp" ]; then
88 # shellcheck disable=SC2086
89 atf_check -s not-exit:0 -o "file:$exp" -e empty \
90 "$lint1" $flags "$src" "$wrk_ln"
91 else
92 # shellcheck disable=SC2086
93 atf_check -s exit:0 \
94 "$lint1" $flags "$src" "$wrk_ln"
95 fi
96
97 if [ "$exp_ln" != '/dev/null' ]; then
98 atf_check -o "file:$exp_ln" cat "$wrk_ln"
99 fi
100 }
101
102 atf_init_test_cases()
103 {
104 local src name
105
106 for src in "$(atf_get_srcdir)"/*.c; do
107 src=${src##*/}
108 name=${src%.c}
109
110 atf_test_case "$name"
111 eval "${name}_head() {
112 atf_set 'require.progs' '$lint1'
113 }"
114 eval "${name}_body() {
115 check_lint1 '$name.c'
116 }"
117 atf_add_test_case "$name"
118 done
119 }
120