1#!/bin/sh
2# Merge test results of individual tests or subdirectories.
3# Copyright (C) 2014-2022 Free Software Foundation, Inc.
4# This file is part of the GNU C Library.
5
6# The GNU C Library is free software; you can redistribute it and/or
7# modify it under the terms of the GNU Lesser General Public
8# License as published by the Free Software Foundation; either
9# version 2.1 of the License, or (at your option) any later version.
10
11# The GNU C Library is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14# Lesser General Public License for more details.
15
16# You should have received a copy of the GNU Lesser General Public
17# License along with the GNU C Library; if not, see
18# <https://www.gnu.org/licenses/>.
19
20# usage: merge-test-results.sh -s objpfx subdir test-name...
21# (subdirectory tests; empty subdir at top level), or
22#        merge-test-results.sh -t objpfx subdir-file-name subdir...
23# (top-level merge)
24
25set -e
26
27type=$1
28objpfx=$2
29shift 2
30
31case $type in
32  -s)
33    subdir=$1
34    shift
35    subdir=${subdir:+$subdir/}
36    for t in "$@"; do
37      if [ -s "$objpfx$t.test-result" ]; then
38	# This loop is called thousands of times even when there's
39	# nothing to do.  Avoid using non-built-in commands (like
40	# /bin/head) where possible.  We assume "echo" is typically a
41	# built-in.
42	IFS= read -r line < "$objpfx$t.test-result"
43	echo "$line"
44      else
45	echo "UNRESOLVED: $subdir$t"
46      fi
47    done
48    ;;
49
50  -t)
51    subdir_file_name=$1
52    shift
53    for d in "$@"; do
54      if [ -f "$objpfx$d/$subdir_file_name" ]; then
55	cat "$objpfx$d/$subdir_file_name"
56      else
57	echo "ERROR: test results for $d directory missing"
58      fi
59    done
60    ;;
61
62  *)
63    echo "unknown type $type" >&2
64    exit 1
65    ;;
66esac
67