build: update waf to version 2.0.6
Fix discovered build issues
Change-Id: I9a861c955283c1b20cc5065a4baa22bd7c2ab0c1
diff --git a/wscript b/wscript
index 8d418a7..919b827 100644
--- a/wscript
+++ b/wscript
@@ -27,7 +27,7 @@
GIT_TAG_PREFIX = "NLSR-"
from waflib import Logs, Utils, Context
-import os
+import os, subprocess
def options(opt):
opt.load(['compiler_cxx', 'gnu_dirs'])
@@ -36,10 +36,7 @@
tooldir=['.waf-tools'])
nlsropt = opt.add_option_group('NLSR Options')
-
- nlsropt.add_option('--with-tests', action='store_true', default=False, dest='with_tests',
- help='''build unit tests''')
-
+ nlsropt.add_option('--with-tests', action='store_true', default=False, help='build unit tests')
def configure(conf):
conf.load(['compiler_cxx', 'gnu_dirs',
@@ -54,21 +51,21 @@
boost_libs = 'system chrono program_options iostreams thread regex filesystem log log_setup'
if conf.options.with_tests:
- conf.env['WITH_TESTS'] = 1
- conf.define('WITH_TESTS', 1);
+ conf.env['WITH_TESTS'] = True
+ conf.define('WITH_TESTS', 1)
boost_libs += ' unit_test_framework'
conf.check_boost(lib=boost_libs, mt=True)
-
if conf.env.BOOST_VERSION_NUMBER < 105400:
- Logs.error("Minimum required boost version is 1.54.0")
- Logs.error("Please upgrade your distribution or install custom boost libraries" +
- " (https://redmine.named-data.net/projects/nfd/wiki/Boost_FAQ)")
- return
+ conf.fatal('Minimum required Boost version is 1.54.0\n'
+ 'Please upgrade your distribution or manually install a newer version of Boost'
+ ' (https://redmine.named-data.net/projects/nfd/wiki/Boost_FAQ)')
conf.check_cfg(package='ChronoSync', args=['--cflags', '--libs'],
uselib_store='SYNC', mandatory=True)
+ conf.check_compiler_flags()
+
conf.load('coverage')
conf.load('sanitizers')
@@ -82,7 +79,7 @@
version(bld)
bld(features="subst",
- name='version',
+ name='version.hpp',
source='src/version.hpp.in',
target='src/version.hpp',
install_path=None,
@@ -95,43 +92,39 @@
VERSION_MINOR=VERSION_SPLIT[1],
VERSION_PATCH=VERSION_SPLIT[2])
- nlsr_objects = bld(
+ bld.objects(
target='nlsr-objects',
- name='nlsr-objects',
- features='cxx',
source=bld.path.ant_glob(['src/**/*.cpp'],
excl=['src/main.cpp']),
use='NDN_CXX BOOST SYNC',
includes='. src',
export_includes='. src')
- nlsr = bld(
+ bld.program(
target='bin/nlsr',
- features='cxx cxxprogram',
+ name='nlsr',
source='src/main.cpp',
use='nlsr-objects')
- nlsrc = bld(
+ bld.program(
target='bin/nlsrc',
- features='cxx cxxprogram',
+ name='nlsrc',
source='tools/nlsrc.cpp',
use='nlsr-objects BOOST')
- bld(features="subst",
- source='nlsr.conf',
- target='nlsr.conf.sample',
- install_path="${SYSCONFDIR}/ndn")
+ bld.install_as('${SYSCONFDIR}/ndn/nlsr.conf.sample', 'nlsr.conf')
- if bld.env['WITH_TESTS']:
+ if bld.env.WITH_TESTS:
bld.recurse('tests')
- if bld.env['SPHINX_BUILD']:
- bld(features="sphinx",
- builder="man",
- outdir="docs/manpages",
- config="docs/conf.py",
+ if bld.env.SPHINX_BUILD:
+ bld(features='sphinx',
+ name='manpages',
+ builder='man',
+ outdir='docs/manpages',
+ config='docs/conf.py',
source=bld.path.ant_glob('docs/manpages/**/*.rst'),
- install_path="${MANDIR}/",
+ install_path='${MANDIR}',
VERSION=VERSION)
def docs(bld):
@@ -142,79 +135,82 @@
version(bld)
if not bld.env.DOXYGEN:
- Logs.error("ERROR: cannot build documentation (`doxygen' not found in $PATH)")
- else:
- bld(features="subst",
- name="doxygen-conf",
- source="docs/doxygen.conf.in",
- target="docs/doxygen.conf",
- VERSION=VERSION_BASE)
+ bld.fatal('Cannot build documentation ("doxygen" not found in PATH)')
- bld(features="doxygen",
- doxyfile='docs/doxygen.conf',
- use="doxygen-conf")
+ bld(features='subst',
+ name='doxygen.conf',
+ source=['docs/doxygen.conf.in',
+ 'docs/named_data_theme/named_data_footer-with-analytics.html.in'],
+ target=['docs/doxygen.conf',
+ 'docs/named_data_theme/named_data_footer-with-analytics.html'],
+ VERSION=VERSION,
+ HTML_FOOTER='../build/docs/named_data_theme/named_data_footer-with-analytics.html' \
+ if os.getenv('GOOGLE_ANALYTICS', None) \
+ else '../docs/named_data_theme/named_data_footer.html',
+ GOOGLE_ANALYTICS=os.getenv('GOOGLE_ANALYTICS', ''))
+
+ bld(features='doxygen',
+ doxyfile='docs/doxygen.conf',
+ use='doxygen.conf')
def sphinx(bld):
version(bld)
if not bld.env.SPHINX_BUILD:
- bld.fatal("ERROR: cannot build documentation (`sphinx-build' not found in $PATH)")
- else:
- bld(features="sphinx",
- outdir="docs",
- source=bld.path.ant_glob('docs/**/*.rst'),
- config="docs/conf.py",
- VERSION=VERSION_BASE)
+ bld.fatal('Cannot build documentation ("sphinx-build" not found in PATH)')
+
+ bld(features='sphinx',
+ config='docs/conf.py',
+ outdir='docs',
+ source=bld.path.ant_glob('docs/**/*.rst'),
+ VERSION=VERSION)
def version(ctx):
+ # don't execute more than once
if getattr(Context.g_module, 'VERSION_BASE', None):
return
Context.g_module.VERSION_BASE = Context.g_module.VERSION
- Context.g_module.VERSION_SPLIT = [v for v in VERSION_BASE.split('.')]
+ Context.g_module.VERSION_SPLIT = VERSION_BASE.split('.')
- didGetVersion = False
+ # first, try to get a version string from git
+ gotVersionFromGit = False
try:
cmd = ['git', 'describe', '--always', '--match', '%s*' % GIT_TAG_PREFIX]
- p = Utils.subprocess.Popen(cmd, stdout=Utils.subprocess.PIPE,
- stderr=None, stdin=None)
- out = str(p.communicate()[0].strip())
- didGetVersion = (p.returncode == 0 and out != "")
- if didGetVersion:
+ out = subprocess.check_output(cmd, universal_newlines=True).strip()
+ if out:
+ gotVersionFromGit = True
if out.startswith(GIT_TAG_PREFIX):
- Context.g_module.VERSION = out[len(GIT_TAG_PREFIX):]
+ Context.g_module.VERSION = out.lstrip(GIT_TAG_PREFIX)
else:
- Context.g_module.VERSION = "%s-commit-%s" % (Context.g_module.VERSION_BASE, out)
- except OSError:
+ # no tags matched
+ Context.g_module.VERSION = '%s-commit-%s' % (VERSION_BASE, out)
+ except subprocess.CalledProcessError:
pass
versionFile = ctx.path.find_node('VERSION')
-
- if not didGetVersion and versionFile is not None:
+ if not gotVersionFromGit and versionFile is not None:
try:
Context.g_module.VERSION = versionFile.read()
return
- except (OSError, IOError):
+ except EnvironmentError:
pass
# version was obtained from git, update VERSION file if necessary
if versionFile is not None:
try:
- version = versionFile.read()
- if version == Context.g_module.VERSION:
- return # no need to update
- except (OSError, IOError):
- Logs.warn("VERSION file exists, but not readable")
+ if versionFile.read() == Context.g_module.VERSION:
+ # already up-to-date
+ return
+ except EnvironmentError as e:
+ Logs.warn('%s exists but is not readable (%s)' % (versionFile, e.strerror))
else:
versionFile = ctx.path.make_node('VERSION')
- if versionFile is None:
- return
-
try:
versionFile.write(Context.g_module.VERSION)
- except (OSError, IOError):
- Logs.warn("VERSION file is not writeable")
+ except EnvironmentError as e:
+ Logs.warn('%s is not writable (%s)' % (versionFile, e.strerror))
def dist(ctx):
version(ctx)