1language: c 2 3env: 4 global: 5 - BUILD=yes TEST=test CONFOPT= LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no LOG_DIR="$TRAVIS_BUILD_DIR/logs" 6 7_anchors: 8 envs: 9 - &tiny-nogui 10 FEATURES=tiny TEST=testtiny CONFOPT="--disable-gui" 11 - &tiny 12 FEATURES=tiny TEST=testtiny 13 - &small 14 FEATURES=small TEST=testtiny 15 - &normal 16 FEATURES=normal 17 - &linux-huge 18 FEATURES=huge TEST="scripttests test_libvterm" 19 CONFOPT="--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp" 20 - &osx-huge # macOS build 21 FEATURES=huge 22 CONFOPT="--enable-perlinterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp" 23 - &unittests 24 BUILD=no TEST=unittests FEATURES=huge CHECK_AUTOCONF=yes 25 - &coverage 26 CFLAGS="--coverage -DUSE_GCOV_FLUSH" LDFLAGS=--coverage 27 - &asan # ASAN build 28 SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize-recover=all -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer" 29 ASAN_OPTIONS="print_stacktrace=1 log_path=$LOG_DIR/asan" UBSAN_OPTIONS="print_stacktrace=1 log_path=$LOG_DIR/ubsan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt" 30 - &shadowopt 31 SHADOWOPT="-C src/shadow" SRCDIR=./src/shadow 32 33 linux: &linux 34 os: linux 35 dist: bionic 36 addons: 37 apt: 38 packages: &apt-packages 39 - autoconf 40 - clang 41 - lcov 42 - gettext 43 - libcanberra-dev 44 - libperl-dev 45 - python-dev 46 - python3-dev 47 - liblua5.3-dev 48 - lua5.3 49 - ruby-dev 50 - tcl-dev 51 - cscope 52 - libgtk2.0-dev 53 - desktop-file-utils 54 - libtool-bin 55 services: 56 - xvfb 57 before_install: 58 - rvm reset 59 # Use llvm-cov instead of gcov when compiler is clang. 60 - | 61 if [[ "${CC}" = "clang" ]]; then 62 ln -sf "$(command -v llvm-cov)" /home/travis/bin/gcov 63 fi 64 # Setup lua5.3 manually since its package doesn't provide alternative. 65 # https://bugs.launchpad.net/ubuntu/+source/lua5.3/+bug/1707212 66 - | 67 if [[ "${CONFOPT}" =~ luainterp ]]; then 68 sudo update-alternatives --install /usr/bin/lua lua /usr/bin/lua5.3 10 69 fi 70 before_script: 71 - sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0 72 # It appears we can load "snd-dummy" on only amd64. 73 - | 74 if [[ "${TRAVIS_CPU_ARCH}" = amd64 ]]; then 75 sudo bash ci/load-snd-dummy.sh || true 76 fi 77 - sudo usermod -a -G audio $USER 78 - do_test() { sg audio "sg $(id -gn) '$*'"; } 79 80 osx: &osx 81 os: osx 82 before_script: 83 - do_test() { "$@"; } 84 85 homebrew: &osx-homebrew 86 addons: 87 homebrew: 88 packages: 89 - lua 90 update: true 91 cache: 92 directories: 93 - /usr/local/Homebrew/Library/Homebrew/vendor/ 94 - /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/ 95 before_install: 96 - rvm reset 97 # Lua is not installed on macOS 98 - export LUA_PREFIX=/usr/local 99 100 coverage: &eval-coverage 101 # needed for https support for coveralls building cffi only works with gcc, 102 # not with clang 103 - CC=gcc pip install --user cpp-coveralls pyopenssl ndg-httpsclient pyasn1 104 - ~/.local/bin/coveralls -b "${SRCDIR}" -x .xs -e "${SRCDIR}"/if_perl.c -e "${SRCDIR}"/xxd -e "${SRCDIR}"/libvterm --encodings utf-8 105 - (cd "${SRCDIR}" && bash <(curl -s https://codecov.io/bash)) 106 107 asan_symbolize: &asan_symbolize 108 # Update pyenv to fix the error "/opt/pyenv/libexec/pyenv: line 43: cd: asan_symbolize-6.0: Not a directory". 109 # https://github.com/pyenv/pyenv/issues/580 110 - (cd "${PYENV_ROOT}" && git fetch -p origin && git checkout "$(git rev-list --tags -n1)") &>/dev/null || true 111 - for f in $(grep -l '#[[:digit:]]* *0x[[:digit:]a-fA-F]*' "$LOG_DIR"/*); do asan_symbolize-11 -l "$f"; done 112 113branches: 114 except: 115 - /^v[0-9]/ 116 117script: 118 - mkdir -p "$LOG_DIR" 119 - NPROC=$(getconf _NPROCESSORS_ONLN) 120 - set -o errexit 121 - echo -e "\\033[33;1mConfiguring Vim\\033[0m" && echo -en "travis_fold:start:configure\\r\\033[0K" 122 - | 123 if [[ "${CHECK_AUTOCONF}" = "yes" ]] && [[ "${CC}" = "gcc" ]]; then 124 make -C src autoconf 125 fi 126 - | 127 if [[ -n "${SHADOWOPT}" ]]; then 128 make -C src shadow 129 fi 130 # "./configure" changes its working directory into "$SRCDIR". 131 - ./configure --with-features=${FEATURES} ${CONFOPT} --enable-fail-if-missing 132 - echo -en "travis_fold:end:configure\\r\\033[0K" 133 - echo -e "\\033[33;1mBuilding Vim\\033[0m" && echo -en "travis_fold:start:build\\r\\033[0K" 134 - | 135 if [[ "${BUILD}" = "yes" ]]; then 136 # Append various warning flags to CFLAGS. 137 # BSD sed needs backup extension specified. 138 sed -i.bak -f ci/config.mk.sed ${SRCDIR}/auto/config.mk 139 if [[ "${TRAVIS_OS_NAME}" = "osx" ]] || [[ "${CC}" = "clang-11" ]]; then 140 # On macOS, the entity of gcc is clang. 141 sed -i.bak -f ci/config.mk.clang.sed ${SRCDIR}/auto/config.mk 142 else 143 sed -i.bak -f ci/config.mk.${CC}.sed ${SRCDIR}/auto/config.mk 144 fi 145 make ${SHADOWOPT} -j${NPROC} 146 fi 147 - echo -en "travis_fold:end:build\\r\\033[0K" 148 - set +o errexit 149 # Show Vim version and also if_xx versions. 150 - | 151 if [[ "${BUILD}" = "yes" ]]; then 152 "${SRCDIR}"/vim --version 153 "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit 154 "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit 155 fi 156 - echo -e "\\033[33;1mTesting Vim\\033[0m" && echo -en "travis_fold:start:test\\r\\033[0K" 157 - do_test make ${SHADOWOPT} ${TEST} && FOLD_MARKER=travis_fold 158 - echo -en "${FOLD_MARKER}:end:test\\r\\033[0K" 159 - | 160 # Not all sanitizers will cause the tests to fail. This helps since we can 161 # see all the failures instead of just the first one, but we still want the 162 # test phase to fail if any sanitizer issues are detected. 163 if [[ -n "${ASAN_OPTIONS}" ]]; then 164 if grep -q '#[[:digit:]]* *0x[[:digit:]a-fA-F]*' "$LOG_DIR"/*; then 165 false 166 fi 167 fi 168 169# Instead of using all environments with both compilers on both systems, 170# exclude some builds on mac os x and linux. 171# On mac os x "tiny" is always without GUI, use 2 compilers in 2 environments. 172# Linux: 2 compilers on some of the environments + gcc on os390 173jobs: 174 include: 175 #- <<: *osx 176 # name: tiny-nogui/clang 177 # compiler: clang 178 # env: *tiny-nogui 179 #- <<: *osx 180 # name: tiny-nogui/gcc 181 # compiler: gcc 182 # env: *tiny-nogui 183 #- <<: *osx 184 # <<: *osx-homebrew 185 # name: huge/clang 186 # compiler: clang 187 # env: *osx-huge 188 #- <<: *osx 189 # <<: *osx-homebrew 190 # name: huge/gcc 191 # compiler: gcc 192 # env: *osx-huge 193 #- <<: *linux 194 # name: tiny-nogui/clang 195 # compiler: clang 196 # env: *tiny-nogui 197 #- <<: *linux 198 # name: tiny-nogui/gcc 199 # compiler: gcc 200 # env: *tiny-nogui 201 #- <<: *linux 202 # name: tiny/clang 203 # compiler: clang 204 # env: *tiny 205 #- <<: *linux 206 # name: tiny/gcc 207 # compiler: gcc 208 # env: *tiny 209 #- <<: *linux 210 # name: small/gcc 211 # compiler: gcc 212 # env: *small 213 #- <<: *linux 214 # name: normal+shadow/clang 215 # compiler: clang 216 # env: 217 # - *normal 218 # - *shadowopt 219 #- <<: *linux 220 # name: normal+shadow/gcc 221 # compiler: gcc 222 # env: 223 # - *normal 224 # - *shadowopt 225 - <<: *linux 226 arch: s390x 227 name: huge/gcc-s390x 228 compiler: gcc 229 env: *linux-huge 230 services: [] 231 - <<: *linux 232 arch: arm64 233 name: huge/gcc-arm64 234 compiler: gcc 235 env: *linux-huge 236 services: [] 237 #- <<: *linux 238 # name: huge+coverage/clang 239 # compiler: clang 240 # env: 241 # - *linux-huge 242 # - *coverage 243 # after_success: *eval-coverage 244 #- <<: *linux 245 # name: huge+coverage/gcc 246 # compiler: gcc 247 # env: 248 # - *linux-huge 249 # - *coverage 250 # after_success: *eval-coverage 251 #- <<: *linux # ASAN 252 # name: huge+asan/clang 253 # compiler: clang-11 254 # addons: 255 # apt: 256 # sources: 257 # - sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-11 main' 258 # key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key' 259 # packages: 260 # - *apt-packages 261 # - clang-11 262 # env: 263 # - *linux-huge 264 # - *asan 265 # after_failure: *asan_symbolize 266 #- <<: *linux 267 # name: huge-testgui+coverage/gcc 268 # compiler: gcc 269 # env: 270 # - *linux-huge 271 # - *coverage 272 # - TEST="-C src testgui" 273 # after_success: *eval-coverage 274 #- <<: *linux 275 # name: unittests+coverage/gcc 276 # compiler: gcc 277 # env: 278 # - *unittests 279 # - *coverage 280 # after_success: *eval-coverage 281 #- <<: *linux 282 # name: vimtags/gcc 283 # compiler: gcc 284 # env: 285 # - *normal 286 # - TEST="-C runtime/doc vimtags VIMEXE=../../${SRCDIR}/vim" 287 288# vim:set sts=2 sw=2 tw=0 et: 289