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