Compare commits
186 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0602db06eb | ||
|
|
391b2cf025 | ||
|
|
1e3dafcaa7 | ||
|
|
bf47116671 | ||
|
|
4b8a3f5d23 | ||
|
|
b667765151 | ||
|
|
809df9e462 | ||
|
|
1618c63095 | ||
|
|
93b9a61f12 | ||
|
|
9bb1a16523 | ||
|
|
cb7ef312ff | ||
|
|
ad8393634a | ||
|
|
2559a19e6f | ||
|
|
a69cc077d9 | ||
|
|
7af24577b5 | ||
|
|
a81642c650 | ||
|
|
f455bfd78a | ||
|
|
3f1db56bc1 | ||
|
|
42ea47db42 | ||
|
|
7b57bc998f | ||
|
|
4fcb915944 | ||
|
|
2ce9e586d5 | ||
|
|
f518d9ae6a | ||
|
|
3a6cdd459c | ||
|
|
1c8c7f8af9 | ||
|
|
1036c43fe5 | ||
|
|
2eea279fe6 | ||
|
|
305f768242 | ||
|
|
70268454e8 | ||
|
|
6372a75581 | ||
|
|
8195cb0d7f | ||
|
|
34153a7e4a | ||
|
|
f224cbc3d8 | ||
|
|
fc308a6cdb | ||
|
|
2ed0647ac1 | ||
|
|
a607a95d81 | ||
|
|
459f2db425 | ||
|
|
49bf090185 | ||
|
|
bb83fe1902 | ||
|
|
4c82cea99b | ||
|
|
7871a7d3be | ||
|
|
6baa317b5f | ||
|
|
55b7abfa8a | ||
|
|
5bec7744d1 | ||
|
|
92d6105c4e | ||
|
|
51001d684b | ||
|
|
c6e4d0ce82 | ||
|
|
e976c36ddf | ||
|
|
ec8dedff46 | ||
|
|
59b210d9a7 | ||
|
|
fc966bbd2b | ||
|
|
e3272242e2 | ||
|
|
9961abf9e4 | ||
|
|
bf191a7183 | ||
|
|
d570aa4290 | ||
|
|
0a5477c7e3 | ||
|
|
b4136f21cf | ||
|
|
dc897e53d8 | ||
|
|
8aee55af3d | ||
|
|
6f279652b0 | ||
|
|
ffb6ea4e5e | ||
|
|
2df65eeb98 | ||
|
|
3acec38781 | ||
|
|
0e9d04bf0a | ||
|
|
da4908c3a0 | ||
|
|
41088795dd | ||
|
|
f3457d0e83 | ||
|
|
9c8006dc33 | ||
|
|
de7053f114 | ||
|
|
fd79ed6b20 | ||
|
|
d94fc336c4 | ||
|
|
623de0acbb | ||
|
|
5b728c8e98 | ||
|
|
34833534b6 | ||
|
|
7d4546f17d | ||
|
|
cf18f42899 | ||
|
|
265bb214ec | ||
|
|
01223a0261 | ||
|
|
adbc9d164a | ||
|
|
fdad04e617 | ||
|
|
a2bd86a5ff | ||
|
|
ca0f3f734c | ||
|
|
b28415baae | ||
|
|
1646f9c760 | ||
|
|
20cdc2b36c | ||
|
|
51bad9195e | ||
|
|
405e069d3b | ||
|
|
c94527a973 | ||
|
|
27e861a9b3 | ||
|
|
dea3b87dd9 | ||
|
|
a43be5bcdb | ||
|
|
019c492490 | ||
|
|
e169349f8c | ||
|
|
b6c0209aaf | ||
|
|
6a62c745a9 | ||
|
|
0fe2a9a196 | ||
|
|
6b4d9f2736 | ||
|
|
806c78f014 | ||
|
|
a825d4af5e | ||
|
|
a36f3320a9 | ||
|
|
8d2e51d862 | ||
|
|
2f0b30a58a | ||
|
|
e4605d9dd4 | ||
|
|
2c4ff35a8f | ||
|
|
794a80eee3 | ||
|
|
f9cf7b589f | ||
|
|
f1ced0d776 | ||
|
|
2e1ac70df9 | ||
|
|
b6468d3c42 | ||
|
|
d8dd8e7356 | ||
|
|
62d18cdb89 | ||
|
|
8b61aee690 | ||
|
|
75997c3b35 | ||
|
|
8d13b4298c | ||
|
|
6642558078 | ||
|
|
19d63e8a93 | ||
|
|
b1a6c94683 | ||
|
|
921542e0bd | ||
|
|
2e31b1d48d | ||
|
|
2b97b36e5d | ||
|
|
e38211f5e8 | ||
|
|
e0bfd28de2 | ||
|
|
812c870043 | ||
|
|
eeb24a3a01 | ||
|
|
f3f7891776 | ||
|
|
47c02a8ae8 | ||
|
|
f0b67954f0 | ||
|
|
44241765e3 | ||
|
|
7310f1f2eb | ||
|
|
cef03198dc | ||
|
|
82bf6fc6d4 | ||
|
|
801d2ae924 | ||
|
|
bb5e7cb308 | ||
|
|
4d3ba18386 | ||
|
|
11a5992c90 | ||
|
|
847c75ec64 | ||
|
|
2a5d099e47 | ||
|
|
2cb720ae61 | ||
|
|
b278a43646 | ||
|
|
716066dbea | ||
|
|
016b9ada21 | ||
|
|
5398f205e3 | ||
|
|
1d80d1e319 | ||
|
|
c276c1e1d1 | ||
|
|
50bd3f626d | ||
|
|
fc2aa09cf3 | ||
|
|
9e8aae31c1 | ||
|
|
fb7b529384 | ||
|
|
f266f2668b | ||
|
|
7123b95bea | ||
|
|
843233277d | ||
|
|
46c8d23dad | ||
|
|
7c53587101 | ||
|
|
3751912e8e | ||
|
|
fa120bd01c | ||
|
|
5f2cf88c23 | ||
|
|
0ced455b99 | ||
|
|
adcc788f2a | ||
|
|
d4c9d00e7e | ||
|
|
134d824193 | ||
|
|
58f1e54cbf | ||
|
|
fad16a90b2 | ||
|
|
48790e0efa | ||
|
|
a461cf4e37 | ||
|
|
29a3cb2378 | ||
|
|
e8ad101e5b | ||
|
|
5b059a833e | ||
|
|
e51bb71e4a | ||
|
|
0a6af47ffa | ||
|
|
0d3e8183fa | ||
|
|
28b978b19e | ||
|
|
9c76cf50fb | ||
|
|
129b03ff62 | ||
|
|
07164bbead | ||
|
|
eb9c21ed79 | ||
|
|
6ab120cc6c | ||
|
|
4ef8374559 | ||
|
|
2b59cfb1f7 | ||
|
|
9fe1f6bd89 | ||
|
|
6c2b0085fb | ||
|
|
cbdd338a75 | ||
|
|
8f0121c957 | ||
|
|
008f64f80f | ||
|
|
1c4b9b3135 | ||
|
|
30c246b04f | ||
|
|
252ca9c5d8 |
40
.github/ISSUE_TEMPLATE.md
vendored
@@ -1,21 +1,37 @@
|
||||
<!-- This issue tracker is only for technical issues related to Bitcoin Core.
|
||||
<!--- Remove sections that do not apply -->
|
||||
|
||||
General bitcoin questions and/or support requests are best directed to the Bitcoin StackExchange at https://bitcoin.stackexchange.com.
|
||||
This issue tracker is only for technical issues related to bitcoin-core.
|
||||
|
||||
For reporting security issues, please read instructions at https://bitcoincore.org/en/contact/.
|
||||
General bitcoin questions and/or support requests and are best directed to the [Bitcoin StackExchange](https://bitcoin.stackexchange.com).
|
||||
|
||||
If the node is "stuck" during sync or giving "block checksum mismatch" errors, please ensure your hardware is stable by running memtest and observe CPU temperature with a load-test tool such as linpack before creating an issue! -->
|
||||
For reporting security issues, please read instructions at [https://bitcoincore.org/en/contact/](https://bitcoincore.org/en/contact/).
|
||||
|
||||
<!-- Describe the issue -->
|
||||
<!--- What behavior did you expect? -->
|
||||
### Describe the issue
|
||||
|
||||
<!--- What was the actual behavior (provide screenshots if the issue is GUI-related)? -->
|
||||
### Can you reliably reproduce the issue?
|
||||
#### If so, please list the steps to reproduce below:
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
<!--- How reliably can you reproduce the issue, what are the steps to do so? -->
|
||||
### Expected behaviour
|
||||
Tell us what should happen
|
||||
|
||||
<!-- What version of Bitcoin Core are you using, where did you get it (website, self-compiled, etc)? -->
|
||||
### Actual behaviour
|
||||
Tell us what happens instead
|
||||
|
||||
<!-- What type of machine are you observing the error on (OS/CPU and disk type)? -->
|
||||
### Screenshots.
|
||||
If the issue is related to the GUI, screenshots can be added to this issue via drag & drop.
|
||||
|
||||
<!-- Any extra information that might be useful in the debugging process. -->
|
||||
<!--- This is normally the contents of a `debug.log` or `config.log` file. Raw text or a link to a pastebin type site are preferred. -->
|
||||
### What version of bitcoin-core are you using?
|
||||
List the version number/commit ID, and if it is an official binary, self compiled or a distribution package such as PPA.
|
||||
|
||||
### Machine specs:
|
||||
- OS:
|
||||
- CPU:
|
||||
- RAM:
|
||||
- Disk size:
|
||||
- Disk Type (HD/SDD):
|
||||
|
||||
### Any extra information that might be useful in the debugging process.
|
||||
This is normally the contents of a `debug.log` or `config.log` file. Raw text or a link to a pastebin type site are preferred.
|
||||
|
||||
7
.gitignore
vendored
@@ -44,12 +44,6 @@ src/qt/forms/ui_*.h
|
||||
|
||||
src/qt/test/moc*.cpp
|
||||
|
||||
src/qt/bitcoin-qt.config
|
||||
src/qt/bitcoin-qt.creator
|
||||
src/qt/bitcoin-qt.creator.user
|
||||
src/qt/bitcoin-qt.files
|
||||
src/qt/bitcoin-qt.includes
|
||||
|
||||
.deps
|
||||
.dirstamp
|
||||
.libs
|
||||
@@ -82,7 +76,6 @@ src/qt/bitcoin-qt.includes
|
||||
Makefile
|
||||
bitcoin-qt
|
||||
Bitcoin-Qt.app
|
||||
background.tiff*
|
||||
|
||||
# Unit-tests
|
||||
Makefile.test
|
||||
|
||||
37
.travis.yml
@@ -7,8 +7,6 @@ cache:
|
||||
- depends/built
|
||||
- depends/sdk-sources
|
||||
- $HOME/.ccache
|
||||
git:
|
||||
depth: false # full clone for git subtree check, this works around issue #12388
|
||||
env:
|
||||
global:
|
||||
- MAKEJOBS=-j3
|
||||
@@ -20,24 +18,23 @@ env:
|
||||
- CCACHE_COMPRESS=1
|
||||
- BASE_OUTDIR=$TRAVIS_BUILD_DIR/out
|
||||
- SDK_URL=https://bitcoincore.org/depends-sources/sdks
|
||||
- PYTHON_DEBUG=1
|
||||
- WINEDEBUG=fixme-all
|
||||
matrix:
|
||||
# ARM
|
||||
- HOST=arm-linux-gnueabihf PACKAGES="g++-arm-linux-gnueabihf python3-pip" DEP_OPTS="NO_QT=1" CHECK_DOC=1 GOAL="install" BITCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports"
|
||||
- HOST=arm-linux-gnueabihf PACKAGES="g++-arm-linux-gnueabihf" DEP_OPTS="NO_QT=1" CHECK_DOC=1 GOAL="install" BITCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports"
|
||||
# Win32
|
||||
- HOST=i686-w64-mingw32 DPKG_ADD_ARCH="i386" DEP_OPTS="NO_QT=1" PACKAGES="python3 nsis g++-mingw-w64-i686 wine1.6" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-reduce-exports"
|
||||
# Qt4 & system libs
|
||||
- HOST=x86_64-unknown-linux-gnu PACKAGES="python3-zmq qt4-dev-tools libssl-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev libdb5.1++-dev libminiupnpc-dev libzmq3-dev libprotobuf-dev protobuf-compiler libqrencode-dev xvfb" NO_DEPENDS=1 NEED_XVFB=1 RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-zmq --with-incompatible-bdb --enable-glibc-back-compat --enable-reduce-exports --with-gui=qt4 CPPFLAGS=-DDEBUG_LOCKORDER"
|
||||
- HOST=i686-w64-mingw32 DPKG_ADD_ARCH="i386" DEP_OPTS="NO_QT=1" PACKAGES="python3 nsis g++-mingw-w64-i686 wine1.6 bc" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-reduce-exports"
|
||||
# 32-bit + dash
|
||||
- HOST=i686-pc-linux-gnu PACKAGES="g++-multilib python3-zmq" DEP_OPTS="NO_QT=1" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-zmq --enable-glibc-back-compat --enable-reduce-exports LDFLAGS=-static-libstdc++" USE_SHELL="/bin/dash"
|
||||
- HOST=i686-pc-linux-gnu PACKAGES="g++-multilib bc python3-zmq" DEP_OPTS="NO_QT=1" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-zmq --enable-glibc-back-compat --enable-reduce-exports LDFLAGS=-static-libstdc++" USE_SHELL="/bin/dash"
|
||||
# Win64
|
||||
- HOST=x86_64-w64-mingw32 DPKG_ADD_ARCH="i386" DEP_OPTS="NO_QT=1" PACKAGES="python3 nsis g++-mingw-w64-x86-64 wine1.6" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-reduce-exports"
|
||||
- HOST=x86_64-w64-mingw32 DPKG_ADD_ARCH="i386" DEP_OPTS="NO_QT=1" PACKAGES="python3 nsis g++-mingw-w64-x86-64 wine1.6 bc" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-reduce-exports"
|
||||
# x86_64 Linux (uses qt5 dev package instead of depends Qt to speed up build and avoid timeout)
|
||||
- HOST=x86_64-unknown-linux-gnu PACKAGES="python3-zmq qtbase5-dev qttools5-dev-tools protobuf-compiler libdbus-1-dev libharfbuzz-dev" DEP_OPTS="NO_QT=1 NO_UPNP=1 DEBUG=1 ALLOW_HOST_PACKAGES=1" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-zmq --with-gui=qt5 --enable-glibc-back-compat --enable-reduce-exports CPPFLAGS=-DDEBUG_LOCKORDER"
|
||||
# x86_64 Linux, No wallet
|
||||
- HOST=x86_64-unknown-linux-gnu PACKAGES="python3" DEP_OPTS="NO_WALLET=1" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports"
|
||||
# Cross-Mac
|
||||
- HOST=x86_64-apple-darwin11 PACKAGES="cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools python-dev" BITCOIN_CONFIG="--enable-gui --enable-reduce-exports --enable-werror" OSX_SDK=10.11 GOAL="deploy"
|
||||
- HOST=x86_64-apple-darwin11 PACKAGES="cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools python-dev" BITCOIN_CONFIG="--enable-gui --enable-reduce-exports" OSX_SDK=10.11 GOAL="deploy"
|
||||
|
||||
before_install:
|
||||
- export PATH=$(echo $PATH | tr ':' "\n" | sed '/\/opt\/python/d' | tr "\n" ":" | sed "s|::|:|g")
|
||||
@@ -45,31 +42,23 @@ install:
|
||||
- if [ -n "$DPKG_ADD_ARCH" ]; then sudo dpkg --add-architecture "$DPKG_ADD_ARCH" ; fi
|
||||
- if [ -n "$PACKAGES" ]; then travis_retry sudo apt-get update; fi
|
||||
- if [ -n "$PACKAGES" ]; then travis_retry sudo apt-get install --no-install-recommends --no-upgrade -qq $PACKAGES; fi
|
||||
- if [ "$CHECK_DOC" = 1 -a "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then travis_retry pip3 install flake8 --user; fi
|
||||
before_script:
|
||||
- if [ "$CHECK_DOC" = 1 -a "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then contrib/devtools/commit-script-check.sh $TRAVIS_COMMIT_RANGE; fi
|
||||
- if [ "$CHECK_DOC" = 1 ]; then contrib/devtools/git-subtree-check.sh src/crypto/ctaes; fi
|
||||
- if [ "$CHECK_DOC" = 1 ]; then contrib/devtools/git-subtree-check.sh src/secp256k1; fi
|
||||
- if [ "$CHECK_DOC" = 1 ]; then contrib/devtools/git-subtree-check.sh src/univalue; fi
|
||||
- if [ "$CHECK_DOC" = 1 ]; then contrib/devtools/git-subtree-check.sh src/leveldb; fi
|
||||
- if [ "$CHECK_DOC" = 1 ]; then contrib/devtools/check-doc.py; fi
|
||||
- if [ "$CHECK_DOC" = 1 ]; then contrib/devtools/check-rpc-mappings.py .; fi
|
||||
- if [ "$CHECK_DOC" = 1 -a "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then contrib/devtools/lint-all.sh; fi
|
||||
- if [ "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then contrib/devtools/commit-script-check.sh $TRAVIS_COMMIT_RANGE; fi
|
||||
- unset CC; unset CXX
|
||||
- if [ "$CHECK_DOC" = 1 ]; then contrib/devtools/check-doc.py; fi
|
||||
- mkdir -p depends/SDKs depends/sdk-sources
|
||||
- if [ -n "$OSX_SDK" -a ! -f depends/sdk-sources/MacOSX${OSX_SDK}.sdk.tar.gz ]; then curl --location --fail $SDK_URL/MacOSX${OSX_SDK}.sdk.tar.gz -o depends/sdk-sources/MacOSX${OSX_SDK}.sdk.tar.gz; fi
|
||||
- if [ -n "$OSX_SDK" -a -f depends/sdk-sources/MacOSX${OSX_SDK}.sdk.tar.gz ]; then tar -C depends/SDKs -xf depends/sdk-sources/MacOSX${OSX_SDK}.sdk.tar.gz; fi
|
||||
- if [ -z "$NO_DEPENDS" ]; then make $MAKEJOBS -C depends HOST=$HOST $DEP_OPTS; fi
|
||||
# Start xvfb if needed, as documented at https://docs.travis-ci.com/user/gui-and-headless-browsers/#Using-xvfb-to-Run-Tests-That-Require-a-GUI
|
||||
- if [ "$NEED_XVFB" = 1 ]; then export DISPLAY=:99.0; /sbin/start-stop-daemon --start --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac; fi
|
||||
- make $MAKEJOBS -C depends HOST=$HOST $DEP_OPTS
|
||||
script:
|
||||
- if [ "$CHECK_DOC" = 1 -a "$TRAVIS_REPO_SLUG" = "bitcoin/bitcoin" -a "$TRAVIS_PULL_REQUEST" = "false" ]; then while read LINE; do travis_retry gpg --keyserver hkp://subset.pool.sks-keyservers.net --recv-keys $LINE; done < contrib/verify-commits/trusted-keys; fi
|
||||
- if [ "$CHECK_DOC" = 1 -a "$TRAVIS_REPO_SLUG" = "bitcoin/bitcoin" -a "$TRAVIS_PULL_REQUEST" = "false" ]; then git fetch --unshallow; fi
|
||||
- if [ "$CHECK_DOC" = 1 -a "$TRAVIS_REPO_SLUG" = "bitcoin/bitcoin" -a "$TRAVIS_PULL_REQUEST" = "false" ]; then contrib/verify-commits/verify-commits.sh; fi
|
||||
- export TRAVIS_COMMIT_LOG=`git log --format=fuller -1`
|
||||
- if [ -n "$USE_SHELL" ]; then export CONFIG_SHELL="$USE_SHELL"; fi
|
||||
- OUTDIR=$BASE_OUTDIR/$TRAVIS_PULL_REQUEST/$TRAVIS_JOB_NUMBER-$HOST
|
||||
- BITCOIN_CONFIG_ALL="--disable-dependency-tracking --prefix=$TRAVIS_BUILD_DIR/depends/$HOST --bindir=$OUTDIR/bin --libdir=$OUTDIR/lib"
|
||||
- if [ -z "$NO_DEPENDS" ]; then depends/$HOST/native/bin/ccache --max-size=$CCACHE_SIZE; fi
|
||||
- depends/$HOST/native/bin/ccache --max-size=$CCACHE_SIZE
|
||||
- test -n "$USE_SHELL" && eval '"$USE_SHELL" -c "./autogen.sh"' || ./autogen.sh
|
||||
- mkdir build && cd build
|
||||
- ../configure --cache-file=config.cache $BITCOIN_CONFIG_ALL $BITCOIN_CONFIG || ( cat config.log && false)
|
||||
@@ -79,8 +68,8 @@ script:
|
||||
- make $MAKEJOBS $GOAL || ( echo "Build failure. Verbose build follows." && make $GOAL V=1 ; false )
|
||||
- export LD_LIBRARY_PATH=$TRAVIS_BUILD_DIR/depends/$HOST/lib
|
||||
- if [ "$RUN_TESTS" = "true" ]; then travis_wait 30 make $MAKEJOBS check VERBOSE=1; fi
|
||||
- if [ "$TRAVIS_EVENT_TYPE" = "cron" ]; then extended="--extended --exclude feature_pruning,feature_dbcrash"; fi
|
||||
- if [ "$RUN_TESTS" = "true" ]; then test/functional/test_runner.py --combinedlogslen=4000 --coverage --quiet ${extended}; fi
|
||||
- if [ "$TRAVIS_EVENT_TYPE" = "cron" ]; then extended="--extended --exclude pruning,dbcrash"; fi
|
||||
- if [ "$RUN_TESTS" = "true" ]; then test/functional/test_runner.py --coverage --quiet ${extended}; fi
|
||||
after_script:
|
||||
- echo $TRAVIS_COMMIT_RANGE
|
||||
- echo $TRAVIS_COMMIT_LOG
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
|
||||
[bitcoin.qt-translation-016x]
|
||||
[bitcoin.qt-translation-014x]
|
||||
file_filter = src/qt/locale/bitcoin_<lang>.ts
|
||||
source_file = src/qt/locale/bitcoin_en.ts
|
||||
source_lang = en
|
||||
|
||||
@@ -24,9 +24,9 @@ facilitates social contribution, easy testing and peer review.
|
||||
|
||||
To contribute a patch, the workflow is as follows:
|
||||
|
||||
1. Fork repository
|
||||
1. Create topic branch
|
||||
1. Commit patches
|
||||
- Fork repository
|
||||
- Create topic branch
|
||||
- Commit patches
|
||||
|
||||
The project coding conventions in the [developer notes](doc/developer-notes.md)
|
||||
must be adhered to.
|
||||
@@ -42,8 +42,8 @@ in init.cpp") in which case a single title line is sufficient. Commit messages s
|
||||
helpful to people reading your code in the future, so explain the reasoning for
|
||||
your decisions. Further explanation [here](http://chris.beams.io/posts/git-commit/).
|
||||
|
||||
If a particular commit references another issue, please add the reference. For
|
||||
example: `refs #1234` or `fixes #4321`. Using the `fixes` or `closes` keywords
|
||||
If a particular commit references another issue, please add the reference, for
|
||||
example `refs #1234`, or `fixes #4321`. Using the `fixes` or `closes` keywords
|
||||
will cause the corresponding issue to be closed when the pull request is merged.
|
||||
|
||||
Please refer to the [Git manual](https://git-scm.com/doc) for more information
|
||||
@@ -81,11 +81,7 @@ Examples:
|
||||
Qt: Add feed bump button
|
||||
Trivial: Fix typo in init.cpp
|
||||
|
||||
Note that translations should not be submitted as pull requests, please see
|
||||
[Translation Process](https://github.com/bitcoin/bitcoin/blob/master/doc/translation_process.md)
|
||||
for more information on helping with translations.
|
||||
|
||||
If a pull request is not to be considered for merging (yet), please
|
||||
If a pull request is specifically not to be considered for merging (yet) please
|
||||
prefix the title with [WIP] or use [Tasks Lists](https://help.github.com/articles/basic-writing-and-formatting-syntax/#task-lists)
|
||||
in the body of the pull request to indicate tasks are pending.
|
||||
|
||||
@@ -157,14 +153,6 @@ behaviour of code within the pull request (bugs must be preserved as is).
|
||||
Project maintainers aim for a quick turnaround on refactoring pull requests, so
|
||||
where possible keep them short, uncomplex and easy to verify.
|
||||
|
||||
Pull requests that refactor the code should not be made by new contributors. It
|
||||
requires a certain level of experience to know where the code belongs to and to
|
||||
understand the full ramification (including rebase effort of open pull requests).
|
||||
|
||||
Trivial pull requests or pull requests that refactor the code with no clear
|
||||
benefits may be immediately closed by the maintainers to reduce unnecessary
|
||||
workload on reviewing.
|
||||
|
||||
|
||||
"Decision Making" Process
|
||||
-------------------------
|
||||
@@ -186,7 +174,7 @@ In general, all pull requests must:
|
||||
the project (for example refactoring for modularisation);
|
||||
- Be well peer reviewed;
|
||||
- Have unit tests and functional tests where appropriate;
|
||||
- Follow code style guidelines ([C++](doc/developer-notes.md), [functional tests](test/functional/README.md));
|
||||
- Follow code style guidelines;
|
||||
- Not break the existing test suite;
|
||||
- Where bugs are fixed, where possible, there should be unit tests
|
||||
demonstrating the bug and also proving the fix. This helps prevent regression.
|
||||
|
||||
4
COPYING
@@ -1,7 +1,7 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2009-2018 The Bitcoin Core developers
|
||||
Copyright (c) 2009-2018 Bitcoin Developers
|
||||
Copyright (c) 2009-2017 The Bitcoin Core developers
|
||||
Copyright (c) 2009-2017 Bitcoin Developers
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -9,6 +9,7 @@ SUBDIRS += doc/man
|
||||
endif
|
||||
.PHONY: deploy FORCE
|
||||
|
||||
GZIP_ENV="-9n"
|
||||
export PYTHONPATH
|
||||
|
||||
if BUILD_BITCOIN_LIBS
|
||||
@@ -42,11 +43,10 @@ DIST_CONTRIB = $(top_srcdir)/contrib/bitcoin-cli.bash-completion \
|
||||
$(top_srcdir)/contrib/bitcoin-tx.bash-completion \
|
||||
$(top_srcdir)/contrib/bitcoind.bash-completion \
|
||||
$(top_srcdir)/contrib/init \
|
||||
$(top_srcdir)/contrib/install_db4.sh \
|
||||
$(top_srcdir)/contrib/rpm
|
||||
DIST_SHARE = \
|
||||
$(top_srcdir)/share/genbuild.sh \
|
||||
$(top_srcdir)/share/rpcauth
|
||||
$(top_srcdir)/share/rpcuser
|
||||
|
||||
BIN_CHECKS=$(top_srcdir)/contrib/devtools/symbol-check.py \
|
||||
$(top_srcdir)/contrib/devtools/security-check.py
|
||||
@@ -279,4 +279,4 @@ DISTCHECK_CONFIGURE_FLAGS = --enable-man
|
||||
|
||||
clean-local:
|
||||
rm -rf coverage_percent.txt test_bitcoin.coverage/ total.coverage/ test/tmp/ cache/ $(OSX_APP)
|
||||
rm -rf test/functional/__pycache__ test/functional/test_framework/__pycache__ test/cache
|
||||
rm -rf test/functional/__pycache__
|
||||
|
||||
@@ -64,7 +64,7 @@ AC_DEFUN([BITCOIN_FIND_BDB48],[
|
||||
|
||||
if test "x$BDB_LIBS" = "x"; then
|
||||
# TODO: Ideally this could find the library version and make sure it matches the headers being used
|
||||
for searchlib in db_cxx-4.8 db_cxx db4_cxx; do
|
||||
for searchlib in db_cxx-4.8 db_cxx; do
|
||||
AC_CHECK_LIB([$searchlib],[main],[
|
||||
BDB_LIBS="-l${searchlib}"
|
||||
break
|
||||
|
||||
@@ -5,8 +5,8 @@ dnl file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
dnl Helper for cases where a qt dependency is not met.
|
||||
dnl Output: If qt version is auto, set bitcoin_enable_qt to false. Else, exit.
|
||||
AC_DEFUN([BITCOIN_QT_FAIL],[
|
||||
if test "x$bitcoin_qt_want_version" = xauto && test "x$bitcoin_qt_force" != xyes; then
|
||||
if test "x$bitcoin_enable_qt" != xno; then
|
||||
if test "x$bitcoin_qt_want_version" = "xauto" && test x$bitcoin_qt_force != xyes; then
|
||||
if test x$bitcoin_enable_qt != xno; then
|
||||
AC_MSG_WARN([$1; bitcoin-qt frontend will not be built])
|
||||
fi
|
||||
bitcoin_enable_qt=no
|
||||
@@ -17,7 +17,7 @@ AC_DEFUN([BITCOIN_QT_FAIL],[
|
||||
])
|
||||
|
||||
AC_DEFUN([BITCOIN_QT_CHECK],[
|
||||
if test "x$bitcoin_enable_qt" != xno && test "x$bitcoin_qt_want_version" != xno; then
|
||||
if test "x$bitcoin_enable_qt" != "xno" && test x$bitcoin_qt_want_version != xno; then
|
||||
true
|
||||
$1
|
||||
else
|
||||
@@ -35,12 +35,12 @@ dnl Inputs: $4: If "yes", don't fail if $2 is not found.
|
||||
dnl Output: $1 is set to the path of $2 if found. $2 are searched in order.
|
||||
AC_DEFUN([BITCOIN_QT_PATH_PROGS],[
|
||||
BITCOIN_QT_CHECK([
|
||||
if test "x$3" != x; then
|
||||
if test "x$3" != "x"; then
|
||||
AC_PATH_PROGS($1,$2,,$3)
|
||||
else
|
||||
AC_PATH_PROGS($1,$2)
|
||||
fi
|
||||
if test "x$$1" = x && test "x$4" != xyes; then
|
||||
if test "x$$1" = "x" && test "x$4" != "xyes"; then
|
||||
BITCOIN_QT_FAIL([$1 not found])
|
||||
fi
|
||||
])
|
||||
@@ -57,7 +57,7 @@ AC_DEFUN([BITCOIN_QT_INIT],[
|
||||
[build bitcoin-qt GUI (default=auto, qt5 tried first)])],
|
||||
[
|
||||
bitcoin_qt_want_version=$withval
|
||||
if test "x$bitcoin_qt_want_version" = xyes; then
|
||||
if test x$bitcoin_qt_want_version = xyes; then
|
||||
bitcoin_qt_force=yes
|
||||
bitcoin_qt_want_version=auto
|
||||
fi
|
||||
@@ -89,11 +89,11 @@ dnl Outputs: bitcoin_enable_qt, bitcoin_enable_qt_dbus, bitcoin_enable_qt_test
|
||||
AC_DEFUN([BITCOIN_QT_CONFIGURE],[
|
||||
use_pkgconfig=$1
|
||||
|
||||
if test "x$use_pkgconfig" = x; then
|
||||
if test x$use_pkgconfig = x; then
|
||||
use_pkgconfig=yes
|
||||
fi
|
||||
|
||||
if test "x$use_pkgconfig" = xyes; then
|
||||
if test x$use_pkgconfig = xyes; then
|
||||
BITCOIN_QT_CHECK([_BITCOIN_QT_FIND_LIBS_WITH_PKGCONFIG([$2])])
|
||||
else
|
||||
BITCOIN_QT_CHECK([_BITCOIN_QT_FIND_LIBS_WITHOUT_PKGCONFIG])
|
||||
@@ -113,45 +113,39 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
|
||||
TEMP_CXXFLAGS=$CXXFLAGS
|
||||
CPPFLAGS="$QT_INCLUDES $CPPFLAGS"
|
||||
CXXFLAGS="$PIC_FLAGS $CXXFLAGS"
|
||||
if test "x$bitcoin_qt_got_major_vers" = x5; then
|
||||
if test x$bitcoin_qt_got_major_vers = x5; then
|
||||
_BITCOIN_QT_IS_STATIC
|
||||
if test "x$bitcoin_cv_static_qt" = xyes; then
|
||||
if test x$bitcoin_cv_static_qt = xyes; then
|
||||
_BITCOIN_QT_FIND_STATIC_PLUGINS
|
||||
AC_DEFINE(QT_STATICPLUGIN, 1, [Define this symbol if qt plugins are static])
|
||||
AC_CACHE_CHECK(for Qt < 5.4, bitcoin_cv_need_acc_widget,[
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <QtCore/qconfig.h>
|
||||
#ifndef QT_VERSION
|
||||
# include <QtCore/qglobal.h>
|
||||
#endif
|
||||
]],
|
||||
[[
|
||||
#if QT_VERSION >= 0x050400
|
||||
choke
|
||||
#endif
|
||||
AC_CACHE_CHECK(for Qt < 5.4, bitcoin_cv_need_acc_widget,[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
||||
[[#include <QtCore>]],[[
|
||||
#if QT_VERSION >= 0x050400
|
||||
choke;
|
||||
#endif
|
||||
]])],
|
||||
[bitcoin_cv_need_acc_widget=yes],
|
||||
[bitcoin_cv_need_acc_widget=no])
|
||||
])
|
||||
if test "x$bitcoin_cv_need_acc_widget" = xyes; then
|
||||
if test "x$bitcoin_cv_need_acc_widget" = "xyes"; then
|
||||
_BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(AccessibleFactory)], [-lqtaccessiblewidgets])
|
||||
fi
|
||||
_BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QMinimalIntegrationPlugin)],[-lqminimal])
|
||||
AC_DEFINE(QT_QPA_PLATFORM_MINIMAL, 1, [Define this symbol if the minimal qt platform exists])
|
||||
if test "x$TARGET_OS" = xwindows; then
|
||||
if test x$TARGET_OS = xwindows; then
|
||||
_BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)],[-lqwindows])
|
||||
AC_DEFINE(QT_QPA_PLATFORM_WINDOWS, 1, [Define this symbol if the qt platform is windows])
|
||||
elif test "x$TARGET_OS" = xlinux; then
|
||||
elif test x$TARGET_OS = xlinux; then
|
||||
_BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QXcbIntegrationPlugin)],[-lqxcb -lxcb-static])
|
||||
AC_DEFINE(QT_QPA_PLATFORM_XCB, 1, [Define this symbol if the qt platform is xcb])
|
||||
elif test "x$TARGET_OS" = xdarwin; then
|
||||
elif test x$TARGET_OS = xdarwin; then
|
||||
AX_CHECK_LINK_FLAG([[-framework IOKit]],[QT_LIBS="$QT_LIBS -framework IOKit"],[AC_MSG_ERROR(could not iokit framework)])
|
||||
_BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin)],[-lqcocoa])
|
||||
AC_DEFINE(QT_QPA_PLATFORM_COCOA, 1, [Define this symbol if the qt platform is cocoa])
|
||||
fi
|
||||
fi
|
||||
else
|
||||
if test "x$TARGET_OS" = xwindows; then
|
||||
if test x$TARGET_OS = xwindows; then
|
||||
AC_DEFINE(QT_STATICPLUGIN, 1, [Define this symbol if qt plugins are static])
|
||||
_BITCOIN_QT_CHECK_STATIC_PLUGINS([
|
||||
Q_IMPORT_PLUGIN(qcncodecs)
|
||||
@@ -166,29 +160,24 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
|
||||
CXXFLAGS=$TEMP_CXXFLAGS
|
||||
])
|
||||
|
||||
if test "x$use_pkgconfig$qt_bin_path" = xyes; then
|
||||
if test "x$bitcoin_qt_got_major_vers" = x5; then
|
||||
if test x$use_pkgconfig$qt_bin_path = xyes; then
|
||||
if test x$bitcoin_qt_got_major_vers = x5; then
|
||||
qt_bin_path="`$PKG_CONFIG --variable=host_bins Qt5Core 2>/dev/null`"
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$use_hardening" != xno; then
|
||||
if test x$use_hardening != xno; then
|
||||
BITCOIN_QT_CHECK([
|
||||
AC_MSG_CHECKING(whether -fPIE can be used with this Qt config)
|
||||
TEMP_CPPFLAGS=$CPPFLAGS
|
||||
TEMP_CXXFLAGS=$CXXFLAGS
|
||||
CPPFLAGS="$QT_INCLUDES $CPPFLAGS"
|
||||
CXXFLAGS="$PIE_FLAGS $CXXFLAGS"
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <QtCore/qconfig.h>
|
||||
#ifndef QT_VERSION
|
||||
# include <QtCore/qglobal.h>
|
||||
#endif
|
||||
]],
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <QtCore/qconfig.h>]],
|
||||
[[
|
||||
#if defined(QT_REDUCE_RELOCATIONS)
|
||||
choke
|
||||
#endif
|
||||
#if defined(QT_REDUCE_RELOCATIONS)
|
||||
choke;
|
||||
#endif
|
||||
]])],
|
||||
[ AC_MSG_RESULT(yes); QT_PIE_FLAGS=$PIE_FLAGS ],
|
||||
[ AC_MSG_RESULT(no); QT_PIE_FLAGS=$PIC_FLAGS]
|
||||
@@ -201,16 +190,11 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
|
||||
AC_MSG_CHECKING(whether -fPIC is needed with this Qt config)
|
||||
TEMP_CPPFLAGS=$CPPFLAGS
|
||||
CPPFLAGS="$QT_INCLUDES $CPPFLAGS"
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <QtCore/qconfig.h>
|
||||
#ifndef QT_VERSION
|
||||
# include <QtCore/qglobal.h>
|
||||
#endif
|
||||
]],
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <QtCore/qconfig.h>]],
|
||||
[[
|
||||
#if defined(QT_REDUCE_RELOCATIONS)
|
||||
choke
|
||||
#endif
|
||||
#if defined(QT_REDUCE_RELOCATIONS)
|
||||
choke;
|
||||
#endif
|
||||
]])],
|
||||
[ AC_MSG_RESULT(no)],
|
||||
[ AC_MSG_RESULT(yes); QT_PIE_FLAGS=$PIC_FLAGS]
|
||||
@@ -246,18 +230,18 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
|
||||
BITCOIN_QT_CHECK([
|
||||
bitcoin_enable_qt=yes
|
||||
bitcoin_enable_qt_test=yes
|
||||
if test "x$have_qt_test" = xno; then
|
||||
if test x$have_qt_test = xno; then
|
||||
bitcoin_enable_qt_test=no
|
||||
fi
|
||||
bitcoin_enable_qt_dbus=no
|
||||
if test "x$use_dbus" != xno && test "x$have_qt_dbus" = xyes; then
|
||||
if test x$use_dbus != xno && test x$have_qt_dbus = xyes; then
|
||||
bitcoin_enable_qt_dbus=yes
|
||||
fi
|
||||
if test "x$use_dbus" = xyes && test "x$have_qt_dbus" = xno; then
|
||||
AC_MSG_ERROR([libQtDBus not found. Install libQtDBus or remove --with-qtdbus.])
|
||||
if test x$use_dbus = xyes && test x$have_qt_dbus = xno; then
|
||||
AC_MSG_ERROR("libQtDBus not found. Install libQtDBus or remove --with-qtdbus.")
|
||||
fi
|
||||
if test "x$LUPDATE" = x; then
|
||||
AC_MSG_WARN([lupdate is required to update qt translations])
|
||||
if test x$LUPDATE = x; then
|
||||
AC_MSG_WARN("lupdate is required to update qt translations")
|
||||
fi
|
||||
],[
|
||||
bitcoin_enable_qt=no
|
||||
@@ -285,15 +269,13 @@ dnl Requires: INCLUDES must be populated as necessary.
|
||||
dnl Output: bitcoin_cv_qt5=yes|no
|
||||
AC_DEFUN([_BITCOIN_QT_CHECK_QT5],[
|
||||
AC_CACHE_CHECK(for Qt 5, bitcoin_cv_qt5,[
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <QtCore/qconfig.h>
|
||||
#ifndef QT_VERSION
|
||||
# include <QtCore/qglobal.h>
|
||||
#endif
|
||||
]],
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
||||
[[#include <QtCore>]],
|
||||
[[
|
||||
#if QT_VERSION < 0x050000
|
||||
choke
|
||||
choke me
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
]])],
|
||||
[bitcoin_cv_qt5=yes],
|
||||
@@ -307,21 +289,19 @@ dnl Output: bitcoin_cv_static_qt=yes|no
|
||||
dnl Output: Defines QT_STATICPLUGIN if plugins are static.
|
||||
AC_DEFUN([_BITCOIN_QT_IS_STATIC],[
|
||||
AC_CACHE_CHECK(for static Qt, bitcoin_cv_static_qt,[
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <QtCore/qconfig.h>
|
||||
#ifndef QT_VERSION
|
||||
# include <QtCore/qglobal.h>
|
||||
#endif
|
||||
]],
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
||||
[[#include <QtCore>]],
|
||||
[[
|
||||
#if !defined(QT_STATIC)
|
||||
choke
|
||||
#if defined(QT_STATIC)
|
||||
return 0;
|
||||
#else
|
||||
choke me
|
||||
#endif
|
||||
]])],
|
||||
[bitcoin_cv_static_qt=yes],
|
||||
[bitcoin_cv_static_qt=no])
|
||||
])
|
||||
if test "x$bitcoin_cv_static_qt" = xyes; then
|
||||
if test xbitcoin_cv_static_qt = xyes; then
|
||||
AC_DEFINE(QT_STATICPLUGIN, 1, [Define this symbol for static Qt plugins])
|
||||
fi
|
||||
])
|
||||
@@ -350,50 +330,44 @@ dnl Inputs: bitcoin_qt_got_major_vers. 4 or 5.
|
||||
dnl Inputs: qt_plugin_path. optional.
|
||||
dnl Outputs: QT_LIBS is appended
|
||||
AC_DEFUN([_BITCOIN_QT_FIND_STATIC_PLUGINS],[
|
||||
if test "x$bitcoin_qt_got_major_vers" = x5; then
|
||||
if test "x$qt_plugin_path" != x; then
|
||||
if test x$bitcoin_qt_got_major_vers = x5; then
|
||||
if test x$qt_plugin_path != x; then
|
||||
QT_LIBS="$QT_LIBS -L$qt_plugin_path/platforms"
|
||||
if test -d "$qt_plugin_path/accessible"; then
|
||||
QT_LIBS="$QT_LIBS -L$qt_plugin_path/accessible"
|
||||
fi
|
||||
fi
|
||||
if test "x$use_pkgconfig" = xyes; then
|
||||
if test x$use_pkgconfig = xyes; then
|
||||
: dnl
|
||||
m4_ifdef([PKG_CHECK_MODULES],[
|
||||
PKG_CHECK_MODULES([QTPLATFORM], [Qt5PlatformSupport], [QT_LIBS="$QTPLATFORM_LIBS $QT_LIBS"])
|
||||
if test "x$TARGET_OS" = xlinux; then
|
||||
if test x$TARGET_OS = xlinux; then
|
||||
PKG_CHECK_MODULES([X11XCB], [x11-xcb], [QT_LIBS="$X11XCB_LIBS $QT_LIBS"])
|
||||
if ${PKG_CONFIG} --exists "Qt5Core >= 5.5" 2>/dev/null; then
|
||||
PKG_CHECK_MODULES([QTXCBQPA], [Qt5XcbQpa], [QT_LIBS="$QTXCBQPA_LIBS $QT_LIBS"])
|
||||
fi
|
||||
elif test "x$TARGET_OS" = xdarwin; then
|
||||
elif test x$TARGET_OS = xdarwin; then
|
||||
PKG_CHECK_MODULES([QTPRINT], [Qt5PrintSupport], [QT_LIBS="$QTPRINT_LIBS $QT_LIBS"])
|
||||
fi
|
||||
])
|
||||
else
|
||||
if test "x$TARGET_OS" = xwindows; then
|
||||
AC_CACHE_CHECK(for Qt >= 5.6, bitcoin_cv_need_platformsupport,[
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <QtCore/qconfig.h>
|
||||
#ifndef QT_VERSION
|
||||
# include <QtCore/qglobal.h>
|
||||
#endif
|
||||
]],
|
||||
[[
|
||||
#if QT_VERSION < 0x050600
|
||||
choke
|
||||
#endif
|
||||
if test x$TARGET_OS = xwindows; then
|
||||
AC_CACHE_CHECK(for Qt >= 5.6, bitcoin_cv_need_platformsupport,[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
||||
[[#include <QtCore>]],[[
|
||||
#if QT_VERSION < 0x050600
|
||||
choke;
|
||||
#endif
|
||||
]])],
|
||||
[bitcoin_cv_need_platformsupport=yes],
|
||||
[bitcoin_cv_need_platformsupport=no])
|
||||
])
|
||||
if test "x$bitcoin_cv_need_platformsupport" = xyes; then
|
||||
BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}PlatformSupport],[main],,BITCOIN_QT_FAIL(lib${QT_LIB_PREFIX}PlatformSupport not found)))
|
||||
if test x$bitcoin_cv_need_platformsupport = xyes; then
|
||||
BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}PlatformSupport],[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXPlatformSupport not found)))
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
else
|
||||
if test "x$qt_plugin_path" != x; then
|
||||
if test x$qt_plugin_path != x; then
|
||||
QT_LIBS="$QT_LIBS -L$qt_plugin_path/accessible"
|
||||
QT_LIBS="$QT_LIBS -L$qt_plugin_path/codecs"
|
||||
fi
|
||||
@@ -411,10 +385,10 @@ dnl Outputs: have_qt_test and have_qt_dbus are set (if applicable) to yes|no.
|
||||
AC_DEFUN([_BITCOIN_QT_FIND_LIBS_WITH_PKGCONFIG],[
|
||||
m4_ifdef([PKG_CHECK_MODULES],[
|
||||
auto_priority_version=$1
|
||||
if test "x$auto_priority_version" = x; then
|
||||
if test x$auto_priority_version = x; then
|
||||
auto_priority_version=qt5
|
||||
fi
|
||||
if test "x$bitcoin_qt_want_version" = xqt5 || ( test "x$bitcoin_qt_want_version" = xauto && test "x$auto_priority_version" = xqt5 ); then
|
||||
if test x$bitcoin_qt_want_version = xqt5 || ( test x$bitcoin_qt_want_version = xauto && test x$auto_priority_version = xqt5 ); then
|
||||
QT_LIB_PREFIX=Qt5
|
||||
bitcoin_qt_got_major_vers=5
|
||||
else
|
||||
@@ -424,28 +398,28 @@ AC_DEFUN([_BITCOIN_QT_FIND_LIBS_WITH_PKGCONFIG],[
|
||||
qt5_modules="Qt5Core Qt5Gui Qt5Network Qt5Widgets"
|
||||
qt4_modules="QtCore QtGui QtNetwork"
|
||||
BITCOIN_QT_CHECK([
|
||||
if test "x$bitcoin_qt_want_version" = xqt5 || ( test "x$bitcoin_qt_want_version" = xauto && test "x$auto_priority_version" = xqt5 ); then
|
||||
if test x$bitcoin_qt_want_version = xqt5 || ( test x$bitcoin_qt_want_version = xauto && test x$auto_priority_version = xqt5 ); then
|
||||
PKG_CHECK_MODULES([QT5], [$qt5_modules], [QT_INCLUDES="$QT5_CFLAGS"; QT_LIBS="$QT5_LIBS" have_qt=yes],[have_qt=no])
|
||||
elif test "x$bitcoin_qt_want_version" = xqt4 || ( test "x$bitcoin_qt_want_version" = xauto && test "x$auto_priority_version" = xqt4 ); then
|
||||
elif test x$bitcoin_qt_want_version = xqt4 || ( test x$bitcoin_qt_want_version = xauto && test x$auto_priority_version = xqt4 ); then
|
||||
PKG_CHECK_MODULES([QT4], [$qt4_modules], [QT_INCLUDES="$QT4_CFLAGS"; QT_LIBS="$QT4_LIBS" ; have_qt=yes], [have_qt=no])
|
||||
fi
|
||||
|
||||
dnl qt version is set to 'auto' and the preferred version wasn't found. Now try the other.
|
||||
if test "x$have_qt" = xno && test "x$bitcoin_qt_want_version" = xauto; then
|
||||
if test "x$auto_priority_version" = xqt5; then
|
||||
if test x$have_qt = xno && test x$bitcoin_qt_want_version = xauto; then
|
||||
if test x$auto_priority_version = xqt5; then
|
||||
PKG_CHECK_MODULES([QT4], [$qt4_modules], [QT_INCLUDES="$QT4_CFLAGS"; QT_LIBS="$QT4_LIBS" ; have_qt=yes; QT_LIB_PREFIX=Qt; bitcoin_qt_got_major_vers=4], [have_qt=no])
|
||||
else
|
||||
PKG_CHECK_MODULES([QT5], [$qt5_modules], [QT_INCLUDES="$QT5_CFLAGS"; QT_LIBS="$QT5_LIBS" ; have_qt=yes; QT_LIB_PREFIX=Qt5; bitcoin_qt_got_major_vers=5], [have_qt=no])
|
||||
fi
|
||||
fi
|
||||
if test "x$have_qt" != xyes; then
|
||||
if test x$have_qt != xyes; then
|
||||
have_qt=no
|
||||
BITCOIN_QT_FAIL([Qt dependencies not found])
|
||||
fi
|
||||
])
|
||||
BITCOIN_QT_CHECK([
|
||||
PKG_CHECK_MODULES([QT_TEST], [${QT_LIB_PREFIX}Test], [QT_TEST_INCLUDES="$QT_TEST_CFLAGS"; have_qt_test=yes], [have_qt_test=no])
|
||||
if test "x$use_dbus" != xno; then
|
||||
if test x$use_dbus != xno; then
|
||||
PKG_CHECK_MODULES([QT_DBUS], [${QT_LIB_PREFIX}DBus], [QT_DBUS_INCLUDES="$QT_DBUS_CFLAGS"; have_qt_dbus=yes], [have_qt_dbus=no])
|
||||
fi
|
||||
])
|
||||
@@ -466,7 +440,7 @@ AC_DEFUN([_BITCOIN_QT_FIND_LIBS_WITHOUT_PKGCONFIG],[
|
||||
CXXFLAGS="$PIC_FLAGS $CXXFLAGS"
|
||||
TEMP_LIBS="$LIBS"
|
||||
BITCOIN_QT_CHECK([
|
||||
if test "x$qt_include_path" != x; then
|
||||
if test x$qt_include_path != x; then
|
||||
QT_INCLUDES="-I$qt_include_path -I$qt_include_path/QtCore -I$qt_include_path/QtGui -I$qt_include_path/QtWidgets -I$qt_include_path/QtNetwork -I$qt_include_path/QtTest -I$qt_include_path/QtDBus"
|
||||
CPPFLAGS="$QT_INCLUDES $CPPFLAGS"
|
||||
fi
|
||||
@@ -477,10 +451,10 @@ AC_DEFUN([_BITCOIN_QT_FIND_LIBS_WITHOUT_PKGCONFIG],[
|
||||
BITCOIN_QT_CHECK([AC_CHECK_HEADER([QLocalSocket],, BITCOIN_QT_FAIL(QtNetwork headers missing))])
|
||||
|
||||
BITCOIN_QT_CHECK([
|
||||
if test "x$bitcoin_qt_want_version" = xauto; then
|
||||
if test x$bitcoin_qt_want_version = xauto; then
|
||||
_BITCOIN_QT_CHECK_QT5
|
||||
fi
|
||||
if test "x$bitcoin_cv_qt5" = xyes || test "x$bitcoin_qt_want_version" = xqt5; then
|
||||
if test x$bitcoin_cv_qt5 = xyes || test x$bitcoin_qt_want_version = xqt5; then
|
||||
QT_LIB_PREFIX=Qt5
|
||||
bitcoin_qt_got_major_vers=5
|
||||
else
|
||||
@@ -491,11 +465,11 @@ AC_DEFUN([_BITCOIN_QT_FIND_LIBS_WITHOUT_PKGCONFIG],[
|
||||
|
||||
BITCOIN_QT_CHECK([
|
||||
LIBS=
|
||||
if test "x$qt_lib_path" != x; then
|
||||
if test x$qt_lib_path != x; then
|
||||
LIBS="$LIBS -L$qt_lib_path"
|
||||
fi
|
||||
|
||||
if test "x$TARGET_OS" = xwindows; then
|
||||
if test x$TARGET_OS = xwindows; then
|
||||
AC_CHECK_LIB([imm32], [main],, BITCOIN_QT_FAIL(libimm32 not found))
|
||||
fi
|
||||
])
|
||||
@@ -505,26 +479,26 @@ AC_DEFUN([_BITCOIN_QT_FIND_LIBS_WITHOUT_PKGCONFIG],[
|
||||
BITCOIN_QT_CHECK(AC_SEARCH_LIBS([jpeg_create_decompress] ,[qtjpeg jpeg],,AC_MSG_WARN([libjpeg not found. Assuming qt has it built-in])))
|
||||
BITCOIN_QT_CHECK(AC_SEARCH_LIBS([pcre16_exec], [qtpcre pcre16],,AC_MSG_WARN([libpcre16 not found. Assuming qt has it built-in])))
|
||||
BITCOIN_QT_CHECK(AC_SEARCH_LIBS([hb_ot_tags_from_script] ,[qtharfbuzzng harfbuzz],,AC_MSG_WARN([libharfbuzz not found. Assuming qt has it built-in or support is disabled])))
|
||||
BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Core] ,[main],,BITCOIN_QT_FAIL(lib${QT_LIB_PREFIX}Core not found)))
|
||||
BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Gui] ,[main],,BITCOIN_QT_FAIL(lib${QT_LIB_PREFIX}Gui not found)))
|
||||
BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Network],[main],,BITCOIN_QT_FAIL(lib${QT_LIB_PREFIX}Network not found)))
|
||||
if test "x$bitcoin_qt_got_major_vers" = x5; then
|
||||
BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Widgets],[main],,BITCOIN_QT_FAIL(lib${QT_LIB_PREFIX}Widgets not found)))
|
||||
BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Core] ,[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXCore not found)))
|
||||
BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Gui] ,[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXGui not found)))
|
||||
BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Network],[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXNetwork not found)))
|
||||
if test x$bitcoin_qt_got_major_vers = x5; then
|
||||
BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Widgets],[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXWidgets not found)))
|
||||
fi
|
||||
QT_LIBS="$LIBS"
|
||||
LIBS="$TEMP_LIBS"
|
||||
|
||||
BITCOIN_QT_CHECK([
|
||||
LIBS=
|
||||
if test "x$qt_lib_path" != x; then
|
||||
if test x$qt_lib_path != x; then
|
||||
LIBS="-L$qt_lib_path"
|
||||
fi
|
||||
AC_CHECK_LIB([${QT_LIB_PREFIX}Test], [main],, have_qt_test=no)
|
||||
AC_CHECK_HEADER([QTest],, have_qt_test=no)
|
||||
QT_TEST_LIBS="$LIBS"
|
||||
if test "x$use_dbus" != xno; then
|
||||
if test x$use_dbus != xno; then
|
||||
LIBS=
|
||||
if test "x$qt_lib_path" != x; then
|
||||
if test x$qt_lib_path != x; then
|
||||
LIBS="-L$qt_lib_path"
|
||||
fi
|
||||
AC_CHECK_LIB([${QT_LIB_PREFIX}DBus], [main],, have_qt_dbus=no)
|
||||
|
||||
67
configure.ac
@@ -1,11 +1,11 @@
|
||||
dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
|
||||
AC_PREREQ([2.60])
|
||||
define(_CLIENT_VERSION_MAJOR, 0)
|
||||
define(_CLIENT_VERSION_MINOR, 16)
|
||||
define(_CLIENT_VERSION_MINOR, 15)
|
||||
define(_CLIENT_VERSION_REVISION, 2)
|
||||
define(_CLIENT_VERSION_BUILD, 0)
|
||||
define(_CLIENT_VERSION_IS_RELEASE, true)
|
||||
define(_COPYRIGHT_YEAR, 2018)
|
||||
define(_COPYRIGHT_YEAR, 2017)
|
||||
define(_COPYRIGHT_HOLDERS,[The %s developers])
|
||||
define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[Bitcoin Core]])
|
||||
AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[https://github.com/bitcoin/bitcoin/issues],[bitcoin],[https://bitcoincore.org/])
|
||||
@@ -162,9 +162,9 @@ AC_ARG_ENABLE([ccache],
|
||||
AC_ARG_ENABLE([lcov],
|
||||
[AS_HELP_STRING([--enable-lcov],
|
||||
[enable lcov testing (default is no)])],
|
||||
[use_lcov=$enableval],
|
||||
[use_lcov=yes],
|
||||
[use_lcov=no])
|
||||
|
||||
|
||||
AC_ARG_ENABLE([lcov-branch-coverage],
|
||||
[AS_HELP_STRING([--enable-lcov-branch-coverage],
|
||||
[enable lcov testing branch coverage (default is no)])],
|
||||
@@ -177,14 +177,14 @@ AC_ARG_ENABLE([glibc-back-compat],
|
||||
[use_glibc_compat=$enableval],
|
||||
[use_glibc_compat=no])
|
||||
|
||||
AC_ARG_ENABLE([asm],
|
||||
[AS_HELP_STRING([--enable-asm],
|
||||
[Enable assembly routines (default is yes)])],
|
||||
[use_asm=$enableval],
|
||||
[use_asm=yes])
|
||||
AC_ARG_ENABLE([experimental-asm],
|
||||
[AS_HELP_STRING([--enable-experimental-asm],
|
||||
[Enable experimental assembly routines (default is no)])],
|
||||
[experimental_asm=$enableval],
|
||||
[experimental_asm=no])
|
||||
|
||||
if test "x$use_asm" = xyes; then
|
||||
AC_DEFINE(USE_ASM, 1, [Define this symbol to build in assembly routines])
|
||||
if test "x$experimental_asm" = xyes; then
|
||||
AC_DEFINE(EXPERIMENTAL_ASM, 1, [Define this symbol to build in experimental assembly routines])
|
||||
fi
|
||||
|
||||
AC_ARG_WITH([system-univalue],
|
||||
@@ -241,7 +241,6 @@ if test "x$enable_werror" = "xyes"; then
|
||||
AC_MSG_ERROR("enable-werror set but -Werror is not usable")
|
||||
fi
|
||||
AX_CHECK_COMPILE_FLAG([-Werror=vla],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=vla"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Werror=thread-safety-analysis],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=thread-safety-analysis"],,[[$CXXFLAG_WERROR]])
|
||||
fi
|
||||
|
||||
if test "x$CXXFLAGS_overridden" = "xno"; then
|
||||
@@ -250,7 +249,6 @@ if test "x$CXXFLAGS_overridden" = "xno"; then
|
||||
AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Wvla],[CXXFLAGS="$CXXFLAGS -Wvla"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Wthread-safety-analysis],[CXXFLAGS="$CXXFLAGS -Wthread-safety-analysis"],,[[$CXXFLAG_WERROR]])
|
||||
|
||||
## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
|
||||
## unknown options if any other warning is produced. Test the -Wfoo case, and
|
||||
@@ -449,9 +447,6 @@ case $host in
|
||||
*openbsd*)
|
||||
LEVELDB_TARGET_FLAGS="-DOS_OPENBSD"
|
||||
;;
|
||||
*netbsd*)
|
||||
LEVELDB_TARGET_FLAGS="-DOS_NETBSD"
|
||||
;;
|
||||
*)
|
||||
OTHER_OS=`echo ${host_os} | awk '{print toupper($0)}'`
|
||||
AC_MSG_WARN([Guessing LevelDB OS as OS_${OTHER_OS}, please check whether this is correct, if not add an entry to configure.ac.])
|
||||
@@ -662,28 +657,6 @@ AC_LINK_IFELSE([AC_LANG_SOURCE([
|
||||
]
|
||||
)
|
||||
|
||||
TEMP_LDFLAGS="$LDFLAGS"
|
||||
LDFLAGS="$TEMP_LDFLAGS $PTHREAD_CFLAGS"
|
||||
AC_MSG_CHECKING([for thread_local support])
|
||||
AC_LINK_IFELSE([AC_LANG_SOURCE([
|
||||
#include <thread>
|
||||
static thread_local int foo = 0;
|
||||
static void run_thread() { foo++;}
|
||||
int main(){
|
||||
for(int i = 0; i < 10; i++) { std::thread(run_thread).detach();}
|
||||
return foo;
|
||||
}
|
||||
])],
|
||||
[
|
||||
AC_DEFINE(HAVE_THREAD_LOCAL,1,[Define if thread_local is supported.])
|
||||
AC_MSG_RESULT(yes)
|
||||
],
|
||||
[
|
||||
AC_MSG_RESULT(no)
|
||||
]
|
||||
)
|
||||
LDFLAGS="$TEMP_LDFLAGS"
|
||||
|
||||
# Check for different ways of gathering OS randomness
|
||||
AC_MSG_CHECKING(for Linux getrandom syscall)
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>
|
||||
@@ -764,9 +737,6 @@ define(MINIMUM_REQUIRED_BOOST, 1.47.0)
|
||||
|
||||
dnl Check for boost libs
|
||||
AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST])
|
||||
if test x$want_boost = xno; then
|
||||
AC_MSG_ERROR([[only libbitcoinconsensus can be built without boost]])
|
||||
fi
|
||||
AX_BOOST_SYSTEM
|
||||
AX_BOOST_FILESYSTEM
|
||||
AX_BOOST_PROGRAM_OPTIONS
|
||||
@@ -857,14 +827,14 @@ TEMP_CPPFLAGS="$CPPFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
|
||||
AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/version.hpp>
|
||||
#include "boost/config.hpp"
|
||||
#include "boost/version.hpp"
|
||||
#if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
|
||||
#define BOOST_NO_SCOPED_ENUMS
|
||||
#define BOOST_NO_CXX11_SCOPED_ENUMS
|
||||
#define CHECK
|
||||
#endif
|
||||
#include <boost/filesystem.hpp>
|
||||
#include "boost/filesystem.hpp"
|
||||
]],[[
|
||||
#if defined(CHECK)
|
||||
boost::filesystem::copy_file("foo", "bar");
|
||||
@@ -1209,7 +1179,7 @@ AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
|
||||
AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
|
||||
AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
|
||||
AM_CONDITIONAL([ENABLE_HWCRC32],[test x$enable_hwcrc32 = xyes])
|
||||
AM_CONDITIONAL([USE_ASM],[test x$use_asm = xyes])
|
||||
AM_CONDITIONAL([EXPERIMENTAL_ASM],[test x$experimental_asm = xyes])
|
||||
|
||||
AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
|
||||
AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
|
||||
@@ -1316,7 +1286,7 @@ case ${OS} in
|
||||
;;
|
||||
esac
|
||||
|
||||
echo
|
||||
echo
|
||||
echo "Options used to compile and link:"
|
||||
echo " with wallet = $enable_wallet"
|
||||
echo " with gui / qt = $bitcoin_enable_qt"
|
||||
@@ -1328,10 +1298,9 @@ echo " with zmq = $use_zmq"
|
||||
echo " with test = $use_tests"
|
||||
echo " with bench = $use_bench"
|
||||
echo " with upnp = $use_upnp"
|
||||
echo " use asm = $use_asm"
|
||||
echo " debug enabled = $enable_debug"
|
||||
echo " werror = $enable_werror"
|
||||
echo
|
||||
echo
|
||||
echo " target os = $TARGET_OS"
|
||||
echo " build os = $BUILD_OS"
|
||||
echo
|
||||
@@ -1342,4 +1311,4 @@ echo " CXX = $CXX"
|
||||
echo " CXXFLAGS = $CXXFLAGS"
|
||||
echo " LDFLAGS = $LDFLAGS"
|
||||
echo " ARFLAGS = $ARFLAGS"
|
||||
echo
|
||||
echo
|
||||
|
||||
@@ -26,7 +26,7 @@ Contains files used to package bitcoind/bitcoin-qt
|
||||
for Debian-based Linux systems. If you compile bitcoind/bitcoin-qt yourself, there are some useful files here.
|
||||
|
||||
### [Gitian-descriptors](/contrib/gitian-descriptors) ###
|
||||
Files used during the gitian build process. For more information about gitian, see the [the Bitcoin Core documentation repository](https://github.com/bitcoin-core/docs).
|
||||
Notes on getting Gitian builds up and running using KVM.
|
||||
|
||||
### [Gitian-keys](/contrib/gitian-keys)
|
||||
PGP keys used for signing Bitcoin Core [Gitian release](/doc/release-process.md) results.
|
||||
@@ -35,7 +35,7 @@ PGP keys used for signing Bitcoin Core [Gitian release](/doc/release-process.md)
|
||||
Scripts and notes for Mac builds.
|
||||
|
||||
### [RPM](/contrib/rpm) ###
|
||||
RPM spec file for building bitcoin-core on RPM based distributions.
|
||||
RPM spec file for building bitcoin-core on RPM based distributions
|
||||
|
||||
### [Gitian-build](/contrib/gitian-build.sh) ###
|
||||
Script for running full Gitian builds.
|
||||
|
||||
@@ -30,7 +30,7 @@ _bitcoind() {
|
||||
;;
|
||||
*)
|
||||
|
||||
# only parse -help if sensible
|
||||
# only parse -help if senseful
|
||||
if [[ -z "$cur" || "$cur" =~ ^- ]]; then
|
||||
local helpopts
|
||||
helpopts=$($bitcoind -help 2>&1 | awk '$1 ~ /^-/ { sub(/=.*/, "="); print $1 }' )
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Encoding=UTF-8
|
||||
Name=Bitcoin Core
|
||||
Comment=Connect to the Bitcoin P2P Network
|
||||
Comment[de]=Verbinde mit dem Bitcoin peer-to-peer Netzwerk
|
||||
@@ -11,4 +11,3 @@ Type=Application
|
||||
Icon=bitcoin128
|
||||
MimeType=x-scheme-handler/bitcoin;
|
||||
Categories=Office;Finance;
|
||||
StartupWMClass=Bitcoin-qt
|
||||
|
||||
@@ -5,7 +5,7 @@ Upstream-Contact: Satoshi Nakamoto <satoshin@gmx.com>
|
||||
Source: https://github.com/bitcoin/bitcoin
|
||||
|
||||
Files: *
|
||||
Copyright: 2009-2018, Bitcoin Core Developers
|
||||
Copyright: 2009-2017, Bitcoin Core Developers
|
||||
License: Expat
|
||||
Comment: The Bitcoin Core Developers encompasses the current developers listed on bitcoin.org,
|
||||
as well as the numerous contributors to the project.
|
||||
@@ -15,14 +15,6 @@ Copyright: 2010-2011, Jonas Smedegaard <dr@jones.dk>
|
||||
2011, Matt Corallo <matt@bluematt.me>
|
||||
License: GPL-2+
|
||||
|
||||
Files: src/secp256k1/build-aux/m4/ax_jni_include_dir.m4
|
||||
Copyright: 2008 Don Anderson <dda@sleepycat.com>
|
||||
License: GNU-All-permissive-License
|
||||
|
||||
Files: src/secp256k1/build-aux/m4/ax_prog_cc_for_build.m4
|
||||
Copyright: 2008 Paolo Bonzini <bonzini@gnu.org>
|
||||
License: GNU-All-permissive-License
|
||||
|
||||
Files: src/qt/res/icons/add.png
|
||||
src/qt/res/icons/address-book.png
|
||||
src/qt/res/icons/chevron.png
|
||||
@@ -114,12 +106,6 @@ License: Expat
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
License: GNU-All-permissive-License
|
||||
Copying and distribution of this file, with or without modification, are
|
||||
permitted in any medium without royalty provided the copyright notice
|
||||
and this notice are preserved. This file is offered as-is, without any
|
||||
warranty.
|
||||
|
||||
License: GPL-2+
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
|
||||
@@ -76,10 +76,10 @@
|
||||
#rpcuser=Ulysseys
|
||||
#rpcpassword=YourSuperGreatPasswordNumber_DO_NOT_USE_THIS_OR_YOU_WILL_GET_ROBBED_385593
|
||||
#
|
||||
# The second method `rpcauth` can be added to server startup argument. It is set at initialization time
|
||||
# using the output from the script in share/rpcauth/rpcauth.py after providing a username:
|
||||
# The second method `rpcauth` can be added to server startup argument. It is set at intialization time
|
||||
# using the output from the script in share/rpcuser/rpcuser.py after providing a username:
|
||||
#
|
||||
# ./share/rpcauth/rpcauth.py alice
|
||||
# ./share/rpcuser/rpcuser.py alice
|
||||
# String to be appended to bitcoin.conf:
|
||||
# rpcauth=alice:f7efda5c189b999524f151318c0c86$d5b51b3beffbc02b724e5d095828e0bc8b2456e9ac8757ae3211a5d9b16a22ae
|
||||
# Your password:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright (c) 2015-2017 The Bitcoin Core developers
|
||||
# Copyright (c) 2015-2016 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
@@ -12,7 +12,6 @@ Author: @MarcoFalke
|
||||
|
||||
from subprocess import check_output
|
||||
import re
|
||||
import sys
|
||||
|
||||
FOLDER_GREP = 'src'
|
||||
FOLDER_TEST = 'src/test/'
|
||||
@@ -22,7 +21,7 @@ CMD_GREP_DOCS = r"egrep -r -I 'HelpMessageOpt\(\"\-[^\"=]+?(=|\")' %s" % (CMD_RO
|
||||
REGEX_ARG = re.compile(r'(?:map(?:Multi)?Args(?:\.count\(|\[)|Get(?:Bool)?Arg\()\"(\-[^\"]+?)\"')
|
||||
REGEX_DOC = re.compile(r'HelpMessageOpt\(\"(\-[^\"=]+?)(?:=|\")')
|
||||
# list unsupported, deprecated and duplicate args as they need no documentation
|
||||
SET_DOC_OPTIONAL = set(['-rpcssl', '-benchmark', '-h', '-help', '-socks', '-tor', '-debugnet', '-whitelistalwaysrelay', '-prematurewitness', '-walletprematurewitness', '-promiscuousmempoolflags', '-blockminsize', '-dbcrashratio', '-forcecompactdb', '-usehd'])
|
||||
SET_DOC_OPTIONAL = set(['-rpcssl', '-benchmark', '-h', '-help', '-socks', '-tor', '-debugnet', '-whitelistalwaysrelay', '-prematurewitness', '-walletprematurewitness', '-promiscuousmempoolflags', '-blockminsize', '-dbcrashratio', '-forcecompactdb'])
|
||||
|
||||
def main():
|
||||
used = check_output(CMD_GREP_ARGS, shell=True)
|
||||
@@ -40,7 +39,7 @@ def main():
|
||||
print "Args unknown : %s" % len(args_unknown)
|
||||
print args_unknown
|
||||
|
||||
sys.exit(len(args_need_doc))
|
||||
exit(len(args_need_doc))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
@@ -1,158 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright (c) 2017 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 RPC argument consistency."""
|
||||
|
||||
from collections import defaultdict
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
# Source files (relative to root) to scan for dispatch tables
|
||||
SOURCES = [
|
||||
"src/rpc/server.cpp",
|
||||
"src/rpc/blockchain.cpp",
|
||||
"src/rpc/mining.cpp",
|
||||
"src/rpc/misc.cpp",
|
||||
"src/rpc/net.cpp",
|
||||
"src/rpc/rawtransaction.cpp",
|
||||
"src/wallet/rpcwallet.cpp",
|
||||
]
|
||||
# Source file (relative to root) containing conversion mapping
|
||||
SOURCE_CLIENT = 'src/rpc/client.cpp'
|
||||
# Argument names that should be ignored in consistency checks
|
||||
IGNORE_DUMMY_ARGS = {'dummy', 'arg0', 'arg1', 'arg2', 'arg3', 'arg4', 'arg5', 'arg6', 'arg7', 'arg8', 'arg9'}
|
||||
|
||||
class RPCCommand:
|
||||
def __init__(self, name, args):
|
||||
self.name = name
|
||||
self.args = args
|
||||
|
||||
class RPCArgument:
|
||||
def __init__(self, names, idx):
|
||||
self.names = names
|
||||
self.idx = idx
|
||||
self.convert = False
|
||||
|
||||
def parse_string(s):
|
||||
assert s[0] == '"'
|
||||
assert s[-1] == '"'
|
||||
return s[1:-1]
|
||||
|
||||
def process_commands(fname):
|
||||
"""Find and parse dispatch table in implementation file `fname`."""
|
||||
cmds = []
|
||||
in_rpcs = False
|
||||
with open(fname, "r") as f:
|
||||
for line in f:
|
||||
line = line.rstrip()
|
||||
if not in_rpcs:
|
||||
if re.match("static const CRPCCommand .*\[\] =", line):
|
||||
in_rpcs = True
|
||||
else:
|
||||
if line.startswith('};'):
|
||||
in_rpcs = False
|
||||
elif '{' in line and '"' in line:
|
||||
m = re.search('{ *("[^"]*"), *("[^"]*"), *&([^,]*), *{([^}]*)} *},', line)
|
||||
assert m, 'No match to table expression: %s' % line
|
||||
name = parse_string(m.group(2))
|
||||
args_str = m.group(4).strip()
|
||||
if args_str:
|
||||
args = [RPCArgument(parse_string(x.strip()).split('|'), idx) for idx, x in enumerate(args_str.split(','))]
|
||||
else:
|
||||
args = []
|
||||
cmds.append(RPCCommand(name, args))
|
||||
assert not in_rpcs and cmds, "Something went wrong with parsing the C++ file: update the regexps"
|
||||
return cmds
|
||||
|
||||
def process_mapping(fname):
|
||||
"""Find and parse conversion table in implementation file `fname`."""
|
||||
cmds = []
|
||||
in_rpcs = False
|
||||
with open(fname, "r") as f:
|
||||
for line in f:
|
||||
line = line.rstrip()
|
||||
if not in_rpcs:
|
||||
if line == 'static const CRPCConvertParam vRPCConvertParams[] =':
|
||||
in_rpcs = True
|
||||
else:
|
||||
if line.startswith('};'):
|
||||
in_rpcs = False
|
||||
elif '{' in line and '"' in line:
|
||||
m = re.search('{ *("[^"]*"), *([0-9]+) *, *("[^"]*") *},', line)
|
||||
assert m, 'No match to table expression: %s' % line
|
||||
name = parse_string(m.group(1))
|
||||
idx = int(m.group(2))
|
||||
argname = parse_string(m.group(3))
|
||||
cmds.append((name, idx, argname))
|
||||
assert not in_rpcs and cmds
|
||||
return cmds
|
||||
|
||||
def main():
|
||||
root = sys.argv[1]
|
||||
|
||||
# Get all commands from dispatch tables
|
||||
cmds = []
|
||||
for fname in SOURCES:
|
||||
cmds += process_commands(os.path.join(root, fname))
|
||||
|
||||
cmds_by_name = {}
|
||||
for cmd in cmds:
|
||||
cmds_by_name[cmd.name] = cmd
|
||||
|
||||
# Get current convert mapping for client
|
||||
client = SOURCE_CLIENT
|
||||
mapping = set(process_mapping(os.path.join(root, client)))
|
||||
|
||||
print('* Checking consistency between dispatch tables and vRPCConvertParams')
|
||||
|
||||
# Check mapping consistency
|
||||
errors = 0
|
||||
for (cmdname, argidx, argname) in mapping:
|
||||
try:
|
||||
rargnames = cmds_by_name[cmdname].args[argidx].names
|
||||
except IndexError:
|
||||
print('ERROR: %s argument %i (named %s in vRPCConvertParams) is not defined in dispatch table' % (cmdname, argidx, argname))
|
||||
errors += 1
|
||||
continue
|
||||
if argname not in rargnames:
|
||||
print('ERROR: %s argument %i is named %s in vRPCConvertParams but %s in dispatch table' % (cmdname, argidx, argname, rargnames), file=sys.stderr)
|
||||
errors += 1
|
||||
|
||||
# Check for conflicts in vRPCConvertParams conversion
|
||||
# All aliases for an argument must either be present in the
|
||||
# conversion table, or not. Anything in between means an oversight
|
||||
# and some aliases won't work.
|
||||
for cmd in cmds:
|
||||
for arg in cmd.args:
|
||||
convert = [((cmd.name, arg.idx, argname) in mapping) for argname in arg.names]
|
||||
if any(convert) != all(convert):
|
||||
print('ERROR: %s argument %s has conflicts in vRPCConvertParams conversion specifier %s' % (cmd.name, arg.names, convert))
|
||||
errors += 1
|
||||
arg.convert = all(convert)
|
||||
|
||||
# Check for conversion difference by argument name.
|
||||
# It is preferable for API consistency that arguments with the same name
|
||||
# have the same conversion, so bin by argument name.
|
||||
all_methods_by_argname = defaultdict(list)
|
||||
converts_by_argname = defaultdict(list)
|
||||
for cmd in cmds:
|
||||
for arg in cmd.args:
|
||||
for argname in arg.names:
|
||||
all_methods_by_argname[argname].append(cmd.name)
|
||||
converts_by_argname[argname].append(arg.convert)
|
||||
|
||||
for argname, convert in converts_by_argname.items():
|
||||
if all(convert) != any(convert):
|
||||
if argname in IGNORE_DUMMY_ARGS:
|
||||
# these are testing or dummy, don't warn for them
|
||||
continue
|
||||
print('WARNING: conversion mismatch for argument named %s (%s)' %
|
||||
(argname, list(zip(all_methods_by_argname[argname], converts_by_argname[argname]))))
|
||||
|
||||
sys.exit(errors > 0)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright (c) 2016-2017 The Bitcoin Core developers
|
||||
# Copyright (c) 2016 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
@@ -24,10 +24,8 @@ EXCLUDE = [
|
||||
'src/secp256k1/src/java/org_bitcoin_NativeSecp256k1.h',
|
||||
'src/secp256k1/src/java/org_bitcoin_Secp256k1Context.c',
|
||||
'src/secp256k1/src/java/org_bitcoin_Secp256k1Context.h',
|
||||
# univalue:
|
||||
'src/univalue/test/object.cpp',
|
||||
'src/univalue/lib/univalue_escapes.h',
|
||||
# auto generated:
|
||||
'src/univalue/lib/univalue_escapes.h',
|
||||
'src/qt/bitcoinstrings.cpp',
|
||||
'src/chainparamsseeds.h',
|
||||
# other external copyrights:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/bash
|
||||
#!/bin/sh
|
||||
|
||||
TOPDIR=${TOPDIR:-$(git rev-parse --show-toplevel)}
|
||||
SRCDIR=${SRCDIR:-$TOPDIR/src}
|
||||
|
||||
@@ -18,7 +18,7 @@ find_latest_squash()
|
||||
sub=
|
||||
git log --grep="^git-subtree-dir: $dir/*\$" \
|
||||
--pretty=format:'START %H%n%s%n%n%b%nEND%n' "$COMMIT" |
|
||||
while read a b _; do
|
||||
while read a b junk; do
|
||||
case "$a" in
|
||||
START) sq="$b" ;;
|
||||
git-subtree-mainline:) main="$b" ;;
|
||||
@@ -41,17 +41,21 @@ find_latest_squash()
|
||||
done
|
||||
}
|
||||
|
||||
# find latest subtree update
|
||||
latest_squash="$(find_latest_squash "$DIR")"
|
||||
if [ -z "$latest_squash" ]; then
|
||||
echo "ERROR: $DIR is not a subtree" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
set $latest_squash
|
||||
old=$1
|
||||
rev=$2
|
||||
|
||||
# get the tree in the current commit
|
||||
if [ "d$(git cat-file -t $rev 2>/dev/null)" != dcommit ]; then
|
||||
echo "ERROR: subtree commit $rev unavailable. Fetch/update the subtree repository" >&2
|
||||
exit 2
|
||||
fi
|
||||
tree_subtree=$(git show -s --format="%T" $rev)
|
||||
echo "$DIR in $COMMIT was last updated to upstream commit $rev (tree $tree_subtree)"
|
||||
tree_actual=$(git ls-tree -d "$COMMIT" "$DIR" | head -n 1)
|
||||
if [ -z "$tree_actual" ]; then
|
||||
echo "FAIL: subtree directory $DIR not found in $COMMIT" >&2
|
||||
@@ -65,30 +69,9 @@ if [ "d$tree_actual_type" != "dtree" ]; then
|
||||
echo "FAIL: subtree directory $DIR is not a tree in $COMMIT" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# get the tree at the time of the last subtree update
|
||||
tree_commit=$(git show -s --format="%T" $old)
|
||||
echo "$DIR in $COMMIT was last updated in commit $old (tree $tree_commit)"
|
||||
|
||||
# ... and compare the actual tree with it
|
||||
if [ "$tree_actual_tree" != "$tree_commit" ]; then
|
||||
git diff $tree_commit $tree_actual_tree >&2
|
||||
echo "FAIL: subtree directory was touched without subtree merge" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# get the tree in the subtree commit referred to
|
||||
if [ "d$(git cat-file -t $rev 2>/dev/null)" != dcommit ]; then
|
||||
echo "subtree commit $rev unavailable: cannot compare" >&2
|
||||
exit
|
||||
fi
|
||||
tree_subtree=$(git show -s --format="%T" $rev)
|
||||
echo "$DIR in $COMMIT was last updated to upstream commit $rev (tree $tree_subtree)"
|
||||
|
||||
# ... and compare the actual tree with it
|
||||
if [ "$tree_actual_tree" != "$tree_subtree" ]; then
|
||||
echo "FAIL: subtree update commit differs from upstream tree!" >&2
|
||||
git diff-tree $tree_actual_tree $tree_subtree >&2
|
||||
echo "FAIL: subtree directory tree doesn't match subtree commit tree" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "GOOD"
|
||||
|
||||
@@ -20,7 +20,6 @@ from sys import stdin,stdout,stderr
|
||||
import argparse
|
||||
import hashlib
|
||||
import subprocess
|
||||
import sys
|
||||
import json,codecs
|
||||
try:
|
||||
from urllib.request import Request,urlopen
|
||||
@@ -159,11 +158,11 @@ def main():
|
||||
if repo is None:
|
||||
print("ERROR: No repository configured. Use this command to set:", file=stderr)
|
||||
print("git config githubmerge.repository <owner>/<repo>", file=stderr)
|
||||
sys.exit(1)
|
||||
exit(1)
|
||||
if signingkey is None:
|
||||
print("ERROR: No GPG signing key set. Set one using:",file=stderr)
|
||||
print("git config --global user.signingkey <key>",file=stderr)
|
||||
sys.exit(1)
|
||||
exit(1)
|
||||
|
||||
host_repo = host+":"+repo # shortcut for push/pull target
|
||||
|
||||
@@ -174,7 +173,7 @@ def main():
|
||||
# Receive pull information from github
|
||||
info = retrieve_pr_info(repo,pull)
|
||||
if info is None:
|
||||
sys.exit(1)
|
||||
exit(1)
|
||||
title = info['title'].strip()
|
||||
body = info['body'].strip()
|
||||
# precedence order for destination branch argument:
|
||||
@@ -195,23 +194,27 @@ def main():
|
||||
subprocess.check_call([GIT,'checkout','-q',branch])
|
||||
except subprocess.CalledProcessError as e:
|
||||
print("ERROR: Cannot check out branch %s." % (branch), file=stderr)
|
||||
sys.exit(3)
|
||||
exit(3)
|
||||
try:
|
||||
subprocess.check_call([GIT,'fetch','-q',host_repo,'+refs/pull/'+pull+'/*:refs/heads/pull/'+pull+'/*',
|
||||
'+refs/heads/'+branch+':refs/heads/'+base_branch])
|
||||
subprocess.check_call([GIT,'fetch','-q',host_repo,'+refs/pull/'+pull+'/*:refs/heads/pull/'+pull+'/*'])
|
||||
except subprocess.CalledProcessError as e:
|
||||
print("ERROR: Cannot find pull request #%s or branch %s on %s." % (pull,branch,host_repo), file=stderr)
|
||||
sys.exit(3)
|
||||
print("ERROR: Cannot find pull request #%s on %s." % (pull,host_repo), file=stderr)
|
||||
exit(3)
|
||||
try:
|
||||
subprocess.check_call([GIT,'log','-q','-1','refs/heads/'+head_branch], stdout=devnull, stderr=stdout)
|
||||
except subprocess.CalledProcessError as e:
|
||||
print("ERROR: Cannot find head of pull request #%s on %s." % (pull,host_repo), file=stderr)
|
||||
sys.exit(3)
|
||||
exit(3)
|
||||
try:
|
||||
subprocess.check_call([GIT,'log','-q','-1','refs/heads/'+merge_branch], stdout=devnull, stderr=stdout)
|
||||
except subprocess.CalledProcessError as e:
|
||||
print("ERROR: Cannot find merge of pull request #%s on %s." % (pull,host_repo), file=stderr)
|
||||
sys.exit(3)
|
||||
exit(3)
|
||||
try:
|
||||
subprocess.check_call([GIT,'fetch','-q',host_repo,'+refs/heads/'+branch+':refs/heads/'+base_branch])
|
||||
except subprocess.CalledProcessError as e:
|
||||
print("ERROR: Cannot find branch %s on %s." % (branch,host_repo), file=stderr)
|
||||
exit(3)
|
||||
subprocess.check_call([GIT,'checkout','-q',base_branch])
|
||||
subprocess.call([GIT,'branch','-q','-D',local_merge_branch], stderr=devnull)
|
||||
subprocess.check_call([GIT,'checkout','-q','-b',local_merge_branch])
|
||||
@@ -233,30 +236,30 @@ def main():
|
||||
except subprocess.CalledProcessError as e:
|
||||
print("ERROR: Cannot be merged cleanly.",file=stderr)
|
||||
subprocess.check_call([GIT,'merge','--abort'])
|
||||
sys.exit(4)
|
||||
exit(4)
|
||||
logmsg = subprocess.check_output([GIT,'log','--pretty=format:%s','-n','1']).decode('utf-8')
|
||||
if logmsg.rstrip() != firstline.rstrip():
|
||||
print("ERROR: Creating merge failed (already merged?).",file=stderr)
|
||||
sys.exit(4)
|
||||
exit(4)
|
||||
|
||||
symlink_files = get_symlink_files()
|
||||
for f in symlink_files:
|
||||
print("ERROR: File %s was a symlink" % f)
|
||||
if len(symlink_files) > 0:
|
||||
sys.exit(4)
|
||||
exit(4)
|
||||
|
||||
# Put tree SHA512 into the message
|
||||
try:
|
||||
first_sha512 = tree_sha512sum()
|
||||
message += '\n\nTree-SHA512: ' + first_sha512
|
||||
except subprocess.CalledProcessError as e:
|
||||
print("ERROR: Unable to compute tree hash")
|
||||
sys.exit(4)
|
||||
printf("ERROR: Unable to compute tree hash")
|
||||
exit(4)
|
||||
try:
|
||||
subprocess.check_call([GIT,'commit','--amend','-m',message.encode('utf-8')])
|
||||
except subprocess.CalledProcessError as e:
|
||||
print("ERROR: Cannot update message.", file=stderr)
|
||||
sys.exit(4)
|
||||
printf("ERROR: Cannot update message.",file=stderr)
|
||||
exit(4)
|
||||
|
||||
print_merge_details(pull, title, branch, base_branch, head_branch)
|
||||
print()
|
||||
@@ -265,7 +268,7 @@ def main():
|
||||
if testcmd:
|
||||
if subprocess.call(testcmd,shell=True):
|
||||
print("ERROR: Running %s failed." % testcmd,file=stderr)
|
||||
sys.exit(5)
|
||||
exit(5)
|
||||
|
||||
# Show the created merge.
|
||||
diff = subprocess.check_output([GIT,'diff',merge_branch+'..'+local_merge_branch])
|
||||
@@ -276,7 +279,7 @@ def main():
|
||||
if reply.lower() == 'ignore':
|
||||
print("Difference with github ignored.",file=stderr)
|
||||
else:
|
||||
sys.exit(6)
|
||||
exit(6)
|
||||
else:
|
||||
# Verify the result manually.
|
||||
print("Dropping you on a shell so you can try building/testing the merged source.",file=stderr)
|
||||
@@ -289,7 +292,7 @@ def main():
|
||||
second_sha512 = tree_sha512sum()
|
||||
if first_sha512 != second_sha512:
|
||||
print("ERROR: Tree hash changed unexpectedly",file=stderr)
|
||||
sys.exit(8)
|
||||
exit(8)
|
||||
|
||||
# Sign the merge commit.
|
||||
print_merge_details(pull, title, branch, base_branch, head_branch)
|
||||
@@ -303,7 +306,7 @@ def main():
|
||||
print("Error while signing, asking again.",file=stderr)
|
||||
elif reply == 'x':
|
||||
print("Not signing off on merge, exiting.",file=stderr)
|
||||
sys.exit(1)
|
||||
exit(1)
|
||||
|
||||
# Put the result in branch.
|
||||
subprocess.check_call([GIT,'checkout','-q',branch])
|
||||
@@ -323,7 +326,7 @@ def main():
|
||||
subprocess.check_call([GIT,'push',host_repo,'refs/heads/'+branch])
|
||||
break
|
||||
elif reply == 'x':
|
||||
sys.exit(1)
|
||||
exit(1)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2017 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#
|
||||
# This script runs all contrib/devtools/lint-*.sh files, and fails if any exit
|
||||
# with a non-zero status code.
|
||||
|
||||
set -u
|
||||
|
||||
SCRIPTDIR=$(dirname "${BASH_SOURCE[0]}")
|
||||
LINTALL=$(basename "${BASH_SOURCE[0]}")
|
||||
|
||||
for f in "${SCRIPTDIR}"/lint-*.sh; do
|
||||
if [ "$(basename "$f")" != "$LINTALL" ]; then
|
||||
if ! "$f"; then
|
||||
echo "^---- failure generated from $f"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
@@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2017 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 specified flake8 warnings in python files.
|
||||
|
||||
# F401: module imported but unused
|
||||
flake8 --ignore=B,C,E,F,I,N,W --select=F401 .
|
||||
@@ -1,88 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2017 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 new lines in diff that introduce trailing whitespace.
|
||||
|
||||
# We can't run this check unless we know the commit range for the PR.
|
||||
if [ -z "${TRAVIS_COMMIT_RANGE}" ]; then
|
||||
echo "Cannot run lint-whitespace.sh without commit range. To run locally, use:"
|
||||
echo "TRAVIS_COMMIT_RANGE='<commit range>' .lint-whitespace.sh"
|
||||
echo "For example:"
|
||||
echo "TRAVIS_COMMIT_RANGE='47ba2c3...ee50c9e' .lint-whitespace.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
showdiff() {
|
||||
if ! git diff -U0 "${TRAVIS_COMMIT_RANGE}" -- "." ":(exclude)depends/patches/" ":(exclude)src/leveldb/" ":(exclude)src/secp256k1/" ":(exclude)src/univalue/" ":(exclude)doc/release-notes/"; then
|
||||
echo "Failed to get a diff"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
showcodediff() {
|
||||
if ! git diff -U0 "${TRAVIS_COMMIT_RANGE}" -- *.cpp *.h *.md *.py *.sh ":(exclude)src/leveldb/" ":(exclude)src/secp256k1/" ":(exclude)src/univalue/" ":(exclude)doc/release-notes/"; then
|
||||
echo "Failed to get a diff"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
RET=0
|
||||
|
||||
# Check if trailing whitespace was found in the diff.
|
||||
if showdiff | grep -E -q '^\+.*\s+$'; then
|
||||
echo "This diff appears to have added new lines with trailing whitespace."
|
||||
echo "The following changes were suspected:"
|
||||
FILENAME=""
|
||||
SEEN=0
|
||||
while read -r line; do
|
||||
if [[ "$line" =~ ^diff ]]; then
|
||||
FILENAME="$line"
|
||||
SEEN=0
|
||||
elif [[ "$line" =~ ^@@ ]]; then
|
||||
LINENUMBER="$line"
|
||||
else
|
||||
if [ "$SEEN" -eq 0 ]; then
|
||||
# The first time a file is seen with trailing whitespace, we print the
|
||||
# filename (preceded by a newline).
|
||||
echo
|
||||
echo "$FILENAME"
|
||||
echo "$LINENUMBER"
|
||||
SEEN=1
|
||||
fi
|
||||
echo "$line"
|
||||
fi
|
||||
done < <(showdiff | grep -E '^(diff --git |@@|\+.*\s+$)')
|
||||
RET=1
|
||||
fi
|
||||
|
||||
# Check if tab characters were found in the diff.
|
||||
if showcodediff | grep -P -q '^\+.*\t'; then
|
||||
echo "This diff appears to have added new lines with tab characters instead of spaces."
|
||||
echo "The following changes were suspected:"
|
||||
FILENAME=""
|
||||
SEEN=0
|
||||
while read -r line; do
|
||||
if [[ "$line" =~ ^diff ]]; then
|
||||
FILENAME="$line"
|
||||
SEEN=0
|
||||
elif [[ "$line" =~ ^@@ ]]; then
|
||||
LINENUMBER="$line"
|
||||
else
|
||||
if [ "$SEEN" -eq 0 ]; then
|
||||
# The first time a file is seen with a tab character, we print the
|
||||
# filename (preceded by a newline).
|
||||
echo
|
||||
echo "$FILENAME"
|
||||
echo "$LINENUMBER"
|
||||
SEEN=1
|
||||
fi
|
||||
echo "$line"
|
||||
fi
|
||||
done < <(showcodediff | grep -P '^(diff --git |@@|\+.*\t)')
|
||||
RET=1
|
||||
fi
|
||||
|
||||
exit $RET
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright (c) 2014-2017 The Bitcoin Core developers
|
||||
# Copyright (c) 2014-2016 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
'''
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright (c) 2015-2017 The Bitcoin Core developers
|
||||
# Copyright (c) 2015-2016 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
'''
|
||||
@@ -212,5 +212,5 @@ if __name__ == '__main__':
|
||||
except IOError:
|
||||
print('%s: cannot open' % filename)
|
||||
retval = 1
|
||||
sys.exit(retval)
|
||||
exit(retval)
|
||||
|
||||
|
||||
@@ -159,6 +159,6 @@ if __name__ == '__main__':
|
||||
print('%s: NEEDED library %s is not allowed' % (filename, library_name.decode('utf-8')))
|
||||
retval = 1
|
||||
|
||||
sys.exit(retval)
|
||||
exit(retval)
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python2
|
||||
# Copyright (c) 2015-2017 The Bitcoin Core developers
|
||||
# Copyright (c) 2015-2016 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
'''
|
||||
|
||||
@@ -36,12 +36,12 @@ def check_at_repository_root():
|
||||
if not os.path.exists('.git'):
|
||||
print('No .git directory found')
|
||||
print('Execute this script at the root of the repository', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
exit(1)
|
||||
|
||||
def fetch_all_translations():
|
||||
if subprocess.call([TX, 'pull', '-f', '-a']):
|
||||
print('Error while fetching translations', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
exit(1)
|
||||
|
||||
def find_format_specifiers(s):
|
||||
'''Find all format specifiers in a string.'''
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
sign=false
|
||||
verify=false
|
||||
build=false
|
||||
setupenv=false
|
||||
|
||||
# Systems to build
|
||||
linux=true
|
||||
@@ -39,15 +40,15 @@ version Version number, commit, or branch to build. If building a commit or bra
|
||||
Options:
|
||||
-c|--commit Indicate that the version argument is for a commit or branch
|
||||
-u|--url Specify the URL of the repository. Default is https://github.com/bitcoin/bitcoin
|
||||
-v|--verify Verify the Gitian build
|
||||
-b|--build Do a Gitian build
|
||||
-v|--verify Verify the gitian build
|
||||
-b|--build Do a gitian build
|
||||
-s|--sign Make signed binaries for Windows and Mac OSX
|
||||
-B|--buildsign Build both signed and unsigned binaries
|
||||
-o|--os Specify which Operating Systems the build is for. Default is lwx. l for linux, w for windows, x for osx
|
||||
-j Number of processes to use. Default 2
|
||||
-m Memory to allocate in MiB. Default 2000
|
||||
--kvm Use KVM instead of LXC
|
||||
--setup Set up the Gitian building environment. Uses KVM. If you want to use lxc, use the --lxc option. Only works on Debian-based systems (Ubuntu, Debian)
|
||||
--setup Setup the gitian building environment. Uses KVM. If you want to use lxc, use the --lxc option. Only works on Debian-based systems (Ubuntu, Debian)
|
||||
--detach-sign Create the assert file for detached signing. Will not commit anything.
|
||||
--no-commit Do not commit anything to git
|
||||
-h|--help Print this help message
|
||||
@@ -105,7 +106,7 @@ while :; do
|
||||
fi
|
||||
shift
|
||||
else
|
||||
echo 'Error: "--os" requires an argument containing an l (for linux), w (for windows), or x (for Mac OSX)'
|
||||
echo 'Error: "--os" requires an argument containing an l (for linux), w (for windows), or x (for Mac OSX)\n'
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
@@ -178,6 +179,8 @@ done
|
||||
if [[ $lxc = true ]]
|
||||
then
|
||||
export USE_LXC=1
|
||||
export LXC_BRIDGE=lxcbr0
|
||||
sudo ifconfig lxcbr0 up 10.0.2.2
|
||||
fi
|
||||
|
||||
# Check for OSX SDK
|
||||
@@ -188,7 +191,7 @@ then
|
||||
fi
|
||||
|
||||
# Get signer
|
||||
if [[ -n "$1" ]]
|
||||
if [[ -n"$1" ]]
|
||||
then
|
||||
SIGNER=$1
|
||||
shift
|
||||
|
||||
65
contrib/gitian-descriptors/README.md
Normal file
@@ -0,0 +1,65 @@
|
||||
### Gavin's notes on getting gitian builds up and running using KVM
|
||||
|
||||
These instructions distilled from
|
||||
[https://help.ubuntu.com/community/KVM/Installation](https://help.ubuntu.com/community/KVM/Installation).
|
||||
|
||||
You need the right hardware: you need a 64-bit-capable CPU with hardware virtualization support (Intel VT-x or AMD-V). Not all modern CPUs support hardware virtualization.
|
||||
|
||||
You probably need to enable hardware virtualization in your machine's BIOS.
|
||||
|
||||
You need to be running a recent version of 64-bit-Ubuntu, and you need to install several prerequisites:
|
||||
|
||||
sudo apt-get install ruby apache2 git apt-cacher-ng python-vm-builder qemu-kvm
|
||||
|
||||
Sanity checks:
|
||||
|
||||
sudo service apt-cacher-ng status # Should return apt-cacher-ng is running
|
||||
ls -l /dev/kvm # Should show a /dev/kvm device
|
||||
|
||||
|
||||
Once you've got the right hardware and software:
|
||||
|
||||
git clone git://github.com/bitcoin/bitcoin.git
|
||||
git clone git://github.com/devrandom/gitian-builder.git
|
||||
mkdir gitian-builder/inputs
|
||||
cd gitian-builder/inputs
|
||||
|
||||
# Create base images
|
||||
cd gitian-builder
|
||||
bin/make-base-vm --suite trusty --arch amd64
|
||||
cd ..
|
||||
|
||||
# Get inputs (see doc/release-process.md for exact inputs needed and where to get them)
|
||||
...
|
||||
|
||||
# For further build instructions see doc/release-process.md
|
||||
...
|
||||
|
||||
---------------------
|
||||
|
||||
`gitian-builder` now also supports building using LXC. See
|
||||
[help.ubuntu.com](https://help.ubuntu.com/14.04/serverguide/lxc.html)
|
||||
for how to get LXC up and running under Ubuntu.
|
||||
|
||||
If your main machine is a 64-bit Mac or PC with a few gigabytes of memory
|
||||
and at least 10 gigabytes of free disk space, you can `gitian-build` using
|
||||
LXC running inside a virtual machine.
|
||||
|
||||
Here's a description of Gavin's setup on OSX 10.6:
|
||||
|
||||
1. Download and install VirtualBox from [https://www.virtualbox.org/](https://www.virtualbox.org/)
|
||||
|
||||
2. Download the 64-bit Ubuntu Desktop 12.04 LTS .iso CD image from
|
||||
[http://www.ubuntu.com/](http://www.ubuntu.com/)
|
||||
|
||||
3. Run VirtualBox and create a new virtual machine, using the Ubuntu .iso (see the [VirtualBox documentation](https://www.virtualbox.org/wiki/Documentation) for details). Create it with at least 2 gigabytes of memory and a disk that is at least 20 gigabytes big.
|
||||
|
||||
4. Inside the running Ubuntu desktop, install:
|
||||
|
||||
sudo apt-get install debootstrap lxc ruby apache2 git apt-cacher-ng python-vm-builder
|
||||
|
||||
5. Still inside Ubuntu, tell gitian-builder to use LXC, then follow the "Once you've got the right hardware and software" instructions above:
|
||||
|
||||
export USE_LXC=1
|
||||
git clone git://github.com/bitcoin/bitcoin.git
|
||||
... etc
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
name: "bitcoin-linux-0.16"
|
||||
name: "bitcoin-linux-0.15"
|
||||
enable_cache: true
|
||||
suites:
|
||||
- "trusty"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
name: "bitcoin-osx-0.16"
|
||||
name: "bitcoin-osx-0.15"
|
||||
enable_cache: true
|
||||
suites:
|
||||
- "trusty"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
name: "bitcoin-win-0.16"
|
||||
name: "bitcoin-win-0.15"
|
||||
enable_cache: true
|
||||
suites:
|
||||
- "trusty"
|
||||
|
||||
@@ -3,7 +3,7 @@ PGP keys
|
||||
|
||||
This folder contains the public keys of developers and active contributors.
|
||||
|
||||
The keys are mainly used to sign git commits or the build results of Gitian
|
||||
The keys are mainly used to sign git commits or the build results of gitian
|
||||
builds.
|
||||
|
||||
You can import the keys into gpg as follows. Also, make sure to fetch the
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
gb52/WPhR6CJQ2/7y3Uj7u8sPNpb7BGI
|
||||
=as33
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -1,76 +0,0 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mQINBFWSwMoBEADG31O8+ex+xpgzVKQgF4iVRE5uBPT0+GM6FnwqIIhXVKiBLQh8
|
||||
YDhhgk6joh+vsLrFzKZ9kXwoiHN8y/AiNCQ0xjAUdpznD5xvHAaGIAlT/sodRNT+
|
||||
869WgT9G1uiVp0P4ucEeilmhCn9o51LqkS3roXkj0ec52b1pslUl2WKdu1ZD+Bj4
|
||||
3/oVZm7mmjkDwl0RHJQmqlK0bunq0jlVlgH5sdQfmLbCZaq3LhVPf73zt5qHH+J6
|
||||
ZbU7A4cqm2eN5SyH+Nno+cq3+vXmvVI+x/jPe/dPDCXaGWf5fWI/Lbk/mMP7JAl1
|
||||
6X44CN+hZHUnNuzeZt2/ROWZ0s0JJcjQkSe9noUQedjBAHX82s886vsFzOHvDtul
|
||||
EuV/XAjUlkhMbhZkZaIq9ucqHmUBI4+OcFEIbbKc9TrKtJe+CYuWTNlomVk/iFr8
|
||||
zSm/S64NiqKi/BeQGgcsDZIaJDYfDP83esOOaaxFswHnJNtHnU1PwntrJtXft0dK
|
||||
ydtlQZ6r96SYxLDTeGfC2SNk0zbnKAGvjj04vzQeN+JSRZ75tNKmgdbJdNL8wvPh
|
||||
879TpCwMhNDvSRG+YqCe6whaJV76a+Doxg48HCJYaj6bnRn41/QGJEyL31I8l/7S
|
||||
YsLLmAEbqwG7erYi7WZS3cRrGJI8RwohGMZf7yraqoaOgMKmtE/Sq0tLtwARAQAB
|
||||
tCNTam9ycyBQcm92b29zdCA8c2pvcnNAc3Byb3Zvb3N0Lm5sPokCQAQTAQoAKgIb
|
||||
AwUJB4YfgAULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAUCWWXcoAIZAQAKCRBX/5vb
|
||||
zDAQCeYJD/47XDMfEMg4g4spo7k92XsNkvjlAhWvvxd+kxow/V8c64WQXody32FZ
|
||||
HRSmK8dVjf9mIJMKkX4lpKpim7cQxsdTcorcdu+yk4TK+Wah61vsMhbSSllfHs1U
|
||||
+q8jYMGnXTD+CY0aeTMrTfJcR2yN98jmNSWIL1qWmJ51RSTL6BQKb6eYtR7pWRkW
|
||||
uMR6oFC09Db4fiKa4zhH81+/t0g+6pMY391gSluaS+OfNqGORCo+/IdG5IDzh5Vp
|
||||
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
|
||||
N5Ug
|
||||
=80Es
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -1,85 +0,0 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1
|
||||
|
||||
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
|
||||
=PVBi
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -30,12 +30,12 @@ pre-start script
|
||||
echo
|
||||
echo "This password is security critical to securing wallets "
|
||||
echo "and must not be the same as the rpcuser setting."
|
||||
echo "You can generate a suitable random password using the following "
|
||||
echo "You can generate a suitable random password using the following"
|
||||
echo "command from the shell:"
|
||||
echo
|
||||
echo "bash -c 'tr -dc a-zA-Z0-9 < /dev/urandom | head -c32 && echo'"
|
||||
echo
|
||||
echo "It is recommended that you also set alertnotify so you are "
|
||||
echo "It is also recommended that you also set alertnotify so you are "
|
||||
echo "notified of problems:"
|
||||
echo
|
||||
echo "ie: alertnotify=echo %%s | mail -s \"Bitcoin Alert\"" \
|
||||
|
||||
@@ -76,12 +76,12 @@ checkconfig()
|
||||
eerror ""
|
||||
eerror "This password is security critical to securing wallets "
|
||||
eerror "and must not be the same as the rpcuser setting."
|
||||
eerror "You can generate a suitable random password using the following "
|
||||
eerror "You can generate a suitable random password using the following"
|
||||
eerror "command from the shell:"
|
||||
eerror ""
|
||||
eerror "bash -c 'tr -dc a-zA-Z0-9 < /dev/urandom | head -c32 && echo'"
|
||||
eerror ""
|
||||
eerror "It is recommended that you also set alertnotify so you are "
|
||||
eerror "It is also recommended that you also set alertnotify so you are "
|
||||
eerror "notified of problems:"
|
||||
eerror ""
|
||||
eerror "ie: alertnotify=echo %%s | mail -s \"Bitcoin Alert\"" \
|
||||
|
||||
@@ -1,25 +1,22 @@
|
||||
# It is not recommended to modify this file in-place, because it will
|
||||
# be overwritten during package upgrades. If you want to add further
|
||||
# options or overwrite existing ones then use
|
||||
# $ systemctl edit bitcoind.service
|
||||
# See "man systemd.service" for details.
|
||||
|
||||
# Note that almost all daemon options could be specified in
|
||||
# /etc/bitcoin/bitcoin.conf
|
||||
|
||||
[Unit]
|
||||
Description=Bitcoin daemon
|
||||
Description=Bitcoin's distributed currency daemon
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/bin/bitcoind -daemon -conf=/etc/bitcoin/bitcoin.conf -pid=/run/bitcoind/bitcoind.pid
|
||||
# Creates /run/bitcoind owned by bitcoin
|
||||
RuntimeDirectory=bitcoind
|
||||
User=bitcoin
|
||||
Group=bitcoin
|
||||
|
||||
Type=forking
|
||||
PIDFile=/run/bitcoind/bitcoind.pid
|
||||
Restart=on-failure
|
||||
PIDFile=/var/lib/bitcoind/bitcoind.pid
|
||||
ExecStart=/usr/bin/bitcoind -daemon -pid=/var/lib/bitcoind/bitcoind.pid \
|
||||
-conf=/etc/bitcoin/bitcoin.conf -datadir=/var/lib/bitcoind -disablewallet
|
||||
|
||||
Restart=always
|
||||
PrivateTmp=true
|
||||
TimeoutStopSec=60s
|
||||
TimeoutStartSec=2s
|
||||
StartLimitInterval=120s
|
||||
StartLimitBurst=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>/usr/local/bin/bitcoind</string>
|
||||
<string>-daemon</string>
|
||||
</array>
|
||||
<key>RunAtLoad</key>
|
||||
<true/>
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Install libdb4.8 (Berkeley DB).
|
||||
|
||||
set -e
|
||||
|
||||
if [ -z "${1}" ]; then
|
||||
echo "Usage: ./install_db4.sh <base-dir> [<extra-bdb-configure-flag> ...]"
|
||||
echo
|
||||
echo "Must specify a single argument: the directory in which db4 will be built."
|
||||
echo "This is probably \`pwd\` if you're at the root of the bitcoin repository."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
expand_path() {
|
||||
echo "$(cd "${1}" && pwd -P)"
|
||||
}
|
||||
|
||||
BDB_PREFIX="$(expand_path ${1})/db4"; shift;
|
||||
BDB_VERSION='db-4.8.30.NC'
|
||||
BDB_HASH='12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef'
|
||||
BDB_URL="https://download.oracle.com/berkeley-db/${BDB_VERSION}.tar.gz"
|
||||
|
||||
check_exists() {
|
||||
which "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
sha256_check() {
|
||||
# Args: <sha256_hash> <filename>
|
||||
#
|
||||
if check_exists sha256sum; then
|
||||
echo "${1} ${2}" | sha256sum -c
|
||||
elif check_exists sha256; then
|
||||
if [ "$(uname)" = "FreeBSD" ]; then
|
||||
sha256 -c "${1}" "${2}"
|
||||
else
|
||||
echo "${1} ${2}" | sha256 -c
|
||||
fi
|
||||
else
|
||||
echo "${1} ${2}" | shasum -a 256 -c
|
||||
fi
|
||||
}
|
||||
|
||||
http_get() {
|
||||
# Args: <url> <filename> <sha256_hash>
|
||||
#
|
||||
# It's acceptable that we don't require SSL here because we manually verify
|
||||
# content hashes below.
|
||||
#
|
||||
if [ -f "${2}" ]; then
|
||||
echo "File ${2} already exists; not downloading again"
|
||||
elif check_exists curl; then
|
||||
curl --insecure "${1}" -o "${2}"
|
||||
else
|
||||
wget --no-check-certificate "${1}" -O "${2}"
|
||||
fi
|
||||
|
||||
sha256_check "${3}" "${2}"
|
||||
}
|
||||
|
||||
mkdir -p "${BDB_PREFIX}"
|
||||
http_get "${BDB_URL}" "${BDB_VERSION}.tar.gz" "${BDB_HASH}"
|
||||
tar -xzvf ${BDB_VERSION}.tar.gz -C "$BDB_PREFIX"
|
||||
cd "${BDB_PREFIX}/${BDB_VERSION}/"
|
||||
|
||||
# Apply a patch necessary when building with clang and c++11 (see https://community.oracle.com/thread/3952592)
|
||||
CLANG_CXX11_PATCH_URL='https://gist.githubusercontent.com/LnL7/5153b251fd525fe15de69b67e63a6075/raw/7778e9364679093a32dec2908656738e16b6bdcb/clang.patch'
|
||||
CLANG_CXX11_PATCH_HASH='7a9a47b03fd5fb93a16ef42235fa9512db9b0829cfc3bdf90edd3ec1f44d637c'
|
||||
http_get "${CLANG_CXX11_PATCH_URL}" clang.patch "${CLANG_CXX11_PATCH_HASH}"
|
||||
patch -p2 < clang.patch
|
||||
|
||||
cd build_unix/
|
||||
|
||||
"${BDB_PREFIX}/${BDB_VERSION}/dist/configure" \
|
||||
--enable-cxx --disable-shared --disable-replication --with-pic --prefix="${BDB_PREFIX}" \
|
||||
"${@}"
|
||||
|
||||
make install
|
||||
|
||||
echo
|
||||
echo "db4 build complete."
|
||||
echo
|
||||
echo 'When compiling bitcoind, run `./configure` in the following way:'
|
||||
echo
|
||||
echo " export BDB_PREFIX='${BDB_PREFIX}'"
|
||||
echo ' ./configure BDB_LIBS="-L${BDB_PREFIX}/lib -ldb_cxx-4.8" BDB_CFLAGS="-I${BDB_PREFIX}/include" ...'
|
||||
@@ -46,7 +46,7 @@ linearize-hashes.py.
|
||||
(Default: `1000*1000*1000 bytes`)
|
||||
* `netmagic`: Network magic number.
|
||||
* `out_of_order_cache_sz`: If out-of-order blocks are being read, the block can
|
||||
be written to a cache so that the blockchain doesn't have to be sought again.
|
||||
be written to a cache so that the blockchain doesn't have to be seeked again.
|
||||
This option specifies the cache size. (Default: `100*1000*1000 bytes`)
|
||||
* `rev_hash_bytes`: If true, the block hash list written by linearize-hashes.py
|
||||
will be byte-reversed when read by linearize-data.py. See the linearize-hashes
|
||||
|
||||
@@ -3,16 +3,9 @@ rpcuser=someuser
|
||||
rpcpassword=somepassword
|
||||
#datadir=~/.bitcoin
|
||||
host=127.0.0.1
|
||||
|
||||
#mainnet default
|
||||
port=8332
|
||||
|
||||
#testnet default
|
||||
#port=18332
|
||||
|
||||
#regtest default
|
||||
#port=18443
|
||||
|
||||
# bootstrap.dat hashlist settings (linearize-hashes)
|
||||
max_height=313000
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# linearize-data.py: Construct a linear, no-fork version of the chain.
|
||||
#
|
||||
# Copyright (c) 2013-2017 The Bitcoin Core developers
|
||||
# Copyright (c) 2013-2016 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# linearize-hashes.py: List blocks in a linear, no-fork version of the chain.
|
||||
#
|
||||
# Copyright (c) 2013-2017 The Bitcoin Core developers
|
||||
# Copyright (c) 2013-2016 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#
|
||||
@@ -87,7 +87,7 @@ def get_block_hashes(settings, max_blocks_per_call=10000):
|
||||
for x,resp_obj in enumerate(reply):
|
||||
if rpc.response_is_error(resp_obj):
|
||||
print('JSON-RPC: error at height', height+x, ': ', resp_obj['error'], file=sys.stderr)
|
||||
sys.exit(1)
|
||||
exit(1)
|
||||
assert(resp_obj['id'] == x) # assume replies are in-sequence
|
||||
if settings['rev_hash_bytes'] == 'true':
|
||||
resp_obj['result'] = hex_switchEndian(resp_obj['result'])
|
||||
@@ -140,7 +140,7 @@ if __name__ == '__main__':
|
||||
if 'datadir' in settings and not use_userpass:
|
||||
use_datadir = True
|
||||
if not use_userpass and not use_datadir:
|
||||
print("Missing datadir or username and/or password in cfg file", file=sys.stderr)
|
||||
print("Missing datadir or username and/or password in cfg file", file=stderr)
|
||||
sys.exit(1)
|
||||
|
||||
settings['port'] = int(settings['port'])
|
||||
|
||||
@@ -40,7 +40,7 @@ grep CodeResources < "${TEMPLIST}" | while read i; do
|
||||
RESOURCE="${TEMPDIR}/${OUTROOT}/${TARGETFILE}"
|
||||
DIRNAME="`dirname "${RESOURCE}"`"
|
||||
mkdir -p "${DIRNAME}"
|
||||
echo "Adding resource for: \"${TARGETFILE}\""
|
||||
echo "Adding resource for: "${TARGETFILE}""
|
||||
cp "${i}" "${RESOURCE}"
|
||||
done
|
||||
|
||||
|
||||
@@ -84,16 +84,16 @@ If you would prefer not to build the GUI at all, you can pass the switch
|
||||
|
||||
The desktop and KDE meta files are created in the spec file itself with the
|
||||
`cat` command. This is done to allow easy distribution specific changes without
|
||||
needing to use any patches. A specific timestamp is given to the files so that
|
||||
needing to use any patches. A specific time stamp is given to the files so that
|
||||
it does not they do not appear to have been updated every time the package is
|
||||
built. If you do make changes to them, you probably should update timestamp
|
||||
assigned to them in the `touch` command that specifies the timestamp.
|
||||
built. If you do make changes to them, you probably should update time stamp
|
||||
assigned to them in the `touch` command that specifies the time stamp.
|
||||
|
||||
## SVG, PNG, and XPM Icons
|
||||
|
||||
The `bitcoin.svg` file is from the source listed as `Source100`. It is used as
|
||||
the source for the PNG and XPM files. The generated PNG and XPM files are given
|
||||
the same timestamp as the source SVG file as a means of indicating they are
|
||||
the same time stamp as the source SVG file as a means of indicating they are
|
||||
derived from it.
|
||||
|
||||
## Systemd
|
||||
@@ -105,10 +105,10 @@ distributions that still receive vendor updates do in fact use systemd.
|
||||
The files to control the service are created in the RPM spec file itself using
|
||||
the `cat` command. This is done to make it easy to modify for other
|
||||
distributions that may implement things differently without needing to patch
|
||||
source. A specific timestamp is given to the files so that they do not appear
|
||||
source. A specific time stamp is given to the files so that they do not appear
|
||||
to have been updated every time the package is built. If you do make changes to
|
||||
them, you probably should update the timestamp assigned to them in the `touch`
|
||||
command that specifies the timestamp.
|
||||
them, you probably should update the time stamp assigned to them in the `touch`
|
||||
command that specifies the time stamp.
|
||||
|
||||
## SELinux
|
||||
|
||||
|
||||
@@ -336,8 +336,6 @@ done
|
||||
%{_sbindir}/semanage port -a -t bitcoin_port_t -p tcp 8333
|
||||
%{_sbindir}/semanage port -a -t bitcoin_port_t -p tcp 18332
|
||||
%{_sbindir}/semanage port -a -t bitcoin_port_t -p tcp 18333
|
||||
%{_sbindir}/semanage port -a -t bitcoin_port_t -p tcp 18443
|
||||
%{_sbindir}/semanage port -a -t bitcoin_port_t -p tcp 18444
|
||||
%{_sbindir}/fixfiles -R bitcoin-server restore &> /dev/null || :
|
||||
%{_sbindir}/restorecon -R %{_localstatedir}/lib/bitcoin || :
|
||||
fi
|
||||
@@ -357,8 +355,6 @@ if [ $1 -eq 0 ]; then
|
||||
%{_sbindir}/semanage port -d -p tcp 8333
|
||||
%{_sbindir}/semanage port -d -p tcp 18332
|
||||
%{_sbindir}/semanage port -d -p tcp 18333
|
||||
%{_sbindir}/semanage port -d -p tcp 18443
|
||||
%{_sbindir}/semanage port -d -p tcp 18444
|
||||
for selinuxvariant in %{selinux_variants}; do
|
||||
%{_sbindir}/semodule -s ${selinuxvariant} -r bitcoin &> /dev/null || :
|
||||
done
|
||||
|
||||
@@ -4,9 +4,7 @@ Utility to generate the seeds.txt list that is compiled into the client
|
||||
(see [src/chainparamsseeds.h](/src/chainparamsseeds.h) and other utilities in [contrib/seeds](/contrib/seeds)).
|
||||
|
||||
Be sure to update `PATTERN_AGENT` in `makeseeds.py` to include the current version,
|
||||
and remove old versions as necessary (at a minimum when GetDesireableServiceFlags
|
||||
changes its default return value, as those are the services which seeds are added
|
||||
to addrman with).
|
||||
and remove old versions as necessary.
|
||||
|
||||
The seeds compiled into the release are created from sipa's DNS seed data, like this:
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@ def process_nodes(g, f, structname, defaultport):
|
||||
def main():
|
||||
if len(sys.argv)<2:
|
||||
print(('Usage: %s <path_to_nodes_txt>' % sys.argv[0]), file=sys.stderr)
|
||||
sys.exit(1)
|
||||
exit(1)
|
||||
g = sys.stdout
|
||||
indir = sys.argv[1]
|
||||
g.write('#ifndef BITCOIN_CHAINPARAMSSEEDS_H\n')
|
||||
|
||||
@@ -30,7 +30,7 @@ import collections
|
||||
PATTERN_IPV4 = re.compile(r"^((\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})):(\d+)$")
|
||||
PATTERN_IPV6 = re.compile(r"^\[([0-9a-z:]+)\]:(\d+)$")
|
||||
PATTERN_ONION = re.compile(r"^([abcdefghijklmnopqrstuvwxyz234567]{16}\.onion):(\d+)$")
|
||||
PATTERN_AGENT = re.compile(r"^(/Satoshi:0.13.(1|2|99)/|/Satoshi:0.14.(0|1|2|99)/|/Satoshi:0.15.(0|1|2|99)/)$")
|
||||
PATTERN_AGENT = re.compile(r"^(/Satoshi:0.13.(1|2|99)/|/Satoshi:0.14.(0|1|2|99)/)$")
|
||||
|
||||
def parseline(line):
|
||||
sline = line.split()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2012-2017 The Bitcoin Core developers
|
||||
# Copyright (c) 2012-2016 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
'''
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright (c) 2012-2017 The Bitcoin Core developers
|
||||
# Copyright (c) 2012-2016 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
'''
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
if [ -d "$1" ]; then
|
||||
cd "$1" || exit 1
|
||||
cd "$1"
|
||||
else
|
||||
echo "Usage: $0 <datadir>" >&2
|
||||
echo "Removes obsolete Bitcoin database files" >&2
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
# Valgrind suppressions file for Bitcoin.
|
||||
#
|
||||
# Includes known Valgrind warnings in our dependencies that cannot be fixed
|
||||
# in-tree.
|
||||
#
|
||||
# Example use:
|
||||
# $ valgrind --suppressions=contrib/valgrind.supp src/test/test_bitcoin
|
||||
# $ valgrind --suppressions=contrib/valgrind.supp --leak-check=full \
|
||||
# --show-leak-kinds=all src/test/test_bitcoin --log_level=test_suite
|
||||
{
|
||||
Suppress libstdc++ warning - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65434
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:malloc
|
||||
obj:*/libstdc++.*
|
||||
fun:call_init.part.0
|
||||
fun:call_init
|
||||
fun:_dl_init
|
||||
obj:*/ld-*.so
|
||||
}
|
||||
{
|
||||
Suppress libdb warning - https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=662917
|
||||
Memcheck:Cond
|
||||
obj:*/libdb_cxx-*.so
|
||||
fun:__log_put
|
||||
obj:*/libdb_cxx-*.so
|
||||
fun:__log_put_record
|
||||
}
|
||||
{
|
||||
Suppress leveldb warning (leveldb::InitModule()) - https://github.com/google/leveldb/issues/113
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:_Znwm
|
||||
fun:_ZN7leveldbL10InitModuleEv
|
||||
}
|
||||
{
|
||||
Suppress leveldb warning (leveldb::Env::Default()) - https://github.com/google/leveldb/issues/113
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:_Znwm
|
||||
...
|
||||
fun:_ZN7leveldbL14InitDefaultEnvEv
|
||||
}
|
||||
@@ -9,7 +9,7 @@ REVSIG=false
|
||||
IFS='
|
||||
'
|
||||
if [ "$BITCOIN_VERIFY_COMMITS_ALLOW_SHA1" = 1 ]; then
|
||||
GPG_RES="$(printf '%s\n' "$INPUT" | gpg --trust-model always "$@" 2>/dev/null)"
|
||||
GPG_RES="$(echo "$INPUT" | gpg --trust-model always "$@" 2>/dev/null)"
|
||||
else
|
||||
# Note how we've disabled SHA1 with the --weak-digest option, disabling
|
||||
# signatures - including selfsigs - that use SHA1. While you might think that
|
||||
@@ -24,7 +24,7 @@ else
|
||||
case "$LINE" in
|
||||
"gpg (GnuPG) 1.4.1"*|"gpg (GnuPG) 2.0."*)
|
||||
echo "Please upgrade to at least gpg 2.1.10 to check for weak signatures" > /dev/stderr
|
||||
GPG_RES="$(printf '%s\n' "$INPUT" | gpg --trust-model always "$@" 2>/dev/null)"
|
||||
GPG_RES="$(echo "$INPUT" | gpg --trust-model always "$@" 2>/dev/null)"
|
||||
;;
|
||||
# We assume if you're running 2.1+, you're probably running 2.1.10+
|
||||
# gpg will fail otherwise
|
||||
@@ -32,7 +32,7 @@ else
|
||||
# gpg will fail otherwise
|
||||
esac
|
||||
done
|
||||
[ "$GPG_RES" = "" ] && GPG_RES="$(printf '%s\n' "$INPUT" | gpg --trust-model always --weak-digest sha1 "$@" 2>/dev/null)"
|
||||
[ "$GPG_RES" = "" ] && GPG_RES="$(echo "$INPUT" | gpg --trust-model always --weak-digest sha1 "$@" 2>/dev/null)"
|
||||
fi
|
||||
for LINE in $(echo "$GPG_RES"); do
|
||||
case "$LINE" in
|
||||
@@ -57,8 +57,8 @@ if ! $VALID; then
|
||||
exit 1
|
||||
fi
|
||||
if $VALID && $REVSIG; then
|
||||
printf '%s\n' "$INPUT" | gpg --trust-model always "$@" 2>/dev/null | grep "\[GNUPG:\] \(NEWSIG\|SIG_ID\|VALIDSIG\)"
|
||||
echo "$INPUT" | gpg --trust-model always "$@" 2>/dev/null | grep "\[GNUPG:\] \(NEWSIG\|SIG_ID\|VALIDSIG\)"
|
||||
echo "$GOODREVSIG"
|
||||
else
|
||||
printf '%s\n' "$INPUT" | gpg --trust-model always "$@" 2>/dev/null
|
||||
echo "$INPUT" | gpg --trust-model always "$@" 2>/dev/null
|
||||
fi
|
||||
|
||||
@@ -1 +1 @@
|
||||
11049f4fe62606d1b0380a9ef800ac130f0fbadf
|
||||
82bcf405f6db1d55b684a1f63a4aabad376cdad7
|
||||
|
||||
@@ -12,6 +12,8 @@ VERIFIED_ROOT=$(cat "${DIR}/trusted-git-root")
|
||||
VERIFIED_SHA512_ROOT=$(cat "${DIR}/trusted-sha512-root-commit")
|
||||
REVSIG_ALLOWED=$(cat "${DIR}/allow-revsig-commits")
|
||||
|
||||
HAVE_FAILED=false
|
||||
|
||||
HAVE_GNU_SHA512=1
|
||||
[ ! -x "$(which sha512sum)" ] && HAVE_GNU_SHA512=0
|
||||
|
||||
@@ -33,12 +35,11 @@ fi
|
||||
|
||||
NO_SHA1=1
|
||||
PREV_COMMIT=""
|
||||
INITIAL_COMMIT="${CURRENT_COMMIT}"
|
||||
|
||||
while true; do
|
||||
if [ "$CURRENT_COMMIT" = $VERIFIED_ROOT ]; then
|
||||
echo "There is a valid path from \"$INITIAL_COMMIT\" to $VERIFIED_ROOT where all commits are signed!"
|
||||
exit 0
|
||||
echo "There is a valid path from "$CURRENT_COMMIT" to $VERIFIED_ROOT where all commits are signed!"
|
||||
exit 0;
|
||||
fi
|
||||
|
||||
if [ "$CURRENT_COMMIT" = $VERIFIED_SHA512_ROOT ]; then
|
||||
@@ -94,9 +95,9 @@ while true; do
|
||||
FILE_HASHES=""
|
||||
for FILE in $(git ls-tree --full-tree -r --name-only "$CURRENT_COMMIT" | LC_ALL=C sort); do
|
||||
if [ "$HAVE_GNU_SHA512" = 1 ]; then
|
||||
HASH=$(git cat-file blob "$CURRENT_COMMIT":"$FILE" | sha512sum | { read FIRST _; echo $FIRST; } )
|
||||
HASH=$(git cat-file blob "$CURRENT_COMMIT":"$FILE" | sha512sum | { read FIRST OTHER; echo $FIRST; } )
|
||||
else
|
||||
HASH=$(git cat-file blob "$CURRENT_COMMIT":"$FILE" | shasum -a 512 | { read FIRST _; echo $FIRST; } )
|
||||
HASH=$(git cat-file blob "$CURRENT_COMMIT":"$FILE" | shasum -a 512 | { read FIRST OTHER; echo $FIRST; } )
|
||||
fi
|
||||
[ "$FILE_HASHES" != "" ] && FILE_HASHES="$FILE_HASHES"'
|
||||
'
|
||||
|
||||
@@ -33,7 +33,7 @@ if [ ! -d "$WORKINGDIR" ]; then
|
||||
mkdir "$WORKINGDIR"
|
||||
fi
|
||||
|
||||
cd "$WORKINGDIR" || exit 1
|
||||
cd "$WORKINGDIR"
|
||||
|
||||
#test if a version number has been passed as an argument
|
||||
if [ -n "$1" ]; then
|
||||
@@ -76,6 +76,8 @@ if [ -n "$1" ]; then
|
||||
BASEDIR="$BASEDIR$RCSUBDIR.$RCVERSION/"
|
||||
fi
|
||||
fi
|
||||
|
||||
SIGNATUREFILE="$BASEDIR$SIGNATUREFILENAME"
|
||||
else
|
||||
echo "Error: need to specify a version on the command line"
|
||||
exit 2
|
||||
@@ -87,7 +89,7 @@ WGETOUT=$(wget -N "$HOST1$BASEDIR$SIGNATUREFILENAME" 2>&1)
|
||||
#and then see if wget completed successfully
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: couldn't fetch signature file. Have you specified the version number in the following format?"
|
||||
echo "[$VERSIONPREFIX]<version>-[$RCVERSIONSTRING[0-9]] (example: ${VERSIONPREFIX}0.10.4-${RCVERSIONSTRING}1)"
|
||||
echo "[$VERSIONPREFIX]<version>-[$RCVERSIONSTRING[0-9]] (example: "$VERSIONPREFIX"0.10.4-"$RCVERSIONSTRING"1)"
|
||||
echo "wget output:"
|
||||
echo "$WGETOUT"|sed 's/^/\t/g'
|
||||
exit 2
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright (c) 2014-2017 The Bitcoin Core developers
|
||||
# Copyright (c) 2014-2016 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
|
||||
Bitcoin should be started with the command line arguments:
|
||||
bitcoind -testnet -daemon \
|
||||
-zmqpubhashblock=tcp://127.0.0.1:28332 \
|
||||
-zmqpubrawtx=tcp://127.0.0.1:28332 \
|
||||
-zmqpubrawblock=tcp://127.0.0.1:28332 \
|
||||
-zmqpubhashtx=tcp://127.0.0.1:28332 \
|
||||
-zmqpubhashblock=tcp://127.0.0.1:28332
|
||||
|
||||
@@ -32,7 +32,7 @@ import sys
|
||||
|
||||
if not (sys.version_info.major >= 3 and sys.version_info.minor >= 5):
|
||||
print("This example only works with Python 3.5 and greater")
|
||||
sys.exit(1)
|
||||
exit(1)
|
||||
|
||||
port = 28332
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright (c) 2014-2017 The Bitcoin Core developers
|
||||
# Copyright (c) 2014-2016 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
|
||||
Bitcoin should be started with the command line arguments:
|
||||
bitcoind -testnet -daemon \
|
||||
-zmqpubhashblock=tcp://127.0.0.1:28332 \
|
||||
-zmqpubrawtx=tcp://127.0.0.1:28332 \
|
||||
-zmqpubrawblock=tcp://127.0.0.1:28332 \
|
||||
-zmqpubhashtx=tcp://127.0.0.1:28332 \
|
||||
-zmqpubhashblock=tcp://127.0.0.1:28332
|
||||
|
||||
@@ -36,7 +36,7 @@ import sys
|
||||
|
||||
if not (sys.version_info.major >= 3 and sys.version_info.minor >= 4):
|
||||
print("This example only works with Python 3.4 and greater")
|
||||
sys.exit(1)
|
||||
exit(1)
|
||||
|
||||
port = 28332
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ BUILD_ID_SALT ?= salt
|
||||
host:=$(BUILD)
|
||||
ifneq ($(HOST),)
|
||||
host:=$(HOST)
|
||||
host_toolchain:=$(HOST)-
|
||||
endif
|
||||
|
||||
ifneq ($(DEBUG),)
|
||||
|
||||
@@ -28,22 +28,6 @@ Common `host-platform-triplets` for cross compilation are:
|
||||
|
||||
No other options are needed, the paths are automatically configured.
|
||||
|
||||
Install the required dependencies: Ubuntu & Debian
|
||||
--------------------------------------------------
|
||||
|
||||
For macOS cross compilation:
|
||||
|
||||
sudo apt-get install curl librsvg2-bin libtiff-tools bsdmainutils cmake imagemagick libcap-dev libz-dev libbz2-dev python-setuptools
|
||||
|
||||
For Win32/Win64 cross compilation:
|
||||
|
||||
- see [build-windows.md](../doc/build-windows.md#cross-compilation-for-ubuntu-and-windows-subsystem-for-linux)
|
||||
|
||||
For linux (including i386, ARM) cross compilation:
|
||||
|
||||
sudo apt-get install curl g++-aarch64-linux-gnu g++-4.8-aarch64-linux-gnu gcc-4.8-aarch64-linux-gnu binutils-aarch64-linux-gnu g++-arm-linux-gnueabihf g++-4.8-arm-linux-gnueabihf gcc-4.8-arm-linux-gnueabihf binutils-arm-linux-gnueabihf g++-4.8-multilib gcc-4.8-multilib binutils-gold bsdmainutils
|
||||
|
||||
|
||||
Dependency Options:
|
||||
The following can be set when running make: make FOO=bar
|
||||
|
||||
|
||||
@@ -1,7 +1,3 @@
|
||||
ifneq ($(host),$(build))
|
||||
host_toolchain:=$(host)-
|
||||
endif
|
||||
|
||||
default_host_CC = $(host_toolchain)gcc
|
||||
default_host_CXX = $(host_toolchain)g++
|
||||
default_host_AR = $(host_toolchain)ar
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package=expat
|
||||
$(package)_version=2.2.1
|
||||
$(package)_download_path=https://github.com/libexpat/libexpat/releases/download/R_2_2_1/
|
||||
$(package)_download_path=https://downloads.sourceforge.net/project/expat/expat/$($(package)_version)
|
||||
$(package)_file_name=$(package)-$($(package)_version).tar.bz2
|
||||
$(package)_sha256_hash=1868cadae4c82a018e361e2b2091de103cd820aaacb0d6cfa49bd2cd83978885
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ define $(package)_preprocess_cmds
|
||||
endef
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts=--disable-shared --disable-openssl --disable-libevent-regress --disable-samples
|
||||
$(package)_config_opts=--disable-shared --disable-openssl --disable-libevent-regress
|
||||
$(package)_config_opts_release=--disable-debug-mode
|
||||
$(package)_config_opts_linux=--with-pic
|
||||
endef
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
package=native_ds_store
|
||||
$(package)_version=1.1.2
|
||||
$(package)_download_path=https://github.com/al45tair/ds_store/archive/
|
||||
$(package)_file_name=v$($(package)_version).tar.gz
|
||||
$(package)_sha256_hash=3b3ecb7bf0a5157f5b6010bc3af7c141fb0ad3527084e63336220d22744bc20c
|
||||
$(package)_version=1.1.0
|
||||
$(package)_download_path=https://bitbucket.org/al45tair/ds_store/get
|
||||
$(package)_download_file=v$($(package)_version).tar.bz2
|
||||
$(package)_file_name=$(package)-$($(package)_version).tar.bz2
|
||||
$(package)_sha256_hash=921596764d71d1bbd3297a90ef6d286f718794d667e4f81d91d14053525d64c1
|
||||
$(package)_install_libdir=$(build_prefix)/lib/python/dist-packages
|
||||
$(package)_dependencies=native_biplist
|
||||
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
package=native_mac_alias
|
||||
$(package)_version=2.0.6
|
||||
$(package)_download_path=https://github.com/al45tair/mac_alias/archive/
|
||||
$(package)_file_name=v$($(package)_version).tar.gz
|
||||
$(package)_sha256_hash=78a3332d9a597eebf09ae652d38ad1e263b28db5c2e6dd725fad357b03b77371
|
||||
$(package)_version=1.1.0
|
||||
$(package)_download_path=https://bitbucket.org/al45tair/mac_alias/get
|
||||
$(package)_download_file=v$($(package)_version).tar.bz2
|
||||
$(package)_file_name=$(package)-$($(package)_version).tar.bz2
|
||||
$(package)_sha256_hash=87ad827e66790028361e43fc754f68ed041a9bdb214cca03c853f079b04fb120
|
||||
$(package)_install_libdir=$(build_prefix)/lib/python/dist-packages
|
||||
$(package)_patches=python3.patch
|
||||
|
||||
define $(package)_preprocess_cmds
|
||||
patch -p1 < $($(package)_patch_dir)/python3.patch
|
||||
patch -p1 < $($(package)_patch_dir)/python3.patch
|
||||
endef
|
||||
|
||||
define $(package)_build_cmds
|
||||
|
||||
@@ -47,7 +47,6 @@ $(package)_config_opts_linux=-fPIC -Wa,--noexecstack
|
||||
$(package)_config_opts_x86_64_linux=linux-x86_64
|
||||
$(package)_config_opts_i686_linux=linux-generic32
|
||||
$(package)_config_opts_arm_linux=linux-generic32
|
||||
$(package)_config_opts_armv7l_linux=linux-generic32
|
||||
$(package)_config_opts_aarch64_linux=linux-generic64
|
||||
$(package)_config_opts_mipsel_linux=linux-generic32
|
||||
$(package)_config_opts_mips_linux=linux-generic32
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
package=zeromq
|
||||
$(package)_version=4.2.2
|
||||
$(package)_download_path=https://github.com/zeromq/libzmq/releases/download/v$($(package)_version)/
|
||||
$(package)_version=4.1.5
|
||||
$(package)_download_path=https://github.com/zeromq/zeromq4-1/releases/download/v$($(package)_version)/
|
||||
$(package)_file_name=$(package)-$($(package)_version).tar.gz
|
||||
$(package)_sha256_hash=5b23f4ca9ef545d5bd3af55d305765e3ee06b986263b31967435d285a3e6df6b
|
||||
$(package)_patches=0001-fix-build-with-older-mingw64.patch
|
||||
$(package)_sha256_hash=04aac57f081ffa3a2ee5ed04887be9e205df3a7ddade0027460b8042432bdbcf
|
||||
$(package)_patches=9114d3957725acd34aa8b8d011585812f3369411.patch 9e6745c12e0b100cd38acecc16ce7db02905e27c.patch
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts=--without-docs --disable-shared --without-libsodium --disable-curve --disable-curve-keygen --disable-perf
|
||||
$(package)_config_opts=--without-documentation --disable-shared --without-libsodium --disable-curve
|
||||
$(package)_config_opts_linux=--with-pic
|
||||
$(package)_cxxflags=-std=c++11
|
||||
endef
|
||||
|
||||
define $(package)_preprocess_cmds
|
||||
patch -p1 < $($(package)_patch_dir)/0001-fix-build-with-older-mingw64.patch && \
|
||||
patch -p1 < $($(package)_patch_dir)/9114d3957725acd34aa8b8d011585812f3369411.patch && \
|
||||
patch -p1 < $($(package)_patch_dir)/9e6745c12e0b100cd38acecc16ce7db02905e27c.patch && \
|
||||
./autogen.sh
|
||||
endef
|
||||
|
||||
@@ -21,7 +22,7 @@ define $(package)_config_cmds
|
||||
endef
|
||||
|
||||
define $(package)_build_cmds
|
||||
$(MAKE) src/libzmq.la
|
||||
$(MAKE) libzmq.la
|
||||
endef
|
||||
|
||||
define $(package)_stage_cmds
|
||||
@@ -29,6 +30,5 @@ define $(package)_stage_cmds
|
||||
endef
|
||||
|
||||
define $(package)_postprocess_cmds
|
||||
sed -i.old "s/ -lstdc++//" lib/pkgconfig/libzmq.pc && \
|
||||
rm -rf bin share
|
||||
endef
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
diff -dur a/mac_alias/alias.py b/mac_alias/alias.py
|
||||
--- a/mac_alias/alias.py
|
||||
+++ b/mac_alias/alias.py
|
||||
@@ -258,10 +258,10 @@
|
||||
--- a/mac_alias/alias.py 2015-10-19 12:12:48.000000000 +0200
|
||||
+++ b/mac_alias/alias.py 2016-04-03 12:13:12.037159417 +0200
|
||||
@@ -243,10 +243,10 @@
|
||||
alias = Alias()
|
||||
alias.appinfo = appinfo
|
||||
|
||||
@@ -14,7 +14,7 @@ diff -dur a/mac_alias/alias.py b/mac_alias/alias.py
|
||||
folder_cnid, cnid,
|
||||
crdate, creator_code, type_code)
|
||||
alias.target.levels_from = levels_from
|
||||
@@ -276,9 +276,9 @@
|
||||
@@ -261,9 +261,9 @@
|
||||
b.read(1)
|
||||
|
||||
if tag == TAG_CARBON_FOLDER_NAME:
|
||||
@@ -26,7 +26,7 @@ diff -dur a/mac_alias/alias.py b/mac_alias/alias.py
|
||||
value)
|
||||
elif tag == TAG_CARBON_PATH:
|
||||
alias.target.carbon_path = value
|
||||
@@ -313,9 +313,9 @@
|
||||
@@ -298,9 +298,9 @@
|
||||
alias.target.creation_date \
|
||||
= mac_epoch + datetime.timedelta(seconds=seconds)
|
||||
elif tag == TAG_POSIX_PATH:
|
||||
@@ -38,7 +38,23 @@ diff -dur a/mac_alias/alias.py b/mac_alias/alias.py
|
||||
elif tag == TAG_RECURSIVE_ALIAS_OF_DISK_IMAGE:
|
||||
alias.volume.disk_image_alias = Alias.from_bytes(value)
|
||||
elif tag == TAG_USER_HOME_LENGTH_PREFIX:
|
||||
@@ -467,12 +467,12 @@
|
||||
@@ -422,13 +422,13 @@
|
||||
# (so doing so is ridiculous, and nothing could rely on it).
|
||||
b.write(struct.pack(b'>h28pI2shI64pII4s4shhI2s10s',
|
||||
self.target.kind,
|
||||
- carbon_volname, voldate,
|
||||
+ carbon_volname, int(voldate),
|
||||
self.volume.fs_type,
|
||||
self.volume.disk_type,
|
||||
self.target.folder_cnid,
|
||||
carbon_filename,
|
||||
self.target.cnid,
|
||||
- crdate,
|
||||
+ int(crdate),
|
||||
self.target.creator_code,
|
||||
self.target.type_code,
|
||||
self.target.levels_from,
|
||||
@@ -449,12 +449,12 @@
|
||||
|
||||
b.write(struct.pack(b'>hhQhhQ',
|
||||
TAG_HIGH_RES_VOLUME_CREATION_DATE,
|
||||
|
||||
@@ -66,5 +66,5 @@ index cd73148..3f8429e 100644
|
||||
}
|
||||
|
||||
Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum)
|
||||
--
|
||||
--
|
||||
2.7.4
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
From 1a159c128c69a42d90819375c06a39994f3fbfc1 Mon Sep 17 00:00:00 2001
|
||||
From: Cory Fields <cory-nospam-@coryfields.com>
|
||||
Date: Tue, 28 Nov 2017 20:33:25 -0500
|
||||
Subject: [PATCH] fix build with older mingw64
|
||||
|
||||
---
|
||||
src/windows.hpp | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/src/windows.hpp b/src/windows.hpp
|
||||
index 99e889d..e69038e 100644
|
||||
--- a/src/windows.hpp
|
||||
+++ b/src/windows.hpp
|
||||
@@ -55,6 +55,13 @@
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include <mswsock.h>
|
||||
+
|
||||
+#if defined __MINGW64_VERSION_MAJOR && __MINGW64_VERSION_MAJOR < 4
|
||||
+// Workaround for mingw-w64 < v4.0 which did not include ws2ipdef.h in iphlpapi.h.
|
||||
+// Fixed in mingw-w64 by 9bd8fe9148924840d315b4c915dd099955ea89d1.
|
||||
+#include <ws2def.h>
|
||||
+#include <ws2ipdef.h>
|
||||
+#endif
|
||||
#include <iphlpapi.h>
|
||||
|
||||
#if !defined __MINGW32__
|
||||
--
|
||||
2.7.4
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
From 9114d3957725acd34aa8b8d011585812f3369411 Mon Sep 17 00:00:00 2001
|
||||
From: Jeroen Ooms <jeroenooms@gmail.com>
|
||||
Date: Tue, 20 Oct 2015 13:10:38 +0200
|
||||
Subject: [PATCH] enable static libraries on mingw
|
||||
|
||||
---
|
||||
configure.ac | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 393505b..e92131a 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -265,7 +265,7 @@ case "${host_os}" in
|
||||
libzmq_dso_visibility="no"
|
||||
|
||||
if test "x$enable_static" = "xyes"; then
|
||||
- AC_MSG_ERROR([Building static libraries is not supported under MinGW32])
|
||||
+ CPPFLAGS="-DZMQ_STATIC"
|
||||
fi
|
||||
|
||||
# Set FD_SETSIZE to 1024
|
||||
@@ -0,0 +1,22 @@
|
||||
From 9e6745c12e0b100cd38acecc16ce7db02905e27c Mon Sep 17 00:00:00 2001
|
||||
From: David Millard <dmillard10@gmail.com>
|
||||
Date: Tue, 10 May 2016 13:53:53 -0700
|
||||
Subject: [PATCH] Fix autotools for static MinGW builds
|
||||
|
||||
---
|
||||
configure.ac | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 5a0fa14..def6ea7 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -259,7 +259,7 @@ case "${host_os}" in
|
||||
libzmq_dso_visibility="no"
|
||||
|
||||
if test "x$enable_static" = "xyes"; then
|
||||
- CPPFLAGS="-DZMQ_STATIC"
|
||||
+ CPPFLAGS="-DZMQ_STATIC $CPPFLAGS"
|
||||
fi
|
||||
|
||||
# Set FD_SETSIZE to 1024
|
||||
@@ -37,7 +37,6 @@ Building
|
||||
---------------------
|
||||
The following are developer notes on how to build Bitcoin on your native platform. They are not complete guides, but include notes on the necessary libraries, compile flags, etc.
|
||||
|
||||
- [Dependencies](dependencies.md)
|
||||
- [OS X Build Notes](build-osx.md)
|
||||
- [Unix Build Notes](build-unix.md)
|
||||
- [Windows Build Notes](build-windows.md)
|
||||
|
||||
@@ -3,20 +3,19 @@ Unauthenticated REST Interface
|
||||
|
||||
The REST API can be enabled with the `-rest` option.
|
||||
|
||||
The interface runs on the same port as the JSON-RPC interface, by default port 8332 for mainnet, port 18332 for testnet,
|
||||
and port 18443 for regtest.
|
||||
The interface runs on the same port as the JSON-RPC interface, by default port 8332 for mainnet and port 18332 for testnet.
|
||||
|
||||
Supported API
|
||||
-------------
|
||||
|
||||
#### Transactions
|
||||
####Transactions
|
||||
`GET /rest/tx/<TX-HASH>.<bin|hex|json>`
|
||||
|
||||
Given a transaction hash: returns a transaction in binary, hex-encoded binary, or JSON formats.
|
||||
|
||||
For full TX query capability, one must enable the transaction index via "txindex=1" command line / configuration option.
|
||||
|
||||
#### Blocks
|
||||
####Blocks
|
||||
`GET /rest/block/<BLOCK-HASH>.<bin|hex|json>`
|
||||
`GET /rest/block/notxdetails/<BLOCK-HASH>.<bin|hex|json>`
|
||||
|
||||
@@ -26,12 +25,12 @@ The HTTP request and response are both handled entirely in-memory, thus making m
|
||||
|
||||
With the /notxdetails/ option JSON response will only contain the transaction hash instead of the complete transaction details. The option only affects the JSON response.
|
||||
|
||||
#### Blockheaders
|
||||
####Blockheaders
|
||||
`GET /rest/headers/<COUNT>/<BLOCK-HASH>.<bin|hex|json>`
|
||||
|
||||
Given a block hash: returns <COUNT> amount of blockheaders in upward direction.
|
||||
|
||||
#### Chaininfos
|
||||
####Chaininfos
|
||||
`GET /rest/chaininfo.json`
|
||||
|
||||
Returns various state info regarding block chain processing.
|
||||
@@ -49,7 +48,7 @@ Only supports JSON as output format.
|
||||
* softforks : (array) status of softforks in progress
|
||||
* bip9_softforks : (object) status of BIP9 softforks in progress
|
||||
|
||||
#### Query UTXO set
|
||||
####Query UTXO set
|
||||
`GET /rest/getutxos/<checkmempool>/<txid>-<n>/<txid>-<n>/.../<txid>-<n>.<bin|hex|json>`
|
||||
|
||||
The getutxo command allows querying of the UTXO set given a set of outpoints.
|
||||
@@ -82,7 +81,7 @@ $ curl localhost:18332/rest/getutxos/checkmempool/b2cdfd7b89def827ff8af7cd9bff76
|
||||
}
|
||||
```
|
||||
|
||||
#### Memory pool
|
||||
####Memory pool
|
||||
`GET /rest/mempool/info.json`
|
||||
|
||||
Returns various information about the TX mempool.
|
||||
|
||||
@@ -4,49 +4,24 @@ Benchmarking
|
||||
Bitcoin Core has an internal benchmarking framework, with benchmarks
|
||||
for cryptographic algorithms such as SHA1, SHA256, SHA512 and RIPEMD160. As well as the rolling bloom filter.
|
||||
|
||||
Running
|
||||
---------------------
|
||||
After compiling bitcoin-core, the benchmarks can be run with:
|
||||
|
||||
src/bench/bench_bitcoin
|
||||
`src/bench/bench_bitcoin`
|
||||
|
||||
The output will look similar to:
|
||||
```
|
||||
# Benchmark, evals, iterations, total, min, max, median
|
||||
Base58CheckEncode, 5, 320000, 120.772, 7.49351e-05, 7.59374e-05, 7.54759e-05
|
||||
Base58Decode, 5, 800000, 122.833, 3.0467e-05, 3.11732e-05, 3.06304e-05
|
||||
Base58Encode, 5, 470000, 137.094, 5.81061e-05, 5.85109e-05, 5.84462e-05
|
||||
BenchLockedPool, 5, 530, 34.2023, 0.0128247, 0.0129613, 0.0129026
|
||||
CCheckQueueSpeedPrevectorJob, 5, 1400, 26.1762, 0.00365048, 0.00388629, 0.00367108
|
||||
CCoinsCaching, 5, 170000, 48.1074, 5.60229e-05, 5.72316e-05, 5.66214e-05
|
||||
CoinSelection, 5, 650, 34.6426, 0.0105801, 0.0107699, 0.010664
|
||||
DeserializeAndCheckBlockTest, 5, 160, 39.2084, 0.0483662, 0.0494199, 0.0490138
|
||||
DeserializeBlockTest, 5, 130, 23.8129, 0.0357731, 0.0373763, 0.0365858
|
||||
FastRandom_1bit, 5, 440000000, 38.1609, 1.72974e-08, 1.73882e-08, 1.73478e-08
|
||||
FastRandom_32bit, 5, 110000000, 72.8237, 1.29992e-07, 1.37014e-07, 1.30115e-07
|
||||
MempoolEviction, 5, 41000, 89.8883, 0.000432748, 0.000446857, 0.000438483
|
||||
PrevectorClear, 5, 5600, 47.9229, 0.00169952, 0.0017455, 0.00170315
|
||||
PrevectorDestructor, 5, 5700, 44.5498, 0.0015561, 0.00156977, 0.00156469
|
||||
RIPEMD160, 5, 440, 135.988, 0.0615496, 0.062268, 0.0617779
|
||||
RollingBloom, 5, 1500000, 36.5109, 4.80961e-06, 4.97463e-06, 4.85811e-06
|
||||
SHA1, 5, 570, 51.808, 0.018065, 0.0182623, 0.0181865
|
||||
SHA256, 5, 340, 8.31841, 0.00483231, 0.00499803, 0.00485486
|
||||
SHA256_32b, 5, 4700000, 10.469, 4.43441e-07, 4.47611e-07, 4.45223e-07
|
||||
SHA512, 5, 330, 33.3408, 0.02017, 0.0202554, 0.0201921
|
||||
SipHash_32b, 5, 40000000, 38.7088, 1.91103e-07, 1.96998e-07, 1.93792e-07
|
||||
Sleep100ms, 5, 10, 5.01062, 0.100131, 0.100368, 0.100147
|
||||
Trig, 5, 12000000, 5.95494, 9.78115e-08, 1.04354e-07, 9.80682e-08
|
||||
VerifyScriptBench, 5, 6300, 9.02493, 0.000285566, 0.000288433, 0.000286175
|
||||
#Benchmark,count,min,max,average
|
||||
RIPEMD160,448,0.001245033173334,0.002638196945190,0.002461894814457
|
||||
RollingBloom-refresh,1,0.000635000000000,0.000635000000000,0.000635000000000
|
||||
RollingBloom-refresh,1,0.000108000000000,0.000108000000000,0.000108000000000
|
||||
RollingBloom-refresh,1,0.000107000000000,0.000107000000000,0.000107000000000
|
||||
RollingBloom-refresh,1,0.000204000000000,0.000204000000000,0.000204000000000
|
||||
SHA1,640,0.000909024336207,0.001938136418660,0.001843086257577
|
||||
SHA256,256,0.002209486499909,0.008500099182129,0.004300644621253
|
||||
SHA512,384,0.001319904176016,0.002813005447388,0.002615700786312
|
||||
Sleep100ms,10,0.205592155456543,0.210056066513062,0.104166316986084
|
||||
Trig,67108864,0.000000014997003,0.000000015448112,0.000000015188842
|
||||
```
|
||||
|
||||
Help
|
||||
---------------------
|
||||
`-?` will print a list of options and exit:
|
||||
|
||||
src/bench/bench_bitcoin -?
|
||||
|
||||
Notes
|
||||
---------------------
|
||||
More benchmarks are needed for, in no particular order:
|
||||
- Script Validation
|
||||
- CCoinDBView caching
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
BIPs that are implemented by Bitcoin Core (up-to-date up to **v0.16.0**):
|
||||
BIPs that are implemented by Bitcoin Core (up-to-date up to **v0.13.0**):
|
||||
|
||||
* [`BIP 9`](https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki): The changes allowing multiple soft-forks to be deployed in parallel have been implemented since **v0.12.1** ([PR #7575](https://github.com/bitcoin/bitcoin/pull/7575))
|
||||
* [`BIP 11`](https://github.com/bitcoin/bips/blob/master/bip-0011.mediawiki): Multisig outputs are standard since **v0.6.0** ([PR #669](https://github.com/bitcoin/bitcoin/pull/669)).
|
||||
@@ -33,6 +33,3 @@ BIPs that are implemented by Bitcoin Core (up-to-date up to **v0.16.0**):
|
||||
* [`BIP 145`](https://github.com/bitcoin/bips/blob/master/bip-0145.mediawiki): getblocktemplate updates for Segregated Witness as of **v0.13.0** ([PR 8149](https://github.com/bitcoin/bitcoin/pull/8149)).
|
||||
* [`BIP 147`](https://github.com/bitcoin/bips/blob/master/bip-0147.mediawiki): NULLDUMMY softfork as of **v0.13.1** ([PR 8636](https://github.com/bitcoin/bitcoin/pull/8636) and [PR 8937](https://github.com/bitcoin/bitcoin/pull/8937)).
|
||||
* [`BIP 152`](https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki): Compact block transfer and related optimizations are used as of **v0.13.0** ([PR 8068](https://github.com/bitcoin/bitcoin/pull/8068)).
|
||||
* [`BIP 159`](https://github.com/bitcoin/bips/blob/master/bip-0159.mediawiki): NODE_NETWORK_LIMITED service bit [signaling only] is supported as of **v0.16.0** ([PR 11740](https://github.com/bitcoin/bitcoin/pull/11740)).
|
||||
* [`BIP 173`](https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki): Bech32 addresses for native Segregated Witness outputs are supported as of **v0.16.0** ([PR 11167](https://github.com/bitcoin/bitcoin/pull/11167)).
|
||||
* [`BIP 176`](https://github.com/bitcoin/bips/blob/master/bip-0176.mediawiki): Bits Denomination [QT only] is supported as of **v0.16.0** ([PR 12035](https://github.com/bitcoin/bitcoin/pull/12035)).
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
NetBSD build guide
|
||||
======================
|
||||
(updated for NetBSD 7.0)
|
||||
|
||||
This guide describes how to build bitcoind and command-line utilities on NetBSD.
|
||||
|
||||
This guide does not contain instructions for building the GUI.
|
||||
|
||||
Preparation
|
||||
-------------
|
||||
|
||||
You will need the following modules, which can be installed via pkgsrc or pkgin:
|
||||
|
||||
```
|
||||
autoconf
|
||||
automake
|
||||
boost
|
||||
db4
|
||||
git
|
||||
gmake
|
||||
libevent
|
||||
libtool
|
||||
python27
|
||||
```
|
||||
|
||||
Download the source code:
|
||||
```
|
||||
git clone https://github.com/bitcoin/bitcoin
|
||||
```
|
||||
|
||||
See [dependencies.md](dependencies.md) for a complete overview.
|
||||
|
||||
### Building Bitcoin Core
|
||||
|
||||
**Important**: Use `gmake` (the non-GNU `make` will exit with an error).
|
||||
|
||||
With wallet:
|
||||
```
|
||||
./autogen.sh
|
||||
./configure CPPFLAGS="-I/usr/pkg/include" LDFLAGS="-L/usr/pkg/lib" BOOST_CPPFLAGS="-I/usr/pkg/include" BOOST_LDFLAGS="-L/usr/pkg/lib"
|
||||
gmake
|
||||
```
|
||||
|
||||
Without wallet:
|
||||
```
|
||||
./autogen.sh
|
||||
./configure --disable-wallet CPPFLAGS="-I/usr/pkg/include" LDFLAGS="-L/usr/pkg/lib" BOOST_CPPFLAGS="-I/usr/pkg/include" BOOST_LDFLAGS="-L/usr/pkg/lib"
|
||||
gmake
|
||||
```
|
||||
@@ -23,31 +23,58 @@ git clone https://github.com/bitcoin/bitcoin.git
|
||||
|
||||
See [dependencies.md](dependencies.md) for a complete overview.
|
||||
|
||||
**Important**: From OpenBSD 6.2 onwards a C++11-supporting clang compiler is
|
||||
part of the base image, and while building it is necessary to make sure that this
|
||||
compiler is used and not ancient g++ 4.2.1. This is done by appending
|
||||
`CC=cc CXX=c++` to configuration commands. Mixing different compilers
|
||||
within the same executable will result in linker errors.
|
||||
GCC
|
||||
-------
|
||||
|
||||
The default C++ compiler that comes with OpenBSD 6.2 is g++ 4.2.1. This version is old (from 2007), and is not able to compile the current version of Bitcoin Core because it has no C++11 support. We'll install a newer version of GCC:
|
||||
|
||||
```bash
|
||||
pkg_add g++
|
||||
```
|
||||
|
||||
This compiler will not overwrite the system compiler, it will be installed as `egcc` and `eg++` in `/usr/local/bin`.
|
||||
|
||||
### Building BerkeleyDB
|
||||
|
||||
BerkeleyDB is only necessary for the wallet functionality. To skip this, pass
|
||||
`--disable-wallet` to `./configure` and skip to the next section.
|
||||
BerkeleyDB is only necessary for the wallet functionality. To skip this, pass `--disable-wallet` to `./configure`.
|
||||
|
||||
It is recommended to use Berkeley DB 4.8. You cannot use the BerkeleyDB library
|
||||
from ports, for the same reason as boost above (g++/libstd++ incompatibility).
|
||||
If you have to build it yourself, you can use [the installation script included
|
||||
in contrib/](/contrib/install_db4.sh) like so
|
||||
See "Berkeley DB" in [build-unix.md](build-unix.md#berkeley-db) for instructions on how to build BerkeleyDB 4.8.
|
||||
You cannot use the BerkeleyDB library from ports, for the same reason as boost above (g++/libstd++ incompatibility).
|
||||
|
||||
```shell
|
||||
./contrib/install_db4.sh `pwd` CC=cc CXX=c++
|
||||
```bash
|
||||
# Pick some path to install BDB to, here we create a directory within the bitcoin directory
|
||||
BITCOIN_ROOT=$(pwd)
|
||||
BDB_PREFIX="${BITCOIN_ROOT}/db4"
|
||||
mkdir -p $BDB_PREFIX
|
||||
|
||||
# Fetch the source and verify that it is not tampered with
|
||||
curl -o db-4.8.30.NC.tar.gz 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'
|
||||
echo '12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz' | sha256 -c
|
||||
# MUST output: (SHA256) db-4.8.30.NC.tar.gz: OK
|
||||
tar -xzf db-4.8.30.NC.tar.gz
|
||||
|
||||
# Build the library and install to specified prefix
|
||||
cd db-4.8.30.NC/build_unix/
|
||||
# Note: Do a static build so that it can be embedded into the executable, instead of having to find a .so at runtime
|
||||
../dist/configure --enable-cxx --disable-shared --with-pic --prefix=$BDB_PREFIX CC=egcc CXX=eg++ CPP=ecpp
|
||||
make install # do NOT use -jX, this is broken
|
||||
```
|
||||
|
||||
from the root of the repository. Then set `BDB_PREFIX` for the next section:
|
||||
### Resource limits
|
||||
|
||||
```shell
|
||||
export BDB_PREFIX="$PWD/db4"
|
||||
```
|
||||
The standard ulimit restrictions in OpenBSD are very strict:
|
||||
|
||||
data(kbytes) 1572864
|
||||
|
||||
This, unfortunately, may no longer be enough to compile some `.cpp` files in the project,
|
||||
at least with GCC 4.9.4 (see issue [#6658](https://github.com/bitcoin/bitcoin/issues/6658)).
|
||||
If your user is in the `staff` group the limit can be raised with:
|
||||
|
||||
ulimit -d 3000000
|
||||
|
||||
The change will only affect the current shell and processes spawned by it. To
|
||||
make the change system-wide, change `datasize-cur` and `datasize-max` in
|
||||
`/etc/login.conf`, and reboot.
|
||||
|
||||
### Building Bitcoin Core
|
||||
|
||||
@@ -63,13 +90,13 @@ Make sure `BDB_PREFIX` is set to the appropriate path from the above steps.
|
||||
|
||||
To configure with wallet:
|
||||
```bash
|
||||
./configure --with-gui=no CC=cc CXX=c++ \
|
||||
./configure --with-gui=no CC=egcc CXX=eg++ CPP=ecpp \
|
||||
BDB_LIBS="-L${BDB_PREFIX}/lib -ldb_cxx-4.8" BDB_CFLAGS="-I${BDB_PREFIX}/include"
|
||||
```
|
||||
|
||||
To configure without wallet:
|
||||
```bash
|
||||
./configure --disable-wallet --with-gui=no CC=cc CXX=c++
|
||||
./configure --disable-wallet --with-gui=no CC=egcc CXX=eg++ CPP=ecpp
|
||||
```
|
||||
|
||||
Build and run the tests:
|
||||
@@ -78,23 +105,13 @@ gmake # use -jX here for parallelism
|
||||
gmake check
|
||||
```
|
||||
|
||||
Resource limits
|
||||
-------------------
|
||||
Clang
|
||||
------------------------------
|
||||
|
||||
If the build runs into out-of-memory errors, the instructions in this section
|
||||
might help.
|
||||
|
||||
The standard ulimit restrictions in OpenBSD are very strict:
|
||||
|
||||
data(kbytes) 1572864
|
||||
|
||||
This, unfortunately, in some cases not enough to compile some `.cpp` files in the project,
|
||||
(see issue [#6658](https://github.com/bitcoin/bitcoin/issues/6658)).
|
||||
If your user is in the `staff` group the limit can be raised with:
|
||||
|
||||
ulimit -d 3000000
|
||||
|
||||
The change will only affect the current shell and processes spawned by it. To
|
||||
make the change system-wide, change `datasize-cur` and `datasize-max` in
|
||||
`/etc/login.conf`, and reboot.
|
||||
```bash
|
||||
pkg_add llvm
|
||||
|
||||
./configure --disable-wallet --with-gui=no CC=clang CXX=clang++
|
||||
gmake # use -jX here for parallelism
|
||||
gmake check
|
||||
```
|
||||
|
||||
@@ -16,9 +16,7 @@ Then install [Homebrew](https://brew.sh).
|
||||
Dependencies
|
||||
----------------------
|
||||
|
||||
brew install automake berkeley-db4 libtool boost miniupnpc openssl pkg-config protobuf python3 qt libevent
|
||||
|
||||
See [dependencies.md](dependencies.md) for a complete overview.
|
||||
brew install automake berkeley-db4 libtool boost --c++11 miniupnpc openssl pkg-config protobuf qt libevent
|
||||
|
||||
If you want to build the disk image with `make deploy` (.dmg / optional), you need RSVG
|
||||
|
||||
@@ -26,20 +24,6 @@ If you want to build the disk image with `make deploy` (.dmg / optional), you ne
|
||||
|
||||
NOTE: Building with Qt4 is still supported, however, could result in a broken UI. Building with Qt5 is recommended.
|
||||
|
||||
Berkeley DB
|
||||
-----------
|
||||
It is recommended to use Berkeley DB 4.8. If you have to build it yourself,
|
||||
you can use [the installation script included in contrib/](/contrib/install_db4.sh)
|
||||
like so
|
||||
|
||||
```shell
|
||||
./contrib/install_db4.sh .
|
||||
```
|
||||
|
||||
from the root of the repository.
|
||||
|
||||
**Note**: You only need Berkeley DB if the wallet is enabled (see the section *Disable-Wallet mode* below).
|
||||
|
||||
Build Bitcoin Core
|
||||
------------------------
|
||||
|
||||
@@ -110,6 +94,6 @@ Uncheck everything except Qt Creator during the installation process.
|
||||
Notes
|
||||
-----
|
||||
|
||||
* Tested on OS X 10.8 through 10.13 on 64-bit Intel processors only.
|
||||
* Tested on OS X 10.8 through 10.12 on 64-bit Intel processors only.
|
||||
|
||||
* Building with downloaded Qt binaries is not officially supported. See the notes in [#7714](https://github.com/bitcoin/bitcoin/issues/7714)
|
||||
|
||||
@@ -49,7 +49,7 @@ Optional dependencies:
|
||||
univalue | Utility | JSON parsing and encoding (bundled version will be used unless --with-system-univalue passed to configure)
|
||||
libzmq3 | ZMQ notification | Optional, allows generating ZMQ notifications (requires ZMQ version >= 4.x)
|
||||
|
||||
For the versions used, see [dependencies.md](dependencies.md)
|
||||
For the versions used in the release, see [release-process.md](release-process.md) under *Fetch and build inputs*.
|
||||
|
||||
Memory Requirements
|
||||
--------------------
|
||||
@@ -65,7 +65,7 @@ Dependency Build Instructions: Ubuntu & Debian
|
||||
----------------------------------------------
|
||||
Build requirements:
|
||||
|
||||
sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils python3
|
||||
sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils
|
||||
|
||||
Options when installing required Boost library files:
|
||||
|
||||
@@ -131,7 +131,7 @@ Dependency Build Instructions: Fedora
|
||||
-------------------------------------
|
||||
Build requirements:
|
||||
|
||||
sudo dnf install gcc-c++ libtool make autoconf automake openssl-devel libevent-devel boost-devel libdb4-devel libdb4-cxx-devel python3
|
||||
sudo dnf install gcc-c++ libtool make autoconf automake openssl-devel libevent-devel boost-devel libdb4-devel libdb4-cxx-devel
|
||||
|
||||
Optional:
|
||||
|
||||
@@ -165,16 +165,33 @@ turned off by default. See the configure options for upnp behavior desired:
|
||||
|
||||
Berkeley DB
|
||||
-----------
|
||||
It is recommended to use Berkeley DB 4.8. If you have to build it yourself,
|
||||
you can use [the installation script included in contrib/](/contrib/install_db4.sh)
|
||||
like so
|
||||
It is recommended to use Berkeley DB 4.8. If you have to build it yourself:
|
||||
|
||||
```shell
|
||||
./contrib/install_db4.sh `pwd`
|
||||
```bash
|
||||
BITCOIN_ROOT=$(pwd)
|
||||
|
||||
# Pick some path to install BDB to, here we create a directory within the bitcoin directory
|
||||
BDB_PREFIX="${BITCOIN_ROOT}/db4"
|
||||
mkdir -p $BDB_PREFIX
|
||||
|
||||
# Fetch the source and verify that it is not tampered with
|
||||
wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'
|
||||
echo '12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz' | sha256sum -c
|
||||
# -> db-4.8.30.NC.tar.gz: OK
|
||||
tar -xzvf db-4.8.30.NC.tar.gz
|
||||
|
||||
# Build the library and install to our prefix
|
||||
cd db-4.8.30.NC/build_unix/
|
||||
# Note: Do a static build so that it can be embedded into the executable, instead of having to find a .so at runtime
|
||||
../dist/configure --enable-cxx --disable-shared --with-pic --prefix=$BDB_PREFIX
|
||||
make install
|
||||
|
||||
# Configure Bitcoin Core to use our own-built instance of BDB
|
||||
cd $BITCOIN_ROOT
|
||||
./autogen.sh
|
||||
./configure LDFLAGS="-L${BDB_PREFIX}/lib/" CPPFLAGS="-I${BDB_PREFIX}/include/" # (other args...)
|
||||
```
|
||||
|
||||
from the root of the repository.
|
||||
|
||||
**Note**: You only need Berkeley DB if the wallet is enabled (see the section *Disable-Wallet mode* below).
|
||||
|
||||
Boost
|
||||
@@ -312,13 +329,17 @@ You need to use GNU make (`gmake`) instead of `make`.
|
||||
|
||||
For the wallet (optional):
|
||||
|
||||
./contrib/install_db4.sh `pwd`
|
||||
setenv BDB_PREFIX $PWD/db4
|
||||
pkg install db5
|
||||
|
||||
This will give a warning "configure: WARNING: Found Berkeley DB other
|
||||
than 4.8; wallets opened by this build will not be portable!", but as FreeBSD never
|
||||
had a binary release, this may not matter. If backwards compatibility
|
||||
with 4.8-built Bitcoin Core is needed follow the steps under "Berkeley DB" above.
|
||||
|
||||
Then build using:
|
||||
|
||||
./autogen.sh
|
||||
./configure BDB_CFLAGS="-I${BDB_PREFIX}/include" BDB_LIBS="-L${BDB_PREFIX}/lib -ldb_cxx"
|
||||
./configure --with-incompatible-bdb BDB_CFLAGS="-I/usr/local/include/db5" BDB_LIBS="-L/usr/local/lib -ldb_cxx-5"
|
||||
gmake
|
||||
|
||||
*Note on debugging*: The version of `gdb` installed by default is [ancient and considered harmful](https://wiki.freebsd.org/GdbRetirement).
|
||||
|
||||
@@ -3,92 +3,81 @@ WINDOWS BUILD NOTES
|
||||
|
||||
Below are some notes on how to build Bitcoin Core for Windows.
|
||||
|
||||
The options known to work for building Bitcoin Core on Windows are:
|
||||
Most developers use cross-compilation from Ubuntu to build executables for
|
||||
Windows. Cross-compilation is also used to build the release binaries.
|
||||
|
||||
* On Linux using the [Mingw-w64](https://mingw-w64.org/doku.php) cross compiler tool chain. Ubuntu Bionic 18.04 is required
|
||||
and is the platform used to build the Bitcoin Core Windows release binaries.
|
||||
* On Windows using [Windows
|
||||
Subsystem for Linux (WSL)](https://msdn.microsoft.com/commandline/wsl/about) and the Mingw-w64 cross compiler tool chain.
|
||||
Currently only building on Ubuntu Trusty 14.04 or Ubuntu Zesty 17.04 or later is supported.
|
||||
Building on Ubuntu Xenial 16.04 is known to be broken, see extensive discussion in issue [8732](https://github.com/bitcoin/bitcoin/issues/8732).
|
||||
While it may be possible to do so with work arounds, it's potentially dangerous and not recommended.
|
||||
|
||||
Other options which may work but which have not been extensively tested are (please contribute instructions):
|
||||
While there are potentially a number of ways to build on Windows (for example using msys / mingw-w64),
|
||||
using the Windows Subsystem For Linux is the most straightforward. If you are building with
|
||||
another method, please contribute the instructions here for others who are running versions
|
||||
of Windows that are not compatible with the Windows Subsystem for Linux.
|
||||
|
||||
* On Windows using a POSIX compatibility layer application such as [cygwin](http://www.cygwin.com/) or [msys2](http://www.msys2.org/).
|
||||
* On Windows using a native compiler tool chain such as [Visual Studio](https://www.visualstudio.com).
|
||||
|
||||
Installing Windows Subsystem for Linux
|
||||
---------------------------------------
|
||||
Compiling with Windows Subsystem For Linux
|
||||
-------------------------------------------
|
||||
|
||||
With Windows 10, Microsoft has released a new feature named the [Windows
|
||||
Subsystem for Linux (WSL)](https://msdn.microsoft.com/commandline/wsl/about). This
|
||||
Subsystem for Linux](https://msdn.microsoft.com/commandline/wsl/about). This
|
||||
feature allows you to run a bash shell directly on Windows in an Ubuntu-based
|
||||
environment. Within this environment you can cross compile for Windows without
|
||||
the need for a separate Linux VM or server. Note that while WSL can be installed with
|
||||
other Linux variants, such as OpenSUSE, the following instructions have only been
|
||||
tested with Ubuntu.
|
||||
the need for a separate Linux VM or server.
|
||||
|
||||
This feature is not supported in versions of Windows prior to Windows 10 or on
|
||||
Windows Server SKUs. In addition, it is available [only for 64-bit versions of
|
||||
Windows](https://msdn.microsoft.com/en-us/commandline/wsl/install_guide).
|
||||
|
||||
Full instructions to install WSL are available on the above link.
|
||||
To install WSL on Windows 10 with Fall Creators Update installed (version >= 16215.0) do the following:
|
||||
To get the bash shell, you must first activate the feature in Windows.
|
||||
|
||||
1. Enable the Windows Subsystem for Linux feature
|
||||
1. Turn on Developer Mode
|
||||
* Open Settings -> Update and Security -> For developers
|
||||
* Select the Developer Mode radio button
|
||||
* Restart if necessary
|
||||
2. Enable the Windows Subsystem for Linux feature
|
||||
* From Start, search for "Turn Windows features on or off" (type 'turn')
|
||||
* Select Windows Subsystem for Linux
|
||||
* Select Windows Subsystem for Linux (beta)
|
||||
* Click OK
|
||||
* Restart if necessary
|
||||
2. Install Ubuntu
|
||||
* Open Microsoft Store and search for "Ubuntu 18.04" or use [this link](https://www.microsoft.com/store/productId/9N9TNGVNDL3Q)
|
||||
* Click Install
|
||||
3. Complete Installation
|
||||
* Open a cmd prompt and type "Ubuntu1804"
|
||||
* Open a cmd prompt and type "bash"
|
||||
* Accept the license
|
||||
* Create a new UNIX user account (this is a separate account from your Windows account)
|
||||
|
||||
After the bash shell is active, you can follow the instructions below, starting
|
||||
with the "Cross-compilation" section. Compiling the 64-bit version is
|
||||
recommended but it is possible to compile the 32-bit version.
|
||||
|
||||
Cross-compilation for Ubuntu and Windows Subsystem for Linux
|
||||
------------------------------------------------------------
|
||||
Cross-compilation
|
||||
-------------------
|
||||
|
||||
The steps below can be performed on Ubuntu (including in a VM) or WSL. The depends system
|
||||
These steps can be performed on, for example, an Ubuntu VM. The depends system
|
||||
will also work on other Linux distributions, however the commands for
|
||||
installing the toolchain will be different.
|
||||
|
||||
First, install the general dependencies:
|
||||
|
||||
sudo apt install build-essential libtool autotools-dev automake pkg-config bsdmainutils curl git
|
||||
sudo apt-get install build-essential libtool autotools-dev automake pkg-config bsdmainutils curl
|
||||
|
||||
A host toolchain (`build-essential`) is necessary because some dependency
|
||||
packages (such as `protobuf`) need to build host utilities that are used in the
|
||||
build process.
|
||||
|
||||
See also: [dependencies.md](dependencies.md).
|
||||
|
||||
If you're building on Ubuntu 17.04 or later, run these two commands, selecting the 'posix' variant for both,
|
||||
to work around issues with mingw-w64. See issue [8732](https://github.com/bitcoin/bitcoin/issues/8732) for more information.
|
||||
```
|
||||
sudo update-alternatives --config x86_64-w64-mingw32-g++
|
||||
sudo update-alternatives --config x86_64-w64-mingw32-gcc
|
||||
```
|
||||
|
||||
## Building for 64-bit Windows
|
||||
|
||||
The first step is to install the mingw-w64 cross-compilation tool chain.
|
||||
To build executables for Windows 64-bit, install the following dependencies:
|
||||
|
||||
sudo apt install g++-mingw-w64-x86-64
|
||||
sudo apt-get install g++-mingw-w64-x86-64 mingw-w64-x86-64-dev
|
||||
|
||||
Ubuntu Bionic 18.04 <sup>[1](#footnote1)</sup>:
|
||||
|
||||
sudo update-alternatives --config x86_64-w64-mingw32-g++ # Set the default mingw32 g++ compiler option to posix.
|
||||
|
||||
Once the tool chain is installed the build steps are common:
|
||||
|
||||
Note that for WSL the Bitcoin Core source path MUST be somewhere in the default mount file system, for
|
||||
example /usr/src/bitcoin, AND not under /mnt/d/. If this is not the case the dependency autoconf scripts will fail.
|
||||
This means you cannot use a directory that located directly on the host Windows file system to perform the build.
|
||||
|
||||
The next three steps are an example of how to acquire the source in an appropriate way.
|
||||
|
||||
cd /usr/src
|
||||
sudo git clone https://github.com/bitcoin/bitcoin.git
|
||||
sudo chmod -R a+rw bitcoin
|
||||
|
||||
Once the source code is ready the build steps are below.
|
||||
Then build using:
|
||||
|
||||
PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g') # strip out problematic Windows %PATH% imported var
|
||||
cd depends
|
||||
@@ -102,21 +91,7 @@ Once the source code is ready the build steps are below.
|
||||
|
||||
To build executables for Windows 32-bit, install the following dependencies:
|
||||
|
||||
sudo apt install g++-mingw-w64-i686 mingw-w64-i686-dev
|
||||
|
||||
For Ubuntu Bionic 18.04 and Windows Subsystem for Linux <sup>[1](#footnote1)</sup>:
|
||||
|
||||
sudo update-alternatives --config i686-w64-mingw32-g++ # Set the default mingw32 g++ compiler option to posix.
|
||||
|
||||
Note that for WSL the Bitcoin Core source path MUST be somewhere in the default mount file system, for
|
||||
example /usr/src/bitcoin, AND not under /mnt/d/. If this is not the case the dependency autoconf scripts will fail.
|
||||
This means you cannot use a directory that located directly on the host Windows file system to perform the build.
|
||||
|
||||
The next three steps are an example of how to acquire the source in an appropriate way.
|
||||
|
||||
cd /usr/src
|
||||
sudo git clone https://github.com/bitcoin/bitcoin.git
|
||||
sudo chmod -R a+rw bitcoin
|
||||
sudo apt-get install g++-mingw-w64-i686 mingw-w64-i686-dev
|
||||
|
||||
Then build using:
|
||||
|
||||
@@ -141,13 +116,3 @@ as they appear in the release `.zip` archive. This can be done in the following
|
||||
way. This will install to `c:\workspace\bitcoin`, for example:
|
||||
|
||||
make install DESTDIR=/mnt/c/workspace/bitcoin
|
||||
|
||||
Footnotes
|
||||
---------
|
||||
|
||||
<a name="footnote1">1</a>: Starting from Ubuntu Xenial 16.04 both the 32 and 64 bit Mingw-w64 packages install two different
|
||||
compiler options to allow a choice between either posix or win32 threads. The default option is win32 threads which is the more
|
||||
efficient since it will result in binary code that links directly with the Windows kernel32.lib. Unfortunately, the headers
|
||||
required to support win32 threads conflict with some of the classes in the C++11 standard library in particular std::mutex.
|
||||
It's not possible to build the bitcoin code using the win32 version of the Mingw-w64 cross compilers (at least not without
|
||||
modifying headers in the bitcoin source code).
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
Dependencies
|
||||
============
|
||||
|
||||
These are the dependencies currently used by Bitcoin Core. You can find instructions for installing them in the `build-*.md` file for your platform.
|
||||
|
||||
| Dependency | Version used | Minimum required | CVEs | Shared | [Bundled Qt library](https://doc.qt.io/qt-5/configure-options.html) |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| Berkeley DB | [4.8.30](http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html) | 4.8.x | No | | |
|
||||
| Boost | [1.64.0](http://www.boost.org/users/download/) | [1.47.0](https://github.com/bitcoin/bitcoin/pull/8920) | No | | |
|
||||
| ccache | [3.3.4](https://ccache.samba.org/download.html) | | No | | |
|
||||
| Clang | | [3.3+](http://llvm.org/releases/download.html) (C++11 support) | | | |
|
||||
| D-Bus | [1.10.18](https://cgit.freedesktop.org/dbus/dbus/tree/NEWS?h=dbus-1.10) | | No | Yes | |
|
||||
| Expat | [2.2.1](https://libexpat.github.io/) | | No | Yes | |
|
||||
| fontconfig | [2.12.1](https://www.freedesktop.org/software/fontconfig/release/) | | No | Yes | |
|
||||
| FreeType | [2.7.1](http://download.savannah.gnu.org/releases/freetype) | | No | | |
|
||||
| GCC | | [4.8+](https://gcc.gnu.org/) | | | |
|
||||
| HarfBuzz-NG | | | | | |
|
||||
| libevent | [2.1.8-stable](https://github.com/libevent/libevent/releases) | 2.0.22 | No | | |
|
||||
| libjpeg | | | | | [Yes](https://github.com/bitcoin/bitcoin/blob/master/depends/packages/qt.mk#L75) |
|
||||
| libpng | | | | | [Yes](https://github.com/bitcoin/bitcoin/blob/master/depends/packages/qt.mk#L74) |
|
||||
| MiniUPnPc | [2.0.20170509](http://miniupnp.free.fr/files) | | No | | |
|
||||
| OpenSSL | [1.0.1k](https://www.openssl.org/source) | | Yes | | |
|
||||
| PCRE | | | | | [Yes](https://github.com/bitcoin/bitcoin/blob/master/depends/packages/qt.mk#L76) |
|
||||
| protobuf | [2.6.3](https://github.com/google/protobuf/releases) | | No | | |
|
||||
| Python (tests) | | [3.4](https://www.python.org/downloads) | | | |
|
||||
| qrencode | [3.4.4](https://fukuchi.org/works/qrencode) | | No | | |
|
||||
| Qt | [5.7.1](https://download.qt.io/official_releases/qt/) | 4.7+ | No | | |
|
||||
| XCB | | | | | [Yes](https://github.com/bitcoin/bitcoin/blob/master/depends/packages/qt.mk#L94) (Linux only) |
|
||||
| xkbcommon | | | | | [Yes](https://github.com/bitcoin/bitcoin/blob/master/depends/packages/qt.mk#L93) (Linux only) |
|
||||
| ZeroMQ | [4.2.2](https://github.com/zeromq/libzmq/releases) | | No | | |
|
||||
| zlib | [1.2.11](http://zlib.net/) | | | | No |
|
||||
@@ -4,7 +4,7 @@ Developer Notes
|
||||
Various coding styles have been used during the history of the codebase,
|
||||
and the result is not very consistent. However, we're now trying to converge to
|
||||
a single style, which is specified below. When writing patches, favor the new
|
||||
style over attempting to mimic the surrounding style, except for move-only
|
||||
style over attempting to mimick the surrounding style, except for move-only
|
||||
commits.
|
||||
|
||||
Do not submit patches solely to modify the style of existing code.
|
||||
@@ -37,8 +37,6 @@ code.
|
||||
|
||||
- **Miscellaneous**
|
||||
- `++i` is preferred over `i++`.
|
||||
- `nullptr` is preferred over `NULL` or `(void*)0`.
|
||||
- `static_assert` is preferred over `assert` where possible. Generally; compile-time checking is preferred over run-time checking.
|
||||
|
||||
Block style example:
|
||||
```c++
|
||||
@@ -167,37 +165,6 @@ can be very difficult to track down. Compiling with -DDEBUG_LOCKORDER (configure
|
||||
CXXFLAGS="-DDEBUG_LOCKORDER -g") inserts run-time checks to keep track of which locks
|
||||
are held, and adds warnings to the debug.log file if inconsistencies are detected.
|
||||
|
||||
**Valgrind suppressions file**
|
||||
|
||||
Valgrind is a programming tool for memory debugging, memory leak detection, and
|
||||
profiling. The repo contains a Valgrind suppressions file
|
||||
([`valgrind.supp`](https://github.com/bitcoin/bitcoin/blob/master/contrib/valgrind.supp))
|
||||
which includes known Valgrind warnings in our dependencies that cannot be fixed
|
||||
in-tree. Example use:
|
||||
|
||||
```shell
|
||||
$ valgrind --suppressions=contrib/valgrind.supp src/test/test_bitcoin
|
||||
$ valgrind --suppressions=contrib/valgrind.supp --leak-check=full \
|
||||
--show-leak-kinds=all src/test/test_bitcoin --log_level=test_suite
|
||||
$ valgrind -v --leak-check=full src/bitcoind -printtoconsole
|
||||
```
|
||||
|
||||
**compiling for test coverage**
|
||||
|
||||
LCOV can be used to generate a test coverage report based upon `make check`
|
||||
execution. LCOV must be installed on your system (e.g. the `lcov` package
|
||||
on Debian/Ubuntu).
|
||||
|
||||
To enable LCOV report generation during test runs:
|
||||
|
||||
```shell
|
||||
./configure --enable-lcov
|
||||
make
|
||||
make cov
|
||||
|
||||
# A coverage report will now be accessible at `./test_bitcoin.coverage/index.html`.
|
||||
```
|
||||
|
||||
Locking/mutex usage notes
|
||||
-------------------------
|
||||
|
||||
@@ -308,7 +275,7 @@ Wallet
|
||||
|
||||
- *Rationale*: In RPC code that conditionally uses the wallet (such as
|
||||
`validateaddress`) it is easy to forget that global pointer `pwalletMain`
|
||||
can be nullptr. See `test/functional/disablewallet.py` for functional tests
|
||||
can be NULL. See `test/functional/disablewallet.py` for functional tests
|
||||
exercising the API with `-disablewallet`
|
||||
|
||||
- Include `db_cxx.h` (BerkeleyDB header) only when `ENABLE_WALLET` is set
|
||||
@@ -363,12 +330,6 @@ C++ data structures
|
||||
- *Rationale*: Ensure determinism by avoiding accidental use of uninitialized
|
||||
values. Also, static analyzers balk about this.
|
||||
|
||||
- By default, declare single-argument constructors `explicit`.
|
||||
|
||||
- *Rationale*: This is a precaution to avoid unintended conversions that might
|
||||
arise when single-argument constructors are used as implicit conversion
|
||||
functions.
|
||||
|
||||
- Use explicitly signed or unsigned `char`s, or even better `uint8_t` and
|
||||
`int8_t`. Do not use bare `char` unless it is to pass to a third-party API.
|
||||
This type can be signed or unsigned depending on the architecture, which can
|
||||
@@ -492,14 +453,6 @@ namespace {
|
||||
|
||||
- *Rationale*: Avoids confusion about the namespace context
|
||||
|
||||
- Prefer `#include <primitives/transaction.h>` bracket syntax instead of
|
||||
`#include "primitives/transactions.h"` quote syntax when possible.
|
||||
|
||||
- *Rationale*: Bracket syntax is less ambiguous because the preprocessor
|
||||
searches a fixed list of include directories without taking location of the
|
||||
source file into account. This allows quoted includes to stand out more when
|
||||
the location of the source file actually is relevant.
|
||||
|
||||
GUI
|
||||
-----
|
||||
|
||||
@@ -588,26 +541,6 @@ Git and GitHub tips
|
||||
or `git fetch upstream-pull`. Afterwards, you can use `upstream-pull/NUMBER/head` in arguments to `git show`,
|
||||
`git checkout` and anywhere a commit id would be acceptable to see the changes from pull request NUMBER.
|
||||
|
||||
Scripted diffs
|
||||
--------------
|
||||
|
||||
For reformatting and refactoring commits where the changes can be easily automated using a bash script, we use
|
||||
scripted-diff commits. The bash script is included in the commit message and our Travis CI job checks that
|
||||
the result of the script is identical to the commit. This aids reviewers since they can verify that the script
|
||||
does exactly what it's supposed to do. It is also helpful for rebasing (since the same script can just be re-run
|
||||
on the new master commit).
|
||||
|
||||
To create a scripted-diff:
|
||||
|
||||
- start the commit message with `scripted-diff:` (and then a description of the diff on the same line)
|
||||
- in the commit message include the bash script between lines containing just the following text:
|
||||
- `-BEGIN VERIFY SCRIPT-`
|
||||
- `-END VERIFY SCRIPT-`
|
||||
|
||||
The scripted-diff is verified by the tool `contrib/devtools/commit-script-check.sh`
|
||||
|
||||
Commit `bb81e173` is an example of a scripted-diff.
|
||||
|
||||
RPC interface guidelines
|
||||
--------------------------
|
||||
|
||||
@@ -637,14 +570,16 @@ A few guidelines for introducing and reviewing new RPC interfaces:
|
||||
is specified as-is in BIP22.
|
||||
|
||||
- Missing arguments and 'null' should be treated the same: as default values. If there is no
|
||||
default value, both cases should fail in the same way. The easiest way to follow this
|
||||
guideline is detect unspecified arguments with `params[x].isNull()` instead of
|
||||
`params.size() <= x`. The former returns true if the argument is either null or missing,
|
||||
while the latter returns true if is missing, and false if it is null.
|
||||
default value, both cases should fail in the same way.
|
||||
|
||||
- *Rationale*: Avoids surprises when switching to name-based arguments. Missing name-based arguments
|
||||
are passed as 'null'.
|
||||
|
||||
- *Exception*: Many legacy exceptions to this exist, one of the worst ones is
|
||||
`getbalance` which follows a completely different code path based on the
|
||||
number of arguments. We are still in the process of cleaning these up. Do not introduce
|
||||
new ones.
|
||||
|
||||
- Try not to overload methods on argument type. E.g. don't make `getblock(true)` and `getblock("hash")`
|
||||
do different things.
|
||||
|
||||
@@ -672,27 +607,9 @@ A few guidelines for introducing and reviewing new RPC interfaces:
|
||||
from there.
|
||||
|
||||
- A RPC method must either be a wallet method or a non-wallet method. Do not
|
||||
introduce new methods such as `signrawtransaction` that differ in behavior
|
||||
based on presence of a wallet.
|
||||
introduce new methods such as `getinfo` and `signrawtransaction` that differ
|
||||
in behavior based on presence of a wallet.
|
||||
|
||||
- *Rationale*: as well as complicating the implementation and interfering
|
||||
with the introduction of multi-wallet, wallet and non-wallet code should be
|
||||
separated to avoid introducing circular dependencies between code units.
|
||||
|
||||
- Try to make the RPC response a JSON object.
|
||||
|
||||
- *Rationale*: If a RPC response is not a JSON object then it is harder to avoid API breakage if
|
||||
new data in the response is needed.
|
||||
|
||||
- Wallet RPCs call BlockUntilSyncedToCurrentChain to maintain consistency with
|
||||
`getblockchaininfo`'s state immediately prior to the call's execution. Wallet
|
||||
RPCs whose behavior does *not* depend on the current chainstate may omit this
|
||||
call.
|
||||
|
||||
- *Rationale*: In previous versions of Bitcoin Core, the wallet was always
|
||||
in-sync with the chainstate (by virtue of them all being updated in the
|
||||
same cs_main lock). In order to maintain the behavior that wallet RPCs
|
||||
return results as of at least the highest best-known block an RPC
|
||||
client may be aware of prior to entering a wallet RPC call, we must block
|
||||
until the wallet is caught up to the chainstate as of the RPC call's entry.
|
||||
This also makes the API much easier for RPC clients to reason about.
|
||||
|
||||
@@ -6,16 +6,13 @@
|
||||
* blocks/rev000??.dat; block undo data (custom); since 0.8.0 (format changed since pre-0.8)
|
||||
* blocks/index/*; block index (LevelDB); since 0.8.0
|
||||
* chainstate/*; block chain state database (LevelDB); since 0.8.0
|
||||
* database/*: BDB database environment; only used for wallet since 0.8.0; moved to wallets/ directory on new installs since 0.16.0
|
||||
* db.log: wallet database log file; moved to wallets/ directory on new installs since 0.16.0
|
||||
* database/*: BDB database environment; only used for wallet since 0.8.0
|
||||
* db.log: wallet database log file
|
||||
* debug.log: contains debug information and general logging generated by bitcoind or bitcoin-qt
|
||||
* fee_estimates.dat: stores statistics used to estimate minimum transaction fees and priorities required for confirmation; since 0.10.0
|
||||
* mempool.dat: dump of the mempool's transactions; since 0.14.0.
|
||||
* peers.dat: peer IP address database (custom format); since 0.7.0
|
||||
* wallet.dat: personal wallet (BDB) with keys and transactions; moved to wallets/ directory on new installs since 0.16.0
|
||||
* wallets/database/*: BDB database environment; used for wallets since 0.16.0
|
||||
* wallets/db.log: wallet database log file; since 0.16.0
|
||||
* wallets/wallet.dat: personal wallet (BDB) with keys and transactions; since 0.16.0
|
||||
* wallet.dat: personal wallet (BDB) with keys and transactions
|
||||
* .cookie: session RPC authentication cookie (written at start when cookie authentication is used, deleted on shutdown): since 0.12.0
|
||||
* onion_private_key: cached Tor hidden service private key for `-listenonion`: since 0.12.0
|
||||
* guisettings.ini.bak: backup of former GUI settings after `-resetguisettings` is used
|
||||
|
||||
@@ -1,4 +1,484 @@
|
||||
Gitian building
|
||||
================
|
||||
|
||||
This file was moved to [the Bitcoin Core documentation repository](https://github.com/bitcoin-core/docs/blob/master/gitian-building.md) at [https://github.com/bitcoin-core/docs](https://github.com/bitcoin-core/docs).
|
||||
*Setup instructions for a Gitian build of Bitcoin Core using a Debian VM or physical system.*
|
||||
|
||||
Gitian is the deterministic build process that is used to build the Bitcoin
|
||||
Core executables. It provides a way to be reasonably sure that the
|
||||
executables are really built from the source on GitHub. It also makes sure that
|
||||
the same, tested dependencies are used and statically built into the executable.
|
||||
|
||||
Multiple developers build the source code by following a specific descriptor
|
||||
("recipe"), cryptographically sign the result, and upload the resulting signature.
|
||||
These results are compared and only if they match, the build is accepted and uploaded
|
||||
to bitcoin.org.
|
||||
|
||||
More independent Gitian builders are needed, which is why this guide exists.
|
||||
It is preferred you follow these steps yourself instead of using someone else's
|
||||
VM image to avoid 'contaminating' the build.
|
||||
|
||||
Table of Contents
|
||||
------------------
|
||||
|
||||
- [Create a new VirtualBox VM](#create-a-new-virtualbox-vm)
|
||||
- [Connecting to the VM](#connecting-to-the-vm)
|
||||
- [Setting up Debian for Gitian building](#setting-up-debian-for-gitian-building)
|
||||
- [Installing Gitian](#installing-gitian)
|
||||
- [Setting up the Gitian image](#setting-up-the-gitian-image)
|
||||
- [Getting and building the inputs](#getting-and-building-the-inputs)
|
||||
- [Building Bitcoin Core](#building-bitcoin-core)
|
||||
- [Building an alternative repository](#building-an-alternative-repository)
|
||||
- [Signing externally](#signing-externally)
|
||||
- [Uploading signatures](#uploading-signatures)
|
||||
|
||||
Preparing the Gitian builder host
|
||||
---------------------------------
|
||||
|
||||
The first step is to prepare the host environment that will be used to perform the Gitian builds.
|
||||
This guide explains how to set up the environment, and how to start the builds.
|
||||
|
||||
Debian Linux was chosen as the host distribution because it has a lightweight install (in contrast to Ubuntu) and is readily available.
|
||||
Any kind of virtualization can be used, for example:
|
||||
- [VirtualBox](https://www.virtualbox.org/) (covered by this guide)
|
||||
- [KVM](http://www.linux-kvm.org/page/Main_Page)
|
||||
- [LXC](https://linuxcontainers.org/), see also [Gitian host docker container](https://github.com/gdm85/tenku/tree/master/docker/gitian-bitcoin-host/README.md).
|
||||
|
||||
You can also install Gitian on actual hardware instead of using virtualization.
|
||||
|
||||
Create a new VirtualBox VM
|
||||
---------------------------
|
||||
In the VirtualBox GUI click "New" and choose the following parameters in the wizard:
|
||||
|
||||

|
||||
|
||||
- Type: Linux, Debian (64-bit)
|
||||
|
||||

|
||||
|
||||
- Memory Size: at least 3000MB, anything less and the build might not complete.
|
||||
|
||||

|
||||
|
||||
- Hard Disk: Create a virtual hard disk now
|
||||
|
||||

|
||||
|
||||
- Hard Disk file type: Use the default, VDI (VirtualBox Disk Image)
|
||||
|
||||

|
||||
|
||||
- Storage on physical hard disk: Dynamically Allocated
|
||||
|
||||

|
||||
|
||||
- File location and size: at least 40GB; as low as 20GB *may* be possible, but better to err on the safe side
|
||||
- Click `Create`
|
||||
|
||||
After creating the VM, we need to configure it.
|
||||
|
||||
- Click the `Settings` button, then go to `System` tab and `Processor` sub-tab. Increase the number of processors to the number of cores on your machine if you want builds to be faster.
|
||||
|
||||

|
||||
|
||||
- Go to the `Network` tab. Adapter 1 should be attached to `NAT`.
|
||||
|
||||

|
||||
|
||||
- Click `Advanced`, then `Port Forwarding`. We want to set up a port through which we can reach the VM to get files in and out.
|
||||
- Create a new rule by clicking the plus icon.
|
||||
|
||||

|
||||
|
||||
- Set up the new rule the following way:
|
||||
- Name: `SSH`
|
||||
- Protocol: `TCP`
|
||||
- Leave Host IP empty
|
||||
- Host Port: `22222`
|
||||
- Leave Guest IP empty
|
||||
- Guest Port: `22`
|
||||
|
||||
- Click `Ok` twice to save.
|
||||
|
||||
Get the [Debian 8.x net installer](http://cdimage.debian.org/mirror/cdimage/archive/8.5.0/amd64/iso-cd/debian-8.5.0-amd64-netinst.iso) (a more recent minor version should also work, see also [Debian Network installation](https://www.debian.org/CD/netinst/)).
|
||||
This DVD image can be [validated](https://www.debian.org/CD/verify) using a SHA256 hashing tool, for example on
|
||||
Unixy OSes by entering the following in a terminal:
|
||||
|
||||
echo "ad4e8c27c561ad8248d5ebc1d36eb172f884057bfeb2c22ead823f59fa8c3dff debian-8.5.0-amd64-netinst.iso" | sha256sum -c
|
||||
# (must return OK)
|
||||
|
||||
Then start the VM. On the first launch you will be asked for a CD or DVD image. Choose the downloaded ISO.
|
||||
|
||||

|
||||
|
||||
Installing Debian
|
||||
------------------
|
||||
|
||||
This section will explain how to install Debian on the newly created VM.
|
||||
|
||||
- Choose the non-graphical installer. We do not need the graphical environment; it will only increase installation time and disk usage.
|
||||
|
||||

|
||||
|
||||
**Note**: Navigating in the Debian installer:
|
||||
To keep a setting at the default and proceed, just press `Enter`.
|
||||
To select a different button, press `Tab`.
|
||||
|
||||
- Choose locale and keyboard settings (doesn't matter, you can just go with the defaults or select your own information)
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
- The VM will detect network settings using DHCP, this should all proceed automatically
|
||||
- Configure the network:
|
||||
- Hostname `debian`.
|
||||
- Leave domain name empty.
|
||||
|
||||

|
||||

|
||||
|
||||
- Choose a root password and enter it twice (remember it for later)
|
||||
|
||||

|
||||
|
||||
- Name the new user `debian` (the full name doesn't matter, you can leave it empty)
|
||||
- Set the account username as `debian`
|
||||
|
||||

|
||||

|
||||
|
||||
- Choose a user password and enter it twice (remember it for later)
|
||||
|
||||

|
||||
|
||||
- The installer will set up the clock using a time server; this process should be automatic
|
||||
- Set up the clock: choose a time zone (depends on the locale settings that you picked earlier; specifics don't matter)
|
||||
|
||||

|
||||
|
||||
- Disk setup
|
||||
- Partitioning method: Guided - Use the entire disk
|
||||
|
||||

|
||||
|
||||
- Select disk to partition: SCSI1 (0,0,0)
|
||||
|
||||

|
||||
|
||||
- Partition Disks -> *All files in one partition*
|
||||
|
||||

|
||||
|
||||
- Finish partitioning and write changes to disk -> *Yes* (`Tab`, `Enter` to select the `Yes` button)
|
||||
|
||||

|
||||

|
||||
|
||||
- The base system will be installed, this will take a minute or so
|
||||
- Choose a mirror (any will do)
|
||||
|
||||

|
||||
|
||||
- Enter proxy information (unless you are on an intranet, leave this empty)
|
||||
|
||||

|
||||
|
||||
- Wait a bit while 'Select and install software' runs
|
||||
- Participate in popularity contest -> *No*
|
||||
- Choose software to install. We need just the base system.
|
||||
- Make sure only 'SSH server' and 'Standard System Utilities' are checked
|
||||
- Uncheck 'Debian Desktop Environment' and 'Print Server'
|
||||
|
||||

|
||||
|
||||
- Install the GRUB boot loader to the master boot record? -> Yes
|
||||
|
||||

|
||||
|
||||
- Device for boot loader installation -> ata-VBOX_HARDDISK
|
||||
|
||||

|
||||
|
||||
- Installation Complete -> *Continue*
|
||||
- After installation, the VM will reboot and you will have a working Debian VM. Congratulations!
|
||||
|
||||

|
||||
|
||||
|
||||
After Installation
|
||||
-------------------
|
||||
The next step in the guide involves logging in as root via SSH.
|
||||
SSH login for root users is disabled by default, so we'll enable that now.
|
||||
|
||||
Login to the VM using username `root` and the root password you chose earlier.
|
||||
You'll be presented with a screen similar to this.
|
||||
|
||||

|
||||
|
||||
Type:
|
||||
|
||||
```
|
||||
sed -i 's/^PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
|
||||
```
|
||||
and press enter. Then,
|
||||
```
|
||||
/etc/init.d/ssh restart
|
||||
```
|
||||
and enter to restart SSH. Logout by typing 'logout' and pressing 'enter'.
|
||||
|
||||
Connecting to the VM
|
||||
----------------------
|
||||
|
||||
After the VM has booted you can connect to it using SSH, and files can be copied from and to the VM using a SFTP utility.
|
||||
Connect to `localhost`, port `22222` (or the port configured when installing the VM).
|
||||
On Windows you can use [putty](http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html) and [WinSCP](http://winscp.net/eng/index.php).
|
||||
|
||||
For example, to connect as `root` from a Linux command prompt use
|
||||
|
||||
$ ssh root@localhost -p 22222
|
||||
The authenticity of host '[localhost]:22222 ([127.0.0.1]:22222)' can't be established.
|
||||
RSA key fingerprint is ae:f5:c8:9f:17:c6:c7:1b:c2:1b:12:31:1d:bb:d0:c7.
|
||||
Are you sure you want to continue connecting (yes/no)? yes
|
||||
Warning: Permanently added '[localhost]:22222' (RSA) to the list of known hosts.
|
||||
root@localhost's password: (enter root password configured during install)
|
||||
|
||||
The programs included with the Debian GNU/Linux system are free software;
|
||||
the exact distribution terms for each program are described in the
|
||||
individual files in /usr/share/doc/*/copyright.
|
||||
|
||||
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
|
||||
permitted by applicable law.
|
||||
root@debian:~#
|
||||
|
||||
Replace `root` with `debian` to log in as user.
|
||||
|
||||
Setting up Debian for Gitian building
|
||||
--------------------------------------
|
||||
|
||||
In this section we will be setting up the Debian installation for Gitian building.
|
||||
|
||||
First we need to log in as `root` to set up dependencies and make sure that our
|
||||
user can use the sudo command. Type/paste the following in the terminal:
|
||||
|
||||
```bash
|
||||
apt-get install git ruby sudo apt-cacher-ng qemu-utils debootstrap lxc python-cheetah parted kpartx bridge-utils make ubuntu-archive-keyring curl
|
||||
adduser debian sudo
|
||||
```
|
||||
|
||||
Then set up LXC and the rest with the following, which is a complex jumble of settings and workarounds:
|
||||
|
||||
```bash
|
||||
# the version of lxc-start in Debian needs to run as root, so make sure
|
||||
# that the build script can execute it without providing a password
|
||||
echo "%sudo ALL=NOPASSWD: /usr/bin/lxc-start" > /etc/sudoers.d/gitian-lxc
|
||||
echo "%sudo ALL=NOPASSWD: /usr/bin/lxc-execute" >> /etc/sudoers.d/gitian-lxc
|
||||
# make /etc/rc.local script that sets up bridge between guest and host
|
||||
echo '#!/bin/sh -e' > /etc/rc.local
|
||||
echo 'brctl addbr br0' >> /etc/rc.local
|
||||
echo 'ifconfig br0 10.0.3.2/24 up' >> /etc/rc.local
|
||||
echo 'iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE' >> /etc/rc.local
|
||||
echo 'echo 1 > /proc/sys/net/ipv4/ip_forward' >> /etc/rc.local
|
||||
echo 'exit 0' >> /etc/rc.local
|
||||
# make sure that USE_LXC is always set when logging in as debian,
|
||||
# and configure LXC IP addresses
|
||||
echo 'export USE_LXC=1' >> /home/debian/.profile
|
||||
echo 'export GITIAN_HOST_IP=10.0.3.2' >> /home/debian/.profile
|
||||
echo 'export LXC_GUEST_IP=10.0.3.5' >> /home/debian/.profile
|
||||
reboot
|
||||
```
|
||||
|
||||
At the end the VM is rebooted to make sure that the changes take effect. The steps in this
|
||||
section only need to be performed once.
|
||||
|
||||
Installing Gitian
|
||||
------------------
|
||||
|
||||
Re-login as the user `debian` that was created during installation.
|
||||
The rest of the steps in this guide will be performed as that user.
|
||||
|
||||
There is no `python-vm-builder` package in Debian, so we need to install it from source ourselves,
|
||||
|
||||
```bash
|
||||
wget http://archive.ubuntu.com/ubuntu/pool/universe/v/vm-builder/vm-builder_0.12.4+bzr494.orig.tar.gz
|
||||
echo "76cbf8c52c391160b2641e7120dbade5afded713afaa6032f733a261f13e6a8e vm-builder_0.12.4+bzr494.orig.tar.gz" | sha256sum -c
|
||||
# (verification -- must return OK)
|
||||
tar -zxvf vm-builder_0.12.4+bzr494.orig.tar.gz
|
||||
cd vm-builder-0.12.4+bzr494
|
||||
sudo python setup.py install
|
||||
cd ..
|
||||
```
|
||||
|
||||
**Note**: When sudo asks for a password, enter the password for the user *debian* not for *root*.
|
||||
|
||||
Clone the git repositories for bitcoin and Gitian.
|
||||
|
||||
```bash
|
||||
git clone https://github.com/devrandom/gitian-builder.git
|
||||
git clone https://github.com/bitcoin/bitcoin
|
||||
git clone https://github.com/bitcoin-core/gitian.sigs.git
|
||||
```
|
||||
|
||||
Setting up the Gitian image
|
||||
-------------------------
|
||||
|
||||
Gitian needs a virtual image of the operating system to build in.
|
||||
Currently this is Ubuntu Trusty x86_64.
|
||||
This image will be copied and used every time that a build is started to
|
||||
make sure that the build is deterministic.
|
||||
Creating the image will take a while, but only has to be done once.
|
||||
|
||||
Execute the following as user `debian`:
|
||||
|
||||
```bash
|
||||
cd gitian-builder
|
||||
bin/make-base-vm --lxc --arch amd64 --suite trusty
|
||||
```
|
||||
|
||||
There will be a lot of warnings printed during the build of the image. These can be ignored.
|
||||
|
||||
**Note**: When sudo asks for a password, enter the password for the user *debian* not for *root*.
|
||||
|
||||
Getting and building the inputs
|
||||
--------------------------------
|
||||
|
||||
At this point you have two options, you can either use the automated script (found in [contrib/gitian-build.sh](/contrib/gitian-build.sh)) or you could manually do everything by following this guide. If you're using the automated script, then run it with the "--setup" command. Afterwards, run it with the "--build" command (example: "contrib/gitian-build.sh -b signer 0.13.0"). Otherwise ignore this.
|
||||
|
||||
Follow the instructions in [doc/release-process.md](release-process.md#fetch-and-create-inputs-first-time-or-when-dependency-versions-change)
|
||||
in the bitcoin repository under 'Fetch and create inputs' to install sources which require
|
||||
manual intervention. Also optionally follow the next step: 'Seed the Gitian sources cache
|
||||
and offline git repositories' which will fetch the remaining files required for building
|
||||
offline.
|
||||
|
||||
Building Bitcoin Core
|
||||
----------------
|
||||
|
||||
To build Bitcoin Core (for Linux, OS X and Windows) just follow the steps under 'perform
|
||||
Gitian builds' in [doc/release-process.md](release-process.md#perform-gitian-builds) in the bitcoin repository.
|
||||
|
||||
This may take some time as it will build all the dependencies needed for each descriptor.
|
||||
These dependencies will be cached after a successful build to avoid rebuilding them when possible.
|
||||
|
||||
At any time you can check the package installation and build progress with
|
||||
|
||||
```bash
|
||||
tail -f var/install.log
|
||||
tail -f var/build.log
|
||||
```
|
||||
|
||||
Output from `gbuild` will look something like
|
||||
|
||||
Initialized empty Git repository in /home/debian/gitian-builder/inputs/bitcoin/.git/
|
||||
remote: Counting objects: 57959, done.
|
||||
remote: Total 57959 (delta 0), reused 0 (delta 0), pack-reused 57958
|
||||
Receiving objects: 100% (57959/57959), 53.76 MiB | 484.00 KiB/s, done.
|
||||
Resolving deltas: 100% (41590/41590), done.
|
||||
From https://github.com/bitcoin/bitcoin
|
||||
... (new tags, new branch etc)
|
||||
--- Building for trusty amd64 ---
|
||||
Stopping target if it is up
|
||||
Making a new image copy
|
||||
stdin: is not a tty
|
||||
Starting target
|
||||
Checking if target is up
|
||||
Preparing build environment
|
||||
Updating apt-get repository (log in var/install.log)
|
||||
Installing additional packages (log in var/install.log)
|
||||
Grabbing package manifest
|
||||
stdin: is not a tty
|
||||
Creating build script (var/build-script)
|
||||
lxc-start: Connection refused - inotify event with no name (mask 32768)
|
||||
Running build script (log in var/build.log)
|
||||
|
||||
Building an alternative repository
|
||||
-----------------------------------
|
||||
|
||||
If you want to do a test build of a pull on GitHub it can be useful to point
|
||||
the Gitian builder at an alternative repository, using the same descriptors
|
||||
and inputs.
|
||||
|
||||
For example:
|
||||
```bash
|
||||
URL=https://github.com/laanwj/bitcoin.git
|
||||
COMMIT=2014_03_windows_unicode_path
|
||||
./bin/gbuild --commit bitcoin=${COMMIT} --url bitcoin=${URL} ../bitcoin/contrib/gitian-descriptors/gitian-linux.yml
|
||||
./bin/gbuild --commit bitcoin=${COMMIT} --url bitcoin=${URL} ../bitcoin/contrib/gitian-descriptors/gitian-win.yml
|
||||
./bin/gbuild --commit bitcoin=${COMMIT} --url bitcoin=${URL} ../bitcoin/contrib/gitian-descriptors/gitian-osx.yml
|
||||
```
|
||||
|
||||
Building fully offline
|
||||
-----------------------
|
||||
|
||||
For building fully offline including attaching signatures to unsigned builds, the detached-sigs repository
|
||||
and the bitcoin git repository with the desired tag must both be available locally, and then gbuild must be
|
||||
told where to find them. It also requires an apt-cacher-ng which is fully-populated but set to offline mode, or
|
||||
manually disabling gitian-builder's use of apt-get to update the VM build environment.
|
||||
|
||||
To configure apt-cacher-ng as an offline cacher, you will need to first populate its cache with the relevant
|
||||
files. You must additionally patch target-bin/bootstrap-fixup to set its apt sources to something other than
|
||||
plain archive.ubuntu.com: us.archive.ubuntu.com works.
|
||||
|
||||
So, if you use LXC:
|
||||
|
||||
```bash
|
||||
export PATH="$PATH":/path/to/gitian-builder/libexec
|
||||
export USE_LXC=1
|
||||
cd /path/to/gitian-builder
|
||||
./libexec/make-clean-vm --suite trusty --arch amd64
|
||||
|
||||
LXC_ARCH=amd64 LXC_SUITE=trusty on-target -u root apt-get update
|
||||
LXC_ARCH=amd64 LXC_SUITE=trusty on-target -u root \
|
||||
-e DEBIAN_FRONTEND=noninteractive apt-get --no-install-recommends -y install \
|
||||
$( sed -ne '/^packages:/,/[^-] .*/ {/^- .*/{s/"//g;s/- //;p}}' ../bitcoin/contrib/gitian-descriptors/*|sort|uniq )
|
||||
LXC_ARCH=amd64 LXC_SUITE=trusty on-target -u root apt-get -q -y purge grub
|
||||
LXC_ARCH=amd64 LXC_SUITE=trusty on-target -u root -e DEBIAN_FRONTEND=noninteractive apt-get -y dist-upgrade
|
||||
```
|
||||
|
||||
And then set offline mode for apt-cacher-ng:
|
||||
|
||||
```
|
||||
/etc/apt-cacher-ng/acng.conf
|
||||
[...]
|
||||
Offlinemode: 1
|
||||
[...]
|
||||
|
||||
service apt-cacher-ng restart
|
||||
```
|
||||
|
||||
Then when building, override the remote URLs that gbuild would otherwise pull from the Gitian descriptors::
|
||||
```bash
|
||||
|
||||
cd /some/root/path/
|
||||
git clone https://github.com/bitcoin-core/bitcoin-detached-sigs.git
|
||||
|
||||
BTCPATH=/some/root/path/bitcoin
|
||||
SIGPATH=/some/root/path/bitcoin-detached-sigs
|
||||
|
||||
./bin/gbuild --url bitcoin=${BTCPATH},signature=${SIGPATH} ../bitcoin/contrib/gitian-descriptors/gitian-win-signer.yml
|
||||
```
|
||||
|
||||
Signing externally
|
||||
-------------------
|
||||
|
||||
If you want to do the PGP signing on another device, that's also possible; just define `SIGNER` as mentioned
|
||||
and follow the steps in the build process as normal.
|
||||
|
||||
gpg: skipped "laanwj": secret key not available
|
||||
|
||||
When you execute `gsign` you will get an error from GPG, which can be ignored. Copy the resulting `.assert` files
|
||||
in `gitian.sigs` to your signing machine and do
|
||||
|
||||
```bash
|
||||
gpg --detach-sign ${VERSION}-linux/${SIGNER}/bitcoin-linux-build.assert
|
||||
gpg --detach-sign ${VERSION}-win/${SIGNER}/bitcoin-win-build.assert
|
||||
gpg --detach-sign ${VERSION}-osx-unsigned/${SIGNER}/bitcoin-osx-build.assert
|
||||
```
|
||||
|
||||
This will create the `.sig` files that can be committed together with the `.assert` files to assert your
|
||||
Gitian build.
|
||||
|
||||
Uploading signatures
|
||||
---------------------
|
||||
|
||||
After building and signing you can push your signatures (both the `.assert` and `.assert.sig` files) to the
|
||||
[bitcoin-core/gitian.sigs](https://github.com/bitcoin-core/gitian.sigs/) repository, or if that's not possible create a pull
|
||||
request. You can also mail the files to Wladimir (laanwj@gmail.com) and he will commit them.
|
||||
|
||||
BIN
doc/gitian-building/all_files_in_one_partition.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
doc/gitian-building/create_new_vm.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
doc/gitian-building/create_vm_file_location_size.png
Normal file
|
After Width: | Height: | Size: 109 KiB |
BIN
doc/gitian-building/create_vm_hard_disk.png
Normal file
|
After Width: | Height: | Size: 120 KiB |
BIN
doc/gitian-building/create_vm_hard_disk_file_type.png
Normal file
|
After Width: | Height: | Size: 166 KiB |
BIN
doc/gitian-building/create_vm_memsize.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
doc/gitian-building/create_vm_storage_physical_hard_disk.png
Normal file
|
After Width: | Height: | Size: 177 KiB |
BIN
doc/gitian-building/debian_install_10_configure_clock.png
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
doc/gitian-building/debian_install_11_partition_disks.png
Normal file
|
After Width: | Height: | Size: 9.3 KiB |