Files
wxWidgets/build/tools/travis-ci.sh
Vadim Zeitlin b78508615a Explicitly install decorator 4.4.2 as httpbin dependency
The latest version doesn't work with Python 2 any more and installing it
breaks Travis CI builds still using Python 2.
2021-04-03 19:41:55 +02:00

197 lines
6.2 KiB
Bash
Executable File

#!/bin/bash
#
# This script is used by Travis CI to configure, build and test wxWidgets
set -e
wxPROC_COUNT=`getconf _NPROCESSORS_ONLN`
((wxPROC_COUNT++))
wxBUILD_ARGS="-j$wxPROC_COUNT"
# Setting this variable suppresses "Error retrieving accessibility bus address"
# messages from WebKit tests that we're not interested in.
export NO_AT_BRIDGE=1
launch_httpbin() {
echo 'travis_fold:start:httpbin'
echo 'Running httpbin...'
case "$(uname -s)" in
Linux)
dist_codename=$(lsb_release --codename --short)
;;
esac
# We need to disable SSL certificate checking under Trusty because Python
# version there is too old to support SNI.
case "$dist_codename" in
trusty)
pip_args='--trusted-host files.pythonhosted.org'
;;
esac
# decorator 5+ is incompatible with Python 2 which we still use under in
# some builds, so explicitly select version 4.4 which is known to work.
pip install decorator==4.4.2 httpbin --user $pip_args
python -m httpbin.core &
WX_TEST_WEBREQUEST_URL="http://localhost:5000"
export WX_TEST_WEBREQUEST_URL
echo 'travis_fold:end:httpbin'
}
case $wxTOOLSET in
cmake)
if [ -z $wxCMAKE_TESTS ]; then wxCMAKE_TESTS=CONSOLE_ONLY; fi
if [ -z $wxCMAKE_SAMPLES ]; then wxCMAKE_SAMPLES=SOME; fi
if [ "$wxCMAKE_GENERATOR" == "Xcode" ]; then
wxBUILD_ARGS="-jobs $wxPROC_COUNT -quiet"
fi
cmake --version
echo 'travis_fold:start:configure'
echo 'Configuring...'
mkdir build_cmake
pushd build_cmake
cmake -G "$wxCMAKE_GENERATOR" $wxCMAKE_DEFINES -D wxBUILD_SAMPLES=$wxCMAKE_SAMPLES -D wxBUILD_TESTS=$wxCMAKE_TESTS ..
echo 'travis_fold:end:configure'
if [ "$wxCMAKE_GENERATOR" != "Xcode" ]; then
echo 'travis_fold:start:building'
echo 'Building...'
cmake --build . -- $wxBUILD_ARGS
echo 'travis_fold:end:building'
fi
echo 'travis_fold:start:install'
if [ "$wxCMAKE_GENERATOR" == "Xcode" ]; then echo -n 'Building and '; fi
echo 'Installing...'
sudo env "PATH=$PATH" cmake --build . --target install -- $wxBUILD_ARGS
echo 'travis_fold:end:install'
if [ "$wxCMAKE_TESTS" != "OFF" ]; then
launch_httpbin
echo 'travis_fold:start:testing'
echo 'Testing...'
ctest -V -C Debug -E "test_drawing" --output-on-failure --interactive-debug-mode 0 .
echo 'travis_fold:end:testing'
fi
echo 'travis_fold:start:testinstall'
echo 'Testing installation...'
popd
mkdir build_cmake_install_test
pushd build_cmake_install_test
cmake -G "$wxCMAKE_GENERATOR" $wxCMAKE_DEFINES ../samples/minimal
cmake --build . -- $wxBUILD_ARGS
popd
echo 'travis_fold:end:testinstall'
;;
*)
echo 'travis_fold:start:configure'
echo 'Configuring...'
wxCONFIGURE_OPTIONS="--disable-optimise $wxCONFIGURE_FLAGS"
if [ -n "$wxGTK_VERSION" ]; then
wxCONFIGURE_OPTIONS="--with-gtk=$wxGTK_VERSION $wxCONFIGURE_OPTIONS"
fi
./configure $wxCONFIGURE_OPTIONS --disable-debug_info || rc=$?
if [ -n "$rc" ]; then
echo '*** Configuring failed, contents of config.log follows: ***'
echo '-----------------------------------------------------------'
cat config.log
echo '-----------------------------------------------------------'
exit $rc
fi
echo 'travis_fold:end:configure'
if [ "$wxALLOW_WARNINGS" != 1 ]; then
case "$TRAVIS_COMPILER" in
clang)
allow_warn_opt="-Wno-error=#warnings"
;;
gcc)
allow_warn_opt="-Wno-error=cpp"
;;
*)
echo "*** Unknown compiler: $TRAVIS_COMPILER ***"
;;
esac
error_opts="-Werror $allow_warn_opt"
wxMAKEFILE_CXXFLAGS="$wxMAKEFILE_CXXFLAGS $error_opts"
wxMAKEFILE_ERROR_CXXFLAGS=("CXXFLAGS=$error_opts")
else
wxMAKEFILE_ERROR_CXXFLAGS=()
fi
wxMAKEFILE_FLAGS=()
if [ -n "$wxMAKEFILE_CXXFLAGS" ]; then
wxMAKEFILE_FLAGS+=("CXXFLAGS=$wxMAKEFILE_CXXFLAGS")
fi
if [ -n "$wxMAKEFILE_LDFLAGS" ]; then
wxMAKEFILE_FLAGS+=("LDFLAGS=$wxMAKEFILE_LDFLAGS")
fi
echo 'travis_fold:start:building'
echo 'Building...'
make -k $wxBUILD_ARGS "${wxMAKEFILE_ERROR_CXXFLAGS[@]}"
echo 'travis_fold:end:building'
echo 'travis_fold:start:tests'
echo 'Building tests...'
[ "$wxSKIP_GUI" = 1 ] || make -C tests $wxBUILD_ARGS failtest
make -k -C tests $wxBUILD_ARGS "${wxMAKEFILE_FLAGS[@]}"
echo 'travis_fold:end:tests'
if [ "$wxSKIP_TESTING" = 1 ]; then
echo 'Skipping running tests'
exit 0
fi
launch_httpbin
echo 'travis_fold:start:testing'
echo 'Testing...'
pushd tests
./test
popd
echo 'travis_fold:end:testing'
if [ "$wxSKIP_GUI" = 1 ]; then
echo 'Skipping the rest of tests for non-GUI build.'
exit 0
fi
if [ "$wxUSE_XVFB" = 1 ]; then
echo 'travis_fold:start:testing_gui'
echo 'Testing GUI using Xvfb...'
pushd tests
xvfb-run -a -s '-screen 0 1600x1200x24' ./test_gui
popd
echo 'travis_fold:end:testing_gui'
fi
echo 'travis_fold:start:samples'
echo 'Building samples...'
(test "$wxSKIP_SAMPLES" && echo 'SKIPPED') || make -k "${wxMAKEFILE_FLAGS[@]}" samples
echo 'travis_fold:end:samples'
echo 'travis_fold:start:install'
echo 'Installing...'
sudo make install
echo 'travis_fold:end:install'
echo 'travis_fold:start:testinstall'
echo 'Testing installation...'
make -C samples/minimal -f makefile.unx clean
make -C samples/minimal -f makefile.unx "${wxMAKEFILE_FLAGS[@]}"
echo 'travis_fold:end:testinstall'
;;
esac