build: require gcc >= 5.3 and switch to C++14
Change-Id: Ifb805ced42e9f8aedce473c1fe91f68b27acefec
Refs: #3076, #4462
diff --git a/.jenkins.d/README.md b/.jenkins.d/README.md
index 41812aa..39fa40b 100644
--- a/.jenkins.d/README.md
+++ b/.jenkins.d/README.md
@@ -13,13 +13,13 @@
* `[OS_TYPE]`: `Linux`
* `[DISTRO_TYPE]`: `Ubuntu`
- * `[DISTRO_VERSION]`: `Ubuntu-14.04`, `Ubuntu-16.04`
+ * `[DISTRO_VERSION]`: `Ubuntu-16.04`, `Ubuntu-18.04`
Possible values for OS X / macOS:
* `[OS_TYPE]`: `OSX`
* `[DISTRO_TYPE]`: `OSX` (can be absent)
- * `[DISTRO_VERSION]`: `OSX-10.10`, `OSX-10.11`, `OSX-10.12`
+ * `[DISTRO_VERSION]`: `OSX-10.11`, `OSX-10.12`, `OSX-10.13`
- `JOB_NAME`: optional variable to define type of the job. Depending on the defined job type,
the build scripts can perform different tasks.
diff --git a/.travis.yml b/.travis.yml
index 61c1139..984e8ac 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,6 @@
+language: cpp
+dist: xenial
sudo: required
-language: generic
env:
global:
- JOB_NAME=limited-build
@@ -8,150 +9,87 @@
matrix:
include:
# Linux/gcc
+ # https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test/+packages
- os: linux
- dist: trusty
- env:
- - CXX=g++-4.8
- - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- - BUILD_WITH_ASAN=yes
+ env: COMPILER=g++-5
- os: linux
- dist: trusty
- addons:
- apt:
- sources: ubuntu-toolchain-r-test
- packages: g++-4.9
- env:
- - CXX=g++-4.9
- - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- - BUILD_WITH_ASAN=yes
+ env: COMPILER=g++-6
- os: linux
- dist: trusty
- addons:
- apt:
- sources: ubuntu-toolchain-r-test
- packages: g++-5
- env:
- - CXX=g++-5
- - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- - BUILD_WITH_ASAN=yes
+ env: COMPILER=g++-7
- os: linux
- dist: trusty
- addons:
- apt:
- sources: ubuntu-toolchain-r-test
- packages: g++-6
- env:
- - CXX=g++-6
- - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- - BUILD_WITH_ASAN=yes
- - os: linux
- dist: trusty
- addons:
- apt:
- sources: ubuntu-toolchain-r-test
- packages: g++-7
- env:
- - CXX=g++-7
- - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- - BUILD_WITH_ASAN=yes
+ env: COMPILER=g++-8
# Linux/clang
+ # https://apt.llvm.org/
- os: linux
- dist: trusty
- addons:
- apt:
- packages: clang-3.5
- env:
- - CXX=clang++-3.5
- - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- - BUILD_WITH_ASAN=yes
+ env: COMPILER=clang++-3.5
- os: linux
- dist: trusty
- addons:
- apt:
- packages: clang-3.6
- env:
- - CXX=clang++-3.6
- - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- - BUILD_WITH_ASAN=yes
+ env: COMPILER=clang++-3.6
- os: linux
- dist: trusty
- addons:
- apt:
- sources:
- - llvm-toolchain-precise-3.7
- - ubuntu-toolchain-r-test
- packages: clang-3.7
- env:
- - CXX=clang++-3.7
- - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
+ env: COMPILER=clang++-3.7 DISABLE_ASAN=yes
- os: linux
- dist: trusty
- addons:
- apt:
- sources:
- - llvm-toolchain-precise-3.8
- - ubuntu-toolchain-r-test
- packages: clang-3.8
- env:
- - CXX=clang++-3.8
- - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- - BUILD_WITH_ASAN=yes
+ env: COMPILER=clang++-3.8
- os: linux
- dist: trusty
- addons:
- apt:
- sources:
- - llvm-toolchain-trusty-3.9
- - ubuntu-toolchain-r-test
- packages: clang-3.9
- env:
- - CXX=clang++-3.9
- - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
+ env: COMPILER=clang++-3.9
- os: linux
- dist: trusty
- addons:
- apt:
- sources:
- - llvm-toolchain-trusty-4.0
- - ubuntu-toolchain-r-test
- packages: clang-4.0
- env:
- - CXX=clang++-4.0
- - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- - BUILD_WITH_ASAN=yes
+ env: COMPILER=clang++-4.0
- os: linux
- dist: trusty
- addons:
- apt:
- sources:
- - llvm-toolchain-trusty-5.0
- - ubuntu-toolchain-r-test
- packages: clang-5.0
- env:
- - CXX=clang++-5.0
- - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- - BUILD_WITH_ASAN=yes
+ env: COMPILER=clang++-5.0
+ - os: linux
+ env: COMPILER=clang++-6.0
+ - os: linux
+ env: COMPILER=clang++-7
# macOS/clang
- # https://docs.travis-ci.com/user/osx-ci-environment/#OS-X-Version
+ # https://docs.travis-ci.com/user/reference/osx/#OS-X-Version
- os: osx
osx_image: xcode7.3
- env:
- - NODE_LABELS="OSX OSX-10.11"
- - BUILD_WITH_ASAN=yes
+ env: OSX_VERSION=10.11
- os: osx
osx_image: xcode8.3
- env:
- - NODE_LABELS="OSX OSX-10.12"
- - BUILD_WITH_ASAN=yes
+ env: OSX_VERSION=10.12
- os: osx
- osx_image: xcode9
- env:
- - NODE_LABELS="OSX OSX-10.12"
- - BUILD_WITH_ASAN=yes
+ osx_image: xcode9.3
+ env: OSX_VERSION=10.13
+
+ 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
+
+ fast_finish: true
+
+install: |
+ case ${COMPILER} in
+ g++-[6789])
+ 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}"
+ ;;
+ 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"
+ fi
+ travis_retry sudo apt-get -qq update
+ travis_retry sudo apt-get -qy install "clang${CLANG_VERSION}"
+ ;;
+ esac
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 [[ -n ${COMPILER} ]]; then export CXX=${COMPILER}; fi
- ${CXX:-c++} --version
- python --version
diff --git a/.waf-tools/default-compiler-flags.py b/.waf-tools/default-compiler-flags.py
index 54db7ea..e690290 100644
--- a/.waf-tools/default-compiler-flags.py
+++ b/.waf-tools/default-compiler-flags.py
@@ -15,14 +15,14 @@
errmsg = ''
warnmsg = ''
if cxx == 'gcc':
- if ccver < (4, 8, 2):
+ if ccver < (5, 3, 0):
errmsg = ('The version of gcc you are using is too old.\n'
- 'The minimum supported gcc version is 4.8.2.')
+ 'The minimum supported gcc version is 5.3.0.')
conf.flags = GccFlags()
elif cxx == 'clang':
- if ccver < (3, 4, 0):
+ if ccver < (3, 5, 0):
errmsg = ('The version of clang you are using is too old.\n'
- 'The minimum supported clang version is 3.4.0.')
+ 'The minimum supported clang version is 3.5.0.')
conf.flags = ClangFlags()
else:
warnmsg = 'Note: %s compiler is unsupported' % cxx
@@ -39,7 +39,7 @@
conf.areCustomCxxflagsPresent = (len(conf.env.CXXFLAGS) > 0)
- # General flags are always applied (e.g., selecting C++11 mode)
+ # General flags are always applied (e.g., selecting C++ language standard)
generalFlags = conf.flags.getGeneralFlags(conf)
conf.add_supported_cxxflags(generalFlags['CXXFLAGS'])
conf.add_supported_linkflags(generalFlags['LINKFLAGS'])
@@ -128,7 +128,7 @@
"""
def getGeneralFlags(self, conf):
flags = super(GccBasicFlags, self).getGeneralFlags(conf)
- flags['CXXFLAGS'] += ['-std=c++11']
+ flags['CXXFLAGS'] += ['-std=c++14']
return flags
def getDebugFlags(self, conf):
@@ -164,16 +164,12 @@
class GccFlags(GccBasicFlags):
def getDebugFlags(self, conf):
flags = super(GccFlags, self).getDebugFlags(conf)
- if self.getCompilerVersion(conf) < (5, 1, 0):
- flags['CXXFLAGS'] += ['-Wno-missing-field-initializers']
- flags['CXXFLAGS'] += ['-fdiagnostics-color'] # gcc >= 4.9
+ flags['CXXFLAGS'] += ['-fdiagnostics-color']
return flags
def getOptimizedFlags(self, conf):
flags = super(GccFlags, self).getOptimizedFlags(conf)
- if self.getCompilerVersion(conf) < (5, 1, 0):
- flags['CXXFLAGS'] += ['-Wno-missing-field-initializers']
- flags['CXXFLAGS'] += ['-fdiagnostics-color'] # gcc >= 4.9
+ flags['CXXFLAGS'] += ['-fdiagnostics-color']
return flags
class ClangFlags(GccBasicFlags):
diff --git a/common.hpp b/common.hpp
index 57ed667..d59fa9c 100644
--- a/common.hpp
+++ b/common.hpp
@@ -60,29 +60,20 @@
#include <boost/foreach.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/noncopyable.hpp>
-#include <boost/property_tree/ptree.hpp>
-#include <boost/scoped_ptr.hpp>
-#include <boost/tuple/tuple.hpp>
namespace chronosync {
using std::size_t;
using boost::noncopyable;
-using boost::scoped_ptr;
using std::bind;
-using std::const_pointer_cast;
using std::cref;
-using std::dynamic_pointer_cast;
-using std::enable_shared_from_this;
using std::function;
using std::make_shared;
using std::make_tuple;
using std::ref;
using std::shared_ptr;
-using std::static_pointer_cast;
-using std::weak_ptr;
using ndn::Block;
using ndn::ConstBufferPtr;
diff --git a/wscript b/wscript
index fa2864b..e40914f 100644
--- a/wscript
+++ b/wscript
@@ -140,7 +140,7 @@
else:
# no tags matched
Context.g_module.VERSION = '%s-commit-%s' % (VERSION_BASE, out)
- except subprocess.CalledProcessError:
+ except (OSError, subprocess.CalledProcessError):
pass
versionFile = ctx.path.find_node('VERSION')