ci: update .travis.yml and jenkins scripts

Change-Id: I315196cb9d8e96f46e706a78c2d15d856a0a8d8b
diff --git a/.jenkins.d/00-deps.sh b/.jenkins.d/00-deps.sh
index d7bd1e6..84c8ae1 100755
--- a/.jenkins.d/00-deps.sh
+++ b/.jenkins.d/00-deps.sh
@@ -7,7 +7,7 @@
 set -x
 
 if has OSX $NODE_LABELS; then
-    FORMULAE=(boost pkg-config openssl)
+    FORMULAE=(boost openssl pkg-config)
     brew update
     if [[ -n $TRAVIS ]]; then
         # travis images come with a large number of brew packages
diff --git a/.jenkins.d/01-ndn-cxx.sh b/.jenkins.d/01-ndn-cxx.sh
index c9e2a63..e627627 100755
--- a/.jenkins.d/01-ndn-cxx.sh
+++ b/.jenkins.d/01-ndn-cxx.sh
@@ -37,14 +37,14 @@
 
 sudo rm -f /usr/local/bin/ndnsec*
 sudo rm -fr /usr/local/include/ndn-cxx
-sudo rm -f /usr/local/lib/libndn-cxx*
-sudo rm -f /usr/local/lib/pkgconfig/libndn-cxx.pc
+sudo rm -f /usr/local/lib{,64}/libndn-cxx*
+sudo rm -f /usr/local/lib{,64}/pkgconfig/libndn-cxx.pc
 
 pushd ndn-cxx >/dev/null
 
 ./waf configure --color=yes --enable-shared --disable-static --without-osx-keychain
 ./waf build --color=yes -j${WAF_JOBS:-1}
-sudo env "PATH=$PATH" ./waf install --color=yes
+sudo_preserve_env PATH -- ./waf install --color=yes
 
 popd >/dev/null
 popd >/dev/null
diff --git a/.jenkins.d/02-chronosync.sh b/.jenkins.d/02-chronosync.sh
index c93f3b9..c27aa33 100755
--- a/.jenkins.d/02-chronosync.sh
+++ b/.jenkins.d/02-chronosync.sh
@@ -34,8 +34,8 @@
 fi
 
 sudo rm -fr /usr/local/include/ChronoSync
-sudo rm -f /usr/local/lib/libChronoSync*
-sudo rm -f /usr/local/lib/pkgconfig/ChronoSync*
+sudo rm -f /usr/local/lib{,64}/libChronoSync*
+sudo rm -f /usr/local/lib{,64}/pkgconfig/ChronoSync.pc
 
 pushd ChronoSync >/dev/null
 
@@ -45,7 +45,7 @@
 
 ./waf configure --color=yes
 ./waf build --color=yes -j${WAF_JOBS:-1}
-sudo env "PATH=$PATH" ./waf install --color=yes
+sudo_preserve_env PATH -- ./waf install --color=yes
 
 popd >/dev/null
 popd >/dev/null
diff --git a/.jenkins.d/03-psync.sh b/.jenkins.d/03-psync.sh
index 534115d..1788a02 100755
--- a/.jenkins.d/03-psync.sh
+++ b/.jenkins.d/03-psync.sh
@@ -34,8 +34,8 @@
 fi
 
 sudo rm -fr /usr/local/include/PSync
-sudo rm -f /usr/local/lib/libPSync*
-sudo rm -f /usr/local/lib/pkgconfig/PSync*
+sudo rm -f /usr/local/lib{,64}/libPSync*
+sudo rm -f /usr/local/lib{,64}/pkgconfig/PSync.pc
 
 pushd PSync >/dev/null
 
@@ -45,7 +45,7 @@
 
 ./waf configure --color=yes
 ./waf build --color=yes -j${WAF_JOBS:-1}
-sudo env "PATH=$PATH" ./waf install --color=yes
+sudo_preserve_env PATH -- ./waf install --color=yes
 
 popd >/dev/null
 popd >/dev/null
diff --git a/.jenkins.d/10-build.sh b/.jenkins.d/10-build.sh
index 2ecdfdc..6faaf55 100755
--- a/.jenkins.d/10-build.sh
+++ b/.jenkins.d/10-build.sh
@@ -17,7 +17,7 @@
 fi
 
 # Cleanup
-sudo env "PATH=$PATH" ./waf --color=yes distclean
+sudo_preserve_env PATH -- ./waf --color=yes distclean
 
 if [[ $JOB_NAME != *"code-coverage" && $JOB_NAME != *"limited-build" ]]; then
   # Configure/build in optimized mode with tests
@@ -25,14 +25,14 @@
   ./waf --color=yes build -j${WAF_JOBS:-1}
 
   # Cleanup
-  sudo env "PATH=$PATH" ./waf --color=yes distclean
+  sudo_preserve_env PATH -- ./waf --color=yes distclean
 
   # Configure/build in optimized mode without tests
   ./waf --color=yes configure
   ./waf --color=yes build -j${WAF_JOBS:-1}
 
   # Cleanup
-  sudo env "PATH=$PATH" ./waf --color=yes distclean
+  sudo_preserve_env PATH -- ./waf --color=yes distclean
 fi
 
 # Configure/build in debug mode with tests
@@ -42,4 +42,4 @@
 # (tests will be run against debug version)
 
 # Install
-sudo env "PATH=$PATH" ./waf --color=yes install
+sudo_preserve_env PATH -- ./waf --color=yes install
diff --git a/.jenkins.d/20-tests.sh b/.jenkins.d/20-tests.sh
index b172b2a..2657aa9 100755
--- a/.jenkins.d/20-tests.sh
+++ b/.jenkins.d/20-tests.sh
@@ -1,12 +1,27 @@
 #!/usr/bin/env bash
 set -e
+
+JDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+source "$JDIR"/util.sh
+
 set -x
 
 # Prepare environment
 rm -Rf ~/.ndn
 
+BOOST_VERSION=$(python -c "import sys; sys.path.append('build/c4che'); import _cache; print(_cache.BOOST_VERSION_NUMBER);")
+
 ut_log_args() {
-    echo --log_level=test_suite
+    if (( BOOST_VERSION >= 106200 )); then
+        echo --logger=HRF,test_suite,stdout:XML,all,build/xunit-${1:-report}.xml
+    else
+        if [[ -n $XUNIT ]]; then
+            echo --log_level=all $( (( BOOST_VERSION >= 106000 )) && echo -- ) \
+                 --log_format2=XML --log_sink2=build/xunit-${1:-report}.xml
+        else
+            echo --log_level=test_suite
+        fi
+    fi
 }
 
 ASAN_OPTIONS="color=always"
@@ -19,5 +34,8 @@
 ASAN_OPTIONS+=":strip_path_prefix=${PWD}/"
 export ASAN_OPTIONS
 
+export BOOST_TEST_BUILD_INFO=1
+export BOOST_TEST_COLOR_OUTPUT=1
+
 # Run unit tests
 ./build/unit-tests-nlsr $(ut_log_args)
diff --git a/.jenkins.d/util.sh b/.jenkins.d/util.sh
index a89bc27..8ddc4ba 100644
--- a/.jenkins.d/util.sh
+++ b/.jenkins.d/util.sh
@@ -16,3 +16,22 @@
     set ${saved_xtrace}
     return ${ret}
 }
+
+sudo_preserve_env() {
+    local saved_xtrace
+    [[ $- == *x* ]] && saved_xtrace=-x || saved_xtrace=+x
+    set +x
+
+    local vars=()
+    while [[ $# -gt 0 ]]; do
+        local arg=$1
+        shift
+        case ${arg} in
+            --) break ;;
+            *)  vars+=("${arg}=${!arg}") ;;
+        esac
+    done
+
+    set ${saved_xtrace}
+    sudo env "${vars[@]}" "$@"
+}
diff --git a/.travis.yml b/.travis.yml
index 984e8ac..47579e9 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,6 +1,5 @@
 language: cpp
 dist: xenial
-sudo: required
 env:
   global:
     - JOB_NAME=limited-build
@@ -22,12 +21,6 @@
     # Linux/clang
     # https://apt.llvm.org/
     - os: linux
-      env: COMPILER=clang++-3.5
-    - os: linux
-      env: COMPILER=clang++-3.6
-    - os: linux
-      env: COMPILER=clang++-3.7 DISABLE_ASAN=yes
-    - os: linux
       env: COMPILER=clang++-3.8
     - os: linux
       env: COMPILER=clang++-3.9
@@ -37,40 +30,43 @@
       env: COMPILER=clang++-5.0
     - os: linux
       env: COMPILER=clang++-6.0
+    # temporarily disable AddressSanitizer on clang-7 and later
+    # due to https://bugs.llvm.org/show_bug.cgi?id=40808
     - os: linux
-      env: COMPILER=clang++-7
+      env: COMPILER=clang++-7 DISABLE_ASAN=yes
+    - os: linux
+      env: COMPILER=clang++-8 DISABLE_ASAN=yes
+    - os: linux
+      env: COMPILER=clang++-9 DISABLE_ASAN=yes
 
     # macOS/clang
-    # https://docs.travis-ci.com/user/reference/osx/#OS-X-Version
-    - os: osx
-      osx_image: xcode7.3
-      env: OSX_VERSION=10.11
+    # https://docs.travis-ci.com/user/reference/osx/#macos-version
     - os: osx
       osx_image: xcode8.3
       env: OSX_VERSION=10.12
     - os: osx
-      osx_image: xcode9.3
+      osx_image: xcode9.2
+      env: OSX_VERSION=10.12
+    - os: osx
+      osx_image: xcode9.4
       env: OSX_VERSION=10.13
+    - os: osx
+      osx_image: xcode10.1
+      env: OSX_VERSION=10.13
+    - os: osx
+      osx_image: xcode10.2
+      env: OSX_VERSION=10.14
 
   allow_failures:
-    - env: COMPILER=g++-6
-    - env: COMPILER=g++-7
-    - env: COMPILER=g++-8
-    - env: COMPILER=clang++-3.5
-    - env: COMPILER=clang++-3.6
-    - env: COMPILER=clang++-3.7 DISABLE_ASAN=yes
-    - env: COMPILER=clang++-3.8
-    - env: COMPILER=clang++-3.9
-    - env: COMPILER=clang++-4.0
-    - env: COMPILER=clang++-5.0
-    - env: COMPILER=clang++-6.0
-    - env: COMPILER=clang++-7
+    - env: COMPILER=clang++-9 DISABLE_ASAN=yes
 
   fast_finish: true
 
 install: |
     case ${COMPILER} in
-      g++-[6789])
+      g++-5)
+        ;;
+      g++-*)
         travis_retry sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
         travis_retry sudo apt-get -qq update
         travis_retry sudo apt-get -qy install "${COMPILER}"
@@ -78,8 +74,8 @@
       clang++-*)
         CLANG_VERSION=${COMPILER/clang++}
         if [[ ${CLANG_VERSION} != "-3."* ]]; then
-          wget -O - "https://apt.llvm.org/llvm-snapshot.gpg.key" | sudo apt-key add -
-          travis_retry sudo add-apt-repository -y "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial${CLANG_VERSION/-7} main"
+          travis_retry wget -nv -O - "https://apt.llvm.org/llvm-snapshot.gpg.key" | sudo apt-key add -
+          travis_retry sudo add-apt-repository -y "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial${CLANG_VERSION/-9} main"
         fi
         travis_retry sudo apt-get -qq update
         travis_retry sudo apt-get -qy install "clang${CLANG_VERSION}"
@@ -89,6 +85,11 @@
 before_script:
   - if [[ ${TRAVIS_OS_NAME} == linux ]]; then export NODE_LABELS="Linux Ubuntu Ubuntu-16.04"; fi
   - if [[ ${TRAVIS_OS_NAME} == osx ]]; then export NODE_LABELS="OSX OSX-${OSX_VERSION}"; fi
+  - if [[ ${OSX_VERSION} == 10.12 ]]; then brew update; fi
+  # workaround for https://github.com/Homebrew/homebrew-core/issues/26358
+  - if [[ ${OSX_VERSION} == 10.12 ]]; then brew outdated python || brew upgrade python; fi
+  # workaround for https://github.com/travis-ci/travis-ci/issues/6688
+  - if [[ ${OSX_VERSION} == 10.12 ]]; then /usr/bin/yes | pip2 uninstall numpy || true; fi
   - if [[ -n ${COMPILER} ]]; then export CXX=${COMPILER}; fi
   - ${CXX:-c++} --version
   - python --version