1*ecb2cf6dSrillig# $NetBSD: t_integration.sh,v 1.85 2025/01/03 02:14:52 rillig Exp $ 228604916Sjruoho# 328604916Sjruoho# Copyright (c) 2008, 2010 The NetBSD Foundation, Inc. 428604916Sjruoho# All rights reserved. 528604916Sjruoho# 628604916Sjruoho# Redistribution and use in source and binary forms, with or without 728604916Sjruoho# modification, are permitted provided that the following conditions 828604916Sjruoho# are met: 928604916Sjruoho# 1. Redistributions of source code must retain the above copyright 1028604916Sjruoho# notice, this list of conditions and the following disclaimer. 1128604916Sjruoho# 2. Redistributions in binary form must reproduce the above copyright 1228604916Sjruoho# notice, this list of conditions and the following disclaimer in the 1328604916Sjruoho# documentation and/or other materials provided with the distribution. 1428604916Sjruoho# 1528604916Sjruoho# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 1628604916Sjruoho# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 1728604916Sjruoho# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1828604916Sjruoho# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 1928604916Sjruoho# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2028604916Sjruoho# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2128604916Sjruoho# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2228604916Sjruoho# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2328604916Sjruoho# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2428604916Sjruoho# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2528604916Sjruoho# POSSIBILITY OF SUCH DAMAGE. 2628604916Sjruoho# 2728604916Sjruoho 28a127f918Srillig: "${lint1:=/usr/libexec/lint1}" 2962aa1078Srillig: "${archsubdir:=archsubdir_must_be_set}" 3010626f16Srillig 31*ecb2cf6dSrilligsrcdir="$(atf_get_srcdir)" 3228604916Sjruoho 3323e91a74Srilligconfigure_test_case() 34465f1176Srillig{ 3523e91a74Srillig local awk 36465f1176Srillig 37465f1176Srillig # shellcheck disable=SC2016 3823e91a74Srillig awk=' 39b468abcaSrillig BEGIN { 4015a1e938Srillig # see ./gen-platforms.sh 411603ef65Srillig platform["aarch64"] = "uchar lp64 long ldbl128" 421603ef65Srillig platform["alpha"] = "schar lp64 long ldbl64" 431603ef65Srillig platform["arm"] = "uchar ilp32 long ldbl64" 441603ef65Srillig platform["coldfire"] = "schar ilp32 int ldbl64" 451603ef65Srillig platform["hppa"] = "schar ilp32 long ldbl64" 461603ef65Srillig platform["i386"] = "schar ilp32 int ldbl96" 471603ef65Srillig platform["ia64"] = "schar lp64 long ldbl128" 481603ef65Srillig platform["m68000"] = "schar ilp32 int ldbl64" 491603ef65Srillig platform["m68k"] = "schar ilp32 int ldbl96" 501603ef65Srillig platform["mips"] = "schar ilp32 ???? ldbl64" 511603ef65Srillig platform["mips64"] = "schar ilp32 long ldbl128" 521603ef65Srillig platform["mipsn64"] = "schar lp64 long ldbl128" 531603ef65Srillig platform["or1k"] = "schar ilp32 int ldbl64" 541603ef65Srillig platform["powerpc"] = "uchar ilp32 int ldbl64" 551603ef65Srillig platform["powerpc64"] = "uchar lp64 long ldbl64" 561603ef65Srillig platform["riscv32"] = "schar ilp32 int ldbl64" 571603ef65Srillig platform["riscv64"] = "schar lp64 long ldbl64" 581603ef65Srillig platform["sh3"] = "schar ilp32 int ldbl64" 591603ef65Srillig platform["sparc"] = "schar ilp32 long ldbl64" 601603ef65Srillig platform["sparc64"] = "schar lp64 long ldbl128" 611603ef65Srillig platform["vax"] = "schar ilp32 long ldbl64" 621603ef65Srillig platform["x86_64"] = "schar lp64 long ldbl128" 633df3cc9cSrillig } 643df3cc9cSrillig 65b468abcaSrillig function platform_has(prop) { 661603ef65Srillig if (!match(prop, /^(schar|uchar|ilp32|lp64|int|long|ldbl64|ldbl96|ldbl128)$/)) { 678f4c7446Srillig printf("bad property '\''%s'\''\n", prop) > "/dev/stderr" 688f4c7446Srillig exit(1) 69b468abcaSrillig } 7062aa1078Srillig if (platform[archsubdir] == "") { 7162aa1078Srillig printf("bad archsubdir '\''%s'\''\n", archsubdir) > "/dev/stderr" 728f4c7446Srillig exit(1) 73b468abcaSrillig } 7462aa1078Srillig return match(" " platform[archsubdir] " ", " " prop " ") 753df3cc9cSrillig } 763df3cc9cSrillig 77465f1176Srillig BEGIN { 7862aa1078Srillig archsubdir = "'"$archsubdir"'" 79465f1176Srillig flags = "-g -S -w" 808f4c7446Srillig skip = "no" 81465f1176Srillig } 823df3cc9cSrillig $1 == "/*" && $2 ~ /^lint1-/ && $NF == "*/" { 833df3cc9cSrillig if ($2 == "lint1-flags:" || $2 == "lint1-extra-flags:") { 84465f1176Srillig if ($2 == "lint1-flags:") 85465f1176Srillig flags = "" 86465f1176Srillig for (i = 3; i < NF; i++) 87465f1176Srillig flags = flags " " $i 88dadd5dc3Srillig } else if ($2 == "lint1-only-if:") { 89b6d6b0c5Srillig for (i = 3; i < NF; i++) 90b6d6b0c5Srillig if (!platform_has($i)) 91dadd5dc3Srillig skip = "yes" 92dadd5dc3Srillig } else { 93dadd5dc3Srillig printf("bad lint1 comment '\''%s'\''\n", $2) > "/dev/stderr" 94dadd5dc3Srillig exit(1) 95465f1176Srillig } 9623e91a74Srillig } 973df3cc9cSrillig 98465f1176Srillig END { 9923e91a74Srillig printf("flags='\''%s'\''\n", flags) 1008f4c7446Srillig printf("skip=%s\n", skip) 101465f1176Srillig } 102465f1176Srillig ' 103465f1176Srillig 1048f4c7446Srillig local config 1058f4c7446Srillig config="$(awk "$awk" "$1")" || exit 1 1068f4c7446Srillig eval "$config" 1073454588eSrillig 1083454588eSrillig case "_${1%.c}_" in 1093454588eSrillig *_utf8_*) 1103454588eSrillig LC_ALL=en_US.UTF-8;; 1113454588eSrillig *) 1123454588eSrillig LC_ALL=C;; 1133454588eSrillig esac 1143454588eSrillig export LC_ALL 115465f1176Srillig} 116465f1176Srillig 117*ecb2cf6dSrilligtests_done='' 11828f87c2dSrilligcheck_lint1() 11928604916Sjruoho{ 120*ecb2cf6dSrillig local src="$1" 121*ecb2cf6dSrillig local base="${src##*/}" 122*ecb2cf6dSrillig local exp="${base%.c}.exp" 1232a55fba3Srillig local exp_ln="${src%.c}.exp-ln" 124*ecb2cf6dSrillig local wrk_ln="${base%.c}.ln" 12523e91a74Srillig local flags="" 12623e91a74Srillig local skip="" 12705e93501Srillig 1289e914536Srillig if [ ! -f "$exp_ln" ]; then 1299e914536Srillig exp_ln='/dev/null' 13010626f16Srillig wrk_ln='/dev/null' 1313f5e7494Srillig fi 1323f5e7494Srillig 1338f4c7446Srillig configure_test_case "$src" # sets 'skip' and 'flags' 13423e91a74Srillig 13523e91a74Srillig if [ "$skip" = "yes" ]; then 136*ecb2cf6dSrillig return 13723e91a74Srillig fi 138*ecb2cf6dSrillig tests_done="$tests_done $src" 13923e91a74Srillig 140465f1176Srillig # shellcheck disable=SC2086 141456342a5Srillig atf_check -s 'exit' -o "save:$exp" \ 14210626f16Srillig "$lint1" $flags "$src" "$wrk_ln" 1433f5e7494Srillig 14423e91a74Srillig if [ "$exp_ln" != '/dev/null' ]; then 14527a3cefcSrillig # Remove comments and whitespace from the .exp-ln file. 14627a3cefcSrillig sed \ 14727a3cefcSrillig -e '/^#/d' \ 14827a3cefcSrillig -e '/^$/d' \ 14927a3cefcSrillig -e 's,^#.*,,' \ 15027a3cefcSrillig -e 's,\([^%]\)[[:space:]],\1,g' \ 15127a3cefcSrillig < "$exp_ln" > "./${exp_ln##*/}" 15227a3cefcSrillig 15327a3cefcSrillig atf_check -o "file:${exp_ln##*/}" cat "$wrk_ln" 15428f87c2dSrillig fi 15528604916Sjruoho} 15628604916Sjruoho 157*ecb2cf6dSrilligatf_test_case lint1 158*ecb2cf6dSrilliglint1_head() { 159*ecb2cf6dSrillig atf_set 'require.progs' "$lint1" 160*ecb2cf6dSrillig} 161*ecb2cf6dSrilliglint1_body() { 162*ecb2cf6dSrillig local src 163*ecb2cf6dSrillig 164*ecb2cf6dSrillig for src in "$srcdir"/*.c; do 165*ecb2cf6dSrillig check_lint1 "$src" 166*ecb2cf6dSrillig done 167*ecb2cf6dSrillig 168*ecb2cf6dSrillig # shellcheck disable=SC2086 169*ecb2cf6dSrillig atf_check lua "$srcdir/check-expect.lua" $tests_done 170*ecb2cf6dSrillig} 171*ecb2cf6dSrillig 172e3ff15fbSrilligatf_init_test_cases() 17328604916Sjruoho{ 174*ecb2cf6dSrillig atf_add_test_case lint1 17528604916Sjruoho} 176