169 lines
4.4 KiB
Bash
Executable File
169 lines
4.4 KiB
Bash
Executable File
#!/bin/bash -e
|
|
# The main script for building/testing while under travis ci.
|
|
# https://travis-ci.org/libgd/libgd
|
|
|
|
# TODO: Add support for building/testing w/ASAN/etc... enabled.
|
|
|
|
# shellcheck source=travis/lib.sh
|
|
. "${0%/*}"/lib.sh
|
|
|
|
# We have to do this by hand rather than use the coverity addon because of
|
|
# matrix explosion: https://github.com/travis-ci/travis-ci/issues/1975
|
|
# We also do it by hand because when we're throttled, the addon will exit
|
|
# the build immediately and skip the main script!
|
|
coverity_scan() {
|
|
local reason
|
|
[[ ${TRAVIS_JOB_NUMBER} != *.1 ]] && reason="not first build job"
|
|
[[ -n ${TRAVIS_TAG} ]] && reason="git tag"
|
|
[[ ${TRAVIS_PULL_REQUEST} == "true" ]] && reason="pull request"
|
|
if [[ -n ${reason} ]] ; then
|
|
echo "Skipping coverity scan due to: ${reason}"
|
|
return
|
|
fi
|
|
|
|
export COVERITY_SCAN_PROJECT_NAME="${TRAVIS_REPO_SLUG}"
|
|
export COVERITY_SCAN_NOTIFICATION_EMAIL="pierre.php@gmail.com"
|
|
export COVERITY_SCAN_BUILD_COMMAND="make -j${ncpus}"
|
|
export COVERITY_SCAN_BUILD_COMMAND_PREPEND="git clean -q -x -d -f; git checkout -f; ./bootstrap.sh && ./configure"
|
|
export COVERITY_SCAN_BRANCH_PATTERN="GD-2.2"
|
|
|
|
curl -s "https://scan.coverity.com/scripts/travisci_build_coverity_scan.sh" | bash || :
|
|
}
|
|
|
|
check_git_status() {
|
|
local status
|
|
|
|
# Make sure our gitignore files are up-to-date, and we aren't
|
|
# forgetting to commit the few generated (e.g. cmake.in) files.
|
|
# Note: We ignore config.h.cmake changes since it indirectly
|
|
# depends on the format of the output of autoheader :/.
|
|
status=$(git status --porcelain | grep -v '^ M src/config\.h\.cmake' | grep -v '^ M docs/naturaldocs/project/Menu\.txt') || :
|
|
if [[ -n ${status} ]]; then
|
|
echo "Missing git repo updates (gitignore/etc...):"
|
|
echo "$ git status"
|
|
echo "${status}"
|
|
echo "$ git diff"
|
|
git diff
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
build_autotools() {
|
|
v --fold="bootstrap" ./bootstrap.sh
|
|
|
|
v --fold="configure" ./configure \
|
|
--prefix=/usr/local \
|
|
--libdir=/usr/local/lib \
|
|
--enable-werror \
|
|
--enable-gd-formats \
|
|
--with-fontconfig \
|
|
--with-freetype \
|
|
--with-jpeg \
|
|
--with-png \
|
|
--with-tiff \
|
|
--with-webp \
|
|
--with-xpm \
|
|
--with-zlib
|
|
m
|
|
# Make sure failures are shown in the log.
|
|
m check VERBOSE=1
|
|
|
|
check_git_status
|
|
|
|
# Verify building a release works (also does things like read-only
|
|
# out of tree builds for use).
|
|
m distcheck VERBOSE=1
|
|
|
|
# Clean things up for cmake.
|
|
m distclean
|
|
}
|
|
|
|
# TODO: When we switch to Ubuntu 21+ (Hirsute), we can reenable libavif coverage,
|
|
# as Ubuntu 21+ supports libavif 0.8.2+.
|
|
# "-DENABLE_AVIF=1"
|
|
cmake_args=(
|
|
"-DBUILD_SHARED_LIBS=1"
|
|
"-DBUILD_STATIC_LIBS=1"
|
|
"-DBUILD_TEST=1"
|
|
"-DCMAKE_INSTALL_PREFIX=/usr/local"
|
|
"-DCMAKE_INSTALL_LIBDIR=/usr/local/lib"
|
|
"-DENABLE_GD_FORMATS=1"
|
|
"-DENABLE_FONTCONFIG=1"
|
|
"-DENABLE_FREETYPE=1"
|
|
"-DENABLE_JPEG=1"
|
|
"-DENABLE_PNG=1"
|
|
"-DENABLE_TIFF=1"
|
|
"-DENABLE_WEBP=1"
|
|
)
|
|
|
|
# libxpm-dev is unavaible in brew repo
|
|
# Once it gets available, please modify this code block.
|
|
if [[ ${TRAVIS_OS_NAME} == "linux" ]]; then
|
|
cmake_args+=("-DENABLE_XPM=1")
|
|
fi
|
|
|
|
build_cmake() {
|
|
# First try building out of tree.
|
|
mkdir build
|
|
cd build
|
|
v cmake "${cmake_args[@]}" ..
|
|
m
|
|
v ctest -j"${ncpus}"
|
|
cd ..
|
|
rm -rf build
|
|
|
|
# Then build in-tree.
|
|
v cmake "${cmake_args[@]}" .
|
|
m
|
|
v ctest -j"${ncpus}"
|
|
m install DESTDIR="${PWD}/install-cmake"
|
|
}
|
|
|
|
compare_builds() {
|
|
# Make sure the two install the same set of files.
|
|
# TODO: cmake is not yet on-par with autotools.
|
|
# TODO: Should verify symbol export list in libgd too.
|
|
diff -ur install-autotools install-cmake || true
|
|
}
|
|
|
|
source_tests() {
|
|
# Run lint/source tests against the codebase.
|
|
# Reset any files in case the build modified them.
|
|
git checkout -f
|
|
./tests/source/run.sh
|
|
}
|
|
|
|
build_codecov() {
|
|
# Only genenrate code coverage report in Linux with gcc
|
|
if [[ ${TRAVIS_OS_NAME} != "linux" || ${TRAVIS_COMPILER} != "gcc" ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
# Delete these two files so that we can build out of tree again
|
|
rm -f CMakeCache.txt
|
|
rm -rf CMakeFiles
|
|
|
|
# Delete test run time limit. Or tests/gdimageline/gdimgaeline_bug5 will run timeout
|
|
sed -i '/TIMEOUT/d' tests/CMakeLists.txt
|
|
|
|
# Build out of tree
|
|
mkdir build
|
|
cd build
|
|
export CFLAGS="-fprofile-arcs -ftest-coverage"
|
|
v cmake "${cmake_args[@]}" ..
|
|
m
|
|
v ctest -j"${ncpus}"
|
|
bash <(curl -s https://codecov.io/bash)
|
|
}
|
|
|
|
main() {
|
|
build_autotools
|
|
build_cmake
|
|
compare_builds
|
|
v --fold="coverity_scan" coverity_scan
|
|
# Run the source tests last.
|
|
v --fold="source_tests" source_tests
|
|
build_codecov
|
|
}
|
|
main "$@"
|