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