xref: /aosp_15_r20/external/strace/tests-m32/gen_tests.sh (revision cf84ac9a129d8ea9952db616b4e9b904c4bdde56)
1*cf84ac9aSAndroid Build Coastguard Worker#!/bin/sh -efu
2*cf84ac9aSAndroid Build Coastguard Worker#
3*cf84ac9aSAndroid Build Coastguard Worker# Copyright (c) 2017 Dmitry V. Levin <[email protected]>
4*cf84ac9aSAndroid Build Coastguard Worker# Copyright (c) 2017-2018 The strace developers.
5*cf84ac9aSAndroid Build Coastguard Worker# All rights reserved.
6*cf84ac9aSAndroid Build Coastguard Worker#
7*cf84ac9aSAndroid Build Coastguard Worker# Redistribution and use in source and binary forms, with or without
8*cf84ac9aSAndroid Build Coastguard Worker# modification, are permitted provided that the following conditions
9*cf84ac9aSAndroid Build Coastguard Worker# are met:
10*cf84ac9aSAndroid Build Coastguard Worker# 1. Redistributions of source code must retain the above copyright
11*cf84ac9aSAndroid Build Coastguard Worker#    notice, this list of conditions and the following disclaimer.
12*cf84ac9aSAndroid Build Coastguard Worker# 2. Redistributions in binary form must reproduce the above copyright
13*cf84ac9aSAndroid Build Coastguard Worker#    notice, this list of conditions and the following disclaimer in the
14*cf84ac9aSAndroid Build Coastguard Worker#    documentation and/or other materials provided with the distribution.
15*cf84ac9aSAndroid Build Coastguard Worker# 3. The name of the author may not be used to endorse or promote products
16*cf84ac9aSAndroid Build Coastguard Worker#    derived from this software without specific prior written permission.
17*cf84ac9aSAndroid Build Coastguard Worker#
18*cf84ac9aSAndroid Build Coastguard Worker# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19*cf84ac9aSAndroid Build Coastguard Worker# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20*cf84ac9aSAndroid Build Coastguard Worker# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21*cf84ac9aSAndroid Build Coastguard Worker# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22*cf84ac9aSAndroid Build Coastguard Worker# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23*cf84ac9aSAndroid Build Coastguard Worker# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24*cf84ac9aSAndroid Build Coastguard Worker# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25*cf84ac9aSAndroid Build Coastguard Worker# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26*cf84ac9aSAndroid Build Coastguard Worker# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27*cf84ac9aSAndroid Build Coastguard Worker# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*cf84ac9aSAndroid Build Coastguard Worker
29*cf84ac9aSAndroid Build Coastguard Workerusage()
30*cf84ac9aSAndroid Build Coastguard Worker{
31*cf84ac9aSAndroid Build Coastguard Worker	cat >&2 <<EOF
32*cf84ac9aSAndroid Build Coastguard WorkerUsage: $0 [<input> [<output>]]
33*cf84ac9aSAndroid Build Coastguard Worker
34*cf84ac9aSAndroid Build Coastguard WorkerGenerate test script(s) from <input> table.
35*cf84ac9aSAndroid Build Coastguard WorkerIf a <output> is specified, generate the script for this test only,
36*cf84ac9aSAndroid Build Coastguard Workerotherwise generate scripts for all tests specified in <input> table.
37*cf84ac9aSAndroid Build Coastguard WorkerEOF
38*cf84ac9aSAndroid Build Coastguard Worker	exit 1
39*cf84ac9aSAndroid Build Coastguard Worker}
40*cf84ac9aSAndroid Build Coastguard Worker
41*cf84ac9aSAndroid Build Coastguard Workerinput="${0%/*}/gen_tests.in"
42*cf84ac9aSAndroid Build Coastguard Worker[ $# -eq 0 ] || { input="$1"; shift; }
43*cf84ac9aSAndroid Build Coastguard Workeroutput=
44*cf84ac9aSAndroid Build Coastguard Worker[ $# -eq 0 ] || { output="$1"; shift; }
45*cf84ac9aSAndroid Build Coastguard Worker[ $# -eq 0 ] || usage
46*cf84ac9aSAndroid Build Coastguard Worker
47*cf84ac9aSAndroid Build Coastguard Workerif [ -n "$output" ]; then
48*cf84ac9aSAndroid Build Coastguard Worker	match="${output##*/}"
49*cf84ac9aSAndroid Build Coastguard Worker	match="${match%.gen.test}"
50*cf84ac9aSAndroid Build Coastguard Worker	[ -n "$match" ] || usage
51*cf84ac9aSAndroid Build Coastguard Workerelse
52*cf84ac9aSAndroid Build Coastguard Worker	match=
53*cf84ac9aSAndroid Build Coastguard Worker	dir="$(dirname "$input")"
54*cf84ac9aSAndroid Build Coastguard Workerfi
55*cf84ac9aSAndroid Build Coastguard Worker
56*cf84ac9aSAndroid Build Coastguard Workernames=
57*cf84ac9aSAndroid Build Coastguard Worker
58*cf84ac9aSAndroid Build Coastguard Workerwhile read -r name arg0 args; do {
59*cf84ac9aSAndroid Build Coastguard Worker	[ -n "${name###*}" ] || continue
60*cf84ac9aSAndroid Build Coastguard Worker	if [ -z "$match" ]; then
61*cf84ac9aSAndroid Build Coastguard Worker		names="$names $name"
62*cf84ac9aSAndroid Build Coastguard Worker		output="$dir/$name.gen.test"
63*cf84ac9aSAndroid Build Coastguard Worker	else
64*cf84ac9aSAndroid Build Coastguard Worker		[ "$match" = "$name" ] || continue
65*cf84ac9aSAndroid Build Coastguard Worker	fi
66*cf84ac9aSAndroid Build Coastguard Worker
67*cf84ac9aSAndroid Build Coastguard Worker	hdr="\
68*cf84ac9aSAndroid Build Coastguard Worker#!/bin/sh -efu
69*cf84ac9aSAndroid Build Coastguard Worker# Generated by $0 from $input ($name $arg0 $args); do not edit."
70*cf84ac9aSAndroid Build Coastguard Worker
71*cf84ac9aSAndroid Build Coastguard Worker	case "$arg0" in
72*cf84ac9aSAndroid Build Coastguard Worker		+*)
73*cf84ac9aSAndroid Build Coastguard Worker		cat <<-EOF
74*cf84ac9aSAndroid Build Coastguard Worker		$hdr
75*cf84ac9aSAndroid Build Coastguard Worker		set -- $args
76*cf84ac9aSAndroid Build Coastguard Worker		. "\${srcdir=.}/${arg0#+}"
77*cf84ac9aSAndroid Build Coastguard Worker		EOF
78*cf84ac9aSAndroid Build Coastguard Worker		;;
79*cf84ac9aSAndroid Build Coastguard Worker
80*cf84ac9aSAndroid Build Coastguard Worker		''|-*)
81*cf84ac9aSAndroid Build Coastguard Worker		cat <<-EOF
82*cf84ac9aSAndroid Build Coastguard Worker		$hdr
83*cf84ac9aSAndroid Build Coastguard Worker		. "\${srcdir=.}/init.sh"
84*cf84ac9aSAndroid Build Coastguard Worker		run_strace_match_diff $arg0 $args
85*cf84ac9aSAndroid Build Coastguard Worker		EOF
86*cf84ac9aSAndroid Build Coastguard Worker		;;
87*cf84ac9aSAndroid Build Coastguard Worker
88*cf84ac9aSAndroid Build Coastguard Worker		*)
89*cf84ac9aSAndroid Build Coastguard Worker		cat <<-EOF
90*cf84ac9aSAndroid Build Coastguard Worker		$hdr
91*cf84ac9aSAndroid Build Coastguard Worker		. "\${srcdir=.}/init.sh"
92*cf84ac9aSAndroid Build Coastguard Worker		$arg0 $args
93*cf84ac9aSAndroid Build Coastguard Worker		EOF
94*cf84ac9aSAndroid Build Coastguard Worker		;;
95*cf84ac9aSAndroid Build Coastguard Worker	esac > "$output"
96*cf84ac9aSAndroid Build Coastguard Worker
97*cf84ac9aSAndroid Build Coastguard Worker	chmod a+x "$output"
98*cf84ac9aSAndroid Build Coastguard Worker} < /dev/null; done < "$input"
99*cf84ac9aSAndroid Build Coastguard Worker
100*cf84ac9aSAndroid Build Coastguard Workerif [ -n "$names" ]; then
101*cf84ac9aSAndroid Build Coastguard Worker	{
102*cf84ac9aSAndroid Build Coastguard Worker		printf '# Generated by %s from %s; do not edit.\n' "$0" "$input"
103*cf84ac9aSAndroid Build Coastguard Worker		printf 'GEN_TESTS ='
104*cf84ac9aSAndroid Build Coastguard Worker		printf ' %s.gen.test' $names
105*cf84ac9aSAndroid Build Coastguard Worker		echo
106*cf84ac9aSAndroid Build Coastguard Worker		target='$(srcdir)/%s.gen.test'
107*cf84ac9aSAndroid Build Coastguard Worker		dep1='$(abs_srcdir)/gen_tests.sh'
108*cf84ac9aSAndroid Build Coastguard Worker		dep2='$(srcdir)/gen_tests.in'
109*cf84ac9aSAndroid Build Coastguard Worker		recipe='$(AM_V_GEN) $^ $@'
110*cf84ac9aSAndroid Build Coastguard Worker		printf "\\n$target: $dep1 $dep2\\n\\t$recipe\\n" $names
111*cf84ac9aSAndroid Build Coastguard Worker	} > "$dir/gen_tests.am"
112*cf84ac9aSAndroid Build Coastguard Workerfi
113