From 4739dcdb44896eabf23f6f426e0043287bd6df9b Mon Sep 17 00:00:00 2001 From: myriadcoin Date: Fri, 8 Aug 2014 02:52:33 +0200 Subject: [PATCH] 0.9.2 --- .gitignore | 57 +- COPYING | 2 +- INSTALL | 8 +- Makefile.am | 172 + README.md | 82 +- autogen.sh | 5 + configure.ac | 701 ++++ contrib/README.md | 60 + contrib/bitcoin-qt.pro | 21 + contrib/bitcoind.bash-completion | 40 +- contrib/bitrpc/README.md | 8 + contrib/bitrpc/bitrpc.py | 481 +-- contrib/debian/README | 20 - contrib/debian/README.md | 21 + contrib/debian/bitcoin-qt.desktop | 6 +- contrib/debian/bitcoin-qt.install | 2 +- contrib/debian/bitcoind.install | 3 +- contrib/debian/changelog | 44 + contrib/debian/control | 8 +- contrib/debian/copyright | 6 +- contrib/debian/manpages/bitcoin.conf.5 | 3 - contrib/debian/rules | 21 +- contrib/devtools/README.md | 83 + contrib/devtools/fix-copyright-headers.py | 53 + contrib/devtools/github-merge.sh | 173 + contrib/devtools/symbol-check.py | 113 + contrib/devtools/update-translations.py | 66 + contrib/gitian-descriptors/README | 86 - contrib/gitian-descriptors/README.md | 67 + contrib/gitian-descriptors/boost-linux.yml | 55 + contrib/gitian-descriptors/boost-win.yml | 86 + contrib/gitian-descriptors/boost-win32.yml | 38 - contrib/gitian-descriptors/deps-linux.yml | 98 + contrib/gitian-descriptors/deps-win.yml | 128 + contrib/gitian-descriptors/deps-win32.yml | 72 - contrib/gitian-descriptors/gitian-linux.yml | 86 + .../gitian-descriptors/gitian-osx-bitcoin.yml | 60 + .../gitian-descriptors/gitian-osx-depends.yml | 159 + .../gitian-descriptors/gitian-osx-native.yml | 178 + contrib/gitian-descriptors/gitian-osx-qt.yml | 186 + contrib/gitian-descriptors/gitian-win.yml | 97 + contrib/gitian-descriptors/gitian-win32.yml | 74 - contrib/gitian-descriptors/gitian.yml | 55 - contrib/gitian-descriptors/protobuf-win.yml | 65 + contrib/gitian-descriptors/qt-linux.yml | 264 ++ contrib/gitian-descriptors/qt-win.yml | 92 + contrib/gitian-descriptors/qt-win32.yml | 54 - contrib/gitian-downloader/aschildbach-key.pgp | Bin 0 -> 1993 bytes .../gitian-downloader/linux-download-config | 15 +- contrib/gitian-downloader/michagogo-key.pgp | 59 + .../gitian-downloader/win32-download-config | 15 +- contrib/homebrew/bitcoin.qt.pro.patch | 32 - contrib/homebrew/makefile.osx.patch | 48 - contrib/linearize/README.md | 2 + contrib/linearize/example-linearize.cfg | 12 + contrib/linearize/linearize.py | 132 + contrib/macdeploy/DS_Store | Bin 0 -> 15364 bytes contrib/macdeploy/README.md | 19 + contrib/macdeploy/macdeployqtplus | 32 +- contrib/macdeploy/notes.txt | 26 - contrib/pyminer/README | 6 - contrib/pyminer/README.md | 8 + contrib/qos/{README => README.md} | 2 + contrib/seeds/{README => README.md} | 6 +- contrib/spendfrom/README | 32 - contrib/spendfrom/README.md | 35 + contrib/test-patches/{README => README.md} | 5 +- contrib/testgen/README | 1 - contrib/testgen/README.md | 8 + contrib/verifysfbinaries/README.md | 6 + contrib/verifysfbinaries/verify.sh | 2 +- contrib/wallettools/walletchangepass.py | 5 - contrib/wallettools/walletunlock.py | 4 - doc/Doxyfile | 14 +- doc/README.md | 58 +- doc/README_osx.txt | 75 + doc/README_windows.txt | 7 +- doc/Tor.txt | 92 - doc/assets-attribution.md | 52 +- doc/assets-attribution.txt | 58 - doc/bitcoin_logo_doxygen.png | Bin 4757 -> 3272 bytes doc/bootstrap.md | 66 + doc/build-msw.md | 12 +- doc/build-osx.md | 92 +- doc/build-unix.md | 157 +- doc/coding.md | 97 +- doc/files.txt | 19 - doc/gitian-building.md | 410 ++ .../create_vm_file_location_size.png | Bin 0 -> 71743 bytes doc/gitian-building/create_vm_hard_drive.png | Bin 0 -> 79798 bytes .../create_vm_hard_drive_file_type.png | Bin 0 -> 82281 bytes doc/gitian-building/create_vm_memsize.png | Bin 0 -> 53772 bytes doc/gitian-building/create_vm_page1.png | Bin 0 -> 131585 bytes .../create_vm_storage_physical_hard_drive.png | Bin 0 -> 90350 bytes .../debian_install_10_configure_clock.png | Bin 0 -> 7892 bytes .../debian_install_11_partition_disks.png | Bin 0 -> 9511 bytes .../debian_install_12_choose_disk.png | Bin 0 -> 6613 bytes .../debian_install_13_partition_scheme.png | Bin 0 -> 8082 bytes .../debian_install_14_finish.png | Bin 0 -> 10467 bytes .../debian_install_15_write_changes.png | Bin 0 -> 8790 bytes .../debian_install_16_choose_a_mirror.png | Bin 0 -> 11340 bytes .../debian_install_17_choose_a_mirror2.png | Bin 0 -> 9788 bytes .../debian_install_18_proxy_settings.png | Bin 0 -> 7582 bytes .../debian_install_19_software_selection.png | Bin 0 -> 8939 bytes .../debian_install_1_boot_menu.png | Bin 0 -> 76176 bytes .../debian_install_20_install_grub.png | Bin 0 -> 9784 bytes .../debian_install_21_finish_installation.png | Bin 0 -> 6964 bytes .../debian_install_2_select_a_language.png | Bin 0 -> 13118 bytes .../debian_install_3_select_location.png | Bin 0 -> 9613 bytes .../debian_install_4_configure_keyboard.png | Bin 0 -> 10220 bytes ...debian_install_5_configure_the_network.png | Bin 0 -> 6774 bytes .../debian_install_6_domain_name.png | Bin 0 -> 6526 bytes ...debian_install_6a_set_up_root_password.png | Bin 0 -> 11876 bytes .../debian_install_7_set_up_user_fullname.png | Bin 0 -> 7528 bytes .../debian_install_8_set_up_username.png | Bin 0 -> 6304 bytes .../debian_install_9_user_password.png | Bin 0 -> 6323 bytes doc/gitian-building/network_settings.png | Bin 0 -> 59986 bytes doc/gitian-building/port_forwarding_rules.png | Bin 0 -> 14044 bytes doc/gitian-building/select_startup_disk.png | Bin 0 -> 86323 bytes doc/img/bootstrap1.png | Bin 0 -> 55028 bytes doc/img/bootstrap2.png | Bin 0 -> 35195 bytes doc/img/bootstrap3.png | Bin 0 -> 56598 bytes doc/img/bootstrap4.png | Bin 0 -> 110060 bytes doc/img/bootstrap5.png | Bin 0 -> 20825 bytes doc/multiwallet-qt.md | 14 +- doc/readme-qt.md | 128 - doc/release-notes.md | 205 +- doc/release-notes/release-notes-0.3.12.md | 13 + doc/release-notes/release-notes-0.3.13.md | 26 + doc/release-notes/release-notes-0.3.14.md | 11 + doc/release-notes/release-notes-0.3.15.md | 6 + doc/release-notes/release-notes-0.3.16.md | 1 + doc/release-notes/release-notes-0.3.17.md | 12 + doc/release-notes/release-notes-0.3.18.md | 11 + doc/release-notes/release-notes-0.3.19.md | 9 + doc/release-notes/release-notes-0.3.20.1.md | 1 + doc/release-notes/release-notes-0.3.20.2.md | 17 + doc/release-notes/release-notes-0.3.20.md | 22 + doc/release-notes/release-notes-0.3.21.md | 20 + doc/release-notes/release-notes-0.3.22.md | 16 + doc/release-notes/release-notes-0.3.23.md | 10 + doc/release-notes/release-notes-0.3.24.md | 20 + doc/release-notes/release-notes-0.4.0.md | 70 + doc/release-notes/release-notes-0.4.1.md | 38 + doc/release-notes/release-notes-0.4.2.md | 1 + doc/release-notes/release-notes-0.4.3.md | 21 + doc/release-notes/release-notes-0.4.4.md | 30 + doc/release-notes/release-notes-0.4.5.md | 1 + doc/release-notes/release-notes-0.4.6.md | 37 + doc/release-notes/release-notes-0.5.0.md | 70 + doc/release-notes/release-notes-0.5.1.md | 43 + doc/release-notes/release-notes-0.5.2.md | 22 + doc/release-notes/release-notes-0.5.3.md | 42 + doc/release-notes/release-notes-0.5.4.md | 39 + doc/release-notes/release-notes-0.5.5.md | 37 + doc/release-notes/release-notes-0.6.0.md | 138 + doc/release-notes/release-notes-0.6.1.md | 2 + doc/release-notes/release-notes-0.6.2.md | 50 + doc/release-notes/release-notes-0.6.3.md | 29 + doc/release-notes/release-notes-0.7.0.md | 169 + doc/release-notes/release-notes-0.7.1.md | 110 + doc/release-notes/release-notes-0.7.2.md | 68 + doc/release-notes/release-notes-0.8.0.md | 139 + doc/release-notes/release-notes-0.8.1.md | 22 + doc/release-notes/release-notes-0.8.2.md | 137 + doc/release-notes/release-notes-0.8.3.md | 18 + doc/release-notes/release-notes-0.8.4.md | 83 + doc/release-notes/release-notes-0.8.5.md | 44 + doc/release-notes/release-notes-0.8.6.md | 66 + doc/release-notes/release-notes-0.9.0.md | 411 ++ doc/release-process.md | 164 +- doc/tor.md | 9 +- doc/translation_process.md | 48 +- doc/unit-tests.md | 37 +- myriad-qt.pro.linux | 462 --- myriadcoin-qt.pro | 462 --- pkg.m4 | 214 + qa/pull-tester/build-tests.sh.in | 101 + qa/pull-tester/pull-tester.py | 193 + qa/pull-tester/pull-tester.sh | 22 + qa/pull-tester/run-bitcoind-for-test.sh.in | 32 + qa/rpc-tests/.gitignore | 2 + qa/rpc-tests/README.md | 43 + qa/rpc-tests/conflictedbalance.sh | 146 + qa/rpc-tests/listtransactions.py | 156 + .../python-bitcoinrpc/bitcoinrpc/.gitignore | 1 + .../python-bitcoinrpc/bitcoinrpc/__init__.py | 0 .../python-bitcoinrpc/bitcoinrpc/authproxy.py | 140 + qa/rpc-tests/python-bitcoinrpc/setup.py | 15 + qa/rpc-tests/send.sh | 31 + qa/rpc-tests/skeleton.py | 83 + qa/rpc-tests/txnmall.sh | 151 + qa/rpc-tests/util.py | 152 + qa/rpc-tests/util.sh | 95 + qa/rpc-tests/wallet.sh | 117 + qa/rpc-tests/walletbackup.sh | 296 ++ share/genbuild.sh | 30 +- share/pixmaps/bitcoin128.png | Bin 12930 -> 10639 bytes share/pixmaps/bitcoin16.png | Bin 1838 -> 827 bytes share/pixmaps/bitcoin256.png | Bin 32814 -> 28182 bytes share/pixmaps/bitcoin32.png | Bin 3038 -> 1982 bytes share/pixmaps/bitcoin64.png | Bin 6026 -> 4592 bytes share/qt/Info.plist | 37 - share/qt/Info.plist.in | 97 + share/qt/clean_mac_info_plist.py | 29 - share/qt/extract_strings_qt.py | 11 +- share/qt/img/reload.png | Bin 0 -> 9886 bytes share/qt/make_spinner.py | 13 +- share/qt/protobuf.pri | 35 + share/{setup.nsi => setup.nsi.in} | 341 +- src/Makefile.am | 233 ++ src/Makefile.include | 80 + src/addrman.cpp | 49 +- src/addrman.h | 43 +- src/alert.cpp | 56 +- src/alert.h | 19 +- src/allocators.cpp | 67 + src/allocators.h | 110 +- src/base58.cpp | 274 ++ src/base58.h | 422 +- src/bignum.h | 51 +- src/bitcoin-cli.cpp | 87 + src/bitcoind.cpp | 95 +- src/bloom.cpp | 38 +- src/bloom.h | 16 +- src/chainparams.cpp | 83 +- src/chainparams.h | 14 +- src/checkpoints.cpp | 40 +- src/checkpoints.h | 7 +- src/checkqueue.h | 12 +- src/clientversion.h | 11 +- src/coincontrol.h | 63 + src/coins.cpp | 196 + src/coins.h | 358 ++ src/compat.h | 33 +- src/compat/glibc_compat.cpp | 19 + src/compat/glibcxx_compat.cpp | 87 + src/core.cpp | 123 +- src/core.h | 300 +- src/crypter.cpp | 169 +- src/crypter.h | 99 +- src/db.cpp | 179 +- src/db.h | 31 +- src/hash.cpp | 41 + src/hash.h | 21 +- src/init.cpp | 769 ++-- src/init.h | 21 +- src/json/json_spirit_reader_template.h | 12 +- src/json/json_spirit_value.h | 32 +- src/json/json_spirit_writer_template.h | 3 +- src/key.cpp | 240 +- src/key.h | 62 +- src/keystore.cpp | 159 +- src/keystore.h | 91 +- src/leveldb/.gitignore | 1 + src/leveldb/AUTHORS | 1 + src/leveldb/Makefile | 21 +- src/leveldb/build_detect_platform | 22 +- src/leveldb/db/autocompact_test.cc | 118 + src/leveldb/db/corruption_test.cc | 77 +- src/leveldb/db/db_bench.cc | 8 +- src/leveldb/db/db_impl.cc | 145 +- src/leveldb/db/db_impl.h | 18 +- src/leveldb/db/db_iter.cc | 50 +- src/leveldb/db/db_iter.h | 8 +- src/leveldb/db/db_test.cc | 142 +- src/leveldb/db/dbformat.h | 3 + src/leveldb/db/filename.cc | 9 +- src/leveldb/db/filename.h | 5 + src/leveldb/db/filename_test.cc | 1 + src/leveldb/db/log_reader.cc | 23 +- src/leveldb/db/log_test.cc | 40 +- src/leveldb/db/repair.cc | 164 +- src/leveldb/db/table_cache.cc | 6 + src/leveldb/db/version_set.cc | 143 +- src/leveldb/db/version_set.h | 17 +- src/leveldb/doc/impl.html | 2 +- src/leveldb/include/leveldb/c.h | 1 - src/leveldb/include/leveldb/db.h | 2 +- src/leveldb/include/leveldb/env.h | 2 +- src/leveldb/include/leveldb/slice.h | 2 +- src/leveldb/issues/issue178_test.cc | 92 + src/leveldb/issues/issue200_test.cc | 59 + src/leveldb/port/atomic_pointer.h | 14 +- src/leveldb/port/port_posix.h | 6 +- src/leveldb/table/filter_block_test.cc | 2 +- src/leveldb/util/arena.cc | 2 +- src/leveldb/util/arena.h | 2 +- src/leveldb/util/arena_test.cc | 6 +- src/leveldb/util/bloom_test.cc | 3 +- src/leveldb/util/coding_test.cc | 8 +- src/leveldb/util/comparator.cc | 4 +- src/leveldb/util/env_posix.cc | 201 +- src/leveldb/util/random.h | 7 +- src/leveldb/util/testharness.cc | 2 +- src/leveldb/util/testutil.cc | 2 +- src/leveldb/util/testutil.h | 2 +- src/{leveldb.cpp => leveldbwrapper.cpp} | 38 +- src/{leveldb.h => leveldbwrapper.h} | 30 +- src/limitedmap.h | 3 +- src/m4/ax_boost_base.m4 | 275 ++ src/m4/ax_boost_chrono.m4 | 119 + src/m4/ax_boost_filesystem.m4 | 119 + src/m4/ax_boost_program_options.m4 | 109 + src/m4/ax_boost_system.m4 | 121 + src/m4/ax_boost_thread.m4 | 150 + src/m4/ax_boost_unit_test_framework.m4 | 138 + src/m4/ax_check_compile_flag.m4 | 72 + src/m4/ax_check_link_flag.m4 | 71 + src/m4/ax_check_preproc_flag.m4 | 72 + src/m4/ax_pthread.m4 | 332 ++ src/m4/bitcoin_find_bdb48.m4 | 66 + src/m4/bitcoin_qt.m4 | 387 ++ src/m4/bitcoin_subdir_to_include.m4 | 14 + src/main.cpp | 3633 +++++++---------- src/main.h | 592 +-- src/makefile.linux-mingw | 150 - src/makefile.mingw | 158 - src/makefile.osx | 200 - src/makefile.unix | 224 - src/miner.cpp | 542 ++- src/miner.h | 21 +- src/mruset.h | 5 +- src/net.cpp | 459 ++- src/net.h | 202 +- src/netbase.cpp | 115 +- src/netbase.h | 24 +- src/noui.cpp | 22 +- src/noui.h | 10 + src/protocol.cpp | 14 +- src/protocol.h | 14 +- src/qt/aboutdialog.cpp | 34 - src/qt/aboutdialog.h | 29 - src/qt/addressbookpage.cpp | 177 +- src/qt/addressbookpage.h | 31 +- src/qt/addresstablemodel.cpp | 124 +- src/qt/addresstablemodel.h | 12 +- src/qt/askpassphrasedialog.cpp | 9 +- src/qt/askpassphrasedialog.h | 11 +- src/qt/bitcoin.cpp | 697 +++- src/qt/bitcoin.qrc | 87 +- src/qt/bitcoinaddressvalidator.cpp | 60 +- src/qt/bitcoinaddressvalidator.h | 24 +- src/qt/bitcoinamountfield.cpp | 41 +- src/qt/bitcoinamountfield.h | 11 + src/qt/bitcoingui.cpp | 511 ++- src/qt/bitcoingui.h | 102 +- src/qt/bitcoinstrings.cpp | 125 +- src/qt/bitcoinunits.cpp | 4 + src/qt/bitcoinunits.h | 6 +- src/qt/clientmodel.cpp | 77 +- src/qt/clientmodel.h | 31 +- src/qt/coincontroldialog.cpp | 794 ++++ src/qt/coincontroldialog.h | 122 + src/qt/coincontroltreewidget.cpp | 32 + src/qt/coincontroltreewidget.h | 22 + src/qt/csvmodelwriter.cpp | 5 +- src/qt/csvmodelwriter.h | 6 +- src/qt/editaddressdialog.cpp | 9 +- src/qt/editaddressdialog.h | 9 +- src/qt/forms/aboutdialog.ui | 38 +- src/qt/forms/addressbookpage.ui | 54 +- src/qt/forms/askpassphrasedialog.ui | 16 +- src/qt/forms/coincontroldialog.ui | 531 +++ src/qt/forms/editaddressdialog.ui | 29 +- src/qt/forms/helpmessagedialog.ui | 128 + src/qt/forms/intro.ui | 22 +- src/qt/forms/openuridialog.ui | 116 + src/qt/forms/optionsdialog.ui | 322 +- src/qt/forms/overviewpage.ui | 33 +- src/qt/forms/qrcodedialog.ui | 212 - src/qt/forms/receivecoinsdialog.ui | 334 ++ src/qt/forms/receiverequestdialog.ui | 159 + src/qt/forms/rpcconsole.ui | 315 +- src/qt/forms/sendcoinsdialog.ui | 797 +++- src/qt/forms/sendcoinsentry.ui | 1343 +++++- src/qt/forms/signverifymessagedialog.ui | 13 +- src/qt/forms/transactiondescdialog.ui | 16 +- src/qt/guiconstants.h | 15 + src/qt/guiutil.cpp | 386 +- src/qt/guiutil.h | 107 +- src/qt/intro.cpp | 56 +- src/qt/intro.h | 10 +- src/qt/locale/bitcoin_ach.ts | 3368 +++++++++++++++ src/qt/locale/bitcoin_af_ZA.ts | 2281 ++++++----- src/qt/locale/bitcoin_ar.ts | 2767 +++++++------ src/qt/locale/bitcoin_be_BY.ts | 3372 +++++++++++++++ src/qt/locale/bitcoin_bg.ts | 2437 ++++++----- src/qt/locale/bitcoin_bs.ts | 2239 ++++++---- src/qt/locale/bitcoin_ca.ts | 2315 ++++++----- src/qt/locale/bitcoin_ca@valencia.ts | 3368 +++++++++++++++ src/qt/locale/bitcoin_ca_ES.ts | 2303 ++++++----- src/qt/locale/bitcoin_cmn.ts | 3368 +++++++++++++++ src/qt/locale/bitcoin_cs.ts | 2341 ++++++----- src/qt/locale/bitcoin_cy.ts | 2251 ++++++---- src/qt/locale/bitcoin_da.ts | 2573 +++++++----- src/qt/locale/bitcoin_de.ts | 2575 +++++++----- src/qt/locale/bitcoin_el_GR.ts | 2324 ++++++----- src/qt/locale/bitcoin_en.ts | 2572 +++++++++--- src/qt/locale/bitcoin_eo.ts | 3028 ++++++++------ src/qt/locale/bitcoin_es.ts | 2380 ++++++----- src/qt/locale/bitcoin_es_CL.ts | 2397 ++++++----- src/qt/locale/bitcoin_es_DO.ts | 3409 ++++++++++++++++ src/qt/locale/bitcoin_es_MX.ts | 3368 +++++++++++++++ src/qt/locale/bitcoin_es_UY.ts | 3368 +++++++++++++++ src/qt/locale/bitcoin_et.ts | 2345 ++++++----- src/qt/locale/bitcoin_eu_ES.ts | 2249 ++++++---- src/qt/locale/bitcoin_fa.ts | 3046 ++++++++------ src/qt/locale/bitcoin_fa_IR.ts | 2335 ++++++----- src/qt/locale/bitcoin_fi.ts | 2486 ++++++----- src/qt/locale/bitcoin_fr.ts | 2633 +++++++----- src/qt/locale/bitcoin_fr_CA.ts | 2253 ++++++---- src/qt/locale/bitcoin_gl.ts | 3389 +++++++++++++++ src/qt/locale/bitcoin_gu_IN.ts | 2217 ++++++---- src/qt/locale/bitcoin_he.ts | 2325 ++++++----- src/qt/locale/bitcoin_hi_IN.ts | 2253 ++++++---- src/qt/locale/bitcoin_hr.ts | 2363 ++++++----- src/qt/locale/bitcoin_hu.ts | 2463 ++++++----- src/qt/locale/bitcoin_id_ID.ts | 3380 +++++++++++++++ src/qt/locale/bitcoin_it.ts | 2663 +++++++----- src/qt/locale/bitcoin_ja.ts | 3073 ++++++++------ src/qt/locale/bitcoin_ka.ts | 3389 +++++++++++++++ src/qt/locale/bitcoin_kk_KZ.ts | 3368 +++++++++++++++ src/qt/locale/bitcoin_ko_KR.ts | 3381 +++++++++++++++ src/qt/locale/bitcoin_ky.ts | 3368 +++++++++++++++ src/qt/locale/bitcoin_la.ts | 2305 ++++++----- src/qt/locale/bitcoin_lt.ts | 2347 ++++++----- src/qt/locale/bitcoin_lv_LV.ts | 2556 +++++++----- src/qt/locale/bitcoin_mn.ts | 3375 +++++++++++++++ src/qt/locale/bitcoin_ms_MY.ts | 3368 +++++++++++++++ src/qt/locale/bitcoin_nb.ts | 2538 +++++++----- src/qt/locale/bitcoin_nl.ts | 2347 ++++++----- src/qt/locale/bitcoin_pam.ts | 3377 +++++++++++++++ src/qt/locale/bitcoin_pl.ts | 2374 ++++++----- src/qt/locale/bitcoin_pt_BR.ts | 2377 ++++++----- src/qt/locale/bitcoin_pt_PT.ts | 2511 +++++++----- src/qt/locale/bitcoin_ro_RO.ts | 3366 ++++++++------- src/qt/locale/bitcoin_ru.ts | 2367 ++++++----- src/qt/locale/bitcoin_sah.ts | 3368 +++++++++++++++ src/qt/locale/bitcoin_sk.ts | 2698 +++++++----- src/qt/locale/bitcoin_sl_SI.ts | 3374 +++++++++++++++ src/qt/locale/bitcoin_sq.ts | 3368 +++++++++++++++ src/qt/locale/bitcoin_sr.ts | 2278 ++++++----- src/qt/locale/bitcoin_sv.ts | 2339 ++++++----- src/qt/locale/bitcoin_th_TH.ts | 2305 ++++++----- src/qt/locale/bitcoin_tr.ts | 2339 ++++++----- src/qt/locale/bitcoin_uk.ts | 2419 ++++++----- src/qt/locale/bitcoin_ur_PK.ts | 3368 +++++++++++++++ src/qt/locale/bitcoin_uz@Cyrl.ts | 3368 +++++++++++++++ src/qt/locale/bitcoin_vi.ts | 3368 +++++++++++++++ src/qt/locale/bitcoin_vi_VN.ts | 3368 +++++++++++++++ src/qt/locale/bitcoin_zh_CN.ts | 2609 +++++++----- src/qt/locale/bitcoin_zh_HK.ts | 3368 +++++++++++++++ src/qt/locale/bitcoin_zh_TW.ts | 2887 +++++++------ src/qt/macdockiconhandler.h | 8 +- src/qt/macdockiconhandler.mm | 20 +- src/qt/macnotificationhandler.h | 5 + src/qt/macnotificationhandler.mm | 4 + src/qt/monitoreddatamapper.cpp | 6 +- src/qt/monitoreddatamapper.h | 4 + src/qt/notificator.cpp | 31 +- src/qt/notificator.h | 13 +- src/qt/openuridialog.cpp | 52 + src/qt/openuridialog.h | 34 + src/qt/optionsdialog.cpp | 163 +- src/qt/optionsdialog.h | 40 +- src/qt/optionsmodel.cpp | 426 +- src/qt/optionsmodel.h | 64 +- src/qt/overviewpage.cpp | 17 +- src/qt/overviewpage.h | 13 +- src/qt/paymentrequestplus.cpp | 208 + src/qt/paymentrequestplus.h | 46 + src/qt/paymentserver.cpp | 614 ++- src/qt/paymentserver.h | 93 +- src/qt/qrcodedialog.cpp | 173 - src/qt/qrcodedialog.h | 41 - src/qt/qvalidatedlineedit.cpp | 64 +- src/qt/qvalidatedlineedit.h | 11 +- src/qt/qvaluecombobox.cpp | 4 + src/qt/qvaluecombobox.h | 4 + src/qt/receivecoinsdialog.cpp | 264 ++ src/qt/receivecoinsdialog.h | 75 + src/qt/receiverequestdialog.cpp | 197 + src/qt/receiverequestdialog.h | 68 + src/qt/recentrequeststablemodel.cpp | 208 + src/qt/recentrequeststablemodel.h | 102 + src/qt/res/bitcoin-qt.rc | 39 - src/qt/res/icons/add.png | Bin 1279 -> 1112 bytes src/qt/res/icons/address-book.png | Bin 1916 -> 1690 bytes src/qt/res/icons/bitcoin.icns | Bin 4 -> 919273 bytes src/qt/res/icons/bitcoin.ico | Bin src/qt/res/icons/bitcoin_testnet.ico | Bin src/qt/res/icons/clock1.png | Bin 946 -> 864 bytes src/qt/res/icons/clock2.png | Bin 944 -> 863 bytes src/qt/res/icons/clock3.png | Bin 946 -> 856 bytes src/qt/res/icons/clock4.png | Bin 962 -> 869 bytes src/qt/res/icons/clock5.png | Bin 956 -> 858 bytes src/qt/res/icons/configure.png | Bin 1055 -> 681 bytes src/qt/res/icons/connect0_16.png | Bin 702 -> 631 bytes src/qt/res/icons/connect1_16.png | Bin 612 -> 541 bytes src/qt/res/icons/connect2_16.png | Bin 623 -> 582 bytes src/qt/res/icons/connect3_16.png | Bin 625 -> 591 bytes src/qt/res/icons/connect4_16.png | Bin 673 -> 596 bytes src/qt/res/icons/debugwindow.png | Bin 5402 -> 2240 bytes src/qt/res/icons/edit.png | Bin 1627 -> 1163 bytes src/qt/res/icons/editcopy.png | Bin 879 -> 600 bytes src/qt/res/icons/editpaste.png | Bin 1458 -> 1135 bytes src/qt/res/icons/export.png | Bin 2148 -> 1931 bytes src/qt/res/icons/filesave.png | Bin 1741 -> 1251 bytes src/qt/res/icons/history.png | Bin 1432 -> 1343 bytes src/qt/res/icons/key.png | Bin 1727 -> 1440 bytes src/qt/res/icons/lock_closed.png | Bin 1679 -> 1401 bytes src/qt/res/icons/lock_open.png | Bin 1644 -> 1359 bytes src/qt/res/icons/notsynced.png | Bin 1013 -> 0 bytes src/qt/res/icons/overview.png | Bin 7455 -> 6327 bytes src/qt/res/icons/quit.png | Bin 2163 -> 1778 bytes src/qt/res/icons/receive.png | Bin 1437 -> 1331 bytes src/qt/res/icons/remove.png | Bin 1224 -> 649 bytes src/qt/res/icons/send.png | Bin 1487 -> 1345 bytes src/qt/res/icons/synced.png | Bin 781 -> 560 bytes src/qt/res/icons/transaction0.png | Bin 569 -> 291 bytes src/qt/res/icons/transaction2.png | Bin 413 -> 211 bytes src/qt/res/icons/transaction_conflicted.png | Bin 0 -> 474 bytes src/qt/res/icons/tx_inout.png | Bin 2442 -> 1252 bytes src/qt/res/icons/tx_input.png | Bin 2152 -> 1114 bytes src/qt/res/icons/tx_mined.png | Bin 3287 -> 1458 bytes src/qt/res/icons/tx_output.png | Bin 2129 -> 1107 bytes src/qt/res/movies/update_spinner.mng | Bin 27817 -> 0 bytes src/qt/rpcconsole.cpp | 93 +- src/qt/rpcconsole.h | 20 +- src/qt/sendcoinsdialog.cpp | 516 ++- src/qt/sendcoinsdialog.h | 44 +- src/qt/sendcoinsentry.cpp | 168 +- src/qt/sendcoinsentry.h | 30 +- src/qt/signverifymessagedialog.cpp | 33 +- src/qt/signverifymessagedialog.h | 9 +- src/qt/splashscreen.cpp | 87 +- src/qt/splashscreen.h | 17 +- src/qt/test/Makefile.am | 46 + src/qt/test/paymentrequestdata.h | 307 ++ src/qt/test/paymentservertests.cpp | 112 + src/qt/test/paymentservertests.h | 31 + src/qt/test/test_main.cpp | 59 +- src/qt/test/uritests.cpp | 32 +- src/qt/test/uritests.h | 2 +- src/qt/trafficgraphwidget.cpp | 173 + src/qt/trafficgraphwidget.h | 48 + src/qt/transactiondesc.cpp | 447 +- src/qt/transactiondesc.h | 8 +- src/qt/transactiondescdialog.cpp | 4 + src/qt/transactiondescdialog.h | 4 + src/qt/transactionfilterproxy.cpp | 21 +- src/qt/transactionfilterproxy.h | 10 +- src/qt/transactionrecord.cpp | 96 +- src/qt/transactionrecord.h | 62 +- src/qt/transactiontablemodel.cpp | 222 +- src/qt/transactiontablemodel.h | 16 +- src/qt/transactionview.cpp | 125 +- src/qt/transactionview.h | 36 +- src/qt/utilitydialog.cpp | 135 + src/qt/utilitydialog.h | 69 + src/qt/walletframe.cpp | 153 +- src/qt/walletframe.h | 42 +- src/qt/walletmodel.cpp | 394 +- src/qt/walletmodel.h | 117 +- src/qt/walletmodeltransaction.cpp | 62 + src/qt/walletmodeltransaction.h | 44 + src/qt/walletstack.cpp | 156 - src/qt/walletstack.h | 103 - src/qt/walletview.cpp | 230 +- src/qt/walletview.h | 57 +- src/qt/winshutdownmonitor.cpp | 57 + src/qt/winshutdownmonitor.h | 29 + src/rpcblockchain.cpp | 317 +- src/rpcclient.cpp | 280 ++ src/rpcclient.h | 25 + src/rpcdump.cpp | 148 +- src/rpcmining.cpp | 378 +- src/rpcmisc.cpp | 332 ++ src/rpcnet.cpp | 245 +- src/rpcprotocol.cpp | 253 ++ src/rpcprotocol.h | 140 + src/rpcrawtransaction.cpp | 422 +- src/{bitcoinrpc.cpp => rpcserver.cpp} | 916 ++--- src/{bitcoinrpc.h => rpcserver.h} | 109 +- src/rpcwallet.cpp | 1287 +++--- src/script.cpp | 286 +- src/script.h | 103 +- src/serialize.h | 177 +- src/sync.cpp | 46 +- src/sync.h | 14 +- src/test/Checkpoints_tests.cpp | 14 +- src/test/DoS_tests.cpp | 84 +- src/test/Makefile.am | 76 + src/test/{README => README.md} | 4 +- src/test/accounting_tests.cpp | 20 +- src/test/alert_tests.cpp | 52 +- src/test/allocator_tests.cpp | 8 +- src/test/base32_tests.cpp | 6 +- src/test/base58_tests.cpp | 44 +- src/test/base64_tests.cpp | 8 +- src/test/bignum_tests.cpp | 70 +- src/test/bip32_tests.cpp | 120 + src/test/bloom_tests.cpp | 16 +- src/test/canonical_tests.cpp | 27 +- src/test/checkblock_tests.cpp | 25 +- src/test/compress_tests.cpp | 30 +- src/test/data/README.md | 14 + src/test/data/alertTests | Bin 1283 -> 0 bytes src/test/data/alertTests.raw | Bin 0 -> 1279 bytes src/test/data/script_invalid.json | 21 +- src/test/data/script_valid.json | 42 +- src/test/data/sighash.json | 503 +++ src/test/data/tx_invalid.json | 13 +- src/test/data/tx_valid.json | 37 +- src/test/getarg_tests.cpp | 11 +- src/test/hash_tests.cpp | 49 + src/test/hmac_tests.cpp | 129 + src/test/key_tests.cpp | 16 +- src/test/main_tests.cpp | 24 + src/test/miner_tests.cpp | 123 +- src/test/mruset_tests.cpp | 13 +- src/test/multisig_tests.cpp | 34 +- src/test/netbase_tests.cpp | 13 +- src/test/pmt_tests.cpp | 11 +- src/test/rpc_tests.cpp | 116 +- src/test/rpc_wallet_tests.cpp | 93 + src/test/script_P2SH_tests.cpp | 25 +- src/test/script_tests.cpp | 90 +- src/test/serialize_tests.cpp | 132 +- src/test/sighash_tests.cpp | 214 + src/test/sigopcount_tests.cpp | 14 +- src/test/test_bitcoin.cpp | 41 +- src/test/transaction_tests.cpp | 54 +- src/test/uint160_tests.cpp | 18 - src/test/uint256_tests.cpp | 635 ++- src/test/util_tests.cpp | 67 +- src/test/wallet_tests.cpp | 20 +- src/threadsafety.h | 1 + src/tinyformat.h | 1010 +++++ src/txdb.cpp | 63 +- src/txdb.h | 32 +- src/txmempool.cpp | 214 + src/txmempool.h | 113 + src/ui_interface.h | 17 +- src/uint256.h | 292 +- src/util.cpp | 515 ++- src/util.h | 284 +- src/version.cpp | 17 +- src/version.h | 10 +- src/wallet.cpp | 925 +++-- src/wallet.h | 404 +- src/walletdb.cpp | 373 +- src/walletdb.h | 161 +- 654 files changed, 190612 insertions(+), 62862 deletions(-) create mode 100644 Makefile.am create mode 100755 autogen.sh create mode 100644 configure.ac create mode 100644 contrib/README.md create mode 100644 contrib/bitcoin-qt.pro create mode 100644 contrib/bitrpc/README.md delete mode 100644 contrib/debian/README create mode 100644 contrib/debian/README.md create mode 100644 contrib/devtools/README.md create mode 100755 contrib/devtools/fix-copyright-headers.py create mode 100755 contrib/devtools/github-merge.sh create mode 100755 contrib/devtools/symbol-check.py create mode 100755 contrib/devtools/update-translations.py delete mode 100644 contrib/gitian-descriptors/README create mode 100644 contrib/gitian-descriptors/README.md create mode 100644 contrib/gitian-descriptors/boost-linux.yml create mode 100644 contrib/gitian-descriptors/boost-win.yml delete mode 100644 contrib/gitian-descriptors/boost-win32.yml create mode 100644 contrib/gitian-descriptors/deps-linux.yml create mode 100644 contrib/gitian-descriptors/deps-win.yml delete mode 100644 contrib/gitian-descriptors/deps-win32.yml create mode 100644 contrib/gitian-descriptors/gitian-linux.yml create mode 100644 contrib/gitian-descriptors/gitian-osx-bitcoin.yml create mode 100644 contrib/gitian-descriptors/gitian-osx-depends.yml create mode 100644 contrib/gitian-descriptors/gitian-osx-native.yml create mode 100644 contrib/gitian-descriptors/gitian-osx-qt.yml create mode 100644 contrib/gitian-descriptors/gitian-win.yml delete mode 100644 contrib/gitian-descriptors/gitian-win32.yml delete mode 100644 contrib/gitian-descriptors/gitian.yml create mode 100644 contrib/gitian-descriptors/protobuf-win.yml create mode 100644 contrib/gitian-descriptors/qt-linux.yml create mode 100644 contrib/gitian-descriptors/qt-win.yml delete mode 100644 contrib/gitian-descriptors/qt-win32.yml create mode 100644 contrib/gitian-downloader/aschildbach-key.pgp create mode 100644 contrib/gitian-downloader/michagogo-key.pgp delete mode 100644 contrib/homebrew/bitcoin.qt.pro.patch delete mode 100644 contrib/homebrew/makefile.osx.patch create mode 100644 contrib/linearize/README.md create mode 100644 contrib/linearize/example-linearize.cfg create mode 100644 contrib/linearize/linearize.py create mode 100644 contrib/macdeploy/DS_Store create mode 100644 contrib/macdeploy/README.md delete mode 100644 contrib/macdeploy/notes.txt delete mode 100644 contrib/pyminer/README create mode 100644 contrib/pyminer/README.md rename contrib/qos/{README => README.md} (97%) rename contrib/seeds/{README => README.md} (74%) delete mode 100644 contrib/spendfrom/README create mode 100644 contrib/spendfrom/README.md rename contrib/test-patches/{README => README.md} (58%) delete mode 100644 contrib/testgen/README create mode 100644 contrib/testgen/README.md create mode 100644 contrib/verifysfbinaries/README.md delete mode 100644 contrib/wallettools/walletchangepass.py delete mode 100644 contrib/wallettools/walletunlock.py create mode 100644 doc/README_osx.txt delete mode 100644 doc/Tor.txt delete mode 100644 doc/assets-attribution.txt create mode 100644 doc/bootstrap.md delete mode 100644 doc/files.txt create mode 100644 doc/gitian-building.md create mode 100644 doc/gitian-building/create_vm_file_location_size.png create mode 100644 doc/gitian-building/create_vm_hard_drive.png create mode 100644 doc/gitian-building/create_vm_hard_drive_file_type.png create mode 100644 doc/gitian-building/create_vm_memsize.png create mode 100644 doc/gitian-building/create_vm_page1.png create mode 100644 doc/gitian-building/create_vm_storage_physical_hard_drive.png create mode 100644 doc/gitian-building/debian_install_10_configure_clock.png create mode 100644 doc/gitian-building/debian_install_11_partition_disks.png create mode 100644 doc/gitian-building/debian_install_12_choose_disk.png create mode 100644 doc/gitian-building/debian_install_13_partition_scheme.png create mode 100644 doc/gitian-building/debian_install_14_finish.png create mode 100644 doc/gitian-building/debian_install_15_write_changes.png create mode 100644 doc/gitian-building/debian_install_16_choose_a_mirror.png create mode 100644 doc/gitian-building/debian_install_17_choose_a_mirror2.png create mode 100644 doc/gitian-building/debian_install_18_proxy_settings.png create mode 100644 doc/gitian-building/debian_install_19_software_selection.png create mode 100644 doc/gitian-building/debian_install_1_boot_menu.png create mode 100644 doc/gitian-building/debian_install_20_install_grub.png create mode 100644 doc/gitian-building/debian_install_21_finish_installation.png create mode 100644 doc/gitian-building/debian_install_2_select_a_language.png create mode 100644 doc/gitian-building/debian_install_3_select_location.png create mode 100644 doc/gitian-building/debian_install_4_configure_keyboard.png create mode 100644 doc/gitian-building/debian_install_5_configure_the_network.png create mode 100644 doc/gitian-building/debian_install_6_domain_name.png create mode 100644 doc/gitian-building/debian_install_6a_set_up_root_password.png create mode 100644 doc/gitian-building/debian_install_7_set_up_user_fullname.png create mode 100644 doc/gitian-building/debian_install_8_set_up_username.png create mode 100644 doc/gitian-building/debian_install_9_user_password.png create mode 100644 doc/gitian-building/network_settings.png create mode 100644 doc/gitian-building/port_forwarding_rules.png create mode 100644 doc/gitian-building/select_startup_disk.png create mode 100644 doc/img/bootstrap1.png create mode 100644 doc/img/bootstrap2.png create mode 100644 doc/img/bootstrap3.png create mode 100644 doc/img/bootstrap4.png create mode 100644 doc/img/bootstrap5.png delete mode 100644 doc/readme-qt.md create mode 100644 doc/release-notes/release-notes-0.3.12.md create mode 100644 doc/release-notes/release-notes-0.3.13.md create mode 100644 doc/release-notes/release-notes-0.3.14.md create mode 100644 doc/release-notes/release-notes-0.3.15.md create mode 100644 doc/release-notes/release-notes-0.3.16.md create mode 100644 doc/release-notes/release-notes-0.3.17.md create mode 100644 doc/release-notes/release-notes-0.3.18.md create mode 100644 doc/release-notes/release-notes-0.3.19.md create mode 100644 doc/release-notes/release-notes-0.3.20.1.md create mode 100644 doc/release-notes/release-notes-0.3.20.2.md create mode 100644 doc/release-notes/release-notes-0.3.20.md create mode 100644 doc/release-notes/release-notes-0.3.21.md create mode 100644 doc/release-notes/release-notes-0.3.22.md create mode 100644 doc/release-notes/release-notes-0.3.23.md create mode 100644 doc/release-notes/release-notes-0.3.24.md create mode 100644 doc/release-notes/release-notes-0.4.0.md create mode 100644 doc/release-notes/release-notes-0.4.1.md create mode 100644 doc/release-notes/release-notes-0.4.2.md create mode 100644 doc/release-notes/release-notes-0.4.3.md create mode 100644 doc/release-notes/release-notes-0.4.4.md create mode 100644 doc/release-notes/release-notes-0.4.5.md create mode 100644 doc/release-notes/release-notes-0.4.6.md create mode 100644 doc/release-notes/release-notes-0.5.0.md create mode 100644 doc/release-notes/release-notes-0.5.1.md create mode 100644 doc/release-notes/release-notes-0.5.2.md create mode 100644 doc/release-notes/release-notes-0.5.3.md create mode 100644 doc/release-notes/release-notes-0.5.4.md create mode 100644 doc/release-notes/release-notes-0.5.5.md create mode 100644 doc/release-notes/release-notes-0.6.0.md create mode 100644 doc/release-notes/release-notes-0.6.1.md create mode 100644 doc/release-notes/release-notes-0.6.2.md create mode 100644 doc/release-notes/release-notes-0.6.3.md create mode 100644 doc/release-notes/release-notes-0.7.0.md create mode 100644 doc/release-notes/release-notes-0.7.1.md create mode 100644 doc/release-notes/release-notes-0.7.2.md create mode 100644 doc/release-notes/release-notes-0.8.0.md create mode 100644 doc/release-notes/release-notes-0.8.1.md create mode 100644 doc/release-notes/release-notes-0.8.2.md create mode 100644 doc/release-notes/release-notes-0.8.3.md create mode 100644 doc/release-notes/release-notes-0.8.4.md create mode 100644 doc/release-notes/release-notes-0.8.5.md create mode 100644 doc/release-notes/release-notes-0.8.6.md create mode 100644 doc/release-notes/release-notes-0.9.0.md delete mode 100644 myriad-qt.pro.linux delete mode 100644 myriadcoin-qt.pro create mode 100644 pkg.m4 create mode 100755 qa/pull-tester/build-tests.sh.in create mode 100755 qa/pull-tester/pull-tester.py create mode 100755 qa/pull-tester/pull-tester.sh create mode 100755 qa/pull-tester/run-bitcoind-for-test.sh.in create mode 100644 qa/rpc-tests/.gitignore create mode 100644 qa/rpc-tests/README.md create mode 100755 qa/rpc-tests/conflictedbalance.sh create mode 100755 qa/rpc-tests/listtransactions.py create mode 100644 qa/rpc-tests/python-bitcoinrpc/bitcoinrpc/.gitignore create mode 100644 qa/rpc-tests/python-bitcoinrpc/bitcoinrpc/__init__.py create mode 100644 qa/rpc-tests/python-bitcoinrpc/bitcoinrpc/authproxy.py create mode 100644 qa/rpc-tests/python-bitcoinrpc/setup.py create mode 100755 qa/rpc-tests/send.sh create mode 100755 qa/rpc-tests/skeleton.py create mode 100755 qa/rpc-tests/txnmall.sh create mode 100644 qa/rpc-tests/util.py create mode 100644 qa/rpc-tests/util.sh create mode 100755 qa/rpc-tests/wallet.sh create mode 100755 qa/rpc-tests/walletbackup.sh delete mode 100644 share/qt/Info.plist create mode 100644 share/qt/Info.plist.in delete mode 100755 share/qt/clean_mac_info_plist.py create mode 100644 share/qt/img/reload.png create mode 100644 share/qt/protobuf.pri rename share/{setup.nsi => setup.nsi.in} (72%) create mode 100644 src/Makefile.am create mode 100644 src/Makefile.include create mode 100644 src/allocators.cpp create mode 100644 src/base58.cpp create mode 100644 src/bitcoin-cli.cpp create mode 100644 src/coincontrol.h create mode 100644 src/coins.cpp create mode 100644 src/coins.h create mode 100644 src/compat/glibc_compat.cpp create mode 100644 src/compat/glibcxx_compat.cpp create mode 100644 src/leveldb/db/autocompact_test.cc create mode 100644 src/leveldb/issues/issue178_test.cc create mode 100644 src/leveldb/issues/issue200_test.cc rename src/{leveldb.cpp => leveldbwrapper.cpp} (70%) rename src/{leveldb.h => leveldbwrapper.h} (87%) create mode 100644 src/m4/ax_boost_base.m4 create mode 100644 src/m4/ax_boost_chrono.m4 create mode 100644 src/m4/ax_boost_filesystem.m4 create mode 100644 src/m4/ax_boost_program_options.m4 create mode 100644 src/m4/ax_boost_system.m4 create mode 100644 src/m4/ax_boost_thread.m4 create mode 100644 src/m4/ax_boost_unit_test_framework.m4 create mode 100644 src/m4/ax_check_compile_flag.m4 create mode 100644 src/m4/ax_check_link_flag.m4 create mode 100644 src/m4/ax_check_preproc_flag.m4 create mode 100644 src/m4/ax_pthread.m4 create mode 100644 src/m4/bitcoin_find_bdb48.m4 create mode 100644 src/m4/bitcoin_qt.m4 create mode 100644 src/m4/bitcoin_subdir_to_include.m4 delete mode 100644 src/makefile.linux-mingw delete mode 100644 src/makefile.mingw delete mode 100644 src/makefile.osx delete mode 100644 src/makefile.unix create mode 100644 src/noui.h delete mode 100644 src/qt/aboutdialog.cpp delete mode 100644 src/qt/aboutdialog.h create mode 100644 src/qt/coincontroldialog.cpp create mode 100644 src/qt/coincontroldialog.h create mode 100644 src/qt/coincontroltreewidget.cpp create mode 100644 src/qt/coincontroltreewidget.h create mode 100644 src/qt/forms/coincontroldialog.ui create mode 100644 src/qt/forms/helpmessagedialog.ui create mode 100644 src/qt/forms/openuridialog.ui delete mode 100644 src/qt/forms/qrcodedialog.ui create mode 100644 src/qt/forms/receivecoinsdialog.ui create mode 100644 src/qt/forms/receiverequestdialog.ui create mode 100644 src/qt/locale/bitcoin_ach.ts create mode 100644 src/qt/locale/bitcoin_be_BY.ts create mode 100644 src/qt/locale/bitcoin_ca@valencia.ts create mode 100644 src/qt/locale/bitcoin_cmn.ts create mode 100644 src/qt/locale/bitcoin_es_DO.ts create mode 100644 src/qt/locale/bitcoin_es_MX.ts create mode 100644 src/qt/locale/bitcoin_es_UY.ts create mode 100644 src/qt/locale/bitcoin_gl.ts create mode 100644 src/qt/locale/bitcoin_id_ID.ts create mode 100644 src/qt/locale/bitcoin_ka.ts create mode 100644 src/qt/locale/bitcoin_kk_KZ.ts create mode 100644 src/qt/locale/bitcoin_ko_KR.ts create mode 100644 src/qt/locale/bitcoin_ky.ts create mode 100644 src/qt/locale/bitcoin_mn.ts create mode 100644 src/qt/locale/bitcoin_ms_MY.ts create mode 100644 src/qt/locale/bitcoin_pam.ts create mode 100644 src/qt/locale/bitcoin_sah.ts create mode 100644 src/qt/locale/bitcoin_sl_SI.ts create mode 100644 src/qt/locale/bitcoin_sq.ts create mode 100644 src/qt/locale/bitcoin_ur_PK.ts create mode 100644 src/qt/locale/bitcoin_uz@Cyrl.ts create mode 100644 src/qt/locale/bitcoin_vi.ts create mode 100644 src/qt/locale/bitcoin_vi_VN.ts create mode 100644 src/qt/locale/bitcoin_zh_HK.ts create mode 100644 src/qt/openuridialog.cpp create mode 100644 src/qt/openuridialog.h create mode 100644 src/qt/paymentrequestplus.cpp create mode 100644 src/qt/paymentrequestplus.h delete mode 100644 src/qt/qrcodedialog.cpp delete mode 100644 src/qt/qrcodedialog.h create mode 100644 src/qt/receivecoinsdialog.cpp create mode 100644 src/qt/receivecoinsdialog.h create mode 100644 src/qt/receiverequestdialog.cpp create mode 100644 src/qt/receiverequestdialog.h create mode 100644 src/qt/recentrequeststablemodel.cpp create mode 100644 src/qt/recentrequeststablemodel.h delete mode 100644 src/qt/res/bitcoin-qt.rc mode change 100644 => 100755 src/qt/res/icons/bitcoin.ico mode change 100644 => 100755 src/qt/res/icons/bitcoin_testnet.ico delete mode 100644 src/qt/res/icons/notsynced.png create mode 100644 src/qt/res/icons/transaction_conflicted.png delete mode 100644 src/qt/res/movies/update_spinner.mng create mode 100644 src/qt/test/Makefile.am create mode 100644 src/qt/test/paymentrequestdata.h create mode 100644 src/qt/test/paymentservertests.cpp create mode 100644 src/qt/test/paymentservertests.h create mode 100644 src/qt/trafficgraphwidget.cpp create mode 100644 src/qt/trafficgraphwidget.h create mode 100644 src/qt/utilitydialog.cpp create mode 100644 src/qt/utilitydialog.h create mode 100644 src/qt/walletmodeltransaction.cpp create mode 100644 src/qt/walletmodeltransaction.h delete mode 100644 src/qt/walletstack.cpp delete mode 100644 src/qt/walletstack.h create mode 100644 src/qt/winshutdownmonitor.cpp create mode 100644 src/qt/winshutdownmonitor.h create mode 100644 src/rpcclient.cpp create mode 100644 src/rpcclient.h create mode 100644 src/rpcmisc.cpp create mode 100644 src/rpcprotocol.cpp create mode 100644 src/rpcprotocol.h rename src/{bitcoinrpc.cpp => rpcserver.cpp} (52%) rename src/{bitcoinrpc.h => rpcserver.h} (74%) create mode 100644 src/test/Makefile.am rename src/test/{README => README.md} (87%) create mode 100644 src/test/bip32_tests.cpp create mode 100644 src/test/data/README.md delete mode 100644 src/test/data/alertTests create mode 100644 src/test/data/alertTests.raw create mode 100644 src/test/data/sighash.json create mode 100644 src/test/hash_tests.cpp create mode 100644 src/test/hmac_tests.cpp create mode 100644 src/test/main_tests.cpp create mode 100644 src/test/rpc_wallet_tests.cpp create mode 100644 src/test/sighash_tests.cpp delete mode 100644 src/test/uint160_tests.cpp create mode 100644 src/tinyformat.h create mode 100644 src/txmempool.cpp create mode 100644 src/txmempool.h diff --git a/.gitignore b/.gitignore index d4109e19..9c093e21 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,52 @@ -src/*.exe +*.tar.gz + +*.exe src/myriadcoin src/myriadcoind -src/test_myriadcoin +src/myriadcoin-cli +src/test/test_myriadcoin +src/qt/test/test_myriadcoin-qt + +Makefile.in +aclocal.m4 +autom4te.cache/ +config.log +config.status +configure +src/bitcoin-config.h +src/bitcoin-config.h.in +src/build-aux/ +src/stamp-h1 +share/setup.nsi +share/qt/Info.plist + +src/qt/*.moc +src/qt/moc_*.cpp +src/qt/forms/ui_*.h + +src/qt/test/moc*.cpp + +.deps +.dirstamp .*.swp *.*~* *.bak *.rej *.orig *.o +*.o-* *.patch .myriadcoin +*.a +*.pb.cc +*.pb.h + +*.log +*.trs +*.dmg + +*.json.h +*.raw.h # Compilation and Qt preprocessor part *.qm @@ -31,4 +68,18 @@ qrc_*.cpp .DS_Store build -!src/leveldb-*/Makefile +#lcov +*.gcno +/*.info +test_bitcoin.coverage/ +total.coverage/ +coverage_percent.txt + +#build tests +linux-coverage-build +linux-build +win32-build +qa/pull-tester/run-bitcoind-for-test.sh +qa/pull-tester/build-tests.sh + +!src/leveldb*/Makefile diff --git a/COPYING b/COPYING index c410baa6..8834a3db 100644 --- a/COPYING +++ b/COPYING @@ -1,4 +1,4 @@ -Copyright (c) 2009-2013 Bitcoin Developers +Copyright (c) 2009-2013 Myriadcoin Developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/INSTALL b/INSTALL index 4d931e2b..3142c47e 100644 --- a/INSTALL +++ b/INSTALL @@ -1,9 +1,5 @@ -Building Bitcoin - -See doc/readme-qt.md for instructions on building Bitcoin-Qt, -the intended-for-end-users, nice-graphical-interface, reference -implementation of Bitcoin. +Building Myriadcoin See doc/build-*.md for instructions on building bitcoind, the intended-for-services, no-graphical-interface, reference -implementation of Bitcoin. \ No newline at end of file +implementation of Myriadcoin. \ No newline at end of file diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 00000000..84465f4e --- /dev/null +++ b/Makefile.am @@ -0,0 +1,172 @@ +ACLOCAL_AMFLAGS = -I src/m4 +SUBDIRS = src +.PHONY: deploy + +GZIP_ENV="-9n" + +BITCOIND_BIN=$(top_builddir)/src/myriadcoind$(EXEEXT) +BITCOIN_QT_BIN=$(top_builddir)/src/qt/myriadcoin-qt$(EXEEXT) +BITCOIN_CLI_BIN=$(top_builddir)/src/myriadcoin-cli$(EXEEXT) +BITCOIN_WIN_INSTALLER=$(PACKAGE)-$(PACKAGE_VERSION)-win$(WINDOWS_BITS)-setup$(EXEEXT) + +OSX_APP=Myriadcoin-Qt.app +OSX_DMG=Myriadcoin-Qt.dmg +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) + +WINDOWS_PACKAGING = $(top_srcdir)/share/pixmaps/bitcoin.ico \ + $(top_srcdir)/share/pixmaps/nsis-header.bmp \ + $(top_srcdir)/share/pixmaps/nsis-wizard.bmp \ + $(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/DS_Store + +COVERAGE_INFO = baseline_filtered_combined.info baseline.info block_test.info \ + leveldb_baseline.info test_bitcoin_filtered.info total_coverage.info \ + baseline_filtered.info block_test_filtered.info \ + leveldb_baseline_filtered.info test_bitcoin_coverage.info test_bitcoin.info + +dist-hook: + -$(MAKE) -C $(top_distdir)/src/leveldb clean + -$(GIT) archive --format=tar HEAD -- src/version.cpp | $(AMTAR) -C $(top_distdir) -xf - + +distcheck-hook: + $(MKDIR_P) $(top_distdir)/_build/src/leveldb + cp -rf $(top_srcdir)/src/leveldb/* $(top_distdir)/_build/src/leveldb/ + -$(MAKE) -C $(top_distdir)/_build/src/leveldb clean + +distcleancheck: + @: + +$(BITCOIN_WIN_INSTALLER): $(BITCOIND_BIN) $(BITCOIN_QT_BIN) $(BITCOIN_CLI_BIN) + $(MKDIR_P) $(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 $@ + +$(BITCOIND_BIN) $(BITCOIN_QT_BIN) $(BITCOIN_CLI_BIN): + make -C $(dir $@) $(notdir $@) + +$(OSX_APP)/Contents/PkgInfo: + $(MKDIR_P) $(@D) + @echo "APPL????" > $@ + +$(OSX_APP)/Contents/Resources/empty.lproj: + $(MKDIR_P) $(@D) + @touch $@ + +$(OSX_APP)/Contents/Info.plist: $(OSX_PLIST) + $(MKDIR_P) $(@D) + $(INSTALL_DATA) $< $@ + +$(OSX_APP)/Contents/Resources/bitcoin.icns: $(OSX_INSTALLER_ICONS) + $(MKDIR_P) $(@D) + $(INSTALL_DATA) $< $@ + +$(OSX_APP)/Contents/MacOS/Myriadcoin-Qt: $(BITCOIN_QT_BIN) + $(MKDIR_P) $(@D) + 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/Myriadcoin-Qt + +if BUILD_DARWIN +$(OSX_DMG): $(OSX_APP_BUILT) $(OSX_PACKAGING) + $(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 "Myriadcoin-Qt" -no-pad -r -apple -o $@ dist +endif + +if TARGET_DARWIN +appbundle: $(OSX_APP_BUILT) +deploy: $(OSX_DMG) +endif +if TARGET_WINDOWS +deploy: $(BITCOIN_WIN_INSTALLER) +endif + +if USE_LCOV + +baseline.info: + $(LCOV) -c -i -d $(abs_builddir)/src -o $@ + +baseline_filtered.info: baseline.info + $(LCOV) -r $< "/usr/include/*" -o $@ + +leveldb_baseline.info: baseline_filtered.info + $(LCOV) -c -i -d $(abs_builddir)/src/leveldb -b $(abs_builddir)/src/leveldb -o $@ + +leveldb_baseline_filtered.info: leveldb_baseline.info + $(LCOV) -r $< "/usr/include/*" -o $@ + +baseline_filtered_combined.info: leveldb_baseline_filtered.info baseline_filtered.info + $(LCOV) -a leveldb_baseline_filtered.info -a baseline_filtered.info -o $@ + +test_bitcoin.info: baseline_filtered_combined.info + $(MAKE) -C src/ check + $(LCOV) -c -d $(abs_builddir)/src -t test_bitcoin -o $@ + $(LCOV) -z -d $(abs_builddir)/src + $(LCOV) -z -d $(abs_builddir)/src/leveldb + +test_bitcoin_filtered.info: test_bitcoin.info + $(LCOV) -r $< "/usr/include/*" -o $@ + +block_test.info: test_bitcoin_filtered.info + $(MKDIR_P) qa/tmp + -@TIMEOUT=15 qa/pull-tester/run-bitcoind-for-test.sh $(JAVA) -jar $(JAVA_COMPARISON_TOOL) qa/tmp/compTool 0 + $(LCOV) -c -d $(abs_builddir)/src --t BitcoinJBlockTest -o $@ + $(LCOV) -z -d $(abs_builddir)/src + $(LCOV) -z -d $(abs_builddir)/src/leveldb + +block_test_filtered.info: block_test.info + $(LCOV) -r $< "/usr/include/*" -o $@ + +test_bitcoin_coverage.info: baseline_filtered_combined.info test_bitcoin_filtered.info + $(LCOV) -a baseline_filtered.info -a leveldb_baseline_filtered.info -a test_bitcoin_filtered.info -o $@ + +total_coverage.info: baseline_filtered_combined.info test_bitcoin_filtered.info block_test_filtered.info + $(LCOV) -a baseline_filtered.info -a leveldb_baseline_filtered.info -a test_bitcoin_filtered.info -a block_test_filtered.info -o $@ | $(GREP) "\%" | $(AWK) '{ print substr($$3,2,50) "/" $$5 }' > coverage_percent.txt + +test_bitcoin.coverage/.dirstamp: test_bitcoin_coverage.info + $(GENHTML) -s $< -o $(@D) + @touch $@ + +total.coverage/.dirstamp: total_coverage.info + $(GENHTML) -s $< -o $(@D) + @touch $@ + +cov: test_bitcoin.coverage/.dirstamp total.coverage/.dirstamp + +endif + +if USE_COMPARISON_TOOL +check-local: + $(MKDIR_P) qa/tmp + @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 qa/rpc-tests $(DIST_DOCS) $(WINDOWS_PACKAGING) $(OSX_PACKAGING) + +CLEANFILES = $(OSX_DMG) $(BITCOIN_WIN_INSTALLER) + +.INTERMEDIATE: $(COVERAGE_INFO) + +clean-local: + rm -rf test_bitcoin.coverage/ total.coverage/ $(OSX_APP) diff --git a/README.md b/README.md index f7686310..42d6f629 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,84 @@ -Myriadcoin integration/staging tree -=================================== +Myriadcoin Core integration/staging tree +======================================== + +http://www.myriadcoin.org + +Copyright (c) 2009-2014 Bitcoin Core Developers + +Copyright (c) 2014 Myriadcoin Core Developers -Copyright (c) 2009-2013 Bitcoin Developers, -Copyright (c) 2013-2014 Zetacoin Developers -Copyright (c) 2014 Myriadcoin Developers What is Myriadcoin? ------------------- +------------------- Myriadcoin is an experimental new digital currency that enables instant payments to anyone, anywhere in the world. Myriadcoin uses peer-to-peer technology to operate with no central authority: managing transactions and issuing money are carried -out collectively by the network. Myriadcoin is also the name of the open source +out collectively by the network. Myriadcoin Core is the name of open source software which enables the use of this currency. For more information, as well as an immediately useable, binary version of -the Myriadcoin client sofware, see https://bitcointalk.org/index.php?topic=483515.0 - -Pull Tester ------------ -All Builds and Pull Request will be automatically tested thanks to ahmed_bodi from @CryptoPools +the Myriadcoin Core software, see http://www.myriadcoin.org/ License ------- -Myriadcoin is released under the terms of the MIT license. See `COPYING` for more +Myriadcoin Core is released under the terms of the MIT license. See [COPYING](COPYING) for more information or see http://opensource.org/licenses/MIT. + +Development process +------------------- + +Developers work in their own trees, then submit pull requests when they think +their feature or bug fix is ready. + +If it is a simple/trivial/non-controversial change, then one of the Myriadcoin +development team members simply pulls it. + +If it is a *more complicated or potentially controversial* change, then the patch +submitter will be asked to start a discussion (if they haven't already) on the +[mailing list](http://sourceforge.net/mailarchive/forum.php?forum_name=bitcoin-development). + +The patch will be accepted if there is broad consensus that it is a good thing. +Developers should expect to rework and resubmit patches if the code doesn't +match the project's coding conventions (see [doc/coding.md](doc/coding.md)) or are +controversial. + +The `master` branch is regularly built and tested, but is not guaranteed to be +completely stable. [Tags](https://github.com/bitcoin/bitcoin/tags) are created +regularly to indicate new official, stable release versions of Myriadcoin. + +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** + +Myriadcoin 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. diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 00000000..5b883a6a --- /dev/null +++ b/autogen.sh @@ -0,0 +1,5 @@ +#!/bin/sh +set -e +srcdir="$(dirname $0)" +cd "$srcdir" +autoreconf --install --force diff --git a/configure.ac b/configure.ac new file mode 100644 index 00000000..fa3b4e80 --- /dev/null +++ b/configure.ac @@ -0,0 +1,701 @@ +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, 2) +define(_CLIENT_VERSION_BUILD, 1) +define(_CLIENT_VERSION_IS_RELEASE, true) +define(_COPYRIGHT_YEAR, 2014) +AC_INIT([Myriadcoin 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]) +AC_CANONICAL_HOST +AH_TOP([#ifndef BITCOIN_CONFIG_H]) +AH_TOP([#define BITCOIN_CONFIG_H]) +AH_BOTTOM([#endif //BITCOIN_CONFIG_H]) + +# This m4 will only be used if a system copy cannot be found. This is helpful +# on systems where autotools are installed but the pkg-config macros are not in +# a default location. It is currently used for building on OSX where autotools +# are preinstalled but pkg-config comes from macports or homebrew. It should +# probably be removed when building on <= 10.6 is no longer supported. +m4_include([pkg.m4]) + +dnl faketime breaks configure and is only needed for make. Disable it here. +unset FAKETIME + +if test "x${CXXFLAGS+set}" = "xset"; then + CXXFLAGS_overridden=yes +else + CXXFLAGS_overridden=no +fi + +dnl ============================================================== +dnl Setup for automake +dnl ============================================================== + +AM_INIT_AUTOMAKE([no-define subdir-objects foreign]) + +dnl faketime messes with timestamps and causes configure to be re-run. +dnl --disable-maintainer-mode can be used to bypass this. +AM_MAINTAINER_MODE([enable]) + +dnl make the compilation flags quiet unless V=1 is used +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) + +# Enable wallet +AC_ARG_ENABLE([wallet], + [AS_HELP_STRING([--enable-wallet], + [enable wallet (default is yes)])], + [enable_wallet=$enableval], + [enable_wallet=yes]) + +AC_ARG_WITH([miniupnpc], + [AS_HELP_STRING([--with-miniupnpc], + [enable UPNP (default is yes if libminiupnpc is found)])], + [use_upnp=$withval], + [use_upnp=auto]) + +AC_ARG_ENABLE([upnp-default], + [AS_HELP_STRING([--enable-upnp-default], + [if UPNP is enabled, turn it on at startup (default is no)])], + [use_upnp_default=$enableval], + [use_upnp_default=no]) + +AC_ARG_ENABLE(tests, + AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]), + [use_tests=$enableval], + [use_tests=yes]) + +AC_ARG_WITH([comparison-tool], + AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]), + [use_comparison_tool=$withval], + [use_comparison_tool=no]) + +AC_ARG_ENABLE([comparison-tool-reorg-tests], + AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]), + [use_comparison_tool_reorg_tests=$enableval], + [use_comparison_tool_reorg_tests=no]) + +AC_ARG_WITH([qrencode], + [AS_HELP_STRING([--with-qrencode], + [enable QR code support (default is yes if qt is enabled and libqrencode is found)])], + [use_qr=$withval], + [use_qr=auto]) + +AC_ARG_ENABLE([hardening], + [AS_HELP_STRING([--enable-hardening], + [attempt to harden the resulting executables (default is yes)])], + [use_hardening=$enableval], + [use_hardening=yes]) + +AC_ARG_ENABLE([ccache], + [AS_HELP_STRING([--enable-ccache], + [use ccache for building (default is yes if ccache is found)])], + [use_ccache=$enableval], + [use_ccache=auto]) + +AC_ARG_ENABLE([lcov], + [AS_HELP_STRING([--enable-lcov], + [enable lcov testing (default is no)])], + [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], []) + + +AC_CONFIG_SRCDIR([src]) +AC_CONFIG_HEADERS([src/bitcoin-config.h]) + +dnl Checks for programs. +AC_PROG_CXX +AC_PROG_CC +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 +AC_PATH_TOOL(AR, ar) +AC_PATH_TOOL(RANLIB, ranlib) +AC_PATH_TOOL(STRIP, strip) +AC_PATH_TOOL(GCOV, gcov) +AC_PATH_PROG(LCOV, lcov) +AC_PATH_PROG(JAVA, java) +AC_PATH_PROG(GENHTML, genhtml) +AC_PATH_PROG([GIT], [git]) +AC_PATH_PROG(CCACHE,ccache) +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. +## +if test "x$CXXFLAGS_overridden" = "xno"; then + CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter" +fi +CPPFLAGS="$CPPFLAGS -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS" + +AC_LANG_PUSH([C++]) + +use_pkgconfig=yes +case $host in + *mingw*) + + #pkgconfig does more harm than good with MinGW + use_pkgconfig=no + + TARGET_OS=windows + AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing)) + + AX_CHECK_LINK_FLAG([[-static]],[LDFLAGS="$LDFLAGS -static"]) + AX_CHECK_LINK_FLAG([[-static-libgcc]],[LDFLAGS="$LDFLAGS -static-libgcc"]) + AX_CHECK_LINK_FLAG([[-static-libstdc++]],[LDFLAGS="$LDFLAGS -static-libstdc++"]) + + AC_PATH_PROG([MAKENSIS], [makensis], none) + if test x$MAKENSIS = xnone; then + AC_MSG_WARN("makensis not found. Cannot create installer.") + fi + + AC_PATH_TOOL(WINDRES, windres, none) + if test x$WINDRES = xnone; then + AC_MSG_ERROR("windres not found") + fi + + CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB" + LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE" + if test "x$CXXFLAGS_overridden" = "xno"; then + CXXFLAGS="$CXXFLAGS -w" + fi + case $host in + i?86-*) WINDOWS_BITS=32 ;; + x86_64-*) WINDOWS_BITS=64 ;; + *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;; + esac + AC_SUBST(WINDOWS_BITS) + ;; + *darwin*) + 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 + CPPFLAGS="$CPPFLAGS -isystem /opt/local/include -I/opt/local/include/db48" + LIBS="$LIBS -L/opt/local/lib -L/opt/local/lib/db48" + fi + + 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" + 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" + ;; + *) + ;; +esac + +if test x$use_comparison_tool != xno; then + AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool) +fi + +if test x$use_comparison_tool_reorg_tests != xno; then + if test x$use_comparison_tool == x; then + AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified") + fi + AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1) +else + AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0) +fi + +if test x$use_lcov == xyes; then + if test x$LCOV == x; then + AC_MSG_ERROR("lcov testing requested but lcov not found") + fi + if test x$GCOV == x; then + AC_MSG_ERROR("lcov testing requested but gcov not found") + fi + if test x$JAVA == x; then + AC_MSG_ERROR("lcov testing requested but java not found") + fi + if test x$GENHTML == x; then + AC_MSG_ERROR("lcov testing requested but genhtml not found") + fi + if test x$use_comparison_tool == x; then + AC_MSG_ERROR("lcov testing requested but comparison tool was not specified") + fi + LCOV="$LCOV --gcov-tool=$GCOV" + AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"], + [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")]) +fi + +dnl Require little endian +AC_C_BIGENDIAN([AC_MSG_ERROR("Big Endian not supported")]) + +dnl Check for pthread compile/link requirements +AX_PTHREAD +INCLUDES="$INCLUDES $PTHREAD_CFLAGS" + +# The following macro will add the necessary defines to bitcoin-config.h, but +# 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 && + test x$ac_cv_sys_file_offset_bits != xunknown; then + CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits" +fi + +if test x$ac_cv_sys_large_files != x && + test x$ac_cv_sys_large_files != xno && + test x$ac_cv_sys_large_files != xunknown; then + CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files" +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([#define __USE_FORTIFY_LEVEL 2 + #include + 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"]) + AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"]) + + AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[ + AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[ + HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE" + ]) + HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2" + ]) + + AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"]) + AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"]) + AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"]) + AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"]) + + if test x$TARGET_OS != xwindows; then + # -pie will link successfully with MinGW, but it's unsupported and leads to undeterministic binaries + AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"]) + fi + + CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS" + CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS" + LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS" + OBJCXXFLAGS="$CXXFLAGS" +fi + +dnl this flag screws up non-darwin gcc even when the check fails. special-case it. +if test x$TARGET_OS = xdarwin; then + AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"]) +fi + +AC_CHECK_HEADERS([stdio.h stdlib.h unistd.h strings.h sys/types.h sys/stat.h]) + +dnl Check for MSG_NOSIGNAL +AC_MSG_CHECKING(for MSG_NOSIGNAL) +AC_TRY_COMPILE([#include ], + [ int f = MSG_NOSIGNAL; ], + [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ], + [ AC_MSG_RESULT(no)] +) + +LEVELDB_CPPFLAGS= +LIBLEVELDB= +LIBMEMENV= +AM_CONDITIONAL([EMBEDDED_LEVELDB],[true]) +AC_SUBST(LEVELDB_CPPFLAGS) +AC_SUBST(LIBLEVELDB) +AC_SUBST(LIBMEMENV) + +if test x$enable_wallet != xno; then + dnl Check for libdb_cxx only if wallet enabled + BITCOIN_FIND_BDB48 +fi + +dnl Check for libminiupnpc (optional) +if test x$use_upnp != xno; then + AC_CHECK_HEADERS( + [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h], + [AC_CHECK_LIB([miniupnpc], [main],, [have_miniupnpc=no])], + [have_miniupnpc=no] + ) +fi + +dnl Check for boost libs +AX_BOOST_BASE +AX_BOOST_SYSTEM +AX_BOOST_FILESYSTEM +AX_BOOST_PROGRAM_OPTIONS +AX_BOOST_THREAD +AX_BOOST_CHRONO + +if test x$use_tests = xyes; then + + if test x$HEXDUMP = x; then + AC_MSG_ERROR(hexdump is required for tests) + fi + + + AX_BOOST_UNIT_TEST_FRAMEWORK + + 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" + TEMP_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + AC_LINK_IFELSE([AC_LANG_SOURCE([ + #define BOOST_TEST_DYN_LINK + #define BOOST_TEST_MAIN + #include + + ])], + [AC_MSG_RESULT(yes)] + [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"], + [AC_MSG_RESULT(no)]) + LIBS="$TEMP_LIBS" + CPPFLAGS="$TEMP_CPPFLAGS" +fi + +BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB" +BOOST_INCLUDES="$BOOST_CPPFLAGS" + +dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however +dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if +dnl a working version is available, else fall back to sleep. sleep was removed +dnl after 1.56. +dnl If neither is available, abort. +dnl If sleep_for is used, boost_chrono becomes a requirement. +if test x$ax_cv_boost_chrono = xyes; then +dnl Allow passing extra needed dependency libraries for boost-chrono from static gitian build +BOOST_CHRONO_LIB="$BOOST_CHRONO_LIB $BOOST_CHRONO_EXTRALIBS" + +TEMP_LIBS="$LIBS" +LIBS="$LIBS $BOOST_LIBS $BOOST_CHRONO_LIB" +TEMP_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" +AC_TRY_LINK([ + #include + #include + ],[ + #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200) + boost::this_thread::sleep_for(boost::chrono::milliseconds(0)); + #else + choke me + #endif + ], + [boost_sleep=yes; BOOST_LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB"; + AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])], + [boost_sleep=no]) +LIBS="$TEMP_LIBS" +CPPFLAGS="$TEMP_CPPFLAGS" +fi + +if test x$boost_sleep != xyes; then +TEMP_LIBS="$LIBS" +LIBS="$LIBS $BOOST_LIBS" +TEMP_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" +AC_TRY_LINK([ + #include + #include + #include + ],[ + #if BOOST_VERSION <= 105600 + boost::this_thread::sleep(boost::posix_time::milliseconds(0)); + #else + choke me + #endif + ], + [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])], + [boost_sleep=no]) +LIBS="$TEMP_LIBS" +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) +fi + +AC_ARG_WITH([cli], + [AS_HELP_STRING([--with-cli], + [with CLI (default is yes)])], + [build_bitcoin_cli=$withval], + [build_bitcoin_cli=yes]) + +AC_ARG_WITH([daemon], + [AS_HELP_STRING([--with-daemon], + [with daemon (default is yes)])], + [build_bitcoind=$withval], + [build_bitcoind=yes]) + +BITCOIN_QT_INIT + +if test x$use_pkgconfig = xyes; then + + if test x$PKG_CONFIG == x; then + AC_MSG_ERROR(pkg-config not found.) + fi + + : #NOP + m4_ifdef( + [PKG_CHECK_MODULES], + [ + PKG_CHECK_MODULES([SSL], [libssl], [INCLUDES="$INCLUDES $SSL_CFLAGS"; LIBS="$LIBS $SSL_LIBS"], [AC_MSG_ERROR(openssl not found.)]) + PKG_CHECK_MODULES([CRYPTO], [libcrypto], [INCLUDES="$INCLUDES $CRYPTO_CFLAGS"; LIBS="$LIBS $CRYPTO_LIBS"], [AC_MSG_ERROR(libcrypto not found.)]) + BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])]) + if test x$use_qr != xno; then + BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])]) + fi + ] + ) +else + AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing)) + AC_CHECK_LIB([crypto], [main],, AC_MSG_ERROR(libcrypto missing)) + + AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),) + AC_CHECK_LIB([ssl], [main],, AC_MSG_ERROR(libssl missing)) + + BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],,BITCOIN_QT_FAIL(libprotobuf not found))) + if test x$use_qr != xno; then + BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],, [have_qrencode=no])]) + BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)]) + fi +fi + +BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path) + +AC_MSG_CHECKING([whether to build myriadcoind]) +AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes]) +AC_MSG_RESULT($build_bitcoind) + +AC_MSG_CHECKING([whether to build myriadcoin-cli]) +AM_CONDITIONAL([BUILD_BITCOIN_CLI], [test x$build_bitcoin_cli = xyes]) +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]) + +AC_LANG_POP + +if test "x$use_ccache" != "xno"; then + AC_MSG_CHECKING(if ccache should be used) + if test x$CCACHE = x; then + if test "x$use_ccache" = "xyes"; then + AC_MSG_ERROR([ccache not found.]); + else + use_ccache=no + fi + else + use_ccache=yes + CC="$ac_cv_path_CCACHE $CC" + CXX="$ac_cv_path_CCACHE $CXX" + fi + AC_MSG_RESULT($use_ccache) +fi + +dnl enable wallet +AC_MSG_CHECKING([if wallet should be enabled]) +if test x$enable_wallet != xno; then + AC_MSG_RESULT(yes) + AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions]) + +else + AC_MSG_RESULT(no) +fi + +dnl enable upnp support +AC_MSG_CHECKING([whether to build with support for UPnP]) +if test x$have_miniupnpc = xno; then + if test x$use_upnp = xyes; then + AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc") + fi + AC_MSG_RESULT(no) +else + if test x$use_upnp != xno; then + AC_MSG_RESULT(yes) + AC_MSG_CHECKING([whether to build with UPnP enabled by default]) + use_upnp=yes + upnp_setting=0 + if test x$use_upnp_default != xno; then + use_upnp_default=yes + upnp_setting=1 + fi + 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" + fi + else + AC_MSG_RESULT(no) + fi +fi + +dnl these are only used when qt is enabled +if test x$bitcoin_enable_qt != xno; then + BUILD_QT=qt + dnl enable dbus support + AC_MSG_CHECKING([whether to build GUI with support for D-Bus]) + if test x$bitcoin_enable_qt_dbus != xno; then + AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in]) + fi + AC_MSG_RESULT($bitcoin_enable_qt_dbus) + + dnl enable qr support + AC_MSG_CHECKING([whether to build GUI with support for QR codes]) + if test x$have_qrencode = xno; then + if test x$use_qr == xyes; then + AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode") + fi + AC_MSG_RESULT(no) + else + if test x$use_qr != xno; then + AC_MSG_RESULT(yes) + AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in]) + use_qr=yes + else + AC_MSG_RESULT(no) + fi + fi + + if test x$XGETTEXT == x; then + AC_MSG_WARN("xgettext is required to update qt translations") + fi + + AC_MSG_CHECKING([whether to build test_myriadcoin-qt]) + if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then + AC_MSG_RESULT([yes]) + BUILD_TEST_QT="test" + else + AC_MSG_RESULT([no]) + fi +fi + +AC_MSG_CHECKING([whether to build test_myriadcoin]) +if test x$use_tests = xyes; then + AC_MSG_RESULT([yes]) + BUILD_TEST="test" +else + AC_MSG_RESULT([no]) +fi + +if test "x$use_tests$build_bitcoind$use_qt" = "xnonono"; then + AC_MSG_ERROR([No targets! Please specify at least one of: --enable-cli --enable-daemon --enable-gui or --enable-tests]) +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]) +AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision]) +AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build]) +AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release]) +AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release]) +AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR) +AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR) +AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION) +AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD) +AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE) +AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR) + + +AC_SUBST(USE_UPNP) +AC_SUBST(USE_QRCODE) +AC_SUBST(INCLUDES) +AC_SUBST(BOOST_LIBS) +AC_SUBST(TESTDEFS) +AC_SUBST(LEVELDB_TARGET_FLAGS) +AC_SUBST(BUILD_TEST) +AC_SUBST(BUILD_QT) +AC_SUBST(BUILD_TEST_QT) +AC_CONFIG_FILES([Makefile src/Makefile src/test/Makefile src/qt/Makefile src/qt/test/Makefile share/setup.nsi share/qt/Info.plist]) +AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh]) +AC_CONFIG_FILES([qa/pull-tester/build-tests.sh],[chmod +x qa/pull-tester/build-tests.sh]) +AC_OUTPUT diff --git a/contrib/README.md b/contrib/README.md new file mode 100644 index 00000000..92d0a343 --- /dev/null +++ b/contrib/README.md @@ -0,0 +1,60 @@ +Wallet Tools +--------------------- + +### [BitRPC](/contrib/bitrpc) ### +Allows for sending of all standard Bitcoin commands via RPC rather than as command line args. + +### [SpendFrom](/contrib/spendfrom) ### + +Use the raw transactions API to send coins received on a particular +address (or addresses). + +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. + +### [Gitian-descriptors](/contrib/gitian-descriptors) ### +Gavin's notes on getting gitian builds up and running using KVM. + +### [Gitian-downloader](/contrib/gitian-downloader) +Various PGP files of core developers. + +### [MacDeploy](/contrib/macdeploy) ### +Scripts and notes for Mac builds. + +Test and Verify Tools +--------------------- + +### [TestGen](/contrib/testgen) ### +Utilities to generate test vectors for the data-driven Bitcoin tests. + +### [Test Patches](/contrib/test-patches) ### +These patches are applied when the automated pull-tester +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. diff --git a/contrib/bitcoin-qt.pro b/contrib/bitcoin-qt.pro new file mode 100644 index 00000000..3a72d10f --- /dev/null +++ b/contrib/bitcoin-qt.pro @@ -0,0 +1,21 @@ +FORMS += \ + ../src/qt/forms/aboutdialog.ui \ + ../src/qt/forms/addressbookpage.ui \ + ../src/qt/forms/askpassphrasedialog.ui \ + ../src/qt/forms/coincontroldialog.ui \ + ../src/qt/forms/editaddressdialog.ui \ + ../src/qt/forms/helpmessagedialog.ui \ + ../src/qt/forms/intro.ui \ + ../src/qt/forms/openuridialog.ui \ + ../src/qt/forms/optionsdialog.ui \ + ../src/qt/forms/overviewpage.ui \ + ../src/qt/forms/receivecoinsdialog.ui \ + ../src/qt/forms/receiverequestdialog.ui \ + ../src/qt/forms/rpcconsole.ui \ + ../src/qt/forms/sendcoinsdialog.ui \ + ../src/qt/forms/sendcoinsentry.ui \ + ../src/qt/forms/signverifymessagedialog.ui \ + ../src/qt/forms/transactiondescdialog.ui \ + +RESOURCES += \ + ../src/qt/bitcoin.qrc diff --git a/contrib/bitcoind.bash-completion b/contrib/bitcoind.bash-completion index dd6c1ce8..03ef173c 100644 --- a/contrib/bitcoind.bash-completion +++ b/contrib/bitcoind.bash-completion @@ -1,5 +1,5 @@ -# bash programmable completion for bitcoind(1) -# Copyright (c) 2012 Christian von Roques +# bash programmable completion for bitcoind(1) and bitcoin-cli(1) +# Copyright (c) 2012,2014 Christian von Roques # 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: diff --git a/contrib/bitrpc/README.md b/contrib/bitrpc/README.md new file mode 100644 index 00000000..f5ef2f04 --- /dev/null +++ b/contrib/bitrpc/README.md @@ -0,0 +1,8 @@ +### BitRPC +Allows for sending of all standard Bitcoin commands via RPC rather than as command line args. + +### Looking for Wallet Tools? +BitRPC.py is able to do the exact same thing as `walletchangepass.py` and `walletunlock.py`. Their respective commands in BitRPC.py are: + + bitrpc.py walletpassphrasechange + bitrpc.py walletpassphrase \ No newline at end of file diff --git a/contrib/bitrpc/bitrpc.py b/contrib/bitrpc/bitrpc.py index b02b2991..a84d7e34 100644 --- a/contrib/bitrpc/bitrpc.py +++ b/contrib/bitrpc/bitrpc.py @@ -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" \ No newline at end of file + print "Command not found or not supported" diff --git a/contrib/debian/README b/contrib/debian/README deleted file mode 100644 index 1cb9b75f..00000000 --- a/contrib/debian/README +++ /dev/null @@ -1,20 +0,0 @@ -This directory 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: - -bitcoin: URI support --------------------- - -bitcoin-qt.desktop (Gnome / Open Desktop) -To install: - sudo desktop-file-install bitcoin-qt.desktop - sudo update-desktop-database - -If you build yourself, you will either need to modify the paths in -the .desktop file or copy or symlink your bitcoin-qt binary to /usr/bin -and the ../../share/pixmaps/bitcoin128.png to /usr/share/pixmaps - -bitcoin-qt.protocol (KDE) - diff --git a/contrib/debian/README.md b/contrib/debian/README.md new file mode 100644 index 00000000..fab9cc23 --- /dev/null +++ b/contrib/debian/README.md @@ -0,0 +1,21 @@ + +Debian +==================== +This directory 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. + +## bitcoin: URI support ## + + +bitcoin-qt.desktop (Gnome / Open Desktop) +To install: + + sudo desktop-file-install bitcoin-qt.desktop + sudo update-desktop-database + +If you build yourself, you will either need to modify the paths in +the .desktop file or copy or symlink your bitcoin-qt binary to `/usr/bin` +and the `../../share/pixmaps/bitcoin128.png` to `/usr/share/pixmaps` + +bitcoin-qt.protocol (KDE) + diff --git a/contrib/debian/bitcoin-qt.desktop b/contrib/debian/bitcoin-qt.desktop index b2a2cef6..61e1aca6 100644 --- a/contrib/debian/bitcoin-qt.desktop +++ b/contrib/debian/bitcoin-qt.desktop @@ -4,9 +4,9 @@ Name=Bitcoin Comment=Bitcoin P2P Cryptocurrency Comment[fr]=Bitcoin, monnaie virtuelle cryptographique pair à pair Comment[tr]=Bitcoin, eşten eşe kriptografik sanal para birimi -Exec=/usr/bin/bitcoin-qt %u +Exec=bitcoin-qt %u Terminal=false Type=Application -Icon=/usr/share/pixmaps/bitcoin128.png +Icon=bitcoin128 MimeType=x-scheme-handler/bitcoin; -Categories=Office; +Categories=Office;Finance; diff --git a/contrib/debian/bitcoin-qt.install b/contrib/debian/bitcoin-qt.install index 59cacb0e..e0b32373 100644 --- a/contrib/debian/bitcoin-qt.install +++ b/contrib/debian/bitcoin-qt.install @@ -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 diff --git a/contrib/debian/bitcoind.install b/contrib/debian/bitcoind.install index 7bf74600..798ea851 100644 --- a/contrib/debian/bitcoind.install +++ b/contrib/debian/bitcoind.install @@ -1 +1,2 @@ -src/bitcoind usr/bin +usr/local/bin/bitcoind usr/bin +usr/local/bin/bitcoin-cli usr/bin diff --git a/contrib/debian/changelog b/contrib/debian/changelog index e600e467..4f22567f 100644 --- a/contrib/debian/changelog +++ b/contrib/debian/changelog @@ -1,3 +1,47 @@ +bitcoin (0.9.1-precise1) precise; urgency=medium + + * New upstream release. + * Backport pull #4019 + + -- Matt Corallo Sat, 19 Apr 2014 17:29:00 -0400 + +bitcoin (0.9.0-precise1) precise; urgency=medium + + * New upstream release. + + -- Matt Corallo Thu, 20 Mar 2014 13:10:00 -0400 + +bitcoin (0.8.6-precise1) precise; urgency=medium + + * New upstream release. + * Make .desktop paths non-fixed (suggested by prusnak@github) + + -- Matt Corallo Fri, 13 Dec 2013 13:31:00 -0400 + +bitcoin (0.8.5-precise1) precise; urgency=medium + + * New upstream release. + + -- Matt Corallo Sun, 15 Sep 2013 14:02:00 -0400 + +bitcoin (0.8.4-precise1) precise; urgency=medium + + * New upstream release. + + -- Matt Corallo Wed, 4 Sep 2013 10:25:00 -0400 + +bitcoin (0.8.3-natty1) natty; urgency=low + + * New upstream release. + + -- Matt Corallo Wed, 26 Jun 2013 00:18:00 +0100 + +bitcoin (0.8.2-natty1) natty; urgency=low + + * New upstream release. + + -- Matt Corallo Wed, 29 Mar 2013 23:23:00 +0100 + bitcoin (0.8.1-natty3) natty; urgency=low * New pixmaps diff --git a/contrib/debian/control b/contrib/debian/control index dd167ef5..9e006a70 100644 --- a/contrib/debian/control +++ b/contrib/debian/control @@ -5,6 +5,7 @@ Maintainer: Jonas Smedegaard Uploaders: Micah Anderson 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,7 +36,7 @@ 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. @@ -50,6 +52,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. diff --git a/contrib/debian/copyright b/contrib/debian/copyright index b9960491..a6ee2019 100644 --- a/contrib/debian/copyright +++ b/contrib/debian/copyright @@ -6,9 +6,9 @@ Source: http://sourceforge.net/projects/bitcoin/files/ https://github.com/bitcoin/bitcoin Files: * -Copyright: 2009-2012, Bitcoin Developers +Copyright: 2009-2012, Bitcoin Core Developers License: Expat -Comment: The Bitcoin Developers encompasses the current developers listed on bitcoin.org, +Comment: The Bitcoin Core Developers encompasses the current developers listed on bitcoin.org, as well as the numerous contributors to the project. Files: src/json/* @@ -71,7 +71,7 @@ Copyright: Bitboy (optimized for 16x16 by Wladimir van der Laan) License: PUB-DOM Comment: Site: https://bitcointalk.org/?topic=1756.0 -Files: scripts/img/reload.xcf, src/qt/res/movies/update_spinner.mng +Files: scripts/img/reload.xcf, src/qt/res/movies/*.png Copyright: Everaldo (Everaldo Coelho) License: GPL-3+ Comment: Icon Pack: Kids diff --git a/contrib/debian/manpages/bitcoin.conf.5 b/contrib/debian/manpages/bitcoin.conf.5 index eef21314..7438b4b6 100644 --- a/contrib/debian/manpages/bitcoin.conf.5 +++ b/contrib/debian/manpages/bitcoin.conf.5 @@ -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 diff --git a/contrib/debian/rules b/contrib/debian/rules index 98bb2bba..52b357cf 100755 --- a/contrib/debian/rules +++ b/contrib/debian/rules @@ -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 diff --git a/contrib/devtools/README.md b/contrib/devtools/README.md new file mode 100644 index 00000000..a57b4e56 --- /dev/null +++ b/contrib/devtools/README.md @@ -0,0 +1,83 @@ +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. + +For example: + + ./github-merge.sh bitcoin/bitcoin 3077 + +(in any git repository) will help you merge pull request #3077 for the +bitcoin/bitcoin repository. + +What it does: +* Fetch master and the pull request. +* Locally construct a merge commit. +* Show the diff that merge results in. +* Ask you to verify the resulting source tree (so you can do a make +check or whatever). +* Ask you whether to GPG sign the merge commit. +* Ask you whether to push the result upstream. + +This means that there are no potential race conditions (where a +pullreq gets updated while you're reviewing it, but before you click +merge), and when using GPG signatures, that even a compromised github +couldn't mess with the sources. + +Setup +--------- +Configuring the github-merge tool for the bitcoin repository is done in the following way: + + git config githubmerge.repository bitcoin/bitcoin + 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 +=========================== + +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 +.cpp and .h files if these have a git commit from the current year. + +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``` + +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. + diff --git a/contrib/devtools/fix-copyright-headers.py b/contrib/devtools/fix-copyright-headers.py new file mode 100755 index 00000000..52fdc991 --- /dev/null +++ b/contrib/devtools/fix-copyright-headers.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python +''' +Run this script inside of src/ and it will look for all the files +that were changed this year that still have the last year in the +copyright headers, and it will fix the headers on that file using +a perl regex one liner. + +For example: if it finds something like this and we're in 2014 + +// Copyright (c) 2009-2013 The Bitcoin developers + +it will change it to + +// Copyright (c) 2009-2014 The Bitcoin developers + +It will do this for all the files in the folder and its children. + +Author: @gubatron +''' +import os +import time + +year = time.gmtime()[0] +last_year = year - 1 +command = "perl -pi -e 's/%s The Bitcoin/%s The Bitcoin/' %s" +listFilesCommand = "find . | grep %s" + +extensions = [".cpp",".h"] + +def getLastGitModifiedDate(filePath): + gitGetLastCommitDateCommand = "git log " + filePath +" | grep Date | head -n 1" + p = os.popen(gitGetLastCommitDateCommand) + result = "" + for l in p: + result = l + break + result = result.replace("\n","") + return result + +n=1 +for extension in extensions: + foundFiles = os.popen(listFilesCommand % extension) + for filePath in foundFiles: + filePath = filePath[1:-1] + if filePath.endswith(extension): + filePath = os.getcwd() + filePath + modifiedTime = getLastGitModifiedDate(filePath) + if len(modifiedTime) > 0 and str(year) in modifiedTime: + print n,"Last Git Modified: ", modifiedTime, " - ", filePath + os.popen(command % (last_year,year,filePath)) + n = n + 1 + + diff --git a/contrib/devtools/github-merge.sh b/contrib/devtools/github-merge.sh new file mode 100755 index 00000000..e42b71a5 --- /dev/null +++ b/contrib/devtools/github-merge.sh @@ -0,0 +1,173 @@ +#!/bin/bash + +# This script will locally construct a merge commit for a pull request on a +# github repository, inspect it, sign it and optionally push it. + +# The following temporary branches are created/overwritten and deleted: +# * pull/$PULL/base (the current master we're merging onto) +# * pull/$PULL/head (the current state of the remote pull request) +# * pull/$PULL/merge (github's merge) +# * pull/$PULL/local-merge (our merge) + +# In case of a clean merge that is accepted by the user, the local branch with +# name $BRANCH is overwritten with the merged result, and optionally pushed. + +REPO="$(git config --get githubmerge.repository)" +if [[ "d$REPO" == "d" ]]; then + echo "ERROR: No repository configured. Use this command to set:" >&2 + echo "git config githubmerge.repository /" >&2 + echo "In addition, you can set the following variables:" >&2 + echo "- githubmerge.host (default git@github.com)" >&2 + echo "- githubmerge.branch (default master)" >&2 + echo "- githubmerge.testcmd (default none)" >&2 + exit 1 +fi + +HOST="$(git config --get githubmerge.host)" +if [[ "d$HOST" == "d" ]]; then + HOST="git@github.com" +fi + +BRANCH="$(git config --get githubmerge.branch)" +if [[ "d$BRANCH" == "d" ]]; then + BRANCH="master" +fi + +TESTCMD="$(git config --get githubmerge.testcmd)" + +PULL="$1" + +if [[ "d$PULL" == "d" ]]; then + echo "Usage: $0 pullnumber [branch]" >&2 + exit 2 +fi + +if [[ "d$2" != "d" ]]; then + BRANCH="$2" +fi + +# Initialize source branches. +git checkout -q "$BRANCH" +if git fetch -q "$HOST":"$REPO" "+refs/pull/$PULL/*:refs/heads/pull/$PULL/*"; then + if ! git log -1q "refs/heads/pull/$PULL/head" >/dev/null 2>&1; then + echo "ERROR: Cannot find head of pull request #$PULL on $HOST:$REPO." >&2 + exit 3 + fi + if ! git log -1q "refs/heads/pull/$PULL/merge" >/dev/null 2>&1; then + echo "ERROR: Cannot find merge of pull request #$PULL on $HOST:$REPO." >&2 + exit 3 + fi +else + echo "ERROR: Cannot find pull request #$PULL on $HOST:$REPO." >&2 + exit 3 +fi +if git fetch -q "$HOST":"$REPO" +refs/heads/"$BRANCH":refs/heads/pull/"$PULL"/base; then + true +else + echo "ERROR: Cannot find branch $BRANCH on $HOST:$REPO." >&2 + exit 3 +fi +git checkout -q pull/"$PULL"/base +git branch -q -D pull/"$PULL"/local-merge 2>/dev/null +git checkout -q -b pull/"$PULL"/local-merge +TMPDIR="$(mktemp -d -t ghmXXXXX)" + +function cleanup() { + git checkout -q "$BRANCH" + git branch -q -D pull/"$PULL"/head 2>/dev/null + git branch -q -D pull/"$PULL"/base 2>/dev/null + git branch -q -D pull/"$PULL"/merge 2>/dev/null + git branch -q -D pull/"$PULL"/local-merge 2>/dev/null + rm -rf "$TMPDIR" +} + +# Create unsigned merge commit. +( + echo "Merge pull request #$PULL" + echo "" + git log --no-merges --topo-order --pretty='format:%h %s (%an)' pull/"$PULL"/base..pull/"$PULL"/head +)>"$TMPDIR/message" +if git merge -q --commit --no-edit --no-ff -m "$(<"$TMPDIR/message")" pull/"$PULL"/head; then + if [ "d$(git log --pretty='format:%s' -n 1)" != "dMerge pull request #$PULL" ]; then + echo "ERROR: Creating merge failed (already merged?)." >&2 + cleanup + exit 4 + fi +else + echo "ERROR: Cannot be merged cleanly." >&2 + git merge --abort + cleanup + exit 4 +fi + +# Run test command if configured. +if [[ "d$TESTCMD" != "d" ]]; then + # Go up to the repository's root. + while [ ! -d .git ]; do cd ..; done + if ! $TESTCMD; then + echo "ERROR: Running $TESTCMD failed." >&2 + cleanup + exit 5 + fi + # Show the created merge. + git diff pull/"$PULL"/merge..pull/"$PULL"/local-merge >"$TMPDIR"/diff + git diff pull/"$PULL"/base..pull/"$PULL"/local-merge + if [[ "$(<"$TMPDIR"/diff)" != "" ]]; then + echo "WARNING: merge differs from github!" >&2 + read -p "Type 'ignore' to continue. " -r >&2 + if [[ "d$REPLY" =~ ^d[iI][gG][nN][oO][rR][eE]$ ]]; then + echo "Difference with github ignored." >&2 + else + cleanup + exit 6 + fi + fi + read -p "Press 'd' to accept the diff. " -n 1 -r >&2 + echo + if [[ "d$REPLY" =~ ^d[dD]$ ]]; then + echo "Diff accepted." >&2 + else + echo "ERROR: Diff rejected." >&2 + cleanup + exit 6 + fi +else + # Verify the result. + echo "Dropping you on a shell so you can try building/testing the merged source." >&2 + echo "Run 'git diff HEAD~' to show the changes being merged." >&2 + echo "Type 'exit' when done." >&2 + bash -i + read -p "Press 'm' to accept the merge. " -n 1 -r >&2 + echo + if [[ "d$REPLY" =~ ^d[Mm]$ ]]; then + echo "Merge accepted." >&2 + else + echo "ERROR: Merge rejected." >&2 + cleanup + exit 7 + fi +fi + +# Sign the merge commit. +read -p "Press 's' to sign off on the merge. " -n 1 -r >&2 +echo +if [[ "d$REPLY" =~ ^d[Ss]$ ]]; then + if [[ "$(git config --get user.signingkey)" == "" ]]; then + echo "WARNING: No GPG signing key set, not signing. Set one using:" >&2 + echo "git config --global user.signingkey " >&2 + git commit -q --signoff --amend --no-edit + else + git commit -q --gpg-sign --amend --no-edit + fi +fi + +# Clean up temporary branches, and put the result in $BRANCH. +git checkout -q "$BRANCH" +git reset -q --hard pull/"$PULL"/local-merge +cleanup + +# Push the result. +read -p "Type 'push' to push the result to $HOST:$REPO, branch $BRANCH. " -r >&2 +if [[ "d$REPLY" =~ ^d[Pp][Uu][Ss][Hh]$ ]]; then + git push "$HOST":"$REPO" refs/heads/"$BRANCH" +fi diff --git a/contrib/devtools/symbol-check.py b/contrib/devtools/symbol-check.py new file mode 100755 index 00000000..8dd6d8f0 --- /dev/null +++ b/contrib/devtools/symbol-check.py @@ -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) + + diff --git a/contrib/devtools/update-translations.py b/contrib/devtools/update-translations.py new file mode 100755 index 00000000..1950a426 --- /dev/null +++ b/contrib/devtools/update-translations.py @@ -0,0 +1,66 @@ +#!/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 +- remove 'unfinished' translation items +''' +from __future__ import division, print_function +import subprocess +import re +import sys +import os + +# 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 postprocess_translations(): + print('Postprocessing...') + for filename in os.listdir(LOCALE_DIR): + # process only language files, and do not process source language + if not filename.endswith('.ts') or filename == SOURCE_LANG: + continue + filepath = os.path.join(LOCALE_DIR, filename) + with open(filepath, 'rb') as f: + data = f.read() + # remove non-allowed control characters + data = re.sub('[\x00-\x09\x0b\x0c\x0e-\x1f]', '', data) + data = data.split('\n') + # strip locations from non-origin translation + # location tags are used to guide translators, they are not necessary for compilation + # TODO: actually process XML instead of relying on Transifex's one-tag-per-line output format + data = [line for line in data if not '\"-frandom-seed=boost1 -fPIC\" + ;" > user-config.jam + + ./bootstrap.sh --without-icu + + ./bjam toolset=gcc threadapi=pthread threading=multi variant=release link=static runtime-link=shared --user-config=user-config.jam --without-mpi --without-python -sNO_BZIP2=1 --layout=tagged --build-type=complete --prefix="$STAGING" $MAKEOPTS -d+2 install + + # post-process all generated libraries to be deterministic + # extract them to a temporary directory then re-build them deterministically + for LIB in $(find $STAGING -name \*.a); do + rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR + ar xv $LIB | cut -b5- > /tmp/list.txt + rm $LIB + ar crsD $LIB $(cat /tmp/list.txt) + done + # + cd "$STAGING" + find | sort | zip -X@ $OUTDIR/boost-linux${GBUILD_BITS}-1.55.0-gitian-r1.zip diff --git a/contrib/gitian-descriptors/boost-win.yml b/contrib/gitian-descriptors/boost-win.yml new file mode 100644 index 00000000..db5d6bab --- /dev/null +++ b/contrib/gitian-descriptors/boost-win.yml @@ -0,0 +1,86 @@ +--- +name: "boost" +suites: +- "precise" +architectures: +- "amd64" +packages: +- "mingw-w64" +- "g++-mingw-w64" +- "faketime" +- "zip" +reference_datetime: "2011-01-30 00:00:00" +remotes: [] +files: +- "boost_1_55_0.tar.bz2" +- "boost-mingw-gas-cross-compile-2013-03-03.patch" +script: | + # Defines + export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 + export FAKETIME=$REFERENCE_DATETIME + export TZ=UTC + INDIR=$HOME/build + TEMPDIR=$HOME/tmp + # Input Integrity Check + echo "fff00023dd79486d444c8e29922f4072e1d451fc5a4d2b6075852ead7f2b7b52 boost_1_55_0.tar.bz2" | shasum -c + echo "d2b7f6a1d7051faef3c9cf41a92fa3671d905ef1e1da920d07651a43299f6268 boost-mingw-gas-cross-compile-2013-03-03.patch" | shasum -c + + for BITS in 32 64; do # for architectures + # + INSTALLPREFIX=$HOME/staging${BITS} + BUILDDIR=$HOME/build${BITS} + if [ "$BITS" == "32" ]; then + HOST=i686-w64-mingw32 + else + HOST=x86_64-w64-mingw32 + fi + # + mkdir -p $INSTALLPREFIX $BUILDDIR + cd $BUILDDIR + # + tar --warning=no-timestamp -xjf $INDIR/boost_1_55_0.tar.bz2 + cd boost_1_55_0 + GCCVERSION=$($HOST-g++ -E -dM $(mktemp --suffix=.h) | grep __VERSION__ | cut -d ' ' -f 3 | cut -d '"' -f 2) + echo "using gcc : $GCCVERSION : $HOST-g++ + : + $HOST-windres + $HOST-ar + -frandom-seed=boost1 + $HOST-ranlib + ;" > user-config.jam + ./bootstrap.sh --without-icu + + # Workaround: Upstream boost dev refuses to include patch that would allow Free Software cross-compile toolchain to work + # This patch was authored by the Fedora package developer and ships in Fedora's mingw32-boost. + # Please obtain the exact patch that matches the above sha256sum from one of the following mirrors. + # + # Read History: https://svn.boost.org/trac/boost/ticket/7262 + # History Mirror: http://rose.makesad.us/~paulproteus/mirrors/7262%20Boost.Context%20fails%20to%20build%20using%20MinGW.html + # + # Patch: https://svn.boost.org/trac/boost/raw-attachment/ticket/7262/boost-mingw.patch + # Patch Mirror: http://wtogami.fedorapeople.org/boost-mingw-gas-cross-compile-2013-03-03.patch + # Patch Mirror: http://mindstalk.net/host/boost-mingw-gas-cross-compile-2013-03-03.patch + # Patch Mirror: http://rose.makesad.us/~paulproteus/mirrors/boost-mingw-gas-cross-compile-2013-03-03.patch + patch -p0 < $INDIR/boost-mingw-gas-cross-compile-2013-03-03.patch + + # Bug Workaround: boost-1.54.0 broke the ability to disable zlib, still broken in 1.55 + # https://svn.boost.org/trac/boost/ticket/9156 + sed -i 's^\[ ac.check-library /zlib//zlib : /zlib//zlib^^' libs/iostreams/build/Jamfile.v2 + sed -i 's^zlib.cpp gzip.cpp \]^^' libs/iostreams/build/Jamfile.v2 + + # http://statmt.org/~s0565741/software/boost_1_52_0/libs/context/doc/html/context/requirements.html + # "For cross-compiling the lib you must specify certain additional properties at bjam command line: target-os, abi, binary-format, architecture and address-model." + ./bjam toolset=gcc binary-format=pe target-os=windows threadapi=win32 address-model=$BITS threading=multi variant=release link=static runtime-link=static --user-config=user-config.jam --without-mpi --without-python -sNO_BZIP2=1 -sNO_ZLIB=1 --layout=tagged --build-type=complete --prefix="$INSTALLPREFIX" $MAKEOPTS install + # post-process all generated libraries to be deterministic + # extract them to a temporary directory then re-build them deterministically + for LIB in $(find $INSTALLPREFIX -name \*.a); do + rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR + $HOST-ar xv $LIB | cut -b5- > /tmp/list.txt + rm $LIB + $HOST-ar crsD $LIB $(cat /tmp/list.txt) + done + # + cd "$INSTALLPREFIX" + find | sort | zip -X@ $OUTDIR/boost-win$BITS-1.55.0-gitian-r6.zip + done # for BITS in + diff --git a/contrib/gitian-descriptors/boost-win32.yml b/contrib/gitian-descriptors/boost-win32.yml deleted file mode 100644 index 1eeb9eaa..00000000 --- a/contrib/gitian-descriptors/boost-win32.yml +++ /dev/null @@ -1,38 +0,0 @@ ---- -name: "boost" -suites: -- "lucid" -architectures: -- "i386" -packages: -- "mingw32" -- "faketime" -- "zip" -reference_datetime: "2011-01-30 00:00:00" -remotes: [] -files: -- "boost_1_50_0.tar.bz2" -script: | - TMPDIR="$HOME/tmpdir" - mkdir -p $TMPDIR/bin/$GBUILD_BITS $TMPDIR/include - tar xjf boost_1_50_0.tar.bz2 - cd boost_1_50_0 - echo "using gcc : 4.4 : i586-mingw32msvc-g++ - : - i586-mingw32msvc-windres - i586-mingw32msvc-ar - -frandom-seed=boost1 - ;" > user-config.jam - ./bootstrap.sh --without-icu - ./bjam toolset=gcc target-os=windows threadapi=win32 threading=multi variant=release link=static --user-config=user-config.jam --without-mpi --without-python -sNO_BZIP2=1 -sNO_ZLIB=1 --layout=tagged --build-type=complete $MAKEOPTS stage - for lib in chrono date_time exception filesystem graph iostreams math_c99f math_c99l math_c99 math_tr1f math_tr1l math_tr1 prg_exec_monitor program_options random regex serialization signals system test_exec_monitor thread_win32 unit_test_framework wave wserialization; do - mkdir $lib - (cd $lib ; ar xf ../stage/lib/libboost_${lib}-mt-s.a) - mv $lib $TMPDIR/bin/$GBUILD_BITS - done - cp -a boost $TMPDIR/include - cd $TMPDIR - export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 - export FAKETIME=$REFERENCE_DATETIME - zip -r boost-win32-1.50.0-gitian2.zip * - cp boost-win32-1.50.0-gitian2.zip $OUTDIR diff --git a/contrib/gitian-descriptors/deps-linux.yml b/contrib/gitian-descriptors/deps-linux.yml new file mode 100644 index 00000000..82212221 --- /dev/null +++ b/contrib/gitian-descriptors/deps-linux.yml @@ -0,0 +1,98 @@ +--- +name: "bitcoin" +suites: +- "precise" +architectures: +- "i386" +- "amd64" +packages: +- "g++" +- "unzip" +- "zip" +- "pkg-config" +- "libtool" +- "faketime" +- "bsdmainutils" +reference_datetime: "2013-06-01 00:00:00" +remotes: [] +files: +- "openssl-1.0.1h.tar.gz" +- "miniupnpc-1.9.tar.gz" +- "qrencode-3.4.3.tar.bz2" +- "protobuf-2.5.0.tar.bz2" +- "db-4.8.30.NC.tar.gz" +script: | + STAGING="$HOME/install" + TEMPDIR="$HOME/tmp" + OPTFLAGS='-O2' + export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 + export FAKETIME=$REFERENCE_DATETIME + export TZ=UTC + export LIBRARY_PATH="$STAGING/lib" + # Integrity Check + echo "9d1c8a9836aa63e2c6adb684186cbd4371c9e9dcc01d6e3bb447abf2d4d3d093 openssl-1.0.1h.tar.gz" | sha256sum -c + echo "2923e453e880bb949e3d4da9f83dd3cb6f08946d35de0b864d0339cf70934464 miniupnpc-1.9.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.1h.tar.gz + cd openssl-1.0.1h + # 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 + make + make install_sw + cd .. + # + tar xzfm miniupnpc-1.9.tar.gz + cd miniupnpc-1.9 + # miniupnpc is always built with -fPIC + INSTALLPREFIX=$STAGING make $MAKEOPTS install + rm -f $STAGING/lib/libminiupnpc.so* # no way to skip shared lib build + cd .. + # + tar xjf qrencode-3.4.3.tar.bz2 + cd qrencode-3.4.3 + unset FAKETIME # unset fake time during configure, as it does some clock sanity tests + # need --with-pic to avoid relocation error in 64 bit builds + ./configure --prefix=$STAGING --enable-static --disable-shared --with-pic --without-tools --disable-dependency-tracking + # Workaround to prevent re-configuring by make; make all files have a date in the past + find . -print0 | xargs -r0 touch -t 200001010000 + export FAKETIME=$REFERENCE_DATETIME + make $MAKEOPTS install + cd .. + # + tar xjf protobuf-2.5.0.tar.bz2 + cd protobuf-2.5.0 + mkdir -p $STAGING/host/bin + unset FAKETIME # unset fake time during configure, as it does some clock sanity tests + # need --with-pic to avoid relocation error in 64 bit builds + ./configure --prefix=$STAGING --bindir=$STAGING/host/bin --enable-static --disable-shared --with-pic --without-zlib + # Workaround to prevent re-configuring by make; make all files have a date in the past + find . -print0 | xargs -r0 touch -t 200001010000 + export FAKETIME=$REFERENCE_DATETIME + make $MAKEOPTS install + cd .. + # + tar xzf db-4.8.30.NC.tar.gz + cd db-4.8.30.NC/build_unix + # need --with-pic to avoid relocation error in 64 bit builds + ../dist/configure --prefix=$STAGING --enable-cxx --disable-shared --with-pic + # Workaround to prevent re-configuring by make; make all files have a date in the past + find . -print0 | xargs -r0 touch -t 200001010000 + make $MAKEOPTS library_build + make install_lib install_include + cd ../.. + # post-process all generated libraries to be deterministic + # extract them to a temporary directory then re-build them deterministically + for LIB in $(find $STAGING -name \*.a); do + rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR + ar xv $LIB | cut -b5- > /tmp/list.txt + rm $LIB + ar crsD $LIB $(cat /tmp/list.txt) + done + # + cd $STAGING + find include lib bin host | sort | zip -X@ $OUTDIR/bitcoin-deps-linux${GBUILD_BITS}-gitian-r6.zip diff --git a/contrib/gitian-descriptors/deps-win.yml b/contrib/gitian-descriptors/deps-win.yml new file mode 100644 index 00000000..fabc2949 --- /dev/null +++ b/contrib/gitian-descriptors/deps-win.yml @@ -0,0 +1,128 @@ +--- +name: "bitcoin-deps" +suites: +- "precise" +architectures: +- "amd64" +packages: +- "mingw-w64" +- "g++-mingw-w64" +- "git-core" +- "zip" +- "faketime" +- "psmisc" +reference_datetime: "2011-01-30 00:00:00" +remotes: [] +files: +- "openssl-1.0.1h.tar.gz" +- "db-4.8.30.NC.tar.gz" +- "miniupnpc-1.9.tar.gz" +- "zlib-1.2.8.tar.gz" +- "libpng-1.6.8.tar.gz" +- "qrencode-3.4.3.tar.bz2" +script: | + # + export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 + export FAKETIME=$REFERENCE_DATETIME + export TZ=UTC + INDIR=$HOME/build + TEMPDIR=$HOME/tmp + # Input Integrity Check + echo "9d1c8a9836aa63e2c6adb684186cbd4371c9e9dcc01d6e3bb447abf2d4d3d093 openssl-1.0.1h.tar.gz" | sha256sum -c + echo "12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz" | sha256sum -c + echo "2923e453e880bb949e3d4da9f83dd3cb6f08946d35de0b864d0339cf70934464 miniupnpc-1.9.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 + + for BITS in 32 64; do # for architectures + # + INSTALLPREFIX=$HOME/staging${BITS} + BUILDDIR=$HOME/build${BITS} + if [ "$BITS" == "32" ]; then + HOST=i686-w64-mingw32 + else + HOST=x86_64-w64-mingw32 + fi + # + mkdir -p $INSTALLPREFIX $BUILDDIR + cd $BUILDDIR + # + tar xzf $INDIR/openssl-1.0.1h.tar.gz + cd openssl-1.0.1h + if [ "$BITS" == "32" ]; then + OPENSSL_TGT=mingw + else + OPENSSL_TGT=mingw64 + fi + ./Configure --cross-compile-prefix=$HOST- ${OPENSSL_TGT} no-shared no-dso --openssldir=$INSTALLPREFIX + make + make install_sw + cd .. + # + tar xzf $INDIR/db-4.8.30.NC.tar.gz + cd db-4.8.30.NC/build_unix + ../dist/configure --prefix=$INSTALLPREFIX --enable-mingw --enable-cxx --host=$HOST --disable-shared + make $MAKEOPTS library_build + make install_lib install_include + cd ../.. + # + tar xzf $INDIR/miniupnpc-1.9.tar.gz + cd miniupnpc-1.9 + echo " + --- 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 + + -miniupnpcstrings.h: miniupnpcstrings.h.in wingenminiupnpcstrings + - wingenminiupnpcstrings \$< \$@ + +miniupnpcstrings.h: miniupnpcstrings.h.in + + sed -e 's|OS/version|MSWindows/5.1.2600|' -e 's|MINIUPNPC_VERSION_STRING \"version\"|MINIUPNPC_VERSION_STRING \"VERSIONHERE\"|' \$< > \$@ + + minixml.o: minixml.c minixml.h miniupnpcstrings.h + + " | sed "s/VERSIONHERE/$(cat VERSION)/" | patch -p1 + mkdir -p dll + make -f Makefile.mingw CC=$HOST-gcc AR=$HOST-ar libminiupnpc.a + install -d $INSTALLPREFIX/include/miniupnpc + install *.h $INSTALLPREFIX/include/miniupnpc + install libminiupnpc.a $INSTALLPREFIX/lib + cd .. + # + tar xzf $INDIR/zlib-1.2.8.tar.gz + cd zlib-1.2.8 + CROSS_PREFIX=$HOST- ./configure --prefix=$INSTALLPREFIX --static + make + make install + cd .. + # + tar xzf $INDIR/libpng-1.6.8.tar.gz + cd libpng-1.6.8 + OPT="-O2" + CPPFLAGS="${OPT} -I$INSTALLPREFIX/include" CFLAGS="${OPT} -I$INSTALLPREFIX/include" LDFLAGS="${OPT} -L$INSTALLPREFIX/lib" ./configure --disable-shared --prefix=$INSTALLPREFIX --host=$HOST + make $MAKEOPTS + make install + cd .. + # + tar xjf $INDIR/qrencode-3.4.3.tar.bz2 + cd qrencode-3.4.3 + png_CFLAGS="-I$INSTALLPREFIX/include" png_LIBS="-L$INSTALLPREFIX/lib -lpng" ./configure --prefix=$INSTALLPREFIX --host=$HOST --enable-static --disable-shared --without-tools --disable-dependency-tracking + # Workaround to prevent re-configuring by make (resulting in missing m4 error); make all files have a date in the past + find . -print0 | xargs -r0 touch -t 200001010000 + make + make install + cd .. + # post-process all generated libraries to be deterministic + # extract them to a temporary directory then re-build them deterministically + for LIB in $(find $INSTALLPREFIX -name \*.a); do + rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR + $HOST-ar xv $LIB | cut -b5- > /tmp/list.txt + rm $LIB + $HOST-ar crsD $LIB $(cat /tmp/list.txt) + done + # + cd $INSTALLPREFIX + find include lib | sort | zip -X@ $OUTDIR/bitcoin-deps-win$BITS-gitian-r13.zip + done # for BITS in diff --git a/contrib/gitian-descriptors/deps-win32.yml b/contrib/gitian-descriptors/deps-win32.yml deleted file mode 100644 index 90f4c6c4..00000000 --- a/contrib/gitian-descriptors/deps-win32.yml +++ /dev/null @@ -1,72 +0,0 @@ ---- -name: "bitcoin-deps" -suites: -- "lucid" -architectures: -- "i386" -packages: -- "mingw32" -- "git-core" -- "zip" -- "faketime" -- "wine" -- "psmisc" -reference_datetime: "2011-01-30 00:00:00" -remotes: [] -files: -- "openssl-1.0.1c.tar.gz" -- "db-4.8.30.NC.tar.gz" -- "miniupnpc-1.6.tar.gz" -- "zlib-1.2.6.tar.gz" -- "libpng-1.5.9.tar.gz" -- "qrencode-3.2.0.tar.bz2" -script: | - # - export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 - export FAKETIME=$REFERENCE_DATETIME - export TZ=UTC - # - tar xzf openssl-1.0.1c.tar.gz - cd openssl-1.0.1c - ./Configure --cross-compile-prefix=i586-mingw32msvc- mingw - make - cd .. - # - tar xzf db-4.8.30.NC.tar.gz - cd db-4.8.30.NC/build_unix - ../dist/configure --enable-mingw --enable-cxx --host=i586-mingw32msvc CFLAGS="-I/usr/i586-mingw32msvc/include" - make $MAKEOPTS - cd ../.. - # - tar xzf miniupnpc-1.6.tar.gz - cd miniupnpc-1.6 - sed 's/dllwrap -k --driver-name gcc/$(DLLWRAP) -k --driver-name $(CC)/' -i Makefile.mingw - sed 's|wingenminiupnpcstrings $< $@|./wingenminiupnpcstrings $< $@|' -i Makefile.mingw - make -f Makefile.mingw DLLWRAP=i586-mingw32msvc-dllwrap CC=i586-mingw32msvc-gcc AR=i586-mingw32msvc-ar - cd .. - mv miniupnpc-1.6 miniupnpc - # - tar xzf zlib-1.2.6.tar.gz - cd zlib-1.2.6 - make -f win32/Makefile.gcc PREFIX=i586-mingw32msvc- $MAKEOPTS - cd .. - # - tar xzf libpng-1.5.9.tar.gz - cd libpng-1.5.9 - ./configure -disable-shared CC=i586-mingw32msvc-cc AR=i586-mingw32msvc-ar STRIP=i586-mingw32msvc-strip RANLIB=i586-mingw32msvc-ranlib OBJDUMP=i586-mingw32msvc-objdump LD=i586-mingw32msvc-ld LDFLAGS="-L../zlib-1.2.6/" CFLAGS="-I../zlib-1.2.6/" - make $MAKEOPTS - cd .. - # - tar xjf qrencode-3.2.0.tar.bz2 - cd qrencode-3.2.0 - ./configure CC=i586-mingw32msvc-cc AR=i586-mingw32msvc-ar STRIP=i586-mingw32msvc-strip RANLIB=i586-mingw32msvc-ranlib OBJDUMP=i586-mingw32msvc-objdump LD=i586-mingw32msvc-ld png_LIBS="../libpng-1.5.9/.libs/libpng15.a ../zlib-1.2.6/libz.a" png_CFLAGS="-I../libpng-1.5.9" - make $MAKEOPTS - cd .. - # - zip -r $OUTDIR/bitcoin-deps-0.0.5.zip \ - $(ls qrencode-*/{qrencode.h,.libs/libqrencode.{,l}a} | sort) \ - $(ls db-*/build_unix/{libdb_cxx.a,db.h,db_cxx.h,libdb.a,.libs/libdb_cxx-?.?.a} | sort) \ - $(find openssl-* -name '*.a' -o -name '*.h' | sort) \ - $(find miniupnpc -name '*.h' -o -name 'libminiupnpc.a' | sort) - # Kill wine processes as gitian won't figure out we are done otherwise - killall wineserver services.exe explorer.exe winedevice.exe diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml new file mode 100644 index 00000000..65a6c3c1 --- /dev/null +++ b/contrib/gitian-descriptors/gitian-linux.yml @@ -0,0 +1,86 @@ +--- +name: "bitcoin" +suites: +- "precise" +architectures: +- "i386" +- "amd64" +packages: +- "g++" +- "git-core" +- "unzip" +- "pkg-config" +- "autoconf2.13" +- "libtool" +- "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-r6.zip" +- "bitcoin-deps-linux64-gitian-r6.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' + BINDIR="${OUTDIR}/bin/${GBUILD_BITS}" # 32/64 bit build specific output directory + 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-r6.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 + 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 + 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 + mkdir -p $TEMPDIR + cd $TEMPDIR + tar -xvf $HOME/build/bitcoin/$DISTNAME | 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/src/$DISTNAME diff --git a/contrib/gitian-descriptors/gitian-osx-bitcoin.yml b/contrib/gitian-descriptors/gitian-osx-bitcoin.yml new file mode 100644 index 00000000..44b5de9b --- /dev/null +++ b/contrib/gitian-descriptors/gitian-osx-bitcoin.yml @@ -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-r4.tar.gz" +- "osx-depends-qt-5.2.1-r4.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-r4.tar.gz + tar -C osx-cross-depends -xf osx-depends-qt-5.2.1-r4.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 diff --git a/contrib/gitian-descriptors/gitian-osx-depends.yml b/contrib/gitian-descriptors/gitian-osx-depends.yml new file mode 100644 index 00000000..07a021cf --- /dev/null +++ b/contrib/gitian-descriptors/gitian-osx-depends.yml @@ -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.tar.gz" +- "openssl-1.0.1h.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 "2923e453e880bb949e3d4da9f83dd3cb6f08946d35de0b864d0339cf70934464 miniupnpc-1.9.tar.gz" | sha256sum -c + echo "9d1c8a9836aa63e2c6adb684186cbd4371c9e9dcc01d6e3bb447abf2d4d3d093 openssl-1.0.1h.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=r4 + 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.1h.tar.gz + BUILD_DIR=${BUILD_BASE}/openssl-1.0.1h + + 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 + 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} + sed -i "s|engines apps test|engines|" ${BUILD_DIR}/Makefile + sed -i "/define DATE/d" ${BUILD_DIR}/crypto/Makefile + make -j1 build_libs libcrypto.pc libssl.pc openssl.pc + make -j1 install_sw + popd + + #libminiupnpc + SOURCE_FILE=${SOURCES_PATH}/miniupnpc-1.9.tar.gz + BUILD_DIR=${BUILD_BASE}/miniupnpc-1.9 + + 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} : \"${INT_CFLAGS} ${INT_CPPFLAGS}\" \"${INT_LDFLAGS} ${INT_CLANG_LDFLAGS}\" \"${INT_LIBTOOL}\" \"${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 diff --git a/contrib/gitian-descriptors/gitian-osx-native.yml b/contrib/gitian-descriptors/gitian-osx-native.yml new file mode 100644 index 00000000..a753ad70 --- /dev/null +++ b/contrib/gitian-descriptors/gitian-osx-native.yml @@ -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 diff --git a/contrib/gitian-descriptors/gitian-osx-qt.yml b/contrib/gitian-descriptors/gitian-osx-qt.yml new file mode 100644 index 00000000..81314845 --- /dev/null +++ b/contrib/gitian-descriptors/gitian-osx-qt.yml @@ -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-r4.tar.gz" +- "MacOSX10.7.sdk.tar.gz" + +script: | + + echo "84e924181d4ad6db00239d87250cc89868484a14841f77fb85ab1f1dbdcd7da1 qt-everywhere-opensource-src-5.2.1.tar.gz" | sha256sum -c + + REVISION=r4 + 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-r4.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} < $OUTDIR/src/$DISTNAME + diff --git a/contrib/gitian-descriptors/gitian-win32.yml b/contrib/gitian-descriptors/gitian-win32.yml deleted file mode 100644 index fd3b5532..00000000 --- a/contrib/gitian-descriptors/gitian-win32.yml +++ /dev/null @@ -1,74 +0,0 @@ ---- -name: "bitcoin" -suites: -- "lucid" -architectures: -- "i386" -packages: -- "mingw32" -- "git-core" -- "unzip" -- "nsis" -- "faketime" -reference_datetime: "2011-01-30 00:00:00" -remotes: -- "url": "https://github.com/bitcoin/bitcoin.git" - "dir": "bitcoin" -files: -- "qt-win32-4.8.3-gitian-r1.zip" -- "boost-win32-1.50.0-gitian2.zip" -- "bitcoin-deps-0.0.5.zip" -script: | - # - mkdir $HOME/qt - cd $HOME/qt - unzip ../build/qt-win32-4.8.3-gitian-r1.zip - cd $HOME/build/ - export PATH=$HOME/qt/bin/:$PATH - # - mkdir boost_1_50_0 - cd boost_1_50_0 - mkdir -p stage/lib - unzip ../boost-win32-1.50.0-gitian2.zip - cd bin/$GBUILD_BITS - for lib in *; do - i586-mingw32msvc-ar rc ../../stage/lib/libboost_${lib}-mt-s.a $lib/*.o - i586-mingw32msvc-ranlib ../../stage/lib/libboost_${lib}-mt-s.a - done - cd ../.. - mv include/boost . - cd .. - # - unzip bitcoin-deps-0.0.5.zip - # - find -type f | xargs touch --date="$REFERENCE_DATETIME" - # - cd bitcoin - mkdir -p $OUTDIR/src - git archive HEAD | tar -x -C $OUTDIR/src - cp $OUTDIR/src/doc/README_windows.txt $OUTDIR/readme.txt - cp $OUTDIR/src/COPYING $OUTDIR/COPYING.txt - export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 - export FAKETIME=$REFERENCE_DATETIME - export TZ=UTC - $HOME/qt/src/bin/qmake -spec unsupported/win32-g++-cross MINIUPNPC_LIB_PATH=$HOME/build/miniupnpc MINIUPNPC_INCLUDE_PATH=$HOME/build/ BDB_LIB_PATH=$HOME/build/db-4.8.30.NC/build_unix BDB_INCLUDE_PATH=$HOME/build/db-4.8.30.NC/build_unix BOOST_LIB_PATH=$HOME/build/boost_1_50_0/stage/lib BOOST_INCLUDE_PATH=$HOME/build/boost_1_50_0 BOOST_LIB_SUFFIX=-mt-s BOOST_THREAD_LIB_SUFFIX=_win32-mt-s OPENSSL_LIB_PATH=$HOME/build/openssl-1.0.1c OPENSSL_INCLUDE_PATH=$HOME/build/openssl-1.0.1c/include QRENCODE_LIB_PATH=$HOME/build/qrencode-3.2.0/.libs QRENCODE_INCLUDE_PATH=$HOME/build/qrencode-3.2.0 USE_QRCODE=1 INCLUDEPATH=$HOME/build DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_LRELEASE=lrelease QMAKE_CXXFLAGS=-frandom-seed=bitcoin USE_BUILD_INFO=1 - make $MAKEOPTS - cp release/bitcoin-qt.exe $OUTDIR/ - # - cd src - export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 - export FAKETIME=$REFERENCE_DATETIME - export TZ=UTC - make -f makefile.linux-mingw $MAKEOPTS DEPSDIR=$HOME/build bitcoind.exe USE_UPNP=0 DEBUGFLAGS="-frandom-seed=bitcoin" - i586-mingw32msvc-strip bitcoind.exe - mkdir $OUTDIR/daemon - cp bitcoind.exe $OUTDIR/daemon - cd .. - mkdir nsis - git archive HEAD | tar -x -C nsis - cd nsis/src - mkdir ../release - cp ../../release/* ../release/ - cp ../../src/*.exe . - makensis ../share/setup.nsi - cp ../share/bitcoin-*-win32-setup.exe $OUTDIR/ diff --git a/contrib/gitian-descriptors/gitian.yml b/contrib/gitian-descriptors/gitian.yml deleted file mode 100644 index 195d0e36..00000000 --- a/contrib/gitian-descriptors/gitian.yml +++ /dev/null @@ -1,55 +0,0 @@ ---- -name: "bitcoin" -suites: -- "lucid" -architectures: -- "i386" -- "amd64" -packages: -- "libdb4.8++-dev" -- "qt4-qmake" -- "libqt4-dev" -- "libboost-system-dev" -- "libboost-filesystem-dev" -- "libboost-program-options-dev" -- "libboost-thread-dev" -- "libssl-dev" -- "git-core" -- "unzip" -- "pkg-config" -- "libpng12-dev" -reference_datetime: "2011-01-30 00:00:00" -remotes: -- "url": "https://github.com/bitcoin/bitcoin.git" - "dir": "bitcoin" -files: -- "miniupnpc-1.6.tar.gz" -- "qrencode-3.2.0.tar.bz2" -script: | - INSTDIR="$HOME/install" - export LIBRARY_PATH="$INSTDIR/lib" - # - tar xzf miniupnpc-1.6.tar.gz - cd miniupnpc-1.6 - INSTALLPREFIX=$INSTDIR make $MAKEOPTS install - cd .. - # - tar xjf qrencode-3.2.0.tar.bz2 - cd qrencode-3.2.0 - ./configure --prefix=$INSTDIR --enable-static --disable-shared - make $MAKEOPTS install - cd .. - # - cd bitcoin - mkdir -p $OUTDIR/src - git archive HEAD | tar -x -C $OUTDIR/src - cp $OUTDIR/src/doc/README.md $OUTDIR - cp $OUTDIR/src/COPYING $OUTDIR - cd src - make -f makefile.unix STATIC=1 OPENSSL_INCLUDE_PATH="$INSTDIR/include" OPENSSL_LIB_PATH="$INSTDIR/lib" $MAKEOPTS bitcoind USE_UPNP=0 DEBUGFLAGS= - mkdir -p $OUTDIR/bin/$GBUILD_BITS - install -s bitcoind $OUTDIR/bin/$GBUILD_BITS - cd .. - qmake INCLUDEPATH="$INSTDIR/include" LIBS="-L$INSTDIR/lib" RELEASE=1 USE_QRCODE=1 - make $MAKEOPTS - install bitcoin-qt $OUTDIR/bin/$GBUILD_BITS diff --git a/contrib/gitian-descriptors/protobuf-win.yml b/contrib/gitian-descriptors/protobuf-win.yml new file mode 100644 index 00000000..d2fdcaa7 --- /dev/null +++ b/contrib/gitian-descriptors/protobuf-win.yml @@ -0,0 +1,65 @@ +--- +name: "protobuf-win32" +suites: +- "precise" +architectures: +- "amd64" +packages: +- "mingw-w64" +- "g++-mingw-w64" +- "zip" +- "faketime" +reference_datetime: "2013-04-15 00:00:00" +remotes: [] +files: +- "protobuf-2.5.0.tar.bz2" +script: | + # + export TZ=UTC + INDIR=$HOME/build + TEMPDIR=$HOME/tmp + OPTFLAGS="-O2" + # Integrity Check + echo "13bfc5ae543cf3aa180ac2485c0bc89495e3ae711fc6fab4f8ffe90dfb4bb677 protobuf-2.5.0.tar.bz2" | sha256sum -c + + for BITS in 32 64; do # for architectures + # + INSTALLPREFIX=$HOME/staging${BITS} + BUILDDIR=$HOME/build${BITS} + if [ "$BITS" == "32" ]; then + HOST=i686-w64-mingw32 + else + HOST=x86_64-w64-mingw32 + fi + # + mkdir -p $INSTALLPREFIX $BUILDDIR + cd $BUILDDIR + # + tar xjf $INDIR/protobuf-2.5.0.tar.bz2 + cd protobuf-2.5.0 + # First: build a native (linux) protoc + ./configure --enable-shared=no --disable-dependency-tracking --without-zlib CXXFLAGS="-frandom-seed=11 ${OPTFLAGS}" + make + mkdir -p $INSTALLPREFIX/host/bin + cp src/protoc $INSTALLPREFIX/host/bin + # Now recompile with the mingw cross-compiler: + make distclean + ./configure --prefix=$INSTALLPREFIX --enable-shared=no --disable-dependency-tracking --without-zlib --with-protoc=$INSTALLPREFIX/host/bin/protoc --host=$HOST CXXFLAGS="-frandom-seed=11 ${OPTFLAGS}" + export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 + export FAKETIME=$REFERENCE_DATETIME + make + make install + # post-process all generated libraries to be deterministic + # extract them to a temporary directory then re-build them deterministically + for LIB in $(find $INSTALLPREFIX -name \*.a); do + rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR + $HOST-ar xv $LIB | cut -b5- > /tmp/list.txt + rm $LIB + $HOST-ar crsD $LIB $(cat /tmp/list.txt) + done + # + cd $INSTALLPREFIX + find include lib host | sort | zip -X@ $OUTDIR/protobuf-win$BITS-2.5.0-gitian-r4.zip + unset LD_PRELOAD + unset FAKETIME + done # for BITS in diff --git a/contrib/gitian-descriptors/qt-linux.yml b/contrib/gitian-descriptors/qt-linux.yml new file mode 100644 index 00000000..b163b4bb --- /dev/null +++ b/contrib/gitian-descriptors/qt-linux.yml @@ -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 diff --git a/contrib/gitian-descriptors/qt-win.yml b/contrib/gitian-descriptors/qt-win.yml new file mode 100644 index 00000000..7000c700 --- /dev/null +++ b/contrib/gitian-descriptors/qt-win.yml @@ -0,0 +1,92 @@ +--- +name: "qt" +suites: +- "precise" +architectures: +- "amd64" +packages: +- "mingw-w64" +- "g++-mingw-w64" +- "zip" +- "unzip" +- "faketime" +- "libz-dev" +reference_datetime: "2011-01-30 00:00:00" +remotes: [] +files: +- "qt-everywhere-opensource-src-5.2.0.tar.gz" +- "bitcoin-deps-win32-gitian-r13.zip" +- "bitcoin-deps-win64-gitian-r13.zip" +script: | + # Defines + export TZ=UTC + INDIR=$HOME/build + TEMPDIR=$HOME/tmp + # Qt: workaround for determinism in resource ordering + # Qt5's rcc uses a QHash to store the files for the resource. + # A security fix in QHash makes the ordering of keys to be different on every run + # (https://qt.gitorious.org/qt/qtbase/commit/c01eaa438200edc9a3bbcd8ae1e8ded058bea268). + # This is good in general but qrc shouldn't be doing a traversal over a randomized container. + # The thorough solution would be to use QMap instead of QHash, but this requires patching Qt. + # For now luckily there is a test mode that forces a fixed seed. + export QT_RCC_TEST=1 + # Integrity Check + echo "395ec72277c5786c65b8163ef5817fd03d0a1f524a6d47f53624baf8056f1081 qt-everywhere-opensource-src-5.2.0.tar.gz" | sha256sum -c + + for BITS in 32 64; do # for architectures + # + INSTALLPREFIX=$HOME/staging${BITS} + BUILDDIR=$HOME/build${BITS} + DEPSDIR=$HOME/deps${BITS} + if [ "$BITS" == "32" ]; then + HOST=i686-w64-mingw32 + else + HOST=x86_64-w64-mingw32 + fi + # + mkdir -p $INSTALLPREFIX $INSTALLPREFIX/host/bin $DEPSDIR $BUILDDIR + # + # Need mingw-compiled openssl from bitcoin-deps: + cd $DEPSDIR + unzip $INDIR/bitcoin-deps-win${BITS}-gitian-r13.zip + # + cd $BUILDDIR + # + tar xzf $INDIR/qt-everywhere-opensource-src-5.2.0.tar.gz + cd qt-everywhere-opensource-src-5.2.0 + SPECNAME="win32-g++" + SPECFILE="qtbase/mkspecs/${SPECNAME}/qmake.conf" + sed 's/qt_instdate=`date +%Y-%m-%d`/qt_instdate=2011-01-30/' -i qtbase/configure + sed --posix "s|QMAKE_CFLAGS = -pipe -fno-keep-inline-dllexport|QMAKE_CFLAGS\t\t= -pipe -fno-keep-inline-dllexport -isystem /usr/$HOST/include/ -frandom-seed=qtbuild -I$DEPSDIR/include|" -i ${SPECFILE} + sed --posix "s|QMAKE_LFLAGS =|QMAKE_LFLAGS\t\t= -L$DEPSDIR/lib|" -i ${SPECFILE} + # Before we tried to pass arguments to ar (static linking) in using QMAKE_LIB, however + # qt removes the arguments for ar and provides a script which makes it impossible to pass the determinism flag - + # so rather than try to replace ar, post-process all libraries and plugins at the end. + # + # Don't load faketime while compiling Qt, qmake will get stuck in nearly infinite loops + #export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 + #export FAKETIME=$REFERENCE_DATETIME + # + # Compile static libraries, and use statically linked openssl (-openssl-linked): + OPENSSL_LIBS="-L$DEPSDIR/lib -lssl -lcrypto -lgdi32" ./configure -prefix $INSTALLPREFIX -bindir $INSTALLPREFIX/host/bin -confirm-license -release -opensource -static -xplatform $SPECNAME -device-option CROSS_COMPILE="$HOST-" -no-audio-backend -no-javascript-jit -no-sql-sqlite -no-sql-odbc -no-nis -no-cups -no-iconv -no-dbus -no-gif -no-opengl -no-compile-examples -no-feature-style-windowsce -no-feature-style-windowsmobile -no-qml-debug -openssl-linked -skip qtsvg -skip qtwebkit -skip qtwebkit-examples -skip qtserialport -skip qtdeclarative -skip qtmultimedia -skip qtimageformats -skip qtlocation -skip qtsensors -skip qtquick1 -skip qtquickcontrols -skip qtactiveqt -skip qtconnectivity -skip qtwinextras -skip qtxmlpatterns -skip qtscript -skip qtdoc -system-libpng -system-zlib + make $MAKEOPTS install + # post-process all generated libraries and plugins to be deterministic + # extract them to a temporary directory then re-build them deterministically + for LIB in $(find $INSTALLPREFIX -name *.a); do + rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR + $HOST-ar xv $LIB | cut -b5- > /tmp/list.txt + rm $LIB + $HOST-ar crsD $LIB $(cat /tmp/list.txt) + done + # + cd $INSTALLPREFIX + # Remove unused non-deterministic stuff + rm host/bin/qtpaths.exe lib/libQt5Bootstrap.a lib/libQt5Bootstrap.la + # 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 + 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-r3.zip + unset LD_PRELOAD + unset FAKETIME + done # for BITS in diff --git a/contrib/gitian-descriptors/qt-win32.yml b/contrib/gitian-descriptors/qt-win32.yml deleted file mode 100644 index 0b711790..00000000 --- a/contrib/gitian-descriptors/qt-win32.yml +++ /dev/null @@ -1,54 +0,0 @@ ---- -name: "qt" -suites: -- "lucid" -architectures: -- "i386" -packages: -- "mingw32" -- "zip" -- "faketime" -reference_datetime: "2011-01-30 00:00:00" -remotes: [] -files: -- "qt-everywhere-opensource-src-4.8.3.tar.gz" -script: | - INSTDIR="$HOME/qt/" - mkdir $INSTDIR - SRCDIR="$INSTDIR/src/" - mkdir $SRCDIR - # - tar xzf qt-everywhere-opensource-src-4.8.3.tar.gz - cd qt-everywhere-opensource-src-4.8.3 - sed 's/$TODAY/2011-01-30/' -i configure - sed 's/i686-pc-mingw32-/i586-mingw32msvc-/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf - sed --posix 's|QMAKE_CFLAGS\t\t= -pipe|QMAKE_CFLAGS\t\t= -pipe -isystem /usr/i586-mingw32msvc/include/ -frandom-seed=qtbuild|' -i mkspecs/unsupported/win32-g++-cross/qmake.conf - sed 's/QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads/QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf - sed 's/QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads/QMAKE_LFLAGS_EXCEPTIONS_ON = -lmingwthrd/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf - sed --posix 's/QMAKE_MOC\t\t= i586-mingw32msvc-moc/QMAKE_MOC\t\t= moc/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf - sed --posix 's/QMAKE_RCC\t\t= i586-mingw32msvc-rcc/QMAKE_RCC\t\t= rcc/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf - sed --posix 's/QMAKE_UIC\t\t= i586-mingw32msvc-uic/QMAKE_UIC\t\t= uic/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf - # ar adds timestamps to every object file included in the static library - # providing -D as ar argument is supposed to solve it, but doesn't work as qmake strips off the arguments and adds -M to pass a script... - # which somehow cannot be combined with other flags. - # use faketime only for ar, as it confuses make/qmake into hanging sometimes - sed --posix "s|QMAKE_LIB\t\t= i586-mingw32msvc-ar -ru|QMAKE_LIB\t\t= $HOME/ar -Dr|" -i mkspecs/unsupported/win32-g++-cross/qmake.conf - echo '#!/bin/bash' > $HOME/ar - echo 'export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1' >> $HOME/ar - echo 'i586-mingw32msvc-ar "$@"' >> $HOME/ar - chmod +x $HOME/ar - #export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 - export FAKETIME=$REFERENCE_DATETIME - export TZ=UTC - ./configure -prefix $INSTDIR -confirm-license -release -opensource -static -no-qt3support -xplatform unsupported/win32-g++-cross -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 -no-feature-style-plastique -no-feature-style-cleanlooks -no-feature-style-motif -no-feature-style-cde -no-feature-style-windowsce -no-feature-style-windowsmobile -no-feature-style-s60 - find . -name *.prl | xargs -l sed 's|/\.||' -i - find . -name *.prl | xargs -l sed 's|/$||' -i - make $MAKEOPTS install - cp -a bin $SRCDIR/ - cd $INSTDIR - find . -name *.prl | xargs -l sed 's|/$||' -i - #sed 's|QMAKE_PRL_LIBS.*|QMAKE_PRL_LIBS = -lQtDeclarative -lQtScript -lQtSvg -lQtSql -lQtXmlPatterns -lQtGui -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtNetwork -lQtCore -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32|' -i imports/Qt/labs/particles/qmlparticlesplugin.prl - - # 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 - zip -r $OUTDIR/qt-win32-4.8.3-gitian-r1.zip * diff --git a/contrib/gitian-downloader/aschildbach-key.pgp b/contrib/gitian-downloader/aschildbach-key.pgp new file mode 100644 index 0000000000000000000000000000000000000000..df06e19fa4b109286dbbb7596c86d31fe0f1052f GIT binary patch literal 1993 zcmbW%c|6mP9|!P{ZOo9Cp&a#Hj+h~m$T7F%D5emFVVEO+2vLrZIm;+aI~)yBmYO18 zM^Wx?Ie!|``qoy?2Z`m_FW=w!_wV2LAJ518db~=7Dj;UV-*xsu0D79G@N`E;@EF_j zZAyT=A6}Me4xPW&Zp@62nvj3y3W>K35PKZFfZuDmXq|S(ah3M;LE0BBZ_%unppxvE z-2O!dq)NG|QA``9kbCfqjX?){@c(@m5Pi`fQaaj3sn`;&V zH>t|DcOj<+8xrBh0DXw{<^xj|wD5hNC~0`1XF_|+KNBp7@MSR!c9sz7ShLc|Gl$|P zf-`KjZaloRozrKUMb*S*npiVtdxtM5_KY4kXlz^|o_0vIwO54ZckOAaXmWSvk-OC- zZjE!KoM37(gDdKmLQ9BqUdGC`f21afPMI`Abvw@3ltID^>pcg`lytE6?2(PL|iOYGZha+T6oFD=EmP47Oc zN{?Sla}(95`+d>k4vU|uH@xk*WqCLnMePprX7IC5WOLYeIVeFFlhIzAO*09I7}1@27zTjV6ZGm2y{pYv_Az9gTea( z(I0a%6MQ$01N0W~)Z8Qv7OBoq9-Iif$!%Js@c~-MeH*O&C%PIs$mN-Gx;<%1KMDGO z`BY2-7MLt}|8vq!kjnbh5L%;WNCBuC@;tH_EH^F>Oni`H8!4j_-Nz!@Lg2sp7ZC>8 z#91uv_Nn;{1yc9-nLeZn&|F^Jy;nM)>Y;Eyh?b~2EcRM= zVX36PXxoGTb?n-fUhFzsd%yL^O>OsZJ^?gyVSH(^Dd~j1j?qCQ$M^G&Jb^ku-!P}d zU;lukJM62bY19RJobOqu|ButYkiF}ySEirR0a=V134k()_^|R^MUZxZrJvnpbQ8BH zx=I9~9uDzXd#zGm+6XCMJW)SwI#$wB_{-V7%dfc{8@yJcW>`jIG5)&9pIcO&R{RR*Y2kKFW7ZXL1d8C7-X(qY_&B7?2zOptv~SYUWk z`{+o@{>>S=@w%tiTR-K`CgmzT>J~?{%=*DI+^Q7||K71;ZUe}q^h+SUSgJK}Nf#eE zlB8O+rmCr%gg5sYdqY$q@n>jQp*CGt5z`ETh;}G0*;J;mU-S>U!y5XA^dlq@h|Y!DG!^|uW(6C*RRUV!zEK@_uaxvlXRU1u1%Q>YD?PRa3J!oSxlHr$o)~YQ(&8r3(_S>uje8k>(j=DJ! zAC8U1=EQr=t4*~Jw-~^;^=)KMw@SJM54rul%c~=lWYfi5KD6;oz00Vo{OwI~@6>5` zmj6fbWB@D-6qP#5^rhmz#`8-N0jrP<(5ZU!j+H=P!F%cTpWH`n49o^A+ zGEuRA>2`AC?-wP=WnzdtnMwaVuv=mfLMDbhXgA+`_ZgSdkO1c_bV&bPE+L~O7*+$H zJY0CO8hO=L)isjminxmFFrL+Psx^W+3Y~sixVJ&!bC@2)+(~Qdn1o-SZl~^G<&9zq zsrbl1D&~hVvpiN#pts$YR5XgIAqX6PyK}K%>&8m-N_zDWp|h4VIkp(&RFQgwgj9s9 zd=Aa;M!cll?VfCWIUTp%dDG2HL~BXa-?D*s*KOD>R@ey2!nb0?HR!un_qG1b$6dwU)^ WIAcG~ygp)$8X5B=5Q?y`6#oH_l8)K{ literal 0 HcmV?d00001 diff --git a/contrib/gitian-downloader/linux-download-config b/contrib/gitian-downloader/linux-download-config index 8340a5dd..b5e0561a 100644 --- a/contrib/gitian-downloader/linux-download-config +++ b/contrib/gitian-downloader/linux-download-config @@ -8,35 +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 -minimum_weight: 120 + 9692B91BBF0E8D34DFD33B1882C5C009628ECF0C: + name: michagogo + key: michagogo + E944AE667CF960B1004BC32FCA662BE18B877A60: + name: "Andreas Schildbach" + key: aschildbach diff --git a/contrib/gitian-downloader/michagogo-key.pgp b/contrib/gitian-downloader/michagogo-key.pgp new file mode 100644 index 00000000..47bc4045 --- /dev/null +++ b/contrib/gitian-downloader/michagogo-key.pgp @@ -0,0 +1,59 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.12 (GNU/Linux) + +mQENBFGeqJ4BCADb7SI3/+q93gIvN0AGRg9Mtz73OLIOzCHeeoyn+tp7JcYNzxkQ +9lfeXiEfn72Sh8gHkLtLIqr7HlIMo8DxSS8JPRVjlJGkNyAW4SeEwN2wNa5OV8k0 +N4jBa9a1csFyCyrEkPKvkUpBkQDvNXjNxyEhHwyZqPanKxy6NXIHOJji8ObOMQXI +T9HwJrpjRth3u4uKG968JBTEyAXAmkt0Zidl1Ykgzcedk4mJSE9uZCW8DjSv2wML +XcQz8+dYsoskT3KRdkowLHxAfj1BNyNc1+rKLghliM5vSQWi+Lbhi1Bxh4sY1UwA +lKnAGqrnAGyIvCtkwTq5QI6ufF2ZY44bvVgpABEBAAG0IU1pY2hhZ29nbyA8bWlj +aGFnb2dvQHNlcnZlci5mYWtlPokBOAQTAQIAIgUCUZ6ongIbAwYLCQgHAwIGFQgC +CQoLBBYCAwECHgECF4AACgkQgsXACWKOzwzMUAgAuqUmK10xE5C3lUym2f72z0t6 +a2NM5Wfjr9//Y1/okC36C5XAMEtN2UwckPzzJ5p5D5y5yzwfZq5Jd8Py29VQIMsV +7FbC1a0H3D+bCyX+JJ6FAmUbnWOQ/+mydYc74RvD8iwjePNT6kziZNv6dMGctJTl +0alwjtQYgyGkeYKnIxbcyjHX/IawLUrunb/6mSKun87T8+NM/omfFCTc3l8TakpM +0wyNYRiUkIfUBvB8sDUU3A80qKN/hqRKvlFu3+/kMiAc9ZYQrbmsB+sYWdmM+4zw +8NBw3yuYzWyPuoa4PR5ZmS9F11WLMR5vTRCdLudAqYsWu3LtV6vAIvlOUa2LMLRg +TWljaGFnb2dvIChSZWdpc3RlcmVkIG5pY2sgbWljaGFnb2dvIG9uIGZyZWVub2Rl +IGFzIG9mIE9jdG9iZXIgMTIsIDIwMTMpIDxtaWNoYWdvZ29Ac2VydmVyLmZha2U+ +iQE4BBMBAgAiBQJSWarzAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRCC +xcAJYo7PDA7nB/91wAiaMlU5nHLUu0anhNQbGvUdFgKK1zO90S5KzUdJcY438jcS +UJW1az8l9U9JBRIfPRYVhz/Z1TAJ+dCzD7D8BXHFeGEr0zNOh87ly9aB5du7dpN2 +oSBD6wLcJpqxt4h+XjSS2CX98/2ZIJxXENE2KySaTXP39Xl3eNwvJTUBA4XlcMey +J8KMp/IERli4H0O7vRyLgu3yYpUArTqAonzG1g2lfB35PQJfeInrRSniQ336otnZ +A8qwJ63kfUtWVDRz0g1fnvtiLGPivDJaI5hyIaUeJPaXU1+sg7YNroDu60o2NGZh +F+0IjHlvRfzzA+F9Vw38rpSqR3BmCdjf6Sv3iQEcBBABAgAGBQJSWa9/AAoJEH+r +EUJn5PoE/hgH/1T2dAthVucA/hzY0nl4SMjbg+dzNlYBq00Qwx8DRKVjk5et8+kY +oPI3DGILcr+ELnxNekeMv9WQBBtJanUh1K5ohZ6ohoR7lG18LXf5HCdspflB5Me6 +LMA6iMryEP6gIs9GFuoGe2YQavm58YrkqhcPu34dGN7kdurfEXLvDfVlh5ZbKCsP +Gyd7Pbz04SpqykgK1udiTsLVjc70Xhv+jAMqeaCugDX6TLEwjVmZH/xsyKk2Uh3V +Oib5FXADAtKH+vSqqhFpXrw7R/NaBzvCbas8l61DFHiUg1/bo8vsV8MtGcyZmzXJ +C5Gm0njtGOil/g7JF9siUrpxs9Yyt/h+T2W0W01pY2hhZ29nbyAoVXNlciBhY2Nv +dW50IG1pY2hhZ29nbyBvbiBHaXRodWIgYXMgb2YgT2N0b2JlciAxMiwgMjAxMykg +PG1pY2hhZ29nb0BzZXJ2ZXIuZmFrZT6JATcEEwECACIFAlJZqxkCGwMGCwkIBwMC +BhUIAgkKCwQWAgMBAh4BAheAAAoJEILFwAlijs8M+1AH+IU78ARblqTnJeSl0iWH +mEsg4IBK30Q6/exDAcqOEm1Yc171uw2WnGmIvPYOQqxrRTvj3LoQ816dU6jrj6vY +s+XX0R2hxy7ILh17D/3UKnHcddu7rmc7pNEqZeBXaMughqQaPOWkAIe52+qK5tsl +sWllzTYE4jo29uZ3dAtDcKEJjBo/pIXnu1GOslE1+V4X1H9WDlwrS/JXHzyDQAjt +maPR+3gNesDanhrRmrnT3ZXW2ZVd3vGBibhia8PWUhU1uwOH23ySWXncgsHH0Zad +UMjd4w3YliZP/mLn2ghAxHB70IO7lgAgN3HYZeFoufP3pcK440A+CezfQiRcjHl/ +oIkBHAQQAQIABgUCUlmvfwAKCRB/qxFCZ+T6BOq9CACItsrUZPKGeWSTkMHknMrV +K5vxIXJVCBb+Tppc0Q/J5p4EkW/RFhTwIP2zw8NLDKMh5oO9md4LXhvfIZkqQJFo +6ZtLa3Vf+Kj7uyxezBo4QHA+G7tDsRGaMKVrEMiyLCwS1+hg9VaNzsf7zmQW7mYE +vTLMHp3cVaSU7Mh2Dl8rnAaM/DpTUZQwZ+32Qrb/Z4HSa4f278iqoFpjEbBE2KCr +vT5yEVvpCZ4lwSgA2a+uTlRTvVV6NA/kpsxU64tmhuEOjy+ToDqJ8wv4mqvWZxMv +C6OhfVaXBy3U9gG8aQV0ffXGs+TbCtv8ApHd6E1/AVk0oyZGJaBVrEl688bBIWd/ +uQENBFGeqJ4BCADFmgR7oEGkFFB5qXnuNYFq1nUGDAh0dLNtAD3J6EMxUZEXdmp+ +DQHJw6/eDRQaG9EbjNZheycbVUoI8K2Y/Z268HQueGuIEIJv6cZYXoXdWCbDD4fn +HMNUX2wNlpDqWxb7PNUEtfU9hI3gmHGlr5OiEh3iV06uiZg4n2rbWPbj45m5LJzv +wpCrUA+pLcl9Xjw2cajaSTjdXHk9gvXTCo6s2ZS3/3Q4l+xuzZp1MGNzPQHASMKs +wecSJKkYg6W8I5WsVlPd9a8oQCc/Nfz7BPw31MRVR/SF5FAMqaXx5uLwghVdHB2i +cLURsOtJlCfP8W06gB7yS+MH45Jq/oxBRiJBABEBAAGJAR8EGAECAAkFAlGeqJ4C +GwwACgkQgsXACWKOzwwT4wgAy6ICcnBZ9l2jSu+ldy57F6jf5kpKZgB9NV8V2mMA +NeY1wMQ4VTVpU4t3s4E2LYtGNJNkPQVHbt1Pf4dGPasvMPaHMamgwgyqgYixqs0x +D5PdKzVrfnjwTTr/ZAFdccSPmvy5/hbY0geQ/+mzdbL07+xaT58JIoG5nySDKhmC +VeOvhDZtXMVAhEWBDPEgh/H9sEuBgMgZrzfE1j3q802qiXeQs6WtadWlQ1RN9Iq1 +ZzIi6u9/BifEIRI0pO/WwKOZdXLTemFUoakoe7uT3A74N96t0G9LZVihYbEoO+Pc +5IaHPBV5VLeR3TB1LnnjHVf/Fwi8cnGy50kNWjcbMyEDag== +=jyQ4 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/contrib/gitian-downloader/win32-download-config b/contrib/gitian-downloader/win32-download-config index 49d52851..5d56db86 100644 --- a/contrib/gitian-downloader/win32-download-config +++ b/contrib/gitian-downloader/win32-download-config @@ -8,35 +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 -minimum_weight: 120 + 9692B91BBF0E8D34DFD33B1882C5C009628ECF0C: + name: michagogo + key: michagogo + E944AE667CF960B1004BC32FCA662BE18B877A60: + name: "Andreas Schildbach" + key: aschildbach diff --git a/contrib/homebrew/bitcoin.qt.pro.patch b/contrib/homebrew/bitcoin.qt.pro.patch deleted file mode 100644 index 1001f290..00000000 --- a/contrib/homebrew/bitcoin.qt.pro.patch +++ /dev/null @@ -1,32 +0,0 @@ -diff --git a/bitcoin-qt.pro b/bitcoin-qt.pro -index d938c07..e1dd4ec 100644 ---- a/bitcoin-qt.pro -+++ b/bitcoin-qt.pro -@@ -353,7 +353,7 @@ - } - - isEmpty(BDB_LIB_PATH) { -- macx:BDB_LIB_PATH = /opt/local/lib/db48 -+ macx:BDB_LIB_PATH = /usr/local/opt/berkeley-db4/lib - } - - isEmpty(BDB_LIB_SUFFIX) { -@@ -361,15 +361,15 @@ - } - - isEmpty(BDB_INCLUDE_PATH) { -- macx:BDB_INCLUDE_PATH = /opt/local/include/db48 -+ macx:BDB_INCLUDE_PATH = /usr/local/opt/berkeley-db4/include - } - - isEmpty(BOOST_LIB_PATH) { -- macx:BOOST_LIB_PATH = /opt/local/lib -+ macx:BOOST_LIB_PATH = /usr/local/opt/boost/lib - } - - isEmpty(BOOST_INCLUDE_PATH) { -- macx:BOOST_INCLUDE_PATH = /opt/local/include -+ macx:BOOST_INCLUDE_PATH = /usr/local/opt/boost/include - } - - win32:DEFINES += WIN32 diff --git a/contrib/homebrew/makefile.osx.patch b/contrib/homebrew/makefile.osx.patch deleted file mode 100644 index 287db2fd..00000000 --- a/contrib/homebrew/makefile.osx.patch +++ /dev/null @@ -1,48 +0,0 @@ -diff --git a/src/makefile.osx b/src/makefile.osx -index bef0ef3..07ef8d3 100644 ---- a/src/makefile.osx -+++ b/src/makefile.osx -@@ -7,17 +7,21 @@ - # Originally by Laszlo Hanyecz (solar@heliacal.net) - - CXX=llvm-g++ --DEPSDIR=/opt/local -+DEPSDIR=/usr/local -+DB4DIR=/usr/local/opt/berkeley-db4 -+OPENSSLDIR=/usr/local/opt/openssl - - INCLUDEPATHS= \ - -I"$(CURDIR)" \ -- -I"$(CURDIR)"/obj \ -+ -I"$(CURDIR)/obj" \ - -I"$(DEPSDIR)/include" \ -- -I"$(DEPSDIR)/include/db48" -+ -I"$(DB4DIR)/include" \ -+ -I"$(OPENSSLDIR)/include" - - LIBPATHS= \ - -L"$(DEPSDIR)/lib" \ -- -L"$(DEPSDIR)/lib/db48" -+ -L"$(DB4DIR)/lib" \ -+ -L"$(OPENSSLDIR)/lib" - - USE_UPNP:=1 - USE_IPV6:=1 -@@ -31,14 +35,14 @@ ifdef STATIC - TESTLIBS += \ - $(DEPSDIR)/lib/libboost_unit_test_framework-mt.a - LIBS += \ -- $(DEPSDIR)/lib/db48/libdb_cxx-4.8.a \ -+ $(DB4DIR)/lib/libdb_cxx-4.8.a \ - $(DEPSDIR)/lib/libboost_system-mt.a \ - $(DEPSDIR)/lib/libboost_filesystem-mt.a \ - $(DEPSDIR)/lib/libboost_program_options-mt.a \ - $(DEPSDIR)/lib/libboost_thread-mt.a \ - $(DEPSDIR)/lib/libboost_chrono-mt.a \ -- $(DEPSDIR)/lib/libssl.a \ -- $(DEPSDIR)/lib/libcrypto.a \ -+ $(OPENSSLDIR)/lib/libssl.a \ -+ $(OPENSSLDIR)/lib/libcrypto.a \ - -lz - else - TESTLIBS += \ diff --git a/contrib/linearize/README.md b/contrib/linearize/README.md new file mode 100644 index 00000000..70b9f034 --- /dev/null +++ b/contrib/linearize/README.md @@ -0,0 +1,2 @@ +### Linearize ### +Construct a linear, no-fork, best version of the blockchain. \ No newline at end of file diff --git a/contrib/linearize/example-linearize.cfg b/contrib/linearize/example-linearize.cfg new file mode 100644 index 00000000..f5cdab53 --- /dev/null +++ b/contrib/linearize/example-linearize.cfg @@ -0,0 +1,12 @@ + +# bitcoind RPC settings +rpcuser=someuser +rpcpassword=somepassword +host=127.0.0.1 +port=8332 + +# bootstrap.dat settings +netmagic=f9beb4d9 +max_height=279000 +output=bootstrap.dat + diff --git a/contrib/linearize/linearize.py b/contrib/linearize/linearize.py new file mode 100644 index 00000000..650f7d36 --- /dev/null +++ b/contrib/linearize/linearize.py @@ -0,0 +1,132 @@ +#!/usr/bin/python +# +# linearize.py: Construct a linear, no-fork, best version of the blockchain. +# +# +# Copyright (c) 2013 The Bitcoin developers +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +# + +import json +import struct +import re +import base64 +import httplib +import sys + +ERR_SLEEP = 15 +MAX_NONCE = 1000000L + +settings = {} + +class BitcoinRPC: + OBJID = 1 + + def __init__(self, host, port, username, password): + authpair = "%s:%s" % (username, password) + self.authhdr = "Basic %s" % (base64.b64encode(authpair)) + self.conn = httplib.HTTPConnection(host, port, False, 30) + def rpc(self, method, params=None): + self.OBJID += 1 + obj = { 'version' : '1.1', + 'method' : method, + 'id' : self.OBJID } + if params is None: + obj['params'] = [] + else: + obj['params'] = params + self.conn.request('POST', '/', json.dumps(obj), + { 'Authorization' : self.authhdr, + 'Content-type' : 'application/json' }) + + resp = self.conn.getresponse() + if resp is None: + print "JSON-RPC: no response" + return None + + body = resp.read() + resp_obj = json.loads(body) + if resp_obj is None: + print "JSON-RPC: cannot JSON-decode body" + return None + if 'error' in resp_obj and resp_obj['error'] != None: + return resp_obj['error'] + if 'result' not in resp_obj: + print "JSON-RPC: no result in object" + return None + + return resp_obj['result'] + def getblock(self, hash, verbose=True): + return self.rpc('getblock', [hash, verbose]) + def getblockhash(self, index): + return self.rpc('getblockhash', [index]) + +def getblock(rpc, settings, n): + hash = rpc.getblockhash(n) + hexdata = rpc.getblock(hash, False) + data = hexdata.decode('hex') + + return data + +def get_blocks(settings): + rpc = BitcoinRPC(settings['host'], settings['port'], + settings['rpcuser'], settings['rpcpassword']) + + outf = open(settings['output'], 'ab') + + for height in xrange(settings['min_height'], settings['max_height']+1): + data = getblock(rpc, settings, height) + + outhdr = settings['netmagic'] + outhdr += struct.pack("){bk_lrTFpyB>Kx zvzZ;+2_e)VBwou~9}vwOs48kz0STfYORZE@f`})?Lsbw$6d@!k0TK_C@|~GGyK6gu ziV#BK9_h~c?%%oheD}_|cXo+LDQ{Y1L@E(=Be72Q;&BJzdQJzVOO*6LE9g&N1?c5U zqwX|=1FdC&WI!??8ITM}1|$Rj3k=}QX6Zf_Y59~4NCqSWEe1F~s7S0!LhnR63>|oc zp8(Ja6o&$wWB{!ST@rdH(x`zbQCH}wt0F!zl&Cw(Rne{_^iHIs?xcv14@Hcuh%Xc+ z93A%6usJEENXw^WKr(QUf#};kUD<9nD)r9qcTM}5(sd|t_?{!(klu?=Ij-exm%UBb zYCgTV=4~%JmR&LYXF?np!Dh2;_+ia?BUnRCh?hLC4t!Cxe#)_ewM)rU*RExAxluJ+ z(65iG*9rw~R2|m~*RS_LlDpj}9!h^|Zprw<^)EiV6U|u>?>!yg=fjtgS19e6Tf%|F zH=`dQH0>A3{@8_{qsMxW_w^?S28V`EoczeCkKQ|Q{{s(RN)A;FbG_!XSJPhI^UL*3 z`%<#M3IFCz&pq$kTaLZG;s7r?pSM>6`%1vzQgU!#&nIo`v+bg#s|~anZWn~sKkeJL z`*h8Btc7Z|X$LDEc=cj9Xkc&5yHyYNdEkXc;COCx+4h^z&(w{IU0-m^UJ!U2d(6*o z7&ZHB-7%W0hVL70%`RUJjW0F~({XDfXWol=>lrDnL};Y+r~q+Yva8i>B&s56f$pTz zvoO&04p-ob@O!lE1g7V>sV5Hp*mL{lPkuP}Nji+ixxO|F>4sa2Eq@rDzkT!eLfqj4 z2+?tI0K}zqEZrW54oqs$zlEXqQs-1agCPU#7!$X20zr8p@%z@h&pwQjm|y;m;By>vA$tA>=04gv^~noO?Bhx9 zK6%Hf_R%M3_yCUq*|Y(s>sSHCX)wPLvVJf1(&OQ}FyjH3Z_*m>4RbUD=1+&iWq7z2 zw|kixA|*p~0`ok^JBrhi>$&zwX_Xy?bkoP_3|8_pSl27`Rr&_KNZ+H^>F4wtdS5xB z3@P_34=9f)8KtO9D$~ki$^~UvSy5IKQ;AY&fx6ycN7->!Jx`i*^aubX&c{I{ z&TmB3*jSN`C1?u?!_g@&LkB@dxI!q}BMRmo+oJQAL-U;H$(+6UtFK)Kd>Dy+o6ySV zX2!DFRPO9pA*G)ipH59o7iUwmT6tn(Rx1|E`dB=s5suqUe>lVAhZfmt=;I;ybpzXl zgDu+)_dRf&uNhm8i#(cz^-bSw)m;uMfr;`VQP<`-&F@MWL6}44vk2RBNGnJdQh*fu zy83-Ig2eg1T;S2$`S;(9{#=ObpR@+|)PMVT_%i|$kM$C4zlQWfNj}-T1KUjEu z+4nz-I`;iB9Fywe;!NC@c2B-@AKGy~T!Zhv@WCGe<2A@l6le3(kSDUDM+=_!9at_xslX!-l*fme8w=u~t^GXjodlV&<}WZNkjwja*f$ z+PbOf`Qq3_PR|wc)oeC9r3q<)D4*4)Om8D?G#YiApQ)zdS{3g~+P4iWwe35B9rqZU z((JHP+nA>5W42*fQ<+T;xtVYWWU%g;aJ@4Xad2M_+N(_T9n7605bq@xe!n;ZJ;x40 zI0F4u;LZrtr4qdo?sOcxz~cfB09yicq?r+zBh8Y)D)4gxYrt`IQFigZiShwp-ghj6 zyLg{PIY*t>1djLbolesw^kcsW?XO_Ja47mu%{ktKY`cYFKgK-mBoeKuhL+Xss%4v%s$rPARmm0$dNEt97+I@e#*44Dz`wt5tbI1} z*f(3^QqtZj2ktJki#bCO?Y9-jq0JNPVy{L_2azP`L&PlsLOzIVEjr7=2YvbQhopl|26$V!n6 z+~o`)7P6>(Z=Xe+`Un62hmGVzG9VeaI~h`BK9fzHmRv7-br37T}W5JCQ~S= 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 +222,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 +241,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"): @@ -347,6 +350,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 +426,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. @@ -651,6 +656,23 @@ elif config.sign: # ------------------------------------------------ if config.dmg is not None: + + #Patch in check_output for Python 2.6 + if "check_output" not in dir( subprocess ): + def f(*popenargs, **kwargs): + if 'stdout' in kwargs: + raise ValueError('stdout argument not allowed, it will be overridden.') + process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs) + output, unused_err = process.communicate() + retcode = process.poll() + if retcode: + cmd = kwargs.get("args") + if cmd is None: + cmd = popenargs[0] + raise CalledProcessError(retcode, cmd) + return output + subprocess.check_output = f + def runHDIUtil(verb, image_basename, **kwargs): hdiutil_args = ["hdiutil", verb, image_basename + ".dmg"] if kwargs.has_key("capture_stdout"): diff --git a/contrib/macdeploy/notes.txt b/contrib/macdeploy/notes.txt deleted file mode 100644 index 3d749014..00000000 --- a/contrib/macdeploy/notes.txt +++ /dev/null @@ -1,26 +0,0 @@ - -macdeployqtplus works best on OS X Lion, for Snow Leopard you'd need to install -Python 2.7 and make it your default Python installation. - -You will need the appscript package for the fancy disk image creation to work. -Install it by invoking "sudo easy_install appscript". - -This script should be invoked in the target directory like this: -$source_dir/contrib/macdeploy/macdeployqtplus Bitcoin-Qt.app -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy $source_dir/contrib/macdeploy/fancy.plist -verbose 2 - -During the process, the disk image window will pop up briefly where the fancy -settings are applied. This is normal, please do not interfere. - -You can also set up Qt Creator for invoking the script. For this, go to the -"Projects" tab on the left side, switch to "Run Settings" above and add a -deploy configuration. Next add a deploy step choosing "Custom Process Step". -Fill in the following. - -Enable custom process step: [x] -Command: %{sourceDir}/contrib/macdeploy/macdeployqtplus -Working directory: %{buildDir} -Command arguments: Bitcoin-Qt.app -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy %{sourceDir}/contrib/macdeploy/fancy.plist -verbose 2 - -After that you can start the deployment process through the menu with -Build -> Deploy Project "bitcoin-qt" - diff --git a/contrib/pyminer/README b/contrib/pyminer/README deleted file mode 100644 index d1596575..00000000 --- a/contrib/pyminer/README +++ /dev/null @@ -1,6 +0,0 @@ - -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. - diff --git a/contrib/pyminer/README.md b/contrib/pyminer/README.md new file mode 100644 index 00000000..3b20f2fd --- /dev/null +++ b/contrib/pyminer/README.md @@ -0,0 +1,8 @@ +### 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. + +### Other Resources ### + +- [BitcoinTalk Thread](https://bitcointalk.org/index.php?topic=3546.0) +- [Jgarzik Repo](https://github.com/jgarzik/pyminer) \ No newline at end of file diff --git a/contrib/qos/README b/contrib/qos/README.md similarity index 97% rename from contrib/qos/README rename to contrib/qos/README.md index f4196857..5e0a975f 100644 --- a/contrib/qos/README +++ b/contrib/qos/README.md @@ -1,3 +1,5 @@ +### Qos ### + This is a Linux bash script that will set up tc to limit the outgoing bandwidth for connections to the Bitcoin network. It limits outbound TCP traffic with a source or destination port of 8333, but not if the destination IP is within a LAN (defined as 192.168.x.x). 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. diff --git a/contrib/seeds/README b/contrib/seeds/README.md similarity index 74% rename from contrib/seeds/README rename to contrib/seeds/README.md index 97e3e1ec..f9a0c277 100644 --- a/contrib/seeds/README +++ b/contrib/seeds/README.md @@ -1,9 +1,11 @@ +### Seeds ### + Utility to generate the pnSeed[] array that is compiled into the client -(see src/net.cpp). +(see [src/net.cpp](/src/net.cpp)). The 600 seeds compiled into the 0.8 release were created from sipa's DNS seed data, like this: -curl -s http://bitcoin.sipa.be/seeds.txt | head -1000 | makeseeds.py + curl -s http://bitcoin.sipa.be/seeds.txt | head -1000 | makeseeds.py The input to makeseeds.py is assumed to be approximately sorted from most-reliable to least-reliable, with IP:port first on each line (lines that don't match IPv4:port are ignored). diff --git a/contrib/spendfrom/README b/contrib/spendfrom/README deleted file mode 100644 index 8a087a0c..00000000 --- a/contrib/spendfrom/README +++ /dev/null @@ -1,32 +0,0 @@ -Use the raw transactions API to send coins received on a particular -address (or addresses). - -Depends on jsonrpc - -Usage: - -spendfrom.py --from=FROMADDRESS1[,FROMADDRESS2] --to=TOADDRESS --amount=amount \ - --fee=fee --datadir=/path/to/.bitcoin --testnet --dry_run - -With no arguments, outputs a list of amounts associated with addresses. - -With arguments, sends coins received by the FROMADDRESS addresses to the TOADDRESS. - -You may explictly specify how much fee to pay (a fee more than 1% of the amount -will fail, though, to prevent bitcoin-losing accidents). Spendfrom may fail if -it thinks the transaction would never be confirmed (if the amount being sent is -too small, or if the transaction is too many bytes for the fee). - -If a change output needs to be created, the change will be sent to the last -FROMADDRESS (if you specify just one FROMADDRESS, change will go back to it). - -If --datadir is not specified, the default datadir is used. - -The --dry_run option will just create and sign the the transaction and print -the transaction data (as hexadecimal), instead of broadcasting it. - -If the transaction is created and broadcast successfully, a transaction id -is printed. - -If this was a tool for end-users and not programmers, it would have much friendlier -error-handling. diff --git a/contrib/spendfrom/README.md b/contrib/spendfrom/README.md new file mode 100644 index 00000000..c0a9c9cc --- /dev/null +++ b/contrib/spendfrom/README.md @@ -0,0 +1,35 @@ +### SpendFrom ### + +Use the raw transactions API to send coins received on a particular +address (or addresses). + +### Usage: ### +Depends on [jsonrpc](http://json-rpc.org/). + + spendfrom.py --from=FROMADDRESS1[,FROMADDRESS2] --to=TOADDRESS --amount=amount \ + --fee=fee --datadir=/path/to/.bitcoin --testnet --dry_run + +With no arguments, outputs a list of amounts associated with addresses. + +With arguments, sends coins received by the `FROMADDRESS` addresses to the `TOADDRESS`. + +### Notes ### + +- You may explicitly specify how much fee to pay (a fee more than 1% of the amount +will fail, though, to prevent bitcoin-losing accidents). Spendfrom may fail if +it thinks the transaction would never be confirmed (if the amount being sent is +too small, or if the transaction is too many bytes for the fee). + +- If a change output needs to be created, the change will be sent to the last +`FROMADDRESS` (if you specify just one `FROMADDRESS`, change will go back to it). + +- If `--datadir` is not specified, the default datadir is used. + +- The `--dry_run` option will just create and sign the transaction and print +the transaction data (as hexadecimal), instead of broadcasting it. + +- If the transaction is created and broadcast successfully, a transaction id +is printed. + +- If this was a tool for end-users and not programmers, it would have much friendlier +error-handling. diff --git a/contrib/test-patches/README b/contrib/test-patches/README.md similarity index 58% rename from contrib/test-patches/README rename to contrib/test-patches/README.md index ed754cea..def40b0d 100644 --- a/contrib/test-patches/README +++ b/contrib/test-patches/README.md @@ -1,4 +1,7 @@ +### Test Patches ### + These patches are applied when the automated pull-tester tests each pull and when master is tested using jenkins. You can find more information about the tests run at -http://jenkins.bluematt.me/pull-tester/files/ +[http://jenkins.bluematt.me/pull-tester/files/ +](http://jenkins.bluematt.me/pull-tester/files/) \ No newline at end of file diff --git a/contrib/testgen/README b/contrib/testgen/README deleted file mode 100644 index 02d6c4cd..00000000 --- a/contrib/testgen/README +++ /dev/null @@ -1 +0,0 @@ -Utilities to generate test vectors for the data-driven Bitcoin tests diff --git a/contrib/testgen/README.md b/contrib/testgen/README.md new file mode 100644 index 00000000..83624f44 --- /dev/null +++ b/contrib/testgen/README.md @@ -0,0 +1,8 @@ +### TestGen ### + +Utilities to generate test vectors for the data-driven Bitcoin tests. + +Usage: + + gen_base58_test_vectors.py valid 50 > ../../src/test/data/base58_keys_valid.json + gen_base58_test_vectors.py invalid 50 > ../../src/test/data/base58_keys_invalid.json \ No newline at end of file diff --git a/contrib/verifysfbinaries/README.md b/contrib/verifysfbinaries/README.md new file mode 100644 index 00000000..f646d1ef --- /dev/null +++ b/contrib/verifysfbinaries/README.md @@ -0,0 +1,6 @@ +### Verify SF Binaries ### +This script attempts to download the signature file `SHA256SUMS.asc` from SourceForge. + +It first checks if the signature passes, and then downloads the files specified in the file, and checks if the hashes of these files match those that are specified in the signature file. + +The script returns 0 if everything passes the checks. It returns 1 if either the signature check or the hash check doesn't pass. If an error occurs the return value is 2. \ No newline at end of file diff --git a/contrib/verifysfbinaries/verify.sh b/contrib/verifysfbinaries/verify.sh index 768be86b..e9229566 100755 --- a/contrib/verifysfbinaries/verify.sh +++ b/contrib/verifysfbinaries/verify.sh @@ -18,7 +18,7 @@ WORKINGDIR="/tmp/bitcoin" TMPFILE="hashes.tmp" #this URL is used if a version number is not specified as an argument to the script -SIGNATUREFILE="http://downloads.sourceforge.net/project/bitcoin/Bitcoin/bitcoin-0.8.2/SHA256SUMS.asc" +SIGNATUREFILE="http://downloads.sourceforge.net/project/bitcoin/Bitcoin/bitcoin-0.9.0rc1/SHA256SUMS.asc" SIGNATUREFILENAME="SHA256SUMS.asc" RCSUBDIR="test/" diff --git a/contrib/wallettools/walletchangepass.py b/contrib/wallettools/walletchangepass.py deleted file mode 100644 index 30f3f5b2..00000000 --- a/contrib/wallettools/walletchangepass.py +++ /dev/null @@ -1,5 +0,0 @@ -from jsonrpc import ServiceProxy -access = ServiceProxy("http://127.0.0.1:8332") -pwd = raw_input("Enter old wallet passphrase: ") -pwd2 = raw_input("Enter new wallet passphrase: ") -access.walletpassphrasechange(pwd, pwd2) \ No newline at end of file diff --git a/contrib/wallettools/walletunlock.py b/contrib/wallettools/walletunlock.py deleted file mode 100644 index f847c6fe..00000000 --- a/contrib/wallettools/walletunlock.py +++ /dev/null @@ -1,4 +0,0 @@ -from jsonrpc import ServiceProxy -access = ServiceProxy("http://127.0.0.1:8332") -pwd = raw_input("Enter wallet passphrase: ") -access.walletpassphrase(pwd, 60) \ No newline at end of file diff --git a/doc/Doxyfile b/doc/Doxyfile index c32d0f89..ada96ef8 100644 --- a/doc/Doxyfile +++ b/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.5.0 +PROJECT_NUMBER = 0.9.2 # 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. diff --git a/doc/README.md b/doc/README.md index 1238033f..b4e37e22 100644 --- a/doc/README.md +++ b/doc/README.md @@ -1,24 +1,16 @@ -Bitcoin 0.8.2 BETA -==================== +Bitcoin 0.9.2 BETA +===================== -Copyright (c) 2009-2013 Bitcoin Developers - -Distributed under the [MIT/X11 software license](http://www.opensource.org/licenses/mit-license.php). -This product includes software developed by the OpenSSL Project for use in the [OpenSSL Toolkit](http://www.openssl.org/). This product includes -cryptographic software written by Eric Young ([eay@cryptsoft.com](mailto:eay@cryptsoft.com)), and UPnP software written by Thomas Bernard. - - -Intro ---------------------- -Bitcoin is a free open source peer-to-peer electronic cash system that is -completely decentralized, without the need for a central server or trusted -parties. Users hold the crypto keys to their own money and transact directly -with each other, with the help of a P2P network to check for double-spending. +Copyright (c) 2009-2014 Bitcoin Developers Setup --------------------- -[Bitcoin-Qt](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; 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. +[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 +--------------------- +The following are some helpful notes on how to run Bitcoin on your native platform. ### Unix @@ -28,33 +20,38 @@ You need the Qt4 run-time libraries to run Bitcoin-Qt. On Debian or Ubuntu: Unpack the files into a directory and run: -- bin/32/bitcoin-qt (GUI, 32-bit) -- bin/32/bitcoind (headless, 32-bit) -- bin/64/bitcoin-qt (GUI, 64-bit) -- bin/64/bitcoind (headless, 64-bit) +- bin/32/bitcoin-qt (GUI, 32-bit) or bin/32/bitcoind (headless, 32-bit) +- bin/64/bitcoin-qt (GUI, 64-bit) or bin/64/bitcoind (headless, 64-bit) ### Windows -Unpack the files into a directory and run bitcoin-qt.exe. +Unpack the files into a directory, and then run bitcoin-qt.exe. + +### OSX + +Drag Bitcoin-Qt to your applications folder, and then run Bitcoin-Qt. ### Need Help? * See the documentation at the [Bitcoin Wiki](https://en.bitcoin.it/wiki/Main_Page) for help and more information. * Ask for help on [#bitcoin](http://webchat.freenode.net?channels=bitcoin) on Freenode. If you don't have an IRC client use [webchat here](http://webchat.freenode.net?channels=bitcoin). -* Ask for help on the [BitcoinTalk](https://bitcointalk.org/) forums. +* Ask for help on the [BitcoinTalk](https://bitcointalk.org/) forums, in the [Technical Support board](https://bitcointalk.org/index.php?board=4.0). Building --------------------- -- [Bitcoin-Qt Readme](readme-qt.md) +The following are developer notes on how to build Bitcoin on your native platform. They are not complete guides, but include notes on the necessary libraries, compile flags, etc. + - [OSX Build Notes](build-osx.md) - [Unix Build Notes](build-unix.md) - [Windows Build Notes](build-msw.md) Development --------------------- +The Bitcoin repo's [root README](https://github.com/bitcoin/bitcoin/blob/master/README.md) contains relevant information on the development process and automated testing. + - [Coding Guidelines](coding.md) - [Multiwallet Qt Development](multiwallet-qt.md) - [Release Notes](release-notes.md) @@ -63,8 +60,17 @@ Development - [Translation Process](translation_process.md) - [Unit Tests](unit-tests.md) -Other Pages ---------------------- +### Resources +* Discuss on the [BitcoinTalk](https://bitcointalk.org/) forums, in the [Development & Technical Discussion board](https://bitcointalk.org/index.php?board=6.0). +* Discuss on [#bitcoin-dev](http://webchat.freenode.net/?channels=bitcoin) on Freenode. If you don't have an IRC client use [webchat here](http://webchat.freenode.net/?channels=bitcoin-dev). + +### Miscellaneous - [Assets Attribution](assets-attribution.md) - [Files](files.md) -- [Tor Support](tor.md) \ No newline at end of file +- [Tor Support](tor.md) + +License +--------------------- +Distributed under the [MIT/X11 software license](http://www.opensource.org/licenses/mit-license.php). +This product includes software developed by the OpenSSL Project for use in the [OpenSSL Toolkit](http://www.openssl.org/). This product includes +cryptographic software written by Eric Young ([eay@cryptsoft.com](mailto:eay@cryptsoft.com)), and UPnP software written by Thomas Bernard. diff --git a/doc/README_osx.txt b/doc/README_osx.txt new file mode 100644 index 00000000..2be56c15 --- /dev/null +++ b/doc/README_osx.txt @@ -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. diff --git a/doc/README_windows.txt b/doc/README_windows.txt index b26fab3b..28b2772d 100644 --- a/doc/README_windows.txt +++ b/doc/README_windows.txt @@ -1,6 +1,7 @@ -Bitcoin 0.8.2 BETA +Bitcoin 0.9.2 BETA + +Copyright (c) 2009-2014 Bitcoin Core Developers -Copyright (c) 2009-2013 Bitcoin Developers Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in @@ -20,7 +21,7 @@ Setup ----- Unpack the files into a directory and run bitcoin-qt.exe. -Bitcoin-Qt is the original Bitcoin client and it builds the backbone of the network. +Bitcoin Core is the original Bitcoin client and it builds the backbone of the network. However, it downloads and stores the entire history of Bitcoin transactions; 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. diff --git a/doc/Tor.txt b/doc/Tor.txt deleted file mode 100644 index 386e3b54..00000000 --- a/doc/Tor.txt +++ /dev/null @@ -1,92 +0,0 @@ -TOR SUPPORT IN BITCOIN -====================== - -It is possible to run Bitcoin as a Tor hidden service, and connect to such services. - -The following directions assume you have a Tor proxy running on port 9050. Many distributions -default to having a SOCKS proxy listening on port 9050, but others may not. -In particular, the Tor Browser Bundle defaults to listening on a random port. See -https://www.torproject.org/docs/faq.html.en#TBBSocksPort for how to properly -configure Tor. - - -1. Run bitcoin behind a Tor proxy ---------------------------------- - -The first step is running Bitcoin behind a Tor proxy. This will already make all -outgoing connections be anonimized, but more is possible. - --socks=5 SOCKS5 supports connecting-to-hostname, which can be used instead - of doing a (leaking) local DNS lookup. SOCKS5 is the default, - but SOCKS4 does not support this. (SOCKS4a does, but isn't - implemented). - --proxy=ip:port Set the proxy server. If SOCKS5 is selected (default), this proxy - server will be used to try to reach .onion addresses as well. - --tor=ip:port Set the proxy server to use for tor hidden services. You do not - need to set this if it's the same as -proxy. You can use -notor - to explicitly disable access to hidden service. - --listen When using -proxy, listening is disabled by default. If you want - to run a hidden service (see next section), you'll need to enable - it explicitly. - --connect=X When behind a Tor proxy, you can specify .onion addresses instead --addnode=X of IP addresses or hostnames in these parameters. It requires --seednode=X SOCKS5. In Tor mode, such addresses can also be exchanged with - other P2P nodes. - -In a typical situation, this suffices to run behind a Tor proxy: - - ./bitcoin -proxy=127.0.0.1:9050 - - -2. Run a bitcoin hidden server ------------------------------- - -If you configure your Tor system accordingly, it is possible to make your node also -reachable from the Tor network. Add these lines to your /etc/tor/torrc (or equivalent -config file): - - HiddenServiceDir /var/lib/tor/bitcoin-service/ - HiddenServicePort 8333 127.0.0.1:8333 - -The directory can be different of course, but (both) port numbers should be equal to -your bitcoind's P2P listen port (8333 by default). - --externalip=X You can tell bitcoin about its publicly reachable address using - this option, and this can be a .onion address. Given the above - configuration, you can find your onion address in - /var/lib/tor/bitcoin-service/hostname. Onion addresses are given - preference for your node to advertize itself with, for connections - coming from unroutable addresses (such as 127.0.0.1, where the - Tor proxy typically runs). - --listen You'll need to enable listening for incoming connections, as this - is off by default behind a proxy. - --discover When -externalip is specified, no attempt is made to discover local - IPv4 or IPv6 addresses. If you want to run a dual stack, reachable - from both Tor and IPv4 (or IPv6), you'll need to either pass your - other addresses using -externalip, or explicitly enable -discover. - Note that both addresses of a dual-stack system may be easily - linkable using traffic analysis. - -In a typical situation, where you're only reachable via Tor, this should suffice: - - ./bitcoind -proxy=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -listen - -(obviously, replace the Onion address with your own). If you don't care too much -about hiding your node, and want to be reachable on IPv4 as well, additionally -specify: - - ./bitcoind ... -discover - -and open port 8333 on your firewall (or use -upnp). - -If you only want to use Tor to reach onion addresses, but not use it as a proxy -for normal IPv4/IPv6 communication, use: - - ./bitcoin -tor=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -discover - diff --git a/doc/assets-attribution.md b/doc/assets-attribution.md index e85e7452..61b457a2 100644 --- a/doc/assets-attribution.md +++ b/doc/assets-attribution.md @@ -4,29 +4,29 @@ The following is a list of assets used in the bitcoin source and their proper at ----------------------- #### Info * License: MIT + ### Assets Used + src/qt/res/icons/clock*.png, src/qt/res/icons/tx*.png, + src/qt/res/src/clock_green.svg, src/qt/res/src/clock1.svg, + src/qt/res/src/clock2.svg, src/qt/res/src/clock3.svg, + src/qt/res/src/clock4.svg, src/qt/res/src/clock5.svg, + src/qt/res/src/inout.svg, src/qt/res/src/questionmark.svg - src/qt/res/icons/clock*.png, src/qt/res/icons/tx*.png, - src/qt/res/src/clock_green.svg, src/qt/res/src/clock1.svg, - src/qt/res/src/clock2.svg, src/qt/res/src/clock3.svg, - src/qt/res/src/clock4.svg, src/qt/res/src/clock5.svg, - src/qt/res/src/inout.svg, src/qt/res/src/questionmark.svg - -[David Vignoni](www.icon-king.com) +[David Vignoni](http://www.icon-king.com) ----------------------- ### Info * Icon Pack: NUVOLA ICON THEME for KDE 3.x * Designer: David Vignoni (david@icon-king.com) * License: LGPL -* Site: [http://www.icon-king.com/projects/nuvola/](http://www.icon-king.com/projects/nuvola/) +* Site: [http://www.icon-king.com/projects/nuvola](http://www.icon-king.com/projects/nuvola) ### Assets Used - src/qt/res/icons/address-book.png, src/qt/res/icons/export.png, - src/qt/res/icons/history.png, src/qt/res/icons/key.png, - src/qt/res/icons/lock_*.png, src/qt/res/icons/overview.png, - src/qt/res/icons/receive.png, src/qt/res/icons/send.png, - src/qt/res/icons/synced.png, src/qt/res/icons/filesave.png + src/qt/res/icons/address-book.png, src/qt/res/icons/export.png, + src/qt/res/icons/history.png, src/qt/res/icons/key.png, + src/qt/res/icons/lock_*.png, src/qt/res/icons/overview.png, + src/qt/res/icons/receive.png, src/qt/res/icons/send.png, + src/qt/res/icons/synced.png, src/qt/res/icons/filesave.png schollidesign ----------------------- @@ -38,17 +38,16 @@ schollidesign * Site: [http://findicons.com/icon/93743/blocks_gnome_netstatus_0](http://findicons.com/icon/93743/blocks_gnome_netstatus_0) ### Assets Used - src/qt/res/icons/connect*.png + src/qt/res/icons/connect*.png md2k7 ----------------------- ### Info * Designer: md2k7 -* Site: https://bitcointalk.org/index.php?topic=15276.0 -* License: You are free to do with these icons as you wish, including selling, - copying, modifying etc. +* License: You are free to do with these icons as you wish, including selling, copying, modifying etc. * License: MIT +* Site: [https://bitcointalk.org/index.php?topic=15276.0](https://bitcointalk.org/index.php?topic=15276.0) ### Assets Used src/qt/res/icons/transaction*.png @@ -57,15 +56,15 @@ md2k7 ----------------------- ### Info -* Designer: [http://www.everaldo.com](http://www.everaldo.com) * Icon Pack: Crystal SVG +* Designer: [http://www.everaldo.com](http://www.everaldo.com) * License: LGPL ### Assets Used src/qt/res/icons/configure.png, src/qt/res/icons/quit.png, - src/qt/res/icons/editcopy.png, src/qt/res/icons/editpaste.png, - src/qt/res/icons/add.png, src/qt/res/icons/edit.png, - src/qt/res/icons/remove.png (edited) + src/qt/res/icons/editcopy.png, src/qt/res/icons/editpaste.png, + src/qt/res/icons/add.png, src/qt/res/icons/edit.png, + src/qt/res/icons/remove.png (edited) Everaldo (Everaldo Coelho) ----------------------- @@ -75,16 +74,17 @@ Everaldo (Everaldo Coelho) * Designer: Everaldo (Everaldo Coelho) * License: GNU/GPL * Site: [http://findicons.com/icon/17102/reload?id=17102](http://findicons.com/icon/17102/reload?id=17102) -### Assets Used - scripts/img/reload.xcf (modified), src/qt/res/movies/update_spinner.mng -[Vignoni David](http://www.oxygen-icons.org/) +### Assets Used + scripts/img/reload.xcf (modified), src/qt/res/movies/*.png + +[Vignoni David](http://techbase.kde.org/Projects/Oxygen) ----------------------- ### Info * Designer: Vignoni David -* Site: http://www.oxygen-icons.org/ * 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://techbase.kde.org/Projects/Oxygen](http://techbase.kde.org/Projects/Oxygen) ### Assets Used src/qt/res/icons/debugwindow.png @@ -101,4 +101,4 @@ Jonas Schnelli src/qt/res/src/bitcoin.ico, src/qt/res/src/bitcoin.png, src/qt/res/src/bitcoin_testnet.png, docs/bitcoin_logo_doxygen.png, src/qt/res/icons/toolbar.png, src/qt/res/icons/toolbar_testnet.png, - src/qt/res/images/splash.png, src/qt/res/images/splash_testnet.png \ No newline at end of file + src/qt/res/images/splash.png, src/qt/res/images/splash_testnet.png diff --git a/doc/assets-attribution.txt b/doc/assets-attribution.txt deleted file mode 100644 index 2069c5d6..00000000 --- a/doc/assets-attribution.txt +++ /dev/null @@ -1,58 +0,0 @@ -Icon: src/qt/res/icons/clock*.png, src/qt/res/icons/tx*.png, - src/qt/res/src/clock_green.svg, src/qt/res/src/clock1.svg, - src/qt/res/src/clock2.svg, src/qt/res/src/clock3.svg, - src/qt/res/src/clock4.svg, src/qt/res/src/clock5.svg, - src/qt/res/src/inout.svg, src/qt/res/src/questionmark.svg -Designer: Wladimir van der Laan -License: MIT - -Icon: src/qt/res/icons/address-book.png, src/qt/res/icons/export.png, - src/qt/res/icons/history.png, src/qt/res/icons/key.png, - src/qt/res/icons/lock_*.png, src/qt/res/icons/overview.png, - src/qt/res/icons/receive.png, src/qt/res/icons/send.png, - src/qt/res/icons/synced.png, src/qt/res/icons/filesave.png -Icon Pack: NUVOLA ICON THEME for KDE 3.x -Designer: David Vignoni (david@icon-king.com) - ICON KING - www.icon-king.com -License: LGPL -Site: http://www.icon-king.com/projects/nuvola/ - -Icon: src/qt/res/icons/connect*.png -Icon Pack: Human-O2 -Designer: schollidesign -License: GNU/GPL -Site: http://findicons.com/icon/93743/blocks_gnome_netstatus_0 - -Icon: src/qt/res/icons/transaction*.png -Designer: md2k7 -Site: https://bitcointalk.org/index.php?topic=15276.0 -License: You are free to do with these icons as you wish, including selling, - copying, modifying etc. -License: MIT - -Icon: src/qt/res/icons/configure.png, src/qt/res/icons/quit.png, - src/qt/res/icons/editcopy.png, src/qt/res/icons/editpaste.png, - src/qt/res/icons/add.png, src/qt/res/icons/edit.png, - src/qt/res/icons/remove.png (edited) -Designer: http://www.everaldo.com -Icon Pack: Crystal SVG -License: LGPL - -Icon: scripts/img/reload.xcf (modified), src/qt/res/movies/update_spinner.mng -Icon Pack: Kids -Designer: Everaldo (Everaldo Coelho) -License: GNU/GPL -Site: http://findicons.com/icon/17102/reload?id=17102 - -Icon: src/qt/res/icons/debugwindow.png -Designer: Vignoni David -Site: http://www.oxygen-icons.org/ -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. - -Icon: src/qt/res/icons/bitcoin.icns, src/qt/res/src/bitcoin.svg, - src/qt/res/src/bitcoin.ico, src/qt/res/src/bitcoin.png, - src/qt/res/src/bitcoin_testnet.png, docs/bitcoin_logo_doxygen.png, - src/qt/res/icons/toolbar.png, src/qt/res/icons/toolbar_testnet.png, - src/qt/res/images/splash.png, src/qt/res/images/splash_testnet.png -Designer: Jonas Schnelli (based on the original bitcoin logo from Bitboy) -License: MIT diff --git a/doc/bitcoin_logo_doxygen.png b/doc/bitcoin_logo_doxygen.png index 2d62a8dc8ab03ce1cf65addc0d2cb03eef3ece15..258be86edee2372033763742c513309761248f1b 100644 GIT binary patch delta 3269 zcmV;$3_A0bCCC|&BYzB!Nklsm25DbYqP_Q}1oc)Hh*e?`zr5%h~TY9C^j~ zw~e#3V{sfmK2F;7iyTm+JB#?ObM+IdmL%tT(hc>&l{yNp&`>aw#R`O$f-Ch>;Jxzq zI%3D2Ikm*Nrhjan{(gKO|J*JYQ>plUFBu=VrWp?k0Ga(chz=0#2m=76jj*K|J}ZCO z_(ulNn?*M$`CY2jvv8L7E(Ub~3LrR8`=PRo6wFRWa8MBvVOwrIT>59-eGH)2ccEfe z>}KU_$*HgslmbA90#I3ix}JjX3}EXo7^p!B&y_s+x_>c~=VaG!&4v?(#3!0l4f{p= zbyO(>R00eK8%V)b0|5!xh-3IBG8GM<&c5qvLucC*VBHoy`18S@bbW1y)ym=)1k^i# zx`9CrqR_i3EC%C!>+119@$shXtm(h+I}*jFvjF23PVO_PF+=BsO**0$fTY|60F+`t zq4$PRD1YZhtTEJ6+LW~uU+Rp$!=c~>=h$#vuRh*%y%}H~Ef!ck>n4(`aJpzisFgF6 zWVoSFPmz1E0R5Rd=hP7i8l2ySRK?!R>xW>8_S;V^7O)`lroLh~+3j|!{i=c**WWAH z(Z6mSHRp|@(5k_B51TSTNxhhWj^&2Wd6BuKBY%0;v+`9#s%kI*Va-Uw3Kd{Aam^V< zc5^+ow6u`LVx}N~a(_uRUmPTJ?N?O4KaVLmOt7Y$d&Zc6IIpi48?(_S+M9oIS&#G` z6PhS?3gPY>)iPg`FuX%=hpq%4D1F5cq4L8wR*6pJKa!)^ikX7 zyX|~VGab7UJFmoE1>3<&ut~##T;YVzo_{?{p-_nYem@6j!p{T{_r6pLtRF{?qniXJ zJsuBviyuMG!KzS@t2aQJT4Dv%`}le76KD@=RJ+2tTwe*em{8eruR>YJ&YQ{>lBseZ zEGWR8KYyP7_XWVFrY7>bofK&D3&0+ior3G`WXBIe1r>8oC@xU%dKKzvF?3f$y??fH zFK+E0`i&8%4@4}efv^yZA)=jfZ(?hTpg?26WOCM4P&gcxzyNyg+&P2-I@lZ_dvyg_ z_oh=|&F$QtLl~f>UhLfCQ%uS1q=`8HSa3a0FVW}8su?0@KxG5QPK#ixM^Y&7W(vJO zN>IVMFAcVnAOPyMR+GbALtd{JzkicJQAJ^4Ykd_tw#-5y;;mtzYW3=t>5EZ0V_7nx zF+*<$m^3OWpkToiq3Oy{BV?#Gw^C^BZEXD&Sw8;&)|B7?|hy2Ae$y!~3b^taB&}=$G z&8u&LYO2)(;O5y$M2xqY@N;F2B{p&v~+xtZYkrqwAFm8 zS*k0LE@fnEqH@8GqH3#$Gq_t|K>;fCU#Jb^C|qz4gS>-m|H?sCl;Dt0wgcG=ZW6U@ znaKbjqHxJ?DO@y(9d|c58mbg%VQ^Aok6Jk)iakw#46Up+xOjKEzE05sW zmqgwSy_xsBh*tu;R%&eJAg-Q}+`I*F^^kYSx%IymZOK+o*bHAY;?8!iF znV#U?7%8vym9!3Dq(O*wz`$v+t% z992COk}!j`ocIJl%KoZ2))TxOpK+bh(I z7^>AP*V~h>Z-0n6EOYfjf_g(0>fxk9Ebr_VlcK+&-?eO>ffgVYlhD>j$zJ{rxm+$u zMS!BJHdG#f3*d$b^)Twix}f!@N6)#-t*QEhQbCDgPg%Vb*pnBSkpif9%Ttm4?aO`C zQv4uV073*Tp27;yc=GIB0%fI2i51qxoQZ0Tp#Uuht$zpV;qM9Rt!hm@R7+h&v})P2 zcByt#47kX~&ceTDEGnBYPdW~+MouaF+x{#}B!YTjH1LwCET)L9ApdT%R~*%MVnB% zu6?r47zv`S+{@_4?2`d?kT(bg7{cdqQDfO$83xV1;9jvWGBrFOy{xb$0?L~Y7l{Ky z-Ux2TVX!|`gIk~+tf?5w09X1<;sjjwM7=8TXMgHl9HdPJPaoZbDIS#%J01ZCMR4-A zn$O8{Y@0BaIrc0j$3NdB`;lVgXGB{7taAtJb0}OnP)dg4H;_cyITHE<{_zMN6y-uOGRe*7j`D$2-dsl(1Il)%3MfGGt{97mW(~nEEH_-I4ni@UJSrbx zg!i#tuqD7Sop?$f7mI{cIQZ>BfXPZl#P&IflVQm=?|ix6)_oNdEOMxphFn|Smx2N= zQxye@rjobpIZPh7y6y~>wm-K+Vn7#z^J8!%8m-f`%E_g&8= zKCD_jeoqDe_7+Y;)ltxeLh+Dyg}AaR+9C@SD3YD zLL~smc_l-&c@O2lg1)m*?bY5!k9VeNPpVfBx6CzU+W#&T5!A5ndQG_5g| zRn4E3pvVY-uFX#aikI~ixdJMoq++2aHa&eE?s|1=_p^eN|47PI1;}#`kbzuQR0^h} z@d{CMvC)-msN28yhpdN=pbPg1b zb);#&cy-d1DT;^vogDCZLe*>iR&khUmqdW<6ez6h@8#m}eiz>hLv`x4WA?QVFcm8z z00AWA)rCQEwJJY)_PXf|;D0hTRk2fTih1tPg2ZPXshZ<}R73}X5YAN1iBDfloX^$j z2DL8cxAuDPo_pQ2+QmtQjTu@L9TlL;-{X5Ob&Hcq*yqf|=kcP^<@@w~%U;9!b-!lI zpRS#Fd|~42>|{6F-qIZLysbUMDxDACw`Ae-rfW_1w=~BX%(lwE_dZ>=bI!Gs#t-~S z9~`evsf!QVgP-gbT!{oJ#P?Tlm`m~hWtD!2A71|fFNpWqn(fMEO+Rc?)&a}-w)6Ge0Z2%?!E!eG$MI_1U^JxXGoxrH<_*$s0saxSB<&>AyiOkG(rJ_gd>nJIP*p;B2?5+Xf-4T^3Mfj zTBEtSt6AX<{;|b8X+k}HeW_|NSU^C4Qh>4&h2{Z6V6oU=97v=hQ$vv+MD}$KR3y`- zely^SbXOXQ>Pw=KA-@=%T_}FOnoy>ve}~{hH8uS=F`52PqL?Xz1v*n<2qieo$LCjE ze`(Wwt%(2Q#(&hN+XPXGFe@UR;zx63*27)uH<+2b|8D4)BGVf+a~g?R6lZTd#nsP; zNcJV*HKEKeN^T@KH8@I@nMI5W9D{_TRS^iR3JRkShwJL%kQfx&0P~yUKVdN_oPjRJ zKo_g3fN7?f!$s{#UG;9*yYiOQG3N zDBiz2z`~Q_OQCyGs1QACG(^tS*_A~8B{=n~K!3-JC(=m%L^lH(#Ru|NhSf;_!2^^o zTp5AYgDYeIugL$#y8VB$24gw{`_&%*t6hGJm_7Jw`|svw9{xQ(L^5+`Xw2b=&XF%= zVF9-j@VYjEpOzegQjWeqaq#^MeQ9Z_iDwDgSlvo%hbm=98bSwg)-Gw~r7|6MUWI8! z2NuRL1~DFo1*E!!SE2V@5+7(FKn}vXVC)}U)sYIXd%r2v*3uc9YwKf+uEFjB{{EIG zR>X5n^I7xXhF3zyS9Zdyj!!Hu|D?OVvB(!Azi5z6LghS}cOU9|kR7tA&91b&WRfC8 zCYr#ZollP%_u=hz{E+wYy?+!o(aK9F*c#yhgB;-VId&mVvD!yVXCXJ_M( zm^U&smy9?Wji?$jeX7S1Ukwd?JYVWRKGSkJOz3B#>^a5&Lt6Fa*}-PcF2zUN4-){B zZPj}u8pFLW1Cb@QFKK8Z*|LW14&KdhrD#)y+7bZej%Zb{xQ&wChxyI*G@t9GeH?MG z`*u?9&>owF)4R^S%w`{G5UAd1sh0Qt`Tcm4_J!uk4dr%|97{>+5+sUyJA#5A;u*FL zHHs3bj|24~wLx*Ht!EN(Gppm?ac!T&dnloKH_v(Od4&&l$yPqf(Je%Bbn8W zc;arJ*En|xMtAr!&_5t7HaC*(+qsv(GA##x%mCwp;$j);s!g;(1=1JSbHk>n`&D7;&?qpkbK6|3CuD_Qk>#PLt2j|w|KlNf&u5VqaXoOvpKHzwkH_JaF>J0b3mPfshZ%ojx26GVZC z^;{CI==4W^TBq>pkA29lyp9FV?iTle=8QO3zdifK>DzZKg|d#MrEmWDoB)JXnQ3ee zjBxg-ZlvC-;ymC_Sa|UMwpT(Fk<&T63mcy~}io){NZe#L0F3jhnzwMCph zApuP1jb5l^r`Q5-*}MnXV64%?PV_wrOZ&^|^6zECRSokMnV|>Wv(EjsPT6}$QK`1qHmH4L`Ao+BTCb}&A-dQR;ItIOTAw}kTbh(HiyzNZ#H6 z7rKItw^>StqiUmpMn#C+UVs8pmDJU<4aIqFyol0p$PreT7<(LzM-x|yZ z-YH2K5*=%~KiS*BFBU#_bS$XN((!WT^taxu*yaLnKj%GnJf?cm^^ngvyF))7l%mp= z`jksYWk1;Bv}i&IX7?{Q(IVFB6VBTxj#vY zk%dgWm?jfmn^u((X|D`8&Zo-#d9rCj>p-wzi(hgwpDViLsA{tE)wnC>d9%7{7a>js z3iH726Q@XVu@+$5CRg>DkyjD^P1f<69Dy9WIfg&bkM>o4M@ZQXV43=N2|UVA;@e9U zoGLORgQQ-5ye^CxOA1+y7S>`Ls0XMh9=UhDMZa;hpkz@M4;3&vnI6|dK<*eOaxylr z9?IG8zcRS5K%rAvi@|V>OpouR=4UXfBA1P&54SGcfoXqmbtK5*o_VXSO3g+;Esf7E>7E7}#p4Ug7HcSidLz>FcmlhViWVyuT8JT98934plVu@>8H5CSx0%5J0 z7|SC?8NBXtB0N#?VF`Ec$v&1ilU%_;nr2A8yAsJE`r3`4bH==xJ%xu~&lfcfs zPTXuNpdB$@^ZoJF$*KEC_6%Gyjh#{T=UPYXkx9s{ zt6Oh3U0$7yoyB9m=|1FoG+qE*x0o-&@Z5ccBS>@?L+>DDjg_0Nb)Ngw$Iszj7G_4{ zEsw;L^Oq@ZAGlRlR(lF;&Eb2DO_<0JA;MAz!)QP<>S_^p(9fYA@l(LNwj5E`4b}T6 z{qq1-%Im8QyYT#42kwl=-PPcTz8x76qvwGNfnp~KtodI4 zmJ8D9QwJYz=5UfPi7a`>>Spf`PlR>*<%;cM_$=a4vI8Kwt$4X;DCw3>%UFEsO z9BV*#un{MCMD!Nkgw}Kx+g``3Xg!njXGYK4=O5X9&P4f_kktCEcsjpp+UkEk2IRIG z{RtPAzO5VZ`bg0OR;7>JF8wy5`*$Z^v?+GEjU;G;Kcs##$9p8ow`*~Vg(r)JU!$$V z?Q7m|&j3rlVN(yByfYdjS%-Zd1RGvtpRsKxIk9*a0qHl0;BmVnd#xoQp2g(L`c{6^ zY~oc7EFCv$>{HVp3;UFGM+x>7rx6ggV;a(g-7yoaAGk(ax!g?*4wvRgUu zmYefL?OEKFWjD|p(25zgV|MCF1upoL&WaBZJ*a;?)%z6&6l*yfGrZW(Dg?f!yYDFy zI67YNAO}#SE?v+NFz0A`4Zpu^Xy_mJo_xA=6)TB27Vo+8?kHVbnD^QGiGY|74*Y}b zWszrcbV|KhG2pch3Ri+OR%kM$|Y1CZRSt_3K?;m#!KMp<7`G=6WSi<;l@B z(|~7j-{hhWZFUTX2;03BQKYB)2QPY*%_`+gDe;2G?<}-@OP>IfJJE73^D}WfK{o-8 zm@h`avZE(70E@gTVbezo6|UhVsVjk87NUl}gRWZIRAlk2jl9VH(Jy(y=m5T}^B#P~ z&pbNk6qTYxtOK*|KG8$zk#F=r+Ac&*RFMm8pT5{tviK|&NowZPkg+|=l4^H$u4F;N zoYh&uZ$Zwe@m!?(D(rsY(~$*W%fCnho!?Q2GY;v!dQ&{&`@8ixb&bQLcJLL%S8o?;jk8b`Kd0bJ zwqa9_oLHmzPCM)1`3Q$@^eP8BrlV&w6ffvwuT;Bawt$-jzG5wyQx0O!z0*{&tWTeL zIB`Q+#AoUImzo?<)xGQ+$#qL3pGTK zvf!WG->n`b|5Pl zUHzGhp=S!Wts`$m3P5uqHNNsS5Z-Fm%}!e)Rg*Lj@oHDfXF^5+80Dmf#5JOr;jnyI@7Xy;bndNtbix@Tt{aJ(u*} zyqT17{^#M5wW$YVl+y+Tgbu;&0lR}>)=Oa$)_Xn%EEu+kdiP^{c`}ISoF91srj`d* zMc&xtgZcWjtUUQfF-ZGV`J!^+U3f59ZhuoZ^@qOor{?bQ<*bnJ%DED$FOux_u2zYD zGPqk-`aLR@|E8Qk75&AnjACq3D{|)oYIXHc-F8v_@v!ci(bbz=VX!`cNpsD22@MgAOZ*s#n< z-zrC>_a(jJK>f1YIZ{+_egEOo)<*&pPREw6mmfdh_!j24nv*^g1amL(Q$e@iz;aRL(Ui5G3+W1vpFkNl>tfa&!i;+;+u{2pcJ{-hCe7@( z+Y