1 1.85 rillig # $NetBSD: t_integration.sh,v 1.85 2025/01/03 02:14:52 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.81 rillig : "${lint1:=/usr/libexec/lint1}" 29 1.68 rillig : "${archsubdir:=archsubdir_must_be_set}" 30 1.1 jruoho 31 1.85 rillig srcdir="$(atf_get_srcdir)" 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.66 rillig BEGIN { 40 1.78 rillig # see ./gen-platforms.sh 41 1.82 rillig platform["aarch64"] = "uchar lp64 long ldbl128" 42 1.82 rillig platform["alpha"] = "schar lp64 long ldbl64" 43 1.82 rillig platform["arm"] = "uchar ilp32 long ldbl64" 44 1.82 rillig platform["coldfire"] = "schar ilp32 int ldbl64" 45 1.82 rillig platform["hppa"] = "schar ilp32 long ldbl64" 46 1.82 rillig platform["i386"] = "schar ilp32 int ldbl96" 47 1.82 rillig platform["ia64"] = "schar lp64 long ldbl128" 48 1.82 rillig platform["m68000"] = "schar ilp32 int ldbl64" 49 1.82 rillig platform["m68k"] = "schar ilp32 int ldbl96" 50 1.82 rillig platform["mips"] = "schar ilp32 ???? ldbl64" 51 1.82 rillig platform["mips64"] = "schar ilp32 long ldbl128" 52 1.82 rillig platform["mipsn64"] = "schar lp64 long ldbl128" 53 1.82 rillig platform["or1k"] = "schar ilp32 int ldbl64" 54 1.82 rillig platform["powerpc"] = "uchar ilp32 int ldbl64" 55 1.82 rillig platform["powerpc64"] = "uchar lp64 long ldbl64" 56 1.82 rillig platform["riscv32"] = "schar ilp32 int ldbl64" 57 1.82 rillig platform["riscv64"] = "schar lp64 long ldbl64" 58 1.82 rillig platform["sh3"] = "schar ilp32 int ldbl64" 59 1.82 rillig platform["sparc"] = "schar ilp32 long ldbl64" 60 1.82 rillig platform["sparc64"] = "schar lp64 long ldbl128" 61 1.82 rillig platform["vax"] = "schar ilp32 long ldbl64" 62 1.82 rillig platform["x86_64"] = "schar lp64 long ldbl128" 63 1.64 rillig } 64 1.64 rillig 65 1.66 rillig function platform_has(prop) { 66 1.82 rillig if (!match(prop, /^(schar|uchar|ilp32|lp64|int|long|ldbl64|ldbl96|ldbl128)$/)) { 67 1.67 rillig printf("bad property '\''%s'\''\n", prop) > "/dev/stderr" 68 1.67 rillig exit(1) 69 1.66 rillig } 70 1.68 rillig if (platform[archsubdir] == "") { 71 1.68 rillig printf("bad archsubdir '\''%s'\''\n", archsubdir) > "/dev/stderr" 72 1.67 rillig exit(1) 73 1.66 rillig } 74 1.68 rillig return match(" " platform[archsubdir] " ", " " prop " ") 75 1.64 rillig } 76 1.64 rillig 77 1.25 rillig BEGIN { 78 1.68 rillig archsubdir = "'"$archsubdir"'" 79 1.25 rillig flags = "-g -S -w" 80 1.67 rillig skip = "no" 81 1.25 rillig } 82 1.64 rillig $1 == "/*" && $2 ~ /^lint1-/ && $NF == "*/" { 83 1.64 rillig if ($2 == "lint1-flags:" || $2 == "lint1-extra-flags:") { 84 1.64 rillig if ($2 == "lint1-flags:") 85 1.64 rillig flags = "" 86 1.64 rillig for (i = 3; i < NF; i++) 87 1.64 rillig flags = flags " " $i 88 1.69 rillig } else if ($2 == "lint1-only-if:") { 89 1.71 rillig for (i = 3; i < NF; i++) 90 1.71 rillig if (!platform_has($i)) 91 1.71 rillig skip = "yes" 92 1.69 rillig } else { 93 1.69 rillig printf("bad lint1 comment '\''%s'\''\n", $2) > "/dev/stderr" 94 1.69 rillig exit(1) 95 1.64 rillig } 96 1.59 rillig } 97 1.64 rillig 98 1.25 rillig END { 99 1.59 rillig printf("flags='\''%s'\''\n", flags) 100 1.67 rillig printf("skip=%s\n", skip) 101 1.25 rillig } 102 1.25 rillig ' 103 1.25 rillig 104 1.67 rillig local config 105 1.67 rillig config="$(awk "$awk" "$1")" || exit 1 106 1.67 rillig eval "$config" 107 1.83 rillig 108 1.83 rillig case "_${1%.c}_" in 109 1.83 rillig *_utf8_*) 110 1.83 rillig LC_ALL=en_US.UTF-8;; 111 1.83 rillig *) 112 1.83 rillig LC_ALL=C;; 113 1.83 rillig esac 114 1.83 rillig export LC_ALL 115 1.25 rillig } 116 1.25 rillig 117 1.85 rillig tests_done='' 118 1.9 rillig check_lint1() 119 1.1 jruoho { 120 1.85 rillig local src="$1" 121 1.85 rillig local base="${src##*/}" 122 1.85 rillig local exp="${base%.c}.exp" 123 1.63 rillig local exp_ln="${src%.c}.exp-ln" 124 1.85 rillig local wrk_ln="${base%.c}.ln" 125 1.59 rillig local flags="" 126 1.59 rillig local skip="" 127 1.6 rillig 128 1.58 rillig if [ ! -f "$exp_ln" ]; then 129 1.58 rillig exp_ln='/dev/null' 130 1.51 rillig wrk_ln='/dev/null' 131 1.43 rillig fi 132 1.43 rillig 133 1.67 rillig configure_test_case "$src" # sets 'skip' and 'flags' 134 1.59 rillig 135 1.59 rillig if [ "$skip" = "yes" ]; then 136 1.85 rillig return 137 1.59 rillig fi 138 1.85 rillig tests_done="$tests_done $src" 139 1.59 rillig 140 1.76 rillig # shellcheck disable=SC2086 141 1.77 rillig atf_check -s 'exit' -o "save:$exp" \ 142 1.76 rillig "$lint1" $flags "$src" "$wrk_ln" 143 1.43 rillig 144 1.59 rillig if [ "$exp_ln" != '/dev/null' ]; then 145 1.80 rillig # Remove comments and whitespace from the .exp-ln file. 146 1.80 rillig sed \ 147 1.80 rillig -e '/^#/d' \ 148 1.80 rillig -e '/^$/d' \ 149 1.80 rillig -e 's,^#.*,,' \ 150 1.80 rillig -e 's,\([^%]\)[[:space:]],\1,g' \ 151 1.80 rillig < "$exp_ln" > "./${exp_ln##*/}" 152 1.80 rillig 153 1.80 rillig atf_check -o "file:${exp_ln##*/}" cat "$wrk_ln" 154 1.9 rillig fi 155 1.1 jruoho } 156 1.1 jruoho 157 1.85 rillig atf_test_case lint1 158 1.85 rillig lint1_head() { 159 1.85 rillig atf_set 'require.progs' "$lint1" 160 1.85 rillig } 161 1.85 rillig lint1_body() { 162 1.85 rillig local src 163 1.85 rillig 164 1.85 rillig for src in "$srcdir"/*.c; do 165 1.85 rillig check_lint1 "$src" 166 1.85 rillig done 167 1.85 rillig 168 1.85 rillig # shellcheck disable=SC2086 169 1.85 rillig atf_check lua "$srcdir/check-expect.lua" $tests_done 170 1.85 rillig } 171 1.85 rillig 172 1.62 rillig atf_init_test_cases() 173 1.1 jruoho { 174 1.85 rillig atf_add_test_case lint1 175 1.1 jruoho } 176