forked from util-linux/util-linux
-
Notifications
You must be signed in to change notification settings - Fork 0
/
.travis-functions.sh
executable file
·241 lines (199 loc) · 4.79 KB
/
.travis-functions.sh
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
#!/bin/bash
#
# .travis-functions.sh:
# - helper functions to be sourced from .travis.yml
# - designed to respect travis' environment but testing locally is possible
#
# Variables:
#
# TS_OPT_<name>_<something>=yes
# - forces tests/functions.sh:ts_has_option() to return "yes" for
# variable <something> in test <name>
#
# TESTS_OPTIONS=
# TESTS_PARALLEL=
# TESTS_COMMAND=
# - overwrites default from tests/Makemodule.am
#
# Do not use TS_* prefix for any travis or build-system stuff. This prefix is
# exclusively used by tests/ stuff.
#
if [ ! -f "configure.ac" ]; then
echo ".travis-functions.sh must be sourced from source dir" >&2
return 1 || exit 1
fi
## some config settings
# travis docs say we get 1.5 CPUs
MAKE="make -j2"
DUMP_CONFIG_LOG="short"
# workaround ugly warning on travis OSX,
# see https://github.com/direnv/direnv/issues/210
shell_session_update() { :; }
function xconfigure
{
which "$CC"
"$CC" --version
./configure "$@" $OSX_CONFOPTS
err=$?
if [ "$DUMP_CONFIG_LOG" = "short" ]; then
grep -B1 -A10000 "^## Output variables" config.log | grep -v "_FALSE="
elif [ "$DUMP_CONFIG_LOG" = "full" ]; then
cat config.log
fi
return $err
}
# TODO: integrate checkusage into our regular tests and remove this function
function make_checkusage
{
local tmp
if ! tmp=$($MAKE checkusage 2>&1) || test -n "$tmp"; then
echo "$tmp"
echo "make checkusage failed" >&2
return 1
fi
}
function check_nonroot
{
local make_opts="$MAKE_CHECK_OPTS --show-diff --parsable"
local conf_opts="\
--disable-use-tty-group \
--disable-makeinstall-chown \
--enable-all-programs"
if [ "$TRAVIS_OS_NAME" != "osx" ]; then
conf_opts="$conf_opts --enable-asan"
make_opts="$make_opts --memcheck-asan"
fi
xconfigure $conf_opts || return
$MAKE || return
osx_prepare_check
# TESTS_* overwrites default from tests/Makemodule.am
$MAKE check TESTS_OPTIONS="$make_opts" || return
make_checkusage || return
$MAKE install DESTDIR=/tmp/dest || return
}
function check_root
{
local make_opts="$MAKE_CHECK_OPTS --show-diff"
local conf_opts="--enable-all-programs"
if [ "$TRAVIS_OS_NAME" != "osx" ]; then
conf_opts="$conf_opts --enable-asan"
make_opts="$make_opts --memcheck-asan"
fi
xconfigure $conf_opts || return
$MAKE || return
# compile tests only
$MAKE check-programs || return
# Modify environment for OSX
osx_prepare_check
# TESTS_* overwrites default from tests/Makemodule.am
sudo -E $MAKE check "TESTS_PARALLEL=''" TESTS_OPTIONS="$make_opts" || return
# root on osx has not enough permission for make install ;)
[ "$TRAVIS_OS_NAME" = "osx" ] && return
# keep PATH to make sure sudo would find $CC
sudo env "PATH=$PATH" $MAKE install || return
}
function check_dist
{
xconfigure \
|| return
$MAKE distcheck || return
}
function travis_install_script
{
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
osx_install_script
return
fi
# install required packages
sudo apt-get -qq update --fix-missing
sudo apt-get install -qq >/dev/null \
bc \
btrfs-tools \
dnsutils \
libcap-ng-dev \
libncursesw5-dev \
libpam-dev \
libudev-dev \
gtk-doc-tools \
mdadm \
ntp \
socat \
|| return
# install only if available (e.g. Ubuntu Trusty)
sudo apt-get install -qq >/dev/null \
libsystemd-daemon-dev \
libsystemd-journal-dev \
|| true
}
function osx_install_script
{
brew update >/dev/null
brew install gettext ncurses socat xz
brew link --force gettext
brew link --force ncurses
OSX_CONFOPTS="
--disable-ipcrm \
--disable-ipcs \
"
# workaround: glibtoolize could not find sed
export SED="sed"
}
function osx_prepare_check
{
[ "$TRAVIS_OS_NAME" = "osx" ] || return 0
# these ones only need to be gnu for our test-suite
brew install coreutils findutils gnu-tar gnu-sed
# symlink minimally needed gnu commands into PATH
mkdir ~/bin
for cmd in readlink seq timeout truncate find xargs tar sed; do
ln -s /usr/local/bin/g$cmd $HOME/bin/$cmd
done
hash -r
export TS_OPT_col_multibyte_known_fail=yes
export TS_OPT_colcrt_regressions_known_fail=yes
export TS_OPT_column_invalid_multibyte_known_fail=yes
}
function travis_before_script
{
set -o xtrace
./autogen.sh
ret=$?
set +o xtrace
return $ret
}
function travis_script
{
local ret
set -o xtrace
case "$MAKE_CHECK" in
nonroot)
check_nonroot
;;
root)
check_root
;;
dist)
check_dist
;;
*)
echo "error, check environment (travis.yml)" >&2
false
;;
esac
# We exit here with case-switch return value!
ret=$?
set +o xtrace
return $ret
}
function travis_after_script
{
local diff_dir
local tmp
# find diff dir from check as well as from distcheck
diff_dir=$(find . -type d -name "diff" | grep "tests/diff" | head -n 1)
if [ -d "$diff_dir" ]; then
tmp=$(find "$diff_dir" -type f | sort)
echo -en "dump test diffs:\n${tmp}\n"
echo "$tmp" | xargs cat
fi
}