Compare commits
430 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b880967f74 | ||
|
|
e328605b1c | ||
|
|
ea07ccbf3b | ||
|
|
eb27e8d0a3 | ||
|
|
47fdeb4a9c | ||
|
|
9cd1dd9f6b | ||
|
|
74f29c2737 | ||
|
|
6b4163b972 | ||
|
|
864338a2b2 | ||
|
|
924d7e5a07 | ||
|
|
8438074997 | ||
|
|
3230b329ea | ||
|
|
989d49921b | ||
|
|
ab03660824 | ||
|
|
41f94edf22 | ||
|
|
be8ac71d96 | ||
|
|
2f32a0b4ab | ||
|
|
f6b753912b | ||
|
|
037bfefe6b | ||
|
|
b8ac476890 | ||
|
|
65a1dda254 | ||
|
|
60c51f1c38 | ||
|
|
f047dfa7df | ||
|
|
b8e81b7ccd | ||
|
|
0a94661e8d | ||
|
|
bb424e4447 | ||
|
|
cd5164aba2 | ||
|
|
25b49b5b45 | ||
|
|
5b9f78d69c | ||
|
|
274352927f | ||
|
|
ffab1ddb85 | ||
|
|
613247fc97 | ||
|
|
855fd498f9 | ||
|
|
40d20412ff | ||
|
|
213cd5948c | ||
|
|
e3d8d58659 | ||
|
|
cea5e49420 | ||
|
|
ce16723310 | ||
|
|
ea3c1b0806 | ||
|
|
af252082ef | ||
|
|
6d911ada83 | ||
|
|
306a93b79e | ||
|
|
6fbd58df09 | ||
|
|
0655d64c22 | ||
|
|
6eb5410d8f | ||
|
|
d030936da2 | ||
|
|
12927dd315 | ||
|
|
c6727f34d1 | ||
|
|
ea55881c3e | ||
|
|
b62172a66a | ||
|
|
a12d6acc5d | ||
|
|
e6abbce8cd | ||
|
|
29ba8cc073 | ||
|
|
a9c6eef915 | ||
|
|
49df14d295 | ||
|
|
47c78c2966 | ||
|
|
55911710f5 | ||
|
|
0991401cdd | ||
|
|
f62031b895 | ||
|
|
bba0175022 | ||
|
|
026b9dfd6e | ||
|
|
736d8b85b3 | ||
|
|
84fe0ffd68 | ||
|
|
fd0c4606bc | ||
|
|
4b57c5b3c7 | ||
|
|
f8cdf4f937 | ||
|
|
f6f4c83382 | ||
|
|
23826316d4 | ||
|
|
a78996503f | ||
|
|
d78e4312b2 | ||
|
|
0a6dcae508 | ||
|
|
44d8e093ca | ||
|
|
bf75a3d3fd | ||
|
|
221684c7ef | ||
|
|
84efe0ec22 | ||
|
|
5baa4a90e3 | ||
|
|
5332b0a429 | ||
|
|
6862c8ba99 | ||
|
|
752ecec5cc | ||
|
|
354c0f382b | ||
|
|
b64b1c6e9f | ||
|
|
a3788527a2 | ||
|
|
9d5b5c3a2d | ||
|
|
bd65d70dbc | ||
|
|
505681f234 | ||
|
|
94cfe3383b | ||
|
|
e39a3f2c69 | ||
|
|
7ccadd4199 | ||
|
|
3ae41a64dd | ||
|
|
eac2cdcab2 | ||
|
|
acb5356087 | ||
|
|
41b96da264 | ||
|
|
64e1082d7a | ||
|
|
d6377e6a4a | ||
|
|
3a4a66f47e | ||
|
|
2f89f4b35d | ||
|
|
768cef90b9 | ||
|
|
6fb75919de | ||
|
|
5fa6143d5a | ||
|
|
042bdd325c | ||
|
|
48115f5313 | ||
|
|
a62649723b | ||
|
|
e0036e9f0e | ||
|
|
2585310a22 | ||
|
|
ac1dd87f33 | ||
|
|
f72b475324 | ||
|
|
e917bdb563 | ||
|
|
79144ac17d | ||
|
|
337459b96b | ||
|
|
4b8a3ab877 | ||
|
|
9f535d4104 | ||
|
|
8b1a93f2e5 | ||
|
|
203a0cfa7c | ||
|
|
1ed6d499b6 | ||
|
|
010e66188e | ||
|
|
72ae546dd4 | ||
|
|
26ceac4acf | ||
|
|
a39d4e3771 | ||
|
|
78363dc991 | ||
|
|
c11c72cd5b | ||
|
|
8b542d5874 | ||
|
|
da257a7b36 | ||
|
|
b1f0be0a05 | ||
|
|
9b4b3cf9cf | ||
|
|
e0c06d2c49 | ||
|
|
0ecd8aae20 | ||
|
|
69e264b6f8 | ||
|
|
4629f95b22 | ||
|
|
a475285a53 | ||
|
|
9d558e1c18 | ||
|
|
13d3adb651 | ||
|
|
acc2d2ca5f | ||
|
|
01ce711798 | ||
|
|
b733288d95 | ||
|
|
d387b8ec15 | ||
|
|
3e1cf9b6f6 | ||
|
|
d4ffe4e425 | ||
|
|
4ff396e45d | ||
|
|
dbe8f75262 | ||
|
|
ab4bd3bdbb | ||
|
|
2364b118f2 | ||
|
|
1ab62973d3 | ||
|
|
3e7dac9dad | ||
|
|
3e578aa9b9 | ||
|
|
9eb1e1e8ce | ||
|
|
51cb8fe870 | ||
|
|
2fdd4c7933 | ||
|
|
583df73acd | ||
|
|
b397248436 | ||
|
|
18da57825e | ||
|
|
bf35cae1ae | ||
|
|
83d7dc44ef | ||
|
|
188674de98 | ||
|
|
d3081fa231 | ||
|
|
e27c4110d9 | ||
|
|
3a54ad9aba | ||
|
|
9dd5d79244 | ||
|
|
58c01a376d | ||
|
|
bfb154e9fc | ||
|
|
d0a2e2eb87 | ||
|
|
426dc16f7b | ||
|
|
d69427a0c4 | ||
|
|
191b087e0e | ||
|
|
b2ee43f126 | ||
|
|
202c95c216 | ||
|
|
92e3022f88 | ||
|
|
3ab1664594 | ||
|
|
1cc7f54a8d | ||
|
|
6b29ccc9f9 | ||
|
|
48be9ceaa0 | ||
|
|
c63b2e25a5 | ||
|
|
7cbe636a23 | ||
|
|
814df91269 | ||
|
|
6e40fcf455 | ||
|
|
40c5b939f2 | ||
|
|
74fc254c2b | ||
|
|
8abfb9905d | ||
|
|
4765b8c116 | ||
|
|
0caf2b187f | ||
|
|
89bbd54fbf | ||
|
|
97730c9b7f | ||
|
|
b39a07dc42 | ||
|
|
41106a50d2 | ||
|
|
ed67100565 | ||
|
|
bb1f1c90d6 | ||
|
|
bbe53f61db | ||
|
|
91c601c54a | ||
|
|
2bbecc84e2 | ||
|
|
e2bff7df08 | ||
|
|
b58be132c9 | ||
|
|
4a102fa9d9 | ||
|
|
8da64ca47e | ||
|
|
913e90db9a | ||
|
|
fe451fe944 | ||
|
|
55a1db4fa2 | ||
|
|
e07c943ce8 | ||
|
|
2f3308f2d2 | ||
|
|
61d388d98d | ||
|
|
5a79c65323 | ||
|
|
31853a1517 | ||
|
|
3d20cd5f61 | ||
|
|
d282c1fb64 | ||
|
|
74dd52a9fc | ||
|
|
494cbf8350 | ||
|
|
4e9667b844 | ||
|
|
76db4e235d | ||
|
|
b698417fc8 | ||
|
|
05c20a553a | ||
|
|
8562179612 | ||
|
|
9c749d608f | ||
|
|
e3ce55fddb | ||
|
|
1528397135 | ||
|
|
f406af3573 | ||
|
|
49a3352c1c | ||
|
|
d5aab70490 | ||
|
|
ffc6b678b9 | ||
|
|
0bd05b53b1 | ||
|
|
4c6cab2c5d | ||
|
|
d20791b0e5 | ||
|
|
20ecf5c27d | ||
|
|
0f63504463 | ||
|
|
85bba09bfd | ||
|
|
219b512d72 | ||
|
|
c0e0b05aec | ||
|
|
25d4911e86 | ||
|
|
f3f2cb736d | ||
|
|
06d1fc6112 | ||
|
|
ab643811ea | ||
|
|
178825dec3 | ||
|
|
fa2b42533a | ||
|
|
dac4e2aebd | ||
|
|
a7101b13f7 | ||
|
|
e448959dfb | ||
|
|
f4bc2296a5 | ||
|
|
4a811b0053 | ||
|
|
633bb8b0ae | ||
|
|
71f82bf2ab | ||
|
|
13a2283a6d | ||
|
|
4ae5e72128 | ||
|
|
8414cb0494 | ||
|
|
f4e1c347cf | ||
|
|
ef76f3d62c | ||
|
|
94c8bfb23b | ||
|
|
73288982ad | ||
|
|
513412fd73 | ||
|
|
b598581bfd | ||
|
|
b12dcb2c9e | ||
|
|
e4121981d4 | ||
|
|
fecda6853d | ||
|
|
952bf9738e | ||
|
|
9bd1bdd08c | ||
|
|
8556b0298d | ||
|
|
cb4bdd18a7 | ||
|
|
5cfd3a70a6 | ||
|
|
2c47a00b5f | ||
|
|
392783697c | ||
|
|
397521d632 | ||
|
|
e5681a4fa8 | ||
|
|
8d5abd480b | ||
|
|
d34b958406 | ||
|
|
f7257cfbd9 | ||
|
|
d8dcfb9034 | ||
|
|
09a2f3e1d7 | ||
|
|
81bfb5aebf | ||
|
|
1204945742 | ||
|
|
232aa9e034 | ||
|
|
43cb41859e | ||
|
|
db3a5e4151 | ||
|
|
2b7709dc84 | ||
|
|
5a2ed60a04 | ||
|
|
e3e3728f46 | ||
|
|
b86ed6ff23 | ||
|
|
e18bc583d4 | ||
|
|
ab88ed93ef | ||
|
|
23abc2ea48 | ||
|
|
65adc3a893 | ||
|
|
4babd08137 | ||
|
|
25333a2619 | ||
|
|
ad603f815f | ||
|
|
09b9c2fcd5 | ||
|
|
b725af7599 | ||
|
|
2a9edeb1c8 | ||
|
|
5d433613e2 | ||
|
|
8adb7bca21 | ||
|
|
af4c2ac8ce | ||
|
|
ffeb47366d | ||
|
|
55027a8c85 | ||
|
|
e9d2e6ed90 | ||
|
|
a60ab0ba89 | ||
|
|
fbf617a5f1 | ||
|
|
acac57b8af | ||
|
|
e33cc87212 | ||
|
|
1d46fe3327 | ||
|
|
5409404d75 | ||
|
|
ebb783a9f2 | ||
|
|
77eaa6fc45 | ||
|
|
410c2fa317 | ||
|
|
7f3c4f08ea | ||
|
|
cfe4cad9e5 | ||
|
|
47ef190637 | ||
|
|
95f0af5cb1 | ||
|
|
f284b5998a | ||
|
|
dfd3996217 | ||
|
|
ddcd1afc5f | ||
|
|
7398f4a796 | ||
|
|
c61fe44194 | ||
|
|
7e591c19e7 | ||
|
|
e3f5d4338d | ||
|
|
3cb1edbfb6 | ||
|
|
d138598f63 | ||
|
|
76cee181d3 | ||
|
|
d3c3210fa3 | ||
|
|
f61287c9b1 | ||
|
|
9c6f707172 | ||
|
|
6540025f10 | ||
|
|
7b95c7be8d | ||
|
|
ab1edd44d8 | ||
|
|
0a3acf260a | ||
|
|
6039196b57 | ||
|
|
4c35366bdc | ||
|
|
c337e2e905 | ||
|
|
178d6a1b65 | ||
|
|
788590736d | ||
|
|
fc5d85c4bb | ||
|
|
be0afe238b | ||
|
|
162c33d246 | ||
|
|
c17f0a58b4 | ||
|
|
33207fc870 | ||
|
|
733a799218 | ||
|
|
8c29273ff0 | ||
|
|
6539cfc583 | ||
|
|
fac6bea8f0 | ||
|
|
01e5327cfc | ||
|
|
c4a10dbb22 | ||
|
|
b62bbb1ff0 | ||
|
|
0f21d39ffa | ||
|
|
275d6a3115 | ||
|
|
5c80b9a7fb | ||
|
|
b1b9c76262 | ||
|
|
7211bceb11 | ||
|
|
98f4c6c49c | ||
|
|
7d0e9bcb8e | ||
|
|
0d8e80fe07 | ||
|
|
7d49a9173a | ||
|
|
74f66a5e29 | ||
|
|
b8edf6c0d8 | ||
|
|
16d281ba84 | ||
|
|
3fc6846181 | ||
|
|
61774f82b3 | ||
|
|
5b6e9811fa | ||
|
|
ff0c0dd6a9 | ||
|
|
1699e3a868 | ||
|
|
16254b6e14 | ||
|
|
a22e9a32b3 | ||
|
|
da0b9d454e | ||
|
|
cb0c42e7da | ||
|
|
acfe60677c | ||
|
|
a1465ac8e6 | ||
|
|
2834bc8013 | ||
|
|
a9801cf7ee | ||
|
|
89d72f3d9b | ||
|
|
caee92dfa8 | ||
|
|
a78eed26c5 | ||
|
|
b51700a852 | ||
|
|
6603b09e77 | ||
|
|
b40bdd6532 | ||
|
|
1294cdc43f | ||
|
|
1e13f57f56 | ||
|
|
74502e753b | ||
|
|
9e2872c234 | ||
|
|
ca0b8acbf3 | ||
|
|
0fde3bbf07 | ||
|
|
1725e6a01f | ||
|
|
53d56881a8 | ||
|
|
2b45345aac | ||
|
|
fbdf4e5efa | ||
|
|
669264c176 | ||
|
|
3f2a0172f5 | ||
|
|
1264b3647d | ||
|
|
c52c4e5d14 | ||
|
|
c5a9d2ca9e | ||
|
|
ffd082a6a3 | ||
|
|
037b4f1485 | ||
|
|
a63f8b7b36 | ||
|
|
0ffd87f1c1 | ||
|
|
636d8e4de6 | ||
|
|
961326c505 | ||
|
|
dbb3ab5cbf | ||
|
|
064a690515 | ||
|
|
a75cacdac4 | ||
|
|
b76733d8e8 | ||
|
|
1795c69aaa | ||
|
|
f5f157b83f | ||
|
|
70b8cb9ce8 | ||
|
|
218be95903 | ||
|
|
6041fc85ea | ||
|
|
0ad72bf1a0 | ||
|
|
1cab453ff8 | ||
|
|
fb4f40a0dc | ||
|
|
e935293e17 | ||
|
|
89ec3a2911 | ||
|
|
5283410568 | ||
|
|
d33f69a447 | ||
|
|
09ec3af166 | ||
|
|
c7c3262774 | ||
|
|
9b7449bae6 | ||
|
|
63e1da9278 | ||
|
|
1bcf81e042 | ||
|
|
25ef6ace70 | ||
|
|
f5352da490 | ||
|
|
d30d379beb | ||
|
|
8a6894ca3e | ||
|
|
ba51c7da40 | ||
|
|
fecba4e269 | ||
|
|
334bd22e75 | ||
|
|
2d2d8fae3d | ||
|
|
094eeff0ba | ||
|
|
16bfd689d0 | ||
|
|
c975e99ca9 | ||
|
|
ad6ae48939 | ||
|
|
dc01ba7b0c | ||
|
|
8e29623077 | ||
|
|
a486abd419 | ||
|
|
947e23dae3 | ||
|
|
a00ebb5117 | ||
|
|
b881100aab | ||
|
|
c4656e0d88 | ||
|
|
75b8953a2c | ||
|
|
3e0753b0f5 | ||
|
|
f59d8f0b64 |
1
.gitignore
vendored
@@ -34,6 +34,7 @@ src/qt/test/moc*.cpp
|
||||
*.rej
|
||||
*.orig
|
||||
*.o
|
||||
*.o-*
|
||||
*.patch
|
||||
.bitcoin
|
||||
*.a
|
||||
|
||||
7
.tx/config
Normal file
@@ -0,0 +1,7 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
|
||||
[bitcoin.tx]
|
||||
file_filter = src/qt/locale/bitcoin_<lang>.ts
|
||||
source_file = src/qt/locale/bitcoin_en.ts
|
||||
source_lang = en
|
||||
34
Makefile.am
@@ -15,6 +15,7 @@ OSX_DEPLOY_SCRIPT=$(top_srcdir)/contrib/macdeploy/macdeployqtplus
|
||||
OSX_FANCY_PLIST=$(top_srcdir)/contrib/macdeploy/fancy.plist
|
||||
OSX_INSTALLER_ICONS=$(top_srcdir)/src/qt/res/icons/bitcoin.icns
|
||||
OSX_PLIST=$(top_srcdir)/share/qt/Info.plist #not installed
|
||||
OSX_QT_TRANSLATIONS = da,de,es,hu,ru,uk,zh_CN,zh_TW
|
||||
|
||||
DIST_DOCS = $(wildcard doc/*.md) $(wildcard doc/release-notes/*.md)
|
||||
|
||||
@@ -24,7 +25,8 @@ WINDOWS_PACKAGING = $(top_srcdir)/share/pixmaps/bitcoin.ico \
|
||||
$(top_srcdir)/doc/README_windows.txt
|
||||
|
||||
OSX_PACKAGING = $(OSX_DEPLOY_SCRIPT) $(OSX_FANCY_PLIST) $(OSX_INSTALLER_ICONS) \
|
||||
$(top_srcdir)/contrib/macdeploy/background.png
|
||||
$(top_srcdir)/contrib/macdeploy/background.png \
|
||||
$(top_srcdir)/contrib/macdeploy/DS_Store
|
||||
|
||||
COVERAGE_INFO = baseline_filtered_combined.info baseline.info block_test.info \
|
||||
leveldb_baseline.info test_bitcoin_filtered.info total_coverage.info \
|
||||
@@ -45,9 +47,9 @@ distcleancheck:
|
||||
|
||||
$(BITCOIN_WIN_INSTALLER): $(BITCOIND_BIN) $(BITCOIN_QT_BIN) $(BITCOIN_CLI_BIN)
|
||||
$(MKDIR_P) $(top_builddir)/release
|
||||
$(INSTALL_STRIP_PROGRAM) $(BITCOIND_BIN) $(top_builddir)/release
|
||||
$(INSTALL_STRIP_PROGRAM) $(BITCOIN_QT_BIN) $(top_builddir)/release
|
||||
$(INSTALL_STRIP_PROGRAM) $(BITCOIN_CLI_BIN) $(top_builddir)/release
|
||||
STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIND_BIN) $(top_builddir)/release
|
||||
STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIN_QT_BIN) $(top_builddir)/release
|
||||
STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIN_CLI_BIN) $(top_builddir)/release
|
||||
@test -f $(MAKENSIS) && $(MAKENSIS) $(top_builddir)/share/setup.nsi || \
|
||||
echo error: could not build $@
|
||||
|
||||
@@ -64,23 +66,33 @@ $(OSX_APP)/Contents/Resources/empty.lproj:
|
||||
|
||||
$(OSX_APP)/Contents/Info.plist: $(OSX_PLIST)
|
||||
$(MKDIR_P) $(@D)
|
||||
$(INSTALL) $< $@
|
||||
$(INSTALL_DATA) $< $@
|
||||
|
||||
$(OSX_APP)/Contents/Resources/bitcoin.icns: $(OSX_INSTALLER_ICONS)
|
||||
$(MKDIR_P) $(@D)
|
||||
$(INSTALL) $< $@
|
||||
$(INSTALL_DATA) $< $@
|
||||
|
||||
$(OSX_APP)/Contents/MacOS/Bitcoin-Qt: $(BITCOIN_QT_BIN)
|
||||
$(MKDIR_P) $(@D)
|
||||
$(INSTALL_STRIP_PROGRAM) $< $@
|
||||
STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $< $@
|
||||
|
||||
OSX_APP_BUILT=$(OSX_APP)/Contents/PkgInfo $(OSX_APP)/Contents/Resources/empty.lproj \
|
||||
$(OSX_APP)/Contents/Resources/bitcoin.icns $(OSX_APP)/Contents/Info.plist \
|
||||
$(OSX_APP)/Contents/MacOS/Bitcoin-Qt
|
||||
|
||||
if BUILD_DARWIN
|
||||
$(OSX_DMG): $(OSX_APP_BUILT) $(OSX_PACKAGING)
|
||||
$(OSX_DEPLOY_SCRIPT) $(OSX_APP) -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy $(OSX_FANCY_PLIST) -verbose 2
|
||||
$(OSX_DEPLOY_SCRIPT) $(OSX_APP) -add-qt-tr $(OSX_QT_TRANSLATIONS) -dmg -fancy $(OSX_FANCY_PLIST) -verbose 2
|
||||
|
||||
else
|
||||
$(OSX_DMG): $(OSX_APP_BUILT) $(OSX_PACKAGING)
|
||||
INSTALLNAMETOOL=$(INSTALLNAMETOOL) OTOOL=$(OTOOL) STRIP=$(STRIP) $(OSX_DEPLOY_SCRIPT) $(OSX_APP) -add-qt-tr $(OSX_QT_TRANSLATIONS) -verbose 2
|
||||
$(MKDIR_P) dist/.background
|
||||
$(INSTALL) contrib/macdeploy/background.png dist/.background
|
||||
$(INSTALL) contrib/macdeploy/DS_Store dist/.DS_Store
|
||||
cd dist; $(LN_S) /Applications Applications
|
||||
$(GENISOIMAGE) -no-cache-inodes -l -probe -V "Bitcoin-Qt" -no-pad -r -apple -o $@ dist
|
||||
endif
|
||||
|
||||
if TARGET_DARWIN
|
||||
appbundle: $(OSX_APP_BUILT)
|
||||
@@ -150,11 +162,11 @@ check-local:
|
||||
@qa/pull-tester/run-bitcoind-for-test.sh $(JAVA) -jar $(JAVA_COMPARISON_TOOL) qa/tmp/compTool $(COMPARISON_TOOL_REORG_TESTS)
|
||||
endif
|
||||
|
||||
EXTRA_DIST = $(top_srcdir)/share/genbuild.sh qa/pull-tester/pull-tester.sh $(DIST_DOCS) $(WINDOWS_PACKAGING) $(OSX_PACKAGING)
|
||||
EXTRA_DIST = $(top_srcdir)/share/genbuild.sh qa/pull-tester/pull-tester.sh qa/rpc-tests $(DIST_DOCS) $(WINDOWS_PACKAGING) $(OSX_PACKAGING)
|
||||
|
||||
CLEANFILES = $(OSX_DMG) $(OSX_APP) $(BITCOIN_WIN_INSTALLER)
|
||||
CLEANFILES = $(OSX_DMG) $(BITCOIN_WIN_INSTALLER)
|
||||
|
||||
.INTERMEDIATE: $(COVERAGE_INFO)
|
||||
|
||||
clean-local:
|
||||
rm -rf test_bitcoin.coverage/ total.coverage/
|
||||
rm -rf test_bitcoin.coverage/ total.coverage/ $(OSX_APP)
|
||||
|
||||
21
README
@@ -1,21 +0,0 @@
|
||||
AuthServiceProxy is an improved version of python-jsonrpc.
|
||||
|
||||
It includes the following generic improvements:
|
||||
|
||||
- HTTP connections persist for the life of the AuthServiceProxy object
|
||||
- sends protocol 'version', per JSON-RPC 1.1
|
||||
- sends proper, incrementing 'id'
|
||||
- uses standard Python json lib
|
||||
|
||||
It also includes the following bitcoin-specific details:
|
||||
|
||||
- sends Basic HTTP authentication headers
|
||||
- parses all JSON numbers that look like floats as Decimal
|
||||
|
||||
Installation:
|
||||
|
||||
- change the first line of setup.py to point to the directory of your installation of python 2.*
|
||||
- run setup.py
|
||||
|
||||
Note: This will only install bitcoinrpc. If you also want to install jsonrpc to preserve
|
||||
backwards compatibility, you have to replace 'bitcoinrpc' with 'jsonrpc' in setup.py and run it again.
|
||||
49
README.md
@@ -3,7 +3,7 @@ Bitcoin Core integration/staging tree
|
||||
|
||||
http://www.bitcoin.org
|
||||
|
||||
Copyright (c) 2009-2013 Bitcoin Core Developers
|
||||
Copyright (c) 2009-2015 Bitcoin Core Developers
|
||||
|
||||
What is Bitcoin?
|
||||
----------------
|
||||
@@ -69,3 +69,50 @@ for the build/test scripts.
|
||||
Large changes should have a test plan, and should be tested by somebody other
|
||||
than the developer who wrote the code.
|
||||
See https://github.com/bitcoin/QA/ for how to create a test plan.
|
||||
|
||||
Translations
|
||||
------------
|
||||
|
||||
Changes to translations as well as new translations can be submitted to
|
||||
[Bitcoin Core's Transifex page](https://www.transifex.com/projects/p/bitcoin/).
|
||||
|
||||
Periodically the translations are pulled from Transifex and merged into the git repository. See the
|
||||
[translation process](doc/translation_process.md) for details on how this works.
|
||||
|
||||
**Important**: We do not accept translation changes as github pull request because the next
|
||||
pull from Transifex would automatically overwrite them again.
|
||||
|
||||
Development tips and tricks
|
||||
---------------------------
|
||||
|
||||
**compiling for debugging**
|
||||
|
||||
Run configure with the --enable-debug option, then make. Or run configure with
|
||||
CXXFLAGS="-g -ggdb -O0" or whatever debug flags you need.
|
||||
|
||||
**debug.log**
|
||||
|
||||
If the code is behaving strangely, take a look in the debug.log file in the data directory;
|
||||
error and debugging message are written there.
|
||||
|
||||
The -debug=... command-line option controls debugging; running with just -debug will turn
|
||||
on all categories (and give you a very large debug.log file).
|
||||
|
||||
The Qt code routes qDebug() output to debug.log under category "qt": run with -debug=qt
|
||||
to see it.
|
||||
|
||||
**testnet and regtest modes**
|
||||
|
||||
Run with the -testnet option to run with "play bitcoins" on the test network, if you
|
||||
are testing multi-machine code that needs to operate across the internet.
|
||||
|
||||
If you are testing something that can run on one machine, run with the -regtest option.
|
||||
In regression test mode blocks can be created on-demand; see qa/rpc-tests/ for tests
|
||||
that run in -regest mode.
|
||||
|
||||
**DEBUG_LOCKORDER**
|
||||
|
||||
Bitcoin Core is a multithreaded application, and deadlocks or other multithreading bugs
|
||||
can be very difficult to track down. Compiling with -DDEBUG_LOCKORDER (configure
|
||||
CXXFLAGS="-DDEBUG_LOCKORDER -g") inserts run-time checks to keep track of what locks
|
||||
are held, and adds warning to the debug.log file if inconsistencies are detected.
|
||||
|
||||
138
configure.ac
@@ -2,10 +2,10 @@ dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
|
||||
AC_PREREQ([2.60])
|
||||
define(_CLIENT_VERSION_MAJOR, 0)
|
||||
define(_CLIENT_VERSION_MINOR, 9)
|
||||
define(_CLIENT_VERSION_REVISION, 0)
|
||||
define(_CLIENT_VERSION_REVISION, 5)
|
||||
define(_CLIENT_VERSION_BUILD, 0)
|
||||
define(_CLIENT_VERSION_IS_RELEASE, true)
|
||||
define(_COPYRIGHT_YEAR, 2014)
|
||||
define(_COPYRIGHT_YEAR, 2015)
|
||||
AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[info@bitcoin.org],[bitcoin])
|
||||
AC_CONFIG_AUX_DIR([src/build-aux])
|
||||
AC_CONFIG_MACRO_DIR([src/m4])
|
||||
@@ -62,13 +62,6 @@ AC_ARG_ENABLE([upnp-default],
|
||||
[use_upnp_default=$enableval],
|
||||
[use_upnp_default=no])
|
||||
|
||||
dnl enable ipv6 support
|
||||
AC_ARG_ENABLE([ipv6],
|
||||
[AS_HELP_STRING([--enable-ipv6],
|
||||
[enable ipv6 (default is yes)])],
|
||||
[use_ipv6=$enableval],
|
||||
[use_ipv6=yes])
|
||||
|
||||
AC_ARG_ENABLE(tests,
|
||||
AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
|
||||
[use_tests=$enableval],
|
||||
@@ -108,6 +101,12 @@ AC_ARG_ENABLE([lcov],
|
||||
[use_lcov=yes],
|
||||
[use_lcov=no])
|
||||
|
||||
AC_ARG_ENABLE([glibc-back-compat],
|
||||
[AS_HELP_STRING([--enable-glibc-back-compat],
|
||||
[enable backwards compatibility with glibc and libstdc++])],
|
||||
[use_glibc_compat=$enableval],
|
||||
[use_glibc_compat=no])
|
||||
|
||||
AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
|
||||
|
||||
|
||||
@@ -121,6 +120,7 @@ AC_PROG_CPP
|
||||
AC_PROG_CXXCPP
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_OBJC
|
||||
AC_PROG_LN_S
|
||||
m4_ifdef([AC_PROG_OBJCXX],[AC_PROG_OBJCXX])
|
||||
AC_PROG_MKDIR_P
|
||||
AC_PROG_SED
|
||||
@@ -137,6 +137,23 @@ AC_PATH_PROG(XGETTEXT,xgettext)
|
||||
AC_PATH_PROG(HEXDUMP,hexdump)
|
||||
PKG_PROG_PKG_CONFIG
|
||||
|
||||
# Enable debug
|
||||
AC_ARG_ENABLE([debug],
|
||||
[AS_HELP_STRING([--enable-debug],
|
||||
[use debug compiler flags and macros (default is no)])],
|
||||
[enable_debug=$enableval],
|
||||
[enable_debug=no])
|
||||
|
||||
if test "x$enable_debug" = xyes; then
|
||||
if test "x$GCC" = xyes; then
|
||||
CFLAGS="-g3 -O0 -DDEBUG"
|
||||
fi
|
||||
|
||||
if test "x$GXX" = xyes; then
|
||||
CXXFLAGS="-g3 -O0 -DDEBUG"
|
||||
fi
|
||||
fi
|
||||
|
||||
## TODO: Remove these hard-coded paths and flags. They are here for the sake of
|
||||
## compatibility with the legacy buildsystem.
|
||||
##
|
||||
@@ -205,6 +222,7 @@ case $host in
|
||||
TARGET_OS=darwin
|
||||
LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
|
||||
if test x$cross_compiling != xyes; then
|
||||
BUILD_OS=darwin
|
||||
AC_CHECK_PROG([PORT],port, port)
|
||||
if test x$PORT = xport; then
|
||||
dnl add default macports paths
|
||||
@@ -214,13 +232,37 @@ case $host in
|
||||
|
||||
AC_CHECK_PROG([BREW],brew, brew)
|
||||
if test x$BREW = xbrew; then
|
||||
dnl add default homebrew paths
|
||||
openssl_prefix=`$BREW --prefix openssl`
|
||||
bdb_prefix=`$BREW --prefix berkeley-db4`
|
||||
export PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
|
||||
CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
|
||||
LIBS="$LIBS -L$bdb_prefix/lib"
|
||||
dnl These Homebrew packages may be bottled, meaning that they won't be found
|
||||
dnl in expected paths because they may conflict with system files. Ask
|
||||
dnl Homebrew where each one is located, then adjust paths accordingly.
|
||||
dnl It's safe to add these paths even if the functionality is disabled by
|
||||
dnl the user (--without-wallet or --without-gui for example).
|
||||
|
||||
openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
|
||||
bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
|
||||
qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
|
||||
if test x$openssl_prefix != x; then
|
||||
export PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
|
||||
fi
|
||||
if test x$bdb_prefix != x; then
|
||||
CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
|
||||
LIBS="$LIBS -L$bdb_prefix/lib"
|
||||
fi
|
||||
if test x$qt5_prefix != x; then
|
||||
export PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
case $build_os in
|
||||
*darwin*)
|
||||
BUILD_OS=darwin
|
||||
;;
|
||||
*)
|
||||
AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
|
||||
AC_PATH_TOOL([OTOOL], [otool], otool)
|
||||
AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
CPPFLAGS="$CPPFLAGS -DMAC_OSX"
|
||||
@@ -274,6 +316,8 @@ INCLUDES="$INCLUDES $PTHREAD_CFLAGS"
|
||||
# they also need to be passed down to any subprojects. Pull the results out of
|
||||
# the cache and add them to CPPFLAGS.
|
||||
AC_SYS_LARGEFILE
|
||||
# detect POSIX or GNU variant of strerror_r
|
||||
AC_FUNC_STRERROR_R
|
||||
|
||||
if test x$ac_cv_sys_file_offset_bits != x &&
|
||||
test x$ac_cv_sys_file_offset_bits != xno &&
|
||||
@@ -289,6 +333,24 @@ fi
|
||||
|
||||
AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
|
||||
|
||||
if test x$use_glibc_compat != xno; then
|
||||
|
||||
#__fdelt_chk's params and return type have changed from long unsigned int to long int.
|
||||
# See which one is present here.
|
||||
AC_MSG_CHECKING(__fdelt_chk type)
|
||||
AC_TRY_COMPILE([#ifdef _FORTIFY_SOURCE
|
||||
#undef _FORTIFY_SOURCE
|
||||
#endif
|
||||
#define _FORTIFY_SOURCE 2
|
||||
#include <sys/select.h>
|
||||
extern "C" long unsigned int __fdelt_warn(long unsigned int);],[],
|
||||
[ fdelt_type="long unsigned int"],
|
||||
[ fdelt_type="long int"])
|
||||
AC_MSG_RESULT($fdelt_type)
|
||||
AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
|
||||
|
||||
fi
|
||||
|
||||
if test x$use_hardening != xno; then
|
||||
AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
|
||||
AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
|
||||
@@ -374,7 +436,7 @@ if test x$use_tests = xyes; then
|
||||
dnl Determine if -DBOOST_TEST_DYN_LINK is needed
|
||||
AC_MSG_CHECKING([for dynamic linked boost test])
|
||||
TEMP_LIBS="$LIBS"
|
||||
LIBS="$LIBS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
|
||||
LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
|
||||
TEMP_CPPFLAGS="$CPPFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
|
||||
AC_LINK_IFELSE([AC_LANG_SOURCE([
|
||||
@@ -447,7 +509,7 @@ CPPFLAGS="$TEMP_CPPFLAGS"
|
||||
fi
|
||||
|
||||
if test x$boost_sleep != xyes; then
|
||||
AC_MSG_ERROR(No working boost sleep implementation found. If on ubuntu 13.10 with libboost1.54-all-dev remove libboost.1.54-all-dev and use libboost1.53-all-dev)
|
||||
AC_MSG_ERROR(No working boost sleep implementation found.)
|
||||
fi
|
||||
|
||||
AC_ARG_WITH([cli],
|
||||
@@ -509,27 +571,6 @@ AC_MSG_RESULT($build_bitcoin_cli)
|
||||
dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
|
||||
BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
|
||||
|
||||
|
||||
if test x$use_ipv6 = xyes; then
|
||||
dnl Check for ipv6 build requirements
|
||||
AC_MSG_CHECKING(for operating system IPv6 support)
|
||||
AC_TRY_LINK([
|
||||
#if defined(_WINDOWS)
|
||||
#include <winsock2.h>
|
||||
#else
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
],[
|
||||
#if !defined(_WINDOWS)
|
||||
struct in6_addr ipv6Addr;
|
||||
struct sockaddr_in6 addr;
|
||||
#endif
|
||||
int temp = socket(AF_INET6, SOCK_STREAM, 0);],
|
||||
[AC_MSG_RESULT(yes); have_ipv6=yes; AC_DEFINE(HAVE_IPV6, 1, [Define this symbol if you have operating system IPv6 support])],
|
||||
[AC_MSG_RESULT(no)]; have_ipv6=no)
|
||||
fi
|
||||
AC_LANG_POP
|
||||
|
||||
if test "x$use_ccache" != "xno"; then
|
||||
@@ -558,22 +599,6 @@ else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
|
||||
dnl enable ipv6 support
|
||||
AC_MSG_CHECKING([whether to build with support for IPv6])
|
||||
if test x$have_ipv6 = xno; then
|
||||
if test x$use_ipv6 = xyes; then
|
||||
AC_MSG_ERROR([IPv6 requested, but cannot be built. use --disable-ipv6])
|
||||
fi
|
||||
AC_MSG_RESULT(no)
|
||||
else
|
||||
if test x$use_ipv6 = xyes; then
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE([USE_IPV6],[1],[Define if IPv6 support should be compiled in])
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl enable upnp support
|
||||
AC_MSG_CHECKING([whether to build with support for UPnP])
|
||||
if test x$have_miniupnpc = xno; then
|
||||
@@ -594,7 +619,7 @@ else
|
||||
AC_MSG_RESULT($use_upnp_default)
|
||||
AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
|
||||
if test x$TARGET_OS = xwindows; then
|
||||
CPPFLAGS="$CPPFLAGS -DSTATICLIB"
|
||||
CPPFLAGS="$CPPFLAGS -DMINIUPNP_STATICLIB"
|
||||
fi
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
@@ -654,12 +679,14 @@ if test "x$use_tests$build_bitcoind$use_qt" = "xnonono"; then
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
|
||||
AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
|
||||
AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
|
||||
AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet == xyes])
|
||||
AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
|
||||
AM_CONDITIONAL([USE_LCOV],[test x$use_lcov == xyes])
|
||||
AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
|
||||
AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
|
||||
AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
|
||||
|
||||
AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
|
||||
AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
|
||||
@@ -677,7 +704,6 @@ AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
|
||||
|
||||
AC_SUBST(USE_UPNP)
|
||||
AC_SUBST(USE_QRCODE)
|
||||
AC_SUBST(USE_IPV6)
|
||||
AC_SUBST(INCLUDES)
|
||||
AC_SUBST(BOOST_LIBS)
|
||||
AC_SUBST(TESTDEFS)
|
||||
|
||||
@@ -1,24 +1,38 @@
|
||||
Python Tools
|
||||
Wallet Tools
|
||||
---------------------
|
||||
|
||||
### [BitRPC](/contrib/bitrpc) ###
|
||||
Allows for sending of all standard Bitcoin commands via RPC rather than as command line args.
|
||||
|
||||
### [PyMiner](/contrib/pyminer) ###
|
||||
|
||||
This is a 'getwork' CPU mining client for Bitcoin. It is pure-python, and therefore very, very slow. The purpose is to provide a reference implementation of a miner, for study.
|
||||
|
||||
### [SpendFrom](/contrib/spendfrom) ###
|
||||
|
||||
Use the raw transactions API to send coins received on a particular
|
||||
address (or addresses).
|
||||
|
||||
### WalletTools
|
||||
Removed. Please see [/contrib/bitrpc](/contrib/bitrpc).
|
||||
|
||||
Repository Tools
|
||||
---------------------
|
||||
|
||||
### [Developer tools](/contrib/devtools) ###
|
||||
Specific tools for developers working on this repository.
|
||||
Contains the script `github-merge.sh` for merging github pull requests securely and signing them using GPG.
|
||||
|
||||
### [Linearize](/contrib/linearize) ###
|
||||
Construct a linear, no-fork, best version of the blockchain.
|
||||
|
||||
### [PyMiner](/contrib/pyminer) ###
|
||||
|
||||
This is a 'getwork' CPU mining client for Bitcoin. It is pure-python, and therefore very, very slow. The purpose is to provide a reference implementation of a miner, for study.
|
||||
|
||||
### [Qos](/contrib/qos) ###
|
||||
|
||||
A Linux bash script that will set up tc to limit the outgoing bandwidth for connections to the Bitcoin network. This means one can have an always-on bitcoind instance running, and another local bitcoind/bitcoin-qt instance which connects to this node and receives blocks from it.
|
||||
|
||||
### [Seeds](/contrib/seeds) ###
|
||||
Utility to generate the pnSeed[] array that is compiled into the client.
|
||||
|
||||
Build Tools and Keys
|
||||
---------------------
|
||||
|
||||
### [Debian](/contrib/debian) ###
|
||||
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.
|
||||
@@ -29,18 +43,11 @@ Gavin's notes on getting gitian builds up and running using KVM.
|
||||
### [Gitian-downloader](/contrib/gitian-downloader)
|
||||
Various PGP files of core developers.
|
||||
|
||||
### [Linearize](/contrib/linearize) ###
|
||||
Construct a linear, no-fork, best version of the blockchain.
|
||||
|
||||
### [MacDeploy](/contrib/macdeploy) ###
|
||||
Scripts and notes for Mac builds.
|
||||
|
||||
### [Qos](/contrib/qos) ###
|
||||
|
||||
A Linux bash script that will set up tc to limit the outgoing bandwidth for connections to the Bitcoin network. This means one can have an always-on bitcoind instance running, and another local bitcoind/bitcoin-qt instance which connects to this node and receives blocks from it.
|
||||
|
||||
### [Seeds](/contrib/seeds) ###
|
||||
Utility to generate the pnSeed[] array that is compiled into the client.
|
||||
Test and Verify Tools
|
||||
---------------------
|
||||
|
||||
### [TestGen](/contrib/testgen) ###
|
||||
Utilities to generate test vectors for the data-driven Bitcoin tests.
|
||||
@@ -51,8 +58,3 @@ tests each pull and when master is tested using jenkins.
|
||||
|
||||
### [Verify SF Binaries](/contrib/verifysfbinaries) ###
|
||||
This script attempts to download and verify the signature file SHA256SUMS.asc from SourceForge.
|
||||
|
||||
### [Developer tools](/contrib/devtools) ###
|
||||
Specific tools for developers working on this repository.
|
||||
Contains the script `github-merge.sh` for merging github pull requests securely and signing them using GPG.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# bash programmable completion for bitcoind(1)
|
||||
# Copyright (c) 2012 Christian von Roques <roques@mti.ag>
|
||||
# bash programmable completion for bitcoind(1) and bitcoin-cli(1)
|
||||
# Copyright (c) 2012,2014 Christian von Roques <roques@mti.ag>
|
||||
# Distributed under the MIT/X11 software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
@@ -37,9 +37,35 @@ _bitcoind() {
|
||||
COMPREPLY=()
|
||||
_get_comp_words_by_ref -n = cur prev words cword
|
||||
|
||||
if ((cword > 4)); then
|
||||
case ${words[cword-4]} in
|
||||
signrawtransaction)
|
||||
COMPREPLY=( $( compgen -W "ALL NONE SINGLE ALL|ANYONECANPAY NONE|ANYONECANPAY SINGLE|ANYONECANPAY" -- "$cur" ) )
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
if ((cword > 3)); then
|
||||
case ${words[cword-3]} in
|
||||
addmultisigaddress)
|
||||
_bitcoin_accounts
|
||||
return 0
|
||||
;;
|
||||
gettxout|importprivkey)
|
||||
COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
if ((cword > 2)); then
|
||||
case ${words[cword-2]} in
|
||||
listreceivedbyaccount|listreceivedbyaddress)
|
||||
addnode)
|
||||
COMPREPLY=( $( compgen -W "add remove onetry" -- "$cur" ) )
|
||||
return 0
|
||||
;;
|
||||
getblock|getrawtransaction|listreceivedbyaccount|listreceivedbyaddress|sendrawtransaction)
|
||||
COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
|
||||
return 0
|
||||
;;
|
||||
@@ -51,11 +77,11 @@ _bitcoind() {
|
||||
fi
|
||||
|
||||
case "$prev" in
|
||||
backupwallet)
|
||||
backupwallet|dumpwallet|importwallet)
|
||||
_filedir
|
||||
return 0
|
||||
;;
|
||||
setgenerate)
|
||||
getmempool|lockunspent|setgenerate)
|
||||
COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
|
||||
return 0
|
||||
;;
|
||||
@@ -66,7 +92,7 @@ _bitcoind() {
|
||||
esac
|
||||
|
||||
case "$cur" in
|
||||
-conf=*|-pid=*|-rpcsslcertificatechainfile=*|-rpcsslprivatekeyfile=*)
|
||||
-conf=*|-pid=*|-loadblock=*|-wallet=*|-rpcsslcertificatechainfile=*|-rpcsslprivatekeyfile=*)
|
||||
cur="${cur#*=}"
|
||||
_filedir
|
||||
return 0
|
||||
@@ -103,7 +129,7 @@ _bitcoind() {
|
||||
esac
|
||||
}
|
||||
|
||||
complete -F _bitcoind bitcoind
|
||||
complete -F _bitcoind bitcoind bitcoin-cli
|
||||
}
|
||||
|
||||
# Local variables:
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
from jsonrpc import ServiceProxy
|
||||
import sys
|
||||
import string
|
||||
import getpass
|
||||
|
||||
# ===== BEGIN USER SETTINGS =====
|
||||
# if you do not set these you will be prompted for a password for every command
|
||||
@@ -10,315 +11,315 @@ rpcpass = ""
|
||||
|
||||
|
||||
if rpcpass == "":
|
||||
access = ServiceProxy("http://127.0.0.1:8332")
|
||||
access = ServiceProxy("http://127.0.0.1:8332")
|
||||
else:
|
||||
access = ServiceProxy("http://"+rpcuser+":"+rpcpass+"@127.0.0.1:8332")
|
||||
access = ServiceProxy("http://"+rpcuser+":"+rpcpass+"@127.0.0.1:8332")
|
||||
cmd = sys.argv[1].lower()
|
||||
|
||||
if cmd == "backupwallet":
|
||||
try:
|
||||
path = raw_input("Enter destination path/filename: ")
|
||||
print access.backupwallet(path)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
path = raw_input("Enter destination path/filename: ")
|
||||
print access.backupwallet(path)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "getaccount":
|
||||
try:
|
||||
addr = raw_input("Enter a Bitcoin address: ")
|
||||
print access.getaccount(addr)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
addr = raw_input("Enter a Bitcoin address: ")
|
||||
print access.getaccount(addr)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "getaccountaddress":
|
||||
try:
|
||||
acct = raw_input("Enter an account name: ")
|
||||
print access.getaccountaddress(acct)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
acct = raw_input("Enter an account name: ")
|
||||
print access.getaccountaddress(acct)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "getaddressesbyaccount":
|
||||
try:
|
||||
acct = raw_input("Enter an account name: ")
|
||||
print access.getaddressesbyaccount(acct)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
acct = raw_input("Enter an account name: ")
|
||||
print access.getaddressesbyaccount(acct)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "getbalance":
|
||||
try:
|
||||
acct = raw_input("Enter an account (optional): ")
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
try:
|
||||
print access.getbalance(acct, mc)
|
||||
except:
|
||||
print access.getbalance()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
acct = raw_input("Enter an account (optional): ")
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
try:
|
||||
print access.getbalance(acct, mc)
|
||||
except:
|
||||
print access.getbalance()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "getblockbycount":
|
||||
try:
|
||||
height = raw_input("Height: ")
|
||||
print access.getblockbycount(height)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
height = raw_input("Height: ")
|
||||
print access.getblockbycount(height)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "getblockcount":
|
||||
try:
|
||||
print access.getblockcount()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
print access.getblockcount()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "getblocknumber":
|
||||
try:
|
||||
print access.getblocknumber()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
print access.getblocknumber()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "getconnectioncount":
|
||||
try:
|
||||
print access.getconnectioncount()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
print access.getconnectioncount()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "getdifficulty":
|
||||
try:
|
||||
print access.getdifficulty()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
print access.getdifficulty()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "getgenerate":
|
||||
try:
|
||||
print access.getgenerate()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
print access.getgenerate()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "gethashespersec":
|
||||
try:
|
||||
print access.gethashespersec()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
print access.gethashespersec()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "getinfo":
|
||||
try:
|
||||
print access.getinfo()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
print access.getinfo()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "getnewaddress":
|
||||
try:
|
||||
acct = raw_input("Enter an account name: ")
|
||||
try:
|
||||
print access.getnewaddress(acct)
|
||||
except:
|
||||
print access.getnewaddress()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
acct = raw_input("Enter an account name: ")
|
||||
try:
|
||||
print access.getnewaddress(acct)
|
||||
except:
|
||||
print access.getnewaddress()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "getreceivedbyaccount":
|
||||
try:
|
||||
acct = raw_input("Enter an account (optional): ")
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
try:
|
||||
print access.getreceivedbyaccount(acct, mc)
|
||||
except:
|
||||
print access.getreceivedbyaccount()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
acct = raw_input("Enter an account (optional): ")
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
try:
|
||||
print access.getreceivedbyaccount(acct, mc)
|
||||
except:
|
||||
print access.getreceivedbyaccount()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "getreceivedbyaddress":
|
||||
try:
|
||||
addr = raw_input("Enter a Bitcoin address (optional): ")
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
try:
|
||||
print access.getreceivedbyaddress(addr, mc)
|
||||
except:
|
||||
print access.getreceivedbyaddress()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
addr = raw_input("Enter a Bitcoin address (optional): ")
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
try:
|
||||
print access.getreceivedbyaddress(addr, mc)
|
||||
except:
|
||||
print access.getreceivedbyaddress()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "gettransaction":
|
||||
try:
|
||||
txid = raw_input("Enter a transaction ID: ")
|
||||
print access.gettransaction(txid)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
txid = raw_input("Enter a transaction ID: ")
|
||||
print access.gettransaction(txid)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "getwork":
|
||||
try:
|
||||
data = raw_input("Data (optional): ")
|
||||
try:
|
||||
print access.gettransaction(data)
|
||||
except:
|
||||
print access.gettransaction()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
data = raw_input("Data (optional): ")
|
||||
try:
|
||||
print access.gettransaction(data)
|
||||
except:
|
||||
print access.gettransaction()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "help":
|
||||
try:
|
||||
cmd = raw_input("Command (optional): ")
|
||||
try:
|
||||
print access.help(cmd)
|
||||
except:
|
||||
print access.help()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
cmd = raw_input("Command (optional): ")
|
||||
try:
|
||||
print access.help(cmd)
|
||||
except:
|
||||
print access.help()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "listaccounts":
|
||||
try:
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
try:
|
||||
print access.listaccounts(mc)
|
||||
except:
|
||||
print access.listaccounts()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
try:
|
||||
print access.listaccounts(mc)
|
||||
except:
|
||||
print access.listaccounts()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "listreceivedbyaccount":
|
||||
try:
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
incemp = raw_input("Include empty? (true/false, optional): ")
|
||||
try:
|
||||
print access.listreceivedbyaccount(mc, incemp)
|
||||
except:
|
||||
print access.listreceivedbyaccount()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
incemp = raw_input("Include empty? (true/false, optional): ")
|
||||
try:
|
||||
print access.listreceivedbyaccount(mc, incemp)
|
||||
except:
|
||||
print access.listreceivedbyaccount()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "listreceivedbyaddress":
|
||||
try:
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
incemp = raw_input("Include empty? (true/false, optional): ")
|
||||
try:
|
||||
print access.listreceivedbyaddress(mc, incemp)
|
||||
except:
|
||||
print access.listreceivedbyaddress()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
incemp = raw_input("Include empty? (true/false, optional): ")
|
||||
try:
|
||||
print access.listreceivedbyaddress(mc, incemp)
|
||||
except:
|
||||
print access.listreceivedbyaddress()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "listtransactions":
|
||||
try:
|
||||
acct = raw_input("Account (optional): ")
|
||||
count = raw_input("Number of transactions (optional): ")
|
||||
frm = raw_input("Skip (optional):")
|
||||
try:
|
||||
print access.listtransactions(acct, count, frm)
|
||||
except:
|
||||
print access.listtransactions()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
acct = raw_input("Account (optional): ")
|
||||
count = raw_input("Number of transactions (optional): ")
|
||||
frm = raw_input("Skip (optional):")
|
||||
try:
|
||||
print access.listtransactions(acct, count, frm)
|
||||
except:
|
||||
print access.listtransactions()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "move":
|
||||
try:
|
||||
frm = raw_input("From: ")
|
||||
to = raw_input("To: ")
|
||||
amt = raw_input("Amount:")
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
comment = raw_input("Comment (optional): ")
|
||||
try:
|
||||
print access.move(frm, to, amt, mc, comment)
|
||||
except:
|
||||
print access.move(frm, to, amt)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
frm = raw_input("From: ")
|
||||
to = raw_input("To: ")
|
||||
amt = raw_input("Amount:")
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
comment = raw_input("Comment (optional): ")
|
||||
try:
|
||||
print access.move(frm, to, amt, mc, comment)
|
||||
except:
|
||||
print access.move(frm, to, amt)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "sendfrom":
|
||||
try:
|
||||
frm = raw_input("From: ")
|
||||
to = raw_input("To: ")
|
||||
amt = raw_input("Amount:")
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
comment = raw_input("Comment (optional): ")
|
||||
commentto = raw_input("Comment-to (optional): ")
|
||||
try:
|
||||
print access.sendfrom(frm, to, amt, mc, comment, commentto)
|
||||
except:
|
||||
print access.sendfrom(frm, to, amt)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
frm = raw_input("From: ")
|
||||
to = raw_input("To: ")
|
||||
amt = raw_input("Amount:")
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
comment = raw_input("Comment (optional): ")
|
||||
commentto = raw_input("Comment-to (optional): ")
|
||||
try:
|
||||
print access.sendfrom(frm, to, amt, mc, comment, commentto)
|
||||
except:
|
||||
print access.sendfrom(frm, to, amt)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "sendmany":
|
||||
try:
|
||||
frm = raw_input("From: ")
|
||||
to = raw_input("To (in format address1:amount1,address2:amount2,...): ")
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
comment = raw_input("Comment (optional): ")
|
||||
try:
|
||||
print access.sendmany(frm,to,mc,comment)
|
||||
except:
|
||||
print access.sendmany(frm,to)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
frm = raw_input("From: ")
|
||||
to = raw_input("To (in format address1:amount1,address2:amount2,...): ")
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
comment = raw_input("Comment (optional): ")
|
||||
try:
|
||||
print access.sendmany(frm,to,mc,comment)
|
||||
except:
|
||||
print access.sendmany(frm,to)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "sendtoaddress":
|
||||
try:
|
||||
to = raw_input("To (in format address1:amount1,address2:amount2,...): ")
|
||||
amt = raw_input("Amount:")
|
||||
comment = raw_input("Comment (optional): ")
|
||||
commentto = raw_input("Comment-to (optional): ")
|
||||
try:
|
||||
print access.sendtoaddress(to,amt,comment,commentto)
|
||||
except:
|
||||
print access.sendtoaddress(to,amt)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
to = raw_input("To (in format address1:amount1,address2:amount2,...): ")
|
||||
amt = raw_input("Amount:")
|
||||
comment = raw_input("Comment (optional): ")
|
||||
commentto = raw_input("Comment-to (optional): ")
|
||||
try:
|
||||
print access.sendtoaddress(to,amt,comment,commentto)
|
||||
except:
|
||||
print access.sendtoaddress(to,amt)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "setaccount":
|
||||
try:
|
||||
addr = raw_input("Address: ")
|
||||
acct = raw_input("Account:")
|
||||
print access.setaccount(addr,acct)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
addr = raw_input("Address: ")
|
||||
acct = raw_input("Account:")
|
||||
print access.setaccount(addr,acct)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "setgenerate":
|
||||
try:
|
||||
gen= raw_input("Generate? (true/false): ")
|
||||
cpus = raw_input("Max processors/cores (-1 for unlimited, optional):")
|
||||
try:
|
||||
print access.setgenerate(gen, cpus)
|
||||
except:
|
||||
print access.setgenerate(gen)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
gen= raw_input("Generate? (true/false): ")
|
||||
cpus = raw_input("Max processors/cores (-1 for unlimited, optional):")
|
||||
try:
|
||||
print access.setgenerate(gen, cpus)
|
||||
except:
|
||||
print access.setgenerate(gen)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "settxfee":
|
||||
try:
|
||||
amt = raw_input("Amount:")
|
||||
print access.settxfee(amt)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
amt = raw_input("Amount:")
|
||||
print access.settxfee(amt)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "stop":
|
||||
try:
|
||||
print access.stop()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
print access.stop()
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "validateaddress":
|
||||
try:
|
||||
addr = raw_input("Address: ")
|
||||
print access.validateaddress(addr)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
addr = raw_input("Address: ")
|
||||
print access.validateaddress(addr)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "walletpassphrase":
|
||||
try:
|
||||
pwd = raw_input("Enter wallet passphrase: ")
|
||||
access.walletpassphrase(pwd, 60)
|
||||
print "\n---Wallet unlocked---\n"
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
try:
|
||||
pwd = getpass.getpass(prompt="Enter wallet passphrase: ")
|
||||
access.walletpassphrase(pwd, 60)
|
||||
print "\n---Wallet unlocked---\n"
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
|
||||
elif cmd == "walletpassphrasechange":
|
||||
try:
|
||||
pwd = raw_input("Enter old wallet passphrase: ")
|
||||
pwd2 = raw_input("Enter new wallet passphrase: ")
|
||||
access.walletpassphrasechange(pwd, pwd2)
|
||||
print
|
||||
print "\n---Passphrase changed---\n"
|
||||
except:
|
||||
print
|
||||
print "\n---An error occurred---\n"
|
||||
print
|
||||
try:
|
||||
pwd = getpass.getpass(prompt="Enter old wallet passphrase: ")
|
||||
pwd2 = getpass.getpass(prompt="Enter new wallet passphrase: ")
|
||||
access.walletpassphrasechange(pwd, pwd2)
|
||||
print
|
||||
print "\n---Passphrase changed---\n"
|
||||
except:
|
||||
print
|
||||
print "\n---An error occurred---\n"
|
||||
print
|
||||
|
||||
else:
|
||||
print "Command not found or not supported"
|
||||
print "Command not found or not supported"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
bitcoin-qt usr/bin
|
||||
usr/local/bin/bitcoin-qt usr/bin
|
||||
share/pixmaps/bitcoin32.xpm usr/share/pixmaps
|
||||
share/pixmaps/bitcoin16.xpm usr/share/pixmaps
|
||||
share/pixmaps/bitcoin128.png usr/share/pixmaps
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
src/bitcoind usr/bin
|
||||
usr/local/bin/bitcoind usr/bin
|
||||
usr/local/bin/bitcoin-cli usr/bin
|
||||
|
||||
@@ -1,3 +1,16 @@
|
||||
bitcoin (0.9.1-precise1) precise; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
* Backport pull #4019
|
||||
|
||||
-- Matt Corallo <matt@bluematt.me> Sat, 19 Apr 2014 17:29:00 -0400
|
||||
|
||||
bitcoin (0.9.0-precise1) precise; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matt Corallo <matt@bluematt.me> Thu, 20 Mar 2014 13:10:00 -0400
|
||||
|
||||
bitcoin (0.8.6-precise1) precise; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
|
||||
@@ -5,6 +5,7 @@ Maintainer: Jonas Smedegaard <dr@jones.dk>
|
||||
Uploaders: Micah Anderson <micah@debian.org>
|
||||
Build-Depends: debhelper,
|
||||
devscripts,
|
||||
automake,
|
||||
bash-completion,
|
||||
libboost-system-dev (>> 1.35) | libboost-system1.35-dev,
|
||||
libdb4.8++-dev,
|
||||
@@ -17,7 +18,8 @@ Build-Depends: debhelper,
|
||||
libboost-test-dev (>> 1.35) | libboost-test1.35-dev,
|
||||
qt4-qmake,
|
||||
libqt4-dev,
|
||||
libqrencode-dev
|
||||
libqrencode-dev,
|
||||
libprotobuf-dev, protobuf-compiler
|
||||
Standards-Version: 3.9.2
|
||||
Homepage: http://www.bitcoin.org/
|
||||
Vcs-Git: git://github.com/bitcoin/bitcoin.git
|
||||
@@ -34,10 +36,11 @@ Description: peer-to-peer network based digital currency - daemon
|
||||
check for double-spending.
|
||||
.
|
||||
Full transaction history is stored locally at each client. This
|
||||
requires 2+ GB of space, slowly growing.
|
||||
requires 20+ GB of space, slowly growing.
|
||||
.
|
||||
This package provides bitcoind, a combined daemon and CLI tool to
|
||||
interact with the daemon.
|
||||
|
||||
This package provides the daemon, bitcoind, and the CLI tool
|
||||
bitcoin-cli to interact with the daemon.
|
||||
|
||||
Package: bitcoin-qt
|
||||
Architecture: any
|
||||
@@ -50,6 +53,6 @@ Description: peer-to-peer network based digital currency - Qt GUI
|
||||
check for double-spending.
|
||||
.
|
||||
Full transaction history is stored locally at each client. This
|
||||
requires 2+ GB of space, slowly growing.
|
||||
requires 20+ GB of space, slowly growing.
|
||||
.
|
||||
This package provides Bitcoin-Qt, a GUI for Bitcoin based on Qt.
|
||||
|
||||
@@ -37,9 +37,6 @@ You must set *rpcuser* to secure the JSON-RPC api.
|
||||
\fBrpcpassword=\fR\fI'password'\fR
|
||||
You must set *rpcpassword* to secure the JSON-RPC api.
|
||||
.TP
|
||||
\fBrpctimeout=\fR\fI'30'\fR
|
||||
How many seconds *bitcoin* will wait for a complete RPC HTTP request, after the HTTP connection is established.
|
||||
.TP
|
||||
\fBrpcallowip=\fR\fI'192.168.1.*'\fR
|
||||
By default, only RPC connections from localhost are allowed. Specify as many *rpcallowip=* settings as you like to allow connections from other hosts (and you may use * as a wildcard character).
|
||||
.TP
|
||||
|
||||
@@ -11,23 +11,14 @@ DEB_INSTALL_MANPAGES_bitcoind += debian/manpages/*
|
||||
%:
|
||||
dh --with bash-completion $@
|
||||
|
||||
override_dh_auto_build:
|
||||
cd src; $(MAKE) -f makefile.unix bitcoind
|
||||
$(MAKE)
|
||||
|
||||
override_dh_auto_clean:
|
||||
if [ -f Makefile ]; then $(MAKE) clean; else rm -rf build/; rm -f bitcoin-qt; fi
|
||||
cd src; $(MAKE) -f makefile.unix clean
|
||||
if [ -f Makefile ]; then $(MAKE) distclean; fi
|
||||
rm -rf Makefile.in aclocal.m4 configure src/Makefile.in src/bitcoin-config.h.in src/build-aux src/qt/Makefile.in src/qt/test/Makefile.in src/test/Makefile.in
|
||||
|
||||
# Yea, autogen should be run on the source archive, but I like doing git archive
|
||||
override_dh_auto_configure:
|
||||
qmake bitcoin-qt.pro USE_QRCODE=1
|
||||
./autogen.sh
|
||||
./configure
|
||||
|
||||
override_dh_auto_test:
|
||||
cd src; $(MAKE) -f makefile.unix test_bitcoin
|
||||
src/test_bitcoin
|
||||
|
||||
# Ensure wrapper is set executable
|
||||
binary-post-install/bitcoind:
|
||||
chmod +x $(cdbs_curdestdir)usr/bin/bitcoind
|
||||
binary-post-install/bitcoin-qt:
|
||||
chmod +x $(cdbs_curdestdir)usr/bin/bitcoin-qt
|
||||
make check
|
||||
|
||||
@@ -3,7 +3,7 @@ Contents
|
||||
This directory contains tools for developers working on this repository.
|
||||
|
||||
github-merge.sh
|
||||
----------------
|
||||
==================
|
||||
|
||||
A small script to automate merging pull-requests securely and sign them with GPG.
|
||||
|
||||
@@ -36,7 +36,8 @@ Configuring the github-merge tool for the bitcoin repository is done in the foll
|
||||
git config githubmerge.testcmd "make -j4 check" (adapt to whatever you want to use for testing)
|
||||
git config --global user.signingkey mykeyid (if you want to GPG sign)
|
||||
|
||||
## fix-copyright-headers.py
|
||||
fix-copyright-headers.py
|
||||
===========================
|
||||
|
||||
Every year newly updated files need to have its copyright headers updated to reflect the current year.
|
||||
If you run this script from src/ it will automatically update the year on the copyright header for all
|
||||
@@ -46,4 +47,37 @@ For example a file changed in 2014 (with 2014 being the current year):
|
||||
```// Copyright (c) 2009-2013 The Bitcoin developers```
|
||||
|
||||
would be changed to:
|
||||
```// Copyright (c) 2009-2014 The Bitcoin developers```
|
||||
```// Copyright (c) 2009-2014 The Bitcoin developers```
|
||||
|
||||
symbol-check.py
|
||||
==================
|
||||
|
||||
A script to check that the (Linux) executables produced by gitian only contain
|
||||
allowed gcc, glibc and libstdc++ version symbols. This makes sure they are
|
||||
still compatible with the minimum supported Linux distribution versions.
|
||||
|
||||
Example usage after a gitian build:
|
||||
|
||||
find ../gitian-builder/build -type f -executable | xargs python contrib/devtools/symbol-check.py
|
||||
|
||||
If only supported symbols are used the return value will be 0 and the output will be empty.
|
||||
|
||||
If there are 'unsupported' symbols, the return value will be 1 a list like this will be printed:
|
||||
|
||||
.../64/test_bitcoin: symbol memcpy from unsupported version GLIBC_2.14
|
||||
.../64/test_bitcoin: symbol __fdelt_chk from unsupported version GLIBC_2.15
|
||||
.../64/test_bitcoin: symbol std::out_of_range::~out_of_range() from unsupported version GLIBCXX_3.4.15
|
||||
.../64/test_bitcoin: symbol _ZNSt8__detail15_List_nod from unsupported version GLIBCXX_3.4.15
|
||||
|
||||
update-translations.py
|
||||
=======================
|
||||
|
||||
Run this script from the root of the repository to update all translations from transifex.
|
||||
It will do the following automatically:
|
||||
|
||||
- fetch all translations
|
||||
- post-process them into valid and committable format
|
||||
- add missing translations to the build system (TODO)
|
||||
|
||||
See doc/translation-process.md for more information.
|
||||
|
||||
|
||||
113
contrib/devtools/symbol-check.py
Executable file
@@ -0,0 +1,113 @@
|
||||
#!/usr/bin/python
|
||||
# Copyright (c) 2014 Wladimir J. van der Laan
|
||||
# Distributed under the MIT/X11 software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
'''
|
||||
A script to check that the (Linux) executables produced by gitian only contain
|
||||
allowed gcc, glibc and libstdc++ version symbols. This makes sure they are
|
||||
still compatible with the minimum supported Linux distribution versions.
|
||||
|
||||
Example usage:
|
||||
|
||||
find ../gitian-builder/build -type f -executable | xargs python contrib/devtools/symbol-check.py
|
||||
'''
|
||||
from __future__ import division, print_function
|
||||
import subprocess
|
||||
import re
|
||||
import sys
|
||||
|
||||
# Debian 6.0.9 (Squeeze) has:
|
||||
#
|
||||
# - g++ version 4.4.5 (https://packages.debian.org/search?suite=default§ion=all&arch=any&searchon=names&keywords=g%2B%2B)
|
||||
# - libc version 2.11.3 (https://packages.debian.org/search?suite=default§ion=all&arch=any&searchon=names&keywords=libc6)
|
||||
# - libstdc++ version 4.4.5 (https://packages.debian.org/search?suite=default§ion=all&arch=any&searchon=names&keywords=libstdc%2B%2B6)
|
||||
#
|
||||
# Ubuntu 10.04.4 (Lucid Lynx) has:
|
||||
#
|
||||
# - g++ version 4.4.3 (http://packages.ubuntu.com/search?keywords=g%2B%2B&searchon=names&suite=lucid§ion=all)
|
||||
# - libc version 2.11.1 (http://packages.ubuntu.com/search?keywords=libc6&searchon=names&suite=lucid§ion=all)
|
||||
# - libstdc++ version 4.4.3 (http://packages.ubuntu.com/search?suite=lucid§ion=all&arch=any&keywords=libstdc%2B%2B&searchon=names)
|
||||
#
|
||||
# Taking the minimum of these as our target.
|
||||
#
|
||||
# According to GNU ABI document (http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html) this corresponds to:
|
||||
# GCC 4.4.0: GCC_4.4.0
|
||||
# GCC 4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3
|
||||
# (glibc) GLIBC_2_11
|
||||
#
|
||||
MAX_VERSIONS = {
|
||||
'GCC': (4,4,0),
|
||||
'CXXABI': (1,3,3),
|
||||
'GLIBCXX': (3,4,13),
|
||||
'GLIBC': (2,11)
|
||||
}
|
||||
READELF_CMD = '/usr/bin/readelf'
|
||||
CPPFILT_CMD = '/usr/bin/c++filt'
|
||||
|
||||
class CPPFilt(object):
|
||||
'''
|
||||
Demangle C++ symbol names.
|
||||
|
||||
Use a pipe to the 'c++filt' command.
|
||||
'''
|
||||
def __init__(self):
|
||||
self.proc = subprocess.Popen(CPPFILT_CMD, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
|
||||
|
||||
def __call__(self, mangled):
|
||||
self.proc.stdin.write(mangled + '\n')
|
||||
return self.proc.stdout.readline().rstrip()
|
||||
|
||||
def close(self):
|
||||
self.proc.stdin.close()
|
||||
self.proc.stdout.close()
|
||||
self.proc.wait()
|
||||
|
||||
def read_symbols(executable, imports=True):
|
||||
'''
|
||||
Parse an ELF executable and return a list of (symbol,version) tuples
|
||||
for dynamic, imported symbols.
|
||||
'''
|
||||
p = subprocess.Popen([READELF_CMD, '--dyn-syms', '-W', executable], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
|
||||
(stdout, stderr) = p.communicate()
|
||||
if p.returncode:
|
||||
raise IOError('Could not read symbols for %s: %s' % (executable, stderr.strip()))
|
||||
syms = []
|
||||
for line in stdout.split('\n'):
|
||||
line = line.split()
|
||||
if len(line)>7 and re.match('[0-9]+:$', line[0]):
|
||||
(sym, _, version) = line[7].partition('@')
|
||||
is_import = line[6] == 'UND'
|
||||
if version.startswith('@'):
|
||||
version = version[1:]
|
||||
if is_import == imports:
|
||||
syms.append((sym, version))
|
||||
return syms
|
||||
|
||||
def check_version(max_versions, version):
|
||||
if '_' in version:
|
||||
(lib, _, ver) = version.rpartition('_')
|
||||
else:
|
||||
lib = version
|
||||
ver = '0'
|
||||
ver = tuple([int(x) for x in ver.split('.')])
|
||||
if not lib in max_versions:
|
||||
return False
|
||||
return ver <= max_versions[lib]
|
||||
|
||||
if __name__ == '__main__':
|
||||
cppfilt = CPPFilt()
|
||||
retval = 0
|
||||
for filename in sys.argv[1:]:
|
||||
# Check imported symbols
|
||||
for sym,version in read_symbols(filename, True):
|
||||
if version and not check_version(MAX_VERSIONS, version):
|
||||
print('%s: symbol %s from unsupported version %s' % (filename, cppfilt(sym), version))
|
||||
retval = 1
|
||||
# Check exported symbols
|
||||
for sym,version in read_symbols(filename, False):
|
||||
print('%s: export of symbol %s not allowed' % (filename, cppfilt(sym)))
|
||||
retval = 1
|
||||
|
||||
exit(retval)
|
||||
|
||||
|
||||
186
contrib/devtools/update-translations.py
Executable file
@@ -0,0 +1,186 @@
|
||||
#!/usr/bin/python
|
||||
# Copyright (c) 2014 Wladimir J. van der Laan
|
||||
# Distributed under the MIT/X11 software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
'''
|
||||
Run this script from the root of the repository to update all translations from
|
||||
transifex.
|
||||
It will do the following automatically:
|
||||
|
||||
- fetch all translations using the tx tool
|
||||
- post-process them into valid and committable format
|
||||
- remove invalid control characters
|
||||
- remove location tags (makes diffs less noisy)
|
||||
|
||||
TODO:
|
||||
- auto-add new translations to the build system according to the translation process
|
||||
'''
|
||||
from __future__ import division, print_function
|
||||
import subprocess
|
||||
import re
|
||||
import sys
|
||||
import os
|
||||
import io
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
# Name of transifex tool
|
||||
TX = 'tx'
|
||||
# Name of source language file
|
||||
SOURCE_LANG = 'bitcoin_en.ts'
|
||||
# Directory with locale files
|
||||
LOCALE_DIR = 'src/qt/locale'
|
||||
|
||||
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)
|
||||
exit(1)
|
||||
|
||||
def fetch_all_translations():
|
||||
if subprocess.call([TX, 'pull', '-f']):
|
||||
print('Error while fetching translations', file=sys.stderr)
|
||||
exit(1)
|
||||
|
||||
def find_format_specifiers(s):
|
||||
'''Find all format specifiers in a string.'''
|
||||
pos = 0
|
||||
specifiers = []
|
||||
while True:
|
||||
percent = s.find('%', pos)
|
||||
if percent < 0:
|
||||
break
|
||||
specifiers.append(s[percent+1])
|
||||
pos = percent+2
|
||||
return specifiers
|
||||
|
||||
def split_format_specifiers(specifiers):
|
||||
'''Split format specifiers between numeric (Qt) and others (strprintf)'''
|
||||
numeric = []
|
||||
other = []
|
||||
for s in specifiers:
|
||||
if s in {'1','2','3','4','5','6','7','8','9'}:
|
||||
numeric.append(s)
|
||||
else:
|
||||
other.append(s)
|
||||
|
||||
# numeric (Qt) can be present in any order, others (strprintf) must be in specified order
|
||||
return set(numeric),other
|
||||
|
||||
def sanitize_string(s):
|
||||
'''Sanitize string for printing'''
|
||||
return s.replace('\n',' ')
|
||||
|
||||
def check_format_specifiers(source, translation, errors):
|
||||
source_f = split_format_specifiers(find_format_specifiers(source))
|
||||
# assert that no source messages contain both Qt and strprintf format specifiers
|
||||
# if this fails, go change the source as this is hacky and confusing!
|
||||
assert(not(source_f[0] and source_f[1]))
|
||||
try:
|
||||
translation_f = split_format_specifiers(find_format_specifiers(translation))
|
||||
except IndexError:
|
||||
errors.append("Parse error in translation '%s'" % sanitize_string(translation))
|
||||
return False
|
||||
else:
|
||||
if source_f != translation_f:
|
||||
errors.append("Mismatch between '%s' and '%s'" % (sanitize_string(source), sanitize_string(translation)))
|
||||
return False
|
||||
return True
|
||||
|
||||
def all_ts_files(suffix=''):
|
||||
for filename in os.listdir(LOCALE_DIR):
|
||||
# process only language files, and do not process source language
|
||||
if not filename.endswith('.ts'+suffix) or filename == SOURCE_LANG+suffix:
|
||||
continue
|
||||
if suffix: # remove provided suffix
|
||||
filename = filename[0:-len(suffix)]
|
||||
filepath = os.path.join(LOCALE_DIR, filename)
|
||||
yield(filename, filepath)
|
||||
|
||||
FIX_RE = re.compile(b'[\x00-\x09\x0b\x0c\x0e-\x1f]')
|
||||
def remove_invalid_characters(s):
|
||||
'''Remove invalid characters from translation string'''
|
||||
return FIX_RE.sub(b'', s)
|
||||
|
||||
# Override cdata escape function to make our output match Qt's (optional, just for cleaner diffs for
|
||||
# comparison, disable by default)
|
||||
_orig_escape_cdata = None
|
||||
def escape_cdata(text):
|
||||
text = _orig_escape_cdata(text)
|
||||
text = text.replace("'", ''')
|
||||
text = text.replace('"', '"')
|
||||
return text
|
||||
|
||||
def postprocess_translations(reduce_diff_hacks=False):
|
||||
print('Checking and postprocessing...')
|
||||
|
||||
if reduce_diff_hacks:
|
||||
global _orig_escape_cdata
|
||||
_orig_escape_cdata = ET._escape_cdata
|
||||
ET._escape_cdata = escape_cdata
|
||||
|
||||
for (filename,filepath) in all_ts_files():
|
||||
os.rename(filepath, filepath+'.orig')
|
||||
|
||||
have_errors = False
|
||||
for (filename,filepath) in all_ts_files('.orig'):
|
||||
# pre-fixups to cope with transifex output
|
||||
parser = ET.XMLParser(encoding='utf-8') # need to override encoding because 'utf8' is not understood only 'utf-8'
|
||||
with open(filepath + '.orig', 'rb') as f:
|
||||
data = f.read()
|
||||
# remove control characters; this must be done over the entire file otherwise the XML parser will fail
|
||||
data = remove_invalid_characters(data)
|
||||
tree = ET.parse(io.BytesIO(data), parser=parser)
|
||||
|
||||
# iterate over all messages in file
|
||||
root = tree.getroot()
|
||||
for context in root.findall('context'):
|
||||
for message in context.findall('message'):
|
||||
numerus = message.get('numerus') == 'yes'
|
||||
source = message.find('source').text
|
||||
translation_node = message.find('translation')
|
||||
# pick all numerusforms
|
||||
if numerus:
|
||||
translations = [i.text for i in translation_node.findall('numerusform')]
|
||||
else:
|
||||
translations = [translation_node.text]
|
||||
|
||||
for translation in translations:
|
||||
if translation is None:
|
||||
continue
|
||||
errors = []
|
||||
valid = check_format_specifiers(source, translation, errors)
|
||||
|
||||
for error in errors:
|
||||
print('%s: %s' % (filename, error))
|
||||
|
||||
if not valid: # set type to unfinished and clear string if invalid
|
||||
translation_node.clear()
|
||||
translation_node.set('type', 'unfinished')
|
||||
have_errors = True
|
||||
|
||||
# Remove location tags
|
||||
for location in message.findall('location'):
|
||||
message.remove(location)
|
||||
|
||||
# Remove entire message if it is an unfinished translation
|
||||
if translation_node.get('type') == 'unfinished':
|
||||
context.remove(message)
|
||||
|
||||
# write fixed-up tree
|
||||
# if diff reduction requested, replace some XML to 'sanitize' to qt formatting
|
||||
if reduce_diff_hacks:
|
||||
out = io.BytesIO()
|
||||
tree.write(out, encoding='utf-8')
|
||||
out = out.getvalue()
|
||||
out = out.replace(b' />', b'/>')
|
||||
with open(filepath, 'wb') as f:
|
||||
f.write(out)
|
||||
else:
|
||||
tree.write(filepath, encoding='utf-8')
|
||||
return have_errors
|
||||
|
||||
if __name__ == '__main__':
|
||||
check_at_repository_root()
|
||||
fetch_all_translations()
|
||||
postprocess_translations()
|
||||
|
||||
@@ -25,30 +25,17 @@ Once you've got the right hardware and software:
|
||||
mkdir gitian-builder/inputs
|
||||
cd gitian-builder/inputs
|
||||
|
||||
# Get inputs (see doc/release-process.md for exact inputs needed and where to get them)
|
||||
...
|
||||
cd ../..
|
||||
|
||||
# Create base images
|
||||
cd gitian-builder
|
||||
bin/make-base-vm --arch i386
|
||||
bin/make-base-vm --arch amd64
|
||||
bin/make-base-vm --suite precise --arch i386
|
||||
bin/make-base-vm --suite precise --arch amd64
|
||||
cd ..
|
||||
|
||||
# Build Linux release:
|
||||
cd bitcoin
|
||||
git pull
|
||||
cd ../gitian-builder
|
||||
git pull
|
||||
./bin/gbuild --commit bitcoin=HEAD ../bitcoin/contrib/gitian-descriptors/gitian-linux.yml
|
||||
# Get inputs (see doc/release-process.md for exact inputs needed and where to get them)
|
||||
...
|
||||
|
||||
# Build Win32 dependencies: (only needs to be done once, or when dependency versions change)
|
||||
./bin/gbuild --commit bitcoin=HEAD ../bitcoin/contrib/gitian-descriptors/boost-win32.yml
|
||||
./bin/gbuild --commit bitcoin=HEAD ../bitcoin/contrib/gitian-descriptors/deps-win32.yml
|
||||
./bin/gbuild --commit bitcoin=HEAD ../bitcoin/contrib/gitian-descriptors/qt-win32.yml
|
||||
./bin/gbuild --commit bitcoin=HEAD ../bitcoin/contrib/gitian-descriptors/protobuf-win32.yml
|
||||
|
||||
# Build Win32 release:
|
||||
./bin/gbuild --commit bitcoin=HEAD ../bitcoin/contrib/gitian-descriptors/gitian-win32.yml
|
||||
# For further build instructions see doc/release-notes.md
|
||||
...
|
||||
|
||||
---------------------
|
||||
|
||||
|
||||
@@ -16,8 +16,8 @@ packages:
|
||||
reference_datetime: "2013-06-01 00:00:00"
|
||||
remotes: []
|
||||
files:
|
||||
- "openssl-1.0.1e.tar.gz"
|
||||
- "miniupnpc-1.8.tar.gz"
|
||||
- "openssl-1.0.1k.tar.gz"
|
||||
- "miniupnpc-1.9.20140701.tar.gz"
|
||||
- "qrencode-3.4.3.tar.bz2"
|
||||
- "protobuf-2.5.0.tar.bz2"
|
||||
- "db-4.8.30.NC.tar.gz"
|
||||
@@ -30,15 +30,15 @@ script: |
|
||||
export TZ=UTC
|
||||
export LIBRARY_PATH="$STAGING/lib"
|
||||
# Integrity Check
|
||||
echo "f74f15e8c8ff11aa3d5bb5f276d202ec18d7246e95f961db76054199c69c1ae3 openssl-1.0.1e.tar.gz" | sha256sum -c
|
||||
echo "bc5f73c7b0056252c1888a80e6075787a1e1e9112b808f863a245483ff79859c miniupnpc-1.8.tar.gz" | sha256sum -c
|
||||
echo "8f9faeaebad088e772f4ef5e38252d472be4d878c6b3a2718c10a4fcebe7a41c openssl-1.0.1k.tar.gz" | sha256sum -c
|
||||
echo "26f3985bad7768b8483b793448ae49414cdc4451d0ec83e7c1944367e15f9f07 miniupnpc-1.9.20140701.tar.gz" | sha256sum -c
|
||||
echo "dfd71487513c871bad485806bfd1fdb304dedc84d2b01a8fb8e0940b50597a98 qrencode-3.4.3.tar.bz2" | sha256sum -c
|
||||
echo "13bfc5ae543cf3aa180ac2485c0bc89495e3ae711fc6fab4f8ffe90dfb4bb677 protobuf-2.5.0.tar.bz2" | sha256sum -c
|
||||
echo "12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz" | sha256sum -c
|
||||
|
||||
#
|
||||
tar xzf openssl-1.0.1e.tar.gz
|
||||
cd openssl-1.0.1e
|
||||
tar xzf openssl-1.0.1k.tar.gz
|
||||
cd openssl-1.0.1k
|
||||
# need -fPIC to avoid relocation error in 64 bit builds
|
||||
./config no-shared no-zlib no-dso no-krb5 --openssldir=$STAGING -fPIC
|
||||
# need to build OpenSSL with faketime because a timestamp is embedded into cversion.o
|
||||
@@ -46,8 +46,8 @@ script: |
|
||||
make install_sw
|
||||
cd ..
|
||||
#
|
||||
tar xzfm miniupnpc-1.8.tar.gz
|
||||
cd miniupnpc-1.8
|
||||
tar xzfm miniupnpc-1.9.20140701.tar.gz
|
||||
cd miniupnpc-1.9.20140701
|
||||
# miniupnpc is always built with -fPIC
|
||||
INSTALLPREFIX=$STAGING make $MAKEOPTS install
|
||||
rm -f $STAGING/lib/libminiupnpc.so* # no way to skip shared lib build
|
||||
@@ -95,4 +95,4 @@ script: |
|
||||
done
|
||||
#
|
||||
cd $STAGING
|
||||
find include lib bin host | sort | zip -X@ $OUTDIR/bitcoin-deps-linux${GBUILD_BITS}-gitian-r3.zip
|
||||
find include lib bin host | sort | zip -X@ $OUTDIR/bitcoin-deps-linux${GBUILD_BITS}-gitian-r9.zip
|
||||
|
||||
@@ -14,9 +14,9 @@ packages:
|
||||
reference_datetime: "2011-01-30 00:00:00"
|
||||
remotes: []
|
||||
files:
|
||||
- "openssl-1.0.1e.tar.gz"
|
||||
- "openssl-1.0.1k.tar.gz"
|
||||
- "db-4.8.30.NC.tar.gz"
|
||||
- "miniupnpc-1.8.tar.gz"
|
||||
- "miniupnpc-1.9.20140701.tar.gz"
|
||||
- "zlib-1.2.8.tar.gz"
|
||||
- "libpng-1.6.8.tar.gz"
|
||||
- "qrencode-3.4.3.tar.bz2"
|
||||
@@ -28,9 +28,9 @@ script: |
|
||||
INDIR=$HOME/build
|
||||
TEMPDIR=$HOME/tmp
|
||||
# Input Integrity Check
|
||||
echo "f74f15e8c8ff11aa3d5bb5f276d202ec18d7246e95f961db76054199c69c1ae3 openssl-1.0.1e.tar.gz" | sha256sum -c
|
||||
echo "8f9faeaebad088e772f4ef5e38252d472be4d878c6b3a2718c10a4fcebe7a41c openssl-1.0.1k.tar.gz" | sha256sum -c
|
||||
echo "12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz" | sha256sum -c
|
||||
echo "bc5f73c7b0056252c1888a80e6075787a1e1e9112b808f863a245483ff79859c miniupnpc-1.8.tar.gz" | sha256sum -c
|
||||
echo "26f3985bad7768b8483b793448ae49414cdc4451d0ec83e7c1944367e15f9f07 miniupnpc-1.9.20140701.tar.gz" | sha256sum -c
|
||||
echo "36658cb768a54c1d4dec43c3116c27ed893e88b02ecfcb44f2166f9c0b7f2a0d zlib-1.2.8.tar.gz" | sha256sum -c
|
||||
echo "32c7acf1608b9c8b71b743b9780adb7a7b347563dbfb4a5263761056da44cc96 libpng-1.6.8.tar.gz" | sha256sum -c
|
||||
echo "dfd71487513c871bad485806bfd1fdb304dedc84d2b01a8fb8e0940b50597a98 qrencode-3.4.3.tar.bz2" | sha256sum -c
|
||||
@@ -48,8 +48,8 @@ script: |
|
||||
mkdir -p $INSTALLPREFIX $BUILDDIR
|
||||
cd $BUILDDIR
|
||||
#
|
||||
tar xzf $INDIR/openssl-1.0.1e.tar.gz
|
||||
cd openssl-1.0.1e
|
||||
tar xzf $INDIR/openssl-1.0.1k.tar.gz
|
||||
cd openssl-1.0.1k
|
||||
if [ "$BITS" == "32" ]; then
|
||||
OPENSSL_TGT=mingw
|
||||
else
|
||||
@@ -67,11 +67,11 @@ script: |
|
||||
make install_lib install_include
|
||||
cd ../..
|
||||
#
|
||||
tar xzf $INDIR/miniupnpc-1.8.tar.gz
|
||||
cd miniupnpc-1.8
|
||||
tar xzf $INDIR/miniupnpc-1.9.20140701.tar.gz
|
||||
cd miniupnpc-1.9.20140701
|
||||
echo "
|
||||
--- miniupnpc-1.8/Makefile.mingw.orig 2013-09-29 18:52:51.014087958 -1000
|
||||
+++ miniupnpc-1.8/Makefile.mingw 2013-09-29 19:09:29.663318691 -1000
|
||||
--- miniupnpc-1.9/Makefile.mingw.orig 2013-09-29 18:52:51.014087958 -1000
|
||||
+++ miniupnpc-1.9/Makefile.mingw 2013-09-29 19:09:29.663318691 -1000
|
||||
@@ -67,8 +67,8 @@
|
||||
|
||||
wingenminiupnpcstrings.o: wingenminiupnpcstrings.c
|
||||
@@ -124,5 +124,5 @@ script: |
|
||||
done
|
||||
#
|
||||
cd $INSTALLPREFIX
|
||||
find include lib | sort | zip -X@ $OUTDIR/bitcoin-deps-win$BITS-gitian-r10.zip
|
||||
find include lib | sort | zip -X@ $OUTDIR/bitcoin-deps-win$BITS-gitian-r16.zip
|
||||
done # for BITS in
|
||||
|
||||
@@ -7,7 +7,6 @@ architectures:
|
||||
- "amd64"
|
||||
packages:
|
||||
- "g++"
|
||||
- "libqt4-dev"
|
||||
- "git-core"
|
||||
- "unzip"
|
||||
- "pkg-config"
|
||||
@@ -16,15 +15,22 @@ packages:
|
||||
- "automake"
|
||||
- "faketime"
|
||||
- "bsdmainutils"
|
||||
- "libqt4-core"
|
||||
- "libqt4-gui"
|
||||
- "libqt4-dbus"
|
||||
- "libqt4-network"
|
||||
- "libqt4-test"
|
||||
reference_datetime: "2013-06-01 00:00:00"
|
||||
remotes:
|
||||
- "url": "https://github.com/bitcoin/bitcoin.git"
|
||||
"dir": "bitcoin"
|
||||
files:
|
||||
- "bitcoin-deps-linux32-gitian-r3.zip"
|
||||
- "bitcoin-deps-linux64-gitian-r3.zip"
|
||||
- "bitcoin-deps-linux32-gitian-r9.zip"
|
||||
- "bitcoin-deps-linux64-gitian-r9.zip"
|
||||
- "boost-linux32-1.55.0-gitian-r1.zip"
|
||||
- "boost-linux64-1.55.0-gitian-r1.zip"
|
||||
- "qt-linux32-4.6.4-gitian-r1.tar.gz"
|
||||
- "qt-linux64-4.6.4-gitian-r1.tar.gz"
|
||||
script: |
|
||||
STAGING="$HOME/install"
|
||||
OPTFLAGS='-O2'
|
||||
@@ -32,26 +38,46 @@ script: |
|
||||
TEMPDIR="$HOME/tempdir"
|
||||
export TZ=UTC
|
||||
export LIBRARY_PATH="$STAGING/lib"
|
||||
export PATH="$STAGING/bin:$PATH"
|
||||
mkdir -p ${BINDIR}
|
||||
#
|
||||
mkdir -p $STAGING
|
||||
cd $STAGING
|
||||
unzip ../build/bitcoin-deps-linux${GBUILD_BITS}-gitian-r3.zip
|
||||
unzip ../build/bitcoin-deps-linux${GBUILD_BITS}-gitian-r9.zip
|
||||
unzip ../build/boost-linux${GBUILD_BITS}-1.55.0-gitian-r1.zip
|
||||
tar -zxf ../build/qt-linux${GBUILD_BITS}-4.6.4-gitian-r1.tar.gz
|
||||
cd ../build
|
||||
|
||||
# Avoid exporting *any* symbols from the executable
|
||||
# This avoids conflicts between the libraries statically linked into bitcoin and any
|
||||
# libraries we may link dynamically (such as Qt and OpenSSL, see issue #4094).
|
||||
# It also avoids start-up overhead to not export any unnecessary symbols.
|
||||
# To do this, build a linker script that marks all symbols as local.
|
||||
LINKER_SCRIPT=$HOME/build/linker_version_script
|
||||
echo '
|
||||
{
|
||||
local: *;
|
||||
};' > $LINKER_SCRIPT
|
||||
function do_configure {
|
||||
./configure "$@" --enable-upnp-default --prefix=$STAGING --with-protoc-bindir=$STAGING/host/bin --with-qt-bindir=$STAGING/bin --with-boost=$STAGING --disable-maintainer-mode --disable-dependency-tracking PKG_CONFIG_PATH="$STAGING/lib/pkgconfig" CPPFLAGS="-I$STAGING/include ${OPTFLAGS}" LDFLAGS="-L$STAGING/lib -Wl,--version-script=$LINKER_SCRIPT ${OPTFLAGS}" CXXFLAGS="-frandom-seed=bitcoin ${OPTFLAGS}" BOOST_CHRONO_EXTRALIBS="-lrt" --enable-glibc-back-compat
|
||||
}
|
||||
#
|
||||
cd bitcoin
|
||||
./autogen.sh
|
||||
./configure --prefix=$STAGING --bindir=$BINDIR --with-protoc-bindir=$STAGING/host/bin --with-boost=$STAGING --disable-maintainer-mode --disable-dependency-tracking PKG_CONFIG_PATH="$STAGING/lib/pkgconfig" CPPFLAGS="-I$STAGING/include ${OPTFLAGS}" LDFLAGS="-L$STAGING/lib ${OPTFLAGS}" CXXFLAGS="-frandom-seed=bitcoin ${OPTFLAGS}" BOOST_CHRONO_EXTRALIBS="-lrt"
|
||||
do_configure
|
||||
make dist
|
||||
DISTNAME=`echo bitcoin-*.tar.gz`
|
||||
|
||||
# Build dynamic versions of everything
|
||||
# (with static linking to boost and openssl as well a some non-OS deps)
|
||||
mkdir -p distsrc
|
||||
cd distsrc
|
||||
tar --strip-components=1 -xf ../$DISTNAME
|
||||
./configure --enable-upnp-default --prefix=$STAGING --bindir=$BINDIR --with-protoc-bindir=$STAGING/host/bin --with-boost=$STAGING --disable-maintainer-mode --disable-dependency-tracking PKG_CONFIG_PATH="$STAGING/lib/pkgconfig" CPPFLAGS="-I$STAGING/include ${OPTFLAGS}" LDFLAGS="-L$STAGING/lib ${OPTFLAGS}" CXXFLAGS="-frandom-seed=bitcoin ${OPTFLAGS}" BOOST_CHRONO_EXTRALIBS="-lrt"
|
||||
do_configure --bindir=$BINDIR
|
||||
make $MAKEOPTS
|
||||
make $MAKEOPTS install-strip
|
||||
|
||||
make $MAKEOPTS clean
|
||||
|
||||
# sort distribution tar file and normalize user/group/mtime information for deterministic output
|
||||
mkdir -p $OUTDIR/src
|
||||
rm -rf $TEMPDIR
|
||||
|
||||
60
contrib/gitian-descriptors/gitian-osx-bitcoin.yml
Normal file
@@ -0,0 +1,60 @@
|
||||
---
|
||||
name: "bitcoin"
|
||||
suites:
|
||||
- "precise"
|
||||
architectures:
|
||||
- "i386"
|
||||
packages:
|
||||
- "git-core"
|
||||
- "automake"
|
||||
- "faketime"
|
||||
- "bsdmainutils"
|
||||
- "pkg-config"
|
||||
- "p7zip-full"
|
||||
|
||||
reference_datetime: "2013-06-01 00:00:00"
|
||||
remotes:
|
||||
- "url": "https://github.com/bitcoin/bitcoin.git"
|
||||
"dir": "bitcoin"
|
||||
files:
|
||||
- "osx-native-depends-r3.tar.gz"
|
||||
- "osx-depends-r8.tar.gz"
|
||||
- "osx-depends-qt-5.2.1-r7.tar.gz"
|
||||
- "MacOSX10.7.sdk.tar.gz"
|
||||
|
||||
script: |
|
||||
|
||||
HOST=x86_64-apple-darwin11
|
||||
PREFIX=`pwd`/osx-cross-depends/prefix
|
||||
SDK=`pwd`/osx-cross-depends/SDKs/MacOSX10.7.sdk
|
||||
NATIVEPREFIX=`pwd`/osx-cross-depends/native-prefix
|
||||
export TAR_OPTIONS="-m --mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME""
|
||||
|
||||
export SOURCES_PATH=`pwd`
|
||||
|
||||
mkdir -p osx-cross-depends/SDKs
|
||||
|
||||
tar -C osx-cross-depends/SDKs -xf ${SOURCES_PATH}/MacOSX10.7.sdk.tar.gz
|
||||
|
||||
tar -C osx-cross-depends -xf osx-native-depends-r3.tar.gz
|
||||
tar -C osx-cross-depends -xf osx-depends-r8.tar.gz
|
||||
tar -C osx-cross-depends -xf osx-depends-qt-5.2.1-r7.tar.gz
|
||||
export PATH=`pwd`/osx-cross-depends/native-prefix/bin:$PATH
|
||||
|
||||
cd bitcoin
|
||||
|
||||
export ZERO_AR_DATE=1
|
||||
export QT_RCC_TEST=1
|
||||
./autogen.sh
|
||||
./configure --host=${HOST} --with-boost=${PREFIX} CC=clang CXX=clang++ OBJC=clang OBJCXX=clang++ CFLAGS="-target ${HOST} -mmacosx-version-min=10.6 --sysroot ${SDK} -msse2 -Qunused-arguments" CXXFLAGS="-target ${HOST} -mmacosx-version-min=10.6 --sysroot ${SDK} -msse2 -Qunused-arguments" LDFLAGS="-B${NATIVEPREFIX}/bin -L${PREFIX}/lib -L${SDK}/usr/lib/i686-apple-darwin10/4.2.1" CPPFLAGS="-I${NATIVEPREFIX}/lib/clang/3.2/include -I${PREFIX}/include" SSL_LIBS="-lz -lssl -lcrypto" --disable-tests -with-gui=qt5 PKG_CONFIG_LIBDIR="${PREFIX}/lib/pkgconfig" --disable-dependency-tracking --disable-maintainer-mode
|
||||
make dist
|
||||
mkdir -p distsrc
|
||||
cd distsrc
|
||||
tar --strip-components=1 -xf ../bitcoin-*.tar*
|
||||
./configure --host=${HOST} --with-boost=${PREFIX} CC=clang CXX=clang++ OBJC=clang OBJCXX=clang++ CFLAGS="-target ${HOST} -mmacosx-version-min=10.6 --sysroot ${SDK} -msse2 -Qunused-arguments" CXXFLAGS="-target ${HOST} -mmacosx-version-min=10.6 --sysroot ${SDK} -msse2 -Qunused-arguments" LDFLAGS="-B${NATIVEPREFIX}/bin -L${PREFIX}/lib -L${SDK}/usr/lib/i686-apple-darwin10/4.2.1" CPPFLAGS="-I${NATIVEPREFIX}/lib/clang/3.2/include -I${PREFIX}/include" SSL_LIBS="-lz -lssl -lcrypto" --disable-tests -with-gui=qt5 PKG_CONFIG_LIBDIR="${PREFIX}/lib/pkgconfig" --disable-dependency-tracking --disable-maintainer-mode
|
||||
make $MAKEOPTS
|
||||
export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
|
||||
export FAKETIME=$REFERENCE_DATETIME
|
||||
export TZ=UTC
|
||||
make deploy
|
||||
dmg dmg Bitcoin-Qt.dmg $OUTDIR/Bitcoin-Qt.dmg
|
||||
159
contrib/gitian-descriptors/gitian-osx-depends.yml
Normal file
@@ -0,0 +1,159 @@
|
||||
---
|
||||
name: "osx-depends"
|
||||
suites:
|
||||
- "precise"
|
||||
architectures:
|
||||
- "i386"
|
||||
packages:
|
||||
- "git-core"
|
||||
- "automake"
|
||||
- "p7zip-full"
|
||||
|
||||
reference_datetime: "2013-06-01 00:00:00"
|
||||
remotes: []
|
||||
files:
|
||||
- "boost_1_55_0.tar.bz2"
|
||||
- "db-4.8.30.NC.tar.gz"
|
||||
- "miniupnpc-1.9.20140701.tar.gz"
|
||||
- "openssl-1.0.1k.tar.gz"
|
||||
- "protobuf-2.5.0.tar.bz2"
|
||||
- "qrencode-3.4.3.tar.bz2"
|
||||
- "MacOSX10.7.sdk.tar.gz"
|
||||
- "osx-native-depends-r3.tar.gz"
|
||||
|
||||
script: |
|
||||
|
||||
echo "fff00023dd79486d444c8e29922f4072e1d451fc5a4d2b6075852ead7f2b7b52 boost_1_55_0.tar.bz2" | sha256sum -c
|
||||
echo "12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz" | sha256sum -c
|
||||
echo "26f3985bad7768b8483b793448ae49414cdc4451d0ec83e7c1944367e15f9f07 miniupnpc-1.9.20140701.tar.gz" | sha256sum -c
|
||||
echo "8f9faeaebad088e772f4ef5e38252d472be4d878c6b3a2718c10a4fcebe7a41c openssl-1.0.1k.tar.gz" | sha256sum -c
|
||||
echo "13bfc5ae543cf3aa180ac2485c0bc89495e3ae711fc6fab4f8ffe90dfb4bb677 protobuf-2.5.0.tar.bz2" | sha256sum -c
|
||||
echo "dfd71487513c871bad485806bfd1fdb304dedc84d2b01a8fb8e0940b50597a98 qrencode-3.4.3.tar.bz2" | sha256sum -c
|
||||
|
||||
REVISION=r8
|
||||
export SOURCES_PATH=`pwd`
|
||||
export TAR_OPTIONS="-m --mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME""
|
||||
export PATH=$HOME:$PATH
|
||||
export SOURCES_PATH=`pwd`
|
||||
export ZERO_AR_DATE=1
|
||||
|
||||
mkdir -p osx-cross-depends/build
|
||||
cd osx-cross-depends
|
||||
|
||||
PREFIX=`pwd`/prefix
|
||||
NATIVEPREFIX=`pwd`/native-prefix
|
||||
BUILD_BASE=`pwd`/build
|
||||
SDK=`pwd`/SDKs/MacOSX10.7.sdk
|
||||
HOST=x86_64-apple-darwin11
|
||||
MIN_VERSION=10.6
|
||||
|
||||
INT_CFLAGS="-target ${HOST} -mmacosx-version-min=${MIN_VERSION} --sysroot ${SDK} -msse2 -Qunused-arguments"
|
||||
INT_CXXFLAGS="${INT_CFLAGS}"
|
||||
INT_LDFLAGS="-L${PREFIX}/lib -L${SDK}/usr/lib/i686-apple-darwin10/4.2.1"
|
||||
INT_LDFLAGS_CLANG="-B${NATIVEPREFIX}/bin"
|
||||
INT_CPPFLAGS="-I${PREFIX}/include"
|
||||
INT_CC=clang
|
||||
INT_CXX=clang++
|
||||
INT_OBJC=clang
|
||||
INT_OBJCXX=clang++
|
||||
INT_AR=${HOST}-ar
|
||||
INT_RANLIB=${HOST}-ranlib
|
||||
INT_LIBTOOL=${HOST}-libtool
|
||||
INT_INSTALL_NAME_TOOL=${HOST}-install_name_tool
|
||||
|
||||
export PATH=${NATIVEPREFIX}/bin:${PATH}
|
||||
|
||||
mkdir -p ${NATIVEPREFIX}/bin
|
||||
mkdir -p ${NATIVEPREFIX}/lib
|
||||
mkdir -p ${PREFIX}/bin
|
||||
mkdir -p ${PREFIX}/lib
|
||||
mkdir -p ${BUILD_BASE}
|
||||
|
||||
mkdir -p SDKs
|
||||
tar -C SDKs -xf ${SOURCES_PATH}/MacOSX10.7.sdk.tar.gz
|
||||
|
||||
tar xf /home/ubuntu/build/osx-native-depends-r3.tar.gz
|
||||
|
||||
# bdb
|
||||
SOURCE_FILE=${SOURCES_PATH}/db-4.8.30.NC.tar.gz
|
||||
BUILD_DIR=${BUILD_BASE}/db-4.8.30.NC
|
||||
|
||||
tar -C ${BUILD_BASE} -xf ${SOURCE_FILE}
|
||||
sed -i 's/__atomic_compare_exchange/__atomic_compare_exchange_db/g' ${BUILD_DIR}/dbinc/atomic.h
|
||||
pushd ${BUILD_DIR}
|
||||
cd build_unix;
|
||||
../dist/configure --host=${HOST} --prefix="${PREFIX}" --disable-shared --enable-cxx CC="${INT_CC}" CXX="${INT_CXX}" AR="${INT_AR}" RANLIB="${INT_RANLIB}" OBJC="${INT_OBJC}" OBJCXX="${INT_OBJCXX}" CFLAGS="${INT_CFLAGS}" CXXFLAGS="${INT_CXXFLAGS}" LDFLAGS="${INT_CLANG_LDFLAGS} ${INT_LDFLAGS}" CPPFLAGS="${INT_CPPFLAGS}"
|
||||
make $MAKEOPTS libdb.a libdb_cxx.a
|
||||
make install_lib install_include
|
||||
popd
|
||||
|
||||
# openssl
|
||||
SOURCE_FILE=${SOURCES_PATH}/openssl-1.0.1k.tar.gz
|
||||
BUILD_DIR=${BUILD_BASE}/openssl-1.0.1k
|
||||
|
||||
tar -C ${BUILD_BASE} -xf ${SOURCE_FILE}
|
||||
pushd ${BUILD_DIR}
|
||||
sed -ie "s|cc:|${INT_CC}:|" ${BUILD_DIR}/Configure
|
||||
sed -ie "s|\(-arch [_a-zA-Z0-9]*\)|\1 --sysroot ${SDK} -target ${HOST} -msse2|" ${BUILD_DIR}/Configure
|
||||
sed -i "/define DATE/d" ${BUILD_DIR}/util/mkbuildinf.pl
|
||||
sed -i "s|engines apps test|engines|" ${BUILD_DIR}/Makefile.org
|
||||
AR="${INT_AR}" RANLIB="${INT_RANLIB}" ./Configure --prefix=${PREFIX} --openssldir=${PREFIX}/etc/openssl zlib shared no-krb5 darwin64-x86_64-cc ${INT_LDFLAGS} ${INT_CLANG_LDFLAGS} ${INT_CPPFLAGS}
|
||||
make -j1 build_libs libcrypto.pc libssl.pc openssl.pc
|
||||
make -j1 install_sw
|
||||
popd
|
||||
|
||||
#libminiupnpc
|
||||
SOURCE_FILE=${SOURCES_PATH}/miniupnpc-1.9.20140701.tar.gz
|
||||
BUILD_DIR=${BUILD_BASE}/miniupnpc-1.9.20140701
|
||||
|
||||
tar -C ${BUILD_BASE} -xf ${SOURCE_FILE}
|
||||
pushd ${BUILD_DIR}
|
||||
CFLAGS="${INT_CFLAGS} ${INT_CPPFLAGS}" make $MAKEOPTS OS=Darwin CC="${INT_CC}" AR="${INT_AR}" libminiupnpc.a
|
||||
install -d ${PREFIX}/include/miniupnpc
|
||||
install *.h ${PREFIX}/include/miniupnpc
|
||||
install libminiupnpc.a ${PREFIX}/lib
|
||||
popd
|
||||
|
||||
# qrencode
|
||||
SOURCE_FILE=${SOURCES_PATH}/qrencode-3.4.3.tar.bz2
|
||||
BUILD_DIR=${BUILD_BASE}/qrencode-3.4.3
|
||||
tar -C ${BUILD_BASE} -xf ${SOURCE_FILE}
|
||||
pushd ${BUILD_DIR}
|
||||
|
||||
# m4 folder is not included in the stable release, which can confuse aclocal
|
||||
# if its timestamp ends up being earlier than configure.ac when extracted
|
||||
touch aclocal.m4
|
||||
./configure --host=${HOST} --prefix="${PREFIX}" --disable-shared CC="${INT_CC}" CXX="${INT_CXX}" AR="${INT_AR}" RANLIB="${INT_RANLIB}" OBJC="${INT_OBJC}" OBJCXX="${INT_OBJCXX}" CFLAGS="${INT_CFLAGS}" CXXFLAGS="${INT_CXXFLAGS}" LDFLAGS="${INT_CLANG_LDFLAGS} ${INT_LDFLAGS}" CPPFLAGS="${INT_CPPFLAGS}" --disable-shared -without-tools --disable-sdltest --disable-dependency-tracking
|
||||
make $MAKEOPTS
|
||||
make install
|
||||
popd
|
||||
|
||||
# libprotobuf
|
||||
SOURCE_FILE=${SOURCES_PATH}/protobuf-2.5.0.tar.bz2
|
||||
BUILD_DIR=${BUILD_BASE}/protobuf-2.5.0
|
||||
|
||||
tar -C ${BUILD_BASE} -xjf ${SOURCE_FILE}
|
||||
pushd ${BUILD_DIR}
|
||||
./configure --host=${HOST} --prefix="${PREFIX}" --disable-shared --enable-cxx CC="${INT_CC}" CXX="${INT_CXX}" AR="${INT_AR}" RANLIB="${INT_RANLIB}" OBJC="${INT_OBJC}" OBJCXX="${INT_OBJCXX}" CFLAGS="${INT_CFLAGS}" CXXFLAGS="${INT_CXXFLAGS}" LDFLAGS="${INT_CLANG_LDFLAGS} ${INT_LDFLAGS}" CPPFLAGS="${INT_CPPFLAGS}" --enable-shared=no --disable-dependency-tracking --with-protoc=${NATIVEPREFIX}/bin/protoc
|
||||
cd src
|
||||
make $MAKEOPTS libprotobuf.la
|
||||
make install-libLTLIBRARIES install-nobase_includeHEADERS
|
||||
cd ..
|
||||
make install-pkgconfigDATA
|
||||
popd
|
||||
|
||||
# boost
|
||||
SOURCE_FILE=${SOURCES_PATH}/boost_1_55_0.tar.bz2
|
||||
BUILD_DIR=${BUILD_BASE}/boost_1_55_0
|
||||
|
||||
tar -C ${BUILD_BASE} -xf ${SOURCE_FILE}
|
||||
pushd ${BUILD_DIR}
|
||||
./bootstrap.sh --with-libraries=chrono,filesystem,program_options,system,thread,test
|
||||
echo "using darwin : : ${INT_CXX} : <cxxflags>\"${INT_CFLAGS} ${INT_CPPFLAGS}\" <linkflags>\"${INT_LDFLAGS} ${INT_CLANG_LDFLAGS}\" <archiver>\"${INT_LIBTOOL}\" <striper>\"${INT_STRIP}\" : ;" > "user-config.jam"
|
||||
./b2 -d2 --layout=tagged --build-type=complete --prefix="${PREFIX}" --toolset=darwin-4.2.1 --user-config=user-config.jam variant=release threading=multi link=static install
|
||||
popd
|
||||
|
||||
export GZIP="-9n"
|
||||
find prefix | sort | tar --no-recursion -czf osx-depends-${REVISION}.tar.gz -T -
|
||||
|
||||
mv osx-depends-${REVISION}.tar.gz $OUTDIR
|
||||
178
contrib/gitian-descriptors/gitian-osx-native.yml
Normal file
@@ -0,0 +1,178 @@
|
||||
---
|
||||
name: "osx-native"
|
||||
suites:
|
||||
- "precise"
|
||||
architectures:
|
||||
- "i386"
|
||||
packages:
|
||||
- "git-core"
|
||||
- "automake"
|
||||
- "faketime"
|
||||
- "libssl-dev"
|
||||
- "libbz2-dev"
|
||||
- "libz-dev"
|
||||
- "cmake"
|
||||
- "libcap-dev"
|
||||
- "p7zip-full"
|
||||
- "uuid-dev"
|
||||
|
||||
reference_datetime: "2013-06-01 00:00:00"
|
||||
remotes: []
|
||||
files:
|
||||
- "10cc648683617cca8bcbeae507888099b41b530c.tar.gz"
|
||||
- "cctools-809.tar.gz"
|
||||
- "dyld-195.5.tar.gz"
|
||||
- "ld64-127.2.tar.gz"
|
||||
- "protobuf-2.5.0.tar.bz2"
|
||||
- "MacOSX10.7.sdk.tar.gz"
|
||||
- "cdrkit-1.1.11.tar.gz"
|
||||
- "libdmg-hfsplus-v0.1.tar.gz"
|
||||
- "clang-llvm-3.2-x86-linux-ubuntu-12.04.tar.gz"
|
||||
- "cdrkit-deterministic.patch"
|
||||
|
||||
|
||||
script: |
|
||||
|
||||
echo "18406961fd4a1ec5c7ea35c91d6a80a2f8bb797a2bd243a610bd75e13eff9aca 10cc648683617cca8bcbeae507888099b41b530c.tar.gz" | sha256sum -c
|
||||
echo "03ba62749b843b131c7304a044a98c6ffacd65b1399b921d69add0375f79d8ad cctools-809.tar.gz" | sha256sum -c
|
||||
echo "2cf0484c87cf79b606b351a7055a247dae84093ae92c747a74e0cde2c8c8f83c dyld-195.5.tar.gz" | sha256sum -c
|
||||
echo "97b75547b2bd761306ab3e15ae297f01e7ab9760b922bc657f4ef72e4e052142 ld64-127.2.tar.gz" | sha256sum -c
|
||||
echo "13bfc5ae543cf3aa180ac2485c0bc89495e3ae711fc6fab4f8ffe90dfb4bb677 protobuf-2.5.0.tar.bz2" | sha256sum -c
|
||||
echo "d1c030756ecc182defee9fe885638c1785d35a2c2a297b4604c0e0dcc78e47da cdrkit-1.1.11.tar.gz" | sha256sum -c
|
||||
echo "6569a02eb31c2827080d7d59001869ea14484c281efab0ae7f2b86af5c3120b3 libdmg-hfsplus-v0.1.tar.gz" | sha256sum -c
|
||||
echo "b9d57a88f9514fa1f327a1a703756d0c1c960f4c58494a5bd80313245d13ffff clang-llvm-3.2-x86-linux-ubuntu-12.04.tar.gz" | sha256sum -c
|
||||
echo "cc12bdbd7a09f71cb2a6a3e6ec3e0abe885ca7111c2b47857f5095e5980caf4f cdrkit-deterministic.patch" | sha256sum -c
|
||||
|
||||
|
||||
REVISION=r3
|
||||
export REFERENCE_DATETIME
|
||||
export TAR_OPTIONS="-m --mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME""
|
||||
export FAKETIME=$REFERENCE_DATETIME
|
||||
export TZ=UTC
|
||||
|
||||
REAL_AR=`which ar`
|
||||
REAL_RANLIB=`which ranlib`
|
||||
REAL_DATE=`which date`
|
||||
|
||||
echo '#!/bin/bash' > $HOME/ar
|
||||
echo 'export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1' >> $HOME/ar
|
||||
echo "$REAL_AR \"\$@\"" >> $HOME/ar
|
||||
|
||||
echo '#!/bin/bash' > $HOME/ranlib
|
||||
echo 'export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1' >> $HOME/ranlib
|
||||
echo "$REAL_RANLIB \"\$@\"" >> $HOME/ranlib
|
||||
|
||||
echo '#!/bin/bash' > $HOME/date
|
||||
echo 'export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1' >> $HOME/date
|
||||
echo "$REAL_DATE \"\$@\"" >> $HOME/date
|
||||
|
||||
chmod +x $HOME/ar $HOME/ranlib $HOME/date
|
||||
|
||||
|
||||
export PATH=$HOME:$PATH
|
||||
export SOURCES_PATH=`pwd`
|
||||
|
||||
mkdir -p osx-cross-depends/build
|
||||
cd osx-cross-depends
|
||||
|
||||
NATIVEPREFIX=`pwd`/native-prefix
|
||||
BUILD_BASE=`pwd`/build
|
||||
SDK=`pwd`/SDKs/MacOSX10.7.sdk
|
||||
HOST=x86_64-apple-darwin11
|
||||
MIN_VERSION=10.6
|
||||
|
||||
CFLAGS=""
|
||||
CXXFLAGS="${CFLAGS}"
|
||||
LDFLAGS="-L${NATIVEPREFIX}/lib"
|
||||
|
||||
export PATH=${NATIVEPREFIX}/bin:${PATH}
|
||||
|
||||
mkdir -p ${NATIVEPREFIX}/bin
|
||||
mkdir -p ${NATIVEPREFIX}/lib
|
||||
|
||||
mkdir -p SDKs
|
||||
tar -C SDKs -xf ${SOURCES_PATH}/MacOSX10.7.sdk.tar.gz
|
||||
|
||||
# Clang
|
||||
SOURCE_FILE=${SOURCES_PATH}/clang-llvm-3.2-x86-linux-ubuntu-12.04.tar.gz
|
||||
BUILD_DIR=${BUILD_BASE}/clang+llvm-3.2-x86-linux-ubuntu-12.04
|
||||
|
||||
mkdir -p ${NATIVEPREFIX}/lib/clang/3.2/include
|
||||
tar -C ${BUILD_BASE} -xf ${SOURCE_FILE}
|
||||
cp ${BUILD_DIR}/bin/clang ${NATIVEPREFIX}/bin/
|
||||
cp ${BUILD_DIR}/bin/clang++ ${NATIVEPREFIX}/bin/
|
||||
cp ${BUILD_DIR}/lib/libLTO.so ${NATIVEPREFIX}/lib/
|
||||
cp ${BUILD_DIR}/lib/clang/3.2/include/* ${NATIVEPREFIX}/lib/clang/3.2/include
|
||||
|
||||
# cctools
|
||||
SOURCE_FILE=${SOURCES_PATH}/10cc648683617cca8bcbeae507888099b41b530c.tar.gz
|
||||
BUILD_DIR=${BUILD_BASE}/toolchain4-10cc648683617cca8bcbeae507888099b41b530c
|
||||
|
||||
tar -C ${BUILD_BASE} -xf ${SOURCE_FILE}
|
||||
mkdir -p ${BUILD_DIR}/sdks
|
||||
pushd ${BUILD_DIR}/sdks;
|
||||
ln -sf ${SDK} MacOSX10.7.sdk
|
||||
ln -sf ${SOURCES_PATH}/cctools-809.tar.gz ${BUILD_DIR}/cctools2odcctools/cctools-809.tar.gz
|
||||
ln -sf ${SOURCES_PATH}/ld64-127.2.tar.gz ${BUILD_DIR}/cctools2odcctools/ld64-127.2.tar.gz
|
||||
ln -sf ${SOURCES_PATH}/dyld-195.5.tar.gz ${BUILD_DIR}/cctools2odcctools/dyld-195.5.tar.gz
|
||||
|
||||
tar -C ${BUILD_DIR} -xf ${SOURCES_PATH}/clang-llvm-3.2-x86-linux-ubuntu-12.04.tar.gz
|
||||
# Hack in the use of our llvm headers rather than grabbing the old llvm-gcc.
|
||||
sed -i "s|GCC_DIR|LLVM_CLANG_DIR|g" ${BUILD_DIR}/cctools2odcctools/extract.sh
|
||||
sed -i "s|llvmgcc42-2336.1|clang+llvm-3.2-x86-linux-ubuntu-12.04|g" ${BUILD_DIR}/cctools2odcctools/extract.sh
|
||||
sed -i "s|\${LLVM_CLANG_DIR}/llvmCore/include/llvm-c|\${LLVM_CLANG_DIR}/include/llvm-c \${LLVM_CLANG_DIR}/include/llvm |" ${BUILD_DIR}/cctools2odcctools/extract.sh
|
||||
|
||||
sed -i "s|fAC_INIT|AC_INIT|" ${BUILD_DIR}/cctools2odcctools/files/configure.ac
|
||||
sed -i 's/\# Dynamically linked LTO/\t ;\&\n\t linux*)\n# Dynamically linked LTO/' ${BUILD_DIR}/cctools2odcctools/files/configure.ac
|
||||
|
||||
cd ${BUILD_DIR}/cctools2odcctools
|
||||
./extract.sh --osxver 10.7
|
||||
cd odcctools-809
|
||||
./configure --prefix=${NATIVEPREFIX} --target=${HOST} CFLAGS="${CFLAGS} -I${NATIVEPREFIX}/include -D__DARWIN_UNIX03 -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS" LDFLAGS="${LDFLAGS} -Wl,-rpath=\\\$\$ORIGIN/../lib" --with-sysroot=${SDK}
|
||||
|
||||
# The 'PC' define in sparc/reg.h conflicts but doesn't get used anyway. Just rename it.
|
||||
sed -i "s|define\tPC|define\tPC_|" ${BUILD_DIR}/cctools2odcctools/odcctools-809/include/architecture/sparc/reg.h
|
||||
make $MAKEOPTS
|
||||
make install
|
||||
popd
|
||||
|
||||
# protoc
|
||||
SOURCE_FILE=${SOURCES_PATH}/protobuf-2.5.0.tar.bz2
|
||||
BUILD_DIR=${BUILD_BASE}/protobuf-2.5.0
|
||||
|
||||
tar -C ${BUILD_BASE} -xjf ${SOURCE_FILE}
|
||||
pushd ${BUILD_DIR};
|
||||
./configure --enable-shared=no --disable-dependency-tracking --prefix=${NATIVEPREFIX}
|
||||
make $MAKEOPTS
|
||||
cp ${BUILD_DIR}/src/protoc ${NATIVEPREFIX}/bin/
|
||||
popd
|
||||
|
||||
# cdrkit
|
||||
SOURCE_FILE=${SOURCES_PATH}/cdrkit-1.1.11.tar.gz
|
||||
BUILD_DIR=${BUILD_BASE}/cdrkit-1.1.11
|
||||
|
||||
tar -C ${BUILD_BASE} -xf ${SOURCE_FILE}
|
||||
pushd ${BUILD_DIR}
|
||||
patch -p1 < ${SOURCES_PATH}/cdrkit-deterministic.patch
|
||||
cmake -DCMAKE_INSTALL_PREFIX=${NATIVEPREFIX}
|
||||
make $MAKEOPTS genisoimage
|
||||
make -C genisoimage install
|
||||
popd
|
||||
|
||||
# libdmg-hfsplus
|
||||
SOURCE_FILE=${SOURCES_PATH}/libdmg-hfsplus-v0.1.tar.gz
|
||||
BUILD_DIR=${BUILD_BASE}/libdmg-hfsplus-libdmg-hfsplus-v0.1
|
||||
|
||||
tar -C ${BUILD_BASE} -xf ${SOURCE_FILE}
|
||||
mkdir -p ${BUILD_DIR}/build
|
||||
pushd ${BUILD_DIR}/build
|
||||
cmake -DCMAKE_INSTALL_PREFIX:PATH=${NATIVEPREFIX}/bin ..
|
||||
make $MAKEOPTS
|
||||
make install
|
||||
popd
|
||||
|
||||
rm -rf native-prefix/docs
|
||||
|
||||
export GZIP="-9n"
|
||||
find native-prefix | sort | tar --no-recursion -czf osx-native-depends-$REVISION.tar.gz -T -
|
||||
mv osx-native-depends-$REVISION.tar.gz $OUTDIR
|
||||
186
contrib/gitian-descriptors/gitian-osx-qt.yml
Normal file
@@ -0,0 +1,186 @@
|
||||
---
|
||||
name: "osx-qt"
|
||||
suites:
|
||||
- "precise"
|
||||
architectures:
|
||||
- "i386"
|
||||
packages:
|
||||
- "git-core"
|
||||
- "automake"
|
||||
- "p7zip-full"
|
||||
|
||||
reference_datetime: "2013-06-01 00:00:00"
|
||||
remotes: []
|
||||
files:
|
||||
- "qt-everywhere-opensource-src-5.2.1.tar.gz"
|
||||
- "osx-native-depends-r3.tar.gz"
|
||||
- "osx-depends-r8.tar.gz"
|
||||
- "MacOSX10.7.sdk.tar.gz"
|
||||
|
||||
script: |
|
||||
|
||||
echo "84e924181d4ad6db00239d87250cc89868484a14841f77fb85ab1f1dbdcd7da1 qt-everywhere-opensource-src-5.2.1.tar.gz" | sha256sum -c
|
||||
|
||||
REVISION=r7
|
||||
export SOURCES_PATH=`pwd`
|
||||
export TAR_OPTIONS="-m --mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME""
|
||||
export ZERO_AR_DATE=1
|
||||
|
||||
export TZ=UTC
|
||||
|
||||
REAL_DATE=`which date`
|
||||
echo '#!/bin/bash' > $HOME/date
|
||||
echo "$REAL_DATE -d \"${REFERENCE_DATETIME}\" \"\$@\"" >> $HOME/date
|
||||
|
||||
chmod +x $HOME/date
|
||||
export PATH=$HOME:$PATH
|
||||
|
||||
mkdir -p osx-cross-depends/build
|
||||
cd osx-cross-depends
|
||||
|
||||
PREFIX=`pwd`/prefix
|
||||
NATIVEPREFIX=`pwd`/native-prefix
|
||||
BUILD_BASE=`pwd`/build
|
||||
SDK=`pwd`/SDKs/MacOSX10.7.sdk
|
||||
HOST=x86_64-apple-darwin11
|
||||
MIN_VERSION=10.6
|
||||
|
||||
INT_CFLAGS="-target ${HOST} -mmacosx-version-min=${MIN_VERSION} --sysroot ${SDK} -msse2 -Qunused-arguments"
|
||||
INT_CXXFLAGS="${INT_CFLAGS}"
|
||||
INT_LDFLAGS="-L${PREFIX}/lib -L${SDK}/usr/lib/i686-apple-darwin10/4.2.1"
|
||||
INT_LDFLAGS_CLANG="-B${NATIVEPREFIX}/bin"
|
||||
INT_CPPFLAGS="-I${PREFIX}/include"
|
||||
INT_CC=clang
|
||||
INT_CXX=clang++
|
||||
INT_OBJC=clang
|
||||
INT_OBJCXX=clang++
|
||||
INT_AR=${HOST}-ar
|
||||
INT_RANLIB=${HOST}-ranlib
|
||||
INT_LIBTOOL=${HOST}-libtool
|
||||
INT_INSTALL_NAME_TOOL=${HOST}-install_name_tool
|
||||
|
||||
export PATH=${NATIVEPREFIX}/bin:${PATH}
|
||||
|
||||
mkdir -p ${NATIVEPREFIX}/bin
|
||||
mkdir -p ${NATIVEPREFIX}/lib
|
||||
mkdir -p ${PREFIX}/bin
|
||||
mkdir -p ${PREFIX}/lib
|
||||
mkdir -p ${BUILD_BASE}
|
||||
|
||||
mkdir -p SDKs
|
||||
tar -C SDKs -xf ${SOURCES_PATH}/MacOSX10.7.sdk.tar.gz
|
||||
|
||||
tar xf /home/ubuntu/build/osx-native-depends-r3.tar.gz
|
||||
|
||||
export PATH=`pwd`/native-prefix/bin:$PATH
|
||||
tar xf /home/ubuntu/build/osx-depends-r8.tar.gz
|
||||
|
||||
SOURCE_FILE=${SOURCES_PATH}/qt-everywhere-opensource-src-5.2.1.tar.gz
|
||||
BUILD_DIR=${BUILD_BASE}/qt-everywhere-opensource-src-5.2.1
|
||||
|
||||
|
||||
tar -C ${BUILD_BASE} -xf ${SOURCE_FILE}
|
||||
|
||||
# Install our mkspec. All files are pulled from the macx-clang spec, except for
|
||||
# our custom qmake.conf
|
||||
SPECFILE=${BUILD_DIR}/qtbase/mkspecs/macx-clang-linux/qmake.conf
|
||||
|
||||
mkdir -p ${BUILD_DIR}/qtbase/mkspecs/macx-clang-linux
|
||||
cp -f ${BUILD_DIR}/qtbase/mkspecs/macx-clang/Info.plist.lib ${BUILD_DIR}/qtbase/mkspecs/macx-clang-linux/
|
||||
cp -f ${BUILD_DIR}/qtbase/mkspecs/macx-clang/Info.plist.app ${BUILD_DIR}/qtbase/mkspecs/macx-clang-linux/
|
||||
cp -f ${BUILD_DIR}/qtbase/mkspecs/macx-clang/qplatformdefs.h ${BUILD_DIR}/qtbase/mkspecs/macx-clang-linux/
|
||||
|
||||
cat > ${SPECFILE} <<ENDCONF
|
||||
|
||||
MAKEFILE_GENERATOR = UNIX
|
||||
CONFIG += app_bundle incremental global_init_link_order lib_version_first plugin_no_soname absolute_library_soname
|
||||
QMAKE_INCREMENTAL_STYLE = sublib
|
||||
|
||||
include(../common/macx.conf)
|
||||
include(../common/gcc-base-mac.conf)
|
||||
include(../common/clang.conf)
|
||||
include(../common/clang-mac.conf)
|
||||
|
||||
QMAKE_XCODE_VERSION=4.3
|
||||
QMAKE_XCODE_DEVELOPER_PATH=/Developer
|
||||
|
||||
QMAKE_MACOSX_DEPLOYMENT_TARGET = ${MIN_VERSION}
|
||||
|
||||
QMAKE_MAC_SDK=macosx
|
||||
QMAKE_MAC_SDK.macosx.path = ${SDK}
|
||||
QMAKE_MAC_SDK.macosx.platform_name = macosx
|
||||
QMAKE_MAC_SDK_PATH=${SDK}
|
||||
|
||||
QMAKE_CFLAGS += -target ${HOST}
|
||||
QMAKE_OBJECTIVE_CFLAGS += -target ${HOST}
|
||||
QMAKE_CXXFLAGS += -target ${HOST}
|
||||
|
||||
QMAKE_LFLAGS += -target ${HOST}
|
||||
QMAKE_AR = ${HOST}-ar cq
|
||||
QMAKE_RANLIB=${HOST}-ranlib
|
||||
QMAKE_LIBTOOL=${HOST}-libtool
|
||||
QMAKE_INSTALL_NAME_TOOL=${HOST}-install_name_tool
|
||||
|
||||
load(qt_config)
|
||||
|
||||
ENDCONF
|
||||
|
||||
pushd ${BUILD_DIR}
|
||||
./configure -release -opensource -openssl-linked \
|
||||
-no-audio-backend -no-javascript-jit -no-sql-sqlite -no-sql-tds \
|
||||
-no-cups -no-iconv -no-dbus -no-gif -no-audio-backend -no-freetype \
|
||||
-no-javascript-jit -no-sql-sqlite -no-nis -no-cups -no-iconv -no-pch \
|
||||
-no-dbus -no-gif -no-sm -nomake examples -no-feature-style-plastique \
|
||||
-no-xcb -no-qml-debug -no-pch -no-nis \
|
||||
-no-feature-style-cde -no-feature-style-s60 -no-feature-style-motif \
|
||||
-no-feature-style-windowsmobile -no-feature-style-windowsce \
|
||||
-no-feature-style-cleanlooks \
|
||||
-no-sql-db2 -no-sql-ibase -no-sql-oci -no-sql-tds -no-sql-mysql \
|
||||
-no-sql-odbc -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 \
|
||||
-skip qtsvg -skip qtwebkit -skip qtwebkit-examples -skip qtserialport \
|
||||
-skip qtdeclarative -skip qtmultimedia -skip qtimageformats \
|
||||
-skip qtlocation -skip qtsensors -skip qtquick1 -skip qtxmlpatterns \
|
||||
-skip qtquickcontrols -skip qtactiveqt -skip qtconnectivity \
|
||||
-skip qtwinextras -skip qtscript \
|
||||
-prefix ${PREFIX} -bindir ${NATIVEPREFIX}/bin \
|
||||
-confirm-license -xplatform macx-clang-linux -v ${INT_LDFLAGS}
|
||||
|
||||
# RCC's output is sorted using each file entry's hash as the key. Unfortunately,
|
||||
# the hash function uses a random seed for each run so the results aren't
|
||||
# deterministic. This leads to static resources being defined in a random order,
|
||||
# which in-turn means that object files are not predictable.
|
||||
# Fortunately, this upsets Qt's unit tests as well, so they've added the
|
||||
# QT_RCC_TEST environment variable to set a pre-defined seed. Here, do the same
|
||||
# thing for the same reason.
|
||||
QT_RCC_TEST=1 make $MAKEOPTS module-qtbase-make_first
|
||||
|
||||
|
||||
make $MAKEOPTS module-qttranslations-make_first
|
||||
make $MAKEOPTS module-qttools-make_first
|
||||
make $MAKEOPTS -C qtbase
|
||||
make -C qtbase install
|
||||
make -C qttranslations install
|
||||
make -C qttools/src/linguist install
|
||||
popd
|
||||
|
||||
# This file should not be installed to the destination. It's native and
|
||||
# non-deterministic. Remove it.
|
||||
# See: https://bugreports.qt-project.org/browse/QTBUG-31393
|
||||
rm -f ${PREFIX}/lib/libQt5Bootstrap.a
|
||||
|
||||
rm -f ${PREFIX}/lib/Qt*.framework/Qt*.prl
|
||||
pushd ${PREFIX}/include
|
||||
ln -sf ../lib/QtNetwork.framework/Headers/ QtNetwork
|
||||
ln -sf ../lib/QtWidgets.framework/Headers/ QtWidgets
|
||||
ln -sf ../lib/QtGui.framework/Headers/ QtGui
|
||||
ln -sf ../lib/QtCore.framework/Headers/ QtCore
|
||||
ln -sf ../lib/QtTest.framework/Headers/ QtTest
|
||||
popd
|
||||
|
||||
rm -f ${PREFIX}/lib/*.la
|
||||
find ${PREFIX}/lib -name "*.prl" -delete
|
||||
|
||||
export GZIP="-9n"
|
||||
find native-prefix prefix | sort | tar --no-recursion -czf osx-depends-qt-5.2.1-${REVISION}.tar.gz -T -
|
||||
|
||||
mv osx-depends-qt-5.2.1-${REVISION}.tar.gz $OUTDIR
|
||||
@@ -22,12 +22,12 @@ remotes:
|
||||
- "url": "https://github.com/bitcoin/bitcoin.git"
|
||||
"dir": "bitcoin"
|
||||
files:
|
||||
- "qt-win32-5.2.0-gitian-r2.zip"
|
||||
- "qt-win64-5.2.0-gitian-r2.zip"
|
||||
- "qt-win32-5.2.0-gitian-r3.zip"
|
||||
- "qt-win64-5.2.0-gitian-r3.zip"
|
||||
- "boost-win32-1.55.0-gitian-r6.zip"
|
||||
- "boost-win64-1.55.0-gitian-r6.zip"
|
||||
- "bitcoin-deps-win32-gitian-r10.zip"
|
||||
- "bitcoin-deps-win64-gitian-r10.zip"
|
||||
- "bitcoin-deps-win32-gitian-r16.zip"
|
||||
- "bitcoin-deps-win64-gitian-r16.zip"
|
||||
- "protobuf-win32-2.5.0-gitian-r4.zip"
|
||||
- "protobuf-win64-2.5.0-gitian-r4.zip"
|
||||
script: |
|
||||
@@ -59,9 +59,9 @@ script: |
|
||||
mkdir -p $STAGING $BUILDDIR $BINDIR
|
||||
#
|
||||
cd $STAGING
|
||||
unzip $INDIR/qt-win${BITS}-5.2.0-gitian-r2.zip
|
||||
unzip $INDIR/qt-win${BITS}-5.2.0-gitian-r3.zip
|
||||
unzip $INDIR/boost-win${BITS}-1.55.0-gitian-r6.zip
|
||||
unzip $INDIR/bitcoin-deps-win${BITS}-gitian-r10.zip
|
||||
unzip $INDIR/bitcoin-deps-win${BITS}-gitian-r16.zip
|
||||
unzip $INDIR/protobuf-win${BITS}-2.5.0-gitian-r4.zip
|
||||
if [ "$NEEDDIST" == "1" ]; then
|
||||
# Make source code archive which is architecture independent so it only needs to be done once
|
||||
|
||||
264
contrib/gitian-descriptors/qt-linux.yml
Normal file
@@ -0,0 +1,264 @@
|
||||
---
|
||||
name: "qt-linux"
|
||||
suites:
|
||||
- "precise"
|
||||
architectures:
|
||||
- "i386"
|
||||
- "amd64"
|
||||
packages:
|
||||
- "zip"
|
||||
- "unzip"
|
||||
- "faketime"
|
||||
- "unzip"
|
||||
- "libxext-dev"
|
||||
reference_datetime: "2011-01-30 00:00:00"
|
||||
remotes: []
|
||||
files:
|
||||
- "qt-everywhere-opensource-src-4.6.4.tar.gz"
|
||||
script: |
|
||||
export FAKETIME=$REFERENCE_DATETIME
|
||||
export TZ=UTC
|
||||
if [ "$GBUILD_BITS" == "32" ]; then
|
||||
ARCH='i386-linux-gnu'
|
||||
else
|
||||
ARCH='x86_64-linux-gnu'
|
||||
fi
|
||||
# The purpose of this gitian build is not to actually build Qt, but to export
|
||||
# the headers as well as pkgconfig files in a useable format so that we can
|
||||
# pretend to link against an older version. The goal is to link to the
|
||||
# system version of Qt 4.
|
||||
# Also build development tools.
|
||||
INSTALLPREFIX="$HOME/install"
|
||||
# Integrity Check
|
||||
echo "9ad4d46c721b53a429ed5a2eecfd3c239a9ab566562f183f99d3125f1a234250 qt-everywhere-opensource-src-4.6.4.tar.gz" | sha256sum -c
|
||||
# Make install directories
|
||||
mkdir -p $INSTALLPREFIX
|
||||
mkdir -p $INSTALLPREFIX/include
|
||||
PKGCONFIGDIR=$INSTALLPREFIX/lib/pkgconfig
|
||||
mkdir -p $PKGCONFIGDIR
|
||||
#
|
||||
tar xzf qt-everywhere-opensource-src-4.6.4.tar.gz
|
||||
cd qt-everywhere-opensource-src-4.6.4
|
||||
QTBUILDDIR=$(pwd)
|
||||
sed 's/TODAY=`date +%Y-%m-%d`/TODAY=2011-01-30/' -i configure
|
||||
|
||||
# Need to build 4.6-versioned host utilities as well (lrelease/qrc/lupdate/...)
|
||||
./configure -prefix $INSTALLPREFIX -confirm-license -release -opensource -no-qt3support -no-multimedia -no-audio-backend -no-phonon -no-phonon-backend -no-declarative -no-script -no-scripttools -no-javascript-jit -no-webkit -no-svg -no-xmlpatterns -no-sql-sqlite -no-nis -no-cups -no-iconv -no-dbus -no-gif -no-libtiff -no-opengl -nomake examples -nomake demos -nomake docs
|
||||
#
|
||||
make $MAKEOPTS -C src/tools install # (rcc, uic, moc)
|
||||
make $MAKEOPTS -C tools/linguist/lrelease install # (lrelease)
|
||||
# install includes and pkgconfig files
|
||||
for DIR in src/corelib src/gui src/testlib src/dbus src/network; do
|
||||
(
|
||||
cd $DIR
|
||||
# extract module (QtCore/QtNetwork/...) from Makefile
|
||||
MODULE=$(grep "QMAKE_TARGET *=" Makefile | cut -d = -f 2 | xargs)
|
||||
# patch makefile so that not everything is build first
|
||||
sed -i 's/first: all/first:/g' Makefile
|
||||
make install_flat_headers install_class_headers install_targ_headers
|
||||
# create and install pkgconfig descriptor
|
||||
make ../../lib/pkgconfig/$MODULE.pc
|
||||
sed -e "s,$QTBUILDDIR,$INSTALLPREFIX,g" ../../lib/pkgconfig/$MODULE.pc > $PKGCONFIGDIR/$MODULE.pc
|
||||
# create links to existing Qt libraries
|
||||
ln -sf /usr/lib/${ARCH}/lib${MODULE}.so.4 ${INSTALLPREFIX}/lib/lib${MODULE}.so
|
||||
)
|
||||
done
|
||||
|
||||
# Write our own configuration header, same as Ubuntu
|
||||
# When we don't do this, the configuration will be without STL support (the QString from/to stdString methods)
|
||||
QCONFIG=$INSTALLPREFIX/include/Qt/qconfig.h
|
||||
echo '
|
||||
/* Qt Edition */
|
||||
#ifndef QT_EDITION
|
||||
# define QT_EDITION QT_EDITION_OPENSOURCE
|
||||
#endif
|
||||
' > $QCONFIG
|
||||
|
||||
if [ "$GBUILD_BITS" == "32" ]; then
|
||||
echo '
|
||||
/* Machine byte-order */
|
||||
#define Q_BIG_ENDIAN 4321
|
||||
#define Q_LITTLE_ENDIAN 1234
|
||||
#define QT_BUILD_KEY "i386 linux g++-4 full-config"
|
||||
#define QT_BUILD_KEY_COMPAT "i686 Linux g++-4 full-config"
|
||||
|
||||
#ifdef QT_BOOTSTRAPPED
|
||||
#define Q_BYTE_ORDER Q_LITTLE_ENDIAN
|
||||
#else
|
||||
#define Q_BYTE_ORDER Q_LITTLE_ENDIAN
|
||||
#endif
|
||||
/* Machine Architecture */
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
# define QT_ARCH_I386
|
||||
#else
|
||||
# define QT_ARCH_I386
|
||||
#endif
|
||||
/* Compile time features */
|
||||
#define QT_LARGEFILE_SUPPORT 64
|
||||
#define QT_POINTER_SIZE 4
|
||||
' >> $QCONFIG
|
||||
else
|
||||
echo '
|
||||
/* Machine byte-order */
|
||||
#define Q_BIG_ENDIAN 4321
|
||||
#define Q_LITTLE_ENDIAN 1234
|
||||
#define QT_BUILD_KEY "x86_64 linux g++-4 full-config"
|
||||
#define QT_BUILD_KEY_COMPAT "x86_64 Linux g++-4 full-config"
|
||||
|
||||
#ifdef QT_BOOTSTRAPPED
|
||||
#define Q_BYTE_ORDER Q_LITTLE_ENDIAN
|
||||
#else
|
||||
#define Q_BYTE_ORDER Q_LITTLE_ENDIAN
|
||||
#endif
|
||||
/* Machine Architecture */
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
# define QT_ARCH_X86_64
|
||||
#else
|
||||
# define QT_ARCH_X86_64
|
||||
#endif
|
||||
/* Compile time features */
|
||||
#define QT_LARGEFILE_SUPPORT 64
|
||||
#define QT_POINTER_SIZE 8
|
||||
' >> $QCONFIG
|
||||
fi
|
||||
|
||||
echo '
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
|
||||
#if defined(QT_NO_EGL) && defined(QT_EGL)
|
||||
# undef QT_NO_EGL
|
||||
#elif !defined(QT_NO_EGL) && !defined(QT_EGL)
|
||||
# define QT_NO_EGL
|
||||
#endif
|
||||
|
||||
#if defined(QT_NO_GSTREAMER) && defined(QT_GSTREAMER)
|
||||
# undef QT_NO_GSTREAMER
|
||||
#elif !defined(QT_NO_GSTREAMER) && !defined(QT_GSTREAMER)
|
||||
# define QT_NO_GSTREAMER
|
||||
#endif
|
||||
|
||||
#if defined(QT_NO_ICD) && defined(QT_ICD)
|
||||
# undef QT_NO_ICD
|
||||
#elif !defined(QT_NO_ICD) && !defined(QT_ICD)
|
||||
# define QT_NO_ICD
|
||||
#endif
|
||||
|
||||
#if defined(QT_NO_IMAGEFORMAT_JPEG) && defined(QT_IMAGEFORMAT_JPEG)
|
||||
# undef QT_NO_IMAGEFORMAT_JPEG
|
||||
#elif !defined(QT_NO_IMAGEFORMAT_JPEG) && !defined(QT_IMAGEFORMAT_JPEG)
|
||||
# define QT_NO_IMAGEFORMAT_JPEG
|
||||
#endif
|
||||
|
||||
#if defined(QT_NO_IMAGEFORMAT_MNG) && defined(QT_IMAGEFORMAT_MNG)
|
||||
# undef QT_NO_IMAGEFORMAT_MNG
|
||||
#elif !defined(QT_NO_IMAGEFORMAT_MNG) && !defined(QT_IMAGEFORMAT_MNG)
|
||||
# define QT_NO_IMAGEFORMAT_MNG
|
||||
#endif
|
||||
|
||||
#if defined(QT_NO_IMAGEFORMAT_TIFF) && defined(QT_IMAGEFORMAT_TIFF)
|
||||
# undef QT_NO_IMAGEFORMAT_TIFF
|
||||
#elif !defined(QT_NO_IMAGEFORMAT_TIFF) && !defined(QT_IMAGEFORMAT_TIFF)
|
||||
# define QT_NO_IMAGEFORMAT_TIFF
|
||||
#endif
|
||||
|
||||
#if defined(QT_NO_MULTIMEDIA) && defined(QT_MULTIMEDIA)
|
||||
# undef QT_NO_MULTIMEDIA
|
||||
#elif !defined(QT_NO_MULTIMEDIA) && !defined(QT_MULTIMEDIA)
|
||||
# define QT_NO_MULTIMEDIA
|
||||
#endif
|
||||
|
||||
#if defined(QT_NO_OPENVG) && defined(QT_OPENVG)
|
||||
# undef QT_NO_OPENVG
|
||||
#elif !defined(QT_NO_OPENVG) && !defined(QT_OPENVG)
|
||||
# define QT_NO_OPENVG
|
||||
#endif
|
||||
|
||||
#if defined(QT_NO_PHONON) && defined(QT_PHONON)
|
||||
# undef QT_NO_PHONON
|
||||
#elif !defined(QT_NO_PHONON) && !defined(QT_PHONON)
|
||||
# define QT_NO_PHONON
|
||||
#endif
|
||||
|
||||
#if defined(QT_NO_PULSEAUDIO) && defined(QT_PULSEAUDIO)
|
||||
# undef QT_NO_PULSEAUDIO
|
||||
#elif !defined(QT_NO_PULSEAUDIO) && !defined(QT_PULSEAUDIO)
|
||||
# define QT_NO_PULSEAUDIO
|
||||
#endif
|
||||
|
||||
#if defined(QT_NO_S60) && defined(QT_S60)
|
||||
# undef QT_NO_S60
|
||||
#elif !defined(QT_NO_S60) && !defined(QT_S60)
|
||||
# define QT_NO_S60
|
||||
#endif
|
||||
|
||||
#if defined(QT_NO_STYLE_S60) && defined(QT_STYLE_S60)
|
||||
# undef QT_NO_STYLE_S60
|
||||
#elif !defined(QT_NO_STYLE_S60) && !defined(QT_STYLE_S60)
|
||||
# define QT_NO_STYLE_S60
|
||||
#endif
|
||||
|
||||
#if defined(QT_NO_SXE) && defined(QT_SXE)
|
||||
# undef QT_NO_SXE
|
||||
#elif !defined(QT_NO_SXE) && !defined(QT_SXE)
|
||||
# define QT_NO_SXE
|
||||
#endif
|
||||
|
||||
#if defined(QT_NO_WEBKIT) && defined(QT_WEBKIT)
|
||||
# undef QT_NO_WEBKIT
|
||||
#elif !defined(QT_NO_WEBKIT) && !defined(QT_WEBKIT)
|
||||
# define QT_NO_WEBKIT
|
||||
#endif
|
||||
|
||||
#if defined(QT_NO_ZLIB) && defined(QT_ZLIB)
|
||||
# undef QT_NO_ZLIB
|
||||
#elif !defined(QT_NO_ZLIB) && !defined(QT_ZLIB)
|
||||
# define QT_NO_ZLIB
|
||||
#endif
|
||||
|
||||
#if defined(QT_RUNTIME_XCURSOR) && defined(QT_NO_RUNTIME_XCURSOR)
|
||||
# undef QT_RUNTIME_XCURSOR
|
||||
#elif !defined(QT_RUNTIME_XCURSOR) && !defined(QT_NO_RUNTIME_XCURSOR)
|
||||
# define QT_RUNTIME_XCURSOR
|
||||
#endif
|
||||
|
||||
#if defined(QT_RUNTIME_XFIXES) && defined(QT_NO_RUNTIME_XFIXES)
|
||||
# undef QT_RUNTIME_XFIXES
|
||||
#elif !defined(QT_RUNTIME_XFIXES) && !defined(QT_NO_RUNTIME_XFIXES)
|
||||
# define QT_RUNTIME_XFIXES
|
||||
#endif
|
||||
|
||||
#if defined(QT_RUNTIME_XINERAMA) && defined(QT_NO_RUNTIME_XINERAMA)
|
||||
# undef QT_RUNTIME_XINERAMA
|
||||
#elif !defined(QT_RUNTIME_XINERAMA) && !defined(QT_NO_RUNTIME_XINERAMA)
|
||||
# define QT_RUNTIME_XINERAMA
|
||||
#endif
|
||||
|
||||
#if defined(QT_RUNTIME_XINPUT) && defined(QT_NO_RUNTIME_XINPUT)
|
||||
# undef QT_RUNTIME_XINPUT
|
||||
#elif !defined(QT_RUNTIME_XINPUT) && !defined(QT_NO_RUNTIME_XINPUT)
|
||||
# define QT_RUNTIME_XINPUT
|
||||
#endif
|
||||
|
||||
#if defined(QT_RUNTIME_XRANDR) && defined(QT_NO_RUNTIME_XRANDR)
|
||||
# undef QT_RUNTIME_XRANDR
|
||||
#elif !defined(QT_RUNTIME_XRANDR) && !defined(QT_NO_RUNTIME_XRANDR)
|
||||
# define QT_RUNTIME_XRANDR
|
||||
#endif
|
||||
|
||||
#if defined(QT_USE_MATH_H_FLOATS) && defined(QT_NO_USE_MATH_H_FLOATS)
|
||||
# undef QT_USE_MATH_H_FLOATS
|
||||
#elif !defined(QT_USE_MATH_H_FLOATS) && !defined(QT_NO_USE_MATH_H_FLOATS)
|
||||
# define QT_USE_MATH_H_FLOATS
|
||||
#endif
|
||||
|
||||
#endif // QT_BOOTSTRAPPED
|
||||
|
||||
#define QT_VISIBILITY_AVAILABLE
|
||||
' >> $QCONFIG
|
||||
cp $QCONFIG $INSTALLPREFIX/include/QtCore/qconfig.h
|
||||
|
||||
cd $INSTALLPREFIX
|
||||
# as zip stores file timestamps, use faketime to intercept stat calls to set dates for all files to reference date
|
||||
export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
|
||||
# Create a .tar.gz because .zip has problems with symbolic links
|
||||
find | sort | tar --no-recursion -cT /dev/stdin --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 --mtime="$REFERENCE_DATETIME" | gzip -n > $OUTDIR/qt-linux${GBUILD_BITS}-4.6.4-gitian-r1.tar.gz
|
||||
@@ -15,8 +15,8 @@ reference_datetime: "2011-01-30 00:00:00"
|
||||
remotes: []
|
||||
files:
|
||||
- "qt-everywhere-opensource-src-5.2.0.tar.gz"
|
||||
- "bitcoin-deps-win32-gitian-r10.zip"
|
||||
- "bitcoin-deps-win64-gitian-r10.zip"
|
||||
- "bitcoin-deps-win32-gitian-r16.zip"
|
||||
- "bitcoin-deps-win64-gitian-r16.zip"
|
||||
script: |
|
||||
# Defines
|
||||
export TZ=UTC
|
||||
@@ -48,7 +48,7 @@ script: |
|
||||
#
|
||||
# Need mingw-compiled openssl from bitcoin-deps:
|
||||
cd $DEPSDIR
|
||||
unzip $INDIR/bitcoin-deps-win${BITS}-gitian-r10.zip
|
||||
unzip $INDIR/bitcoin-deps-win${BITS}-gitian-r16.zip
|
||||
#
|
||||
cd $BUILDDIR
|
||||
#
|
||||
@@ -86,7 +86,7 @@ script: |
|
||||
export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
|
||||
export FAKETIME=$REFERENCE_DATETIME
|
||||
find -print0 | xargs -r0 touch # fix up timestamps before packaging
|
||||
find | sort | zip -X@ $OUTDIR/qt-win${BITS}-5.2.0-gitian-r2.zip
|
||||
find | sort | zip -X@ $OUTDIR/qt-win${BITS}-5.2.0-gitian-r3.zip
|
||||
unset LD_PRELOAD
|
||||
unset FAKETIME
|
||||
done # for BITS in
|
||||
|
||||
BIN
contrib/gitian-downloader/aschildbach-key.pgp
Normal file
@@ -8,39 +8,32 @@ rss:
|
||||
pattern: bitcoin-\d+.\d+.\d+-linux-gitian.zip
|
||||
signers:
|
||||
0A82509767C7D4A5D14DA2301AE1D35043E08E54:
|
||||
weight: 40
|
||||
name: BlueMatt
|
||||
key: bluematt
|
||||
BF6273FAEF7CC0BA1F562E50989F6B3048A116B5:
|
||||
weight: 40
|
||||
name: Devrandom
|
||||
key: devrandom
|
||||
E463A93F5F3117EEDE6C7316BD02942421F4889F:
|
||||
weight: 40
|
||||
name: Luke-Jr
|
||||
key: luke-jr
|
||||
D762373D24904A3E42F33B08B9A408E71DAAC974:
|
||||
weight: 40
|
||||
name: "Pieter Wuille"
|
||||
key: sipa
|
||||
77E72E69DA7EE0A148C06B21B34821D4944DE5F7:
|
||||
weight: 40
|
||||
name: tcatm
|
||||
key: tcatm
|
||||
01CDF4627A3B88AAE4A571C87588242FBE38D3A8:
|
||||
weight: 40
|
||||
name: "Gavin Andresen"
|
||||
key: gavinandresen
|
||||
71A3B16735405025D447E8F274810B012346C9A6:
|
||||
weight: 40
|
||||
name: "Wladimir J. van der Laan"
|
||||
key: laanwj
|
||||
AEC1884398647C47413C1C3FB1179EB7347DC10D:
|
||||
weight: 40
|
||||
name: "Warren Togami"
|
||||
key: wtogami
|
||||
9692B91BBF0E8D34DFD33B1882C5C009628ECF0C:
|
||||
weight: 1
|
||||
name: michagogo
|
||||
key: michagogo
|
||||
minimum_weight: 120
|
||||
E944AE667CF960B1004BC32FCA662BE18B877A60:
|
||||
name: "Andreas Schildbach"
|
||||
key: aschildbach
|
||||
|
||||
@@ -8,39 +8,32 @@ rss:
|
||||
pattern: bitcoin-\d+.\d+.\d+-win32-gitian.zip
|
||||
signers:
|
||||
0A82509767C7D4A5D14DA2301AE1D35043E08E54:
|
||||
weight: 40
|
||||
name: BlueMatt
|
||||
key: bluematt
|
||||
BF6273FAEF7CC0BA1F562E50989F6B3048A116B5:
|
||||
weight: 40
|
||||
name: Devrandom
|
||||
key: devrandom
|
||||
E463A93F5F3117EEDE6C7316BD02942421F4889F:
|
||||
weight: 40
|
||||
name: Luke-Jr
|
||||
key: luke-jr
|
||||
D762373D24904A3E42F33B08B9A408E71DAAC974:
|
||||
weight: 40
|
||||
name: "Pieter Wuille"
|
||||
key: sipa
|
||||
77E72E69DA7EE0A148C06B21B34821D4944DE5F7:
|
||||
weight: 40
|
||||
name: tcatm
|
||||
key: tcatm
|
||||
01CDF4627A3B88AAE4A571C87588242FBE38D3A8:
|
||||
weight: 40
|
||||
name: "Gavin Andresen"
|
||||
key: gavinandresen
|
||||
71A3B16735405025D447E8F274810B012346C9A6:
|
||||
weight: 40
|
||||
name: "Wladimir J. van der Laan"
|
||||
key: laanwj
|
||||
AEC1884398647C47413C1C3FB1179EB7347DC10D:
|
||||
weight: 40
|
||||
name: "Warren Togami"
|
||||
key: wtogami
|
||||
9692B91BBF0E8D34DFD33B1882C5C009628ECF0C:
|
||||
weight: 1
|
||||
name: michagogo
|
||||
key: michagogo
|
||||
minimum_weight: 120
|
||||
E944AE667CF960B1004BC32FCA662BE18B877A60:
|
||||
name: "Andreas Schildbach"
|
||||
key: aschildbach
|
||||
|
||||
BIN
contrib/macdeploy/DS_Store
Normal file
@@ -38,7 +38,10 @@ class FrameworkInfo(object):
|
||||
self.sourceFilePath = ""
|
||||
self.destinationDirectory = ""
|
||||
self.sourceResourcesDirectory = ""
|
||||
self.sourceVersionContentsDirectory = ""
|
||||
self.sourceContentsDirectory = ""
|
||||
self.destinationResourcesDirectory = ""
|
||||
self.destinationVersionContentsDirectory = ""
|
||||
|
||||
def __eq__(self, other):
|
||||
if self.__class__ == other.__class__:
|
||||
@@ -142,7 +145,11 @@ class FrameworkInfo(object):
|
||||
info.destinationDirectory = os.path.join(cls.bundleFrameworkDirectory, info.frameworkName, info.binaryDirectory)
|
||||
|
||||
info.sourceResourcesDirectory = os.path.join(info.frameworkPath, "Resources")
|
||||
info.sourceContentsDirectory = os.path.join(info.frameworkPath, "Contents")
|
||||
info.sourceVersionContentsDirectory = os.path.join(info.frameworkPath, "Versions", info.version, "Contents")
|
||||
info.destinationResourcesDirectory = os.path.join(cls.bundleFrameworkDirectory, info.frameworkName, "Resources")
|
||||
info.destinationContentsDirectory = os.path.join(cls.bundleFrameworkDirectory, info.frameworkName, "Contents")
|
||||
info.destinationVersionContentsDirectory = os.path.join(cls.bundleFrameworkDirectory, info.frameworkName, "Versions", info.version, "Contents")
|
||||
|
||||
return info
|
||||
|
||||
@@ -196,7 +203,8 @@ class DeploymentInfo(object):
|
||||
def getFrameworks(binaryPath, verbose):
|
||||
if verbose >= 3:
|
||||
print "Inspecting with otool: " + binaryPath
|
||||
otool = subprocess.Popen(["otool", "-L", binaryPath], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
otoolbin=os.getenv("OTOOL", "otool")
|
||||
otool = subprocess.Popen([otoolbin, "-L", binaryPath], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
o_stdout, o_stderr = otool.communicate()
|
||||
if otool.returncode != 0:
|
||||
if verbose >= 1:
|
||||
@@ -221,7 +229,8 @@ def getFrameworks(binaryPath, verbose):
|
||||
return libraries
|
||||
|
||||
def runInstallNameTool(action, *args):
|
||||
subprocess.check_call(["install_name_tool", "-"+action] + list(args))
|
||||
installnametoolbin=os.getenv("INSTALLNAMETOOL", "install_name_tool")
|
||||
subprocess.check_call([installnametoolbin, "-"+action] + list(args))
|
||||
|
||||
def changeInstallName(oldName, newName, binaryPath, verbose):
|
||||
if verbose >= 3:
|
||||
@@ -239,10 +248,11 @@ def changeIdentification(id, binaryPath, verbose):
|
||||
runInstallNameTool("id", id, binaryPath)
|
||||
|
||||
def runStrip(binaryPath, verbose):
|
||||
stripbin=os.getenv("STRIP", "strip")
|
||||
if verbose >= 3:
|
||||
print "Using strip:"
|
||||
print " stripped", binaryPath
|
||||
subprocess.check_call(["strip", "-x", binaryPath])
|
||||
subprocess.check_call([stripbin, "-x", binaryPath])
|
||||
|
||||
def copyFramework(framework, path, verbose):
|
||||
if framework.sourceFilePath.startswith("Qt"):
|
||||
@@ -272,18 +282,35 @@ def copyFramework(framework, path, verbose):
|
||||
os.chmod(toPath, permissions.st_mode | stat.S_IWRITE)
|
||||
|
||||
if not framework.isDylib(): # Copy resources for real frameworks
|
||||
|
||||
linkfrom = os.path.join(path, "Contents","Frameworks", framework.frameworkName, "Versions", "Current")
|
||||
linkto = framework.version
|
||||
if not os.path.exists(linkfrom):
|
||||
os.symlink(linkto, linkfrom)
|
||||
if verbose >= 2:
|
||||
print "Linked:", linkfrom, "->", linkto
|
||||
fromResourcesDir = framework.sourceResourcesDirectory
|
||||
if os.path.exists(fromResourcesDir):
|
||||
toResourcesDir = os.path.join(path, framework.destinationResourcesDirectory)
|
||||
shutil.copytree(fromResourcesDir, toResourcesDir)
|
||||
shutil.copytree(fromResourcesDir, toResourcesDir, symlinks=True)
|
||||
if verbose >= 3:
|
||||
print "Copied resources:", fromResourcesDir
|
||||
print " to:", toResourcesDir
|
||||
fromContentsDir = framework.sourceVersionContentsDirectory
|
||||
if not os.path.exists(fromContentsDir):
|
||||
fromContentsDir = framework.sourceContentsDirectory
|
||||
if os.path.exists(fromContentsDir):
|
||||
toContentsDir = os.path.join(path, framework.destinationVersionContentsDirectory)
|
||||
shutil.copytree(fromContentsDir, toContentsDir, symlinks=True)
|
||||
contentslinkfrom = os.path.join(path, framework.destinationContentsDirectory)
|
||||
if verbose >= 3:
|
||||
print "Copied Contents:", fromContentsDir
|
||||
print " to:", toContentsDir
|
||||
elif framework.frameworkName.startswith("libQtGui"): # Copy qt_menu.nib (applies to non-framework layout)
|
||||
qtMenuNibSourcePath = os.path.join(framework.frameworkDirectory, "Resources", "qt_menu.nib")
|
||||
qtMenuNibDestinationPath = os.path.join(path, "Contents", "Resources", "qt_menu.nib")
|
||||
if os.path.exists(qtMenuNibSourcePath) and not os.path.exists(qtMenuNibDestinationPath):
|
||||
shutil.copytree(qtMenuNibSourcePath, qtMenuNibDestinationPath)
|
||||
shutil.copytree(qtMenuNibSourcePath, qtMenuNibDestinationPath, symlinks=True)
|
||||
if verbose >= 3:
|
||||
print "Copied for libQtGui:", qtMenuNibSourcePath
|
||||
print " to:", qtMenuNibDestinationPath
|
||||
@@ -347,6 +374,8 @@ def deployFrameworksForAppBundle(applicationBundle, strip, verbose):
|
||||
def deployPlugins(appBundleInfo, deploymentInfo, strip, verbose):
|
||||
# Lookup available plugins, exclude unneeded
|
||||
plugins = []
|
||||
if deploymentInfo.pluginPath is None:
|
||||
return
|
||||
for dirpath, dirnames, filenames in os.walk(deploymentInfo.pluginPath):
|
||||
pluginDirectory = os.path.relpath(dirpath, deploymentInfo.pluginPath)
|
||||
if pluginDirectory == "designer":
|
||||
@@ -421,8 +450,8 @@ def deployPlugins(appBundleInfo, deploymentInfo, strip, verbose):
|
||||
deployFrameworks([dependency], appBundleInfo.path, destinationPath, strip, verbose, deploymentInfo)
|
||||
|
||||
qt_conf="""[Paths]
|
||||
translations=Resources
|
||||
plugins=PlugIns
|
||||
Translations=Resources
|
||||
Plugins=PlugIns
|
||||
"""
|
||||
|
||||
ap = ArgumentParser(description="""Improved version of macdeployqt.
|
||||
@@ -555,7 +584,7 @@ if verbose >= 3:
|
||||
print app_bundle, "->", target
|
||||
|
||||
os.mkdir("dist")
|
||||
shutil.copytree(app_bundle, target)
|
||||
shutil.copytree(app_bundle, target, symlinks=True)
|
||||
|
||||
applicationBundle = ApplicationBundleInfo(target)
|
||||
|
||||
@@ -635,7 +664,7 @@ for p in config.add_resources:
|
||||
if verbose >= 3:
|
||||
print p, "->", t
|
||||
if os.path.isdir(p):
|
||||
shutil.copytree(p, t)
|
||||
shutil.copytree(p, t, symlinks=True)
|
||||
else:
|
||||
shutil.copy2(p, t)
|
||||
|
||||
|
||||
14
doc/Doxyfile
@@ -34,7 +34,7 @@ PROJECT_NAME = Bitcoin
|
||||
# This could be handy for archiving the generated documentation or
|
||||
# if some version control system is used.
|
||||
|
||||
PROJECT_NUMBER = 0.9.0
|
||||
PROJECT_NUMBER = 0.9.5
|
||||
|
||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||
# for a project that appears at the top of each page and should give viewer
|
||||
@@ -683,7 +683,7 @@ RECURSIVE = YES
|
||||
# excluded from the INPUT source files. This way you can easily exclude a
|
||||
# subdirectory from a directory tree whose root is specified with the INPUT tag.
|
||||
|
||||
EXCLUDE =
|
||||
EXCLUDE = src/leveldb src/json src/test /src/qt/test
|
||||
|
||||
# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
|
||||
# directories that are symbolic links (a Unix file system feature) are excluded
|
||||
@@ -705,7 +705,7 @@ EXCLUDE_PATTERNS =
|
||||
# wildcard * is used, a substring. Examples: ANamespace, AClass,
|
||||
# AClass::ANamespace, ANamespace::*Test
|
||||
|
||||
EXCLUDE_SYMBOLS =
|
||||
EXCLUDE_SYMBOLS = boost google
|
||||
|
||||
# The EXAMPLE_PATH tag can be used to specify one or more files or
|
||||
# directories that contain example code fragments that are included (see
|
||||
@@ -1577,7 +1577,7 @@ HIDE_UNDOC_RELATIONS = YES
|
||||
# toolkit from AT&T and Lucent Bell Labs. The other options in this section
|
||||
# have no effect if this option is set to NO (the default)
|
||||
|
||||
HAVE_DOT = NO
|
||||
HAVE_DOT = YES
|
||||
|
||||
# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
|
||||
# allowed to run in parallel. When set to 0 (the default) doxygen will
|
||||
@@ -1659,7 +1659,7 @@ INCLUDED_BY_GRAPH = YES
|
||||
# the time of a run. So in most cases it will be better to enable call graphs
|
||||
# for selected functions only using the \callgraph command.
|
||||
|
||||
CALL_GRAPH = NO
|
||||
CALL_GRAPH = YES
|
||||
|
||||
# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
|
||||
# doxygen will generate a caller dependency graph for every global function
|
||||
@@ -1667,7 +1667,7 @@ CALL_GRAPH = NO
|
||||
# the time of a run. So in most cases it will be better to enable caller
|
||||
# graphs for selected functions only using the \callergraph command.
|
||||
|
||||
CALLER_GRAPH = NO
|
||||
CALLER_GRAPH = YES
|
||||
|
||||
# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
|
||||
# will generate a graphical hierarchy of all classes instead of a textual one.
|
||||
@@ -1685,7 +1685,7 @@ DIRECTORY_GRAPH = YES
|
||||
# generated by dot. Possible values are svg, png, jpg, or gif.
|
||||
# If left blank png will be used.
|
||||
|
||||
DOT_IMAGE_FORMAT = png
|
||||
DOT_IMAGE_FORMAT = svg
|
||||
|
||||
# The tag DOT_PATH can be used to specify the path where the dot tool can be
|
||||
# found. If left blank, it is assumed the dot tool can be found in the path.
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
Bitcoin 0.9.0rc1 BETA
|
||||
Bitcoin 0.9.5 BETA
|
||||
=====================
|
||||
|
||||
Copyright (c) 2009-2014 Bitcoin Developers
|
||||
Copyright (c) 2009-2015 Bitcoin Developers
|
||||
|
||||
|
||||
Setup
|
||||
---------------------
|
||||
[Bitcoin Core](http://bitcoin.org/en/download) is the original Bitcoin client and it builds the backbone of the network. However, it downloads and stores the entire history of Bitcoin transactions (which is currently several GBs); depending on the speed of your computer and network connection, the synchronization process can take anywhere from a few hours to a day or more. Thankfully you only have to do this once. If you would like the process to go faster you can [download the blockchain directly](https://bitcointalk.org/index.php?topic=145386.0).
|
||||
[Bitcoin Core](http://bitcoin.org/en/download) is the original Bitcoin client and it builds the backbone of the network. However, it downloads and stores the entire history of Bitcoin transactions (which is currently several GBs); depending on the speed of your computer and network connection, the synchronization process can take anywhere from a few hours to a day or more. Thankfully you only have to do this once. If you would like the process to go faster you can [download the blockchain directly](bootstrap.md).
|
||||
|
||||
Running
|
||||
---------------------
|
||||
|
||||
75
doc/README_osx.txt
Normal file
@@ -0,0 +1,75 @@
|
||||
Deterministic OSX Dmg Notes.
|
||||
|
||||
Working OSX DMG's are created in Linux by combining a recent clang,
|
||||
the Apple's binutils (ld, ar, etc), and DMG authoring tools.
|
||||
|
||||
Apple uses clang extensively for development and has upstreamed the necessary
|
||||
functionality so that a vanilla clang can take advantage. It supports the use
|
||||
of -F, -target, -mmacosx-version-min, and --sysroot, which are all necessary
|
||||
when building for OSX. A pre-compiled version of 3.2 is used because it was not
|
||||
available in the Precise repositories at the time this work was started. In the
|
||||
future, it can be switched to use system packages instead.
|
||||
|
||||
Apple's version of binutils (called cctools) contains lots of functionality
|
||||
missing in the FSF's binutils. In addition to extra linker options for
|
||||
frameworks and sysroots, several other tools are needed as well such as
|
||||
install_name_tool, lipo, and nmedit. These do not build under linux, so they
|
||||
have been patched to do so. The work here was used as a starting point:
|
||||
https://github.com/mingwandroid/toolchain4
|
||||
|
||||
In order to build a working toolchain, the following source packages are needed
|
||||
from Apple: cctools, dyld, and ld64.
|
||||
|
||||
Beware. This part is ugly. Very very very ugly. In the future, this should be
|
||||
broken out into a new repository and cleaned up. Additionally, the binaries
|
||||
only work when built as x86 and not x86_64. This is an especially nasty
|
||||
limitation because it must be linked with the toolchain's libLTO.so, meaning
|
||||
that the entire toolchain must be x86. Gitian x86_64 should not be used until
|
||||
this has been fixed, because it would mean that several native dependencies
|
||||
(openssl, libuuid, etc) would need to be built as x86 first.
|
||||
|
||||
These tools inject timestamps by default, which produce non-deterministic
|
||||
binaries. The ZERO_AR_DATE environment variable is used to disable that.
|
||||
|
||||
This version of cctools has been patched to use the current version of clang's
|
||||
headers and and its libLTO.so rather than those from llvmgcc, as it was
|
||||
originally done in toolchain4.
|
||||
|
||||
To complicate things further, all builds must target an Apple SDK. These SDKs
|
||||
are free to download, but not redistributable.
|
||||
To obtain it, register for a developer account, then download xcode4630916281a.dmg:
|
||||
https://developer.apple.com/downloads/download.action?path=Developer_Tools/xcode_4.6.3/xcode4630916281a.dmg
|
||||
This file is several gigabytes in size, but only a single directory inside is
|
||||
needed: Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk
|
||||
|
||||
Unfortunately, the usual linux tools (7zip, hpmount, loopback mount) are incapable of opening this file.
|
||||
To create a tarball suitable for gitian input, mount the dmg in OSX, then create it with:
|
||||
$ tar -C /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ -czf MacOSX10.7.sdk.tar.gz MacOSX10.7.sdk
|
||||
|
||||
|
||||
The gitian descriptors build 2 sets of files: Linux tools, then Apple binaries
|
||||
which are created using these tools. The build process has been designed to
|
||||
avoid including the SDK's files in Gitian's outputs. All interim tarballs are
|
||||
fully deterministic and may be freely redistributed.
|
||||
|
||||
genisoimage is used to create the initial DMG. It is not deterministic as-is,
|
||||
so it has been patched. A system genisoimage will work fine, but it will not
|
||||
be deterministic because the file-order will change between invocations.
|
||||
The patch can be seen here:
|
||||
https://raw.githubusercontent.com/theuni/osx-cross-depends/master/patches/cdrtools/genisoimage.diff
|
||||
No effort was made to fix this cleanly, so it likely leaks memory badly. But
|
||||
it's only used for a single invocation, so that's no real concern.
|
||||
|
||||
genisoimage cannot compress DMGs, so afterwards, the 'dmg' tool from the
|
||||
libdmg-hfsplus project is used to compress it. There are several bugs in this
|
||||
tool and its maintainer has seemingly abandoned the project. It has been forked
|
||||
and is available (with fixes) here: https://github.com/theuni/libdmg-hfsplus .
|
||||
|
||||
The 'dmg' tool has the ability to create DMG's from scratch as well, but this
|
||||
functionality is broken. Only the compression feature is currently used.
|
||||
Ideally, the creation could be fixed and genisoimage would no longer be necessary.
|
||||
|
||||
Background images and other features can be added to DMG files by inserting a
|
||||
.DS_Store before creation. The easiest way to create this file is to build a
|
||||
DMG without one, move it to a device running OSX, customize the layout, then
|
||||
grab the .DS_Store file for later use. That is the approach taken here.
|
||||
@@ -1,6 +1,6 @@
|
||||
Bitcoin 0.9.0rc1 BETA
|
||||
Bitcoin 0.9.4 BETA
|
||||
|
||||
Copyright (c) 2009-2014 Bitcoin Core Developers
|
||||
Copyright (c) 2009-2015 Bitcoin Core Developers
|
||||
|
||||
Distributed under the MIT/X11 software license, see the accompanying
|
||||
file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
@@ -78,13 +78,13 @@ Everaldo (Everaldo Coelho)
|
||||
### Assets Used
|
||||
scripts/img/reload.xcf (modified), src/qt/res/movies/*.png
|
||||
|
||||
[Vignoni David](http://www.oxygen-icons.org)
|
||||
[Vignoni David](http://techbase.kde.org/Projects/Oxygen)
|
||||
-----------------------
|
||||
|
||||
### Info
|
||||
* Designer: Vignoni David
|
||||
* License: Oxygen icon theme is dual licensed. You may copy it under the Creative Common Attribution-ShareAlike 3.0 License or the GNU Library General Public License.
|
||||
* Site: [http://www.oxygen-icons.org](http://www.oxygen-icons.org)
|
||||
* Site: [http://techbase.kde.org/Projects/Oxygen](http://techbase.kde.org/Projects/Oxygen)
|
||||
|
||||
### Assets Used
|
||||
src/qt/res/icons/debugwindow.png
|
||||
|
||||
66
doc/bootstrap.md
Normal file
@@ -0,0 +1,66 @@
|
||||
### Bootstrap the Blockchain Synchronization
|
||||
|
||||
Normally the Bitcoin client will download the transaction and network information, called the blockchain, from the network by syncing with the other clients. This can be a process that can take multiple days as the [Bitcoin block chain](https://blockchain.info/charts/blocks-size) has grown to more than 15 gigabytes, and is growing almost a gigabyte every month. Luckily there is a safe and fast way to speed up this process. We’ll show you how to bootstrap your blockchain to bring your client up to speed in just a few simple steps.
|
||||
|
||||
### Requirements
|
||||
|
||||
A fresh install of the Bitcoin client software.
|
||||
|
||||
### Download the blockchain via Bittorent
|
||||
|
||||
Jeff Garzik, Bitcoin core developer, offers an [torrent file](https://bitcointalk.org/index.php?topic=145386.0) for bootstrapping purposes that is updated often. Bittorrent is a protocol that speeds up the downloading of large files by using the other clients in the network. Examples of free and safe open-source clients are [Deluge](http://deluge-torrent.org/) or [QBittorent](http://www.qbittorrent.org/). A guide to installing and configuring the torrent clients can be found [here](http://dev.deluge-torrent.org/wiki/UserGuide) for Deluge and [here](http://qbforums.shiki.hu/) for QBittorent. A further in-depth tutorial on Bittorent can be found [here](http://www.howtogeek.com/howto/31846/bittorrent-for-beginners-how-get-started-downloading-torrents/).
|
||||
|
||||
With the client installed we’ll proceed to download the blockchain torrent file. Use the following magnet link:
|
||||
|
||||
magnet:?xt=urn:btih:2d4e6c1f96c5d5fb260dff92aea4e600227f1aea&dn=bootstrap.dat&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.publicbt.com:80&tr=udp://tracker.ccc.de:80&tr=udp://tracker.istole.it:80
|
||||
|
||||
or go to [Jeff Garzik's topic](https://bitcointalk.org/index.php?topic=145386.0) for a signed magnet link. Alternately you can use the [.torrent file](http://sourceforge.net/projects/bitcoin/files/Bitcoin/blockchain/bootstrap.dat.torrent/download) found on Sourceforge.
|
||||
|
||||

|
||||
|
||||
The download page should look like this, with a countdown to the download. If it does not work click the direct download link.
|
||||
|
||||
The torrent client installed will recognize the download of the torrent file. Save the bootstrap.dat file to a folder you use for downloads. The image below shows the torrent download in QBittorent, with current speed and ETA highlighted.
|
||||
|
||||

|
||||
|
||||
### Download the block chain directly from official repositories
|
||||
The Bittorent version, see above, of the block chain download is refreshed more often than the direct download available. If Bittorent is blocked on your network then you can use the direct download method. Be sure to only use official repositories as the link displayed below. This download will only update the client to March 2013.
|
||||
|
||||
Click [here](http://sourceforge.net/projects/bitcoin/files/Bitcoin/blockchain/bitcoin_blockchain_170000.zip/download) to download or copy and paste the link below.
|
||||
|
||||
http://sourceforge.net/projects/bitcoin/files/Bitcoin/blockchain/bitcoin_blockchain_170000.zip/download
|
||||
|
||||
The download page should look like this, with a countdown to the download. If it does not work directly click the download. Save the file to a folder you use for downloads.
|
||||

|
||||
|
||||
### Importing the blockchain
|
||||
Exit the Bitcoin Client software if you have it running. Be sure not to have an actively used wallet in use. We are going to copy the download of the blockchain to the Bitcoin client data directory. You should run the client software at least once so it can generate the data directory. Copy the downloaded bootstrap.dat file into the Bitcoin data folder.
|
||||
|
||||
**For Windows users:**
|
||||
Open explorer, and type into the address bar:
|
||||
|
||||
%APPDATA%\Bitcoin
|
||||
|
||||
This will open up the data folder. It should look like the image below. Copy over the bootstrap.dat from your download folder to this directory.
|
||||

|
||||
|
||||
**For OSX users:**
|
||||
Open Finder by pressing Press [shift] + [cmd] + [g] and enter:
|
||||
|
||||
~/Library/Application Support/Bitcoin/
|
||||
|
||||
**For Linux users:**
|
||||
The directory is hidden in your User folder. Go to:
|
||||
|
||||
~/.bitcoin/
|
||||
|
||||
### Importing the blockchain
|
||||
Now start the Bitcoin client software. It should show "Importing blocks from disk" like the image below.
|
||||

|
||||
|
||||
Wait until the import finishes. The client will download the last days not covered by the import. Congratulations you have successfully imported the blockchain!
|
||||
|
||||
### Is this safe?
|
||||
|
||||
Yes, the above method is safe. The download contains only raw block chain data and the client verifies this on import. Do not download the blockchain from unofficial sources, especially if they provide `*.rev` and `*.sst` files. These files are not verified and can contain malicious edits.
|
||||
@@ -26,55 +26,20 @@ There's an assumption that you already have `git` installed, as well. If
|
||||
not, it's the path of least resistance to install [Github for Mac](https://mac.github.com/)
|
||||
(OS X 10.7+) or
|
||||
[Git for OS X](https://code.google.com/p/git-osx-installer/). It is also
|
||||
available via Homebrew or MacPorts.
|
||||
available via Homebrew.
|
||||
|
||||
You will also need to install [Homebrew](http://brew.sh)
|
||||
or [MacPorts](https://www.macports.org/) in order to install library
|
||||
dependencies. It's largely a religious decision which to choose, but, as of
|
||||
December 2012, MacPorts is a little easier because you can just install the
|
||||
dependencies immediately - no other work required. If you're unsure, read
|
||||
the instructions through first in order to assess what you want to do.
|
||||
Homebrew is a little more popular among those newer to OS X.
|
||||
in order to install library dependencies.
|
||||
|
||||
The installation of the actual dependencies is covered in the Instructions
|
||||
sections below.
|
||||
|
||||
Instructions: MacPorts
|
||||
----------------------
|
||||
|
||||
### Install dependencies
|
||||
|
||||
Installing the dependencies using MacPorts is very straightforward.
|
||||
|
||||
sudo port install boost db48@+no_java openssl miniupnpc autoconf pkgconfig automake
|
||||
|
||||
Optional: install Qt4
|
||||
|
||||
sudo port install qt4-mac qrencode protobuf-cpp
|
||||
|
||||
### Building `bitcoind`
|
||||
|
||||
1. Clone the github tree to get the source code and go into the directory.
|
||||
|
||||
git clone git@github.com:bitcoin/bitcoin.git bitcoin
|
||||
cd bitcoin
|
||||
|
||||
2. Build bitcoind (and Bitcoin-Qt, if configured):
|
||||
|
||||
./autogen.sh
|
||||
./configure
|
||||
make
|
||||
|
||||
3. It is a good idea to build and run the unit tests, too:
|
||||
|
||||
make check
|
||||
|
||||
Instructions: Homebrew
|
||||
----------------------
|
||||
|
||||
#### Install dependencies using Homebrew
|
||||
|
||||
brew install autoconf automake berkeley-db4 boost miniupnpc openssl pkg-config protobuf qt
|
||||
brew install autoconf automake libtool boost miniupnpc openssl pkg-config protobuf qt
|
||||
|
||||
Note: After you have installed the dependencies, you should check that the Homebrew installed version of OpenSSL is the one available for compilation. You can check this by typing
|
||||
|
||||
@@ -86,7 +51,32 @@ If not, you can ensure that the Homebrew OpenSSL is correctly linked by running
|
||||
|
||||
brew link openssl --force
|
||||
|
||||
Rerunning "openssl version" should now return the correct version.
|
||||
Rerunning "openssl version" should now return the correct version. If it
|
||||
doesn't, make sure `/usr/local/bin` comes before `/usr/bin` in your
|
||||
PATH.
|
||||
|
||||
#### Installing berkeley-db4 using Homebrew
|
||||
|
||||
The homebrew package for berkeley-db4 has been broken for some time. It will install without Java though.
|
||||
|
||||
Running this command takes you into brew's interactive mode, which allows you to configure, make, and install by hand:
|
||||
```
|
||||
$ brew install https://raw.github.com/mxcl/homebrew/master/Library/Formula/berkeley-db4.rb -–without-java
|
||||
```
|
||||
|
||||
These rest of these commands are run inside brew interactive mode:
|
||||
```
|
||||
/private/tmp/berkeley-db4-UGpd0O/db-4.8.30 $ cd ..
|
||||
/private/tmp/berkeley-db4-UGpd0O $ db-4.8.30/dist/configure --prefix=/usr/local/Cellar/berkeley-db4/4.8.30 --mandir=/usr/local/Cellar/berkeley-db4/4.8.30/share/man --enable-cxx
|
||||
/private/tmp/berkeley-db4-UGpd0O $ make
|
||||
/private/tmp/berkeley-db4-UGpd0O $ make install
|
||||
/private/tmp/berkeley-db4-UGpd0O $ exit
|
||||
```
|
||||
|
||||
After exiting, you'll get a warning that the install is keg-only, which means it wasn't symlinked to `/usr/local`. You don't need it to link it to build bitcoin, but if you want to, here's how:
|
||||
|
||||
$ brew --force link berkeley-db4
|
||||
|
||||
|
||||
### Building `bitcoind`
|
||||
|
||||
@@ -120,18 +110,6 @@ All dependencies should be compiled with these flags:
|
||||
-arch x86_64
|
||||
-isysroot $(xcode-select --print-path)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.6.sdk
|
||||
|
||||
For MacPorts, that means editing your macports.conf and setting
|
||||
`macosx_deployment_target` and `build_arch`:
|
||||
|
||||
macosx_deployment_target=10.6
|
||||
build_arch=x86_64
|
||||
|
||||
... and then uninstalling and re-installing, or simply rebuilding, all ports.
|
||||
|
||||
As of December 2012, the `boost` port does not obey `macosx_deployment_target`.
|
||||
Download `http://gavinandresen-bitcoin.s3.amazonaws.com/boost_macports_fix.zip`
|
||||
for a fix.
|
||||
|
||||
Once dependencies are compiled, see release-process.md for how the Bitcoin-Qt.app
|
||||
bundle is packaged and signed to create the .dmg disk image that is distributed.
|
||||
|
||||
|
||||
@@ -14,43 +14,38 @@ This will build bitcoin-qt as well if the dependencies are met.
|
||||
Dependencies
|
||||
---------------------
|
||||
|
||||
Library Purpose Description
|
||||
------- ------- -----------
|
||||
libssl SSL Support Secure communications
|
||||
libdb4.8 Berkeley DB Wallet storage
|
||||
libboost Boost C++ Library
|
||||
miniupnpc UPnP Support Optional firewall-jumping support
|
||||
qt GUI GUI toolkit
|
||||
protobuf Payments in GUI Data interchange format used for payment protocol
|
||||
libqrencode QR codes in GUI Optional for generating QR codes
|
||||
Library | Purpose | Description
|
||||
------------|------------------|----------------------
|
||||
libssl | SSL Support | Secure communications
|
||||
libdb4.8 | Berkeley DB | Wallet storage
|
||||
libboost | Boost | C++ Library
|
||||
miniupnpc | UPnP Support | Optional firewall-jumping support
|
||||
qt | GUI | GUI toolkit
|
||||
protobuf | Payments in GUI | Data interchange format used for payment protocol
|
||||
libqrencode | QR codes in GUI | Optional for generating QR codes
|
||||
|
||||
[miniupnpc](http://miniupnp.free.fr/) may be used for UPnP port mapping. It can be downloaded from [here](
|
||||
http://miniupnp.tuxfamily.org/files/). UPnP support is compiled in and
|
||||
turned off by default. See the configure options for upnp behavior desired:
|
||||
|
||||
--with-miniupnpc No UPnP support miniupnp not required
|
||||
--without-miniupnpc No UPnP support miniupnp not required
|
||||
--disable-upnp-default (the default) UPnP support turned off by default at runtime
|
||||
--enable-upnp-default UPnP support turned on by default at runtime
|
||||
|
||||
IPv6 support may be disabled by setting:
|
||||
|
||||
--disable-ipv6 Disable IPv6 support
|
||||
|
||||
Licenses of statically linked libraries:
|
||||
Berkeley DB New BSD license with additional requirement that linked
|
||||
software must be free open source
|
||||
Boost MIT-like license
|
||||
miniupnpc New (3-clause) BSD license
|
||||
|
||||
- Versions used in this release:
|
||||
- GCC 4.3.3
|
||||
- OpenSSL 1.0.1c
|
||||
- Berkeley DB 4.8.30.NC
|
||||
- Boost 1.37
|
||||
- miniupnpc 1.6
|
||||
- qt 4.8.3
|
||||
- protobuf 2.5.0
|
||||
- libqrencode 3.2.0
|
||||
- For the versions used in the release, see doc/release-process.md under *Fetch and build inputs*.
|
||||
|
||||
System requirements
|
||||
--------------------
|
||||
|
||||
C++ compilers are memory-hungry. It is recommended to have at least 1 GB of
|
||||
memory available when compiling Bitcoin Core. With 512MB of memory or less
|
||||
compilation will take much longer due to swap thrashing.
|
||||
|
||||
Dependency Build Instructions: Ubuntu & Debian
|
||||
----------------------------------------------
|
||||
@@ -72,9 +67,6 @@ for Ubuntu 12.04 and later:
|
||||
|
||||
Ubuntu 12.04 and later have packages for libdb5.1-dev and libdb5.1++-dev,
|
||||
but using these will break binary wallet compatibility, and is not recommended.
|
||||
|
||||
for Ubuntu 13.10:
|
||||
libboost1.54-all-dev will not work. Remove libboost1.54-all-dev and install libboost1.53-all-dev
|
||||
|
||||
for Debian 7 (Wheezy) and later:
|
||||
The oldstable repository contains db4.8 packages.
|
||||
@@ -82,7 +74,7 @@ for Debian 7 (Wheezy) and later:
|
||||
replacing [mirror] with any official debian mirror.
|
||||
|
||||
deb http://[mirror]/debian/ oldstable main
|
||||
|
||||
|
||||
To enable the change run
|
||||
|
||||
sudo apt-get update
|
||||
@@ -91,8 +83,6 @@ for other Ubuntu & Debian:
|
||||
|
||||
sudo apt-get install libdb4.8-dev
|
||||
sudo apt-get install libdb4.8++-dev
|
||||
sudo apt-get install libboost1.37-dev
|
||||
(If using Boost 1.37, append -mt to the boost libraries in the makefile)
|
||||
|
||||
Optional:
|
||||
|
||||
@@ -108,15 +98,15 @@ To build without GUI pass `--without-gui`.
|
||||
|
||||
To build with Qt 4 you need the following:
|
||||
|
||||
apt-get install libqt4-dev libprotobuf-dev protobuf-compiler
|
||||
sudo apt-get install libqt4-dev libprotobuf-dev protobuf-compiler
|
||||
|
||||
For Qt 5 you need the following:
|
||||
|
||||
apt-get install libqt5gui5 libqt5core5 libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev
|
||||
sudo apt-get install libqt5gui5 libqt5core5 libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev
|
||||
|
||||
libqrencode (optional) can be installed with:
|
||||
|
||||
apt-get install libqrencode-dev
|
||||
sudo apt-get install libqrencode-dev
|
||||
|
||||
Once these are installed, they will be found by configure and a bitcoin-qt executable will be
|
||||
built by default.
|
||||
@@ -138,13 +128,33 @@ miniupnpc
|
||||
|
||||
Berkeley DB
|
||||
-----------
|
||||
You need Berkeley DB 4.8. If you have to build Berkeley DB yourself:
|
||||
It is recommended to use Berkeley DB 4.8. If you have to build it yourself:
|
||||
|
||||
cd build_unix/
|
||||
../dist/configure --enable-cxx
|
||||
make
|
||||
sudo make install
|
||||
```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 exectuable, 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
|
||||
./configure (other args...) LDFLAGS="-L${BDB_PREFIX}/lib/" CPPFLAGS="-I${BDB_PREFIX}/include/"
|
||||
```
|
||||
|
||||
**Note**: You only need Berkeley DB if the wallet is enabled (see the section *Disable-Wallet mode* below).
|
||||
|
||||
Boost
|
||||
-----
|
||||
|
||||
@@ -43,8 +43,61 @@ Common types:
|
||||
set set or multiset
|
||||
bn CBigNum
|
||||
|
||||
-------------------------
|
||||
Doxygen comments
|
||||
-----------------
|
||||
|
||||
To facilitate the generation of documentation, use doxygen-compatible comment blocks for functions, methods and fields.
|
||||
|
||||
For example, to describe a function use:
|
||||
```c++
|
||||
/**
|
||||
* ... text ...
|
||||
* @param[in] arg1 A description
|
||||
* @param[in] arg2 Another argument description
|
||||
* @pre Precondition for function...
|
||||
*/
|
||||
bool function(int arg1, const char *arg2)
|
||||
```
|
||||
A complete list of `@xxx` commands can be found at http://www.stack.nl/~dimitri/doxygen/manual/commands.html.
|
||||
As Doxygen recognizes the comments by the delimiters (`/**` and `*/` in this case), you don't
|
||||
*need* to provide any commands for a comment to be valid, just a description text is fine.
|
||||
|
||||
To describe a class use the same construct above the class definition:
|
||||
```c++
|
||||
/**
|
||||
* Alerts are for notifying old versions if they become too obsolete and
|
||||
* need to upgrade. The message is displayed in the status bar.
|
||||
* @see GetWarnings()
|
||||
*/
|
||||
class CAlert
|
||||
{
|
||||
```
|
||||
|
||||
To describe a member or variable use:
|
||||
```c++
|
||||
int var; //!< Detailed description after the member
|
||||
```
|
||||
|
||||
Also OK:
|
||||
```c++
|
||||
///
|
||||
/// ... text ...
|
||||
///
|
||||
bool function2(int arg1, const char *arg2)
|
||||
```
|
||||
|
||||
Not OK (used plenty in the current source, but not picked up):
|
||||
```c++
|
||||
//
|
||||
// ... text ...
|
||||
//
|
||||
```
|
||||
|
||||
A full list of comment syntaxes picked up by doxygen can be found at http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html,
|
||||
but if possible use one of the above styles.
|
||||
|
||||
Locking/mutex usage notes
|
||||
-------------------------
|
||||
|
||||
The code is multi-threaded, and uses mutexes and the
|
||||
LOCK/TRY_LOCK macros to protect data structures.
|
||||
@@ -60,35 +113,35 @@ between the various components is a goal, with any necessary locking
|
||||
done by the components (e.g. see the self-contained CKeyStore class
|
||||
and its cs_KeyStore lock for example).
|
||||
|
||||
-------
|
||||
Threads
|
||||
-------
|
||||
|
||||
- ThreadScriptCheck : Verifies block scripts.
|
||||
|
||||
- ThreadImport : Loads blocks from blk*.dat files or bootstrap.dat.
|
||||
|
||||
- StartNode : Starts other threads.
|
||||
|
||||
- ThreadGetMyExternalIP : Determines outside-the-firewall IP address, sends addr message to connected peers when it determines it.
|
||||
- ThreadGetMyExternalIP : Determines outside-the-firewall IP address, sends addr message to connected peers when it determines it.
|
||||
|
||||
- ThreadDNSAddressSeed : Loads addresses of peers from the DNS.
|
||||
|
||||
- ThreadMapPort : Universal plug-and-play startup/shutdown
|
||||
|
||||
- ThreadSocketHandler : Sends/Receives data from peers on port 8333.
|
||||
|
||||
- ThreadMessageHandler : Higher-level message handling (sending and receiving).
|
||||
|
||||
|
||||
- ThreadOpenAddedConnections : Opens network connections to added nodes.
|
||||
|
||||
- ThreadOpenConnections : Initiates new connections to peers.
|
||||
|
||||
- ThreadTopUpKeyPool : replenishes the keystore's keypool.
|
||||
|
||||
- ThreadCleanWalletPassphrase : re-locks an encrypted wallet after user has unlocked it for a period of time.
|
||||
|
||||
- SendingDialogStartTransfer : used by pay-via-ip-address code (obsolete)
|
||||
|
||||
- ThreadDelayedRepaint : repaint the gui
|
||||
- ThreadMessageHandler : Higher-level message handling (sending and receiving).
|
||||
|
||||
- DumpAddresses : Dumps IP addresses of nodes to peers.dat.
|
||||
|
||||
- ThreadFlushWalletDB : Close the wallet.dat file if it hasn't been used in 500ms.
|
||||
|
||||
|
||||
- ThreadRPCServer : Remote procedure call handler, listens on port 8332 for connections and services them.
|
||||
|
||||
- ThreadBitcoinMiner : Generates bitcoins
|
||||
|
||||
- ThreadMapPort : Universal plug-and-play startup/shutdown
|
||||
|
||||
- Shutdown : Does an orderly shutdown of everything
|
||||
|
||||
- ExitTimeout : Windows-only, sleeps 5 seconds then exits application
|
||||
|
||||
- BitcoinMiner : Generates bitcoins (if wallet is enabled).
|
||||
|
||||
- Shutdown : Does an orderly shutdown of everything.
|
||||
|
||||
410
doc/gitian-building.md
Normal file
@@ -0,0 +1,410 @@
|
||||
Gitian building
|
||||
================
|
||||
|
||||
*Setup instructions for a gitian build of Bitcoin using a Debian VM or physical system.*
|
||||
|
||||
Gitian is the deterministic build process that is used to build the Bitcoin
|
||||
Core executables [1]. It provides a way to be reasonably sure that the
|
||||
executables are really built from 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 I wrote this
|
||||
guide. It is preferred to follow these steps yourself instead of using someone else's
|
||||
VM image to avoid 'contaminating' the build.
|
||||
|
||||
[1] For all platforms except for MacOSX, at this point. Work for deterministic
|
||||
builds for Mac is under way here: https://github.com/theuni/osx-cross-depends .
|
||||
|
||||
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 gitian images](#setting-up-gitian-images)
|
||||
- [Getting and building the inputs](#getting-and-building-the-inputs)
|
||||
- [Building Bitcoin](#building-bitcoin)
|
||||
- [Building an alternative repository](#building-an-alternative-repository)
|
||||
- [Signing externally](#signing-externally)
|
||||
- [Uploading signatures](#uploading-signatures)
|
||||
|
||||
Create a new VirtualBox VM
|
||||
---------------------------
|
||||
|
||||
The first step is to create a new Virtual Machine, which will be explained in
|
||||
this section. This VM will be used to do the Gitian builds. In this guide it
|
||||
will be explained how to set up the environment, and how to get the builds
|
||||
started.
|
||||
|
||||
Debian Linux was chosen as the host distribution because it has a lightweight install (in
|
||||
contrast to Ubuntu) and is readily available. We here show the steps for
|
||||
VirtualBox [1], but any kind of virtualization can be used. You can also install
|
||||
on actual hardware instead of using a VM, in this case you can skip this section.
|
||||
|
||||
In the VirtualBox GUI click "Create" and choose the following parameters in the wizard:
|
||||
|
||||

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

|
||||
|
||||
- Memory Size: at least 1024MB, anything lower will really slow the build down
|
||||
|
||||

|
||||
|
||||
- Hard Drive: Create a virtual hard drive now
|
||||
|
||||

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

|
||||
|
||||
- Storage on Physical hard drive: Dynamically Allocated
|
||||
|
||||

|
||||
|
||||
- Disk size: at least 40GB; as low as 20GB *may* be possible, but better to err on the safe side
|
||||
- Push the `Create` button
|
||||
|
||||
Get the [Debian 7.4 net installer](http://cdimage.debian.org/debian-cd/7.4.0/amd64/iso-cd/debian-7.4.0-amd64-netinst.iso).
|
||||
This DVD image can be validated using a SHA256 hashing tool, for example on
|
||||
Unixy OSes by entering the following in a terminal:
|
||||
|
||||
echo "b712a141bc60269db217d3b3e456179bd6b181645f90e4aac9c42ed63de492e9 /home/orion/Downloads/debian-7.4.0-amd64-netinst.iso" | sha256sum -c
|
||||
# (must return OK)
|
||||
|
||||
After creating the VM, we need to configure it.
|
||||
|
||||
- Click the `Settings` button, then go to the `Network` tab. Adapter 1 should be attacked to `NAT`.
|
||||
|
||||

|
||||
|
||||
- Click `Advanced`, then `Port Forwarding`. We want to set up a port through where 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.
|
||||
|
||||
Then start the VM. On the first launch you will be asked for a CD or DVD image. Choose the downloaded iso.
|
||||
|
||||

|
||||
|
||||
[1] https://www.virtualbox.org/
|
||||
|
||||
Installing Debian
|
||||
------------------
|
||||
|
||||
In this section it will be explained 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**: Navigation 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:
|
||||
- System name `debian`.
|
||||
- Leave domain name empty.
|
||||
|
||||

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

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

|
||||

|
||||
|
||||
- Choose a user password and enter it twice (and 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)
|
||||
|
||||

|
||||
|
||||
- Partitioning scheme: 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, you can 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
|
||||
|
||||

|
||||
|
||||
- Installation Complete -> *Continue*
|
||||
- After installation, the VM will reboot and you will have a working Debian VM. Congratulations!
|
||||
|
||||
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[1] and WinSCP[2].
|
||||
|
||||
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.
|
||||
ECDSA key fingerprint is 8e:71:f9:5b:62:46:de:44:01:da:fb:5f:34:b5:f2:18.
|
||||
Are you sure you want to continue connecting (yes/no)? yes
|
||||
Warning: Permanently added '[localhost]:22222' (ECDSA) to the list of known hosts.
|
||||
root@localhost's password: (enter root password configured during install)
|
||||
Linux debian 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64
|
||||
root@debian:~#
|
||||
|
||||
Replace `root` with `debian` to log in as user.
|
||||
|
||||
[1] http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
|
||||
[2] http://winscp.net/eng/index.php
|
||||
|
||||
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
|
||||
adduser debian sudo
|
||||
```
|
||||
|
||||
When you get a colorful screen with a question about the 'LXC directory', just
|
||||
go with the default (`/var/lib/lxc`).
|
||||
|
||||
Then set up LXC and the rest with the following is a complex jumble of settings and workarounds:
|
||||
|
||||
```bash
|
||||
# the version of lxc-start in Debian 7.4 needs to run as root, so make sure
|
||||
# that the build script can exectute it without providing a password
|
||||
echo "%sudo ALL=NOPASSWD: /usr/bin/lxc-start" > /etc/sudoers.d/gitian-lxc
|
||||
# add cgroup for LXC
|
||||
echo "cgroup /sys/fs/cgroup cgroup defaults 0 0" >> /etc/fstab
|
||||
# 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 '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 need only 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+bzr489.orig.tar.gz
|
||||
echo "ec12e0070a007989561bfee5862c89a32c301992dd2771c4d5078ef1b3014f03 vm-builder_0.12.4+bzr489.orig.tar.gz" | sha256sum -c
|
||||
# (verification -- must return OK)
|
||||
tar -zxvf vm-builder_0.12.4+bzr489.orig.tar.gz
|
||||
cd vm-builder-0.12.4+bzr489
|
||||
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
|
||||
```
|
||||
|
||||
Setting up gitian images
|
||||
-------------------------
|
||||
|
||||
Gitian needs virtual images of the operating system to build in.
|
||||
Currently this is Ubuntu Precise for both x86 architectures.
|
||||
These images will be copied and used every time that a build is started to
|
||||
make sure that the build is deterministic.
|
||||
Creating the images 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 i386 --suite precise
|
||||
bin/make-base-vm --lxc --arch amd64 --suite precise
|
||||
```
|
||||
|
||||
There will be a lot of warnings printed during build of the images. 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
|
||||
--------------------------------
|
||||
|
||||
In [doc/release-process.md](release-process.md) in the bitcoin repository under 'Fetch and build inputs'.
|
||||
you will find a list of `wget` commands that can be executed to get the dependencies.
|
||||
|
||||
I needed to add `--no-check-certificate` to the OpenSSL wget line to make it work.
|
||||
Likely this is because the ca-certificates in Debian 7.4 is fairly old. This does not create a
|
||||
security issue as the gitian descriptors check integrity of the input archives and refuse to work
|
||||
if any one is corrupted.
|
||||
|
||||
After downloading the archives, execute the `gbuild` commends to build the dependencies.
|
||||
This can take a long time, but only has to be done when the dependencies change, for example
|
||||
to upgrade the used version.
|
||||
|
||||
**Note**: Do not forget to copy the result from `build/out` to `inputs` after every gbuild command! This will save
|
||||
you a lot of time.
|
||||
|
||||
At any time you can check the package installation and build progress with
|
||||
|
||||
```bash
|
||||
tail -f var/install.log
|
||||
tail -f var/build.log
|
||||
```
|
||||
|
||||
Building Bitcoin
|
||||
----------------
|
||||
|
||||
To build Bitcoin (for Linux and/or Windows) just follow the steps under 'perform
|
||||
gitian builds' in [doc/release-process.md](release-process.md) in the bitcoin repository.
|
||||
|
||||
Output from `gbuild` will look something like
|
||||
|
||||
Initialized empty Git repository in /home/debian/gitian-builder/inputs/bitcoin/.git/
|
||||
remote: Reusing existing pack: 35606, done.
|
||||
remote: Total 35606 (delta 0), reused 0 (delta 0)
|
||||
Receiving objects: 100% (35606/35606), 26.52 MiB | 4.28 MiB/s, done.
|
||||
Resolving deltas: 100% (25724/25724), done.
|
||||
From https://github.com/bitcoin/bitcoin
|
||||
... (new tags, new branch etc)
|
||||
--- Building for precise i386 ---
|
||||
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)
|
||||
|
||||
As when building the dependencies, the progress of package installation and building
|
||||
can be inspected in `var/install.log` and `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
|
||||
```
|
||||
|
||||
Signing externally
|
||||
-------------------
|
||||
|
||||
If you want to do the PGP signing on another device that's possible too; just define `SIGNER` as mentioned
|
||||
and follow the steps in the build process as normally.
|
||||
|
||||
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}/${SIGNER}/bitcoin-build.assert
|
||||
gpg --detach-sign ${VERSION}-win/${SIGNER}/bitcoin-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/gitian.sigs](https://github.com/bitcoin/gitian.sigs/) repository, or
|
||||
if not possible create a pull request. You can also mail the files to me
|
||||
(laanwj@gmail.com) and I'll commit them.
|
||||
|
||||
BIN
doc/gitian-building/create_vm_file_location_size.png
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
doc/gitian-building/create_vm_hard_drive.png
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
doc/gitian-building/create_vm_hard_drive_file_type.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
doc/gitian-building/create_vm_memsize.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
doc/gitian-building/create_vm_page1.png
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
doc/gitian-building/create_vm_storage_physical_hard_drive.png
Normal file
|
After Width: | Height: | Size: 88 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 |
BIN
doc/gitian-building/debian_install_12_choose_disk.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
doc/gitian-building/debian_install_13_partition_scheme.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
doc/gitian-building/debian_install_14_finish.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
doc/gitian-building/debian_install_15_write_changes.png
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
BIN
doc/gitian-building/debian_install_16_choose_a_mirror.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
doc/gitian-building/debian_install_17_choose_a_mirror2.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
doc/gitian-building/debian_install_18_proxy_settings.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
BIN
doc/gitian-building/debian_install_19_software_selection.png
Normal file
|
After Width: | Height: | Size: 8.7 KiB |
BIN
doc/gitian-building/debian_install_1_boot_menu.png
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
doc/gitian-building/debian_install_20_install_grub.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
doc/gitian-building/debian_install_21_finish_installation.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
doc/gitian-building/debian_install_2_select_a_language.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
doc/gitian-building/debian_install_3_select_location.png
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
doc/gitian-building/debian_install_4_configure_keyboard.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
doc/gitian-building/debian_install_5_configure_the_network.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
doc/gitian-building/debian_install_6_domain_name.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
doc/gitian-building/debian_install_6a_set_up_root_password.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
doc/gitian-building/debian_install_7_set_up_user_fullname.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
BIN
doc/gitian-building/debian_install_8_set_up_username.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
BIN
doc/gitian-building/debian_install_9_user_password.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
BIN
doc/gitian-building/network_settings.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
doc/gitian-building/port_forwarding_rules.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
doc/gitian-building/select_startup_disk.png
Normal file
|
After Width: | Height: | Size: 84 KiB |
BIN
doc/img/bootstrap1.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
doc/img/bootstrap2.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
doc/img/bootstrap3.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
doc/img/bootstrap4.png
Normal file
|
After Width: | Height: | Size: 108 KiB |
BIN
doc/img/bootstrap5.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
@@ -1,2 +1,59 @@
|
||||
(note: this is a temporary file, to be added-to by anybody, and moved to
|
||||
release-notes at release time)
|
||||
Bitcoin Core version 0.9.5 is now available from:
|
||||
|
||||
https://bitcoin.org/bin/0.9.5/
|
||||
|
||||
This is a new minor version release, bringing only bug fixes and updated
|
||||
translations. Upgrading to this release is recommended.
|
||||
|
||||
Please report bugs using the issue tracker at github:
|
||||
|
||||
https://github.com/bitcoin/bitcoin/issues
|
||||
|
||||
How to Upgrade
|
||||
===============
|
||||
|
||||
If you are running an older version, shut it down. Wait until it has completely
|
||||
shut down (which might take a few minutes for older versions), then run the
|
||||
installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or
|
||||
bitcoind/bitcoin-qt (on Linux).
|
||||
|
||||
Notable changes
|
||||
================
|
||||
|
||||
Mining and relay policy enhancements
|
||||
------------------------------------
|
||||
|
||||
Bitcoin Core's block templates are now for version 3 blocks only, and any mining
|
||||
software relying on its `getblocktemplate` must be updated in parallel to use
|
||||
libblkmaker either version 0.4.2 or any version from 0.5.1 onward.
|
||||
If you are solo mining, this will affect you the moment you upgrade Bitcoin
|
||||
Core, which must be done prior to BIP66 achieving its 951/1001 status.
|
||||
If you are mining with the stratum mining protocol: this does not affect you.
|
||||
If you are mining with the getblocktemplate protocol to a pool: this will affect
|
||||
you at the pool operator's discretion, which must be no later than BIP66
|
||||
achieving its 951/1001 status.
|
||||
|
||||
0.9.5 changelog
|
||||
================
|
||||
|
||||
- `74f29c2` Check pindexBestForkBase for null
|
||||
- `9cd1dd9` Fix priority calculation in CreateTransaction
|
||||
- `6b4163b` Sanitize command strings before logging them.
|
||||
- `3230b32` Raise version of created blocks, and enforce DERSIG in mempool
|
||||
- `989d499` Backport of some of BIP66's tests
|
||||
- `ab03660` Implement BIP 66 validation rules and switchover logic
|
||||
- `8438074` build: fix dynamic boost check when --with-boost= is used
|
||||
|
||||
Credits
|
||||
--------
|
||||
|
||||
Thanks to who contributed to this release, at least:
|
||||
|
||||
- 21E14
|
||||
- Alex Morcos
|
||||
- Cory Fields
|
||||
- Gregory Maxwell
|
||||
- Pieter Wuille
|
||||
- Wladimir J. van der Laan
|
||||
|
||||
As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/).
|
||||
|
||||
411
doc/release-notes/release-notes-0.9.0.md
Normal file
@@ -0,0 +1,411 @@
|
||||
Bitcoin Core version 0.9.0 is now available from:
|
||||
|
||||
https://bitcoin.org/bin/0.9.0/
|
||||
|
||||
This is a new major version release, bringing both new features and
|
||||
bug fixes.
|
||||
|
||||
Please report bugs using the issue tracker at github:
|
||||
|
||||
https://github.com/bitcoin/bitcoin/issues
|
||||
|
||||
How to Upgrade
|
||||
--------------
|
||||
|
||||
If you are running an older version, shut it down. Wait until it has completely
|
||||
shut down (which might take a few minutes for older versions), uninstall all
|
||||
earlier versions of Bitcoin, then run the installer (on Windows) or just copy
|
||||
over /Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux).
|
||||
|
||||
If you are upgrading from version 0.7.2 or earlier, the first time you run
|
||||
0.9.0 your blockchain files will be re-indexed, which will take anywhere from
|
||||
30 minutes to several hours, depending on the speed of your machine.
|
||||
|
||||
On Windows, do not forget to uninstall all earlier versions of the Bitcoin
|
||||
client first, especially if you are switching to the 64-bit version.
|
||||
|
||||
Windows 64-bit installer
|
||||
-------------------------
|
||||
|
||||
New in 0.9.0 is the Windows 64-bit version of the client. There have been
|
||||
frequent reports of users running out of virtual memory on 32-bit systems
|
||||
during the initial sync. Because of this it is recommended to install the
|
||||
64-bit version if your system supports it.
|
||||
|
||||
NOTE: Release candidate 2 Windows binaries are not code-signed; use PGP
|
||||
and the SHA256SUMS.asc file to make sure your binaries are correct.
|
||||
In the final 0.9.0 release, Windows setup.exe binaries will be code-signed.
|
||||
|
||||
OSX 10.5 / 32-bit no longer supported
|
||||
-------------------------------------
|
||||
|
||||
0.9.0 drops support for older Macs. The minimum requirements are now:
|
||||
* A 64-bit-capable CPU (see http://support.apple.com/kb/ht3696);
|
||||
* Mac OS 10.6 or later (see https://support.apple.com/kb/ht1633).
|
||||
|
||||
Downgrading warnings
|
||||
--------------------
|
||||
|
||||
The 'chainstate' for this release is not always compatible with previous
|
||||
releases, so if you run 0.9 and then decide to switch back to a
|
||||
0.8.x release you might get a blockchain validation error when starting the
|
||||
old release (due to 'pruned outputs' being omitted from the index of
|
||||
unspent transaction outputs).
|
||||
|
||||
Running the old release with the -reindex option will rebuild the chainstate
|
||||
data structures and correct the problem.
|
||||
|
||||
Also, the first time you run a 0.8.x release on a 0.9 wallet it will rescan
|
||||
the blockchain for missing spent coins, which will take a long time (tens
|
||||
of minutes on a typical machine).
|
||||
|
||||
Rebranding to Bitcoin Core
|
||||
---------------------------
|
||||
|
||||
To reduce confusion between Bitcoin-the-network and Bitcoin-the-software we
|
||||
have renamed the reference client to Bitcoin Core.
|
||||
|
||||
|
||||
OP_RETURN and data in the block chain
|
||||
-------------------------------------
|
||||
On OP_RETURN: There was been some confusion and misunderstanding in
|
||||
the community, regarding the OP_RETURN feature in 0.9 and data in the
|
||||
blockchain. This change is not an endorsement of storing data in the
|
||||
blockchain. The OP_RETURN change creates a provably-prunable output,
|
||||
to avoid data storage schemes -- some of which were already deployed --
|
||||
that were storing arbitrary data such as images as forever-unspendable
|
||||
TX outputs, bloating bitcoin's UTXO database.
|
||||
|
||||
Storing arbitrary data in the blockchain is still a bad idea; it is less
|
||||
costly and far more efficient to store non-currency data elsewhere.
|
||||
|
||||
Autotools build system
|
||||
-----------------------
|
||||
|
||||
For 0.9.0 we switched to an autotools-based build system instead of individual
|
||||
(q)makefiles.
|
||||
|
||||
Using the standard "./autogen.sh; ./configure; make" to build Bitcoin-Qt and
|
||||
bitcoind makes it easier for experienced open source developers to contribute
|
||||
to the project.
|
||||
|
||||
Be sure to check doc/build-*.md for your platform before building from source.
|
||||
|
||||
Bitcoin-cli
|
||||
-------------
|
||||
|
||||
Another change in the 0.9 release is moving away from the bitcoind executable
|
||||
functioning both as a server and as a RPC client. The RPC client functionality
|
||||
("tell the running bitcoin daemon to do THIS") was split into a separate
|
||||
executable, 'bitcoin-cli'. The RPC client code will eventually be removed from
|
||||
bitcoind, but will be kept for backwards compatibility for a release or two.
|
||||
|
||||
`walletpassphrase` RPC
|
||||
-----------------------
|
||||
|
||||
The behavior of the `walletpassphrase` RPC when the wallet is already unlocked
|
||||
has changed between 0.8 and 0.9.
|
||||
|
||||
The 0.8 behavior of `walletpassphrase` is to fail when the wallet is already unlocked:
|
||||
|
||||
> walletpassphrase 1000
|
||||
walletunlocktime = now + 1000
|
||||
> walletpassphrase 10
|
||||
Error: Wallet is already unlocked (old unlock time stays)
|
||||
|
||||
The new behavior of `walletpassphrase` is to set a new unlock time overriding
|
||||
the old one:
|
||||
|
||||
> walletpassphrase 1000
|
||||
walletunlocktime = now + 1000
|
||||
> walletpassphrase 10
|
||||
walletunlocktime = now + 10 (overriding the old unlock time)
|
||||
|
||||
Transaction malleability-related fixes
|
||||
--------------------------------------
|
||||
|
||||
This release contains a few fixes for transaction ID (TXID) malleability
|
||||
issues:
|
||||
|
||||
- -nospendzeroconfchange command-line option, to avoid spending
|
||||
zero-confirmation change
|
||||
- IsStandard() transaction rules tightened to prevent relaying and mining of
|
||||
mutated transactions
|
||||
- Additional information in listtransactions/gettransaction output to
|
||||
report wallet transactions that conflict with each other because
|
||||
they spend the same outputs.
|
||||
- Bug fixes to the getbalance/listaccounts RPC commands, which would report
|
||||
incorrect balances for double-spent (or mutated) transactions.
|
||||
- New option: -zapwallettxes to rebuild the wallet's transaction information
|
||||
|
||||
Transaction Fees
|
||||
----------------
|
||||
|
||||
This release drops the default fee required to relay transactions across the
|
||||
network and for miners to consider the transaction in their blocks to
|
||||
0.01mBTC per kilobyte.
|
||||
|
||||
Note that getting a transaction relayed across the network does NOT guarantee
|
||||
that the transaction will be accepted by a miner; by default, miners fill
|
||||
their blocks with 50 kilobytes of high-priority transactions, and then with
|
||||
700 kilobytes of the highest-fee-per-kilobyte transactions.
|
||||
|
||||
The minimum relay/mining fee-per-kilobyte may be changed with the
|
||||
minrelaytxfee option. Note that previous releases incorrectly used
|
||||
the mintxfee setting to determine which low-priority transactions should
|
||||
be considered for inclusion in blocks.
|
||||
|
||||
The wallet code still uses a default fee for low-priority transactions of
|
||||
0.1mBTC per kilobyte. During periods of heavy transaction volume, even this
|
||||
fee may not be enough to get transactions confirmed quickly; the mintxfee
|
||||
option may be used to override the default.
|
||||
|
||||
0.9.0 Release notes
|
||||
=======================
|
||||
|
||||
RPC:
|
||||
|
||||
- New notion of 'conflicted' transactions, reported as confirmations: -1
|
||||
- 'listreceivedbyaddress' now provides tx ids
|
||||
- Add raw transaction hex to 'gettransaction' output
|
||||
- Updated help and tests for 'getreceivedby(account|address)'
|
||||
- In 'getblock', accept 2nd 'verbose' parameter, similar to getrawtransaction,
|
||||
but defaulting to 1 for backward compatibility
|
||||
- Add 'verifychain', to verify chain database at runtime
|
||||
- Add 'dumpwallet' and 'importwallet' RPCs
|
||||
- 'keypoolrefill' gains optional size parameter
|
||||
- Add 'getbestblockhash', to return tip of best chain
|
||||
- Add 'chainwork' (the total work done by all blocks since the genesis block)
|
||||
to 'getblock' output
|
||||
- Make RPC password resistant to timing attacks
|
||||
- Clarify help messages and add examples
|
||||
- Add 'getrawchangeaddress' call for raw transaction change destinations
|
||||
- Reject insanely high fees by default in 'sendrawtransaction'
|
||||
- Add RPC call 'decodescript' to decode a hex-encoded transaction script
|
||||
- Make 'validateaddress' provide redeemScript
|
||||
- Add 'getnetworkhashps' to get the calculated network hashrate
|
||||
- New RPC 'ping' command to request ping, new 'pingtime' and 'pingwait' fields
|
||||
in 'getpeerinfo' output
|
||||
- Adding new 'addrlocal' field to 'getpeerinfo' output
|
||||
- Add verbose boolean to 'getrawmempool'
|
||||
- Add rpc command 'getunconfirmedbalance' to obtain total unconfirmed balance
|
||||
- Explicitly ensure that wallet is unlocked in `importprivkey`
|
||||
- Add check for valid keys in `importprivkey`
|
||||
|
||||
Command-line options:
|
||||
|
||||
- New option: -nospendzeroconfchange to never spend unconfirmed change outputs
|
||||
- New option: -zapwallettxes to rebuild the wallet's transaction information
|
||||
- Rename option '-tor' to '-onion' to better reflect what it does
|
||||
- Add '-disablewallet' mode to let bitcoind run entirely without wallet (when
|
||||
built with wallet)
|
||||
- Update default '-rpcsslciphers' to include TLSv1.2
|
||||
- make '-logtimestamps' default on and rework help-message
|
||||
- RPC client option: '-rpcwait', to wait for server start
|
||||
- Remove '-logtodebugger'
|
||||
- Allow `-noserver` with bitcoind
|
||||
|
||||
Block-chain handling and storage:
|
||||
|
||||
- Update leveldb to 1.15
|
||||
- Check for correct genesis (prevent cases where a datadir from the wrong
|
||||
network is accidentally loaded)
|
||||
- Allow txindex to be removed and add a reindex dialog
|
||||
- Log aborted block database rebuilds
|
||||
- Store orphan blocks in serialized form, to save memory
|
||||
- Limit the number of orphan blocks in memory to 750
|
||||
- Fix non-standard disconnected transactions causing mempool orphans
|
||||
- Add a new checkpoint at block 279,000
|
||||
|
||||
Wallet:
|
||||
|
||||
- Bug fixes and new regression tests to correctly compute
|
||||
the balance of wallets containing double-spent (or mutated) transactions
|
||||
- Store key creation time. Calculate whole-wallet birthday.
|
||||
- Optimize rescan to skip blocks prior to birthday
|
||||
- Let user select wallet file with -wallet=foo.dat
|
||||
- Consider generated coins mature at 101 instead of 120 blocks
|
||||
- Improve wallet load time
|
||||
- Don't count txins for priority to encourage sweeping
|
||||
- Don't create empty transactions when reading a corrupted wallet
|
||||
- Fix rescan to start from beginning after importprivkey
|
||||
- Only create signatures with low S values
|
||||
|
||||
Mining:
|
||||
|
||||
- Increase default -blockmaxsize/prioritysize to 750K/50K
|
||||
- 'getblocktemplate' does not require a key to create a block template
|
||||
- Mining code fee policy now matches relay fee policy
|
||||
|
||||
Protocol and network:
|
||||
|
||||
- Drop the fee required to relay a transaction to 0.01mBTC per kilobyte
|
||||
- Send tx relay flag with version
|
||||
- New 'reject' P2P message (BIP 0061, see
|
||||
https://gist.github.com/gavinandresen/7079034 for draft)
|
||||
- Dump addresses every 15 minutes instead of 10 seconds
|
||||
- Relay OP_RETURN data TxOut as standard transaction type
|
||||
- Remove CENT-output free transaction rule when relaying
|
||||
- Lower maximum size for free transaction creation
|
||||
- Send multiple inv messages if mempool.size > MAX_INV_SZ
|
||||
- Split MIN_PROTO_VERSION into INIT_PROTO_VERSION and MIN_PEER_PROTO_VERSION
|
||||
- Do not treat fFromMe transaction differently when broadcasting
|
||||
- Process received messages one at a time without sleeping between messages
|
||||
- Improve logging of failed connections
|
||||
- Bump protocol version to 70002
|
||||
- Add some additional logging to give extra network insight
|
||||
- Added new DNS seed from bitcoinstats.com
|
||||
|
||||
Validation:
|
||||
|
||||
- Log reason for non-standard transaction rejection
|
||||
- Prune provably-unspendable outputs, and adapt consistency check for it.
|
||||
- Detect any sufficiently long fork and add a warning
|
||||
- Call the -alertnotify script when we see a long or invalid fork
|
||||
- Fix multi-block reorg transaction resurrection
|
||||
- Reject non-canonically-encoded serialization sizes
|
||||
- Reject dust amounts during validation
|
||||
- Accept nLockTime transactions that finalize in the next block
|
||||
|
||||
Build system:
|
||||
|
||||
- Switch to autotools-based build system
|
||||
- Build without wallet by passing `--disable-wallet` to configure, this
|
||||
removes the BerkeleyDB dependency
|
||||
- Upgrade gitian dependencies (libpng, libz, libupnpc, boost, openssl) to more
|
||||
recent versions
|
||||
- Windows 64-bit build support
|
||||
- Solaris compatibility fixes
|
||||
- Check integrity of gitian input source tarballs
|
||||
- Enable full GCC Stack-smashing protection for all OSes
|
||||
|
||||
GUI:
|
||||
|
||||
- Switch to Qt 5.2.0 for Windows build
|
||||
- Add payment request (BIP 0070) support
|
||||
- Improve options dialog
|
||||
- Show transaction fee in new send confirmation dialog
|
||||
- Add total balance in overview page
|
||||
- Allow user to choose data directory on first start, when data directory is
|
||||
missing, or when the -choosedatadir option is passed
|
||||
- Save and restore window positions
|
||||
- Add vout index to transaction id in transactions details dialog
|
||||
- Add network traffic graph in debug window
|
||||
- Add open URI dialog
|
||||
- Add Coin Control Features
|
||||
- Improve receive coins workflow: make the 'Receive' tab into a form to request
|
||||
payments, and move historical address list functionality to File menu.
|
||||
- Rebrand to `Bitcoin Core`
|
||||
- Move initialization/shutdown to a thread. This prevents "Not responding"
|
||||
messages during startup. Also show a window during shutdown.
|
||||
- Don't regenerate autostart link on every client startup
|
||||
- Show and store message of normal bitcoin:URI
|
||||
- Fix richtext detection hang issue on very old Qt versions
|
||||
- OS X: Make use of the 10.8+ user notification center to display Growl-like
|
||||
notifications
|
||||
- OS X: Added NSHighResolutionCapable flag to Info.plist for better font
|
||||
rendering on Retina displays.
|
||||
- OS X: Fix bitcoin-qt startup crash when clicking dock icon
|
||||
- Linux: Fix Gnome bitcoin: URI handler
|
||||
|
||||
Miscellaneous:
|
||||
|
||||
- Add Linux script (contrib/qos/tc.sh) to limit outgoing bandwidth
|
||||
- Add '-regtest' mode, similar to testnet but private with instant block
|
||||
generation with 'setgenerate' RPC.
|
||||
- Add 'linearize.py' script to contrib, for creating bootstrap.dat
|
||||
- Add separate bitcoin-cli client
|
||||
|
||||
Credits
|
||||
--------
|
||||
|
||||
Thanks to everyone who contributed to this release:
|
||||
|
||||
- Andrey
|
||||
- Ashley Holman
|
||||
- b6393ce9-d324-4fe1-996b-acf82dbc3d53
|
||||
- bitsofproof
|
||||
- Brandon Dahler
|
||||
- Calvin Tam
|
||||
- Christian Decker
|
||||
- Christian von Roques
|
||||
- Christopher Latham
|
||||
- Chuck
|
||||
- coblee
|
||||
- constantined
|
||||
- Cory Fields
|
||||
- Cozz Lovan
|
||||
- daniel
|
||||
- Daniel Larimer
|
||||
- David Hill
|
||||
- Dmitry Smirnov
|
||||
- Drak
|
||||
- Eric Lombrozo
|
||||
- fanquake
|
||||
- fcicq
|
||||
- Florin
|
||||
- frewil
|
||||
- Gavin Andresen
|
||||
- Gregory Maxwell
|
||||
- gubatron
|
||||
- Guillermo Céspedes Tabárez
|
||||
- Haakon Nilsen
|
||||
- HaltingState
|
||||
- Han Lin Yap
|
||||
- harry
|
||||
- Ian Kelling
|
||||
- Jeff Garzik
|
||||
- Johnathan Corgan
|
||||
- Jonas Schnelli
|
||||
- Josh Lehan
|
||||
- Josh Triplett
|
||||
- Julian Langschaedel
|
||||
- Kangmo
|
||||
- Lake Denman
|
||||
- Luke Dashjr
|
||||
- Mark Friedenbach
|
||||
- Matt Corallo
|
||||
- Michael Bauer
|
||||
- Michael Ford
|
||||
- Michagogo
|
||||
- Midnight Magic
|
||||
- Mike Hearn
|
||||
- Nils Schneider
|
||||
- Noel Tiernan
|
||||
- Olivier Langlois
|
||||
- patrick s
|
||||
- Patrick Strateman
|
||||
- paveljanik
|
||||
- Peter Todd
|
||||
- phantomcircuit
|
||||
- phelixbtc
|
||||
- Philip Kaufmann
|
||||
- Pieter Wuille
|
||||
- Rav3nPL
|
||||
- R E Broadley
|
||||
- regergregregerrge
|
||||
- Robert Backhaus
|
||||
- Roman Mindalev
|
||||
- Rune K. Svendsen
|
||||
- Ryan Niebur
|
||||
- Scott Ellis
|
||||
- Scott Willeke
|
||||
- Sergey Kazenyuk
|
||||
- Shawn Wilkinson
|
||||
- Sined
|
||||
- sje
|
||||
- Subo1978
|
||||
- super3
|
||||
- Tamas Blummer
|
||||
- theuni
|
||||
- Thomas Holenstein
|
||||
- Timon Rapp
|
||||
- Timothy Stranex
|
||||
- Tom Geller
|
||||
- Torstein Husebø
|
||||
- Vaclav Vobornik
|
||||
- vhf / victor felder
|
||||
- Vinnie Falco
|
||||
- Warren Togami
|
||||
- Wil Bown
|
||||
- Wladimir J. van der Laan
|
||||
@@ -8,8 +8,6 @@ Release Process
|
||||
|
||||
###update (commit) version in sources
|
||||
|
||||
|
||||
bitcoin-qt.pro
|
||||
contrib/verifysfbinaries/verify.sh
|
||||
doc/README*
|
||||
share/setup.nsi
|
||||
@@ -35,12 +33,18 @@ Release Process
|
||||
git checkout v${VERSION}
|
||||
popd
|
||||
pushd ./gitian-builder
|
||||
mkdir -p inputs; cd inputs/
|
||||
|
||||
Register and download the Apple SDK (see OSX Readme for details)
|
||||
visit https://developer.apple.com/downloads/download.action?path=Developer_Tools/xcode_4.6.3/xcode4630916281a.dmg
|
||||
|
||||
Using a Mac, create a tarball for the 10.7 SDK
|
||||
tar -C /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ -czf MacOSX10.7.sdk.tar.gz MacOSX10.7.sdk
|
||||
|
||||
Fetch and build inputs: (first time, or when dependency versions change)
|
||||
|
||||
mkdir -p inputs; cd inputs/
|
||||
wget 'http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.8.tar.gz' -O miniupnpc-1.8.tar.gz
|
||||
wget 'https://www.openssl.org/source/openssl-1.0.1e.tar.gz'
|
||||
wget 'http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.9.20140701.tar.gz' -O miniupnpc-1.9.20140701.tar.gz
|
||||
wget 'https://www.openssl.org/source/openssl-1.0.1k.tar.gz'
|
||||
wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'
|
||||
wget 'http://zlib.net/zlib-1.2.8.tar.gz'
|
||||
wget 'ftp://ftp.simplesystems.org/pub/png/src/history/libpng16/libpng-1.6.8.tar.gz'
|
||||
@@ -49,12 +53,25 @@ Release Process
|
||||
wget 'https://svn.boost.org/trac/boost/raw-attachment/ticket/7262/boost-mingw.patch' -O \
|
||||
boost-mingw-gas-cross-compile-2013-03-03.patch
|
||||
wget 'https://download.qt-project.org/official_releases/qt/5.2/5.2.0/single/qt-everywhere-opensource-src-5.2.0.tar.gz'
|
||||
wget 'https://download.qt-project.org/archive/qt/4.6/qt-everywhere-opensource-src-4.6.4.tar.gz'
|
||||
wget 'https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.bz2'
|
||||
wget 'https://github.com/mingwandroid/toolchain4/archive/10cc648683617cca8bcbeae507888099b41b530c.tar.gz'
|
||||
wget 'http://www.opensource.apple.com/tarballs/cctools/cctools-809.tar.gz'
|
||||
wget 'http://www.opensource.apple.com/tarballs/dyld/dyld-195.5.tar.gz'
|
||||
wget 'http://www.opensource.apple.com/tarballs/ld64/ld64-127.2.tar.gz'
|
||||
wget 'http://pkgs.fedoraproject.org/repo/pkgs/cdrkit/cdrkit-1.1.11.tar.gz/efe08e2f3ca478486037b053acd512e9/cdrkit-1.1.11.tar.gz'
|
||||
wget 'https://github.com/theuni/libdmg-hfsplus/archive/libdmg-hfsplus-v0.1.tar.gz'
|
||||
wget 'http://llvm.org/releases/3.2/clang+llvm-3.2-x86-linux-ubuntu-12.04.tar.gz' -O \
|
||||
clang-llvm-3.2-x86-linux-ubuntu-12.04.tar.gz
|
||||
wget 'https://raw.githubusercontent.com/theuni/osx-cross-depends/master/patches/cdrtools/genisoimage.diff' -O \
|
||||
cdrkit-deterministic.patch
|
||||
cd ..
|
||||
./bin/gbuild ../bitcoin/contrib/gitian-descriptors/boost-linux.yml
|
||||
mv build/out/boost-*.zip inputs/
|
||||
./bin/gbuild ../bitcoin/contrib/gitian-descriptors/deps-linux.yml
|
||||
mv build/out/bitcoin-deps-*.zip inputs/
|
||||
./bin/gbuild ../bitcoin/contrib/gitian-descriptors/qt-linux.yml
|
||||
mv build/out/qt-*.tar.gz inputs/
|
||||
./bin/gbuild ../bitcoin/contrib/gitian-descriptors/boost-win.yml
|
||||
mv build/out/boost-*.zip inputs/
|
||||
./bin/gbuild ../bitcoin/contrib/gitian-descriptors/deps-win.yml
|
||||
@@ -63,6 +80,29 @@ Release Process
|
||||
mv build/out/qt-*.zip inputs/
|
||||
./bin/gbuild ../bitcoin/contrib/gitian-descriptors/protobuf-win.yml
|
||||
mv build/out/protobuf-*.zip inputs/
|
||||
./bin/gbuild ../bitcoin/contrib/gitian-descriptors/gitian-osx-native.yml
|
||||
mv build/out/osx-*.tar.gz inputs/
|
||||
./bin/gbuild ../bitcoin/contrib/gitian-descriptors/gitian-osx-depends.yml
|
||||
mv build/out/osx-*.tar.gz inputs/
|
||||
./bin/gbuild ../bitcoin/contrib/gitian-descriptors/gitian-osx-qt.yml
|
||||
mv build/out/osx-*.tar.gz inputs/
|
||||
|
||||
The expected SHA256 hashes of the intermediate inputs are:
|
||||
|
||||
b1f6f10148d4c4a1a69a58e703427578dc5a4de86eefd6b925e3abf3c8fbe542 bitcoin-deps-linux32-gitian-r9.zip
|
||||
71e03e434af269dcbf3cb685cd1a5d51b8d2c904b67035eb4e5c1a2623b9f0df bitcoin-deps-linux64-gitian-r9.zip
|
||||
f29b7d9577417333fb56e023c2977f5726a7c297f320b175a4108cf7cd4c2d29 boost-linux32-1.55.0-gitian-r1.zip
|
||||
88232451c4104f7eb16e469ac6474fd1231bd485687253f7b2bdf46c0781d535 boost-linux64-1.55.0-gitian-r1.zip
|
||||
57e57dbdadc818cd270e7e00500a5e1085b3bcbdef69a885f0fb7573a8d987e1 qt-linux32-4.6.4-gitian-r1.tar.gz
|
||||
60eb4b9c5779580b7d66529efa5b2836ba1a70edde2a0f3f696d647906a826be qt-linux64-4.6.4-gitian-r1.tar.gz
|
||||
60dc2d3b61e9c7d5dbe2f90d5955772ad748a47918ff2d8b74e8db9b1b91c909 boost-win32-1.55.0-gitian-r6.zip
|
||||
f65fcaf346bc7b73bc8db3a8614f4f6bee2f61fcbe495e9881133a7c2612a167 boost-win64-1.55.0-gitian-r6.zip
|
||||
2af17b1968bd7d46b260c8d16474e1f339cde1b9e96265c80f6626ea0c2785a9 bitcoin-deps-win32-gitian-r16.zip
|
||||
7608bdf7848101d48ba8a296cb9c29ac68193405f11d8075fb46154ff3476233 bitcoin-deps-win64-gitian-r16.zip
|
||||
963e3e5e85879010a91143c90a711a5d1d5aba992e38672cdf7b54e42c56b2f1 qt-win32-5.2.0-gitian-r3.zip
|
||||
751c579830d173ef3e6f194e83d18b92ebef6df03289db13ab77a52b6bc86ef0 qt-win64-5.2.0-gitian-r3.zip
|
||||
e2e403e1a08869c7eed4d4293bce13d51ec6a63592918b90ae215a0eceb44cb4 protobuf-win32-2.5.0-gitian-r4.zip
|
||||
a0999037e8b0ef9ade13efd88fee261ba401f5ca910068b7e0cd3262ba667db0 protobuf-win64-2.5.0-gitian-r4.zip
|
||||
|
||||
Build bitcoind and bitcoin-qt on Linux32, Linux64, and Win32:
|
||||
|
||||
@@ -78,13 +118,19 @@ Release Process
|
||||
zip -r bitcoin-${VERSION}-win-gitian.zip *
|
||||
mv bitcoin-${VERSION}-win-gitian.zip ../../../
|
||||
popd
|
||||
./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-osx-bitcoin.yml
|
||||
./bin/gsign --signer $SIGNER --release ${VERSION}-osx --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-osx-bitcoin.yml
|
||||
pushd build/out
|
||||
mv Bitcoin-Qt.dmg ../../../
|
||||
popd
|
||||
popd
|
||||
|
||||
Build output expected:
|
||||
|
||||
1. linux 32-bit and 64-bit binaries + source (bitcoin-${VERSION}-linux-gitian.zip)
|
||||
2. windows 32-bit and 64-bit binaries + installer + source (bitcoin-${VERSION}-win-gitian.zip)
|
||||
3. Gitian signatures (in gitian.sigs/${VERSION}[-win]/(your gitian key)/
|
||||
3. OSX installer (Bitcoin-Qt.dmg)
|
||||
4. Gitian signatures (in gitian.sigs/${VERSION}[-win|-osx]/(your gitian key)/
|
||||
|
||||
repackage gitian builds for release as stand-alone zip/tar/installer exe
|
||||
|
||||
@@ -101,92 +147,68 @@ repackage gitian builds for release as stand-alone zip/tar/installer exe
|
||||
zip -r bitcoin-${VERSION}-win.zip bitcoin-${VERSION}-win
|
||||
rm -rf bitcoin-${VERSION}-win
|
||||
|
||||
**Perform Mac build:**
|
||||
**Mac OS X .dmg:**
|
||||
|
||||
OSX binaries are created by Gavin Andresen on a 64-bit, OSX 10.6 machine.
|
||||
|
||||
./autogen.sh
|
||||
SDK=$(xcode-select --print-path)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.6.sdk
|
||||
CXXFLAGS="-mmacosx-version-min=10.6 -isysroot $SDK" ./configure --enable-upnp-default
|
||||
make
|
||||
export QTDIR=/opt/local/share/qt4 # needed to find translations/qt_*.qm files
|
||||
T=$(contrib/qt_translations.py $QTDIR/translations src/qt/locale)
|
||||
export CODESIGNARGS='--keychain ...path_to_keychain --sign "Developer ID Application: BITCOIN FOUNDATION, INC., THE"'
|
||||
python2.7 contrib/macdeploy/macdeployqtplus Bitcoin-Qt.app -sign -add-qt-tr $T -dmg -fancy contrib/macdeploy/fancy.plist
|
||||
|
||||
Build output expected: Bitcoin-Qt.dmg
|
||||
mv Bitcoin-Qt.dmg bitcoin-${VERSION}-osx.dmg
|
||||
|
||||
###Next steps:
|
||||
|
||||
* Code-sign Windows -setup.exe (in a Windows virtual machine using signtool)
|
||||
Note: only Gavin has the code-signing keys currently.
|
||||
|
||||
* upload builds to SourceForge
|
||||
|
||||
* create SHA256SUMS for builds, and PGP-sign it
|
||||
|
||||
* update bitcoin.org version
|
||||
make sure all OS download links go to the right versions
|
||||
|
||||
* update download sizes on bitcoin.org/_templates/download.html
|
||||
|
||||
* update forum version
|
||||
|
||||
* update wiki download links
|
||||
|
||||
* update wiki changelog: [https://en.bitcoin.it/wiki/Changelog](https://en.bitcoin.it/wiki/Changelog)
|
||||
|
||||
Commit your signature to gitian.sigs:
|
||||
|
||||
pushd gitian.sigs
|
||||
git add ${VERSION}/${SIGNER}
|
||||
git add ${VERSION}-linux/${SIGNER}
|
||||
git add ${VERSION}-win/${SIGNER}
|
||||
git add ${VERSION}-osx/${SIGNER}
|
||||
git commit -a
|
||||
git push # Assuming you can push to the gitian.sigs tree
|
||||
popd
|
||||
|
||||
-------------------------------------------------------------------------
|
||||
|
||||
### After 3 or more people have gitian-built, repackage gitian-signed zips:
|
||||
### After 3 or more people have gitian-built and their results match:
|
||||
|
||||
From a directory containing bitcoin source, gitian.sigs and gitian zips
|
||||
- Perform code-signing.
|
||||
|
||||
export VERSION=(new version, e.g. 0.8.0)
|
||||
mkdir bitcoin-${VERSION}-linux-gitian
|
||||
pushd bitcoin-${VERSION}-linux-gitian
|
||||
unzip ../bitcoin-${VERSION}-linux-gitian.zip
|
||||
mkdir gitian
|
||||
cp ../bitcoin/contrib/gitian-downloader/*.pgp ./gitian/
|
||||
for signer in $(ls ../gitian.sigs/${VERSION}/); do
|
||||
cp ../gitian.sigs/${VERSION}/${signer}/bitcoin-build.assert ./gitian/${signer}-build.assert
|
||||
cp ../gitian.sigs/${VERSION}/${signer}/bitcoin-build.assert.sig ./gitian/${signer}-build.assert.sig
|
||||
done
|
||||
zip -r bitcoin-${VERSION}-linux-gitian.zip *
|
||||
cp bitcoin-${VERSION}-linux-gitian.zip ../
|
||||
popd
|
||||
mkdir bitcoin-${VERSION}-win-gitian
|
||||
pushd bitcoin-${VERSION}-win-gitian
|
||||
unzip ../bitcoin-${VERSION}-win-gitian.zip
|
||||
mkdir gitian
|
||||
cp ../bitcoin/contrib/gitian-downloader/*.pgp ./gitian/
|
||||
for signer in $(ls ../gitian.sigs/${VERSION}-win/); do
|
||||
cp ../gitian.sigs/${VERSION}-win/${signer}/bitcoin-build.assert ./gitian/${signer}-build.assert
|
||||
cp ../gitian.sigs/${VERSION}-win/${signer}/bitcoin-build.assert.sig ./gitian/${signer}-build.assert.sig
|
||||
done
|
||||
zip -r bitcoin-${VERSION}-win-gitian.zip *
|
||||
cp bitcoin-${VERSION}-win-gitian.zip ../
|
||||
popd
|
||||
- Code-sign Windows -setup.exe (in a Windows virtual machine using signtool)
|
||||
|
||||
- Upload gitian zips to SourceForge
|
||||
- Code-sign MacOSX .dmg
|
||||
|
||||
Note: only Gavin has the code-signing keys currently.
|
||||
|
||||
- Create `SHA256SUMS.asc` for builds, and PGP-sign it. This is done manually.
|
||||
Include all the files to be uploaded. The file has `sha256sum` format with a
|
||||
simple header at the top:
|
||||
|
||||
```
|
||||
Hash: SHA256
|
||||
|
||||
0060f7d38b98113ab912d4c184000291d7f026eaf77ca5830deec15059678f54 bitcoin-x.y.z-linux.tar.gz
|
||||
...
|
||||
```
|
||||
|
||||
- Upload zips and installers, as well as `SHA256SUMS.asc` from last step, to the bitcoin.org server
|
||||
|
||||
- Update bitcoin.org version
|
||||
|
||||
- Make a pull request to add a file named `YYYY-MM-DD-vX.Y.Z.md` with the release notes
|
||||
to https://github.com/bitcoin/bitcoin.org/tree/master/_releases
|
||||
([Example for 0.9.2.1](https://raw.githubusercontent.com/bitcoin/bitcoin.org/master/_releases/2014-06-19-v0.9.2.1.md)).
|
||||
|
||||
- After the pull request is merged, the website will automatically show the newest version, as well
|
||||
as update the OS download links. Ping Saivann in case anything goes wrong
|
||||
|
||||
- Announce the release:
|
||||
|
||||
- Add the release to bitcoin.org: https://github.com/bitcoin/bitcoin.org/tree/master/_releases
|
||||
|
||||
- Release sticky on bitcointalk: https://bitcointalk.org/index.php?board=1.0
|
||||
|
||||
- Bitcoin-development mailing list
|
||||
|
||||
- Optionally reddit /r/Bitcoin, ...
|
||||
- Update title of #bitcoin on Freenode IRC
|
||||
|
||||
- Optionally reddit /r/Bitcoin, ... but this will usually sort out itself
|
||||
|
||||
- Notify BlueMatt so that he can start building [https://launchpad.net/~bitcoin/+archive/ubuntu/bitcoin](the PPAs)
|
||||
|
||||
- Add release notes for the new version to the directory `doc/release-notes` in git master
|
||||
|
||||
- Celebrate
|
||||
|
||||
@@ -70,35 +70,16 @@ We are using https://transifex.com as a frontend for translating the client.
|
||||
|
||||
https://www.transifex.com/projects/p/bitcoin/resource/tx/
|
||||
|
||||
The "Transifex client" (see: http://help.transifex.com/features/client/)
|
||||
will help with fetching new translations from Transifex. Use the following
|
||||
config to be able to connect with the client:
|
||||
The "Transifex client" (see: http://support.transifex.com/customer/portal/topics/440187-transifex-client/articles)
|
||||
is used to fetch new translations from Transifex. The configuration for this client (`.tx/config`)
|
||||
is part of the repository.
|
||||
|
||||
### .tx/config
|
||||
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
|
||||
[bitcoin.tx]
|
||||
file_filter = src/qt/locale/bitcoin_<lang>.ts
|
||||
source_file = src/qt/locale/bitcoin_en.ts
|
||||
source_lang = en
|
||||
|
||||
### .tx/config (for Windows)
|
||||
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
|
||||
[bitcoin.tx]
|
||||
file_filter = src\qt\locale\bitcoin_<lang>.ts
|
||||
source_file = src\qt\locale\bitcoin_en.ts
|
||||
source_lang = en
|
||||
|
||||
It is also possible to directly download new translations one by one from the Transifex website.
|
||||
Do not directly download translations one by one from the Transifex website, as we do a few
|
||||
postprocessing steps before committing the translations.
|
||||
|
||||
### Fetching new translations
|
||||
|
||||
1. `tx pull -a`
|
||||
1. `python contrib/devtools/update-translations.py`
|
||||
2. update `src/qt/bitcoin.qrc` manually or via
|
||||
`ls src/qt/locale/*ts|xargs -n1 basename|sed 's/\(bitcoin_\(.*\)\).ts/<file alias="\2">locale\/\1.qm<\/file>/'`
|
||||
3. update `src/qt/Makefile.am` manually or via
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
from .json import loads, dumps, JSONEncodeException, JSONDecodeException
|
||||
from jsonrpc.proxy import ServiceProxy, JSONRPCException
|
||||
@@ -1,3 +0,0 @@
|
||||
from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException
|
||||
|
||||
__all__ = ['AuthServiceProxy', 'JSONRPCException']
|
||||
@@ -1,9 +0,0 @@
|
||||
_json = __import__('json')
|
||||
loads = _json.loads
|
||||
dumps = _json.dumps
|
||||
if hasattr(_json, 'JSONEncodeException'):
|
||||
JSONEncodeException = _json.JSONEncodeException
|
||||
JSONDecodeException = _json.JSONDecodeException
|
||||
else:
|
||||
JSONEncodeException = TypeError
|
||||
JSONDecodeException = ValueError
|
||||
@@ -1 +0,0 @@
|
||||
from bitcoinrpc.authproxy import AuthServiceProxy as ServiceProxy, JSONRPCException
|
||||
@@ -1,4 +1,8 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2013 The Bitcoin Core developers
|
||||
# Distributed under the MIT/X11 software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#
|
||||
# Param1: The prefix to mingw staging
|
||||
# Param2: Path to java comparison tool
|
||||
# Param3: Number of make jobs. Defaults to 1.
|
||||
@@ -70,6 +74,9 @@ make check
|
||||
|
||||
# Run RPC integration test on Linux:
|
||||
@abs_top_srcdir@/qa/rpc-tests/wallet.sh @abs_top_srcdir@/linux-build/src
|
||||
@abs_top_srcdir@/qa/rpc-tests/listtransactions.py --srcdir @abs_top_srcdir@/linux-build/src
|
||||
# Clean up cache/ directory that the python regression tests create
|
||||
rm -rf cache
|
||||
|
||||
if [ $RUN_EXPENSIVE_TESTS = 1 ]; then
|
||||
# Run unit tests and blockchain-tester on Windows:
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
#!/usr/bin/python
|
||||
# Copyright (c) 2013 The Bitcoin Core developers
|
||||
# Distributed under the MIT/X11 software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#
|
||||
import json
|
||||
from urllib import urlopen
|
||||
import requests
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
#!/bin/sh
|
||||
# Copyright (c) 2013 The Bitcoin Core developers
|
||||
# Distributed under the MIT/X11 software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#
|
||||
# Helper script for pull-tester.
|
||||
#Param 1: path to bitcoin srcroot
|
||||
#Param ...: arguments for build-test.sh
|
||||
@@ -7,6 +11,9 @@ if [ $# -lt 1 ]; then
|
||||
echo "usage: $0 [bitcoin srcroot] build-test arguments..."
|
||||
fi
|
||||
|
||||
killall -q bitcoin-cli
|
||||
killall -q bitcoind
|
||||
|
||||
cd $1
|
||||
shift
|
||||
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2013 The Bitcoin Core developers
|
||||
# Distributed under the MIT/X11 software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#
|
||||
DATADIR="@abs_top_builddir@/.bitcoin"
|
||||
rm -rf "$DATADIR"
|
||||
mkdir -p "$DATADIR"/regtest
|
||||
|
||||
@@ -1,22 +1,26 @@
|
||||
Regression tests of RPC interface
|
||||
=================================
|
||||
|
||||
python-bitcoinrpc: git subtree of https://github.com/jgarzik/python-bitcoinrpc
|
||||
### [python-bitcoinrpc](https://github.com/jgarzik/python-bitcoinrpc)
|
||||
Git subtree of [https://github.com/jgarzik/python-bitcoinrpc](https://github.com/jgarzik/python-bitcoinrpc).
|
||||
Changes to python-bitcoinrpc should be made upstream, and then
|
||||
pulled here using git subtree
|
||||
pulled here using git subtree.
|
||||
|
||||
skeleton.py : Copy this to create new regression tests.
|
||||
### [skeleton.py](skeleton.py)
|
||||
Copy this to create new regression tests.
|
||||
|
||||
listtransactions.py : Tests for the listtransactions RPC call
|
||||
### [listtransactions.py](listtransactions.py)
|
||||
Tests for the listtransactions RPC call.
|
||||
|
||||
util.py : generally useful functions
|
||||
### [util.py](util.sh)
|
||||
Generally useful functions.
|
||||
|
||||
Bash-based tests, to be ported to Python:
|
||||
-----------------------------------------
|
||||
wallet.sh : Exercise wallet send/receive code.
|
||||
walletbackup.sh : Exercise wallet backup / dump / import
|
||||
txnmall.sh : Test proper accounting of malleable transactions
|
||||
conflictedbalance.sh : More testing of malleable transaction handling
|
||||
- wallet.sh : Exercise wallet send/receive code.
|
||||
- walletbackup.sh : Exercise wallet backup / dump / import
|
||||
- txnmall.sh : Test proper accounting of malleable transactions
|
||||
- conflictedbalance.sh : More testing of malleable transaction handling
|
||||
|
||||
Notes
|
||||
=====
|
||||
@@ -32,5 +36,8 @@ test state.
|
||||
|
||||
If you get into a bad state, you should be able
|
||||
to recover with:
|
||||
rm -rf cache
|
||||
killall bitcoind
|
||||
|
||||
```bash
|
||||
rm -rf cache
|
||||
killall bitcoind
|
||||
```
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright (c) 2014 The Bitcoin Core developers
|
||||
# Distributed under the MIT/X11 software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
# Test marking of spent outputs
|
||||
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright (c) 2014 The Bitcoin Core developers
|
||||
# Distributed under the MIT/X11 software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
# Exercise the listtransactions API
|
||||
|
||||
@@ -115,6 +118,7 @@ def main():
|
||||
check_json_precision()
|
||||
|
||||
success = False
|
||||
nodes = []
|
||||
try:
|
||||
print("Initializing test directory "+options.tmpdir)
|
||||
if not os.path.isdir(options.tmpdir):
|
||||
@@ -124,6 +128,7 @@ def main():
|
||||
nodes = start_nodes(2, options.tmpdir)
|
||||
connect_nodes(nodes[1], 0)
|
||||
sync_blocks(nodes)
|
||||
|
||||
run_test(nodes)
|
||||
|
||||
success = True
|
||||
@@ -132,12 +137,12 @@ def main():
|
||||
print("Assertion failed: "+e.message)
|
||||
except Exception as e:
|
||||
print("Unexpected exception caught during testing: "+str(e))
|
||||
stack = traceback.extract_tb(sys.exc_info()[2])
|
||||
print(stack[-1])
|
||||
traceback.print_tb(sys.exc_info()[2])
|
||||
|
||||
if not options.nocleanup:
|
||||
print("Cleaning up")
|
||||
stop_nodes()
|
||||
stop_nodes(nodes)
|
||||
wait_bitcoinds()
|
||||
shutil.rmtree(options.tmpdir)
|
||||
|
||||
if success:
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
*.pyc
|
||||
|
||||
@@ -78,9 +78,9 @@ class AuthServiceProxy(object):
|
||||
pass
|
||||
authpair = user + b':' + passwd
|
||||
self.__auth_header = b'Basic ' + base64.b64encode(authpair)
|
||||
|
||||
if connection:
|
||||
# Callables re-use the connection of the original proxy
|
||||
|
||||
if connection:
|
||||
# Callables re-use the connection of the original proxy
|
||||
self.__conn = connection
|
||||
elif self.__url.scheme == 'https':
|
||||
self.__conn = httplib.HTTPSConnection(self.__url.hostname, port,
|
||||
@@ -1,4 +1,7 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2014 The Bitcoin Core developers
|
||||
# Distributed under the MIT/X11 software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
TIMEOUT=10
|
||||
SIGNAL=HUP
|
||||
PIDFILE=.send.pid
|
||||
|
||||