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 . */ -#include "detail/bzip2-helper.hpp" +#include "bzip2-helper.hpp" -#include -#include -#include #include +#include +#include +#include +#include #include @@ -38,7 +39,7 @@ compress(const char* buffer, size_t bufferSize) bio::filtering_stream out; out.push(bio::bzip2_compressor()); out.push(os); - bio::stream in(reinterpret_cast(buffer), bufferSize); + bio::stream in(buffer, bufferSize); bio::copy(in, out); return os.buf(); } @@ -50,7 +51,7 @@ decompress(const char* buffer, size_t bufferSize) bio::filtering_stream out; out.push(bio::bzip2_decompressor()); out.push(os); - bio::stream in(reinterpret_cast(buffer), bufferSize); + bio::stream 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 -#include -#include +#include +#include #include #include -#include #include #include @@ -55,22 +54,19 @@ #include #include -#include #include #include #include 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::ConstBufferPtr; 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 85% 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 */ -#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 @@ namespace tlv { 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 . - * - * @author Zhenkai Zhu - * @author Chaoyi Bian - * @author Alexander Afanasyev - * @author Yingdi Yu - */ - -#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 + namespace chronosync { /** @@ -38,11 +40,7 @@ public: 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 . - * - * @author Zhenkai Zhu - * @author Chaoyi Bian - * @author Alexander Afanasyev - * @author Yingdi Yu - */ - -#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 #include @@ -36,20 +37,19 @@ State::update(const Name& info, const SeqNo& seq) { 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(info, cref(seq))); - return make_tuple(true, false, 0); + m_leaves.insert(make_shared(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 @@ State::operator+=(const State& state) return *this; } -template +template size_t -State::wireEncode(encoding::EncodingImpl& block) const +State::wireEncode(ndn::encoding::EncodingImpl& 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 +#include namespace chronosync { @@ -49,11 +49,7 @@ public: 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 @@ public: wireDecode(const Block& wire); protected: - template + template size_t - wireEncode(encoding::EncodingImpl& block) const; + wireEncode(ndn::encoding::EncodingImpl& 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 @@ def build(bld): 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 @@ def build(bld): 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')