summaryrefslogtreecommitdiffstats
path: root/tests/ts/build-sys/config
blob: 2d1291330d64aef71e3e185c74026341f08db57b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/bin/bash

# Copyright (C) 2011 Karel Zak <kzak@redhat.com>

TS_TOPDIR="${0%/*}/../.."
TS_DESC="config"

# Don't execute this test by default, --force required
TS_OPTIONAL="yes"

. "$TS_TOPDIR"/functions.sh
ts_init "$*"

ts_check_prog "readelf"
ts_check_prog "file"

config_gen_dir="$top_srcdir/tools"
. $config_gen_dir/config-gen-functions.sh

[ -n "$CFLAGS" ] && export CFLAGS="$CFLAGS"

ts_cd $top_builddir && make -j clean &> /dev/null

wanted=$(ts_option_argument "conf" "$*")

function make_conf {
	local conf="$1"

	ts_init_subtest $(basename $conf | sed 's/\.conf//')

	opts=$(ul_get_configuration $conf | sed 's/--enable-asan//')

	olddir=$(pwd)
	ts_cd $top_builddir

	./configure $opts &> /dev/null
	make -j &> /dev/null

	bins=$(find . -type f \( -perm -u=x -o -perm -g=x -o -perm -o=x \) | sort)
	for b in $bins; do
		libs=$(readelf --dynamic $b 2> /dev/null   | \
			awk '/NEEDED/ { print $5 }' | \
			sed 's:\[::g; s:\..*::g; s:^libc$::g; s:ld\-.*::g' | \
			sort -u | tr '\n' ' ')

		if [ -n "$libs" ]; then
			echo "$(basename $b): $libs" >> $TS_OUTPUT
		else
			fres=$(file $b)
			case $fres in
			*statically*)
				echo "$(basename $b): STATIC" >> $TS_OUTPUT
				;;
			*) # ignore scripts, ...etc.
				;;
			esac
		fi
	done

	# clean the tree, but exclude tests/{diff,output} dirs
	#
	[ -d tests/diff ]   && mv tests/diff   tests/diff.save
	[ -d tests/output ] && mv tests/output tests/output.save

	make -j clean &> /dev/null

	[ -d tests/diff.save ]   && mv tests/diff.save   tests/diff
	[ -d tests/output.save ] && mv tests/output.save tests/output

	ts_cd $olddir
	ts_finalize_subtest
}


if [ -n "$wanted" ]; then
	make_conf $wanted
else
	for x in $config_gen_dir/config-gen.d/*.conf; do
		make_conf "$x"
	done
fi

ts_finalize