ci: compile-check installed headers
Script copied from ndn-cxx with minor modifications
Also, move tlv.hpp to detail/ and cleanup includes in common.hpp
Change-Id: I6240601f005c61bb3547bd5acf854200f3b13093
diff --git a/.jenkins.d/02-cleanup.sh b/.jenkins.d/02-cleanup.sh
new file mode 100755
index 0000000..d56eeae
--- /dev/null
+++ b/.jenkins.d/02-cleanup.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+set -ex
+
+PROJ=ChronoSync
+
+sudo rm -fr /usr/local/include/"$PROJ"
+sudo rm -f /usr/local/lib{,64}/lib"$PROJ"*
+sudo rm -f /usr/local/lib{,64}/pkgconfig/"$PROJ".pc
diff --git a/.jenkins.d/40-headers-check.sh b/.jenkins.d/40-headers-check.sh
new file mode 100755
index 0000000..efc3bf9
--- /dev/null
+++ b/.jenkins.d/40-headers-check.sh
@@ -0,0 +1,45 @@
+#!/usr/bin/env bash
+
+# It's intentional not to use `set -x`, because this script explicitly prints useful information
+# and should not run in trace mode.
+# It's intentional not to use `set -e`, because this script wants to check all headers
+# (similar to running all test cases), instead of failing at the first error.
+
+PROJ=ChronoSync
+
+if [[ -n $DISABLE_HEADERS_CHECK ]]; then
+ echo 'Skipping headers check.'
+ exit 0
+fi
+
+if has CentOS-8 $NODE_LABELS; then
+ export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig
+fi
+
+CXX=${CXX:-g++}
+STD=-std=c++14
+CXXFLAGS="-O2 -Wall -Wno-unneeded-internal-declaration -Wno-unused-const-variable $(pkg-config --cflags libndn-cxx $PROJ)"
+INCLUDEDIR="$(pkg-config --variable=includedir $PROJ)"/$PROJ
+
+echo "Using: $CXX $STD $CXXFLAGS"
+
+NCHECKED=0
+NERRORS=0
+while IFS= read -r -d '' H; do
+ echo "Checking header ${H#${INCLUDEDIR}/}"
+ "$CXX" -xc++ $STD $CXXFLAGS -c -o /dev/null "$H"
+ [[ $? -eq 0 ]] || ((NERRORS++))
+ ((NCHECKED++))
+done < <(find "$INCLUDEDIR" -name '*.hpp' -type f -print0 2>/dev/null)
+
+if [[ $NCHECKED -eq 0 ]]; then
+ echo "No headers found. Is $PROJ installed?"
+ exit 1
+else
+ echo "$NCHECKED headers checked."
+fi
+
+if [[ $NERRORS -gt 0 ]]; then
+ echo "$NERRORS headers could not be compiled."
+ exit 1
+fi
diff --git a/src/detail/bzip2-helper.cpp b/src/detail/bzip2-helper.cpp
index 0784b7f..4c5617e 100644
--- a/src/detail/bzip2-helper.cpp
+++ b/src/detail/bzip2-helper.cpp
@@ -17,12 +17,13 @@
* ChronoSync, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "detail/bzip2-helper.hpp"
+#include "bzip2-helper.hpp"
-#include <boost/iostreams/filtering_stream.hpp>
-#include <boost/iostreams/detail/iostream.hpp>
-#include <boost/iostreams/filter/bzip2.hpp>
#include <boost/iostreams/copy.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/iostreams/filter/bzip2.hpp>
+#include <boost/iostreams/stream.hpp>
#include <ndn-cxx/encoding/buffer-stream.hpp>
@@ -38,7 +39,7 @@
bio::filtering_stream<bio::output> out;
out.push(bio::bzip2_compressor());
out.push(os);
- bio::stream<bio::array_source> in(reinterpret_cast<const char*>(buffer), bufferSize);
+ bio::stream<bio::array_source> in(buffer, bufferSize);
bio::copy(in, out);
return os.buf();
}
@@ -50,7 +51,7 @@
bio::filtering_stream<bio::output> out;
out.push(bio::bzip2_decompressor());
out.push(os);
- bio::stream<bio::array_source> in(reinterpret_cast<const char*>(buffer), bufferSize);
+ bio::stream<bio::array_source> in(buffer, bufferSize);
bio::copy(in, out);
return os.buf();
}
diff --git a/src/detail/common.hpp b/src/detail/common.hpp
index 4e9e4cd..dffd218 100644
--- a/src/detail/common.hpp
+++ b/src/detail/common.hpp
@@ -23,7 +23,7 @@
#ifndef CHRONOSYNC_DETAIL_COMMON_HPP
#define CHRONOSYNC_DETAIL_COMMON_HPP
-#include "detail/config.hpp"
+#include "config.hpp"
#ifdef CHRONOSYNC_WITH_TESTS
#define CHRONOSYNC_VIRTUAL_WITH_TESTS virtual
@@ -38,11 +38,10 @@
#endif
#include <cstddef>
-#include <list>
-#include <queue>
+#include <functional>
+#include <memory>
#include <set>
#include <vector>
-#include <tuple>
#include <ndn-cxx/data.hpp>
#include <ndn-cxx/face.hpp>
@@ -55,22 +54,19 @@
#include <ndn-cxx/util/time.hpp>
#include <boost/algorithm/string.hpp>
-#include <boost/asio.hpp>
#include <boost/assert.hpp>
#include <boost/core/noncopyable.hpp>
#include <boost/lexical_cast.hpp>
namespace chronosync {
-using std::size_t;
-
using boost::noncopyable;
+using std::size_t;
+
using std::bind;
-using std::cref;
using std::function;
using std::make_shared;
-using std::make_tuple;
using std::ref;
using std::shared_ptr;
@@ -79,17 +75,12 @@
using ndn::Data;
using ndn::Interest;
using ndn::Name;
-using ndn::security::ValidationError;
using ndn::security::Validator;
-
-namespace tlv {
-using namespace ndn::tlv;
-} // namespace tlv
+using ndn::security::ValidationError;
namespace name = ndn::name;
namespace time = ndn::time;
namespace security = ndn::security;
-namespace encoding = ndn::encoding;
} // namespace chronosync
diff --git a/src/tlv.hpp b/src/detail/tlv.hpp
similarity index 84%
rename from src/tlv.hpp
rename to src/detail/tlv.hpp
index 6b5f48a..5f9bd31 100644
--- a/src/tlv.hpp
+++ b/src/detail/tlv.hpp
@@ -1,6 +1,6 @@
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
/*
- * Copyright (c) 2012-2014 University of California, Los Angeles
+ * Copyright (c) 2012-2021 University of California, Los Angeles
*
* This file is part of ChronoSync, synchronization library for distributed realtime
* applications for NDN.
@@ -19,8 +19,8 @@
* @author Yingdi Yu <yingdi@cs.ucla.edu>
*/
-#ifndef CHRONOSYNC_TLV_HPP
-#define CHRONOSYNC_TLV_HPP
+#ifndef CHRONOSYNC_DETAIL_TLV_HPP
+#define CHRONOSYNC_DETAIL_TLV_HPP
namespace chronosync {
namespace tlv {
@@ -32,10 +32,10 @@
enum {
SyncReply = 128, // 0x80
StateLeaf = 129, // 0x81
- SeqNo = 130 // 0x82
+ SeqNo = 130, // 0x82
};
} // namespace tlv
} // namespace chronosync
-#endif // CHRONOSYNC_TLV_HPP
+#endif // CHRONOSYNC_DETAIL_TLV_HPP
diff --git a/src/diff-state-container.cpp b/src/diff-state-container.cpp
deleted file mode 100644
index 38a67f3..0000000
--- a/src/diff-state-container.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2012-2014 University of California, Los Angeles
- *
- * This file is part of ChronoSync, synchronization library for distributed realtime
- * applications for NDN.
- *
- * ChronoSync is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation, either
- * version 3 of the License, or (at your option) any later version.
- *
- * ChronoSync is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * ChronoSync, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
- *
- * @author Zhenkai Zhu <http://irl.cs.ucla.edu/~zhenkai/>
- * @author Chaoyi Bian <bcy@pku.edu.cn>
- * @author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
- * @author Yingdi Yu <yingdi@cs.ucla.edu>
- */
-
-#include "diff-state-container.hpp"
diff --git a/src/interest-table.hpp b/src/interest-table.hpp
index bf5685b..4fc3eb4 100644
--- a/src/interest-table.hpp
+++ b/src/interest-table.hpp
@@ -1,6 +1,6 @@
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
/*
- * Copyright (c) 2012-2017 University of California, Los Angeles
+ * Copyright (c) 2012-2021 University of California, Los Angeles
*
* This file is part of ChronoSync, synchronization library for distributed realtime
* applications for NDN.
@@ -27,6 +27,8 @@
#include "interest-container.hpp"
+#include <boost/asio/io_service.hpp>
+
namespace chronosync {
/**
@@ -38,11 +40,7 @@
class Error : public std::runtime_error
{
public:
- explicit
- Error(const std::string& what)
- : std::runtime_error(what)
- {
- }
+ using std::runtime_error::runtime_error;
};
using iterator = InterestContainer::iterator;
diff --git a/src/leaf-container.cpp b/src/leaf-container.cpp
deleted file mode 100644
index 8bad5eb..0000000
--- a/src/leaf-container.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2012-2014 University of California, Los Angeles
- *
- * This file is part of ChronoSync, synchronization library for distributed realtime
- * applications for NDN.
- *
- * ChronoSync is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation, either
- * version 3 of the License, or (at your option) any later version.
- *
- * ChronoSync is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * ChronoSync, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
- *
- * @author Zhenkai Zhu <http://irl.cs.ucla.edu/~zhenkai/>
- * @author Chaoyi Bian <bcy@pku.edu.cn>
- * @author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
- * @author Yingdi Yu <yingdi@cs.ucla.edu>
- */
-
-#include "leaf-container.hpp"
-// Simply check whether LeafContainer can compile
diff --git a/src/state.cpp b/src/state.cpp
index 2f31b89..ab9d87d 100644
--- a/src/state.cpp
+++ b/src/state.cpp
@@ -1,6 +1,6 @@
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
/*
- * Copyright (c) 2012-2020 University of California, Los Angeles
+ * Copyright (c) 2012-2021 University of California, Los Angeles
*
* This file is part of ChronoSync, synchronization library for distributed realtime
* applications for NDN.
@@ -23,6 +23,7 @@
*/
#include "state.hpp"
+#include "detail/tlv.hpp"
#include <boost/range/adaptor/reversed.hpp>
#include <ndn-cxx/util/exception.hpp>
@@ -36,20 +37,19 @@
{
m_wire.reset();
- LeafContainer::iterator leaf = m_leaves.find(info);
-
+ auto leaf = m_leaves.find(info);
if (leaf == m_leaves.end()) {
- m_leaves.insert(make_shared<Leaf>(info, cref(seq)));
- return make_tuple(true, false, 0);
+ m_leaves.insert(make_shared<Leaf>(info, seq));
+ return std::make_tuple(true, false, 0);
}
else {
if ((*leaf)->getSeq() == seq || seq < (*leaf)->getSeq()) {
- return make_tuple(false, false, 0);
+ return std::make_tuple(false, false, 0);
}
SeqNo old = (*leaf)->getSeq();
m_leaves.modify(leaf, [=] (LeafPtr& leaf) { leaf->setSeq(seq); } );
- return make_tuple(false, true, old);
+ return std::make_tuple(false, true, old);
}
}
@@ -82,9 +82,9 @@
return *this;
}
-template<encoding::Tag T>
+template<ndn::encoding::Tag T>
size_t
-State::wireEncode(encoding::EncodingImpl<T>& block) const
+State::wireEncode(ndn::encoding::EncodingImpl<T>& block) const
{
size_t totalLength = 0;
diff --git a/src/state.hpp b/src/state.hpp
index e5d0de2..7bbb60c 100644
--- a/src/state.hpp
+++ b/src/state.hpp
@@ -1,6 +1,6 @@
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
/*
- * Copyright (c) 2012-2017 University of California, Los Angeles
+ * Copyright (c) 2012-2021 University of California, Los Angeles
*
* This file is part of ChronoSync, synchronization library for distributed realtime
* applications for NDN.
@@ -26,9 +26,9 @@
#define CHRONOSYNC_STATE_HPP
#include "leaf-container.hpp"
-#include "tlv.hpp"
#include <ndn-cxx/util/sha256.hpp>
+#include <tuple>
namespace chronosync {
@@ -49,11 +49,7 @@
class Error : public std::runtime_error
{
public:
- explicit
- Error(const std::string& what)
- : std::runtime_error(what)
- {
- }
+ using std::runtime_error::runtime_error;
};
virtual
@@ -112,9 +108,9 @@
wireDecode(const Block& wire);
protected:
- template<encoding::Tag T>
+ template<ndn::encoding::Tag T>
size_t
- wireEncode(encoding::EncodingImpl<T>& block) const;
+ wireEncode(ndn::encoding::EncodingImpl<T>& block) const;
protected:
LeafContainer m_leaves;
diff --git a/tests/wscript b/tests/wscript
index e92ab29..79f4fb0 100644
--- a/tests/wscript
+++ b/tests/wscript
@@ -7,4 +7,5 @@
name='unit-tests',
source=bld.path.ant_glob('**/*.cpp'),
use='ChronoSync',
+ includes='..',
install_path=None)
diff --git a/wscript b/wscript
index 6d8d476..788cf61 100644
--- a/wscript
+++ b/wscript
@@ -58,8 +58,8 @@
cnum=VERSION,
source=bld.path.ant_glob('src/**/*.cpp'),
use='NDN_CXX BOOST',
- includes='src .',
- export_includes='src .')
+ includes='src/detail',
+ export_includes='src src/detail')
if bld.env.WITH_TESTS:
bld.recurse('tests')