mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-25 00:11:28 +02:00
These scripts are not meant for general developer usage. They are for use on the release binaries, which have been compiled in an environment that makes various assumptions in regards to c library, compiler options, hardening options, patching etc.
172 lines
5.9 KiB
Markdown
172 lines
5.9 KiB
Markdown
Contents
|
|
========
|
|
This directory contains tools for developers working on this repository.
|
|
|
|
deterministic-fuzz-coverage
|
|
===========================
|
|
|
|
A tool to check for non-determinism in fuzz coverage. To get the help, run:
|
|
|
|
```
|
|
cargo run --manifest-path ./contrib/devtools/deterministic-fuzz-coverage/Cargo.toml -- --help
|
|
```
|
|
|
|
To execute the tool, compilation has to be done with the build options:
|
|
|
|
```
|
|
-DCMAKE_C_COMPILER='clang' -DCMAKE_CXX_COMPILER='clang++' -DBUILD_FOR_FUZZING=ON -DCMAKE_CXX_FLAGS='-fprofile-instr-generate -fcoverage-mapping'
|
|
```
|
|
|
|
Both llvm-profdata and llvm-cov must be installed. Also, the qa-assets
|
|
repository must have been cloned. Finally, a fuzz target has to be picked
|
|
before running the tool:
|
|
|
|
```
|
|
cargo run --manifest-path ./contrib/devtools/deterministic-fuzz-coverage/Cargo.toml -- $PWD/build_dir $PWD/qa-assets/fuzz_corpora fuzz_target_name
|
|
```
|
|
|
|
deterministic-unittest-coverage
|
|
===========================
|
|
|
|
A tool to check for non-determinism in unit-test coverage. To get the help, run:
|
|
|
|
```
|
|
cargo run --manifest-path ./contrib/devtools/deterministic-unittest-coverage/Cargo.toml -- --help
|
|
```
|
|
|
|
To execute the tool, compilation has to be done with the build options:
|
|
|
|
```
|
|
-DCMAKE_C_COMPILER='clang' -DCMAKE_CXX_COMPILER='clang++' -DCMAKE_CXX_FLAGS='-fprofile-instr-generate -fcoverage-mapping'
|
|
```
|
|
|
|
Both llvm-profdata and llvm-cov must be installed.
|
|
|
|
```
|
|
cargo run --manifest-path ./contrib/devtools/deterministic-unittest-coverage/Cargo.toml -- $PWD/build_dir <boost unittest filter>
|
|
```
|
|
|
|
clang-format-diff.py
|
|
===================
|
|
|
|
A script to format unified git diffs according to [.clang-format](../../src/.clang-format).
|
|
|
|
Requires `clang-format`, installed e.g. via `brew install clang-format` on macOS,
|
|
or `sudo apt install clang-format` on Debian/Ubuntu.
|
|
|
|
For instance, to format the last commit with 0 lines of context,
|
|
the script should be called from the git root folder as follows.
|
|
|
|
```
|
|
git diff -U0 HEAD~1.. | ./contrib/devtools/clang-format-diff.py -p1 -i -v
|
|
```
|
|
|
|
copyright\_header.py
|
|
====================
|
|
|
|
Provides utilities for managing copyright headers of `The Bitcoin Core
|
|
developers` in repository source files. It has three subcommands:
|
|
|
|
```
|
|
$ ./copyright_header.py report <base_directory> [verbose]
|
|
$ ./copyright_header.py update <base_directory>
|
|
$ ./copyright_header.py insert <file>
|
|
```
|
|
Running these subcommands without arguments displays a usage string.
|
|
|
|
copyright\_header.py report \<base\_directory\> [verbose]
|
|
---------------------------------------------------------
|
|
|
|
Produces a report of all copyright header notices found inside the source files
|
|
of a repository. Useful to quickly visualize the state of the headers.
|
|
Specifying `verbose` will list the full filenames of files of each category.
|
|
|
|
copyright\_header.py update \<base\_directory\> [verbose]
|
|
---------------------------------------------------------
|
|
Updates all the copyright headers of `The Bitcoin Core developers` which were
|
|
changed in a year more recent than is listed. For example:
|
|
```
|
|
// Copyright (c) <firstYear>-<lastYear> The Bitcoin Core developers
|
|
```
|
|
will be updated to:
|
|
```
|
|
// Copyright (c) <firstYear>-<lastModifiedYear> The Bitcoin Core developers
|
|
```
|
|
where `<lastModifiedYear>` is obtained from the `git log` history.
|
|
|
|
This subcommand also handles copyright headers that have only a single year. In
|
|
those cases:
|
|
```
|
|
// Copyright (c) <year> The Bitcoin Core developers
|
|
```
|
|
will be updated to:
|
|
```
|
|
// Copyright (c) <year>-<lastModifiedYear> The Bitcoin Core developers
|
|
```
|
|
where the update is appropriate.
|
|
|
|
copyright\_header.py insert \<file\>
|
|
------------------------------------
|
|
Inserts a copyright header for `The Bitcoin Core developers` at the top of the
|
|
file in either Python or C++ style as determined by the file extension. If the
|
|
file is a Python file and it has `#!` starting the first line, the header is
|
|
inserted in the line below it.
|
|
|
|
The copyright dates will be set to be `<year_introduced>-<current_year>` where
|
|
`<year_introduced>` is according to the `git log` history. If
|
|
`<year_introduced>` is equal to `<current_year>`, it will be set as a single
|
|
year rather than two hyphenated years.
|
|
|
|
If the file already has a copyright for `The Bitcoin Core developers`, the
|
|
script will exit.
|
|
|
|
gen-manpages.py
|
|
===============
|
|
|
|
A small script to automatically create manpages in ../../doc/man by running the release binaries with the -help option.
|
|
This requires help2man which can be found at: https://www.gnu.org/software/help2man/
|
|
|
|
This script assumes a build directory named `build` as suggested by example build documentation.
|
|
To use it with a different build directory, set `BUILDDIR`.
|
|
For example:
|
|
|
|
```bash
|
|
BUILDDIR=$PWD/my-build-dir contrib/devtools/gen-manpages.py
|
|
```
|
|
|
|
headerssync-params.py
|
|
=====================
|
|
|
|
A script to generate optimal parameters for the headerssync module (src/headerssync.cpp). It takes no command-line
|
|
options, as all its configuration is set at the top of the file. It runs many times faster inside PyPy. Invocation:
|
|
|
|
```bash
|
|
pypy3 contrib/devtools/headerssync-params.py
|
|
```
|
|
|
|
gen-bitcoin-conf.sh
|
|
===================
|
|
|
|
Generates a bitcoin.conf file in `share/examples/` by parsing the output from `bitcoind --help`. This script is run during the
|
|
release process to include a bitcoin.conf with the release binaries and can also be run by users to generate a file locally.
|
|
When generating a file as part of the release process, make sure to commit the changes after running the script.
|
|
|
|
This script assumes a build directory named `build` as suggested by example build documentation.
|
|
To use it with a different build directory, set `BUILDDIR`.
|
|
For example:
|
|
|
|
```bash
|
|
BUILDDIR=$PWD/my-build-dir contrib/devtools/gen-bitcoin-conf.sh
|
|
```
|
|
|
|
circular-dependencies.py
|
|
========================
|
|
|
|
Run this script from the root of the source tree (`src/`) to find circular dependencies in the source code.
|
|
This looks only at which files include other files, treating the `.cpp` and `.h` file as one unit.
|
|
|
|
Example usage:
|
|
|
|
cd .../src
|
|
../contrib/devtools/circular-dependencies.py {*,*/*,*/*/*}.{h,cpp}
|