]> git.ipfire.org Git - thirdparty/util-linux.git/blob - .travis-functions.sh
travis: don't ask for Ubuntu release on XOS
[thirdparty/util-linux.git] / .travis-functions.sh
1 #!/bin/bash
2
3 #
4 # .travis-functions.sh:
5 # - helper functions to be sourced from .travis.yml
6 # - designed to respect travis' environment but testing locally is possible
7 #
8 # Variables:
9 #
10 # TS_OPT_<name>_<something>=yes
11 # - forces tests/functions.sh:ts_has_option() to return "yes" for
12 # variable <something> in test <name>
13 #
14 # TESTS_OPTIONS=
15 # TESTS_PARALLEL=
16 # TESTS_COMMAND=
17 # - overwrites default from tests/Makemodule.am
18 #
19 # Do not use TS_* prefix for any travis or build-system stuff. This prefix is
20 # exclusively used by tests/ stuff.
21 #
22
23 if [ ! -f "configure.ac" ]; then
24 echo ".travis-functions.sh must be sourced from source dir" >&2
25 return 1 || exit 1
26 fi
27
28 ## some config settings
29 # travis docs say we get 1.5 CPUs
30 MAKE="make -j2"
31 DUMP_CONFIG_LOG="short"
32
33 # workaround ugly warning on travis OSX,
34 # see https://github.com/direnv/direnv/issues/210
35 shell_session_update() { :; }
36
37 function xconfigure
38 {
39 which "$CC"
40 "$CC" --version
41
42 ./configure "$@" $OSX_CONFOPTS
43 err=$?
44 if [ "$DUMP_CONFIG_LOG" = "short" ]; then
45 grep -B1 -A10000 "^## Output variables" config.log | grep -v "_FALSE="
46 elif [ "$DUMP_CONFIG_LOG" = "full" ]; then
47 cat config.log
48 fi
49 return $err
50 }
51
52 # TODO: integrate checkusage into our regular tests and remove this function
53 function make_checkusage
54 {
55 local tmp
56 # memory leaks are ignored here. See https://github.com/karelzak/util-linux/issues/1077
57 if ! tmp=$(ASAN_OPTIONS="$ASAN_OPTIONS:detect_leaks=0" $MAKE checkusage 2>&1) || test -n "$tmp"; then
58 echo "$tmp"
59 echo "make checkusage failed" >&2
60 return 1
61 fi
62 }
63
64 function check_nonroot
65 {
66 local make_opts="$MAKE_CHECK_OPTS --show-diff --parsable"
67 local conf_opts="\
68 --disable-use-tty-group \
69 --disable-makeinstall-chown \
70 --enable-all-programs"
71
72 if [ "$TRAVIS_OS_NAME" != "osx" ]; then
73 conf_opts="$conf_opts --enable-asan --enable-ubsan"
74 make_opts="$make_opts --memcheck-asan --memcheck-ubsan"
75 fi
76
77 if [ "$TRAVIS_OS_NAME" != "osx" -a "$TRAVIS_DIST" != "precise" ]; then
78 conf_opts="$conf_opts --enable-werror"
79 fi
80
81 xconfigure $conf_opts || return
82 $MAKE || return
83
84 osx_prepare_check
85
86 # TESTS_* overwrites default from tests/Makemodule.am
87 $MAKE check TESTS_OPTIONS="$make_opts" || return
88
89 make_checkusage || return
90
91 $MAKE install DESTDIR=/tmp/dest || return
92 }
93
94 function check_root
95 {
96 local make_opts="$MAKE_CHECK_OPTS --show-diff"
97 local conf_opts="--enable-all-programs"
98
99 if [ "$TRAVIS_OS_NAME" != "osx" ]; then
100 conf_opts="$conf_opts --enable-asan --enable-ubsan"
101 make_opts="$make_opts --memcheck-asan --memcheck-ubsan"
102 fi
103
104 if [ "$TRAVIS_OS_NAME" != "osx" -a "$TRAVIS_DIST" != "precise" ]; then
105 conf_opts="$conf_opts --enable-werror"
106 fi
107
108 xconfigure $conf_opts || return
109 $MAKE || return
110
111 # compile tests only
112 $MAKE check-programs || return
113
114 # Modify environment for OSX
115 osx_prepare_check
116
117 # TESTS_* overwrites default from tests/Makemodule.am
118 sudo -E $MAKE check TESTS_PARALLEL="" TESTS_OPTIONS="$make_opts" || return
119
120 # root on osx has not enough permission for make install ;)
121 [ "$TRAVIS_OS_NAME" = "osx" ] && return
122
123 # keep PATH to make sure sudo would find $CC
124 sudo env "PATH=$PATH" $MAKE install || return
125 }
126
127 function check_dist
128 {
129 xconfigure \
130 || return
131 $MAKE distcheck || return
132 }
133
134 function travis_install_script
135 {
136 local ubuntu_release
137 local additional_packages=()
138 local clang_version gcc_version
139
140 if [ "$TRAVIS_OS_NAME" = "osx" ]; then
141 osx_install_script
142 return
143 fi
144
145 ubuntu_release=$(lsb_release -cs)
146
147 # install required packages
148 sudo bash -c "echo 'deb-src http://archive.ubuntu.com/ubuntu/ $ubuntu_release main restricted universe multiverse' >>/etc/apt/sources.list"
149
150 if [[ "$CC" =~ ^clang-([0-9]+)$ ]]; then
151 clang_version=${BASH_REMATCH[1]}
152 # the following snippet was borrowed from https://apt.llvm.org/llvm.sh
153 wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
154 sudo add-apt-repository -y "deb http://apt.llvm.org/$ubuntu_release/ llvm-toolchain-$ubuntu_release-$clang_version main"
155 additional_packages+=(clang-$clang_version llvm-$clang_version)
156 elif [[ "$CC" =~ ^gcc-([0-9]+)$ ]]; then
157 gcc_version=${BASH_REMATCH[1]}
158 sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
159 additional_packages+=(gcc-$gcc_version)
160 fi
161
162 sudo apt-get -qq update --fix-missing
163 sudo apt-get build-dep -y util-linux
164 sudo apt-get install -qq >/dev/null \
165 bc \
166 btrfs-tools \
167 dnsutils \
168 libcap-ng-dev \
169 libncursesw5-dev \
170 libpam-dev \
171 libudev-dev \
172 gtk-doc-tools \
173 mdadm \
174 ntp \
175 socat \
176 "${additional_packages[@]}" \
177 || return
178
179 # install only if available (e.g. Ubuntu Trusty)
180 sudo apt-get install -qq >/dev/null \
181 libsystemd-daemon-dev \
182 libsystemd-journal-dev \
183 || true
184 }
185
186 function osx_install_script
187 {
188 brew update >/dev/null
189
190 brew install gettext ncurses socat xz
191 brew link --force gettext
192 brew link --force ncurses
193
194 OSX_CONFOPTS="
195 --disable-ipcrm \
196 --disable-ipcs \
197 "
198
199 # workaround: glibtoolize could not find sed
200 export SED="sed"
201 }
202
203 function osx_prepare_check
204 {
205 [ "$TRAVIS_OS_NAME" = "osx" ] || return 0
206
207 # these ones only need to be gnu for our test-suite
208 brew install coreutils findutils gnu-tar gnu-sed
209
210 # symlink minimally needed gnu commands into PATH
211 mkdir ~/bin
212 for cmd in readlink seq timeout truncate find xargs tar sed; do
213 ln -s /usr/local/bin/g$cmd $HOME/bin/$cmd
214 done
215 hash -r
216
217 export TS_OPT_col_multibyte_known_fail=yes
218 export TS_OPT_colcrt_regressions_known_fail=yes
219 export TS_OPT_column_invalid_multibyte_known_fail=yes
220 }
221
222 function travis_before_script
223 {
224 set -o xtrace
225
226 ./autogen.sh
227 ret=$?
228
229 set +o xtrace
230 return $ret
231 }
232
233 function travis_script
234 {
235 local ret
236 set -o xtrace
237
238 case "$MAKE_CHECK" in
239 nonroot)
240 check_nonroot
241 ;;
242 root)
243 check_root
244 ;;
245 dist)
246 check_dist
247 ;;
248 *)
249 echo "error, check environment (travis.yml)" >&2
250 false
251 ;;
252 esac
253
254 # We exit here with case-switch return value!
255 ret=$?
256 set +o xtrace
257 return $ret
258 }
259
260 function travis_after_script
261 {
262 local diff_dir
263 local tmp
264
265 # find diff dir from check as well as from distcheck
266 diff_dir=$(find . -type d -name "diff" | grep "tests/diff" | head -n 1)
267 if [ -d "$diff_dir" ]; then
268 tmp=$(find "$diff_dir" -type f | sort)
269 echo -en "dump test diffs:\n${tmp}\n"
270 echo "$tmp" | xargs cat
271 fi
272 }