diff --git a/.travis.yml b/.travis.yml index dd89b3aec..949920138 100644 --- a/.travis.yml +++ b/.travis.yml @@ -106,15 +106,13 @@ script: # (and might work) for the next build - DURATION=2400 - scripts/travis-command-wrapper.py -s "date" -i 120 --deadline=$(( $(date +%s) + ${DURATION} )) make - # dump glibcxx symbols >= 3.4.20 (if this returns output - # then it means the binaries will not run on ubuntu trusty without upgrading libstdc++) - - nm src/libmapnik* | grep "GLIBCXX_3.4.2[0-9]" || true - RESULT=0 - make test || RESULT=$? # we allow visual failures with g++ for now: https://github.com/mapnik/mapnik/issues/3567 - if [[ ${RESULT} != 0 ]] && [[ ${CXX} =~ 'clang++' ]]; then false; fi; - enabled ${COVERAGE} coverage - enabled ${BENCH} make bench + - ./scripts/check_glibcxx.sh after_success: - enabled ${TRIGGER} trigger_downstream diff --git a/scripts/check_glibcxx.sh b/scripts/check_glibcxx.sh new file mode 100755 index 000000000..d8d40924e --- /dev/null +++ b/scripts/check_glibcxx.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +set -eu +set -o pipefail +shopt -s nullglob + +: ' + +Ensure no GLIBCXX_3.4.2x symbols are present in the binary +if ENABLE_GLIBC_WORKAROUND is set. + +If symbols >= 3.4.20 then it means the binaries would not run on ubuntu trusty without upgrading libstdc++ + +' +function check() { + local RESULT=0 + nm ${1} | grep "GLIBCXX_3.4.2[0-9]" > /tmp/out.txt || RESULT=$? + if [[ ${RESULT} != 0 ]]; then + echo "Success: GLIBCXX_3.4.2[0-9] symbols not present in binary (as expected)" + else + echo "$(cat /tmp/out.txt | c++filt)" + exit 1 + fi +} + +if [[ ${ENABLE_GLIBC_WORKAROUND:-false} == true ]]; then + for i in src/libmapnik*; do + echo "checking $i" + check $i + done +fi \ No newline at end of file