Fix compilation with latest ndn-cxx

And switch source archive to xz compression

Change-Id: I2d6cf9c0f455dd377308b51f80997e4731d11fa2
diff --git a/.jenkins b/.jenkins
index 0f40e00..92b9dae 100755
--- a/.jenkins
+++ b/.jenkins
@@ -32,6 +32,9 @@
     export DISABLE_HEADERS_CHECK=yes
 fi
 
+# https://reproducible-builds.org/docs/source-date-epoch/
+export SOURCE_DATE_EPOCH=$(git log -1 --format=%ct)
+
 for file in .jenkins.d/*; do
     [[ -f $file && -x $file ]] || continue
 
diff --git a/docs/conf.py b/docs/conf.py
index 255dbe3..d1a6386 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -35,12 +35,15 @@
     'sphinx.ext.todo',
 ]
 
-def addExtensionIfExists(extension):
-    if importlib.util.find_spec(extension) is not None:
-        extensions.append(extension)
-    else:
+def addExtensionIfExists(extension: str):
+    try:
+        if importlib.util.find_spec(extension) is None:
+            raise ModuleNotFoundError(extension)
+    except (ImportError, ValueError):
         sys.stderr.write(f'WARNING: Extension {extension!r} not found. '
-                          'Some documentation may not build correctly.\n')
+                         'Some documentation may not build correctly.\n')
+    else:
+        extensions.append(extension)
 
 addExtensionIfExists('sphinxcontrib.doxylink')
 
diff --git a/src/clients/query-controller.hpp b/src/clients/query-controller.hpp
index a78b5df..ac4c94a 100644
--- a/src/clients/query-controller.hpp
+++ b/src/clients/query-controller.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2020, Regents of the University of California.
+ * Copyright (c) 2014-2023, Regents of the University of California.
  *
  * This file is part of NDNS (Named Data Networking Domain Name Service).
  * See AUTHORS.md for complete list of NDNS authors and contributors.
@@ -36,16 +36,15 @@
  * @param[in] Data the Data packet which contains the Response, client should verify the packet
  * @param[in] Response the Final Response converted from Data
  */
-typedef function<void(const Data&, const Response&)> QuerySucceedCallback;
+using QuerySucceedCallback = std::function<void(const Data&, const Response&)>;
 
 /**
  * @brief callback function when failing to get the final Response
  */
-typedef function<void(uint32_t errCode, const std::string& errMsg)> QueryFailCallback;
+using QueryFailCallback = std::function<void(uint32_t errCode, const std::string& errMsg)>;
 
 /**
  * @brief a Query Controller interface
- *
  */
 class QueryController : boost::noncopyable
 {
@@ -73,10 +72,7 @@
   virtual void
   setStartComponentIndex(size_t startIndex) = 0;
 
-public:
-  ////////////////
-  // getter
-
+public: // getters
   const Name&
   getDstLabel() const
   {
@@ -104,7 +100,6 @@
   const QueryFailCallback m_onFail;
 
   Face& m_face;
-
 };
 
 std::ostream&
diff --git a/src/daemon/config-file.hpp b/src/daemon/config-file.hpp
index 29a0587..ae92322 100644
--- a/src/daemon/config-file.hpp
+++ b/src/daemon/config-file.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  Regents of the University of California,
+ * Copyright (c) 2014-2023,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -35,24 +35,24 @@
 
 /** \brief a config file section
  */
-typedef boost::property_tree::ptree ConfigSection;
+using ConfigSection = boost::property_tree::ptree;
 
 /** \brief an optional config file section
  */
-typedef boost::optional<const ConfigSection&> OptionalConfigSection;
+using OptionalConfigSection = boost::optional<const ConfigSection&>;
 
 /** \brief callback to process a config file section
  */
-typedef function<void(const ConfigSection& section,
-                      bool isDryRun,
-                      const std::string& filename)> ConfigSectionHandler;
+using ConfigSectionHandler = std::function<void(const ConfigSection& section,
+                                                bool isDryRun,
+                                                const std::string& filename)>;
 
 /** \brief callback to process a config file section without a \p ConfigSectionHandler
  */
-typedef function<void(const std::string& filename,
-                      const std::string& sectionName,
-                      const ConfigSection& section,
-                      bool isDryRun)> UnknownConfigSectionHandler;
+using UnknownConfigSectionHandler = std::function<void(const std::string& filename,
+                                                       const std::string& sectionName,
+                                                       const ConfigSection& section,
+                                                       bool isDryRun)>;
 
 /** \brief configuration file parsing utility
  */
diff --git a/wscript b/wscript
index 5aa05c9..435fbd0 100644
--- a/wscript
+++ b/wscript
@@ -197,7 +197,9 @@
         Logs.warn('%s is not writable (%s)' % (versionFile, e.strerror))
 
 def dist(ctx):
+    ctx.algo = 'tar.xz'
     version(ctx)
 
 def distcheck(ctx):
+    ctx.algo = 'tar.xz'
     version(ctx)