diff options
| author | Russell Yanofsky <[email protected]> | 2018-04-08 14:37:50 -0400 |
|---|---|---|
| committer | Russell Yanofsky <[email protected]> | 2019-02-22 15:43:02 -0400 |
| commit | 318f41fb2cae0a46b4e4be49156562b8ed640f0c (patch) | |
| tree | 0eba3861ed4428126b2e068d79e93895375c8163 | |
| parent | Remove use of AcceptToMemoryPool in wallet code (diff) | |
| download | discoin-318f41fb2cae0a46b4e4be49156562b8ed640f0c.tar.xz discoin-318f41fb2cae0a46b4e4be49156562b8ed640f0c.zip | |
circular-dependencies: Avoid treating some .h/.cpp files as a unit
This avoids a bogus circular dependency error in the next commit:
interfaces/chain -> interfaces/wallet -> wallet/wallet -> interfaces/chain
Which is incorrect, because interfaces/chain.cpp depends only on the
interfaces/wallet.h file, not the interfaces/wallet.cpp file, and it is
wrong to treat these as a unit. Inside the interfaces directory, .h files
contain abstract class definitions and .cpp files contain implementations of
those classes, so you don't need to link against .cpp files if you're only
using the abstract class definition in the .h file.
An alternative fix might be to rename all the cpp files in the interfaces
directory like: chain.cpp->chain_impl.cpp, node.cpp->node_impl.cpp. But just
getting the linter to treat these files as independent dependencies seemed
like it would allow keeping code organization straightforward and avoiding
the need to rename things.
| -rwxr-xr-x | contrib/devtools/circular-dependencies.py | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/contrib/devtools/circular-dependencies.py b/contrib/devtools/circular-dependencies.py index abfa5ed5a..2e4657f1d 100755 --- a/contrib/devtools/circular-dependencies.py +++ b/contrib/devtools/circular-dependencies.py @@ -8,9 +8,18 @@ MAPPING = { 'core_write.cpp': 'core_io.cpp', } +# Directories with header-based modules, where the assumption that .cpp files +# define functions and variables declared in corresponding .h files is +# incorrect. +HEADER_MODULE_PATHS = [ + 'interfaces/' +] + def module_name(path): if path in MAPPING: path = MAPPING[path] + if any(path.startswith(dirpath) for dirpath in HEADER_MODULE_PATHS): + return path if path.endswith(".h"): return path[:-2] if path.endswith(".c"): |