Merge #12757: Clarify include guard naming convention

3bcc0059b8 Add lint-include-guards.sh which checks include guard consistency (practicalswift)
8fd6af89a0 Fix missing or inconsistent include guards (practicalswift)
8af65d96f4 Document include guard convention (practicalswift)

Pull request description:

  * **Documentation**: Document include guard convention
  * **Fix**: Fix missing or inconsistent include guards
  * **Regression test**: Add `lint-include-guards.sh` which checks include guard consistency

Tree-SHA512: 8171878f60fd08ccbea943a11e835195750592abb9d7ab74eaa4265ae7fac523b1da9d31ca13d6ab73dd596e49986bfb7593c696e5f39567c93e610165bc2acc
This commit is contained in:
MarcoFalke 2018-04-01 18:30:17 -04:00
commit 0c5f67b8e5
No known key found for this signature in database
GPG key ID: D2EA4850E7528B25
19 changed files with 94 additions and 46 deletions

View file

@ -0,0 +1,29 @@
#!/bin/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 include guards.
HEADER_ID_PREFIX="BITCOIN_"
HEADER_ID_SUFFIX="_H"
REGEXP_EXCLUDE_FILES_WITH_PREFIX="src/(crypto/ctaes/|leveldb/|secp256k1/|tinyformat.h|univalue/)"
EXIT_CODE=0
for HEADER_FILE in $(git ls-files -- "*.h" | grep -vE "^${REGEXP_EXCLUDE_FILES_WITH_PREFIX}")
do
HEADER_ID_BASE=$(cut -f2- -d/ <<< "${HEADER_FILE}" | sed "s/\.h$//g" | tr / _ | tr "[:lower:]" "[:upper:]")
HEADER_ID="${HEADER_ID_PREFIX}${HEADER_ID_BASE}${HEADER_ID_SUFFIX}"
if [[ $(grep -cE "^#(ifndef|define) ${HEADER_ID}" "${HEADER_FILE}") != 2 ]]; then
echo "${HEADER_FILE} seems to be missing the expected include guard:"
echo " #ifndef ${HEADER_ID}"
echo " #define ${HEADER_ID}"
echo " ..."
echo " #endif // ${HEADER_ID}"
echo
EXIT_CODE=1
fi
done
exit ${EXIT_CODE}

View file

@ -606,6 +606,16 @@ namespace {
source file into account. This allows quoted includes to stand out more when source file into account. This allows quoted includes to stand out more when
the location of the source file actually is relevant. the location of the source file actually is relevant.
- Use include guards to avoid the problem of double inclusion. The header file
`foo/bar.h` should use the include guard identifier `BITCOIN_FOO_BAR_H`, e.g.
```c++
#ifndef BITCOIN_FOO_BAR_H
#define BITCOIN_FOO_BAR_H
...
#endif // BITCOIN_FOO_BAR_H
```
GUI GUI
----- -----

View file

@ -9,6 +9,9 @@
// //
// For more information, see BIP 173. // For more information, see BIP 173.
#ifndef BITCOIN_BECH32_H
#define BITCOIN_BECH32_H
#include <stdint.h> #include <stdint.h>
#include <string> #include <string>
#include <vector> #include <vector>
@ -23,3 +26,5 @@ std::string Encode(const std::string& hrp, const std::vector<uint8_t>& values);
std::pair<std::string, std::vector<uint8_t>> Decode(const std::string& str); std::pair<std::string, std::vector<uint8_t>> Decode(const std::string& str);
} // namespace bech32 } // namespace bech32
#endif // BITCOIN_BECH32_H

View file

@ -3,8 +3,8 @@
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
/** Functions for measurement of CPU cycles */ /** Functions for measurement of CPU cycles */
#ifndef H_PERF #ifndef BITCOIN_BENCH_PERF_H
#define H_PERF #define BITCOIN_BENCH_PERF_H
#include <stdint.h> #include <stdint.h>
@ -34,4 +34,4 @@ uint64_t perf_cpucycles(void);
void perf_init(void); void perf_init(void);
void perf_fini(void); void perf_fini(void);
#endif // H_PERF #endif // BITCOIN_BENCH_PERF_H

View file

@ -2,8 +2,8 @@
// Distributed under the MIT software license, see the accompanying // Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_BLOCK_ENCODINGS_H #ifndef BITCOIN_BLOCKENCODINGS_H
#define BITCOIN_BLOCK_ENCODINGS_H #define BITCOIN_BLOCKENCODINGS_H
#include <primitives/block.h> #include <primitives/block.h>
@ -206,4 +206,4 @@ public:
ReadStatus FillBlock(CBlock& block, const std::vector<CTransactionRef>& vtx_missing); ReadStatus FillBlock(CBlock& block, const std::vector<CTransactionRef>& vtx_missing);
}; };
#endif #endif // BITCOIN_BLOCKENCODINGS_H

View file

@ -2,8 +2,8 @@
// Distributed under the MIT software license, see the accompanying // Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_MERKLE #ifndef BITCOIN_CONSENSUS_MERKLE_H
#define BITCOIN_MERKLE #define BITCOIN_CONSENSUS_MERKLE_H
#include <stdint.h> #include <stdint.h>
#include <vector> #include <vector>
@ -35,4 +35,4 @@ uint256 BlockWitnessMerkleRoot(const CBlock& block, bool* mutated = nullptr);
*/ */
std::vector<uint256> BlockMerkleBranch(const CBlock& block, uint32_t position); std::vector<uint256> BlockMerkleBranch(const CBlock& block, uint32_t position);
#endif #endif // BITCOIN_CONSENSUS_MERKLE_H

View file

@ -3,8 +3,8 @@
// Distributed under the MIT software license, see the accompanying // Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_KEYIO_H #ifndef BITCOIN_KEY_IO_H
#define BITCOIN_KEYIO_H #define BITCOIN_KEY_IO_H
#include <chainparams.h> #include <chainparams.h>
#include <key.h> #include <key.h>
@ -26,4 +26,4 @@ CTxDestination DecodeDestination(const std::string& str);
bool IsValidDestinationString(const std::string& str); bool IsValidDestinationString(const std::string& str);
bool IsValidDestinationString(const std::string& str, const CChainParams& params); bool IsValidDestinationString(const std::string& str, const CChainParams& params);
#endif // BITCOIN_KEYIO_H #endif // BITCOIN_KEY_IO_H

View file

@ -2,8 +2,8 @@
// Copyright (c) 2009-2017 The Bitcoin Core developers // Copyright (c) 2009-2017 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying // Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_POLICYESTIMATOR_H #ifndef BITCOIN_POLICY_FEES_H
#define BITCOIN_POLICYESTIMATOR_H #define BITCOIN_POLICY_FEES_H
#include <amount.h> #include <amount.h>
#include <policy/feerate.h> #include <policy/feerate.h>
@ -294,4 +294,4 @@ private:
FastRandomContext insecure_rand; FastRandomContext insecure_rand;
}; };
#endif /*BITCOIN_POLICYESTIMATOR_H */ #endif // BITCOIN_POLICY_FEES_H

View file

@ -2,6 +2,9 @@
// Distributed under the MIT software license, see the accompanying // Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_QT_TEST_PAYMENTREQUESTDATA_H
#define BITCOIN_QT_TEST_PAYMENTREQUESTDATA_H
// //
// Data for paymentservertests.cpp // Data for paymentservertests.cpp
// //
@ -458,3 +461,5 @@ iEBFUrBDJZU+UEezGwr7/zoECjo5ZY3PmtZcM2sILNjyweJF6XVzGqTxUw6pN6sW\
XR2T3Gy2LzRvhVA25QgGqpz0/juS2BtmNbsZPkN9gMMwKimgzc+PuCzmEKwPK9cQ\ XR2T3Gy2LzRvhVA25QgGqpz0/juS2BtmNbsZPkN9gMMwKimgzc+PuCzmEKwPK9cQ\
YQ==\ YQ==\
"; ";
#endif // BITCOIN_QT_TEST_PAYMENTREQUESTDATA_H

View file

@ -2,8 +2,8 @@
// Distributed under the MIT software license, see the accompanying // Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_QT_TEST_RPC_NESTED_TESTS_H #ifndef BITCOIN_QT_TEST_RPCNESTEDTESTS_H
#define BITCOIN_QT_TEST_RPC_NESTED_TESTS_H #define BITCOIN_QT_TEST_RPCNESTEDTESTS_H
#include <QObject> #include <QObject>
#include <QTest> #include <QTest>
@ -19,4 +19,4 @@ class RPCNestedTests : public QObject
void rpcNestedTests(); void rpcNestedTests();
}; };
#endif // BITCOIN_QT_TEST_RPC_NESTED_TESTS_H #endif // BITCOIN_QT_TEST_RPCNESTEDTESTS_H

View file

@ -3,8 +3,8 @@
// Distributed under the MIT software license, see the accompanying // Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_RPCCLIENT_H #ifndef BITCOIN_RPC_CLIENT_H
#define BITCOIN_RPCCLIENT_H #define BITCOIN_RPC_CLIENT_H
#include <univalue.h> #include <univalue.h>
@ -19,4 +19,4 @@ UniValue RPCConvertNamedValues(const std::string& strMethod, const std::vector<s
*/ */
UniValue ParseNonRFCJSONValue(const std::string& strVal); UniValue ParseNonRFCJSONValue(const std::string& strVal);
#endif // BITCOIN_RPCCLIENT_H #endif // BITCOIN_RPC_CLIENT_H

View file

@ -3,8 +3,8 @@
// Distributed under the MIT software license, see the accompanying // Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_RPCPROTOCOL_H #ifndef BITCOIN_RPC_PROTOCOL_H
#define BITCOIN_RPCPROTOCOL_H #define BITCOIN_RPC_PROTOCOL_H
#include <fs.h> #include <fs.h>
@ -104,4 +104,4 @@ void DeleteAuthCookie();
/** Parse JSON-RPC batch reply into a vector */ /** Parse JSON-RPC batch reply into a vector */
std::vector<UniValue> JSONRPCProcessBatchReply(const UniValue &in, size_t num); std::vector<UniValue> JSONRPCProcessBatchReply(const UniValue &in, size_t num);
#endif // BITCOIN_RPCPROTOCOL_H #endif // BITCOIN_RPC_PROTOCOL_H

View file

@ -2,8 +2,8 @@
// Distributed under the MIT software license, see the accompanying // Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_RPCREGISTER_H #ifndef BITCOIN_RPC_REGISTER_H
#define BITCOIN_RPCREGISTER_H #define BITCOIN_RPC_REGISTER_H
/** These are in one header file to avoid creating tons of single-function /** These are in one header file to avoid creating tons of single-function
* headers for everything under src/rpc/ */ * headers for everything under src/rpc/ */
@ -29,4 +29,4 @@ static inline void RegisterAllCoreRPCCommands(CRPCTable &t)
RegisterRawTransactionRPCCommands(t); RegisterRawTransactionRPCCommands(t);
} }
#endif #endif // BITCOIN_RPC_REGISTER_H

View file

@ -3,8 +3,8 @@
// Distributed under the MIT software license, see the accompanying // Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_RPCSERVER_H #ifndef BITCOIN_RPC_SERVER_H
#define BITCOIN_RPCSERVER_H #define BITCOIN_RPC_SERVER_H
#include <amount.h> #include <amount.h>
#include <rpc/protocol.h> #include <rpc/protocol.h>
@ -206,4 +206,4 @@ std::string JSONRPCExecBatch(const JSONRPCRequest& jreq, const UniValue& vReq);
// Retrieves any serialization flags requested in command line argument // Retrieves any serialization flags requested in command line argument
int RPCSerializationFlags(); int RPCSerializationFlags();
#endif // BITCOIN_RPCSERVER_H #endif // BITCOIN_RPC_SERVER_H

View file

@ -3,8 +3,8 @@
// Distributed under the MIT software license, see the accompanying // Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_BITCOINCONSENSUS_H #ifndef BITCOIN_SCRIPT_BITCOINCONSENSUS_H
#define BITCOIN_BITCOINCONSENSUS_H #define BITCOIN_SCRIPT_BITCOINCONSENSUS_H
#include <stdint.h> #include <stdint.h>
@ -80,4 +80,4 @@ EXPORT_SYMBOL unsigned int bitcoinconsensus_version();
#undef EXPORT_SYMBOL #undef EXPORT_SYMBOL
#endif // BITCOIN_BITCOINCONSENSUS_H #endif // BITCOIN_SCRIPT_BITCOINCONSENSUS_H

View file

@ -2,8 +2,8 @@
// Distributed under the MIT software license, see the accompanying // Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_CONSENSUS_VERSIONBITS #ifndef BITCOIN_VERSIONBITS_H
#define BITCOIN_CONSENSUS_VERSIONBITS #define BITCOIN_VERSIONBITS_H
#include <chain.h> #include <chain.h>
#include <map> #include <map>
@ -77,4 +77,4 @@ BIP9Stats VersionBitsStatistics(const CBlockIndex* pindexPrev, const Consensus::
int VersionBitsStateSinceHeight(const CBlockIndex* pindexPrev, const Consensus::Params& params, Consensus::DeploymentPos pos, VersionBitsCache& cache); int VersionBitsStateSinceHeight(const CBlockIndex* pindexPrev, const Consensus::Params& params, Consensus::DeploymentPos pos, VersionBitsCache& cache);
uint32_t VersionBitsMask(const Consensus::Params& params, Consensus::DeploymentPos pos); uint32_t VersionBitsMask(const Consensus::Params& params, Consensus::DeploymentPos pos);
#endif #endif // BITCOIN_VERSIONBITS_H

View file

@ -2,8 +2,8 @@
// Distributed under the MIT software license, see the accompanying // Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_COINSELECTION_H #ifndef BITCOIN_WALLET_COINSELECTION_H
#define BITCOIN_COINSELECTION_H #define BITCOIN_WALLET_COINSELECTION_H
#include <amount.h> #include <amount.h>
#include <primitives/transaction.h> #include <primitives/transaction.h>
@ -51,4 +51,4 @@ bool SelectCoinsBnB(std::vector<CInputCoin>& utxo_pool, const CAmount& target_va
// Original coin selection algorithm as a fallback // Original coin selection algorithm as a fallback
bool KnapsackSolver(const CAmount& nTargetValue, std::vector<CInputCoin>& vCoins, std::set<CInputCoin>& setCoinsRet, CAmount& nValueRet); bool KnapsackSolver(const CAmount& nTargetValue, std::vector<CInputCoin>& vCoins, std::set<CInputCoin>& setCoinsRet, CAmount& nValueRet);
#endif // BITCOIN_COINSELECTION_H #endif // BITCOIN_WALLET_COINSELECTION_H

View file

@ -2,8 +2,8 @@
// Distributed under the MIT software license, see the accompanying // Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_WALLET_TEST_FIXTURE_H #ifndef BITCOIN_WALLET_TEST_WALLET_TEST_FIXTURE_H
#define BITCOIN_WALLET_TEST_FIXTURE_H #define BITCOIN_WALLET_TEST_WALLET_TEST_FIXTURE_H
#include <test/test_bitcoin.h> #include <test/test_bitcoin.h>
@ -18,5 +18,4 @@ struct WalletTestingSetup: public TestingSetup {
CWallet m_wallet; CWallet m_wallet;
}; };
#endif #endif // BITCOIN_WALLET_TEST_WALLET_TEST_FIXTURE_H

View file

@ -2,8 +2,8 @@
// Distributed under the MIT software license, see the accompanying // Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_WALLET_UTIL_H #ifndef BITCOIN_WALLET_WALLETUTIL_H
#define BITCOIN_WALLET_UTIL_H #define BITCOIN_WALLET_WALLETUTIL_H
#include <chainparamsbase.h> #include <chainparamsbase.h>
#include <util.h> #include <util.h>
@ -11,4 +11,4 @@
//! Get the path of the wallet directory. //! Get the path of the wallet directory.
fs::path GetWalletDir(); fs::path GetWalletDir();
#endif // BITCOIN_WALLET_UTIL_H #endif // BITCOIN_WALLET_WALLETUTIL_H