build: align minimum build dependencies with ndn-cxx
* Recommend gcc >= 7.4.0
* Require clang >= 4.0, or Xcode >= 9.0 on macOS
* Silence an ABI-related diagnostic message from gcc on armv7
* Make graphviz optional for building documentation
* Sync sphinx configuration
Change-Id: Iff1920b0b5580d58db9aeef11298f11e22d9b3cb
diff --git a/.waf-tools/default-compiler-flags.py b/.waf-tools/default-compiler-flags.py
index 9e045c3..f3be6e7 100644
--- a/.waf-tools/default-compiler-flags.py
+++ b/.waf-tools/default-compiler-flags.py
@@ -1,10 +1,11 @@
# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+import platform
from waflib import Configure, Logs, Utils
def options(opt):
opt.add_option('--debug', '--with-debug', action='store_true', default=False,
- help='Compile in debugging mode with minimal optimizations (-O0 or -Og)')
+ help='Compile in debugging mode with minimal optimizations (-Og)')
def configure(conf):
conf.start_msg('Checking C++ compiler version')
@@ -17,15 +18,21 @@
if cxx == 'gcc':
if ccver < (5, 3, 0):
errmsg = ('The version of gcc you are using is too old.\n'
- 'The minimum supported gcc version is 5.3.0.')
+ 'The minimum supported gcc version is 7.4.0.')
+ elif ccver < (7, 4, 0):
+ warnmsg = ('Using a version of gcc older than 7.4.0 is not '
+ 'officially supported and may result in build failures.')
conf.flags = GccFlags()
elif cxx == 'clang':
- if ccver < (3, 6, 0):
+ if Utils.unversioned_sys_platform() == 'darwin' and ccver < (9, 0, 0):
+ errmsg = ('The version of Xcode you are using is too old.\n'
+ 'The minimum supported Xcode version is 9.0.')
+ elif ccver < (4, 0, 0):
errmsg = ('The version of clang you are using is too old.\n'
- 'The minimum supported clang version is 3.6.0.')
+ 'The minimum supported clang version is 4.0.')
conf.flags = ClangFlags()
else:
- warnmsg = 'Note: %s compiler is unsupported' % cxx
+ warnmsg = '%s compiler is unsupported' % cxx
conf.flags = CompilerFlags()
if errmsg:
@@ -33,7 +40,7 @@
conf.fatal(errmsg)
elif warnmsg:
conf.end_msg(ccverstr, color='YELLOW')
- Logs.warn(warnmsg)
+ Logs.warn('WARNING: ' + warnmsg)
else:
conf.end_msg(ccverstr)
@@ -137,13 +144,14 @@
def getDebugFlags(self, conf):
flags = super(GccBasicFlags, self).getDebugFlags(conf)
- flags['CXXFLAGS'] += ['-O0',
- '-Og', # gcc >= 4.8, clang >= 4.0
+ flags['CXXFLAGS'] += ['-Og',
'-g3',
'-pedantic',
'-Wall',
'-Wextra',
'-Werror',
+ '-Wcatch-value=2',
+ '-Wextra-semi',
'-Wnon-virtual-dtor',
'-Wno-error=deprecated-declarations', # Bug #3795
'-Wno-error=maybe-uninitialized', # Bug #1615
@@ -159,6 +167,8 @@
'-pedantic',
'-Wall',
'-Wextra',
+ '-Wcatch-value=2',
+ '-Wextra-semi',
'-Wnon-virtual-dtor',
'-Wno-unused-parameter',
]
@@ -168,49 +178,50 @@
class GccFlags(GccBasicFlags):
def getDebugFlags(self, conf):
flags = super(GccFlags, self).getDebugFlags(conf)
- flags['CXXFLAGS'] += ['-fdiagnostics-color']
+ flags['CXXFLAGS'] += ['-fdiagnostics-color',
+ '-Wredundant-tags',
+ ]
+ if platform.machine() == 'armv7l' and self.getCompilerVersion(conf) >= (7, 1, 0):
+ flags['CXXFLAGS'] += ['-Wno-psabi'] # Bug #5106
return flags
def getOptimizedFlags(self, conf):
flags = super(GccFlags, self).getOptimizedFlags(conf)
- flags['CXXFLAGS'] += ['-fdiagnostics-color']
+ flags['CXXFLAGS'] += ['-fdiagnostics-color',
+ '-Wredundant-tags',
+ ]
+ if platform.machine() == 'armv7l' and self.getCompilerVersion(conf) >= (7, 1, 0):
+ flags['CXXFLAGS'] += ['-Wno-psabi'] # Bug #5106
return flags
class ClangFlags(GccBasicFlags):
def getGeneralFlags(self, conf):
flags = super(ClangFlags, self).getGeneralFlags(conf)
- if Utils.unversioned_sys_platform() == 'darwin' and self.getCompilerVersion(conf) >= (9, 0, 0):
+ if Utils.unversioned_sys_platform() == 'darwin':
# Bug #4296
flags['CXXFLAGS'] += [['-isystem', '/usr/local/include'], # for Homebrew
['-isystem', '/opt/local/include']] # for MacPorts
- if Utils.unversioned_sys_platform() == 'freebsd':
- flags['CXXFLAGS'] += [['-isystem', '/usr/local/include']] # Bug #4790
+ elif Utils.unversioned_sys_platform() == 'freebsd':
+ # Bug #4790
+ flags['CXXFLAGS'] += [['-isystem', '/usr/local/include']]
return flags
def getDebugFlags(self, conf):
flags = super(ClangFlags, self).getDebugFlags(conf)
flags['CXXFLAGS'] += ['-fcolor-diagnostics',
- '-Wextra-semi',
'-Wundefined-func-template',
'-Wno-unused-local-typedef', # Bugs #2657 and #3209
]
- version = self.getCompilerVersion(conf)
- if version < (3, 9, 0) or (Utils.unversioned_sys_platform() == 'darwin' and version < (8, 1, 0)):
- flags['CXXFLAGS'] += ['-Wno-unknown-pragmas']
- if version < (6, 0, 0):
+ if self.getCompilerVersion(conf) < (6, 0, 0):
flags['CXXFLAGS'] += ['-Wno-missing-braces'] # Bug #4721
return flags
def getOptimizedFlags(self, conf):
flags = super(ClangFlags, self).getOptimizedFlags(conf)
flags['CXXFLAGS'] += ['-fcolor-diagnostics',
- '-Wextra-semi',
'-Wundefined-func-template',
'-Wno-unused-local-typedef', # Bugs #2657 and #3209
]
- version = self.getCompilerVersion(conf)
- if version < (3, 9, 0) or (Utils.unversioned_sys_platform() == 'darwin' and version < (8, 1, 0)):
- flags['CXXFLAGS'] += ['-Wno-unknown-pragmas']
- if version < (6, 0, 0):
+ if self.getCompilerVersion(conf) < (6, 0, 0):
flags['CXXFLAGS'] += ['-Wno-missing-braces'] # Bug #4721
return flags
diff --git a/docs/INSTALL.rst b/docs/INSTALL.rst
index 771a07c..35cd53b 100644
--- a/docs/INSTALL.rst
+++ b/docs/INSTALL.rst
@@ -1,7 +1,5 @@
-.. _NDNS Installation Instructions:
-
-NDNS Installation Instructions
-==============================
+Installation Instructions
+=========================
Prerequisites
-------------
diff --git a/docs/conf.py b/docs/conf.py
index 8dbae78..76260ff 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -1,10 +1,8 @@
-# -*- coding: utf-8 -*-
-#
# Configuration file for the Sphinx documentation builder.
#
# This file only contains a selection of the most common options. For a full
# list see the documentation:
-# http://www.sphinx-doc.org/en/master/config
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
# -- Path setup --------------------------------------------------------------
@@ -20,13 +18,13 @@
# -- Project information -----------------------------------------------------
project = u'NDNS: Domain Name Service for Named Data Networking'
-copyright = u'Copyright © 2014-2020 Named Data Networking Project.'
+copyright = u'Copyright © 2014-2021 Named Data Networking Project.'
author = u'Named Data Networking Project'
-# The short X.Y version
+# The short X.Y version.
#version = ''
-# The full version, including alpha/beta/rc tags
+# The full version, including alpha/beta/rc tags.
#release = ''
# There are two options for replacing |today|: either, you set today to some
@@ -40,7 +38,7 @@
# If your documentation needs a minimal Sphinx version, state it here.
#
-needs_sphinx = '1.1'
+needs_sphinx = '1.3'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
@@ -87,6 +85,12 @@
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
+html_copy_source = False
+html_show_sourcelink = False
+
+# Disable syntax highlighting of code blocks by default.
+highlight_language = 'none'
+
# -- Options for LaTeX output ------------------------------------------------
diff --git a/docs/doxygen.conf.in b/docs/doxygen.conf.in
index aefde0f..61fc5e9 100644
--- a/docs/doxygen.conf.in
+++ b/docs/doxygen.conf.in
@@ -230,12 +230,6 @@
ALIASES =
-# This tag can be used to specify a number of word-keyword mappings (TCL only).
-# A mapping has the form "name=value". For example adding "class=itcl::class"
-# will allow you to use the command class in the itcl::class meaning.
-
-TCL_SUBST =
-
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C. For
# instance, some of the names that are used will be different. The list of all
@@ -571,7 +565,7 @@
# detailed member documentation.
# The default value is: NO.
-SORT_MEMBERS_CTORS_1ST = NO
+SORT_MEMBERS_CTORS_1ST = YES
# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
# of group names into alphabetical order. If set to NO the group names will
@@ -1019,13 +1013,6 @@
ALPHABETICAL_INDEX = YES
-# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
-# which the alphabetical index list will be split.
-# Minimum value: 1, maximum value: 20, default value: 5.
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
-COLS_IN_ALPHA_INDEX = 5
-
# In case all classes in a project start with a common prefix, all classes will
# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
# can be used to specify a prefix (or a list of prefixes) that should be ignored
@@ -1724,16 +1711,6 @@
LATEX_HIDE_INDICES = NO
-# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
-# code with syntax highlighting in the LaTeX output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_SOURCE_CODE = NO
-
# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
# bibliography, e.g. plainnat, or ieeetr. See
# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
@@ -1806,16 +1783,6 @@
RTF_EXTENSIONS_FILE =
-# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
-# with syntax highlighting in the RTF output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_SOURCE_CODE = NO
-
#---------------------------------------------------------------------------
# Configuration options related to the man page output
#---------------------------------------------------------------------------
@@ -1905,15 +1872,6 @@
DOCBOOK_OUTPUT = docbook
-# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
-# program listings (including syntax highlighting and cross-referencing
-# information) to the DOCBOOK output. Note that enabling this will significantly
-# increase the size of the DOCBOOK output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_PROGRAMLISTING = NO
-
#---------------------------------------------------------------------------
# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
@@ -2095,12 +2053,6 @@
EXTERNAL_PAGES = YES
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of 'which perl').
-# The default file (with absolute path) is: /usr/bin/perl.
-
-PERL_PATH = /usr/bin/perl
-
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
@@ -2114,15 +2066,6 @@
CLASS_DIAGRAMS = YES
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see:
-# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where
-# the mscgen tool resides. If left empty the tool is assumed to be found in the
-# default search path.
-
-MSCGEN_PATH =
-
# You can include diagrams made with dia in doxygen documentation. Doxygen will
# then run dia to produce the diagram and insert it in the documentation. The
# DIA_PATH tag allows you to specify the directory where the dia binary resides.
@@ -2141,9 +2084,9 @@
# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
# Bell Labs. The other options in this section have no effect if this option is
# set to NO
-# The default value is: NO.
+# The default value is: YES.
-HAVE_DOT = YES
+HAVE_DOT = @HAVE_DOT@
# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
# to run in parallel. When set to 0 doxygen will base this on the number of
@@ -2209,7 +2152,7 @@
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
-UML_LOOK = YES
+UML_LOOK = NO
# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
# class node. If there are many fields or methods and many nodes the graph may
@@ -2260,7 +2203,7 @@
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
-CALL_GRAPH = YES
+CALL_GRAPH = NO
# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
# dependency graph for every global function or class method.
@@ -2272,7 +2215,7 @@
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
-CALLER_GRAPH = YES
+CALLER_GRAPH = NO
# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
# hierarchy of all classes instead of a textual one.
diff --git a/docs/index.rst b/docs/index.rst
index de90ecc..4bfa906 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -18,10 +18,10 @@
ndns-db-manage
manpages
-**Additional documentation**
+Additional Documentation
+^^^^^^^^^^^^^^^^^^^^^^^^
* `API documentation (doxygen) <doxygen/annotated.html>`_
-
* `Addressing Operational Challenges in Named Data Networking Through NDNS Distributed
Database <http://lasr.cs.ucla.edu/afanasyev/data/files/Afanasyev/afanasyev-phd-thesis.pdf>`_
(PhD Thesis, outlining purpose and overall design of the NDNS system)
@@ -29,7 +29,7 @@
Downloading
-----------
-* `Source code GitHub git repository <https://github.com/named-data/NDNS>`_.
+* `Source code git repository <https://github.com/named-data/NDNS>`_
License
-------
diff --git a/docs/manpages.rst b/docs/manpages.rst
index 1948996..ac08dce 100644
--- a/docs/manpages.rst
+++ b/docs/manpages.rst
@@ -1,8 +1,8 @@
-.. _Manpages:
-
-Manpages
-========
+Man pages
+=========
.. toctree::
- manpages/ndns-daemon
+ :glob:
:maxdepth: 1
+
+ manpages/*
diff --git a/docs/named_data_theme/layout.html b/docs/named_data_theme/layout.html
index 16ae50f..aa25686 100644
--- a/docs/named_data_theme/layout.html
+++ b/docs/named_data_theme/layout.html
@@ -12,7 +12,7 @@
<div class="row">
<div class="three columns">
<div id="logo">
- <a href="http://named-data.net" title="A Future Internet Architecture"><img src="http://named-data.net/wp-content/uploads/cropped-20130722_Logo2.png" alt="" /></a>
+ <a href="https://named-data.net" title="A Future Internet Architecture"><img src="https://named-data.net/wp-content/uploads/cropped-20130722_Logo2.png" alt="" /></a>
</div><!--logo end-->
</div>
@@ -38,12 +38,12 @@
<h3>{{ _('Table Of Contents') }}</h3>
{{ toctree(includehidden=True) }}
- <h3>{{ _('Additional documenation') }}</h3>
+ <h3>{{ _('Developer documentation') }}</h3>
<ul>
- <li class="toctree-l1"><a class="reference external" href="http://redmine.named-data.net/projects/nfd/wiki">NFD Wiki</a></li>
<li class="toctree-l1"><a class="reference internal" href="doxygen/annotated.html">API documentation (doxygen)</a></li>
</ul>
{%- endblock %}
+
{%- block sidebarsearch %}
<h3 style="margin-top: 1.5em;">{{ _('Search') }}</h3>
<form class="search" action="{{ pathto('search') }}" method="get">
@@ -74,7 +74,7 @@
<div class="row">
<div class="twelve columns">
- <div id="copyright">This research is partially supported by NSF (Award <a href="http://www.nsf.gov/awardsearch/showAward?AWD_ID=1040868" target="_blank>">CNS-1040868</a>)<br/><br/><a rel="license" href="http://creativecommons.org/licenses/by/3.0/deed.en_US" target="_blank">Creative Commons Attribution 3.0 Unported License</a> except where noted.</div>
+ <div id="copyright">This research is partially supported by NSF (Award <a href="https://www.nsf.gov/awardsearch/showAward?AWD_ID=1040868" target="_blank>">CNS-1040868</a>)<br/><br/><a rel="license" href="https://creativecommons.org/licenses/by/3.0/deed.en_US" target="_blank">Creative Commons Attribution 3.0 Unported License</a> except where noted.</div>
</div>
</div>
diff --git a/wscript b/wscript
index ace234c..7683c06 100644
--- a/wscript
+++ b/wscript
@@ -11,7 +11,8 @@
def options(opt):
opt.load(['compiler_cxx', 'gnu_dirs'])
- opt.load(['default-compiler-flags', 'coverage', 'sanitizers', 'boost', 'sqlite3',
+ opt.load(['default-compiler-flags',
+ 'coverage', 'sanitizers', 'boost', 'sqlite3',
'doxygen', 'sphinx_build'],
tooldir=['.waf-tools'])
@@ -24,17 +25,19 @@
'default-compiler-flags', 'boost', 'sqlite3',
'doxygen', 'sphinx_build'])
- conf.env['WITH_TESTS'] = conf.options.with_tests
+ conf.env.WITH_TESTS = conf.options.with_tests
+
+ conf.find_program('dot', var='DOT', mandatory=False)
conf.check_cfg(package='libndn-cxx', args=['--cflags', '--libs'], uselib_store='NDN_CXX',
pkg_config_path=os.environ.get('PKG_CONFIG_PATH', '%s/pkgconfig' % conf.env.LIBDIR))
conf.check_sqlite3()
- USED_BOOST_LIBS = ['system', 'program_options', 'filesystem', 'thread', 'log']
- if conf.env['WITH_TESTS']:
- USED_BOOST_LIBS += ['unit_test_framework']
- conf.check_boost(lib=USED_BOOST_LIBS, mt=True)
+ boost_libs = ['system', 'program_options', 'filesystem', 'thread', 'log']
+ if conf.env.WITH_TESTS:
+ boost_libs.append('unit_test_framework')
+ conf.check_boost(lib=boost_libs, mt=True)
conf.check_compiler_flags()
@@ -42,12 +45,12 @@
conf.load('coverage')
conf.load('sanitizers')
- conf.define_cond('HAVE_TESTS', conf.env['WITH_TESTS'])
- conf.define('CONFDIR', '%s/ndn/ndns' % conf.env['SYSCONFDIR'])
- conf.define('DEFAULT_DBFILE', '%s/lib/ndn/ndns/ndns.db' % conf.env['LOCALSTATEDIR'])
+ conf.define_cond('HAVE_TESTS', conf.env.WITH_TESTS)
+ conf.define('CONFDIR', '%s/ndn/ndns' % conf.env.SYSCONFDIR)
+ conf.define('DEFAULT_DBFILE', '%s/lib/ndn/ndns/ndns.db' % conf.env.LOCALSTATEDIR)
conf.write_config_header('src/config.hpp', define_prefix='NDNS_')
-def build (bld):
+def build(bld):
version(bld)
bld(features='subst',
@@ -70,8 +73,8 @@
includes='src',
export_includes='src')
- bld.recurse('tests')
bld.recurse('tools')
+ bld.recurse('tests')
bld(features='subst',
name='conf-samples',
@@ -79,8 +82,8 @@
target=['validator.conf.sample', 'ndns.conf.sample'],
install_path='${SYSCONFDIR}/ndn/ndns',
ANCHORPATH='anchors/root.cert',
- CONFDIR='%s/ndn/ndns' % bld.env['SYSCONFDIR'],
- DEFAULT_DBFILE='%s/lib/ndn/ndns/ndns.db' % bld.env['LOCALSTATEDIR'])
+ CONFDIR='%s/ndn/ndns' % bld.env.SYSCONFDIR,
+ DEFAULT_DBFILE='%s/lib/ndn/ndns/ndns.db' % bld.env.LOCALSTATEDIR)
if Utils.unversioned_sys_platform() == 'linux':
bld(features='subst',
@@ -94,7 +97,7 @@
builder='man',
config='docs/conf.py',
outdir='docs/manpages',
- source=bld.path.ant_glob('docs/manpages/**/*.rst'),
+ source=bld.path.ant_glob('docs/manpages/*.rst'),
install_path='${MANDIR}',
version=VERSION_BASE,
release=VERSION)
@@ -116,6 +119,7 @@
target=['docs/doxygen.conf',
'docs/named_data_theme/named_data_footer-with-analytics.html'],
VERSION=VERSION,
+ HAVE_DOT='YES' if bld.env.DOT else 'NO',
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',