mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 04:22:55 +01:00
9b8884b430
This backport does not include changes that depend on bitcoin pr 18037 70a6b529f306ff72ea1badf25e970a92b2b17ab3 lint-cppcheck: Remove -DHAVE_WORKING_BOOST_SLEEP_FOR (Anthony Towns) 294937b39de5924e772f8ed90d35c53290c8acab scheduler_tests: re-enable mockforward test (Anthony Towns) cea19f685915be8affb2203184a549576194413f Drop unused reverselock.h (Anthony Towns) d0ebd93270758ea97ea956b8821e17a2d001ea94 scheduler: switch from boost to std (Anthony Towns) b9c426012770d166e6ebfab27689be44e6e89aa5 sync.h: add REVERSE_LOCK (Anthony Towns) 306f71b4eb4a0fd8e64f47dc008bc235b80b13d9 scheduler: don't rely on boost interrupt on shutdown (Anthony Towns) Pull request description: Replacing boost functionality with C++11 stuff. Motivated by #18227, but should stand alone. Changing from `boost::condition_var` to `std::condition_var` means `threadGroup.interrupt_all` isn't enough to interrupt `serviceQueue` anymore, so that means calling `stop()` before `join_all()` is needed. And the existing reverselock.h code doesn't work with sync.h's DebugLock code (because the reversed lock won't be removed from `g_lockstack` which then leads to incorrect potential deadlock warnings), so I've replaced that with a dedicated class and macro that's aware of our debug lock behaviour. Fixes #16027, Fixes #14200, Fixes #18227 ACKs for top commit: laanwj: ACK 70a6b529f306ff72ea1badf25e970a92b2b17ab3 Tree-SHA512: d1da13adeabcf9186d114e2dad9a4fdbe2e440f7afbccde0c13dfbaf464efcd850b69d3371c5bf8b179d7ceb9d81f4af3cc22960b90834e41eaaf6d52ef7d331 # Conflicts: # src/reverselock.h # src/rpc/misc.cpp # src/scheduler.cpp # src/scheduler.h # src/sync.cpp # src/sync.h # src/test/reverselock_tests.cpp # src/test/scheduler_tests.cpp # src/test/test_dash.cpp # test/lint/extended-lint-cppcheck.sh
116 lines
3.8 KiB
Bash
Executable File
116 lines
3.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Copyright (c) 2018 The Bitcoin Core developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
#
|
|
# Check for duplicate includes.
|
|
# Guard against accidental introduction of new Boost dependencies.
|
|
# Check includes: Check for duplicate includes. Enforce bracket syntax includes.
|
|
|
|
export LC_ALL=C
|
|
IGNORE_REGEXP="/(leveldb|secp256k1|univalue|crc32c)/"
|
|
|
|
# cd to root folder of git repo for git ls-files to work properly
|
|
cd "$(dirname $0)/../.." || exit 1
|
|
|
|
filter_suffix() {
|
|
git ls-files | grep -E "^src/.*\.${1}"'$' | grep -Ev "${IGNORE_REGEXP}"
|
|
}
|
|
|
|
EXIT_CODE=0
|
|
|
|
for HEADER_FILE in $(filter_suffix h); do
|
|
DUPLICATE_INCLUDES_IN_HEADER_FILE=$(grep -E "^#include " < "${HEADER_FILE}" | sort | uniq -d)
|
|
if [[ ${DUPLICATE_INCLUDES_IN_HEADER_FILE} != "" ]]; then
|
|
echo "Duplicate include(s) in ${HEADER_FILE}:"
|
|
echo "${DUPLICATE_INCLUDES_IN_HEADER_FILE}"
|
|
echo
|
|
EXIT_CODE=1
|
|
fi
|
|
done
|
|
|
|
for CPP_FILE in $(filter_suffix cpp); do
|
|
DUPLICATE_INCLUDES_IN_CPP_FILE=$(grep -E "^#include " < "${CPP_FILE}" | sort | uniq -d)
|
|
if [[ ${DUPLICATE_INCLUDES_IN_CPP_FILE} != "" ]]; then
|
|
echo "Duplicate include(s) in ${CPP_FILE}:"
|
|
echo "${DUPLICATE_INCLUDES_IN_CPP_FILE}"
|
|
echo
|
|
EXIT_CODE=1
|
|
fi
|
|
done
|
|
|
|
INCLUDED_CPP_FILES=$(git grep -E "^#include [<\"][^>\"]+\.cpp[>\"]" -- "*.cpp" "*.h")
|
|
if [[ ${INCLUDED_CPP_FILES} != "" ]]; then
|
|
echo "The following files #include .cpp files:"
|
|
echo "${INCLUDED_CPP_FILES}"
|
|
echo
|
|
EXIT_CODE=1
|
|
fi
|
|
|
|
EXPECTED_BOOST_INCLUDES=(
|
|
boost/algorithm/string.hpp
|
|
boost/algorithm/string/classification.hpp
|
|
boost/algorithm/string/replace.hpp
|
|
boost/algorithm/string/split.hpp
|
|
boost/date_time/posix_time/posix_time.hpp
|
|
boost/filesystem.hpp
|
|
boost/filesystem/fstream.hpp
|
|
boost/function.hpp
|
|
boost/lexical_cast.hpp
|
|
boost/multi_index/hashed_index.hpp
|
|
boost/multi_index/ordered_index.hpp
|
|
boost/multi_index/sequenced_index.hpp
|
|
boost/multi_index_container.hpp
|
|
boost/optional.hpp
|
|
boost/pool/pool_alloc.hpp
|
|
boost/preprocessor/cat.hpp
|
|
boost/preprocessor/stringize.hpp
|
|
boost/signals2/connection.hpp
|
|
boost/signals2/last_value.hpp
|
|
boost/signals2/signal.hpp
|
|
boost/test/unit_test.hpp
|
|
boost/thread.hpp
|
|
boost/thread/condition_variable.hpp
|
|
boost/thread/thread.hpp
|
|
boost/variant.hpp
|
|
boost/variant/apply_visitor.hpp
|
|
boost/variant/static_visitor.hpp
|
|
)
|
|
|
|
for BOOST_INCLUDE in $(git grep '^#include <boost/' -- "*.cpp" "*.h" | cut -f2 -d: | cut -f2 -d'<' | cut -f1 -d'>' | sort -u); do
|
|
IS_EXPECTED_INCLUDE=0
|
|
for EXPECTED_BOOST_INCLUDE in "${EXPECTED_BOOST_INCLUDES[@]}"; do
|
|
if [[ "${BOOST_INCLUDE}" == "${EXPECTED_BOOST_INCLUDE}" ]]; then
|
|
IS_EXPECTED_INCLUDE=1
|
|
break
|
|
fi
|
|
done
|
|
if [[ ${IS_EXPECTED_INCLUDE} == 0 ]]; then
|
|
EXIT_CODE=1
|
|
echo "A new Boost dependency in the form of \"${BOOST_INCLUDE}\" appears to have been introduced:"
|
|
git grep "${BOOST_INCLUDE}" -- "*.cpp" "*.h"
|
|
echo
|
|
fi
|
|
done
|
|
|
|
for EXPECTED_BOOST_INCLUDE in "${EXPECTED_BOOST_INCLUDES[@]}"; do
|
|
if ! git grep -q "^#include <${EXPECTED_BOOST_INCLUDE}>" -- "*.cpp" "*.h"; then
|
|
echo "Good job! The Boost dependency \"${EXPECTED_BOOST_INCLUDE}\" is no longer used."
|
|
echo "Please remove it from EXPECTED_BOOST_INCLUDES in $0"
|
|
echo "to make sure this dependency is not accidentally reintroduced."
|
|
echo
|
|
EXIT_CODE=1
|
|
fi
|
|
done
|
|
|
|
QUOTE_SYNTAX_INCLUDES=$(git grep '^#include "' -- "*.cpp" "*.h" | grep -Ev "${IGNORE_REGEXP}")
|
|
if [[ ${QUOTE_SYNTAX_INCLUDES} != "" ]]; then
|
|
echo "Please use bracket syntax includes (\"#include <foo.h>\") instead of quote syntax includes:"
|
|
echo "${QUOTE_SYNTAX_INCLUDES}"
|
|
echo
|
|
EXIT_CODE=1
|
|
fi
|
|
|
|
exit ${EXIT_CODE}
|