mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 03:52:49 +01:00
Merge branch 'v18.1.x'
This commit is contained in:
commit
b6e4815196
@ -16,7 +16,7 @@ task:
|
||||
ccache_cache:
|
||||
folder: "/tmp/ccache_dir"
|
||||
install_script:
|
||||
- pkg install -y autoconf automake boost-libs git gmake libevent libtool openssl pkgconf python3 ccache
|
||||
- pkg install -y autoconf automake boost-libs git gmake libevent libtool pkgconf python3 ccache
|
||||
- ./contrib/install_db4.sh $(pwd)
|
||||
- ccache --max-size=${CCACHE_SIZE}
|
||||
configure_script:
|
||||
@ -44,8 +44,6 @@ task:
|
||||
folder: "/tmp/ccache_dir"
|
||||
depends_built_cache:
|
||||
folder: "/tmp/cirrus-ci-build/depends/built"
|
||||
depends_sdk_cache:
|
||||
folder: "/tmp/cirrus-ci-build/depends/sdk-sources"
|
||||
install_script:
|
||||
- apt-get update
|
||||
- apt-get -y install git bash ccache
|
||||
|
29
.github/semantic.yml
vendored
Normal file
29
.github/semantic.yml
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
# https://github.com/zeke/semantic-pull-requests#configuration
|
||||
|
||||
titleOnly: true
|
||||
|
||||
scopes:
|
||||
- consensus
|
||||
- qt
|
||||
- log
|
||||
- mining
|
||||
- net
|
||||
- rpc/rest/zmq
|
||||
- scripts
|
||||
- utils
|
||||
- wallet
|
||||
|
||||
types:
|
||||
- feat
|
||||
- fix
|
||||
- docs
|
||||
- style
|
||||
- refactor
|
||||
- perf
|
||||
- test
|
||||
- build
|
||||
- ci
|
||||
- chore
|
||||
- revert
|
||||
- trivial
|
||||
- backport
|
10
.gitignore
vendored
10
.gitignore
vendored
@ -40,8 +40,8 @@ config.log
|
||||
config.status
|
||||
configure
|
||||
libtool
|
||||
src/config/dash-config.h
|
||||
src/config/dash-config.h.in
|
||||
src/config/bitcoin-config.h
|
||||
src/config/bitcoin-config.h.in
|
||||
src/config/stamp-h1
|
||||
src/obj
|
||||
share/setup.nsi
|
||||
@ -160,3 +160,9 @@ dist/
|
||||
*.background.tiff
|
||||
|
||||
/guix-build-*
|
||||
|
||||
# cppcheck cache-directory
|
||||
.cppcheck/*
|
||||
|
||||
# flake8 cache location
|
||||
.cache/*
|
||||
|
@ -179,28 +179,20 @@ i686-pc-linux-gnu:
|
||||
variables:
|
||||
HOST: i686-pc-linux-gnu
|
||||
|
||||
x86_64-unknown-linux-gnu-debug:
|
||||
x86_64-pc-linux-gnu-debug:
|
||||
extends: .build-depends-template
|
||||
variables:
|
||||
HOST: x86_64-unknown-linux-gnu
|
||||
HOST: x86_64-pc-linux-gnu
|
||||
DEP_OPTS: "DEBUG=1"
|
||||
|
||||
x86_64-unknown-linux-gnu-nowallet:
|
||||
x86_64-pc-linux-gnu-nowallet:
|
||||
extends:
|
||||
- .build-depends-template
|
||||
- .skip-in-fast-mode-template
|
||||
variables:
|
||||
HOST: x86_64-unknown-linux-gnu
|
||||
HOST: x86_64-pc-linux-gnu
|
||||
DEP_OPTS: "NO_WALLET=1"
|
||||
|
||||
x86_64-unknown-linux-gnu-release:
|
||||
extends:
|
||||
- .build-depends-template
|
||||
- .skip-in-fast-mode-template
|
||||
variables:
|
||||
HOST: x86_64-unknown-linux-gnu
|
||||
DEP_OPTS: "NO_UPNP=1"
|
||||
|
||||
x86_64-apple-darwin19:
|
||||
extends:
|
||||
- .build-depends-template
|
||||
@ -247,21 +239,21 @@ linux32_ubsan-build:
|
||||
linux64-build:
|
||||
extends: .build-template
|
||||
needs:
|
||||
- x86_64-unknown-linux-gnu-debug
|
||||
- x86_64-pc-linux-gnu-debug
|
||||
variables:
|
||||
BUILD_TARGET: linux64
|
||||
|
||||
linux64_cxx20-build:
|
||||
extends: .build-template
|
||||
needs:
|
||||
- x86_64-unknown-linux-gnu-debug
|
||||
- x86_64-pc-linux-gnu-debug
|
||||
variables:
|
||||
BUILD_TARGET: linux64_cxx20
|
||||
|
||||
linux64_fuzz-build:
|
||||
extends: .build-template
|
||||
needs:
|
||||
- x86_64-unknown-linux-gnu-debug
|
||||
- x86_64-pc-linux-gnu-debug
|
||||
variables:
|
||||
BUILD_TARGET: linux64_fuzz
|
||||
|
||||
@ -270,7 +262,7 @@ linux64_tsan-build:
|
||||
- .build-template
|
||||
- .skip-in-fast-mode-template
|
||||
needs:
|
||||
- x86_64-unknown-linux-gnu-debug
|
||||
- x86_64-pc-linux-gnu-debug
|
||||
variables:
|
||||
BUILD_TARGET: linux64_tsan
|
||||
|
||||
@ -279,19 +271,10 @@ linux64_nowallet-build:
|
||||
- .build-template
|
||||
- .skip-in-fast-mode-template
|
||||
needs:
|
||||
- x86_64-unknown-linux-gnu-nowallet
|
||||
- x86_64-pc-linux-gnu-nowallet
|
||||
variables:
|
||||
BUILD_TARGET: linux64_nowallet
|
||||
|
||||
linux64_release-build:
|
||||
extends:
|
||||
- .build-template
|
||||
- .skip-in-fast-mode-template
|
||||
needs:
|
||||
- x86_64-unknown-linux-gnu-release
|
||||
variables:
|
||||
BUILD_TARGET: linux64_release
|
||||
|
||||
mac-build:
|
||||
extends:
|
||||
- .build-template
|
||||
|
69
.travis.yml
69
.travis.yml
@ -6,6 +6,7 @@ dist: xenial
|
||||
|
||||
os: linux
|
||||
language: minimal
|
||||
arch: amd64
|
||||
|
||||
services:
|
||||
- docker
|
||||
@ -13,7 +14,12 @@ services:
|
||||
cache:
|
||||
ccache: true
|
||||
directories:
|
||||
- $TRAVIS_BUILD_DIR/ci/scratch/.ccache
|
||||
- $BASE_BUILD_DIR/ci/scratch/.ccache
|
||||
# macOS
|
||||
- $HOME/Library/Caches/Homebrew
|
||||
- /usr/local/Homebrew
|
||||
before_cache:
|
||||
- if [ "${TRAVIS_OS_NAME}" = "osx" ]; then brew cleanup; fi
|
||||
env:
|
||||
global:
|
||||
# DOCKER_HUB_USER
|
||||
@ -54,6 +60,8 @@ builddocker: &builddocker
|
||||
# no need to run tests again here
|
||||
- if [ "$DOCKER_BUILD" = "true" ]; then $DOCKER_RUN_IN_BUILDER ./ci/dash/build_depends.sh && $DOCKER_RUN_IN_BUILDER ./ci/dash/build_src.sh && BUILD_DIR=build-ci/dashcore-$BUILD_TARGET ./ci/dash/build-docker.sh; fi
|
||||
- CI_RETRY_EXE="travis_retry"
|
||||
- CI_WAIT="while sleep 500; do echo .; done"
|
||||
- CACHE_ERR_MSG="Error! Initial build successful, but not enough time remains to run later build stages and tests. See https://docs.travis-ci.com/user/customizing-the-build#build-timeouts . Please manually re-run this job by using the travis restart button. The next run should not time out because the build cache has been saved."
|
||||
before_install:
|
||||
- set -o errexit; source ./ci/test/00_setup_env.sh
|
||||
- set -o errexit; source ./ci/test/03_before_install.sh
|
||||
@ -151,7 +159,7 @@ install:
|
||||
- export PULL_REQUEST="$TRAVIS_PULL_REQUEST"
|
||||
- export COMMIT_RANGE="$TRAVIS_COMMIT_RANGE"
|
||||
- export JOB_NUMBER="$TRAVIS_JOB_NUMBER"
|
||||
- export HOST_SRC_DIR=$TRAVIS_BUILD_DIR
|
||||
- export HOST_SRC_DIR=$BASE_BUILD_DIR
|
||||
- export HOST_CACHE_DIR=$HOME/cache
|
||||
- export TRAVIS_COMMIT_LOG=`git log --format=fuller -1`
|
||||
- source ./ci/matrix.sh
|
||||
@ -202,32 +210,12 @@ after_success:
|
||||
script:
|
||||
- set -o errexit; source ./ci/extended_lint/06_script.sh
|
||||
|
||||
- stage: extended-lint
|
||||
name: 'lint macOS 10.12 (compat)'
|
||||
os: osx
|
||||
# Use the earliest macOS that can build our lint dependencies:
|
||||
# Xcode 8.3.3, macOS 10.12, JDK 1.8.0_112-b16
|
||||
# https://docs.travis-ci.com/user/reference/osx/#OS-X-Version
|
||||
osx_image: xcode8.3
|
||||
# TODO: if you're updating osx_image, try using "rvm:" to supply the
|
||||
# version of ruby required by homebrew. Despite this "rvm:" declaration,
|
||||
# brew update installs ruby 2.3.7 as its first action.
|
||||
language: ruby
|
||||
rvm:
|
||||
- 2.3.7
|
||||
env:
|
||||
cache: false
|
||||
install:
|
||||
- set -o errexit; source ./ci/lint/04_install.sh
|
||||
before_script:
|
||||
- set -o errexit; source ./ci/lint/05_before_script.sh
|
||||
script:
|
||||
- set -o errexit; source ./ci/lint/06_script.sh
|
||||
|
||||
- stage: test
|
||||
name: 'ARM [GOAL: install] [unit tests, no functional tests]'
|
||||
name: 'ARM [GOAL: install] [unit tests, functional tests]'
|
||||
arch: arm64
|
||||
env: >-
|
||||
FILE_ENV="./ci/test/00_setup_env_arm.sh"
|
||||
QEMU_USER_CMD="" # Can run the tests natively without qemu
|
||||
|
||||
- stage: test
|
||||
name: 'S390x [GOAL: install] [unit tests, functional tests]'
|
||||
@ -246,35 +234,44 @@ after_success:
|
||||
FILE_ENV="./ci/test/00_setup_env_i686.sh"
|
||||
|
||||
- stage: test
|
||||
name: 'x86_64 Linux [GOAL: install] [bionic] [uses qt5 dev package instead of depends Qt to speed up build and avoid timeout] [unsigned char]'
|
||||
name: 'x86_64 Linux [GOAL: install] [CentOS 7] [no depends, only system libs]'
|
||||
env: >-
|
||||
FILE_ENV="./ci/test/00_setup_env_amd64_qt5.sh"
|
||||
FILE_ENV="./ci/test/00_setup_env_native_centos.sh"
|
||||
|
||||
- stage: test
|
||||
name: 'x86_64 Linux [GOAL: install] [trusty] [no functional tests, no depends, only system libs]'
|
||||
name: 'x86_64 Linux [GOAL: install] [bionic] [uses qt5 dev package instead of depends Qt to speed up build and avoid timeout] [unsigned char]'
|
||||
env: >-
|
||||
FILE_ENV="./ci/test/00_setup_env_amd64_trusty.sh"
|
||||
|
||||
FILE_ENV="./ci/test/00_setup_env_native_qt5.sh"
|
||||
# x86_64 Linux (xenial, no depends, only system libs, sanitizers: thread (TSan))
|
||||
- stage: test
|
||||
name: 'x86_64 Linux [GOAL: install] [xenial] [no depends, only system libs, sanitizers: thread (TSan), no wallet]'
|
||||
env: >-
|
||||
FILE_ENV="./ci/test/00_setup_env_amd64_tsan.sh"
|
||||
|
||||
FILE_ENV="./ci/test/00_setup_env_native_tsan.sh"
|
||||
# x86_64 Linux (no depends, only system libs, sanitizers: address/leak (ASan + LSan) + undefined (UBSan) + integer)
|
||||
- stage: test
|
||||
name: 'x86_64 Linux [GOAL: install] [bionic] [no depends, only system libs, sanitizers: address/leak (ASan + LSan) + undefined (UBSan) + integer]'
|
||||
env: >-
|
||||
FILE_ENV="./ci/test/00_setup_env_amd64_asan.sh"
|
||||
FILE_ENV="./ci/test/00_setup_env_native_asan.sh"
|
||||
|
||||
- stage: test
|
||||
name: 'x86_64 Linux [GOAL: install] [bionic] [no wallet]'
|
||||
env: >-
|
||||
FILE_ENV="./ci/test/00_setup_env_amd64_fuzz.sh"
|
||||
|
||||
FILE_ENV="./ci/test/00_setup_env_native_fuzz.sh"
|
||||
- stage: test
|
||||
env: >-
|
||||
FILE_ENV="./ci/test/00_setup_env_amd64_nowallet.sh"
|
||||
FILE_ENV="./ci/test/00_setup_env_native_nowallet.sh"
|
||||
|
||||
- stage: test
|
||||
name: 'macOS 10.12 [GOAL: deploy] [no functional tests]'
|
||||
env: >-
|
||||
FILE_ENV="./ci/test/00_setup_env_mac.sh"
|
||||
|
||||
- stage: test
|
||||
name: 'macOS 10.14 native [GOAL: install] [GUI: BIP70 enabled] [no depends]'
|
||||
os: osx
|
||||
# Use the most recent version:
|
||||
# Xcode 11, macOS 10.14, JDK 12.0.1
|
||||
# https://docs.travis-ci.com/user/reference/osx/#macos-version
|
||||
osx_image: xcode11
|
||||
env: >-
|
||||
FILE_ENV="./ci/test/00_setup_env_mac_host.sh"
|
||||
|
@ -1,7 +1,7 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
|
||||
[dash.qt-translation-012x]
|
||||
[dash.qt-translation-018x]
|
||||
file_filter = src/qt/locale/dash_<lang>.ts
|
||||
source_file = src/qt/locale/dash_en.ts
|
||||
source_file = src/qt/locale/dash_en.xlf
|
||||
source_lang = en
|
||||
|
@ -21,10 +21,16 @@ if(UNIX AND NOT APPLE)
|
||||
set(DEPENDS_PREFIX depends/x86_64-pc-linux-gnu)
|
||||
elseif(APPLE)
|
||||
EXECUTE_PROCESS( COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE ARCHITECTURE )
|
||||
EXECUTE_PROCESS( COMMAND system_profiler -detailLevel mini -json SPSoftwareDataType
|
||||
COMMAND jq .SPSoftwareDataType
|
||||
COMMAND jq .[]
|
||||
COMMAND jq .kernel_version
|
||||
COMMAND tr -d "Dawrin\" "
|
||||
OUTPUT_VARIABLE DARWIN_KERNEL_VERSION)
|
||||
if( ${ARCHITECTURE} STREQUAL "arm64" )
|
||||
set(DEPENDS_PREFIX depends/aarch64-apple-darwin21.2.0)
|
||||
set(DEPENDS_PREFIX depends/aarch64-apple-darwin${DARWIN_KERNEL_VERSION})
|
||||
else()
|
||||
set(DEPENDS_PREFIX depends/x86_64-apple-darwin19)
|
||||
set(DEPENDS_PREFIX depends/x86_64-apple-darwin${DARWIN_KERNEL_VERSION})
|
||||
endif()
|
||||
elseif(WIN32)
|
||||
set(DEPENDS_PREFIX depends/x86_64-w64-mingw32)
|
||||
|
@ -57,28 +57,40 @@ about Git.
|
||||
- Push changes to your fork
|
||||
- Create pull request
|
||||
|
||||
The title of the pull request should be prefixed by the component or area that
|
||||
the pull request affects. Valid areas as:
|
||||
Pull request titles should follow the Conventional Commits specification which
|
||||
uses the `<type>(optional scope): <description>` scheme. Please see the
|
||||
specification linked below for valid types. When making a change to a specific
|
||||
component, please specify the name of the component inside the scope. For
|
||||
example, if you are developing a new feature related to consensus, the PR title
|
||||
should look like this: `feat(consensus): amazing new feature`. Breaking changes
|
||||
should be designated by appending an exclamation point after `<type>(scope)`
|
||||
like this: `feat(rpc)!: remove deprecated rpc`.
|
||||
|
||||
- *Consensus* for changes to consensus critical code
|
||||
- *Doc* for changes to the documentation
|
||||
- *Qt* for changes to dash-qt
|
||||
- *Log* Changes to log messages
|
||||
- *Mining* for changes to the mining code
|
||||
- *Net* or *P2P* for changes to the peer-to-peer network code
|
||||
- *Refactor* for structural changes that do not change behavior
|
||||
- *RPC/REST/ZMQ* for changes to the RPC, REST or ZMQ APIs
|
||||
- *Scripts and tools* for changes to the scripts and tools
|
||||
- *Test* for changes to the unit tests or QA tests
|
||||
- *Utils and libraries* for changes to the utils and libraries
|
||||
- *Wallet* for changes to the wallet code
|
||||
For more details on allowed types and more information about Conventional
|
||||
Commits, please see the [Conventional Commits
|
||||
specification](https://www.conventionalcommits.org/en/v1.0.0/). In addition to
|
||||
typical types, the `backport` type should be used for bitcoin backport PRs. For
|
||||
all available types and scopes, please see the
|
||||
[.github/semantic.yml](.github/semantic.yml) file. Commonly used scopes ones
|
||||
include:
|
||||
|
||||
- *consensus* for changes to consensus critical code
|
||||
- *qt* for changes to dash-qt
|
||||
- *log* Changes to log messages
|
||||
- *mining* for changes to the mining code
|
||||
- *net* for changes to the peer-to-peer network code
|
||||
- *rpc/rest/zmq* for changes to the RPC, REST or ZMQ APIs
|
||||
- *scripts* for changes to the scripts and tools
|
||||
- *utils* for changes to the utils and libraries
|
||||
- *wallet* for changes to the wallet code
|
||||
|
||||
Examples:
|
||||
|
||||
Consensus: Add new opcode for BIP-XXXX OP_CHECKAWESOMESIG
|
||||
Net: Automatically create hidden service, listen on Tor
|
||||
Qt: Add feed bump button
|
||||
Log: Fix typo in log message
|
||||
feat(consensus): add new opcode for BIP-XXXX OP_CHECKAWESOMESIG
|
||||
feat(net): automatically create hidden service, listen on Tor
|
||||
feat(qt): add feed bump button
|
||||
fix(log): fix typo in log message
|
||||
feat(rpc)!: modify gettransaction parameter type
|
||||
|
||||
Note that translations should not be submitted as pull requests. Please see
|
||||
[Translation Process](https://github.com/dashpay/dash/blob/master/doc/translation_process.md)
|
||||
|
15
Makefile.am
15
Makefile.am
@ -98,7 +98,7 @@ $(OSX_APP)/Contents/PkgInfo:
|
||||
|
||||
$(OSX_APP)/Contents/Resources/empty.lproj:
|
||||
$(MKDIR_P) $(@D)
|
||||
@touch $@
|
||||
@touch $@
|
||||
|
||||
$(OSX_APP)/Contents/Info.plist: $(OSX_PLIST)
|
||||
$(MKDIR_P) $(@D)
|
||||
@ -187,7 +187,18 @@ $(BITCOIN_WALLET_BIN): FORCE
|
||||
$(MAKE) -C src $(@F)
|
||||
|
||||
if USE_LCOV
|
||||
LCOV_FILTER_PATTERN=-p "/usr/include/" -p "/usr/lib/" -p "src/leveldb/" -p "src/crc32c/" -p "src/bench/" -p "src/univalue" -p "src/crypto/ctaes" -p "src/secp256k1"
|
||||
LCOV_FILTER_PATTERN = \
|
||||
-p "/usr/local/" \
|
||||
-p "/usr/include/" \
|
||||
-p "/usr/lib/" \
|
||||
-p "/usr/lib64/" \
|
||||
-p "src/leveldb/" \
|
||||
-p "src/crc32c/" \
|
||||
-p "src/bench/" \
|
||||
-p "src/univalue" \
|
||||
-p "src/crypto/ctaes" \
|
||||
-p "src/secp256k1" \
|
||||
-p "depends"
|
||||
|
||||
baseline.info:
|
||||
$(LCOV) -c -i -d $(abs_builddir)/src -o $@
|
||||
|
@ -1,5 +1,5 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_pthread.html
|
||||
# https://www.gnu.org/software/autoconf-archive/ax_pthread.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
@ -55,6 +55,7 @@
|
||||
#
|
||||
# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
|
||||
# Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
|
||||
# Copyright (c) 2019 Marc Stevens <marc.stevens@cwi.nl>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
@ -67,7 +68,7 @@
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
# with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
@ -82,7 +83,7 @@
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 23
|
||||
#serial 27
|
||||
|
||||
AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
|
||||
AC_DEFUN([AX_PTHREAD], [
|
||||
@ -123,10 +124,12 @@ fi
|
||||
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
|
||||
# libraries is broken (non-POSIX).
|
||||
|
||||
# Create a list of thread flags to try. Items starting with a "-" are
|
||||
# C compiler flags, and other items are library names, except for "none"
|
||||
# which indicates that we try without any flags at all, and "pthread-config"
|
||||
# which is a program returning the flags for the Pth emulation library.
|
||||
# Create a list of thread flags to try. Items with a "," contain both
|
||||
# C compiler flags (before ",") and linker flags (after ","). Other items
|
||||
# starting with a "-" are C compiler flags, and remaining items are
|
||||
# library names, except for "none" which indicates that we try without
|
||||
# any flags at all, and "pthread-config" which is a program returning
|
||||
# the flags for the Pth emulation library.
|
||||
|
||||
ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
|
||||
|
||||
@ -194,14 +197,47 @@ case $host_os in
|
||||
# that too in a future libc.) So we'll check first for the
|
||||
# standard Solaris way of linking pthreads (-mt -lpthread).
|
||||
|
||||
ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags"
|
||||
ax_pthread_flags="-mt,-lpthread pthread $ax_pthread_flags"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Are we compiling with Clang?
|
||||
|
||||
AC_CACHE_CHECK([whether $CC is Clang],
|
||||
[ax_cv_PTHREAD_CLANG],
|
||||
[ax_cv_PTHREAD_CLANG=no
|
||||
# Note that Autoconf sets GCC=yes for Clang as well as GCC
|
||||
if test "x$GCC" = "xyes"; then
|
||||
AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG],
|
||||
[/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
|
||||
# if defined(__clang__) && defined(__llvm__)
|
||||
AX_PTHREAD_CC_IS_CLANG
|
||||
# endif
|
||||
],
|
||||
[ax_cv_PTHREAD_CLANG=yes])
|
||||
fi
|
||||
])
|
||||
ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
|
||||
|
||||
|
||||
# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
|
||||
|
||||
# Note that for GCC and Clang -pthread generally implies -lpthread,
|
||||
# except when -nostdlib is passed.
|
||||
# This is problematic using libtool to build C++ shared libraries with pthread:
|
||||
# [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25460
|
||||
# [2] https://bugzilla.redhat.com/show_bug.cgi?id=661333
|
||||
# [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555
|
||||
# To solve this, first try -pthread together with -lpthread for GCC
|
||||
|
||||
AS_IF([test "x$GCC" = "xyes"],
|
||||
[ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"])
|
||||
[ax_pthread_flags="-pthread,-lpthread -pthread -pthreads $ax_pthread_flags"])
|
||||
|
||||
# Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first
|
||||
|
||||
AS_IF([test "x$ax_pthread_clang" = "xyes"],
|
||||
[ax_pthread_flags="-pthread,-lpthread -pthread"])
|
||||
|
||||
|
||||
# The presence of a feature test macro requesting re-entrant function
|
||||
# definitions is, on some systems, a strong hint that pthreads support is
|
||||
@ -224,25 +260,86 @@ AS_IF([test "x$ax_pthread_check_macro" = "x--"],
|
||||
[ax_pthread_check_cond=0],
|
||||
[ax_pthread_check_cond="!defined($ax_pthread_check_macro)"])
|
||||
|
||||
# Are we compiling with Clang?
|
||||
|
||||
AC_CACHE_CHECK([whether $CC is Clang],
|
||||
[ax_cv_PTHREAD_CLANG],
|
||||
[ax_cv_PTHREAD_CLANG=no
|
||||
# Note that Autoconf sets GCC=yes for Clang as well as GCC
|
||||
if test "x$GCC" = "xyes"; then
|
||||
AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG],
|
||||
[/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
|
||||
# if defined(__clang__) && defined(__llvm__)
|
||||
AX_PTHREAD_CC_IS_CLANG
|
||||
# endif
|
||||
],
|
||||
[ax_cv_PTHREAD_CLANG=yes])
|
||||
fi
|
||||
])
|
||||
ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
|
||||
if test "x$ax_pthread_ok" = "xno"; then
|
||||
for ax_pthread_try_flag in $ax_pthread_flags; do
|
||||
|
||||
case $ax_pthread_try_flag in
|
||||
none)
|
||||
AC_MSG_CHECKING([whether pthreads work without any flags])
|
||||
;;
|
||||
|
||||
*,*)
|
||||
PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\1/"`
|
||||
PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\2/"`
|
||||
AC_MSG_CHECKING([whether pthreads work with "$PTHREAD_CFLAGS" and "$PTHREAD_LIBS"])
|
||||
;;
|
||||
|
||||
-*)
|
||||
AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag])
|
||||
PTHREAD_CFLAGS="$ax_pthread_try_flag"
|
||||
;;
|
||||
|
||||
pthread-config)
|
||||
AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no])
|
||||
AS_IF([test "x$ax_pthread_config" = "xno"], [continue])
|
||||
PTHREAD_CFLAGS="`pthread-config --cflags`"
|
||||
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
|
||||
;;
|
||||
|
||||
*)
|
||||
AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag])
|
||||
PTHREAD_LIBS="-l$ax_pthread_try_flag"
|
||||
;;
|
||||
esac
|
||||
|
||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
||||
ax_pthread_save_LIBS="$LIBS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
|
||||
# Check for various functions. We must include pthread.h,
|
||||
# since some functions may be macros. (On the Sequent, we
|
||||
# need a special flag -Kthread to make this header compile.)
|
||||
# We check for pthread_join because it is in -lpthread on IRIX
|
||||
# while pthread_create is in libc. We check for pthread_attr_init
|
||||
# due to DEC craziness with -lpthreads. We check for
|
||||
# pthread_cleanup_push because it is one of the few pthread
|
||||
# functions on Solaris that doesn't have a non-functional libc stub.
|
||||
# We try pthread_create on general principles.
|
||||
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
|
||||
# if $ax_pthread_check_cond
|
||||
# error "$ax_pthread_check_macro must be defined"
|
||||
# endif
|
||||
static void *some_global = NULL;
|
||||
static void routine(void *a)
|
||||
{
|
||||
/* To avoid any unused-parameter or
|
||||
unused-but-set-parameter warning. */
|
||||
some_global = a;
|
||||
}
|
||||
static void *start_routine(void *a) { return a; }],
|
||||
[pthread_t th; pthread_attr_t attr;
|
||||
pthread_create(&th, 0, start_routine, 0);
|
||||
pthread_join(th, 0);
|
||||
pthread_attr_init(&attr);
|
||||
pthread_cleanup_push(routine, 0);
|
||||
pthread_cleanup_pop(0) /* ; */])],
|
||||
[ax_pthread_ok=yes],
|
||||
[])
|
||||
|
||||
CFLAGS="$ax_pthread_save_CFLAGS"
|
||||
LIBS="$ax_pthread_save_LIBS"
|
||||
|
||||
AC_MSG_RESULT([$ax_pthread_ok])
|
||||
AS_IF([test "x$ax_pthread_ok" = "xyes"], [break])
|
||||
|
||||
PTHREAD_LIBS=""
|
||||
PTHREAD_CFLAGS=""
|
||||
done
|
||||
fi
|
||||
|
||||
ax_pthread_clang_warning=no
|
||||
|
||||
# Clang needs special handling, because older versions handle the -pthread
|
||||
# option in a rather... idiosyncratic way
|
||||
@ -261,11 +358,6 @@ if test "x$ax_pthread_clang" = "xyes"; then
|
||||
# -pthread does define _REENTRANT, and while the Darwin headers
|
||||
# ignore this macro, third-party headers might not.)
|
||||
|
||||
PTHREAD_CFLAGS="-pthread"
|
||||
PTHREAD_LIBS=
|
||||
|
||||
ax_pthread_ok=yes
|
||||
|
||||
# However, older versions of Clang make a point of warning the user
|
||||
# that, in an invocation where only linking and no compilation is
|
||||
# taking place, the -pthread option has no effect ("argument unused
|
||||
@ -320,78 +412,7 @@ if test "x$ax_pthread_clang" = "xyes"; then
|
||||
|
||||
fi # $ax_pthread_clang = yes
|
||||
|
||||
if test "x$ax_pthread_ok" = "xno"; then
|
||||
for ax_pthread_try_flag in $ax_pthread_flags; do
|
||||
|
||||
case $ax_pthread_try_flag in
|
||||
none)
|
||||
AC_MSG_CHECKING([whether pthreads work without any flags])
|
||||
;;
|
||||
|
||||
-mt,pthread)
|
||||
AC_MSG_CHECKING([whether pthreads work with -mt -lpthread])
|
||||
PTHREAD_CFLAGS="-mt"
|
||||
PTHREAD_LIBS="-lpthread"
|
||||
;;
|
||||
|
||||
-*)
|
||||
AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag])
|
||||
PTHREAD_CFLAGS="$ax_pthread_try_flag"
|
||||
;;
|
||||
|
||||
pthread-config)
|
||||
AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no])
|
||||
AS_IF([test "x$ax_pthread_config" = "xno"], [continue])
|
||||
PTHREAD_CFLAGS="`pthread-config --cflags`"
|
||||
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
|
||||
;;
|
||||
|
||||
*)
|
||||
AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag])
|
||||
PTHREAD_LIBS="-l$ax_pthread_try_flag"
|
||||
;;
|
||||
esac
|
||||
|
||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
||||
ax_pthread_save_LIBS="$LIBS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
|
||||
# Check for various functions. We must include pthread.h,
|
||||
# since some functions may be macros. (On the Sequent, we
|
||||
# need a special flag -Kthread to make this header compile.)
|
||||
# We check for pthread_join because it is in -lpthread on IRIX
|
||||
# while pthread_create is in libc. We check for pthread_attr_init
|
||||
# due to DEC craziness with -lpthreads. We check for
|
||||
# pthread_cleanup_push because it is one of the few pthread
|
||||
# functions on Solaris that doesn't have a non-functional libc stub.
|
||||
# We try pthread_create on general principles.
|
||||
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
|
||||
# if $ax_pthread_check_cond
|
||||
# error "$ax_pthread_check_macro must be defined"
|
||||
# endif
|
||||
static void routine(void *a) { a = 0; }
|
||||
static void *start_routine(void *a) { return a; }],
|
||||
[pthread_t th; pthread_attr_t attr;
|
||||
pthread_create(&th, 0, start_routine, 0);
|
||||
pthread_join(th, 0);
|
||||
pthread_attr_init(&attr);
|
||||
pthread_cleanup_push(routine, 0);
|
||||
pthread_cleanup_pop(0) /* ; */])],
|
||||
[ax_pthread_ok=yes],
|
||||
[])
|
||||
|
||||
CFLAGS="$ax_pthread_save_CFLAGS"
|
||||
LIBS="$ax_pthread_save_LIBS"
|
||||
|
||||
AC_MSG_RESULT([$ax_pthread_ok])
|
||||
AS_IF([test "x$ax_pthread_ok" = "xyes"], [break])
|
||||
|
||||
PTHREAD_LIBS=""
|
||||
PTHREAD_CFLAGS=""
|
||||
done
|
||||
fi
|
||||
|
||||
# Various other checks:
|
||||
if test "x$ax_pthread_ok" = "xyes"; then
|
||||
@ -438,7 +459,8 @@ if test "x$ax_pthread_ok" = "xyes"; then
|
||||
AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
|
||||
[ax_cv_PTHREAD_PRIO_INHERIT],
|
||||
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],
|
||||
[[int i = PTHREAD_PRIO_INHERIT;]])],
|
||||
[[int i = PTHREAD_PRIO_INHERIT;
|
||||
return i;]])],
|
||||
[ax_cv_PTHREAD_PRIO_INHERIT=yes],
|
||||
[ax_cv_PTHREAD_PRIO_INHERIT=no])
|
||||
])
|
||||
|
@ -108,11 +108,10 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
|
||||
BITCOIN_QT_CHECK([_BITCOIN_QT_FIND_LIBS])
|
||||
|
||||
dnl This is ugly and complicated. Yuck. Works as follows:
|
||||
dnl For Qt5, we can check a header to find out whether Qt is build
|
||||
dnl statically. When Qt is built statically, some plugins must be linked into
|
||||
dnl the final binary as well.
|
||||
dnl _BITCOIN_QT_CHECK_STATIC_PLUGIN does a quick link-check and appends the
|
||||
dnl results to QT_LIBS.
|
||||
dnl We check a header to find out whether Qt is built statically.
|
||||
dnl When Qt is built statically, some plugins must be linked into
|
||||
dnl the final binary as well. _BITCOIN_QT_CHECK_STATIC_PLUGIN does
|
||||
dnl a quick link-check and appends the results to QT_LIBS.
|
||||
BITCOIN_QT_CHECK([
|
||||
TEMP_CPPFLAGS=$CPPFLAGS
|
||||
TEMP_CXXFLAGS=$CXXFLAGS
|
||||
@ -123,7 +122,12 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
|
||||
_BITCOIN_QT_CHECK_STATIC_LIBS
|
||||
|
||||
if test "x$qt_plugin_path" != x; then
|
||||
QT_LIBS="$QT_LIBS -L$qt_plugin_path/platforms"
|
||||
if test -d "$qt_plugin_path/platforms"; then
|
||||
QT_LIBS="$QT_LIBS -L$qt_plugin_path/platforms"
|
||||
fi
|
||||
if test -d "$qt_plugin_path/styles"; then
|
||||
QT_LIBS="$QT_LIBS -L$qt_plugin_path/styles"
|
||||
fi
|
||||
if test -d "$qt_plugin_path/accessible"; then
|
||||
QT_LIBS="$QT_LIBS -L$qt_plugin_path/accessible"
|
||||
fi
|
||||
@ -138,16 +142,26 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
|
||||
AC_DEFINE(QT_QPA_PLATFORM_MINIMAL, 1, [Define this symbol if the minimal qt platform exists])
|
||||
fi
|
||||
if test "x$TARGET_OS" = xwindows; then
|
||||
dnl Linking against wtsapi32 is required. See #17749 and
|
||||
dnl https://bugreports.qt.io/browse/QTBUG-27097.
|
||||
AX_CHECK_LINK_FLAG([-lwtsapi32], [QT_LIBS="$QT_LIBS -lwtsapi32"], [AC_MSG_ERROR([could not link against -lwtsapi32])])
|
||||
_BITCOIN_QT_CHECK_STATIC_PLUGIN([QWindowsIntegrationPlugin], [-lqwindows])
|
||||
AC_DEFINE(QT_QPA_PLATFORM_WINDOWS, 1, [Define this symbol if the qt platform is windows])
|
||||
elif test "x$TARGET_OS" = xlinux; then
|
||||
_BITCOIN_QT_CHECK_STATIC_PLUGIN([QXcbIntegrationPlugin], [-lqxcb -lxcb-static])
|
||||
dnl workaround for https://bugreports.qt.io/browse/QTBUG-74874
|
||||
AX_CHECK_LINK_FLAG([-lxcb-shm], [QT_LIBS="$QT_LIBS -lxcb-shm"], [AC_MSG_ERROR([could not link against -lxcb-shm])])
|
||||
_BITCOIN_QT_CHECK_STATIC_PLUGIN([QXcbIntegrationPlugin], [-lqxcb])
|
||||
AC_DEFINE(QT_QPA_PLATFORM_XCB, 1, [Define this symbol if the qt platform is xcb])
|
||||
elif test "x$TARGET_OS" = xdarwin; then
|
||||
AX_CHECK_LINK_FLAG([[-framework Carbon]],[QT_LIBS="$QT_LIBS -framework Carbon"],[AC_MSG_ERROR(could not link against Carbon framework)])
|
||||
AX_CHECK_LINK_FLAG([[-framework IOSurface]],[QT_LIBS="$QT_LIBS -framework IOSurface"],[AC_MSG_ERROR(could not link against IOSurface framework)])
|
||||
AX_CHECK_LINK_FLAG([[-framework Metal]],[QT_LIBS="$QT_LIBS -framework Metal"],[AC_MSG_ERROR(could not link against Metal framework)])
|
||||
AX_CHECK_LINK_FLAG([[-framework QuartzCore]],[QT_LIBS="$QT_LIBS -framework QuartzCore"],[AC_MSG_ERROR(could not link against QuartzCore framework)])
|
||||
_BITCOIN_QT_CHECK_STATIC_PLUGIN([QCocoaIntegrationPlugin], [-lqcocoa])
|
||||
_BITCOIN_QT_CHECK_STATIC_PLUGIN([QMacStylePlugin], [-lqmacstyle])
|
||||
AC_DEFINE(QT_QPA_PLATFORM_COCOA, 1, [Define this symbol if the qt platform is cocoa])
|
||||
elif test "x$TARGET_OS" = xandroid; then
|
||||
QT_LIBS="-Wl,--export-dynamic,--undefined=JNI_OnLoad -lqtforandroid -ljnigraphics -landroid -lqtfreetype -lQt5EglSupport $QT_LIBS"
|
||||
QT_LIBS="-Wl,--export-dynamic,--undefined=JNI_OnLoad -lqtforandroid -ljnigraphics -landroid -lqtfreetype $QT_LIBS"
|
||||
AC_DEFINE(QT_QPA_PLATFORM_ANDROID, 1, [Define this symbol if the qt platform is android])
|
||||
fi
|
||||
fi
|
||||
@ -156,7 +170,7 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
|
||||
])
|
||||
|
||||
if test "x$qt_bin_path" = x; then
|
||||
qt_bin_path="`$PKG_CONFIG --variable=host_bins Qt5Core 2>/dev/null`"
|
||||
qt_bin_path="`$PKG_CONFIG --variable=host_bins ${qt_lib_prefix}Core 2>/dev/null`"
|
||||
fi
|
||||
|
||||
if test "x$use_hardening" != xno; then
|
||||
@ -211,6 +225,7 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
|
||||
BITCOIN_QT_PATH_PROGS([RCC], [rcc-qt5 rcc5 rcc], $qt_bin_path)
|
||||
BITCOIN_QT_PATH_PROGS([LRELEASE], [lrelease-qt5 lrelease5 lrelease], $qt_bin_path)
|
||||
BITCOIN_QT_PATH_PROGS([LUPDATE], [lupdate-qt5 lupdate5 lupdate],$qt_bin_path, yes)
|
||||
BITCOIN_QT_PATH_PROGS([LCONVERT], [lconvert-qt5 lconvert5 lconvert], $qt_bin_path, yes)
|
||||
|
||||
BITCOIN_QT_CHECK([
|
||||
AC_CACHE_CHECK([whether $RCC accepts --format-version option],
|
||||
@ -259,7 +274,10 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
|
||||
AC_MSG_ERROR([libQtDBus not found. Install libQtDBus or remove --with-qtdbus.])
|
||||
fi
|
||||
if test "x$LUPDATE" = x; then
|
||||
AC_MSG_WARN([lupdate is required to update qt translations])
|
||||
AC_MSG_WARN([lupdate tool is required to update Qt translations.])
|
||||
fi
|
||||
if test "x$LCONVERT" = x; then
|
||||
AC_MSG_WARN([lconvert tool is required to update Qt translations.])
|
||||
fi
|
||||
],[
|
||||
bitcoin_enable_qt=no
|
||||
@ -282,12 +300,13 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
|
||||
AC_SUBST(MOC_DEFS)
|
||||
])
|
||||
|
||||
dnl All macros below are internal and should _not_ be used from the main
|
||||
dnl configure.ac.
|
||||
dnl ----
|
||||
dnl All macros below are internal and should _not_ be used from configure.ac.
|
||||
|
||||
dnl Internal. Check if the linked version of Qt was built as static libs.
|
||||
dnl Requires: Qt5.
|
||||
dnl Internal. Check if the linked version of Qt was built statically.
|
||||
dnl
|
||||
dnl _BITCOIN_QT_IS_STATIC
|
||||
dnl ---------------------
|
||||
dnl
|
||||
dnl Requires: INCLUDES and LIBS must be populated as necessary.
|
||||
dnl Output: bitcoin_cv_static_qt=yes|no
|
||||
AC_DEFUN([_BITCOIN_QT_IS_STATIC],[
|
||||
@ -335,46 +354,54 @@ dnl
|
||||
dnl _BITCOIN_QT_CHECK_STATIC_LIBS
|
||||
dnl -----------------------------
|
||||
dnl
|
||||
dnl Inputs: no inputs.
|
||||
dnl Outputs: QT_LIBS is prepended.
|
||||
AC_DEFUN([_BITCOIN_QT_CHECK_STATIC_LIBS], [
|
||||
PKG_CHECK_MODULES([QTFONTDATABASE], [Qt5FontDatabaseSupport${qt_lib_suffix}], [QT_LIBS="-lQt5FontDatabaseSupport${qt_lib_suffix} $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QTEVENTDISPATCHER], [Qt5EventDispatcherSupport${qt_lib_suffix}], [QT_LIBS="-lQt5EventDispatcherSupport${qt_lib_suffix} $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QTTHEME], [Qt5ThemeSupport${qt_lib_suffix}], [QT_LIBS="-lQt5ThemeSupport${qt_lib_suffix} $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QTDEVICEDISCOVERY], [Qt5DeviceDiscoverySupport${qt_lib_suffix}], [QT_LIBS="-lQt5DeviceDiscoverySupport${qt_lib_suffix} $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QTACCESSIBILITY], [Qt5AccessibilitySupport${qt_lib_suffix}], [QT_LIBS="-lQt5AccessibilitySupport${qt_lib_suffix} $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QTFB], [Qt5FbSupport${qt_lib_suffix}], [QT_LIBS="-lQt5FbSupport${qt_lib_suffix} $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QT_ACCESSIBILITY], [${qt_lib_prefix}AccessibilitySupport${qt_lib_suffix}], [QT_LIBS="$QT_ACCESSIBILITY_LIBS $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QT_DEVICEDISCOVERY], [${qt_lib_prefix}DeviceDiscoverySupport${qt_lib_suffix}], [QT_LIBS="$QT_DEVICEDISCOVERY_LIBS $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QT_EDID], [${qt_lib_prefix}EdidSupport${qt_lib_suffix}], [QT_LIBS="$QT_EDID_LIBS $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QT_EVENTDISPATCHER], [${qt_lib_prefix}EventDispatcherSupport${qt_lib_suffix}], [QT_LIBS="$QT_EVENTDISPATCHER_LIBS $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QT_FB], [${qt_lib_prefix}FbSupport${qt_lib_suffix}], [QT_LIBS="$QT_FB_LIBS $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QT_FONTDATABASE], [${qt_lib_prefix}FontDatabaseSupport${qt_lib_suffix}], [QT_LIBS="$QT_FONTDATABASE_LIBS $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QT_THEME], [${qt_lib_prefix}ThemeSupport${qt_lib_suffix}], [QT_LIBS="$QT_THEME_LIBS $QT_LIBS"])
|
||||
if test "x$TARGET_OS" = xlinux; then
|
||||
PKG_CHECK_MODULES([QTXCBQPA], [Qt5XcbQpa], [QT_LIBS="$QTXCBQPA_LIBS $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QT_INPUT], [${qt_lib_prefix}InputSupport], [QT_LIBS="$QT_INPUT_LIBS $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QT_SERVICE], [${qt_lib_prefix}ServiceSupport], [QT_LIBS="$QT_SERVICE_LIBS $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QT_XCBQPA], [${qt_lib_prefix}XcbQpa], [QT_LIBS="$QT_XCBQPA_LIBS $QT_LIBS"])
|
||||
elif test "x$TARGET_OS" = xdarwin; then
|
||||
PKG_CHECK_MODULES([QTCLIPBOARD], [Qt5ClipboardSupport${qt_lib_suffix}], [QT_LIBS="-lQt5ClipboardSupport${qt_lib_suffix} $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QTGRAPHICS], [Qt5GraphicsSupport${qt_lib_suffix}], [QT_LIBS="-lQt5GraphicsSupport${qt_lib_suffix} $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QTCGL], [Qt5CglSupport${qt_lib_suffix}], [QT_LIBS="-lQt5CglSupport${qt_lib_suffix} $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QT_CLIPBOARD], [${qt_lib_prefix}ClipboardSupport${qt_lib_suffix}], [QT_LIBS="$QT_CLIPBOARD_LIBS $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QT_GRAPHICS], [${qt_lib_prefix}GraphicsSupport${qt_lib_suffix}], [QT_LIBS="$QT_GRAPHICS_LIBS $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QT_SERVICE], [${qt_lib_prefix}ServiceSupport${qt_lib_suffix}], [QT_LIBS="$QT_SERVICE_LIBS $QT_LIBS"])
|
||||
elif test "x$TARGET_OS" = xwindows; then
|
||||
PKG_CHECK_MODULES([QT_WINDOWSUIAUTOMATION], [${qt_lib_prefix}WindowsUIAutomationSupport${qt_lib_suffix}], [QT_LIBS="$QT_WINDOWSUIAUTOMATION_LIBS $QT_LIBS"])
|
||||
elif test "x$TARGET_OS" = xandroid; then
|
||||
PKG_CHECK_MODULES([QT_EGL], [${qt_lib_prefix}EglSupport], [QT_LIBS="$QT_EGL_LIBS $QT_LIBS"])
|
||||
fi
|
||||
])
|
||||
|
||||
dnl Internal. Find Qt libraries using pkg-config.
|
||||
dnl
|
||||
dnl _BITCOIN_QT_FIND_LIBS
|
||||
dnl ---------------------
|
||||
dnl
|
||||
dnl Outputs: All necessary QT_* variables are set.
|
||||
dnl Outputs: have_qt_test and have_qt_dbus are set (if applicable) to yes|no.
|
||||
AC_DEFUN([_BITCOIN_QT_FIND_LIBS],[
|
||||
BITCOIN_QT_CHECK([
|
||||
PKG_CHECK_MODULES([QT_CORE], [${qt_lib_prefix}Core${qt_lib_suffix} $qt_version], [],
|
||||
PKG_CHECK_MODULES([QT_CORE], [${qt_lib_prefix}Core${qt_lib_suffix} $qt_version], [QT_INCLUDES="$QT_CORE_CFLAGS $QT_INCLUDES" QT_LIBS="$QT_CORE_LIBS $QT_LIBS"],
|
||||
[BITCOIN_QT_FAIL([${qt_lib_prefix}Core${qt_lib_suffix} $qt_version not found])])
|
||||
])
|
||||
BITCOIN_QT_CHECK([
|
||||
PKG_CHECK_MODULES([QT_GUI], [${qt_lib_prefix}Gui${qt_lib_suffix} $qt_version], [],
|
||||
PKG_CHECK_MODULES([QT_GUI], [${qt_lib_prefix}Gui${qt_lib_suffix} $qt_version], [QT_INCLUDES="$QT_GUI_CFLAGS $QT_INCLUDES" QT_LIBS="$QT_GUI_LIBS $QT_LIBS"],
|
||||
[BITCOIN_QT_FAIL([${qt_lib_prefix}Gui${qt_lib_suffix} $qt_version not found])])
|
||||
])
|
||||
BITCOIN_QT_CHECK([
|
||||
PKG_CHECK_MODULES([QT_WIDGETS], [${qt_lib_prefix}Widgets${qt_lib_suffix} $qt_version], [],
|
||||
PKG_CHECK_MODULES([QT_WIDGETS], [${qt_lib_prefix}Widgets${qt_lib_suffix} $qt_version], [QT_INCLUDES="$QT_WIDGETS_CFLAGS $QT_INCLUDES" QT_LIBS="$QT_WIDGETS_LIBS $QT_LIBS"],
|
||||
[BITCOIN_QT_FAIL([${qt_lib_prefix}Widgets${qt_lib_suffix} $qt_version not found])])
|
||||
])
|
||||
BITCOIN_QT_CHECK([
|
||||
PKG_CHECK_MODULES([QT_NETWORK], [${qt_lib_prefix}Network${qt_lib_suffix} $qt_version], [],
|
||||
PKG_CHECK_MODULES([QT_NETWORK], [${qt_lib_prefix}Network${qt_lib_suffix} $qt_version], [QT_INCLUDES="$QT_NETWORK_CFLAGS $QT_INCLUDES" QT_LIBS="$QT_NETWORK_LIBS $QT_LIBS"],
|
||||
[BITCOIN_QT_FAIL([${qt_lib_prefix}Network${qt_lib_suffix} $qt_version not found])])
|
||||
])
|
||||
QT_INCLUDES="$QT_CORE_CFLAGS $QT_GUI_CFLAGS $QT_WIDGETS_CFLAGS $QT_NETWORK_CFLAGS"
|
||||
QT_LIBS="$QT_CORE_LIBS $QT_GUI_LIBS $QT_WIDGETS_LIBS $QT_NETWORK_LIBS"
|
||||
|
||||
BITCOIN_QT_CHECK([
|
||||
PKG_CHECK_MODULES([QT_TEST], [${qt_lib_prefix}Test${qt_lib_suffix} $qt_version], [QT_TEST_INCLUDES="$QT_TEST_CFLAGS"; have_qt_test=yes], [have_qt_test=no])
|
||||
|
36
build-aux/m4/l_socket.m4
Normal file
36
build-aux/m4/l_socket.m4
Normal file
@ -0,0 +1,36 @@
|
||||
# Illumos/SmartOS requires linking with -lsocket if
|
||||
# using getifaddrs & freeifaddrs
|
||||
|
||||
m4_define([_CHECK_SOCKET_testbody], [[
|
||||
#include <sys/types.h>
|
||||
#include <ifaddrs.h>
|
||||
|
||||
int main() {
|
||||
struct ifaddrs *ifaddr;
|
||||
getifaddrs(&ifaddr);
|
||||
freeifaddrs(ifaddr);
|
||||
}
|
||||
]])
|
||||
|
||||
AC_DEFUN([CHECK_SOCKET], [
|
||||
|
||||
AC_LANG_PUSH(C++)
|
||||
|
||||
AC_MSG_CHECKING([whether ifaddrs funcs can be used without link library])
|
||||
|
||||
AC_LINK_IFELSE([AC_LANG_SOURCE([_CHECK_SOCKET_testbody])],[
|
||||
AC_MSG_RESULT([yes])
|
||||
],[
|
||||
AC_MSG_RESULT([no])
|
||||
LIBS="$LIBS -lsocket"
|
||||
AC_MSG_CHECKING([whether getifaddrs needs -lsocket])
|
||||
AC_LINK_IFELSE([AC_LANG_SOURCE([_CHECK_SOCKET_testbody])],[
|
||||
AC_MSG_RESULT([yes])
|
||||
],[
|
||||
AC_MSG_RESULT([no])
|
||||
AC_MSG_FAILURE([cannot figure out how to use getifaddrs])
|
||||
])
|
||||
])
|
||||
|
||||
AC_LANG_POP
|
||||
])
|
15
ci/README.md
15
ci/README.md
@ -8,11 +8,21 @@ and numbered according to which stage and lifecycle step it belongs to.
|
||||
|
||||
### Running a stage locally
|
||||
|
||||
Be aware that the tests will be built and run in-place, so please run at your own risk.
|
||||
If the repository is not a fresh git clone, you might have to clean files from previous builds or test runs first.
|
||||
|
||||
The ci needs to perform various sysadmin tasks such as installing packages or writing to the user's home directory.
|
||||
While most of the actions are done inside a docker container, this is not possible for all. Thus, cache directories,
|
||||
such as the depends cache or ccache, are mounted as read-write into the docker container. While it should be fine to run
|
||||
the ci system locally on you development box, the ci scripts can generally be assumed to have received less review and
|
||||
testing compared to other parts of the codebase. If you want to keep the work tree clean, you might want to run the ci
|
||||
system in a virtual machine with a Linux operating system of your choice.
|
||||
|
||||
To allow for a wide range of tested environments, but also ensure reproducibility to some extent, the test stage
|
||||
requires `docker` to be installed. To install all requirements on Ubuntu, run
|
||||
|
||||
```
|
||||
sudo apt install docker.io ccache bash git
|
||||
sudo apt install docker.io bash
|
||||
```
|
||||
|
||||
To run the default test stage,
|
||||
@ -26,6 +36,3 @@ To run the test stage with a specific configuration,
|
||||
```
|
||||
FILE_ENV="./ci/test/00_setup_env_arm.sh" ./ci/test_run_all.sh
|
||||
```
|
||||
|
||||
Be aware that the tests will be build and run in-place, so please run at your own risk.
|
||||
If the repository is not a fresh git clone, you might have to clean files from previous builds or test runs first.
|
||||
|
@ -9,7 +9,7 @@ DOCKER_IMAGE=${DOCKER_IMAGE:-dashpay/dashd-develop}
|
||||
DOCKER_TAG=${DOCKER_TAG:-latest}
|
||||
DOCKER_RELATIVE_PATH=contrib/containers/deploy
|
||||
|
||||
BUILD_DIR=${BUILD_DIR:-.}
|
||||
BASE_BUILD_DIR=${BASE_BUILD_DIR:-.}
|
||||
|
||||
|
||||
if [ -d $DOCKER_RELATIVE_PATH/bin ]; then
|
||||
@ -17,9 +17,9 @@ if [ -d $DOCKER_RELATIVE_PATH/bin ]; then
|
||||
fi
|
||||
|
||||
mkdir $DOCKER_RELATIVE_PATH/bin
|
||||
cp "$BUILD_DIR"/src/dashd $DOCKER_RELATIVE_PATH/bin/
|
||||
cp "$BUILD_DIR"/src/dash-cli $DOCKER_RELATIVE_PATH/bin/
|
||||
cp "$BUILD_DIR"/src/dash-tx $DOCKER_RELATIVE_PATH/bin/
|
||||
cp "$BASE_BUILD_DIR"/src/dashd $DOCKER_RELATIVE_PATH/bin/
|
||||
cp "$BASE_BUILD_DIR"/src/dash-cli $DOCKER_RELATIVE_PATH/bin/
|
||||
cp "$BASE_BUILD_DIR"/src/dash-tx $DOCKER_RELATIVE_PATH/bin/
|
||||
strip $DOCKER_RELATIVE_PATH/bin/dashd
|
||||
strip $DOCKER_RELATIVE_PATH/bin/dash-cli
|
||||
strip $DOCKER_RELATIVE_PATH/bin/dash-tx
|
||||
|
@ -33,13 +33,13 @@ fi
|
||||
|
||||
ccache --max-size=$CCACHE_SIZE
|
||||
|
||||
if [ -n "$USE_SHELL" ]; then
|
||||
export CONFIG_SHELL="$USE_SHELL"
|
||||
if [ -n "$CONFIG_SHELL" ]; then
|
||||
export CONFIG_SHELL="$CONFIG_SHELL"
|
||||
fi
|
||||
|
||||
BITCOIN_CONFIG_ALL="--disable-dependency-tracking --prefix=$BUILD_DIR/depends/$HOST --bindir=$OUT_DIR/bin --libdir=$OUT_DIR/lib"
|
||||
BITCOIN_CONFIG_ALL="--disable-dependency-tracking --prefix=$BASE_BUILD_DIR/depends/$HOST --bindir=$BASE_OUTDIR/bin --libdir=$BASE_OUTDIR/lib"
|
||||
|
||||
( test -n "$USE_SHELL" && eval '"$USE_SHELL" -c "./autogen.sh"' ) || ./autogen.sh
|
||||
( test -n "$CONFIG_SHELL" && eval '"$CONFIG_SHELL" -c "./autogen.sh"' ) || ./autogen.sh
|
||||
|
||||
rm -rf build-ci
|
||||
mkdir build-ci
|
||||
|
@ -5,106 +5,30 @@
|
||||
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
export BUILD_TARGET=${BUILD_TARGET:-linux64}
|
||||
export PULL_REQUEST=${PULL_REQUEST:-false}
|
||||
export JOB_NUMBER=${JOB_NUMBER:-1}
|
||||
|
||||
export BUILDER_IMAGE_NAME="dash-builder-$BUILD_TARGET-$JOB_NUMBER"
|
||||
|
||||
export HOST_SRC_DIR=${HOST_SRC_DIR:-$(pwd)}
|
||||
export HOST_CACHE_DIR=${HOST_CACHE_DIR:-$(pwd)/ci-cache-$BUILD_TARGET}
|
||||
|
||||
export SRC_DIR=${SRC_DIR:-$HOST_SRC_DIR}
|
||||
export BUILD_DIR=$SRC_DIR
|
||||
export OUT_DIR=$BUILD_DIR/out
|
||||
|
||||
export CACHE_DIR=${CACHE_DIR:-$HOST_CACHE_DIR}
|
||||
export CCACHE_DIR=$CACHE_DIR/ccache
|
||||
|
||||
export DOCKER_RUN_VOLUME_ARGS="-v $HOST_SRC_DIR:$SRC_DIR -v $HOST_CACHE_DIR:$CACHE_DIR"
|
||||
export DOCKER_RUN_ENV_ARGS="-e SRC_DIR=$SRC_DIR -e CACHE_DIR=$CACHE_DIR -e PULL_REQUEST=$PULL_REQUEST -e COMMIT_RANGE=$COMMIT_RANGE -e JOB_NUMBER=$JOB_NUMBER -e BUILD_TARGET=$BUILD_TARGET"
|
||||
export DOCKER_RUN_ARGS="$DOCKER_RUN_VOLUME_ARGS $DOCKER_RUN_ENV_ARGS"
|
||||
export DOCKER_RUN_IN_BUILDER="docker run -t --rm -w $SRC_DIR $DOCKER_RUN_ARGS $BUILDER_IMAGE_NAME"
|
||||
|
||||
# Default values for targets
|
||||
export GOAL="install"
|
||||
export SDK_URL=${SDK_URL:-https://bitcoincore.org/depends-sources/sdks}
|
||||
MAKEJOBS="-j$(nproc)"
|
||||
export MAKEJOBS
|
||||
|
||||
export RUN_UNITTESTS=true
|
||||
export RUN_INTEGRATIONTESTS=true
|
||||
source ./ci/test/00_setup_env.sh
|
||||
|
||||
# Configure sanitizers options
|
||||
export TSAN_OPTIONS="suppressions=${SRC_DIR}/test/sanitizer_suppressions/tsan"
|
||||
export UBSAN_OPTIONS="suppressions=${SRC_DIR}/test/sanitizer_suppressions/ubsan"
|
||||
export TSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/tsan"
|
||||
export UBSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/ubsan"
|
||||
|
||||
if [ "$BUILD_TARGET" = "arm-linux" ]; then
|
||||
export HOST=arm-linux-gnueabihf
|
||||
export CHECK_DOC=1
|
||||
# -Wno-psabi is to disable ABI warnings: "note: parameter passing for argument of type ... changed in GCC 7.1"
|
||||
# This could be removed once the ABI change warning does not show up by default
|
||||
export BITCOIN_CONFIG="--enable-reduce-exports --enable-suppress-external-warnings --enable-werror CXXFLAGS=-Wno-psabi"
|
||||
export RUN_UNITTESTS=false
|
||||
export RUN_INTEGRATIONTESTS=false
|
||||
source ./ci/test/00_setup_env_arm.sh
|
||||
elif [ "$BUILD_TARGET" = "win64" ]; then
|
||||
export HOST=x86_64-w64-mingw32
|
||||
export DPKG_ADD_ARCH="i386"
|
||||
export BITCOIN_CONFIG="--enable-gui --enable-reduce-exports --disable-miner"
|
||||
export DIRECT_WINE_EXEC_TESTS=true
|
||||
source ./ci/test/00_setup_env_win64.sh
|
||||
elif [ "$BUILD_TARGET" = "linux32" ]; then
|
||||
export HOST=i686-pc-linux-gnu
|
||||
export DEP_OPTS="NO_PROTOBUF=1"
|
||||
export BITCOIN_CONFIG="--enable-zmq --disable-bip70 --enable-reduce-exports --enable-crash-hooks"
|
||||
export USE_SHELL="/bin/dash"
|
||||
export PYZMQ=true
|
||||
source ./ci/test/00_setup_env_i686.sh
|
||||
elif [ "$BUILD_TARGET" = "linux32_ubsan" ]; then
|
||||
export HOST=i686-pc-linux-gnu
|
||||
export BITCOIN_CONFIG="--enable-zmq --disable-bip70 --enable-reduce-exports --enable-crash-hooks --with-sanitizers=undefined"
|
||||
export USE_SHELL="/bin/dash"
|
||||
export PYZMQ=true
|
||||
source ./ci/test/00_setup_env_i686_ubsan.sh
|
||||
elif [ "$BUILD_TARGET" = "linux64" ]; then
|
||||
export HOST=x86_64-unknown-linux-gnu
|
||||
export DEP_OPTS="NO_UPNP=1 DEBUG=1"
|
||||
export BITCOIN_CONFIG="--enable-zmq --enable-reduce-exports --enable-crash-hooks"
|
||||
export CPPFLAGS="-DDEBUG_LOCKORDER -DENABLE_DASH_DEBUG -DARENA_DEBUG"
|
||||
export PYZMQ=true
|
||||
source ./ci/test/00_setup_env_native_qt5.sh
|
||||
elif [ "$BUILD_TARGET" = "linux64_tsan" ]; then
|
||||
export HOST=x86_64-unknown-linux-gnu
|
||||
export DEP_OPTS="NO_UPNP=1 DEBUG=1"
|
||||
export BITCOIN_CONFIG="--enable-zmq --enable-reduce-exports --enable-crash-hooks --with-sanitizers=thread"
|
||||
export CPPFLAGS="-DDEBUG_LOCKORDER -DENABLE_DASH_DEBUG -DARENA_DEBUG"
|
||||
export PYZMQ=true
|
||||
source ./ci/test/00_setup_env_native_tsan.sh
|
||||
elif [ "$BUILD_TARGET" = "linux64_fuzz" ]; then
|
||||
export HOST=x86_64-unknown-linux-gnu
|
||||
export DEP_OPTS="NO_UPNP=1 DEBUG=1"
|
||||
export BITCOIN_CONFIG="--enable-zmq --disable-ccache --enable-fuzz --with-sanitizers=fuzzer,address,undefined CC=clang CXX=clang++"
|
||||
export CPPFLAGS="-DDEBUG_LOCKORDER -DENABLE_DASH_DEBUG -DARENA_DEBUG"
|
||||
export PYZMQ=true
|
||||
export RUN_UNITTESTS=false
|
||||
export RUN_INTEGRATIONTESTS=false
|
||||
source ./ci/test/00_setup_env_native_fuzz.sh
|
||||
elif [ "$BUILD_TARGET" = "linux64_cxx20" ]; then
|
||||
export HOST=x86_64-unknown-linux-gnu
|
||||
export DEP_OPTS="NO_UPNP=1 DEBUG=1"
|
||||
export BITCOIN_CONFIG="--enable-zmq --enable-reduce-exports --enable-crash-hooks --enable-c++20 --enable-suppress-external-warnings --enable-werror"
|
||||
export CPPFLAGS="-DDEBUG_LOCKORDER -DENABLE_DASH_DEBUG -DARENA_DEBUG"
|
||||
export PYZMQ=true
|
||||
export RUN_INTEGRATIONTESTS=false
|
||||
source ./ci/test/00_setup_env_native_cxx20.sh
|
||||
elif [ "$BUILD_TARGET" = "linux64_nowallet" ]; then
|
||||
export HOST=x86_64-unknown-linux-gnu
|
||||
export DEP_OPTS="NO_WALLET=1"
|
||||
export BITCOIN_CONFIG="--enable-reduce-exports"
|
||||
elif [ "$BUILD_TARGET" = "linux64_release" ]; then
|
||||
export HOST=x86_64-unknown-linux-gnu
|
||||
export DEP_OPTS="NO_UPNP=1"
|
||||
export BITCOIN_CONFIG="--enable-zmq --enable-glibc-back-compat --enable-reduce-exports LDFLAGS=-static-libstdc++"
|
||||
export PYZMQ=true
|
||||
source ./ci/test/00_setup_env_native_nowallet.sh
|
||||
elif [ "$BUILD_TARGET" = "mac" ]; then
|
||||
export HOST=x86_64-apple-darwin19
|
||||
export BITCOIN_CONFIG="--enable-gui --enable-reduce-exports --disable-miner --enable-werror"
|
||||
export XCODE_VERSION=11.3.1
|
||||
export XCODE_BUILD_ID=11C505
|
||||
export GOAL="all deploy"
|
||||
export RUN_UNITTESTS=false
|
||||
export RUN_INTEGRATIONTESTS=false
|
||||
source ./ci/test/00_setup_env_mac.sh
|
||||
fi
|
||||
|
@ -10,12 +10,12 @@ PASS_ARGS="$*"
|
||||
|
||||
source ./ci/dash/matrix.sh
|
||||
|
||||
if [ "$RUN_INTEGRATIONTESTS" != "true" ]; then
|
||||
if [ "$RUN_INTEGRATION_TESTS" != "true" ]; then
|
||||
echo "Skipping integration tests"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
export LD_LIBRARY_PATH=$BUILD_DIR/depends/$HOST/lib
|
||||
export LD_LIBRARY_PATH=$BASE_BUILD_DIR/depends/$HOST/lib
|
||||
|
||||
cd build-ci/dashcore-$BUILD_TARGET
|
||||
|
||||
|
@ -8,20 +8,21 @@ set -e
|
||||
|
||||
source ./ci/dash/matrix.sh
|
||||
|
||||
if [ "$RUN_UNITTESTS" != "true" ]; then
|
||||
if [ "$RUN_UNIT_TESTS" != "true" ]; then
|
||||
echo "Skipping unit tests"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# TODO this is not Travis agnostic
|
||||
export BOOST_TEST_RANDOM=1$TRAVIS_BUILD_ID
|
||||
export LD_LIBRARY_PATH=$BUILD_DIR/depends/$HOST/lib
|
||||
export LD_LIBRARY_PATH=$BASE_BUILD_DIR/depends/$HOST/lib
|
||||
|
||||
export WINEDEBUG=fixme-all
|
||||
export BOOST_TEST_LOG_LEVEL=test_suite
|
||||
|
||||
cd build-ci/dashcore-$BUILD_TARGET
|
||||
|
||||
bash -c "${CI_WAIT}" & # Print dots in case the unit tests take a long time to run
|
||||
if [ "$DIRECT_WINE_EXEC_TESTS" = "true" ]; then
|
||||
# Inside Docker, binfmt isn't working so we can't trust in make invoking windows binaries correctly
|
||||
wine ./src/test/test_dash.exe
|
||||
|
@ -6,24 +6,11 @@
|
||||
|
||||
export LC_ALL=C
|
||||
|
||||
if [ "$TRAVIS_OS_NAME" == "osx" ]; then
|
||||
# update first to install required ruby dependency
|
||||
travis_retry brew update
|
||||
travis_retry brew reinstall git -- --with-pcre2 # for --perl-regexp
|
||||
travis_retry brew install grep # gnu grep for --perl-regexp support
|
||||
PATH="$(brew --prefix grep)/libexec/gnubin:$PATH"
|
||||
travis_retry brew install shellcheck
|
||||
travis_retry brew upgrade python
|
||||
PATH="$(brew --prefix python)/bin:$PATH"
|
||||
export PATH
|
||||
else
|
||||
SHELLCHECK_VERSION=v0.7.1
|
||||
curl -sL "https://github.com/koalaman/shellcheck/releases/download/${SHELLCHECK_VERSION}/shellcheck-${SHELLCHECK_VERSION}.linux.x86_64.tar.xz" | tar --xz -xf - --directory /tmp/
|
||||
PATH="/tmp/shellcheck-${SHELLCHECK_VERSION}:${PATH}"
|
||||
export PATH
|
||||
fi
|
||||
|
||||
travis_retry pip3 install codespell==1.17.1
|
||||
travis_retry pip3 install flake8==3.8.3
|
||||
travis_retry pip3 install vulture==2.3
|
||||
travis_retry pip3 install yq
|
||||
|
||||
SHELLCHECK_VERSION=v0.6.0
|
||||
curl -s "https://storage.googleapis.com/shellcheck/shellcheck-${SHELLCHECK_VERSION}.linux.x86_64.tar.xz" | tar --xz -xf - --directory /tmp/
|
||||
export PATH="/tmp/shellcheck-${SHELLCHECK_VERSION}:${PATH}"
|
||||
|
@ -13,36 +13,52 @@ if [ -n "${FILE_ENV}" ]; then
|
||||
source "${FILE_ENV}"
|
||||
fi
|
||||
|
||||
export BUILD_TARGET=${BUILD_TARGET:-linux64}
|
||||
export PULL_REQUEST=${PULL_REQUEST:-false}
|
||||
export JOB_NUMBER=${JOB_NUMBER:-1}
|
||||
|
||||
BASE_ROOT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )"/../../ >/dev/null 2>&1 && pwd )
|
||||
export BASE_ROOT_DIR
|
||||
|
||||
echo "Fallback to default values in env (if not yet set)"
|
||||
# The number of parallel jobs to pass down to make and test_runner.py
|
||||
export MAKEJOBS=${MAKEJOBS:--j4}
|
||||
MAKEJOBS="-j$(nproc)"
|
||||
export MAKEJOBS
|
||||
# A folder for the ci system to put temporary files (ccache, datadirs for tests, ...)
|
||||
export BASE_SCRATCH_DIR=${BASE_SCRATCH_DIR:-$BASE_ROOT_DIR/ci/scratch/}
|
||||
export HOST=${HOST:-x86_64-unknown-linux-gnu}
|
||||
# What host to compile for. See also ./depends/README.md
|
||||
# Tests that need cross-compilation export the appropriate HOST.
|
||||
# Tests that run natively guess the host
|
||||
export HOST=${HOST:-$("$BASE_ROOT_DIR/depends/config.guess")}
|
||||
# Whether to prefer BusyBox over GNU utilities
|
||||
export USE_BUSY_BOX=${USE_BUSY_BOX:-false}
|
||||
export RUN_UNIT_TESTS=${RUN_UNIT_TESTS:-true}
|
||||
export RUN_FUNCTIONAL_TESTS=${RUN_FUNCTIONAL_TESTS:-true}
|
||||
export RUN_INTEGRATION_TESTS=${RUN_INTEGRATION_TESTS:-true}
|
||||
export RUN_FUZZ_TESTS=${RUN_FUZZ_TESTS:-false}
|
||||
export DOCKER_NAME_TAG=${DOCKER_NAME_TAG:-ubuntu:18.04}
|
||||
# Randomize test order.
|
||||
# See https://www.boost.org/doc/libs/1_71_0/libs/test/doc/html/boost_test/utf_reference/rt_param_reference/random.html
|
||||
export BOOST_TEST_RANDOM=${BOOST_TEST_RANDOM:-1}
|
||||
export HOST_CACHE_DIR=${HOST_CACHE_DIR:-$BASE_ROOT_DIR/ci-cache-$BUILD_TARGET}
|
||||
export CACHE_DIR=${CACHE_DIR:-$HOST_CACHE_DIR}
|
||||
export CCACHE_SIZE=${CCACHE_SIZE:-100M}
|
||||
export CCACHE_TEMPDIR=${CCACHE_TEMPDIR:-/tmp/.ccache-temp}
|
||||
export CCACHE_COMPRESS=${CCACHE_COMPRESS:-1}
|
||||
export CCACHE_DIR=${CCACHE_DIR:-$BASE_SCRATCH_DIR/.ccache}
|
||||
export CCACHE_DIR=${CCACHE_DIR:-$CACHE_DIR/ccache}
|
||||
# Folder where the build is done (depends and dist). Can not be changed and is equal to the root of the git repo
|
||||
export BASE_BUILD_DIR=${BASE_BUILD_DIR:-$BASE_ROOT_DIR}
|
||||
# Folder where the build is done (bin and lib). Can not be changed.
|
||||
export BASE_OUTDIR=${BASE_OUTDIR:-$BASE_BUILD_DIR/out/$HOST}
|
||||
export BASE_OUTDIR=${BASE_OUTDIR:-$BASE_BUILD_DIR/out}
|
||||
export SDK_URL=${SDK_URL:-https://bitcoincore.org/depends-sources/sdks}
|
||||
export WINEDEBUG=${WINEDEBUG:-fixme-all}
|
||||
export DOCKER_PACKAGES=${DOCKER_PACKAGES:-build-essential libtool autotools-dev automake pkg-config bsdmainutils curl ca-certificates ccache python3}
|
||||
export DOCKER_PACKAGES=${DOCKER_PACKAGES:-build-essential libtool autotools-dev automake pkg-config bsdmainutils curl ca-certificates ccache python3 rsync git}
|
||||
export GOAL=${GOAL:-install}
|
||||
export DIR_QA_ASSETS=${DIR_QA_ASSETS:-${BASE_BUILD_DIR}/qa-assets}
|
||||
export PATH=${BASE_ROOT_DIR}/ci/retry:$PATH
|
||||
export CI_RETRY_EXE=${CI_RETRY_EXE:-"retry --"}
|
||||
# Dash's Docker-specifics
|
||||
export BUILDER_IMAGE_NAME="dash-builder-$BUILD_TARGET-$JOB_NUMBER"
|
||||
export DOCKER_RUN_VOLUME_ARGS="-v $BASE_ROOT_DIR:$BASE_ROOT_DIR -v $HOST_CACHE_DIR:$CACHE_DIR"
|
||||
export DOCKER_RUN_ENV_ARGS="-e BASE_ROOT_DIR=$BASE_ROOT_DIR -e CACHE_DIR=$CACHE_DIR -e PULL_REQUEST=$PULL_REQUEST -e COMMIT_RANGE=$COMMIT_RANGE -e JOB_NUMBER=$JOB_NUMBER -e BUILD_TARGET=$BUILD_TARGET"
|
||||
export DOCKER_RUN_ARGS="$DOCKER_RUN_VOLUME_ARGS $DOCKER_RUN_ENV_ARGS"
|
||||
export DOCKER_RUN_IN_BUILDER="docker run -t --rm -w $BASE_ROOT_DIR $DOCKER_RUN_ARGS $BUILDER_IMAGE_NAME"
|
||||
|
@ -1,14 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (c) 2019 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
export HOST=x86_64-unknown-linux-gnu
|
||||
export PACKAGES="clang llvm python3-zmq qtbase5-dev qttools5-dev-tools libssl1.0-dev libevent-dev bsdmainutils libboost-filesystem-dev libboost-test-dev libboost-thread-dev libdb5.3++-dev libminiupnpc-dev libzmq3-dev libprotobuf-dev protobuf-compiler libqrencode-dev"
|
||||
export NO_DEPENDS=1
|
||||
export RUN_BENCH=true
|
||||
export GOAL="install"
|
||||
export BITCOIN_CONFIG="--enable-zmq --with-incompatible-bdb --with-gui=qt5 CPPFLAGS=-DDEBUG_LOCKORDER --with-sanitizers=integer,undefined CC=clang CXX=clang++"
|
@ -1,16 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (c) 2019 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
export HOST=x86_64-unknown-linux-gnu
|
||||
export PACKAGES="clang llvm python3 libssl1.0-dev libevent-dev bsdmainutils libboost-filesystem-dev libboost-test-dev libboost-thread-dev"
|
||||
export NO_DEPENDS=1
|
||||
export RUN_UNIT_TESTS=false
|
||||
export RUN_FUNCTIONAL_TESTS=false
|
||||
export RUN_FUZZ_TESTS=true
|
||||
export GOAL="install"
|
||||
export BITCOIN_CONFIG="--enable-fuzz --with-sanitizers=fuzzer,address CC=clang CXX=clang++"
|
@ -1,14 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (c) 2019 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
export HOST=x86_64-unknown-linux-gnu
|
||||
export PACKAGES="python3-zmq qtbase5-dev qttools5-dev-tools protobuf-compiler libdbus-1-dev libharfbuzz-dev libprotobuf-dev"
|
||||
export DEP_OPTS="NO_QT=1 NO_UPNP=1 DEBUG=1 ALLOW_HOST_PACKAGES=1"
|
||||
export TEST_RUNNER_EXTRA="--coverage --extended --exclude feature_dbcrash" # Run extended tests so that coverage does not fail, but exclude the very slow dbcrash
|
||||
export GOAL="install"
|
||||
export BITCOIN_CONFIG="--enable-zmq --with-gui=qt5 --enable-glibc-back-compat --enable-reduce-exports --enable-debug CFLAGS=\"-g0 -O2 -funsigned-char\" CXXFLAGS=\"-g0 -O2 -funsigned-char\""
|
@ -1,14 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (c) 2019 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
export HOST=x86_64-unknown-linux-gnu
|
||||
export DOCKER_NAME_TAG=ubuntu:14.04
|
||||
export PACKAGES="python3-zmq qtbase5-dev qttools5-dev-tools libicu-dev libpng-dev libssl-dev libevent-dev bsdmainutils libboost-filesystem-dev libboost-test-dev libboost-thread-dev libdb5.1++-dev libminiupnpc-dev libzmq3-dev libprotobuf-dev protobuf-compiler libqrencode-dev"
|
||||
export RUN_FUNCTIONAL_TESTS=false
|
||||
export GOAL="install"
|
||||
export BITCOIN_CONFIG="--enable-zmq --with-incompatible-bdb --with-gui=no"
|
@ -1,15 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (c) 2019 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
export HOST=x86_64-unknown-linux-gnu
|
||||
export DOCKER_NAME_TAG=ubuntu:16.04
|
||||
export PACKAGES="clang llvm python3-zmq qtbase5-dev qttools5-dev-tools libssl-dev libevent-dev bsdmainutils libboost-filesystem-dev libboost-test-dev libboost-thread-dev libdb5.3++-dev libminiupnpc-dev libzmq3-dev libprotobuf-dev protobuf-compiler libqrencode-dev"
|
||||
export NO_DEPENDS=1
|
||||
export RUN_FUNCTIONAL_TESTS=false # Disabled for now. TODO identify suppressions or exclude specific tests
|
||||
export GOAL="install"
|
||||
export BITCOIN_CONFIG="--enable-zmq --with-incompatible-bdb --with-gui=qt5 CPPFLAGS=-DDEBUG_LOCKORDER --with-sanitizers=thread --disable-hardening --disable-asm CC=clang CXX=clang++"
|
16
ci/test/00_setup_env_arm.sh
Normal file → Executable file
16
ci/test/00_setup_env_arm.sh
Normal file → Executable file
@ -7,12 +7,18 @@
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
export HOST=arm-linux-gnueabihf
|
||||
export QEMU_USER_CMD="qemu-arm -L /usr/arm-linux-gnueabihf/"
|
||||
export PACKAGES="python3 g++-arm-linux-gnueabihf busybox qemu-user"
|
||||
# The host arch is unknown, so we run the tests through qemu.
|
||||
# If the host is arm and wants to run the tests natively, it can set QEMU_USER_CMD to the empty string.
|
||||
export QEMU_USER_CMD="${QEMU_USER_CMD:"qemu-arm -L /usr/arm-linux-gnueabihf/"}"
|
||||
# We don't know whether the host can run the cross compiled binaries. To run them, either qemu-user or libc6:armhf for
|
||||
# the target is required, so install both.
|
||||
export DPKG_ADD_ARCH="armhf"
|
||||
export PACKAGES="python3 g++-arm-linux-gnueabihf busybox qemu-user libc6:armhf libstdc++6:armhf libfontconfig1:armhf libxcb1:armhf"
|
||||
export CHECK_DOC=1
|
||||
export USE_BUSY_BOX=true
|
||||
export RUN_UNIT_TESTS=true
|
||||
export RUN_FUNCTIONAL_TESTS=false
|
||||
export RUN_UNIT_TESTS=false
|
||||
export RUN_INTEGRATION_TESTS=false
|
||||
export GOAL="install"
|
||||
# -Wno-psabi is to disable ABI warnings: "note: parameter passing for argument of type ... changed in GCC 7.1"
|
||||
# This could be removed once the ABI change warning does not show up by default
|
||||
export BITCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports CXXFLAGS=-Wno-psabi"
|
||||
export BITCOIN_CONFIG="--enable-reduce-exports --enable-suppress-external-warnings --enable-werror CXXFLAGS=-Wno-psabi"
|
||||
|
4
ci/test/00_setup_env_i686.sh
Normal file → Executable file
4
ci/test/00_setup_env_i686.sh
Normal file → Executable file
@ -7,7 +7,9 @@
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
export HOST=i686-pc-linux-gnu
|
||||
export DEP_OPTS="NO_PROTOBUF=1"
|
||||
export PACKAGES="g++-multilib python3-zmq"
|
||||
export GOAL="install"
|
||||
export BITCOIN_CONFIG="--enable-zmq --with-gui=qt5 --disable-bip70 --enable-glibc-back-compat --enable-reduce-exports LDFLAGS=-static-libstdc++"
|
||||
export BITCOIN_CONFIG="--enable-zmq --enable-reduce-exports --enable-crash-hooks --with-sanitizers=undefined"
|
||||
export CONFIG_SHELL="/bin/dash"
|
||||
export PYZMQ=true
|
||||
|
14
ci/test/00_setup_env_i686_ubsan.sh
Executable file
14
ci/test/00_setup_env_i686_ubsan.sh
Executable file
@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (c) 2019 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
export HOST=i686-pc-linux-gnu
|
||||
export PACKAGES="g++-multilib python3-zmq"
|
||||
export GOAL="install"
|
||||
export BITCOIN_CONFIG="--enable-zmq --disable-bip70 --enable-reduce-exports --enable-crash-hooks --with-sanitizers=undefined"
|
||||
export CONFIG_SHELL="/bin/dash"
|
||||
export PYZMQ=true
|
6
ci/test/00_setup_env_mac.sh
Normal file → Executable file
6
ci/test/00_setup_env_mac.sh
Normal file → Executable file
@ -11,6 +11,6 @@ export PACKAGES="cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev l
|
||||
export XCODE_VERSION=11.3.1
|
||||
export XCODE_BUILD_ID=11C505
|
||||
export RUN_UNIT_TESTS=false
|
||||
export RUN_FUNCTIONAL_TESTS=false
|
||||
export GOAL="deploy"
|
||||
export BITCOIN_CONFIG="--enable-gui --enable-reduce-exports --enable-werror"
|
||||
export RUN_INTEGRATION_TESTS=false
|
||||
export GOAL="all deploy"
|
||||
export BITCOIN_CONFIG="--enable-gui --enable-reduce-exports --disable-miner --enable-werror"
|
||||
|
19
ci/test/00_setup_env_mac_host.sh
Executable file
19
ci/test/00_setup_env_mac_host.sh
Executable file
@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (c) 2019 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
export HOST=x86_64-apple-darwin19
|
||||
export BREW_PACKAGES="automake berkeley-db4 libtool boost miniupnpc pkg-config protobuf qt qrencode python3 ccache zeromq"
|
||||
export PIP_PACKAGES="zmq"
|
||||
export RUN_CI_ON_HOST=true
|
||||
export RUN_UNIT_TESTS=true
|
||||
export RUN_INTEGRATION_TESTS=false
|
||||
export GOAL="install"
|
||||
export BITCOIN_CONFIG="--enable-gui --enable-reduce-exports --disable-miner --enable-werror"
|
||||
# Run without depends
|
||||
export NO_DEPENDS=1
|
||||
export OSX_SDK=""
|
14
ci/test/00_setup_env_native_centos.sh
Normal file
14
ci/test/00_setup_env_native_centos.sh
Normal file
@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (c) 2019 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
export DOCKER_NAME_TAG=centos:7
|
||||
export DOCKER_PACKAGES="gcc-c++ libtool make git python3 python36-zmq"
|
||||
export PACKAGES="boost-devel libevent-devel libdb4-devel libdb4-cxx-devel miniupnpc-devel zeromq-devel qt5-qtbase-devel qt5-qttools-devel qrencode-devel"
|
||||
export NO_DEPENDS=1
|
||||
export GOAL="install"
|
||||
export BITCOIN_CONFIG="--enable-reduce-exports"
|
16
ci/test/00_setup_env_native_cxx20.sh
Executable file
16
ci/test/00_setup_env_native_cxx20.sh
Executable file
@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (c) 2019 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
export PACKAGES="python3-zmq qtbase5-dev qttools5-dev-tools protobuf-compiler libdbus-1-dev libharfbuzz-dev libprotobuf-dev"
|
||||
export DEP_OPTS="NO_UPNP=1 DEBUG=1"
|
||||
export CPPFLAGS="-DDEBUG_LOCKORDER -DENABLE_DASH_DEBUG -DARENA_DEBUG"
|
||||
export PYZMQ=true
|
||||
export RUN_INTEGRATION_TESTS=false
|
||||
export GOAL="install"
|
||||
export BITCOIN_CONFIG="--enable-zmq --enable-reduce-exports --enable-crash-hooks --enable-c++20 --enable-suppress-external-warnings --enable-werror"
|
||||
|
17
ci/test/00_setup_env_native_fuzz.sh
Executable file
17
ci/test/00_setup_env_native_fuzz.sh
Executable file
@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (c) 2019 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
export PACKAGES="clang llvm python3 libevent-dev bsdmainutils libboost-filesystem-dev libboost-test-dev libboost-thread-dev"
|
||||
export DEP_OPTS="NO_UPNP=1 DEBUG=1"
|
||||
export CPPFLAGS="-DDEBUG_LOCKORDER -DENABLE_DASH_DEBUG -DARENA_DEBUG"
|
||||
export PYZMQ=true
|
||||
export RUN_UNIT_TESTS=false
|
||||
export RUN_INTEGRATION_TESTS=false
|
||||
export RUN_FUZZ_TESTS=true
|
||||
export GOAL="install"
|
||||
export BITCOIN_CONFIG="--enable-zmq --disable-ccache --enable-fuzz --with-sanitizers=fuzzer,address,undefined CC=clang CXX=clang++"
|
3
ci/test/00_setup_env_amd64_nowallet.sh → ci/test/00_setup_env_native_nowallet.sh
Normal file → Executable file
3
ci/test/00_setup_env_amd64_nowallet.sh → ci/test/00_setup_env_native_nowallet.sh
Normal file → Executable file
@ -6,8 +6,7 @@
|
||||
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
export HOST=x86_64-unknown-linux-gnu
|
||||
export PACKAGES="python3-zmq"
|
||||
export DEP_OPTS="NO_WALLET=1"
|
||||
export GOAL="install"
|
||||
export BITCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports"
|
||||
export BITCOIN_CONFIG="--enable-reduce-exports"
|
14
ci/test/00_setup_env_native_qt5.sh
Executable file
14
ci/test/00_setup_env_native_qt5.sh
Executable file
@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (c) 2019 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
export PACKAGES="python3-zmq qtbase5-dev qttools5-dev-tools libdbus-1-dev libharfbuzz-dev"
|
||||
export DEP_OPTS="NO_UPNP=1 DEBUG=1"
|
||||
# TODO: we have few rpcs that aren't covered by any test, re-enable the line below once it's fixed
|
||||
# export TEST_RUNNER_EXTRA="--coverage --extended --exclude feature_pruning,feature_dbcrash" # Run extended tests so that coverage does not fail, but exclude the very slow dbcrash
|
||||
export GOAL="install"
|
||||
export BITCOIN_CONFIG="--enable-zmq --enable-glibc-back-compat --enable-reduce-exports LDFLAGS=-static-libstdc++"
|
16
ci/test/00_setup_env_native_tsan.sh
Executable file
16
ci/test/00_setup_env_native_tsan.sh
Executable file
@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (c) 2019 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
export PACKAGES="clang llvm python3-zmq qtbase5-dev qttools5-dev-tools libevent-dev bsdmainutils libboost-filesystem-dev libboost-test-dev libboost-thread-dev libdb5.3++-dev libminiupnpc-dev libzmq3-dev libqrencode-dev"
|
||||
export DEP_OPTS="NO_UPNP=1 DEBUG=1"
|
||||
export TEST_RUNNER_EXTRA="--extended --exclude feature_pruning,feature_dbcrash,wallet_multiwallet.py" # Temporarily suppress ASan heap-use-after-free (see issue #14163)
|
||||
export RUN_BENCH=true
|
||||
export GOAL="install"
|
||||
export BITCOIN_CONFIG="--enable-zmq --enable-reduce-exports --enable-crash-hooks --with-sanitizers=thread"
|
||||
export CPPFLAGS="-DDEBUG_LOCKORDER -DENABLE_DASH_DEBUG -DARENA_DEBUG"
|
||||
export PYZMQ=true
|
@ -8,7 +8,7 @@ export LC_ALL=C.UTF-8
|
||||
|
||||
export HOST=s390x-unknown-linux-gnu
|
||||
export DOCKER_NAME_TAG=s390x/ubuntu:18.04
|
||||
export PACKAGES="clang llvm python3-zmq qtbase5-dev qttools5-dev-tools libssl1.0-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev libdb5.3++-dev libminiupnpc-dev libzmq3-dev libqrencode-dev"
|
||||
export PACKAGES="clang llvm python3-zmq qtbase5-dev qttools5-dev-tools libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev libdb5.3++-dev libminiupnpc-dev libzmq3-dev libqrencode-dev"
|
||||
export NO_DEPENDS=1
|
||||
export RUN_UNIT_TESTS=true
|
||||
export RUN_FUNCTIONAL_TESTS=false
|
||||
|
6
ci/test/00_setup_env_win64.sh
Normal file → Executable file
6
ci/test/00_setup_env_win64.sh
Normal file → Executable file
@ -8,6 +8,8 @@ export LC_ALL=C.UTF-8
|
||||
|
||||
export HOST=x86_64-w64-mingw32
|
||||
export PACKAGES="python3 nsis g++-mingw-w64-x86-64 wine-binfmt wine64"
|
||||
export RUN_FUNCTIONAL_TESTS=false
|
||||
export DPKG_ADD_ARCH="i386"
|
||||
export RUN_INTEGRATION_TESTS=false
|
||||
export GOAL="deploy"
|
||||
export BITCOIN_CONFIG="--enable-reduce-exports --disable-gui-tests"
|
||||
export BITCOIN_CONFIG="--enable-gui --enable-reduce-exports --disable-miner"
|
||||
export DIRECT_WINE_EXEC_TESTS=true
|
||||
|
@ -6,18 +6,45 @@
|
||||
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
mkdir -p "${BASE_SCRATCH_DIR}"
|
||||
ccache echo "Creating ccache dir if it didn't already exist"
|
||||
|
||||
if [ ! -d ${DIR_QA_ASSETS} ]; then
|
||||
git clone https://github.com/bitcoin-core/qa-assets ${DIR_QA_ASSETS}
|
||||
if [[ $DOCKER_NAME_TAG == centos* ]]; then
|
||||
export LC_ALL=en_US.utf8
|
||||
fi
|
||||
export DIR_FUZZ_IN=${DIR_QA_ASSETS}/fuzz_seed_corpus/
|
||||
|
||||
mkdir -p "${BASE_BUILD_DIR}/sanitizer-output/"
|
||||
export TSAN_OPTIONS="suppressions=${TRAVIS_BUILD_DIR}/test/sanitizer_suppressions/tsan"
|
||||
export UBSAN_OPTIONS="suppressions=${TRAVIS_BUILD_DIR}/test/sanitizer_suppressions/ubsan:print_stacktrace=1:halt_on_error=1"
|
||||
env | grep -E '^(CCACHE_|WINEDEBUG|LC_ALL|BOOST_TEST_RANDOM|CONFIG_SHELL|(TSAN|UBSAN)_OPTIONS)' | tee /tmp/env
|
||||
if [ "$TRAVIS_OS_NAME" == "osx" ]; then
|
||||
set +o errexit
|
||||
pushd /usr/local/Homebrew || exit 1
|
||||
git reset --hard origin/master
|
||||
popd || exit 1
|
||||
set -o errexit
|
||||
${CI_RETRY_EXE} brew unlink python@2
|
||||
${CI_RETRY_EXE} brew update
|
||||
# brew upgrade returns an error if any of the packages is already up to date
|
||||
# Failure is safe to ignore, unless we really need an update.
|
||||
brew upgrade $BREW_PACKAGES || true
|
||||
|
||||
# install new packages (brew install returns an error if already installed)
|
||||
for i in $BREW_PACKAGES; do
|
||||
if ! brew list | grep -q $i; then
|
||||
${CI_RETRY_EXE} brew install $i
|
||||
fi
|
||||
done
|
||||
|
||||
export PATH="/usr/local/opt/ccache/libexec:$PATH"
|
||||
OPENSSL_PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig"
|
||||
export PKG_CONFIG_PATH=$OPENSSL_PKG_CONFIG_PATH:$PKG_CONFIG_PATH
|
||||
|
||||
${CI_RETRY_EXE} pip3 install $PIP_PACKAGES
|
||||
|
||||
fi
|
||||
|
||||
mkdir -p "${BASE_SCRATCH_DIR}"
|
||||
mkdir -p "${CCACHE_DIR}"
|
||||
|
||||
export ASAN_OPTIONS="detect_stack_use_after_return=1"
|
||||
export LSAN_OPTIONS="suppressions=${BASE_BUILD_DIR}/test/sanitizer_suppressions/lsan"
|
||||
export TSAN_OPTIONS="suppressions=${BASE_BUILD_DIR}/test/sanitizer_suppressions/tsan"
|
||||
export UBSAN_OPTIONS="suppressions=${BASE_BUILD_DIR}/test/sanitizer_suppressions/ubsan:print_stacktrace=1:halt_on_error=1"
|
||||
env | grep -E '^(CCACHE_|WINEDEBUG|LC_ALL|BOOST_TEST_RANDOM|CONFIG_SHELL|(ASAN|LSAN|TSAN|UBSAN)_OPTIONS)' | tee /tmp/env
|
||||
if [[ $HOST = *-mingw32 ]]; then
|
||||
DOCKER_ADMIN="--cap-add SYS_ADMIN"
|
||||
elif [[ $BITCOIN_CONFIG = *--with-sanitizers=*address* ]]; then # If ran with (ASan + LSan), Docker needs access to ptrace (https://github.com/google/sanitizers/issues/764)
|
||||
@ -28,7 +55,13 @@ if [ -z "$RUN_CI_ON_HOST" ]; then
|
||||
echo "Creating $DOCKER_NAME_TAG container to run in"
|
||||
${CI_RETRY_EXE} docker pull "$DOCKER_NAME_TAG"
|
||||
|
||||
DOCKER_ID=$(docker run $DOCKER_ADMIN -idt --mount type=bind,src=$BASE_BUILD_DIR,dst=$BASE_BUILD_DIR --mount type=bind,src=$CCACHE_DIR,dst=$CCACHE_DIR -w $BASE_BUILD_DIR --env-file /tmp/env $DOCKER_NAME_TAG)
|
||||
DOCKER_ID=$(docker run $DOCKER_ADMIN -idt \
|
||||
--mount type=bind,src=$BASE_BUILD_DIR,dst=/ro_base,readonly \
|
||||
--mount type=bind,src=$CCACHE_DIR,dst=$CCACHE_DIR \
|
||||
--mount type=bind,src=$BASE_BUILD_DIR/depends,dst=$BASE_BUILD_DIR/depends \
|
||||
-w $BASE_BUILD_DIR \
|
||||
--env-file /tmp/env \
|
||||
$DOCKER_NAME_TAG)
|
||||
|
||||
DOCKER_EXEC () {
|
||||
docker exec $DOCKER_ID bash -c "export PATH=$BASE_SCRATCH_DIR/bins/:\$PATH && cd $PWD && $*"
|
||||
@ -41,11 +74,37 @@ else
|
||||
fi
|
||||
export -f DOCKER_EXEC
|
||||
|
||||
DOCKER_EXEC free -m -h
|
||||
DOCKER_EXEC echo "Number of CPUs \(nproc\):" \$\(nproc\)
|
||||
if [ "$TRAVIS_OS_NAME" == "osx" ]; then
|
||||
top -l 1 -s 0 | awk ' /PhysMem/ {print}'
|
||||
echo "Number of CPUs: $(sysctl -n hw.logicalcpu)"
|
||||
else
|
||||
DOCKER_EXEC free -m -h
|
||||
DOCKER_EXEC echo "Number of CPUs \(nproc\):" \$\(nproc\)
|
||||
fi
|
||||
|
||||
${CI_RETRY_EXE} DOCKER_EXEC apt-get update
|
||||
${CI_RETRY_EXE} DOCKER_EXEC apt-get install --no-install-recommends --no-upgrade -y $PACKAGES $DOCKER_PACKAGES
|
||||
if [ -n "$DPKG_ADD_ARCH" ]; then
|
||||
DOCKER_EXEC dpkg --add-architecture "$DPKG_ADD_ARCH"
|
||||
fi
|
||||
|
||||
if [[ $DOCKER_NAME_TAG == centos* ]]; then
|
||||
${CI_RETRY_EXE} DOCKER_EXEC yum -y install epel-release
|
||||
${CI_RETRY_EXE} DOCKER_EXEC yum -y install $DOCKER_PACKAGES $PACKAGES
|
||||
elif [ "$TRAVIS_OS_NAME" != "osx" ]; then
|
||||
${CI_RETRY_EXE} DOCKER_EXEC apt-get update
|
||||
${CI_RETRY_EXE} DOCKER_EXEC apt-get install --no-install-recommends --no-upgrade -y $PACKAGES $DOCKER_PACKAGES
|
||||
fi
|
||||
|
||||
if [ ! -d ${DIR_QA_ASSETS} ]; then
|
||||
DOCKER_EXEC git clone https://github.com/bitcoin-core/qa-assets ${DIR_QA_ASSETS}
|
||||
fi
|
||||
export DIR_FUZZ_IN=${DIR_QA_ASSETS}/fuzz_seed_corpus/
|
||||
|
||||
DOCKER_EXEC mkdir -p "${BASE_BUILD_DIR}/sanitizer-output/"
|
||||
|
||||
if [ -z "$RUN_CI_ON_HOST" ]; then
|
||||
echo "Create $BASE_BUILD_DIR"
|
||||
DOCKER_EXEC rsync -a /ro_base/ $BASE_BUILD_DIR
|
||||
fi
|
||||
|
||||
if [ "$USE_BUSY_BOX" = "true" ]; then
|
||||
echo "Setup to use BusyBox utils"
|
||||
|
@ -6,11 +6,14 @@
|
||||
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
DOCKER_EXEC echo \> \$HOME/.dashcore # Make sure default datadir does not exist and is never read by creating a dummy file
|
||||
OSX_SDK_BASENAME="Xcode-${XCODE_VERSION}-${XCODE_BUILD_ID}-extracted-SDK-with-libcxx-headers.tar.gz"
|
||||
OSX_SDK_PATH="depends/sdk-sources/${OSX_SDK_BASENAME}"
|
||||
# Make sure default datadir does not exist and is never read by creating a dummy file
|
||||
if [ "$TRAVIS_OS_NAME" == "osx" ]; then
|
||||
echo > $HOME/Library/Application\ Support/DashCore
|
||||
else
|
||||
DOCKER_EXEC echo \> \$HOME/.dashcore
|
||||
fi
|
||||
|
||||
mkdir -p depends/SDKs depends/sdk-sources
|
||||
DOCKER_EXEC mkdir -p depends/SDKs depends/sdk-sources
|
||||
|
||||
if [ -n "$XCODE_VERSION" ] && [ ! -f "$OSX_SDK_PATH" ]; then
|
||||
DOCKER_EXEC curl --location --fail "${SDK_URL}/${OSX_SDK_BASENAME}" -o "$OSX_SDK_PATH"
|
||||
|
393
configure.ac
393
configure.ac
@ -1,7 +1,7 @@
|
||||
AC_PREREQ([2.69])
|
||||
define(_CLIENT_VERSION_MAJOR, 18)
|
||||
define(_CLIENT_VERSION_MINOR, 0)
|
||||
define(_CLIENT_VERSION_BUILD, 1)
|
||||
define(_CLIENT_VERSION_MINOR, 1)
|
||||
define(_CLIENT_VERSION_BUILD, 0)
|
||||
define(_CLIENT_VERSION_RC, 0)
|
||||
define(_CLIENT_VERSION_IS_RELEASE, true)
|
||||
define(_COPYRIGHT_YEAR, 2022)
|
||||
@ -9,7 +9,7 @@ define(_COPYRIGHT_HOLDERS,[The %s developers])
|
||||
define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[Dash Core]])
|
||||
AC_INIT([Dash Core],m4_join([.], _CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MINOR, _CLIENT_VERSION_BUILD)m4_if(_CLIENT_VERSION_RC, [0], [], [rc]_CLIENT_VERSION_RC),[https://github.com/dashpay/dash/issues],[dashcore],[https://dash.org/])
|
||||
AC_CONFIG_SRCDIR([src/validation.cpp])
|
||||
AC_CONFIG_HEADERS([src/config/dash-config.h])
|
||||
AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
AC_CONFIG_MACRO_DIR([build-aux/m4])
|
||||
|
||||
@ -239,31 +239,11 @@ if test "x$use_asm" = xyes; then
|
||||
AC_DEFINE(USE_ASM, 1, [Define this symbol to build in assembly routines])
|
||||
fi
|
||||
|
||||
AC_ARG_WITH([system-univalue],
|
||||
[AS_HELP_STRING([--with-system-univalue],
|
||||
[Build with system UniValue (default is no)])],
|
||||
[system_univalue=$withval],
|
||||
[system_univalue=no]
|
||||
)
|
||||
|
||||
AC_ARG_WITH([openssl],
|
||||
[AS_HELP_STRING([--with-openssl],
|
||||
[enable openssl (default is yes if OpenSSL is found)])],
|
||||
[use_openssl=$withval],
|
||||
[use_openssl=yes])
|
||||
|
||||
AC_ARG_ENABLE([zmq],
|
||||
[AS_HELP_STRING([--disable-zmq],
|
||||
[disable ZMQ notifications])],
|
||||
[use_zmq=$enableval],
|
||||
[use_zmq=yes])
|
||||
AC_ARG_ENABLE([bip70],
|
||||
[AS_HELP_STRING([--disable-bip70],
|
||||
[disable BIP70 (payment protocol) support in GUI (enabled by default)])],
|
||||
[enable_bip70=$enableval],
|
||||
[enable_bip70=auto])
|
||||
|
||||
AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
|
||||
|
||||
AC_ARG_ENABLE(man,
|
||||
[AS_HELP_STRING([--disable-man],
|
||||
@ -271,28 +251,28 @@ AC_ARG_ENABLE(man,
|
||||
enable_man=yes)
|
||||
AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
|
||||
|
||||
# Enable debug
|
||||
dnl Enable debug
|
||||
AC_ARG_ENABLE([debug],
|
||||
[AS_HELP_STRING([--enable-debug],
|
||||
[use compiler flags and macros suited for debugging (default is no)])],
|
||||
[enable_debug=$enableval],
|
||||
[enable_debug=no])
|
||||
|
||||
# Enable exception stacktraces
|
||||
dnl Enable exception stacktraces
|
||||
AC_ARG_ENABLE([stacktraces],
|
||||
[AS_HELP_STRING([--enable-stacktraces],
|
||||
[gather and print exception stack traces (default is yes)])],
|
||||
[enable_stacktraces=$enableval],
|
||||
[enable_stacktraces=yes])
|
||||
|
||||
# Enable crash hooks
|
||||
dnl Enable crash hooks
|
||||
AC_ARG_ENABLE([crash-hooks],
|
||||
[AS_HELP_STRING([--enable-crash-hooks],
|
||||
[hook into exception/signal/assert handling to gather stack traces (default is no)])],
|
||||
[enable_crashhooks=$enableval],
|
||||
[enable_crashhooks=no])
|
||||
|
||||
# Enable in-wallet miner
|
||||
dnl Enable in-wallet miner
|
||||
AC_ARG_ENABLE([miner],
|
||||
[AS_HELP_STRING([--enable-miner],
|
||||
[enable in-wallet miner (default is yes)])],
|
||||
@ -303,20 +283,27 @@ if test "x$enable_miner" = xyes; then
|
||||
AC_DEFINE(ENABLE_MINER, 1, [Define this symbol if in-wallet miner should be enabled])
|
||||
fi
|
||||
|
||||
# Enable different -fsanitize options
|
||||
dnl Enable different -fsanitize options
|
||||
AC_ARG_WITH([sanitizers],
|
||||
[AS_HELP_STRING([--with-sanitizers],
|
||||
[comma separated list of extra sanitizers to build with (default is none enabled)])],
|
||||
[use_sanitizers=$withval])
|
||||
|
||||
# Enable gprof profiling
|
||||
dnl Enable gprof profiling
|
||||
AC_ARG_ENABLE([gprof],
|
||||
[AS_HELP_STRING([--enable-gprof],
|
||||
[use gprof profiling compiler flags (default is no)])],
|
||||
[enable_gprof=$enableval],
|
||||
[enable_gprof=no])
|
||||
|
||||
# Turn warnings into errors
|
||||
dnl Pass compiler & linker flags that make builds deterministic
|
||||
AC_ARG_ENABLE([determinism],
|
||||
[AS_HELP_STRING([--enable-determinism],
|
||||
[Enable compilation flags that make builds deterministic (default is no)])],
|
||||
[enable_determinism=$enableval],
|
||||
[enable_determinism=no])
|
||||
|
||||
dnl Turn warnings into errors
|
||||
AC_ARG_ENABLE([werror],
|
||||
[AS_HELP_STRING([--enable-werror],
|
||||
[Treat certain compiler warnings as errors (default is no)])],
|
||||
@ -327,15 +314,15 @@ AC_LANG_PUSH([C++])
|
||||
AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""])
|
||||
|
||||
if test "x$enable_debug" = xyes; then
|
||||
# Clear default -g -O2 flags
|
||||
dnl Clear default -g -O2 flags
|
||||
if test "x$CXXFLAGS_overridden" = xno; then
|
||||
CXXFLAGS=""
|
||||
fi
|
||||
|
||||
# Disable all optimizations
|
||||
dnl Disable all optimizations
|
||||
AX_CHECK_COMPILE_FLAG([-O0], [[DEBUG_CXXFLAGS="$DEBUG_CXXFLAGS -O0"]],,[[$CXXFLAG_WERROR]])
|
||||
|
||||
# Prefer -g3, fall back to -g if that is unavailable.
|
||||
dnl Prefer -g3, fall back to -g if that is unavailable.
|
||||
AX_CHECK_COMPILE_FLAG(
|
||||
[-g3],
|
||||
[[DEBUG_CXXFLAGS="$DEBUG_CXXFLAGS -g3"]],
|
||||
@ -344,6 +331,8 @@ if test "x$enable_debug" = xyes; then
|
||||
|
||||
AX_CHECK_PREPROC_FLAG([-DDEBUG_CORE],[[DEBUG_CPPFLAGS="$DEBUG_CPPFLAGS -DDEBUG_CORE"]],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_PREPROC_FLAG([-DDEBUG_LOCKORDER],[[DEBUG_CPPFLAGS="$DEBUG_CPPFLAGS -DDEBUG_LOCKORDER"]],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_PREPROC_FLAG([-DABORT_ON_FAILED_ASSUME],[[DEBUG_CPPFLAGS="$DEBUG_CPPFLAGS -DABORT_ON_FAILED_ASSUME"]],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-ftrapv],[DEBUG_CXXFLAGS="$DEBUG_CXXFLAGS -ftrapv"],,[[$CXXFLAG_WERROR]])
|
||||
else
|
||||
# We always enable at at least -g1 debug info to support proper stacktraces in crash infos
|
||||
# Stacktraces will be suboptimal due to optimization, but better than nothing. Also, -fno-omit-frame-pointer
|
||||
@ -384,19 +373,19 @@ fi
|
||||
AX_CHECK_COMPILE_FLAG([-Wa,-mbig-obj], [CXXFLAGS="$CXXFLAGS -Wa,-mbig-obj"],,,)
|
||||
|
||||
if test x$use_sanitizers != x; then
|
||||
# First check if the compiler accepts flags. If an incompatible pair like
|
||||
# -fsanitize=address,thread is used here, this check will fail. This will also
|
||||
# fail if a bad argument is passed, e.g. -fsanitize=undfeined
|
||||
dnl First check if the compiler accepts flags. If an incompatible pair like
|
||||
dnl -fsanitize=address,thread is used here, this check will fail. This will also
|
||||
dnl fail if a bad argument is passed, e.g. -fsanitize=undfeined
|
||||
AX_CHECK_COMPILE_FLAG(
|
||||
[[-fsanitize=$use_sanitizers]],
|
||||
[[SANITIZER_CXXFLAGS=-fsanitize=$use_sanitizers]],
|
||||
[AC_MSG_ERROR([compiler did not accept requested flags])])
|
||||
|
||||
# Some compilers (e.g. GCC) require additional libraries like libasan,
|
||||
# libtsan, libubsan, etc. Make sure linking still works with the sanitize
|
||||
# flag. This is a separate check so we can give a better error message when
|
||||
# the sanitize flags are supported by the compiler but the actual sanitizer
|
||||
# libs are missing.
|
||||
dnl Some compilers (e.g. GCC) require additional libraries like libasan,
|
||||
dnl libtsan, libubsan, etc. Make sure linking still works with the sanitize
|
||||
dnl flag. This is a separate check so we can give a better error message when
|
||||
dnl the sanitize flags are supported by the compiler but the actual sanitizer
|
||||
dnl libs are missing.
|
||||
AX_CHECK_LINK_FLAG(
|
||||
[[-fsanitize=$use_sanitizers]],
|
||||
[[SANITIZER_LDFLAGS=-fsanitize=$use_sanitizers]],
|
||||
@ -416,8 +405,10 @@ if test "x$enable_werror" = "xyes"; then
|
||||
AC_MSG_ERROR("enable-werror set but -Werror is not usable")
|
||||
fi
|
||||
AX_CHECK_COMPILE_FLAG([-Werror=vla],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=vla"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Werror=shadow-field],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=shadow-field"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Werror=switch],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=switch"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Werror=thread-safety],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=thread-safety"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Werror=range-loop-analysis],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=range-loop-analysis"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Werror=unused-variable],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=unused-variable"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Werror=date-time],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=date-time"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Werror=return-type],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=return-type"],,[[$CXXFLAG_WERROR]])
|
||||
@ -434,6 +425,7 @@ if test "x$CXXFLAGS_overridden" = "xno"; then
|
||||
AX_CHECK_COMPILE_FLAG([-Wextra],[WARN_CXXFLAGS="$WARN_CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Wformat],[WARN_CXXFLAGS="$WARN_CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Wvla],[WARN_CXXFLAGS="$WARN_CXXFLAGS -Wvla"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Wshadow-field],[WARN_CXXFLAGS="$WARN_CXXFLAGS -Wshadow-field"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Wswitch],[WARN_CXXFLAGS="$WARN_CXXFLAGS -Wswitch"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Wformat-security],[WARN_CXXFLAGS="$WARN_CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Wthread-safety],[WARN_CXXFLAGS="$WARN_CXXFLAGS -Wthread-safety"],,[[$CXXFLAG_WERROR]])
|
||||
@ -447,9 +439,9 @@ if test "x$CXXFLAGS_overridden" = "xno"; then
|
||||
[AC_LANG_SOURCE([[struct A { virtual void f(); }; struct B : A { void f() final; };]])])
|
||||
AX_CHECK_COMPILE_FLAG([-Wunreachable-code-loop-increment],[WARN_CXXFLAGS="$WARN_CXXFLAGS -Wunreachable-code-loop-increment"],,[[$CXXFLAG_WERROR]])
|
||||
|
||||
## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
|
||||
## unknown options if any other warning is produced. Test the -Wfoo case, and
|
||||
## set the -Wno-foo case if it works.
|
||||
dnl Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
|
||||
dnl unknown options if any other warning is produced. Test the -Wfoo case, and
|
||||
dnl set the -Wno-foo case if it works.
|
||||
AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[NOWARN_CXXFLAGS="$NOWARN_CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Wself-assign],[NOWARN_CXXFLAGS="$NOWARN_CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]])
|
||||
AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[NOWARN_CXXFLAGS="$NOWARN_CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]])
|
||||
@ -655,8 +647,8 @@ case $host in
|
||||
AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(libiphlpapi missing))
|
||||
AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(libcrypt32 missing))
|
||||
|
||||
# -static is interpreted by libtool, where it has a different meaning.
|
||||
# In libtool-speak, it's -all-static.
|
||||
dnl -static is interpreted by libtool, where it has a different meaning.
|
||||
dnl In libtool-speak, it's -all-static.
|
||||
AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
|
||||
|
||||
AC_PATH_PROG([MAKENSIS], [makensis], none)
|
||||
@ -695,18 +687,12 @@ case $host in
|
||||
dnl It's safe to add these paths even if the functionality is disabled by
|
||||
dnl the user (--without-wallet or --without-gui for example).
|
||||
|
||||
bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
|
||||
qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
|
||||
if test x$use_openssl != xno; then
|
||||
openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
|
||||
if test x$openssl_prefix != x; then
|
||||
PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
|
||||
export PKG_CONFIG_PATH
|
||||
fi
|
||||
fi
|
||||
if test x$bdb_prefix != x; then
|
||||
CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
|
||||
LIBS="$LIBS -L$bdb_prefix/lib"
|
||||
qt5_prefix=$($BREW --prefix qt5 2>/dev/null)
|
||||
if $BREW list --versions berkeley-db4 >/dev/null && test "x$BDB_CFLAGS" = "x" && test "x$BDB_LIBS" = "x" && test "$use_bdb" != "no"; then
|
||||
bdb_prefix=$($BREW --prefix berkeley-db4 2>/dev/null)
|
||||
dnl This must precede the call to BITCOIN_FIND_BDB48 below.
|
||||
BDB_CFLAGS="-I$bdb_prefix/include"
|
||||
BDB_LIBS="-L$bdb_prefix/lib -ldb_cxx-4.8"
|
||||
fi
|
||||
if test x$qt5_prefix != x; then
|
||||
PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
|
||||
@ -823,11 +809,11 @@ AC_C_BIGENDIAN
|
||||
dnl Check for pthread compile/link requirements
|
||||
AX_PTHREAD
|
||||
|
||||
# The following macro will add the necessary defines to dash-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.
|
||||
dnl The following macro will add the necessary defines to bitcoin-config.h, but
|
||||
dnl they also need to be passed down to any subprojects. Pull the results out of
|
||||
dnl the cache and add them to CPPFLAGS.
|
||||
AC_SYS_LARGEFILE
|
||||
# detect POSIX or GNU variant of strerror_r
|
||||
dnl detect POSIX or GNU variant of strerror_r
|
||||
AC_FUNC_STRERROR_R
|
||||
|
||||
if test x$ac_cv_sys_file_offset_bits != x &&
|
||||
@ -847,20 +833,14 @@ AX_GCC_FUNC_ATTRIBUTE([dllexport])
|
||||
AX_GCC_FUNC_ATTRIBUTE([dllimport])
|
||||
|
||||
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_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
|
||||
#undef _FORTIFY_SOURCE
|
||||
#endif
|
||||
#define _FORTIFY_SOURCE 2
|
||||
#include <sys/select.h>
|
||||
extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
|
||||
[ fdelt_type="long unsigned int"],
|
||||
[ fdelt_type="long int"])
|
||||
AC_MSG_RESULT($fdelt_type)
|
||||
AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
|
||||
AX_CHECK_LINK_FLAG([[-Wl,--wrap=__divmoddi4]], [COMPAT_LDFLAGS="$COMPAT_LDFLAGS -Wl,--wrap=__divmoddi4"])
|
||||
AX_CHECK_LINK_FLAG([[-Wl,--wrap=log2f]], [COMPAT_LDFLAGS="$COMPAT_LDFLAGS -Wl,--wrap=log2f"])
|
||||
AX_CHECK_LINK_FLAG([[-Wl,--wrap=log2]], [COMPAT_LDFLAGS="$COMPAT_LDFLAGS -Wl,--wrap=log2"])
|
||||
AX_CHECK_LINK_FLAG([[-Wl,--wrap=log]], [COMPAT_LDFLAGS="$COMPAT_LDFLAGS -Wl,--wrap=log"])
|
||||
AX_CHECK_LINK_FLAG([[-Wl,--wrap=pow]], [COMPAT_LDFLAGS="$COMPAT_LDFLAGS -Wl,--wrap=pow"])
|
||||
AX_CHECK_LINK_FLAG([[-Wl,--wrap=exp]], [COMPAT_LDFLAGS="$COMPAT_LDFLAGS -Wl,--wrap=exp"])
|
||||
AX_CHECK_LINK_FLAG([[-Wl,--wrap=exp2]], [COMPAT_LDFLAGS="$COMPAT_LDFLAGS -Wl,--wrap=exp2"])
|
||||
AX_CHECK_LINK_FLAG([[-Wl,--wrap=fcntl]], [COMPAT_LDFLAGS="$COMPAT_LDFLAGS -Wl,--wrap=fcntl"])
|
||||
else
|
||||
AC_SEARCH_LIBS([clock_gettime],[rt])
|
||||
fi
|
||||
@ -883,22 +863,38 @@ if test "x$enable_gprof" = xyes; then
|
||||
fi
|
||||
|
||||
if test x$TARGET_OS != xwindows; then
|
||||
# All windows code is PIC, forcing it on just adds useless compile warnings
|
||||
dnl All windows code is PIC, forcing it on just adds useless compile warnings
|
||||
AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
|
||||
fi
|
||||
|
||||
# All versions of gcc that we commonly use for building are subject to bug
|
||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90348. To work around that, set
|
||||
# -fstack-reuse=none for all gcc builds. (Only gcc understands this flag)
|
||||
dnl All versions of gcc that we commonly use for building are subject to bug
|
||||
dnl https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90348. To work around that, set
|
||||
dnl -fstack-reuse=none for all gcc builds. (Only gcc understands this flag)
|
||||
AX_CHECK_COMPILE_FLAG([-fstack-reuse=none],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-reuse=none"])
|
||||
if test x$use_hardening != xno; then
|
||||
use_hardening=yes
|
||||
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"])
|
||||
|
||||
# When enable_debug is yes, all optimizations are disabled.
|
||||
# However, FORTIFY_SOURCE requires that there is some level of optimization, otherwise it does nothing and just creates a compiler warning.
|
||||
# Since FORTIFY_SOURCE is a no-op without optimizations, do not enable it when enable_debug is yes.
|
||||
dnl -fcf-protection used with Clang 7 causes ld to emit warnings:
|
||||
dnl ld: error: ... <corrupt x86 feature size: 0x8>
|
||||
dnl Use CHECK_LINK_FLAG & --fatal-warnings to ensure we wont use the flag in this case.
|
||||
AX_CHECK_LINK_FLAG([-fcf-protection=full],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fcf-protection=full"],, [[$LDFLAG_WERROR]])
|
||||
|
||||
case $host in
|
||||
*mingw*)
|
||||
dnl stack-clash-protection doesn't currently work, and likely should just be skipped for Windows.
|
||||
dnl See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90458 for more details.
|
||||
;;
|
||||
*)
|
||||
AX_CHECK_COMPILE_FLAG([-fstack-clash-protection], [HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-clash-protection"], [], [$CXXFLAG_WERROR])
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
dnl When enable_debug is yes, all optimizations are disabled.
|
||||
dnl However, FORTIFY_SOURCE requires that there is some level of optimization, otherwise it does nothing and just creates a compiler warning.
|
||||
dnl Since FORTIFY_SOURCE is a no-op without optimizations, do not enable it when enable_debug is yes.
|
||||
if test x$enable_debug != xyes; then
|
||||
AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
|
||||
AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
|
||||
@ -931,48 +927,21 @@ if test x$TARGET_OS = xdarwin; then
|
||||
AX_CHECK_LINK_FLAG([[-Wl,-bind_at_load]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-bind_at_load"])
|
||||
fi
|
||||
|
||||
AC_CHECK_HEADERS([endian.h sys/endian.h byteswap.h stdio.h stdlib.h unistd.h strings.h sys/types.h sys/stat.h sys/select.h sys/prctl.h])
|
||||
if test x$enable_determinism = xyes; then
|
||||
if test x$TARGET_OS = xwindows; then
|
||||
AX_CHECK_LINK_FLAG([[-Wl,--no-insert-timestamp]], [LDFLAGS="$LDFLAGS -Wl,--no-insert-timestamp"])
|
||||
fi
|
||||
fi
|
||||
|
||||
# FD_ZERO may be dependent on a declaration of memcpy, e.g. in SmartOS
|
||||
# check that it fails to build without memcpy, then that it builds with
|
||||
AC_MSG_CHECKING(FD_ZERO memcpy dependence)
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <cstddef>
|
||||
#if HAVE_SYS_SELECT_H
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
]],[[
|
||||
#if HAVE_SYS_SELECT_H
|
||||
fd_set fds;
|
||||
FD_ZERO(&fds);
|
||||
#endif
|
||||
]])],
|
||||
[ AC_MSG_RESULT(no) ],
|
||||
[
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <cstring>
|
||||
#if HAVE_SYS_SELECT_H
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
]], [[
|
||||
#if HAVE_SYS_SELECT_H
|
||||
fd_set fds;
|
||||
FD_ZERO(&fds);
|
||||
#endif
|
||||
]])],
|
||||
[ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_CSTRING_DEPENDENT_FD_ZERO, 1, [Define this symbol if FD_ZERO is dependent of a memcpy declaration being available]) ],
|
||||
[ AC_MSG_ERROR(failed with cstring include) ]
|
||||
)
|
||||
]
|
||||
)
|
||||
AC_CHECK_HEADERS([endian.h sys/endian.h byteswap.h stdio.h stdlib.h unistd.h strings.h sys/types.h sys/stat.h sys/select.h sys/prctl.h sys/sysctl.h vm/vm_param.h sys/vmmeter.h sys/resources.h])
|
||||
|
||||
AC_CHECK_DECLS([getifaddrs, freeifaddrs],,,
|
||||
AC_CHECK_DECLS([getifaddrs, freeifaddrs],[CHECK_SOCKET],,
|
||||
[#include <sys/types.h>
|
||||
#include <ifaddrs.h>]
|
||||
)
|
||||
AC_CHECK_DECLS([strnlen])
|
||||
|
||||
# Check for daemon(3), unrelated to --with-daemon (although used by it)
|
||||
dnl Check for daemon(3), unrelated to --with-daemon (although used by it)
|
||||
AC_CHECK_DECLS([daemon])
|
||||
|
||||
AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
|
||||
@ -1022,6 +991,9 @@ AC_LINK_IFELSE([AC_LANG_SOURCE([
|
||||
]
|
||||
)
|
||||
|
||||
dnl thread_local is currently disabled when building with glibc back compat.
|
||||
dnl Our minimum supported glibc is 2.17, however support for thread_local
|
||||
dnl did not arrive in glibc until 2.18.
|
||||
if test "x$use_thread_local" = xyes || { test "x$use_thread_local" = xauto && test "x$use_glibc_compat" = xno; }; then
|
||||
TEMP_LDFLAGS="$LDFLAGS"
|
||||
LDFLAGS="$TEMP_LDFLAGS $PTHREAD_CFLAGS"
|
||||
@ -1038,19 +1010,14 @@ if test "x$use_thread_local" = xyes || { test "x$use_thread_local" = xauto && te
|
||||
[
|
||||
case $host in
|
||||
*mingw*)
|
||||
# mingw32's implementation of thread_local has also been shown to behave
|
||||
# erroneously under concurrent usage; see:
|
||||
# https://gist.github.com/jamesob/fe9a872051a88b2025b1aa37bfa98605
|
||||
AC_MSG_RESULT(no)
|
||||
;;
|
||||
*darwin*)
|
||||
# TODO enable thread_local on later versions of Darwin where it is
|
||||
# supported (per https://stackoverflow.com/a/29929949)
|
||||
dnl mingw32's implementation of thread_local has also been shown to behave
|
||||
dnl erroneously under concurrent usage; see:
|
||||
dnl https://gist.github.com/jamesob/fe9a872051a88b2025b1aa37bfa98605
|
||||
AC_MSG_RESULT(no)
|
||||
;;
|
||||
*freebsd*)
|
||||
# FreeBSD's implementation of thread_local is also buggy (per
|
||||
# https://groups.google.com/d/msg/bsdmailinglist/22ncTZAbDp4/Dii_pII5AwAJ)
|
||||
dnl FreeBSD's implementation of thread_local is also buggy (per
|
||||
dnl https://groups.google.com/d/msg/bsdmailinglist/22ncTZAbDp4/Dii_pII5AwAJ)
|
||||
AC_MSG_RESULT(no)
|
||||
;;
|
||||
*)
|
||||
@ -1082,7 +1049,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <ctime>]],
|
||||
]
|
||||
)
|
||||
|
||||
# Check for different ways of gathering OS randomness
|
||||
dnl Check for different ways of gathering OS randomness
|
||||
AC_MSG_CHECKING(for Linux getrandom syscall)
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>
|
||||
#include <sys/syscall.h>
|
||||
@ -1107,10 +1074,24 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>
|
||||
[ AC_MSG_RESULT(no)]
|
||||
)
|
||||
|
||||
AC_MSG_CHECKING(for sysctl)
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
|
||||
#include <sys/sysctl.h>]],
|
||||
[[ #ifdef __linux__
|
||||
#error "Don't use sysctl on Linux, it's deprecated even when it works"
|
||||
#endif
|
||||
sysctl(nullptr, 2, nullptr, nullptr, nullptr, 0); ]])],
|
||||
[ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL, 1,[Define this symbol if the BSD sysctl() is available]) ],
|
||||
[ AC_MSG_RESULT(no)]
|
||||
)
|
||||
|
||||
AC_MSG_CHECKING(for sysctl KERN_ARND)
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
|
||||
#include <sys/sysctl.h>]],
|
||||
[[ static const int name[2] = {CTL_KERN, KERN_ARND};
|
||||
[[ #ifdef __linux__
|
||||
#error "Don't use sysctl on Linux, it's deprecated even when it works"
|
||||
#endif
|
||||
static int name[2] = {CTL_KERN, KERN_ARND};
|
||||
sysctl(name, 2, nullptr, nullptr, nullptr, 0); ]])],
|
||||
[ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL_ARND, 1,[Define this symbol if the BSD sysctl(KERN_ARND) is available]) ],
|
||||
[ AC_MSG_RESULT(no)]
|
||||
@ -1124,7 +1105,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdint.h>
|
||||
[ AC_MSG_RESULT(no)]
|
||||
)
|
||||
|
||||
# ensure backtrace() is found, check -lexecinfo if necessary
|
||||
dnl ensure backtrace() is found, check -lexecinfo if necessary
|
||||
if test x$TARGET_OS != xwindows; then
|
||||
if test "x$enable_stacktraces" != xno; then
|
||||
AC_SEARCH_LIBS([backtrace], [execinfo], [], [
|
||||
@ -1207,6 +1188,29 @@ if test x$use_reduce_exports = xyes; then
|
||||
[AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([for std::system])
|
||||
AC_LINK_IFELSE(
|
||||
[ AC_LANG_PROGRAM(
|
||||
[[ #include <cstdlib> ]],
|
||||
[[ int nErr = std::system(""); ]]
|
||||
)],
|
||||
[ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_STD__SYSTEM, 1, Define to 1 if you have the `std::system' function.)],
|
||||
[ AC_MSG_RESULT(no) ]
|
||||
)
|
||||
|
||||
AC_MSG_CHECKING([for ::_wsystem])
|
||||
AC_LINK_IFELSE(
|
||||
[ AC_LANG_PROGRAM(
|
||||
[[ ]],
|
||||
[[ int nErr = ::_wsystem(""); ]]
|
||||
)],
|
||||
[ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_WSYSTEM, 1, Define to 1 if you have the `::wsystem' function.)],
|
||||
[ AC_MSG_RESULT(no) ]
|
||||
)
|
||||
|
||||
# Define to 1 if std::system or ::wsystem (Windows) is available
|
||||
AC_DEFINE([HAVE_SYSTEM], [HAVE_STD__SYSTEM || HAVE_WSYSTEM], [std::system or ::wsystem])
|
||||
|
||||
dnl SUPPRESSED_CPPFLAGS=SUPPRESS_WARNINGS([$SOME_CPPFLAGS])
|
||||
dnl Replace -I with -isystem in $SOME_CPPFLAGS to suppress warnings from
|
||||
dnl headers from its include directories and return the result.
|
||||
@ -1233,11 +1237,12 @@ if test "x$enable_fuzz" = "xyes"; then
|
||||
bitcoin_enable_qt_dbus=no
|
||||
enable_wallet=no
|
||||
use_bench=no
|
||||
use_openssl=no
|
||||
use_upnp=no
|
||||
use_natpmp=no
|
||||
use_zmq=no
|
||||
|
||||
AX_CHECK_PREPROC_FLAG([-DABORT_ON_FAILED_ASSUME],[[DEBUG_CPPFLAGS="$DEBUG_CPPFLAGS -DABORT_ON_FAILED_ASSUME"]],,[[$CXXFLAG_WERROR]])
|
||||
|
||||
AC_MSG_CHECKING([whether main function is needed])
|
||||
AX_CHECK_LINK_FLAG(
|
||||
[[-fsanitize=$use_sanitizers]],
|
||||
@ -1326,7 +1331,7 @@ define(MINIMUM_REQUIRED_BOOST, 1.47.0)
|
||||
dnl Check for boost libs
|
||||
AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST])
|
||||
if test x$want_boost = xno; then
|
||||
AC_MSG_ERROR([[only libbitcoinconsensus can be built without boost]])
|
||||
AC_MSG_ERROR([[only libdashconsensus can be built without boost]])
|
||||
fi
|
||||
AX_BOOST_FILESYSTEM
|
||||
AX_BOOST_THREAD
|
||||
@ -1445,13 +1450,6 @@ if test x$use_pkgconfig = xyes; then
|
||||
m4_ifdef(
|
||||
[PKG_CHECK_MODULES],
|
||||
[
|
||||
if test x$use_openssl != xno; then
|
||||
PKG_CHECK_MODULES([SSL], [libssl],, [use_openssl=no])
|
||||
PKG_CHECK_MODULES([CRYPTO], [libcrypto],, [use_openssl=no])
|
||||
fi
|
||||
if test x$enable_bip70 != xno; then
|
||||
BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [have_protobuf=no])])
|
||||
fi
|
||||
if test x$use_qr != xno; then
|
||||
BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
|
||||
fi
|
||||
@ -1474,13 +1472,6 @@ if test x$use_pkgconfig = xyes; then
|
||||
]
|
||||
)
|
||||
else
|
||||
if test x$use_openssl != xno; then
|
||||
AC_CHECK_HEADER([openssl/crypto.h],,[use_openssl=no])
|
||||
AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, [use_openssl=no])
|
||||
|
||||
AC_CHECK_HEADER([openssl/ssl.h],, [use_openssl=no])
|
||||
AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, [use_openssl=no])
|
||||
fi
|
||||
|
||||
if test x$build_bitcoin_cli$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
|
||||
AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
|
||||
@ -1513,26 +1504,12 @@ else
|
||||
esac
|
||||
fi
|
||||
|
||||
if test x$enable_bip70 != xno; then
|
||||
BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], [have_protobuf=no]))
|
||||
fi
|
||||
if test x$use_qr != xno; then
|
||||
BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
|
||||
BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
|
||||
fi
|
||||
fi
|
||||
|
||||
save_CXXFLAGS="${CXXFLAGS}"
|
||||
CXXFLAGS="${CXXFLAGS} ${CRYPTO_CFLAGS} ${SSL_CFLAGS}"
|
||||
AC_CHECK_DECLS([EVP_MD_CTX_new],,,[AC_INCLUDES_DEFAULT
|
||||
#include <openssl/x509_vfy.h>
|
||||
])
|
||||
CXXFLAGS="${save_CXXFLAGS}"
|
||||
|
||||
dnl univalue check
|
||||
|
||||
need_bundled_univalue=yes
|
||||
|
||||
dnl check if libgmp is present
|
||||
AC_CHECK_HEADER([gmp.h],, AC_MSG_ERROR(libgmp headers missing))
|
||||
AC_CHECK_LIB([gmp], [__gmpz_init],GMP_LIBS=-lgmp, AC_MSG_ERROR(libgmp missing))
|
||||
@ -1540,56 +1517,6 @@ AC_CHECK_LIB([gmp], [__gmpz_init],GMP_LIBS=-lgmp, AC_MSG_ERROR(libgmp missing))
|
||||
dnl check if immer headers-only library is present
|
||||
AC_CHECK_HEADER([immer/map.hpp],, AC_MSG_ERROR(immer map headers missing))
|
||||
|
||||
if test x$build_bitcoin_wallet$build_bitcoin_cli$build_bitcoin_tx$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononononono; then
|
||||
need_bundled_univalue=no
|
||||
else
|
||||
|
||||
if test x$system_univalue != xno ; then
|
||||
found_univalue=no
|
||||
if test x$use_pkgconfig = xyes; then
|
||||
: #NOP
|
||||
m4_ifdef(
|
||||
[PKG_CHECK_MODULES],
|
||||
[
|
||||
PKG_CHECK_MODULES([UNIVALUE],[libunivalue >= 1.0.4],[found_univalue=yes],[true])
|
||||
]
|
||||
)
|
||||
else
|
||||
AC_CHECK_HEADER([univalue.h],[
|
||||
AC_CHECK_LIB([univalue], [main],[
|
||||
UNIVALUE_LIBS=-lunivalue
|
||||
found_univalue=yes
|
||||
],[true])
|
||||
],[true])
|
||||
fi
|
||||
|
||||
if test x$found_univalue = xyes ; then
|
||||
system_univalue=yes
|
||||
need_bundled_univalue=no
|
||||
elif test x$system_univalue = xyes ; then
|
||||
AC_MSG_ERROR([univalue not found])
|
||||
else
|
||||
system_univalue=no
|
||||
fi
|
||||
fi
|
||||
|
||||
if test x$need_bundled_univalue = xyes ; then
|
||||
UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
|
||||
UNIVALUE_LIBS='univalue/libunivalue.la'
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
|
||||
AC_SUBST(UNIVALUE_CFLAGS)
|
||||
AC_SUBST(UNIVALUE_LIBS)
|
||||
|
||||
|
||||
if test x$have_protobuf != xno &&
|
||||
test x$enable_bip70 != xno; then
|
||||
BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([whether to build dashd])
|
||||
AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
|
||||
AC_MSG_RESULT($build_bitcoind)
|
||||
@ -1738,33 +1665,6 @@ if test x$bitcoin_enable_qt != xno; then
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([whether to build BIP70 support])
|
||||
if test x$have_protobuf = xno; then
|
||||
if test x$enable_bip70 = xyes; then
|
||||
AC_MSG_ERROR(protobuf missing)
|
||||
fi
|
||||
enable_bip70=no
|
||||
AC_MSG_RESULT(no)
|
||||
elif test x$use_openssl = xno; then
|
||||
if test x$enable_bip70 = xyes; then
|
||||
AC_MSG_ERROR(OpenSSL missing)
|
||||
fi
|
||||
enable_bip70=no
|
||||
AC_MSG_RESULT(no)
|
||||
else
|
||||
if test x$enable_bip70 != xno; then
|
||||
AC_DEFINE([ENABLE_BIP70],[1],[Define if BIP70 support should be compiled in])
|
||||
enable_bip70=yes
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test x$use_openssl = xyes; then
|
||||
AC_DEFINE([USE_OPENSSL],[1],[Define to 1 to use OpenSSL])
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
|
||||
@ -1809,7 +1709,6 @@ AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
|
||||
AM_CONDITIONAL([ENABLE_FUZZ],[test x$enable_fuzz = xyes])
|
||||
AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
|
||||
AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
|
||||
AM_CONDITIONAL([ENABLE_BIP70],[test x$enable_bip70 = xyes])
|
||||
AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
|
||||
AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
|
||||
AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
|
||||
@ -1852,6 +1751,7 @@ AC_SUBST(DEBUG_CPPFLAGS)
|
||||
AC_SUBST(WARN_CXXFLAGS)
|
||||
AC_SUBST(NOWARN_CXXFLAGS)
|
||||
AC_SUBST(DEBUG_CXXFLAGS)
|
||||
AC_SUBST(COMPAT_LDFLAGS)
|
||||
AC_SUBST(ERROR_CXXFLAGS)
|
||||
AC_SUBST(GPROF_CXXFLAGS)
|
||||
AC_SUBST(GPROF_LDFLAGS)
|
||||
@ -1875,15 +1775,12 @@ AC_SUBST(BOOST_LIBS)
|
||||
AC_SUBST(TESTDEFS)
|
||||
AC_SUBST(MINIUPNPC_CPPFLAGS)
|
||||
AC_SUBST(MINIUPNPC_LIBS)
|
||||
AC_SUBST(CRYPTO_LIBS)
|
||||
AC_SUBST(SSL_LIBS)
|
||||
AC_SUBST(GMP_LIBS)
|
||||
AC_SUBST(NATPMP_CPPFLAGS)
|
||||
AC_SUBST(NATPMP_LIBS)
|
||||
AC_SUBST(EVENT_LIBS)
|
||||
AC_SUBST(EVENT_PTHREADS_LIBS)
|
||||
AC_SUBST(ZMQ_LIBS)
|
||||
AC_SUBST(PROTOBUF_LIBS)
|
||||
AC_SUBST(QR_LIBS)
|
||||
AC_SUBST(DSYMUTIL_FLAT)
|
||||
AC_SUBST(HAVE_FDATASYNC)
|
||||
@ -1925,11 +1822,7 @@ PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
|
||||
unset PKG_CONFIG_LIBDIR
|
||||
PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
|
||||
|
||||
if test x$need_bundled_univalue = xyes; then
|
||||
AC_CONFIG_SUBDIRS([src/univalue])
|
||||
fi
|
||||
|
||||
ac_configure_args="${ac_configure_args} --disable-shared --with-pic --enable-benchmark=no --enable-module-recovery"
|
||||
ac_configure_args="${ac_configure_args} --disable-shared --with-pic --enable-benchmark=no --enable-module-recovery --disable-openssl-tests"
|
||||
AC_CONFIG_SUBDIRS([src/secp256k1])
|
||||
|
||||
AC_OUTPUT
|
||||
@ -1947,10 +1840,8 @@ echo "Options used to compile and link:"
|
||||
echo " with wallet = $enable_wallet"
|
||||
echo " with gui / qt = $bitcoin_enable_qt"
|
||||
if test x$bitcoin_enable_qt != xno; then
|
||||
echo " with bip70 = $enable_bip70"
|
||||
echo " with qr = $use_qr"
|
||||
fi
|
||||
echo " with openssl = $use_openssl"
|
||||
echo " with zmq = $use_zmq"
|
||||
echo " with test = $use_tests"
|
||||
echo " with bench = $use_bench"
|
||||
@ -1972,10 +1863,10 @@ echo " target os = $TARGET_OS"
|
||||
echo " build os = $BUILD_OS"
|
||||
echo
|
||||
echo " CC = $CC"
|
||||
echo " CFLAGS = $CFLAGS"
|
||||
echo " CFLAGS = $PTHREAD_CFLAGS $CFLAGS"
|
||||
echo " CPPFLAGS = $DEBUG_CPPFLAGS $HARDENED_CPPFLAGS $CPPFLAGS"
|
||||
echo " CXX = $CXX"
|
||||
echo " CXXFLAGS = $DEBUG_CXXFLAGS $HARDENED_CXXFLAGS $WARN_CXXFLAGS $NOWARN_CXXFLAGS $ERROR_CXXFLAGS $GPROF_CXXFLAGS $CXXFLAGS"
|
||||
echo " LDFLAGS = $PTHREAD_CFLAGS $HARDENED_LDFLAGS $GPROF_LDFLAGS $LDFLAGS"
|
||||
echo " LDFLAGS = $PTHREAD_LIBS $HARDENED_LDFLAGS $GPROF_LDFLAGS $LDFLAGS"
|
||||
echo " ARFLAGS = $ARFLAGS"
|
||||
echo
|
||||
|
@ -4,13 +4,14 @@ FROM ubuntu:focal
|
||||
ENV DEBIAN_FRONTEND="noninteractive" TZ="Europe/London"
|
||||
|
||||
# Build and base stuff
|
||||
# (zlib1g-dev and libssl-dev are needed for the Qt host binary builds, but should not be used by target binaries)
|
||||
# (zlib1g-dev is needed for the Qt host binary builds, but should not be used by target binaries)
|
||||
ENV APT_ARGS="-y --no-install-recommends --no-upgrade"
|
||||
RUN dpkg --add-architecture i386
|
||||
RUN apt-get update && apt-get install $APT_ARGS \
|
||||
autotools-dev \
|
||||
automake \
|
||||
autoconf \
|
||||
bison \
|
||||
build-essential \
|
||||
bsdmainutils \
|
||||
curl \
|
||||
@ -19,10 +20,10 @@ RUN apt-get update && apt-get install $APT_ARGS \
|
||||
cmake \
|
||||
git \
|
||||
g++ \
|
||||
gettext \
|
||||
wget \
|
||||
unzip \
|
||||
libtool \
|
||||
libssl-dev \
|
||||
m4 \
|
||||
pkg-config \
|
||||
python3 \
|
||||
@ -38,7 +39,8 @@ RUN pip3 install \
|
||||
jinja2 \
|
||||
pyzmq \
|
||||
vulture==2.3 \
|
||||
yq
|
||||
yq \
|
||||
multiprocess
|
||||
|
||||
# dash_hash
|
||||
RUN git clone --depth 1 --no-tags https://github.com/dashpay/dash_hash
|
||||
@ -51,7 +53,7 @@ ARG GROUP_ID=1000
|
||||
ENV USER_ID ${USER_ID}
|
||||
ENV GROUP_ID ${GROUP_ID}
|
||||
RUN groupadd -g ${GROUP_ID} dash
|
||||
RUN useradd -u ${USER_ID} -g dash -s /bin/bash -m -d /dash dash
|
||||
RUN useradd -u ${USER_ID} -g dash -s /bin/bash -m -d /home/dash dash
|
||||
|
||||
# Packages needed for all target builds
|
||||
RUN apt-get update && apt-get install $APT_ARGS \
|
||||
@ -77,7 +79,7 @@ RUN apt-get update && apt-get install $APT_ARGS \
|
||||
xorriso \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ARG CPPCHECK_VERSION=2.4
|
||||
ARG CPPCHECK_VERSION=2.8
|
||||
RUN curl -sL "https://github.com/danmar/cppcheck/archive/${CPPCHECK_VERSION}.tar.gz" | tar -xvzf - --directory /tmp/
|
||||
RUN cd /tmp/cppcheck-${CPPCHECK_VERSION} && mkdir build && cd build && cmake .. && cmake --build . -j 8
|
||||
ENV PATH "/tmp/cppcheck-${CPPCHECK_VERSION}/build/bin:${PATH}"
|
||||
@ -99,14 +101,16 @@ RUN \
|
||||
update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix; \
|
||||
exit 0
|
||||
|
||||
RUN mkdir /dash-src && \
|
||||
RUN \
|
||||
mkdir -p /src/dash && \
|
||||
mkdir -p /cache/ccache && \
|
||||
mkdir /cache/depends && \
|
||||
mkdir /cache/sdk-sources && \
|
||||
chown $USER_ID:$GROUP_ID /dash-src && \
|
||||
chown $USER_ID:$GROUP_ID /cache && \
|
||||
chown $USER_ID:$GROUP_ID /cache -R
|
||||
chown ${USER_ID}:${GROUP_ID} /src && \
|
||||
chown ${USER_ID}:${GROUP_ID} -R /src && \
|
||||
chown ${USER_ID}:${GROUP_ID} /cache && \
|
||||
chown ${USER_ID}:${GROUP_ID} -R /cache
|
||||
|
||||
WORKDIR /dash-src
|
||||
WORKDIR /src/dash
|
||||
|
||||
USER dash
|
||||
|
@ -5,15 +5,15 @@ LABEL description="Dockerised DashCore, built from Travis"
|
||||
ARG USER_ID
|
||||
ARG GROUP_ID
|
||||
|
||||
ENV HOME /dash
|
||||
ENV HOME /home/dash
|
||||
|
||||
# add user with specified (or default) user/group ids
|
||||
ENV USER_ID ${USER_ID:-1000}
|
||||
ENV GROUP_ID ${GROUP_ID:-1000}
|
||||
RUN groupadd -g ${GROUP_ID} dash
|
||||
RUN useradd -u ${USER_ID} -g dash -s /bin/bash -m -d /dash dash
|
||||
RUN mkdir /dash/.dashcore
|
||||
RUN chown dash:dash -R /dash
|
||||
RUN groupadd -g ${GROUP_ID} dash && \
|
||||
useradd -u ${USER_ID} -g dash -s /bin/bash -m -d /home/dash dash && \
|
||||
mkdir /home/dash/.dashcore && \
|
||||
chown ${USER_ID}:${GROUP_ID} -R /home/dash
|
||||
|
||||
COPY bin/* /usr/local/bin/
|
||||
|
||||
@ -21,8 +21,8 @@ RUN chmod a+x /usr/local/bin/*
|
||||
|
||||
USER dash
|
||||
|
||||
VOLUME ["/dash"]
|
||||
VOLUME ["/home/dash"]
|
||||
|
||||
EXPOSE 9998 9999 19998 19999
|
||||
|
||||
WORKDIR /dash
|
||||
WORKDIR /home/dash
|
||||
|
@ -16,7 +16,7 @@ RUN apt-get update && \
|
||||
wget \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
WORKDIR /dash
|
||||
WORKDIR /home/dash
|
||||
|
||||
COPY . .
|
||||
|
||||
@ -38,8 +38,8 @@ RUN make -j`nproc | awk '{x=$1/2; print x}'` && make install
|
||||
|
||||
RUN mkdir built-target && \
|
||||
case "$TARGETPLATFORM" in \
|
||||
"linux/arm64") cp depends/arm-linux-gnueabihf/bin/dash* /dash/built-target ;; \
|
||||
"linux/amd64") cp depends/x86_64-pc-linux-gnu/bin/dash* /dash/built-target ;; \
|
||||
"linux/arm64") cp depends/arm-linux-gnueabihf/bin/dash* /home/dash/built-target ;; \
|
||||
"linux/amd64") cp depends/x86_64-pc-linux-gnu/bin/dash* /home/dash/built-target ;; \
|
||||
esac
|
||||
|
||||
FROM ubuntu:focal
|
||||
@ -50,15 +50,15 @@ ARG USER_ID
|
||||
ARG GROUP_ID
|
||||
ARG TAG
|
||||
|
||||
ENV HOME /dash
|
||||
ENV HOME /home/dash
|
||||
|
||||
# add user with specified (or default) user/group ids
|
||||
ENV USER_ID ${USER_ID:-1000}
|
||||
ENV GROUP_ID ${GROUP_ID:-1000}
|
||||
RUN groupadd -g ${GROUP_ID} dash && \
|
||||
useradd -u ${USER_ID} -g dash -s /bin/bash -m -d /dash dash && \
|
||||
mkdir /dash/.dashcore && \
|
||||
chown dash:dash -R /dash
|
||||
useradd -u ${USER_ID} -g dash -s /bin/bash -m -d /home/dash dash && \
|
||||
mkdir /home/dash/.dashcore && \
|
||||
chown ${USER_ID}:${GROUP_ID} -R /home/dash
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get -y install --no-install-recommends \
|
||||
@ -66,15 +66,15 @@ RUN apt-get update && \
|
||||
ca-certificates \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY --from=builder /dash/built-target/dash* /usr/local/bin
|
||||
COPY --from=builder /home/dash/built-target/dash* /usr/local/bin
|
||||
|
||||
USER dash
|
||||
|
||||
VOLUME ["/dash"]
|
||||
VOLUME ["/home/dash"]
|
||||
|
||||
COPY docker/docker-entrypoint.sh /docker-entrypoint.sh
|
||||
ENTRYPOINT ["/docker-entrypoint.sh"]
|
||||
|
||||
EXPOSE 9998 9999 19998 19999
|
||||
|
||||
WORKDIR /dash
|
||||
WORKDIR /home/dash
|
||||
|
@ -7,15 +7,15 @@ ARG USER_ID
|
||||
ARG GROUP_ID
|
||||
ARG BRANCH
|
||||
|
||||
ENV HOME /dash
|
||||
ENV HOME /home/dash
|
||||
|
||||
# add user with specified (or default) user/group ids
|
||||
ENV USER_ID ${USER_ID:-1000}
|
||||
ENV GROUP_ID ${GROUP_ID:-1000}
|
||||
RUN groupadd -g ${GROUP_ID} dash && \
|
||||
useradd -u ${USER_ID} -g dash -s /bin/bash -m -d /dash dash && \
|
||||
mkdir /dash/.dashcore && \
|
||||
chown dash:dash -R /dash
|
||||
useradd -u ${USER_ID} -g dash -s /bin/bash -m -d /home/dash dash && \
|
||||
mkdir /home/dash/.dashcore && \
|
||||
chown ${USER_ID}:${GROUP_ID} -R /home/dash
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get -y install --no-install-recommends \
|
||||
@ -23,23 +23,23 @@ RUN apt-get update && \
|
||||
ca-certificates \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY dashcore-binaries/${BRANCH}/dashcore* /dash
|
||||
COPY dashcore-binaries/${BRANCH}/dashcore* /home/dash
|
||||
|
||||
RUN mach=$(uname -m) \
|
||||
&& case $mach in aarch64) arch="aarch64-linux-gnu"; ;; x86_64) arch="x86_64-linux-gnu"; ;; *) echo "ERROR: Machine type $mach not supported."; ;; esac \
|
||||
&& cd /dash \
|
||||
&& cd /home/dash \
|
||||
&& tar xvzf dashcore*$arch.tar.gz \
|
||||
&& echo $(ls -1 /dash) \
|
||||
&& echo $(ls -1 /home/dash) \
|
||||
&& cp dashcore-*/bin/* /usr/local/bin \
|
||||
&& rm -rf dash*
|
||||
|
||||
USER dash
|
||||
|
||||
VOLUME ["/dash"]
|
||||
VOLUME ["/home/dash"]
|
||||
|
||||
COPY dash/contrib/containers/deploy/docker-entrypoint.sh /docker-entrypoint.sh
|
||||
ENTRYPOINT ["/docker-entrypoint.sh"]
|
||||
|
||||
EXPOSE 9998 9999 19998 19999
|
||||
|
||||
WORKDIR /dash
|
||||
WORKDIR /home/dash
|
||||
|
@ -6,15 +6,15 @@ ARG USER_ID
|
||||
ARG GROUP_ID
|
||||
ARG TAG
|
||||
|
||||
ENV HOME /dash
|
||||
ENV HOME /home/dash
|
||||
|
||||
# add user with specified (or default) user/group ids
|
||||
ENV USER_ID ${USER_ID:-1000}
|
||||
ENV GROUP_ID ${GROUP_ID:-1000}
|
||||
RUN groupadd -g ${GROUP_ID} dash && \
|
||||
useradd -u ${USER_ID} -g dash -s /bin/bash -m -d /dash dash && \
|
||||
mkdir /dash/.dashcore && \
|
||||
chown dash:dash -R /dash
|
||||
useradd -u ${USER_ID} -g dash -s /bin/bash -m -d /home/dash dash && \
|
||||
mkdir /home/dash/.dashcore && \
|
||||
chown ${USER_ID}:${GROUP_ID} -R /home/dash
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get -y install --no-install-recommends \
|
||||
@ -32,11 +32,11 @@ RUN mach=$(uname -m) \
|
||||
|
||||
USER dash
|
||||
|
||||
VOLUME ["/dash"]
|
||||
VOLUME ["/home/dash"]
|
||||
|
||||
COPY docker-entrypoint.sh /docker-entrypoint.sh
|
||||
ENTRYPOINT ["/docker-entrypoint.sh"]
|
||||
|
||||
EXPOSE 9998 9999 19998 19999
|
||||
|
||||
WORKDIR /dash
|
||||
WORKDIR /home/dash
|
||||
|
@ -8,19 +8,34 @@ INCLUDE+ ci/Dockerfile
|
||||
# just started configuring this image, give us root access
|
||||
USER root
|
||||
|
||||
# Make development environment more standalone
|
||||
RUN apt-get update && \
|
||||
apt-get install $APT_ARGS \
|
||||
apt-cacher-ng \
|
||||
gdb \
|
||||
gpg \
|
||||
lsb-release \
|
||||
nano \
|
||||
openssh-client \
|
||||
screen \
|
||||
sudo \
|
||||
zsh \
|
||||
&& \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Discourage root access, this is an interactive instance
|
||||
#
|
||||
# Sometimes these commands are run repetitively _after_ the non-sudo
|
||||
# user was introduced and therefore these commands would fail
|
||||
# To mitigate the build halting, we've added "|| true" so that it
|
||||
# To mitigate the build halting, you can add "|| true" so that it
|
||||
# unconditionally returns 0
|
||||
#
|
||||
RUN apt-get update && apt-get install $APT_ARGS sudo && rm -rf /var/lib/apt/lists/*
|
||||
RUN usermod -aG sudo dash
|
||||
RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
|
||||
|
||||
# Make development environment more standalone
|
||||
RUN apt-get update && apt-get install $APT_ARGS nano openssh-client zsh gdb && rm -rf /var/lib/apt/lists/*
|
||||
# Also, we create the group `docker` and add our user to it to meet
|
||||
# Gitian's requirements
|
||||
#
|
||||
RUN groupadd docker && \
|
||||
usermod -aG sudo,docker dash && \
|
||||
echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
|
||||
|
||||
# Disable noninteractive mode
|
||||
ENV DEBIAN_FRONTEND="dialog"
|
||||
|
@ -26,4 +26,26 @@ services:
|
||||
- type: bind
|
||||
# source: /host/$PWD # Workaround needed on non-Linux hosts
|
||||
source: ../../..
|
||||
target: /dash-src
|
||||
target: /src/dash
|
||||
|
||||
# Sharing your ccache
|
||||
#
|
||||
# As the container is supposed to be a reproducible replica of the build
|
||||
# environment 1:1, it will not interact with your filesystem except as
|
||||
# defined in this file. This comes with the disadvantage of having to engage
|
||||
# in repeated re-compilation of object files, which will prolong your build
|
||||
# times and make the process more arduous. Therefore it is recommended to share
|
||||
# your local ccache with the container. The example below connects to a remote
|
||||
# samba share and can be adopted to fit your needs.
|
||||
#
|
||||
# NOTE: Only the first line is a continuation of the services.container.volumes
|
||||
# definition
|
||||
|
||||
# - cache:/home/dash/.ccache
|
||||
#
|
||||
# volumes:
|
||||
# cache:
|
||||
# driver_opts:
|
||||
# type: cifs
|
||||
# o: "username=example,password=changemeplsfix"
|
||||
# device: "//127.0.0.1/cache"
|
||||
|
@ -17,13 +17,6 @@ _dash_rpc() {
|
||||
$dash_cli "${rpcargs[@]}" "$@"
|
||||
}
|
||||
|
||||
# Add wallet accounts to COMPREPLY
|
||||
_dash_accounts() {
|
||||
local accounts
|
||||
accounts=$(_dash_rpc listaccounts | awk -F '"' '{ print $2 }')
|
||||
COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W "$accounts" -- "$cur" ) )
|
||||
}
|
||||
|
||||
_dash_cli() {
|
||||
local cur prev words=() cword
|
||||
local dash_cli
|
||||
@ -60,10 +53,9 @@ _dash_cli() {
|
||||
if ((cword > 3)); then
|
||||
case ${words[cword-3]} in
|
||||
addmultisigaddress)
|
||||
_dash_accounts
|
||||
return 0
|
||||
;;
|
||||
getbalance|gettxout|importaddress|importpubkey|importprivkey|listreceivedbyaccount|listreceivedbyaddress|listsinceblock)
|
||||
getbalance|gettxout|importaddress|importpubkey|importprivkey|listreceivedbyaddress|listsinceblock)
|
||||
COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
|
||||
return 0
|
||||
;;
|
||||
@ -80,14 +72,10 @@ _dash_cli() {
|
||||
COMPREPLY=( $( compgen -W "add remove" -- "$cur" ) )
|
||||
return 0
|
||||
;;
|
||||
fundrawtransaction|getblock|getblockheader|getmempoolancestors|getmempooldescendants|getrawtransaction|gettransaction|listaccounts|listreceivedbyaccount|listreceivedbyaddress|sendrawtransaction)
|
||||
fundrawtransaction|getblock|getblockheader|getmempoolancestors|getmempooldescendants|getrawtransaction|gettransaction|listreceivedbyaddress|sendrawtransaction)
|
||||
COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
|
||||
return 0
|
||||
;;
|
||||
move|setaccount)
|
||||
_dash_accounts
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
@ -96,12 +84,11 @@ _dash_cli() {
|
||||
_filedir
|
||||
return 0
|
||||
;;
|
||||
getaddednodeinfo|getrawmempool|lockunspent|setgenerate)
|
||||
getaddednodeinfo|getrawmempool|lockunspent)
|
||||
COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
|
||||
return 0
|
||||
;;
|
||||
getaccountaddress|getaddressesbyaccount|getbalance|getnewaddress|getreceivedbyaccount|listtransactions|move|sendfrom|sendmany)
|
||||
_dash_accounts
|
||||
getbalance|getnewaddress|listtransactions|sendmany)
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
@ -15,7 +15,7 @@ _dashd() {
|
||||
_get_comp_words_by_ref -n = cur prev words cword
|
||||
|
||||
case "$cur" in
|
||||
-conf=*|-pid=*|-loadblock=*|-rootcertificates=*|-rpccookiefile=*|-wallet=*)
|
||||
-conf=*|-pid=*|-loadblock=*|-rpccookiefile=*|-wallet=*)
|
||||
cur="${cur#*=}"
|
||||
_filedir
|
||||
return 0
|
||||
|
@ -9,7 +9,6 @@ Build-Depends: debhelper,
|
||||
libtool,
|
||||
bash-completion,
|
||||
libdb4.8++-dev,
|
||||
libssl-dev,
|
||||
pkg-config,
|
||||
libevent-dev,
|
||||
libboost-filesystem1.48-dev | libboost-filesystem-dev (>> 1.47),
|
||||
@ -19,7 +18,6 @@ Build-Depends: debhelper,
|
||||
qt4-qmake, libqt4-dev,
|
||||
qttools5-dev-tools, qttools5-dev,
|
||||
libqrencode-dev,
|
||||
libprotobuf-dev, protobuf-compiler,
|
||||
python,
|
||||
libzmq3-dev
|
||||
Standards-Version: 3.9.2
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
override_dh_auto_clean:
|
||||
if [ -f Makefile ]; then $(MAKE) distclean; fi
|
||||
rm -rf Makefile.in aclocal.m4 configure src/Makefile.in src/dash-config.h.in src/build-aux src/qt/Makefile.in src/qt/test/Makefile.in src/test/Makefile.in
|
||||
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
|
||||
|
||||
QT=$(shell dpkg-vendor --derives-from Ubuntu && echo qt4 || echo qt5)
|
||||
|
||||
|
@ -159,7 +159,7 @@ repository (requires pngcrush).
|
||||
security-check.py and test-security-check.py
|
||||
============================================
|
||||
|
||||
Perform basic ELF security checks on a series of executables.
|
||||
Perform basic security checks on a series of executables.
|
||||
|
||||
symbol-check.py
|
||||
===============
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
import sys
|
||||
import re
|
||||
from multiprocess import Pool
|
||||
|
||||
MAPPING = {
|
||||
'core_read.cpp': 'core_io.cpp',
|
||||
@ -37,7 +38,7 @@ if __name__=="__main__":
|
||||
|
||||
RE = re.compile("^#include <(.*)>")
|
||||
|
||||
def handle_module(module):
|
||||
def handle_module(arg):
|
||||
module = module_name(arg)
|
||||
if module is None:
|
||||
print("Ignoring file %s (does not constitute module)\n" % arg)
|
||||
@ -45,6 +46,26 @@ if __name__=="__main__":
|
||||
files[arg] = module
|
||||
deps[module] = set()
|
||||
|
||||
def handle_module2(module):
|
||||
# Build the transitive closure of dependencies of module
|
||||
closure = dict()
|
||||
for dep in deps[module]:
|
||||
closure[dep] = []
|
||||
while True:
|
||||
old_size = len(closure)
|
||||
old_closure_keys = sorted(closure.keys())
|
||||
for src in old_closure_keys:
|
||||
for dep in deps[src]:
|
||||
if dep not in closure:
|
||||
closure[dep] = closure[src] + [src]
|
||||
if len(closure) == old_size:
|
||||
break
|
||||
# If module is in its own transitive closure, it's a circular dependency; check if it is the shortest
|
||||
if module in closure:
|
||||
return [module] + closure[module]
|
||||
|
||||
return None
|
||||
|
||||
|
||||
# Iterate over files, and create list of modules
|
||||
for arg in sys.argv[1:]:
|
||||
@ -71,32 +92,20 @@ if __name__=="__main__":
|
||||
def shortest_c_dep():
|
||||
have_cycle = False
|
||||
|
||||
def handle_module(module, shortest_cycle):
|
||||
|
||||
# Build the transitive closure of dependencies of module
|
||||
closure = dict()
|
||||
for dep in deps[module]:
|
||||
closure[dep] = []
|
||||
while True:
|
||||
old_size = len(closure)
|
||||
old_closure_keys = sorted(closure.keys())
|
||||
for src in old_closure_keys:
|
||||
for dep in deps[src]:
|
||||
if dep not in closure:
|
||||
closure[dep] = closure[src] + [src]
|
||||
if len(closure) == old_size:
|
||||
break
|
||||
# If module is in its own transitive closure, it's a circular dependency; check if it is the shortest
|
||||
if module in closure and (shortest_cycle is None or len(closure[module]) + 1 < len(shortest_cycle)):
|
||||
shortest_cycle = [module] + closure[module]
|
||||
|
||||
return shortest_cycle
|
||||
sorted_keys = None
|
||||
|
||||
while True:
|
||||
|
||||
shortest_cycles = None
|
||||
for module in sorted(deps.keys()):
|
||||
shortest_cycles = handle_module(module, shortest_cycles)
|
||||
if sorted_keys is None:
|
||||
sorted_keys = sorted(deps.keys())
|
||||
|
||||
with Pool(8) as pool:
|
||||
cycles = pool.map(handle_module2, sorted_keys)
|
||||
|
||||
for cycle in cycles:
|
||||
if cycle is not None and (shortest_cycles is None or len(cycle) < len(shortest_cycles)):
|
||||
shortest_cycles = cycle
|
||||
|
||||
if shortest_cycles is None:
|
||||
break
|
||||
@ -104,7 +113,8 @@ if __name__=="__main__":
|
||||
module = shortest_cycles[0]
|
||||
print("Circular dependency: %s" % (" -> ".join(shortest_cycles + [module])))
|
||||
# And then break the dependency to avoid repeating in other cycles
|
||||
deps[shortest_cycles[-1]] = deps[shortest_cycles[-1]] - set([module])
|
||||
deps[shortest_cycles[-1]] -= {module}
|
||||
sorted_keys = None
|
||||
have_cycle = True
|
||||
|
||||
if have_cycle:
|
||||
|
@ -3,41 +3,42 @@
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
'''
|
||||
Perform basic ELF security checks on a series of executables.
|
||||
Perform basic security checks on a series of executables.
|
||||
Exit status will be 0 if successful, and the program will be silent.
|
||||
Otherwise the exit status will be 1 and it will log which executables failed which checks.
|
||||
Needs `readelf` (for ELF) and `objdump` (for PE).
|
||||
Needs `readelf` (for ELF), `objdump` (for PE) and `otool` (for MACHO).
|
||||
'''
|
||||
import subprocess
|
||||
import sys
|
||||
import os
|
||||
|
||||
from typing import List, Optional
|
||||
|
||||
READELF_CMD = os.getenv('READELF', '/usr/bin/readelf')
|
||||
OBJDUMP_CMD = os.getenv('OBJDUMP', '/usr/bin/objdump')
|
||||
NONFATAL = {} # checks which are non-fatal for now but only generate a warning
|
||||
OTOOL_CMD = os.getenv('OTOOL', '/usr/bin/otool')
|
||||
|
||||
def check_ELF_PIE(executable):
|
||||
def run_command(command) -> str:
|
||||
p = subprocess.run(command, stdout=subprocess.PIPE, check=True, universal_newlines=True)
|
||||
return p.stdout
|
||||
|
||||
def check_ELF_PIE(executable) -> bool:
|
||||
'''
|
||||
Check for position independent executable (PIE), allowing for address space randomization.
|
||||
'''
|
||||
p = subprocess.Popen([READELF_CMD, '-h', '-W', executable], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, universal_newlines=True)
|
||||
(stdout, stderr) = p.communicate()
|
||||
if p.returncode:
|
||||
raise IOError('Error opening file')
|
||||
stdout = run_command([READELF_CMD, '-h', '-W', executable])
|
||||
|
||||
ok = False
|
||||
for line in stdout.splitlines():
|
||||
line = line.split()
|
||||
if len(line)>=2 and line[0] == 'Type:' and line[1] == 'DYN':
|
||||
tokens = line.split()
|
||||
if len(line)>=2 and tokens[0] == 'Type:' and tokens[1] == 'DYN':
|
||||
ok = True
|
||||
return ok
|
||||
|
||||
def get_ELF_program_headers(executable):
|
||||
'''Return type and flags for ELF program headers'''
|
||||
p = subprocess.Popen([READELF_CMD, '-l', '-W', executable], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, universal_newlines=True)
|
||||
(stdout, stderr) = p.communicate()
|
||||
if p.returncode:
|
||||
raise IOError('Error opening file')
|
||||
stdout = run_command([READELF_CMD, '-l', '-W', executable])
|
||||
|
||||
in_headers = False
|
||||
count = 0
|
||||
headers = []
|
||||
@ -61,7 +62,7 @@ def get_ELF_program_headers(executable):
|
||||
count += 1
|
||||
return headers
|
||||
|
||||
def check_ELF_NX(executable):
|
||||
def check_ELF_NX(executable) -> bool:
|
||||
'''
|
||||
Check that no sections are writable and executable (including the stack)
|
||||
'''
|
||||
@ -74,7 +75,7 @@ def check_ELF_NX(executable):
|
||||
have_wx = True
|
||||
return have_gnu_stack and not have_wx
|
||||
|
||||
def check_ELF_RELRO(executable):
|
||||
def check_ELF_RELRO(executable) -> bool:
|
||||
'''
|
||||
Check for read-only relocations.
|
||||
GNU_RELRO program header must exist
|
||||
@ -83,7 +84,8 @@ def check_ELF_RELRO(executable):
|
||||
have_gnu_relro = False
|
||||
for (typ, flags) in get_ELF_program_headers(executable):
|
||||
# Note: not checking flags == 'R': here as linkers set the permission differently
|
||||
# This does not affect security: the permission flags of the GNU_RELRO program header are ignored, the PT_LOAD header determines the effective permissions.
|
||||
# This does not affect security: the permission flags of the GNU_RELRO program
|
||||
# header are ignored, the PT_LOAD header determines the effective permissions.
|
||||
# However, the dynamic linker need to write to this area so these are RW.
|
||||
# Glibc itself takes care of mprotecting this area R after relocations are finished.
|
||||
# See also https://marc.info/?l=binutils&m=1498883354122353
|
||||
@ -91,77 +93,133 @@ def check_ELF_RELRO(executable):
|
||||
have_gnu_relro = True
|
||||
|
||||
have_bindnow = False
|
||||
p = subprocess.Popen([READELF_CMD, '-d', '-W', executable], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, universal_newlines=True)
|
||||
(stdout, stderr) = p.communicate()
|
||||
if p.returncode:
|
||||
raise IOError('Error opening file')
|
||||
stdout = run_command([READELF_CMD, '-d', '-W', executable])
|
||||
|
||||
for line in stdout.splitlines():
|
||||
tokens = line.split()
|
||||
if len(tokens)>1 and tokens[1] == '(BIND_NOW)' or (len(tokens)>2 and tokens[1] == '(FLAGS)' and 'BIND_NOW' in tokens[2:]):
|
||||
have_bindnow = True
|
||||
return have_gnu_relro and have_bindnow
|
||||
|
||||
def check_ELF_Canary(executable):
|
||||
def check_ELF_Canary(executable) -> bool:
|
||||
'''
|
||||
Check for use of stack canary
|
||||
'''
|
||||
p = subprocess.Popen([READELF_CMD, '--dyn-syms', '-W', executable], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, universal_newlines=True)
|
||||
(stdout, stderr) = p.communicate()
|
||||
if p.returncode:
|
||||
raise IOError('Error opening file')
|
||||
stdout = run_command([READELF_CMD, '--dyn-syms', '-W', executable])
|
||||
|
||||
ok = False
|
||||
for line in stdout.splitlines():
|
||||
if '__stack_chk_fail' in line:
|
||||
ok = True
|
||||
return ok
|
||||
|
||||
def get_PE_dll_characteristics(executable):
|
||||
'''
|
||||
Get PE DllCharacteristics bits.
|
||||
Returns a tuple (arch,bits) where arch is 'i386:x86-64' or 'i386'
|
||||
and bits is the DllCharacteristics value.
|
||||
'''
|
||||
p = subprocess.Popen([OBJDUMP_CMD, '-x', executable], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, universal_newlines=True)
|
||||
(stdout, stderr) = p.communicate()
|
||||
if p.returncode:
|
||||
raise IOError('Error opening file')
|
||||
arch = ''
|
||||
def get_PE_dll_characteristics(executable) -> int:
|
||||
'''Get PE DllCharacteristics bits'''
|
||||
stdout = run_command([OBJDUMP_CMD, '-x', executable])
|
||||
|
||||
bits = 0
|
||||
for line in stdout.splitlines():
|
||||
tokens = line.split()
|
||||
if len(tokens)>=2 and tokens[0] == 'architecture:':
|
||||
arch = tokens[1].rstrip(',')
|
||||
if len(tokens)>=2 and tokens[0] == 'DllCharacteristics':
|
||||
bits = int(tokens[1],16)
|
||||
return (arch,bits)
|
||||
return bits
|
||||
|
||||
IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA = 0x0020
|
||||
IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE = 0x0040
|
||||
IMAGE_DLL_CHARACTERISTICS_NX_COMPAT = 0x0100
|
||||
|
||||
def check_PE_DYNAMIC_BASE(executable):
|
||||
def check_PE_DYNAMIC_BASE(executable) -> bool:
|
||||
'''PIE: DllCharacteristics bit 0x40 signifies dynamicbase (ASLR)'''
|
||||
(arch,bits) = get_PE_dll_characteristics(executable)
|
||||
reqbits = IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE
|
||||
return (bits & reqbits) == reqbits
|
||||
bits = get_PE_dll_characteristics(executable)
|
||||
return (bits & IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE) == IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE
|
||||
|
||||
# On 64 bit, must support high-entropy 64-bit address space layout randomization in addition to DYNAMIC_BASE
|
||||
# to have secure ASLR.
|
||||
def check_PE_HIGH_ENTROPY_VA(executable):
|
||||
# Must support high-entropy 64-bit address space layout randomization
|
||||
# in addition to DYNAMIC_BASE to have secure ASLR.
|
||||
def check_PE_HIGH_ENTROPY_VA(executable) -> bool:
|
||||
'''PIE: DllCharacteristics bit 0x20 signifies high-entropy ASLR'''
|
||||
(arch,bits) = get_PE_dll_characteristics(executable)
|
||||
if arch == 'i386:x86-64':
|
||||
reqbits = IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA
|
||||
else: # Unnecessary on 32-bit
|
||||
assert(arch == 'i386')
|
||||
reqbits = 0
|
||||
return (bits & reqbits) == reqbits
|
||||
bits = get_PE_dll_characteristics(executable)
|
||||
return (bits & IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA) == IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA
|
||||
|
||||
def check_PE_NX(executable):
|
||||
def check_PE_RELOC_SECTION(executable) -> bool:
|
||||
'''Check for a reloc section. This is required for functional ASLR.'''
|
||||
stdout = run_command([OBJDUMP_CMD, '-h', executable])
|
||||
|
||||
for line in stdout.splitlines():
|
||||
if '.reloc' in line:
|
||||
return True
|
||||
return False
|
||||
|
||||
def check_PE_NX(executable) -> bool:
|
||||
'''NX: DllCharacteristics bit 0x100 signifies nxcompat (DEP)'''
|
||||
(arch,bits) = get_PE_dll_characteristics(executable)
|
||||
bits = get_PE_dll_characteristics(executable)
|
||||
return (bits & IMAGE_DLL_CHARACTERISTICS_NX_COMPAT) == IMAGE_DLL_CHARACTERISTICS_NX_COMPAT
|
||||
|
||||
def get_MACHO_executable_flags(executable) -> List[str]:
|
||||
stdout = run_command([OTOOL_CMD, '-vh', executable])
|
||||
|
||||
flags = []
|
||||
for line in stdout.splitlines():
|
||||
tokens = line.split()
|
||||
# filter first two header lines
|
||||
if 'magic' in tokens or 'Mach' in tokens:
|
||||
continue
|
||||
# filter ncmds and sizeofcmds values
|
||||
flags += [t for t in tokens if not t.isdigit()]
|
||||
return flags
|
||||
|
||||
def check_MACHO_PIE(executable) -> bool:
|
||||
'''
|
||||
Check for position independent executable (PIE), allowing for address space randomization.
|
||||
'''
|
||||
flags = get_MACHO_executable_flags(executable)
|
||||
if 'PIE' in flags:
|
||||
return True
|
||||
return False
|
||||
|
||||
def check_MACHO_NOUNDEFS(executable) -> bool:
|
||||
'''
|
||||
Check for no undefined references.
|
||||
'''
|
||||
flags = get_MACHO_executable_flags(executable)
|
||||
if 'NOUNDEFS' in flags:
|
||||
return True
|
||||
return False
|
||||
|
||||
def check_MACHO_NX(executable) -> bool:
|
||||
'''
|
||||
Check for no stack execution
|
||||
'''
|
||||
flags = get_MACHO_executable_flags(executable)
|
||||
if 'ALLOW_STACK_EXECUTION' in flags:
|
||||
return False
|
||||
return True
|
||||
|
||||
def check_MACHO_LAZY_BINDINGS(executable) -> bool:
|
||||
'''
|
||||
Check for no lazy bindings.
|
||||
We don't use or check for MH_BINDATLOAD. See #18295.
|
||||
'''
|
||||
stdout = run_command([OTOOL_CMD, '-l', executable])
|
||||
|
||||
for line in stdout.splitlines():
|
||||
tokens = line.split()
|
||||
if 'lazy_bind_off' in tokens or 'lazy_bind_size' in tokens:
|
||||
if tokens[1] != '0':
|
||||
return False
|
||||
return True
|
||||
|
||||
def check_MACHO_Canary(executable) -> bool:
|
||||
'''
|
||||
Check for use of stack canary
|
||||
'''
|
||||
stdout = run_command([OTOOL_CMD, '-Iv', executable])
|
||||
|
||||
ok = False
|
||||
for line in stdout.splitlines():
|
||||
if '___stack_chk_fail' in line:
|
||||
ok = True
|
||||
return ok
|
||||
|
||||
CHECKS = {
|
||||
'ELF': [
|
||||
('PIE', check_ELF_PIE),
|
||||
@ -172,17 +230,27 @@ CHECKS = {
|
||||
'PE': [
|
||||
('DYNAMIC_BASE', check_PE_DYNAMIC_BASE),
|
||||
('HIGH_ENTROPY_VA', check_PE_HIGH_ENTROPY_VA),
|
||||
('NX', check_PE_NX)
|
||||
('NX', check_PE_NX),
|
||||
('RELOC_SECTION', check_PE_RELOC_SECTION)
|
||||
],
|
||||
'MACHO': [
|
||||
('PIE', check_MACHO_PIE),
|
||||
('NOUNDEFS', check_MACHO_NOUNDEFS),
|
||||
('NX', check_MACHO_NX),
|
||||
('LAZY_BINDINGS', check_MACHO_LAZY_BINDINGS),
|
||||
('Canary', check_MACHO_Canary)
|
||||
]
|
||||
}
|
||||
|
||||
def identify_executable(executable):
|
||||
def identify_executable(executable) -> Optional[str]:
|
||||
with open(filename, 'rb') as f:
|
||||
magic = f.read(4)
|
||||
if magic.startswith(b'MZ'):
|
||||
return 'PE'
|
||||
elif magic.startswith(b'\x7fELF'):
|
||||
return 'ELF'
|
||||
elif magic.startswith(b'\xcf\xfa'):
|
||||
return 'MACHO'
|
||||
return None
|
||||
|
||||
if __name__ == '__main__':
|
||||
@ -196,18 +264,12 @@ if __name__ == '__main__':
|
||||
continue
|
||||
|
||||
failed = []
|
||||
warning = []
|
||||
for (name, func) in CHECKS[etype]:
|
||||
if not func(filename):
|
||||
if name in NONFATAL:
|
||||
warning.append(name)
|
||||
else:
|
||||
failed.append(name)
|
||||
failed.append(name)
|
||||
if failed:
|
||||
print('%s: failed %s' % (filename, ' '.join(failed)))
|
||||
retval = 1
|
||||
if warning:
|
||||
print('%s: warning %s' % (filename, ' '.join(warning)))
|
||||
except IOError:
|
||||
print('%s: cannot open' % filename)
|
||||
retval = 1
|
||||
|
@ -40,7 +40,8 @@ import os
|
||||
MAX_VERSIONS = {
|
||||
'GCC': (4,8,0),
|
||||
'GLIBC': (2,17),
|
||||
'LIBATOMIC': (1,0)
|
||||
'LIBATOMIC': (1,0),
|
||||
'V': (0,5,0), # xkb (bitcoin-qt only)
|
||||
}
|
||||
# See here for a description of _IO_stdin_used:
|
||||
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=634261#109
|
||||
@ -68,6 +69,8 @@ ALLOWED_LIBRARIES = {
|
||||
'ld-linux-riscv64-lp64d.so.1', # 64-bit RISC-V dynamic linker
|
||||
# dash-qt only
|
||||
'libxcb.so.1', # part of X11
|
||||
'libxkbcommon.so.0', # keyboard keymapping
|
||||
'libxkbcommon-x11.so.0', # keyboard keymapping
|
||||
'libfontconfig.so.1', # font support
|
||||
'libfreetype.so.6', # font parsing
|
||||
'libdl.so.2' # programming interface to dynamic linker
|
||||
|
@ -43,16 +43,41 @@ class TestSecurityChecks(unittest.TestCase):
|
||||
self.assertEqual(call_security_check(cc, source, executable, ['-Wl,-znoexecstack','-fstack-protector-all','-Wl,-zrelro','-Wl,-z,now','-pie','-fPIE']),
|
||||
(0, ''))
|
||||
|
||||
def test_64bit_PE(self):
|
||||
def test_PE(self):
|
||||
source = 'test1.c'
|
||||
executable = 'test1.exe'
|
||||
cc = 'x86_64-w64-mingw32-gcc'
|
||||
write_testcode(source)
|
||||
|
||||
self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--no-nxcompat','-Wl,--no-dynamicbase','-Wl,--no-high-entropy-va']), (1, executable+': failed DYNAMIC_BASE HIGH_ENTROPY_VA NX'))
|
||||
self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--nxcompat','-Wl,--no-dynamicbase','-Wl,--no-high-entropy-va']), (1, executable+': failed DYNAMIC_BASE HIGH_ENTROPY_VA'))
|
||||
self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--nxcompat','-Wl,--dynamicbase','-Wl,--no-high-entropy-va']), (1, executable+': failed HIGH_ENTROPY_VA'))
|
||||
self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--nxcompat','-Wl,--dynamicbase','-Wl,--high-entropy-va']), (0, ''))
|
||||
self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--no-nxcompat','-Wl,--no-dynamicbase','-Wl,--no-high-entropy-va','-no-pie','-fno-PIE']),
|
||||
(1, executable+': failed DYNAMIC_BASE HIGH_ENTROPY_VA NX RELOC_SECTION'))
|
||||
self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--nxcompat','-Wl,--no-dynamicbase','-Wl,--no-high-entropy-va','-no-pie','-fno-PIE']),
|
||||
(1, executable+': failed DYNAMIC_BASE HIGH_ENTROPY_VA RELOC_SECTION'))
|
||||
self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--nxcompat','-Wl,--dynamicbase','-Wl,--no-high-entropy-va','-no-pie','-fno-PIE']),
|
||||
(1, executable+': failed HIGH_ENTROPY_VA RELOC_SECTION'))
|
||||
self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--nxcompat','-Wl,--dynamicbase','-Wl,--high-entropy-va','-no-pie','-fno-PIE']),
|
||||
(1, executable+': failed RELOC_SECTION'))
|
||||
self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--nxcompat','-Wl,--dynamicbase','-Wl,--high-entropy-va','-pie','-fPIE']),
|
||||
(0, ''))
|
||||
|
||||
def test_MACHO(self):
|
||||
source = 'test1.c'
|
||||
executable = 'test1'
|
||||
cc = 'clang'
|
||||
write_testcode(source)
|
||||
|
||||
self.assertEqual(call_security_check(cc, source, executable, ['-Wl,-no_pie','-Wl,-flat_namespace','-Wl,-allow_stack_execute','-fno-stack-protector']),
|
||||
(1, executable+': failed PIE NOUNDEFS NX LAZY_BINDINGS Canary'))
|
||||
self.assertEqual(call_security_check(cc, source, executable, ['-Wl,-no_pie','-Wl,-flat_namespace','-Wl,-allow_stack_execute','-fstack-protector-all']),
|
||||
(1, executable+': failed PIE NOUNDEFS NX LAZY_BINDINGS'))
|
||||
self.assertEqual(call_security_check(cc, source, executable, ['-Wl,-no_pie','-Wl,-flat_namespace','-fstack-protector-all']),
|
||||
(1, executable+': failed PIE NOUNDEFS LAZY_BINDINGS'))
|
||||
self.assertEqual(call_security_check(cc, source, executable, ['-Wl,-no_pie','-fstack-protector-all']),
|
||||
(1, executable+': failed PIE LAZY_BINDINGS'))
|
||||
self.assertEqual(call_security_check(cc, source, executable, ['-Wl,-no_pie','-Wl,-bind_at_load','-fstack-protector-all']),
|
||||
(1, executable+': failed PIE'))
|
||||
self.assertEqual(call_security_check(cc, source, executable, ['-Wl,-pie','-Wl,-bind_at_load','-fstack-protector-all']),
|
||||
(0, ''))
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
@ -17,7 +17,6 @@ GCOV_EXECUTABLE="gcov"
|
||||
NON_DETERMINISTIC_TESTS=(
|
||||
"blockfilter_index_tests/blockfilter_index_initial_sync" # src/checkqueue.h: In CCheckQueue::Loop(): while (queue.empty()) { ... }
|
||||
"coinselector_tests/knapsack_solver_test" # coinselector_tests.cpp: if (equal_sets(setCoinsRet, setCoinsRet2))
|
||||
"denialofservice_tests/DoS_mapOrphans" # denialofservice_tests.cpp: it = mapOrphanTransactions.lower_bound(InsecureRand256());
|
||||
"fs_tests/fsbridge_fstream" # deterministic test failure?
|
||||
"miner_tests/CreateNewBlock_validity" # validation.cpp: if (GetMainSignals().CallbacksPending() > 10)
|
||||
"scheduler_tests/manythreads" # scheduler.cpp: CScheduler::serviceQueue()
|
||||
|
44
contrib/devtools/utxo_snapshot.sh
Executable file
44
contrib/devtools/utxo_snapshot.sh
Executable file
@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (c) 2019 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#
|
||||
export LC_ALL=C
|
||||
|
||||
set -ueo pipefail
|
||||
|
||||
if (( $# < 3 )); then
|
||||
echo 'Usage: utxo_snapshot.sh <generate-at-height> <snapshot-out-path> <dash-cli-call ...>'
|
||||
echo
|
||||
echo " if <snapshot-out-path> is '-', don't produce a snapshot file but instead print the "
|
||||
echo " expected assumeutxo hash"
|
||||
echo
|
||||
echo 'Examples:'
|
||||
echo
|
||||
echo " ./contrib/devtools/utxo_snapshot.sh 570000 utxo.dat ./src/dash-cli -datadir=\$(pwd)/testdata"
|
||||
echo ' ./contrib/devtools/utxo_snapshot.sh 570000 - ./src/dash-cli'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
GENERATE_AT_HEIGHT="${1}"; shift;
|
||||
OUTPUT_PATH="${1}"; shift;
|
||||
# Most of the calls we make take a while to run, so pad with a lengthy timeout.
|
||||
BITCOIN_CLI_CALL="${*} -rpcclienttimeout=9999999"
|
||||
|
||||
# Block we'll invalidate/reconsider to rewind/fast-forward the chain.
|
||||
PIVOT_BLOCKHASH=$($BITCOIN_CLI_CALL getblockhash $(( GENERATE_AT_HEIGHT + 1 )) )
|
||||
|
||||
(>&2 echo "Rewinding chain back to height ${GENERATE_AT_HEIGHT} (by invalidating ${PIVOT_BLOCKHASH}); this may take a while")
|
||||
${BITCOIN_CLI_CALL} invalidateblock "${PIVOT_BLOCKHASH}"
|
||||
|
||||
if [[ "${OUTPUT_PATH}" = "-" ]]; then
|
||||
(>&2 echo "Generating txoutset info...")
|
||||
${BITCOIN_CLI_CALL} gettxoutsetinfo | grep hash_serialized_2 | sed 's/^.*: "\(.\+\)\+",/\1/g'
|
||||
else
|
||||
(>&2 echo "Generating UTXO snapshot...")
|
||||
${BITCOIN_CLI_CALL} dumptxoutset "${OUTPUT_PATH}"
|
||||
fi
|
||||
|
||||
(>&2 echo "Restoring chain to original height; this may take a while")
|
||||
${BITCOIN_CLI_CALL} reconsiderblock "${PIVOT_BLOCKHASH}"
|
@ -11,6 +11,7 @@ packages:
|
||||
- "autoconf"
|
||||
- "automake"
|
||||
- "binutils"
|
||||
- "bison"
|
||||
- "bsdmainutils"
|
||||
- "ca-certificates"
|
||||
- "curl"
|
||||
@ -47,8 +48,6 @@ script: |
|
||||
HOST_CXXFLAGS="-O2 -g"
|
||||
HOST_LDFLAGS_BASE="-static-libstdc++"
|
||||
|
||||
export QT_RCC_TEST=1
|
||||
export QT_RCC_SOURCE_DATE_OVERRIDE=1
|
||||
export TZ="UTC"
|
||||
export BUILD_DIR="$PWD"
|
||||
mkdir -p ${WRAP_DIR}
|
||||
|
@ -45,8 +45,6 @@ script: |
|
||||
FAKETIME_HOST_PROGS=""
|
||||
FAKETIME_PROGS="ar ranlib date dmg xorrisofs"
|
||||
|
||||
export QT_RCC_TEST=1
|
||||
export QT_RCC_SOURCE_DATE_OVERRIDE=1
|
||||
export TZ="UTC"
|
||||
export BUILD_DIR="$PWD"
|
||||
mkdir -p ${WRAP_DIR}
|
||||
@ -147,6 +145,7 @@ script: |
|
||||
CONFIG_SITE=${BASEPREFIX}/${i}/share/config.site ./configure --prefix=/ --disable-maintainer-mode --disable-dependency-tracking ${CONFIGFLAGS}
|
||||
make ${MAKEOPTS}
|
||||
make -C src osx_debug
|
||||
make ${MAKEOPTS} -C src check-security
|
||||
make install-strip DESTDIR=${INSTALLPATH}
|
||||
|
||||
make osx_volname
|
||||
|
@ -38,8 +38,6 @@ script: |
|
||||
HOST_CFLAGS="-O2 -g -fno-ident"
|
||||
HOST_CXXFLAGS="-O2 -g -fno-ident"
|
||||
|
||||
export QT_RCC_TEST=1
|
||||
export QT_RCC_SOURCE_DATE_OVERRIDE=1
|
||||
export TZ="UTC"
|
||||
export BUILD_DIR="$PWD"
|
||||
mkdir -p ${WRAP_DIR}
|
||||
|
@ -6,7 +6,14 @@
|
||||
# Example use:
|
||||
# $ valgrind --suppressions=contrib/valgrind.supp src/test/test_dash
|
||||
# $ valgrind --suppressions=contrib/valgrind.supp --leak-check=full \
|
||||
# --show-leak-kinds=all src/test/test_dash --log_level=test_suite
|
||||
# --show-leak-kinds=all src/test/test_dash
|
||||
#
|
||||
# To create suppressions for found issues, use the --gen-suppressions=all option:
|
||||
# $ valgrind --suppressions=contrib/valgrind.supp --leak-check=full \
|
||||
# --show-leak-kinds=all --gen-suppressions=all --show-reachable=yes \
|
||||
# --error-limit=no src/test/test_dash
|
||||
#
|
||||
# Note that suppressions may depend on OS and/or library versions.
|
||||
{
|
||||
Suppress libstdc++ warning - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65434
|
||||
Memcheck:Leak
|
||||
@ -26,6 +33,14 @@
|
||||
obj:*/libdb_cxx-*.so
|
||||
fun:__log_put_record
|
||||
}
|
||||
{
|
||||
Suppress libdb warning
|
||||
Memcheck:Param
|
||||
pwrite64(buf)
|
||||
fun:pwrite
|
||||
fun:__os_io
|
||||
obj:*/libdb_cxx-*.so
|
||||
}
|
||||
{
|
||||
Suppress leveldb warning (leveldb::InitModule()) - https://github.com/google/leveldb/issues/113
|
||||
Memcheck:Leak
|
||||
@ -41,3 +56,57 @@
|
||||
...
|
||||
fun:_ZN7leveldbL14InitDefaultEnvEv
|
||||
}
|
||||
{
|
||||
Suppress wcsnrtombs glibc SSE4 warning (could be related: https://stroika.atlassian.net/browse/STK-626)
|
||||
Memcheck:Addr16
|
||||
fun:__wcsnlen_sse4_1
|
||||
fun:wcsnrtombs
|
||||
}
|
||||
{
|
||||
Suppress boost::filesystem warning (fixed in boost 1.70: https://github.com/boostorg/filesystem/commit/bbe9d1771e5d679b3f10c42a58fc81f7e8c024a9)
|
||||
Memcheck:Cond
|
||||
fun:_ZN5boost10filesystem6detail28directory_iterator_incrementERNS0_18directory_iteratorEPNS_6system10error_codeE
|
||||
fun:_ZN5boost10filesystem6detail28directory_iterator_constructERNS0_18directory_iteratorERKNS0_4pathEPNS_6system10error_codeE
|
||||
obj:*/libboost_filesystem.so.*
|
||||
}
|
||||
{
|
||||
Suppress boost::filesystem warning (could be related: https://stackoverflow.com/questions/9830182/function-boostfilesystemcomplete-being-reported-as-possible-memory-leak-by-v)
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:_Znwm
|
||||
fun:_ZN5boost10filesystem8absoluteERKNS0_4pathES3_
|
||||
}
|
||||
{
|
||||
Suppress boost still reachable memory warning
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:_Znwm
|
||||
...
|
||||
fun:_M_construct_aux<char*>
|
||||
fun:_M_construct<char*>
|
||||
fun:basic_string
|
||||
fun:path
|
||||
}
|
||||
{
|
||||
Suppress LogInstance still reachable memory warning
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:_Znwm
|
||||
fun:_Z11LogInstancev
|
||||
}
|
||||
{
|
||||
Suppress secp256k1_context_create still reachable memory warning
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:secp256k1_context_create
|
||||
}
|
||||
{
|
||||
Suppress BCLog::Logger::StartLogging() still reachable memory warning
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:_ZN5BCLog6Logger12StartLoggingEv
|
||||
}
|
||||
|
@ -33,8 +33,7 @@ WORK_PATH = $(BASEDIR)/work
|
||||
BASE_CACHE ?= $(BASEDIR)/built
|
||||
SDK_PATH ?= $(BASEDIR)/SDKs
|
||||
NO_QT ?=
|
||||
NO_PROTOBUF ?=
|
||||
NO_OPENSSL ?=
|
||||
NO_QR ?=
|
||||
NO_WALLET ?=
|
||||
NO_ZMQ ?=
|
||||
NO_UPNP ?=
|
||||
@ -132,28 +131,19 @@ build_id_string+=system_clang
|
||||
$(host_arch)_$(host_os)_id_string+=system_clang
|
||||
endif
|
||||
|
||||
qt_packages_$(NO_QT) = $(qt_packages) $(qt_$(host_os)_packages) $(qt_$(host_arch)_$(host_os)_packages)
|
||||
qrencode_packages_$(NO_QR) = $(qrencode_$(host_os)_packages)
|
||||
|
||||
qt_packages_$(NO_QT) = $(qt_packages) $(qt_$(host_os)_packages) $(qt_$(host_arch)_$(host_os)_packages) $(qrencode_packages_)
|
||||
|
||||
wallet_packages_$(NO_WALLET) = $(wallet_packages)
|
||||
upnp_packages_$(NO_UPNP) = $(upnp_packages)
|
||||
natpmp_packages_$(NO_NATPMP) = $(natpmp_packages)
|
||||
|
||||
zmq_packages_$(NO_ZMQ) = $(zmq_packages)
|
||||
|
||||
protobuf_packages_$(NO_PROTOBUF) = $(protobuf_packages)
|
||||
openssl_packages_$(NO_OPENSSL) = $(openssl_packages)
|
||||
|
||||
packages += $($(host_arch)_$(host_os)_packages) $($(host_os)_packages) $(qt_packages_) $(wallet_packages_) $(upnp_packages_) $(natpmp_packages_)
|
||||
native_packages += $($(host_arch)_$(host_os)_native_packages) $($(host_os)_native_packages)
|
||||
|
||||
ifneq ($(protobuf_packages_),)
|
||||
native_packages += $(protobuf_native_packages)
|
||||
packages += $(protobuf_packages)
|
||||
endif
|
||||
|
||||
ifneq ($(openssl_packages_),)
|
||||
packages += $(openssl_packages)
|
||||
endif
|
||||
|
||||
ifneq ($(zmq_packages_),)
|
||||
packages += $(zmq_packages)
|
||||
endif
|
||||
@ -217,8 +207,8 @@ $(host_prefix)/share/config.site : config.site.in $(host_prefix)/.stamp_$(final_
|
||||
-e 's|@CPPFLAGS@|$(strip $(host_CPPFLAGS) $(host_$(release_type)_CPPFLAGS))|' \
|
||||
-e 's|@LDFLAGS@|$(strip $(host_LDFLAGS) $(host_$(release_type)_LDFLAGS))|' \
|
||||
-e 's|@no_qt@|$(NO_QT)|' \
|
||||
-e 's|@no_qr@|$(NO_QR)|' \
|
||||
-e 's|@no_zmq@|$(NO_ZMQ)|' \
|
||||
-e 's|@disable_bip70@|$(NO_PROTOBUF)|' \
|
||||
-e 's|@no_wallet@|$(NO_WALLET)|' \
|
||||
-e 's|@no_upnp@|$(NO_UPNP)|' \
|
||||
-e 's|@no_natpmp@|$(NO_NATPMP)|' \
|
||||
|
@ -52,7 +52,7 @@ For more information, see [SDK Extraction](../contrib/macdeploy/README.md#sdk-ex
|
||||
|
||||
Common linux dependencies:
|
||||
|
||||
sudo apt-get install make automake cmake curl g++-multilib libtool binutils-gold bsdmainutils pkg-config python3 patch
|
||||
sudo apt-get install make automake cmake curl g++-multilib libtool binutils-gold bsdmainutils pkg-config python3 patch bison
|
||||
|
||||
For linux ARM cross compilation:
|
||||
|
||||
@ -83,6 +83,8 @@ The following can be set when running make: `make FOO=bar`
|
||||
<dd>If a source file can't be fetched, try here before giving up</dd>
|
||||
<dt>NO_QT</dt>
|
||||
<dd>Don't download/build/cache qt and its dependencies</dd>
|
||||
<dt>NO_QR</dt>
|
||||
<dd>Don't download/build/cache packages needed for enabling qrencode</dd>
|
||||
<dt>NO_ZMQ</dt>
|
||||
<dd>Don't download/build/cache packages needed for enabling zeromq</dd>
|
||||
<dt>NO_WALLET</dt>
|
||||
@ -93,8 +95,6 @@ The following can be set when running make: `make FOO=bar`
|
||||
<dd>Don't download/build/cache packages needed for enabling NAT-PMP</dd>
|
||||
<dt>DEBUG</dt>
|
||||
<dd>disable some optimizations and enable more runtime checking</dd>
|
||||
<dt>PROTOBUF</dt>
|
||||
<dd>build protobuf (used for deprecated BIP70 support)</dd>
|
||||
<dt>HOST_ID_SALT</dt>
|
||||
<dd>Optional salt to use when generating host package ids</dd>
|
||||
<dt>BUILD_ID_SALT</dt>
|
||||
|
@ -26,10 +26,10 @@ fi
|
||||
if test -z $with_qt_bindir; then
|
||||
with_qt_bindir=$depends_prefix/native/bin
|
||||
fi
|
||||
if test -z $with_protoc_bindir; then
|
||||
with_protoc_bindir=$depends_prefix/native/bin
|
||||
fi
|
||||
|
||||
if test -z $with_qrencode && test -n "@no_qr@"; then
|
||||
with_qrencode=no
|
||||
fi
|
||||
|
||||
if test -z $enable_wallet && test -n "@no_wallet@"; then
|
||||
enable_wallet=no
|
||||
@ -51,10 +51,6 @@ if test -z $enable_zmq && test -n "@no_zmq@"; then
|
||||
enable_zmq=no
|
||||
fi
|
||||
|
||||
if test -n $disable_bip70 && test -n "@disable_bip70@"; then
|
||||
disable_bip70=no
|
||||
fi
|
||||
|
||||
if test -n "@debug@" && test -z "@no_qt@" && test "x$with_gui" != xno; then
|
||||
with_gui=qt5_debug
|
||||
fi
|
||||
|
@ -141,7 +141,7 @@ $(1)_config_env+=PKG_CONFIG_PATH=$($($(1)_type)_prefix)/share/pkgconfig
|
||||
$(1)_config_env+=PATH=$(build_prefix)/bin:$(PATH)
|
||||
$(1)_build_env+=PATH=$(build_prefix)/bin:$(PATH)
|
||||
$(1)_stage_env+=PATH=$(build_prefix)/bin:$(PATH)
|
||||
$(1)_autoconf=./configure --host=$($($(1)_type)_host) --disable-dependency-tracking --prefix=$($($(1)_type)_prefix) $$($(1)_config_opts) CC="$$($(1)_cc)" CXX="$$($(1)_cxx)"
|
||||
$(1)_autoconf=./configure --host=$($($(1)_type)_host) --prefix=$($($(1)_type)_prefix) $$($(1)_config_opts) CC="$$($(1)_cc)" CXX="$$($(1)_cxx)"
|
||||
|
||||
ifneq ($($(1)_nm),)
|
||||
$(1)_autoconf += NM="$$($(1)_nm)"
|
||||
|
@ -5,6 +5,10 @@ The package "mylib" will be used here as an example
|
||||
|
||||
General tips:
|
||||
- mylib_foo is written as $(package)_foo in order to make recipes more similar.
|
||||
- Secondary dependency packages relative to the bitcoin binaries/libraries (i.e.
|
||||
those not in `ALLOWED_LIBRARIES` in `contrib/devtools/symbol-check.py`) don't
|
||||
need to be shared and should be built statically whenever possible. See
|
||||
[below](#secondary-dependencies) for more details.
|
||||
|
||||
## Identifiers
|
||||
Each package is required to define at least these variables:
|
||||
@ -146,3 +150,34 @@ $($(package)_config_opts) will be appended.
|
||||
Most autotools projects can be properly staged using:
|
||||
|
||||
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||
|
||||
## Build outputs:
|
||||
|
||||
In general, the output of a depends package should not contain any libtool
|
||||
archives. Instead, the package should output `.pc` (`pkg-config`) files where
|
||||
possible.
|
||||
|
||||
From the [Gentoo Wiki entry](https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Handling_Libtool_Archives):
|
||||
|
||||
> Libtool pulls in all direct and indirect dependencies into the .la files it
|
||||
> creates. This leads to massive overlinking, which is toxic to the Gentoo
|
||||
> ecosystem, as it leads to a massive number of unnecessary rebuilds.
|
||||
|
||||
## Secondary dependencies:
|
||||
|
||||
Secondary dependency packages relative to the bitcoin binaries/libraries (i.e.
|
||||
those not in `ALLOWED_LIBRARIES` in `contrib/devtools/symbol-check.py`) don't
|
||||
need to be shared and should be built statically whenever possible. This
|
||||
improves general build reliability as illustrated by the following example:
|
||||
|
||||
When linking an executable against a shared library `libprimary` that has its
|
||||
own shared dependency `libsecondary`, we may need to specify the path to
|
||||
`libsecondary` on the link command using the `-rpath/-rpath-link` options, it is
|
||||
not sufficient to just say `libprimary`.
|
||||
|
||||
For us, it's much easier to just link a static `libsecondary` into a shared
|
||||
`libprimary`. Especially because in our case, we are linking against a dummy
|
||||
`libprimary` anyway that we'll throw away. We don't care if the end-user has a
|
||||
static or dynamic `libsecondary`, that's not our concern. With a static
|
||||
`libsecondary`, when we need to link `libprimary` into our executable, there's no
|
||||
dependency chain to worry about as `libprimary` has all the symbols.
|
||||
|
@ -20,3 +20,7 @@ endef
|
||||
define $(package)_stage_cmds
|
||||
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||
endef
|
||||
|
||||
define $(package)_postprocess_cmds
|
||||
rm lib/*.la
|
||||
endef
|
||||
|
@ -7,7 +7,7 @@ $(package)_build_subdir=build_unix
|
||||
$(package)_patches=clang_cxx_11.patch
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts=--disable-shared --enable-cxx --disable-replication
|
||||
$(package)_config_opts=--disable-shared --enable-cxx --disable-replication --enable-option-checking
|
||||
$(package)_config_opts_mingw32=--enable-mingw
|
||||
$(package)_config_opts_linux=--with-pic
|
||||
$(package)_config_opts_android=--with-pic
|
||||
|
@ -6,7 +6,7 @@ $(package)_sha256_hash=6049ddd5f3f3e2618f615f1faeda0a115104423a7996b7aa73e2f36e3
|
||||
$(package)_dependencies=expat
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts=--disable-tests --disable-doxygen-docs --disable-xml-docs --disable-static --without-x
|
||||
$(package)_config_opts=--disable-tests --disable-doxygen-docs --disable-xml-docs --disable-shared --without-x
|
||||
endef
|
||||
|
||||
define $(package)_config_cmds
|
||||
@ -21,3 +21,7 @@ define $(package)_stage_cmds
|
||||
$(MAKE) -C dbus DESTDIR=$($(package)_staging_dir) install-libLTLIBRARIES install-dbusincludeHEADERS install-nodist_dbusarchincludeHEADERS && \
|
||||
$(MAKE) DESTDIR=$($(package)_staging_dir) install-pkgconfigDATA
|
||||
endef
|
||||
|
||||
define $(package)_postprocess_cmds
|
||||
rm lib/*.la
|
||||
endef
|
||||
|
@ -5,7 +5,9 @@ $(package)_file_name=$(package)-$($(package)_version).tar.bz2
|
||||
$(package)_sha256_hash=cbc9102f4a31a8dafd42d642e9a3aa31e79a0aedaa1f6efd2795ebc83174ec18
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts=--disable-static --without-docbook --without-tests --without-examples
|
||||
$(package)_config_opts=--disable-shared --without-docbook --without-tests --without-examples
|
||||
$(package)_config_opts += --disable-dependency-tracking --enable-option-checking
|
||||
$(package)_config_opts_linux=--with-pic
|
||||
endef
|
||||
|
||||
define $(package)_config_cmds
|
||||
@ -19,3 +21,7 @@ endef
|
||||
define $(package)_stage_cmds
|
||||
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||
endef
|
||||
|
||||
define $(package)_postprocess_cmds
|
||||
rm -rf share lib/*.la
|
||||
endef
|
||||
|
@ -8,6 +8,7 @@ $(package)_patches=remove_char_width_usage.patch gperf_header_regen.patch
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts=--disable-docs --disable-static --disable-libxml2 --disable-iconv
|
||||
$(package)_config_opts += --disable-dependency-tracking --enable-option-checking
|
||||
endef
|
||||
|
||||
define $(package)_preprocess_cmds
|
||||
@ -26,3 +27,7 @@ endef
|
||||
define $(package)_stage_cmds
|
||||
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||
endef
|
||||
|
||||
define $(package)_postprocess_cmds
|
||||
rm -rf var lib/*.la
|
||||
endef
|
||||
|
@ -6,6 +6,7 @@ $(package)_sha256_hash=3a3bb2c4e15ffb433f2032f50a5b5a92558206822e22bfe8cbe339af4
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts=--without-zlib --without-png --without-harfbuzz --without-bzip2 --disable-static
|
||||
$(package)_config_opts += --enable-option-checking
|
||||
$(package)_config_opts_linux=--with-pic
|
||||
endef
|
||||
|
||||
@ -20,3 +21,7 @@ endef
|
||||
define $(package)_stage_cmds
|
||||
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||
endef
|
||||
|
||||
define $(package)_postprocess_cmds
|
||||
rm -rf share/man lib/*.la
|
||||
endef
|
||||
|
@ -22,3 +22,6 @@ define $(package)_stage_cmds
|
||||
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||
endef
|
||||
|
||||
define $(package)_postprocess_cmds
|
||||
rm lib/*.la
|
||||
endef
|
||||
|
@ -1,9 +1,9 @@
|
||||
package=immer
|
||||
$(package)_version=v0.6.2
|
||||
$(package)_version=v0.7.0
|
||||
$(package)_download_path=https://github.com/arximboldi/immer/archive
|
||||
$(package)_download_file=$($(package)_version).tar.gz
|
||||
$(package)_file_name=$(package)-$($(package)_download_file)
|
||||
$(package)_sha256_hash=c3bb8847034437dee64adacb04e1e0163ae640b596c582eb4c0aa1d7c6447cd7
|
||||
$(package)_sha256_hash=cf67ab428aa3610eb0f72d0ea936c15cce3f91df26ee143ab783acd053507fe4
|
||||
$(package)_build_subdir=build_tmp
|
||||
$(package)_dependencies=cmake boost
|
||||
|
||||
|
@ -9,6 +9,7 @@ $(package)_dependencies=xproto
|
||||
# --disable-xthreads. It is currently enabled.
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts=--disable-shared --disable-lint-library --without-lint
|
||||
$(package)_config_opts += --disable-dependency-tracking --enable-option-checking
|
||||
$(package)_config_opts_linux=--with-pic
|
||||
endef
|
||||
|
||||
@ -27,3 +28,7 @@ endef
|
||||
define $(package)_stage_cmds
|
||||
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||
endef
|
||||
|
||||
define $(package)_postprocess_cmds
|
||||
rm -rf share lib/*.la
|
||||
endef
|
||||
|
@ -17,6 +17,7 @@ endif
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts=--disable-shared --disable-openssl --disable-libevent-regress --disable-samples
|
||||
$(package)_config_opts += --disable-dependency-tracking --enable-option-checking
|
||||
$(package)_config_opts_release=--disable-debug-mode
|
||||
$(package)_config_opts_linux=--with-pic
|
||||
$(package)_config_opts_android=--with-pic
|
||||
@ -35,4 +36,5 @@ define $(package)_stage_cmds
|
||||
endef
|
||||
|
||||
define $(package)_postprocess_cmds
|
||||
rm lib/*.la
|
||||
endef
|
||||
|
@ -7,6 +7,7 @@ $(package)_dependencies=xcb_proto libXau
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts=--disable-static --disable-build-docs --without-doxygen --without-launchd
|
||||
$(package)_config_opts += --disable-dependency-tracking --enable-option-checking
|
||||
# Because we pass -qt-xcb to Qt, it will compile in a set of xcb helper libraries and extensions,
|
||||
# so we skip building all of the extensions here.
|
||||
# More info is available from: https://doc.qt.io/qt-5.9/linux-requirements.html
|
||||
@ -14,9 +15,9 @@ $(package)_config_opts += --disable-composite --disable-damage --disable-dpms
|
||||
$(package)_config_opts += --disable-dri2 --disable-dri3 --disable-glx
|
||||
$(package)_config_opts += --disable-present --disable-randr --disable-record
|
||||
$(package)_config_opts += --disable-render --disable-resource --disable-screensaver
|
||||
$(package)_config_opts += --disable-shape --disable-shm --disable-sync
|
||||
$(package)_config_opts += --disable-shape --disable-sync
|
||||
$(package)_config_opts += --disable-xevie --disable-xfixes --disable-xfree86-dri
|
||||
$(package)_config_opts += --disable-xinerama --disable-xinput --disable-xkb
|
||||
$(package)_config_opts += --disable-xinerama --disable-xinput
|
||||
$(package)_config_opts += --disable-xprint --disable-selinux --disable-xtest
|
||||
$(package)_config_opts += --disable-xv --disable-xvmc
|
||||
endef
|
||||
@ -44,5 +45,5 @@ define $(package)_stage_cmds
|
||||
endef
|
||||
|
||||
define $(package)_postprocess_cmds
|
||||
rm -rf share/man share/doc
|
||||
rm -rf share/man share/doc lib/*.la
|
||||
endef
|
||||
|
32
depends/packages/libxkbcommon.mk
Normal file
32
depends/packages/libxkbcommon.mk
Normal file
@ -0,0 +1,32 @@
|
||||
package=libxkbcommon
|
||||
$(package)_version=0.8.4
|
||||
$(package)_download_path=https://xkbcommon.org/download/
|
||||
$(package)_file_name=$(package)-$($(package)_version).tar.xz
|
||||
$(package)_sha256_hash=60ddcff932b7fd352752d51a5c4f04f3d0403230a584df9a2e0d5ed87c486c8b
|
||||
$(package)_dependencies=libxcb
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts = --enable-option-checking --disable-dependency-tracking
|
||||
$(package)_config_opts += --disable-static --disable-docs
|
||||
endef
|
||||
|
||||
define $(package)_preprocess_cmds
|
||||
cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub build-aux
|
||||
endef
|
||||
|
||||
define $(package)_config_cmds
|
||||
$($(package)_autoconf)
|
||||
endef
|
||||
|
||||
define $(package)_build_cmds
|
||||
$(MAKE)
|
||||
endef
|
||||
|
||||
define $(package)_stage_cmds
|
||||
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||
endef
|
||||
|
||||
define $(package)_postprocess_cmds
|
||||
rm lib/*.la
|
||||
endef
|
||||
|
@ -1,25 +0,0 @@
|
||||
package=native_protobuf
|
||||
$(package)_version=3.17.3
|
||||
$(package)_download_path=https://github.com/google/protobuf/releases/download/v$($(package)_version)
|
||||
$(package)_file_name=protobuf-cpp-$($(package)_version).tar.gz
|
||||
$(package)_sha256_hash=51cec99f108b83422b7af1170afd7aeb2dd77d2bcbb7b6bad1f92509e9ccf8cb
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts=--disable-shared --without-zlib
|
||||
endef
|
||||
|
||||
define $(package)_config_cmds
|
||||
$($(package)_autoconf)
|
||||
endef
|
||||
|
||||
define $(package)_build_cmds
|
||||
$(MAKE) -C src protoc
|
||||
endef
|
||||
|
||||
define $(package)_stage_cmds
|
||||
$(MAKE) -C src DESTDIR=$($(package)_staging_dir) install-strip
|
||||
endef
|
||||
|
||||
define $(package)_postprocess_cmds
|
||||
rm -rf lib include
|
||||
endef
|
@ -1,88 +0,0 @@
|
||||
package=openssl
|
||||
$(package)_version=1.0.1k
|
||||
$(package)_download_path=https://www.openssl.org/source
|
||||
$(package)_file_name=$(package)-$($(package)_version).tar.gz
|
||||
$(package)_sha256_hash=8f9faeaebad088e772f4ef5e38252d472be4d878c6b3a2718c10a4fcebe7a41c
|
||||
$(package)_patches=0001-Add-OpenSSL-termios-fix-for-musl-libc.patch
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_env=AR="$($(package)_ar)" RANLIB="$($(package)_ranlib)" CC="$($(package)_cc)"
|
||||
$(package)_config_opts=--prefix=$(host_prefix) --openssldir=$(host_prefix)/etc/openssl
|
||||
$(package)_config_opts+=no-camellia
|
||||
$(package)_config_opts+=no-capieng
|
||||
$(package)_config_opts+=no-cast
|
||||
$(package)_config_opts+=no-comp
|
||||
$(package)_config_opts+=no-dso
|
||||
$(package)_config_opts+=no-dtls1
|
||||
$(package)_config_opts+=no-ec_nistp_64_gcc_128
|
||||
$(package)_config_opts+=no-gost
|
||||
$(package)_config_opts+=no-gmp
|
||||
$(package)_config_opts+=no-heartbeats
|
||||
$(package)_config_opts+=no-idea
|
||||
$(package)_config_opts+=no-jpake
|
||||
$(package)_config_opts+=no-krb5
|
||||
$(package)_config_opts+=no-libunbound
|
||||
$(package)_config_opts+=no-md2
|
||||
$(package)_config_opts+=no-mdc2
|
||||
$(package)_config_opts+=no-rc4
|
||||
$(package)_config_opts+=no-rc5
|
||||
$(package)_config_opts+=no-rdrand
|
||||
$(package)_config_opts+=no-rfc3779
|
||||
$(package)_config_opts+=no-rsax
|
||||
$(package)_config_opts+=no-sctp
|
||||
$(package)_config_opts+=no-seed
|
||||
$(package)_config_opts+=no-sha0
|
||||
$(package)_config_opts+=no-shared
|
||||
$(package)_config_opts+=no-ssl-trace
|
||||
$(package)_config_opts+=no-ssl2
|
||||
$(package)_config_opts+=no-ssl3
|
||||
$(package)_config_opts+=no-static_engine
|
||||
$(package)_config_opts+=no-store
|
||||
$(package)_config_opts+=no-unit-test
|
||||
$(package)_config_opts+=no-weak-ssl-ciphers
|
||||
$(package)_config_opts+=no-whirlpool
|
||||
$(package)_config_opts+=no-zlib
|
||||
$(package)_config_opts+=no-zlib-dynamic
|
||||
$(package)_config_opts+=$($(package)_cflags) $($(package)_cppflags)
|
||||
$(package)_config_opts_linux=-fPIC -Wa,--noexecstack
|
||||
$(package)_config_opts_x86_64_linux=linux-x86_64
|
||||
$(package)_config_opts_i686_linux=linux-generic32
|
||||
$(package)_config_opts_arm_linux=linux-generic32
|
||||
$(package)_config_opts_armv7l_linux=linux-generic32
|
||||
$(package)_config_opts_aarch64_linux=linux-generic64
|
||||
$(package)_config_opts_mipsel_linux=linux-generic32
|
||||
$(package)_config_opts_mips_linux=linux-generic32
|
||||
$(package)_config_opts_powerpc_linux=linux-generic32
|
||||
$(package)_config_opts_riscv32_linux=linux-generic32
|
||||
$(package)_config_opts_riscv64_linux=linux-generic64
|
||||
$(package)_config_opts_x86_64_darwin=darwin64-x86_64-cc
|
||||
$(package)_config_opts_x86_64_mingw32=mingw64
|
||||
$(package)_config_opts_i686_mingw32=mingw
|
||||
$(package)_config_opts_android=-fPIC
|
||||
$(package)_config_opts_aarch64_android=linux-generic64
|
||||
$(package)_config_opts_x86_64_android=linux-generic64
|
||||
$(package)_config_opts_armv7a_android=linux-generic32
|
||||
$(package)_config_opts_i686_android=linux-generic32
|
||||
endef
|
||||
|
||||
define $(package)_preprocess_cmds
|
||||
patch -p1 < $($(package)_patch_dir)/0001-Add-OpenSSL-termios-fix-for-musl-libc.patch && \
|
||||
sed -i.old "/define DATE/d" util/mkbuildinf.pl && \
|
||||
sed -i.old "s|engines apps test|engines|" Makefile.org
|
||||
endef
|
||||
|
||||
define $(package)_config_cmds
|
||||
./Configure $($(package)_config_opts)
|
||||
endef
|
||||
|
||||
define $(package)_build_cmds
|
||||
$(MAKE) -j1 build_libs libcrypto.pc libssl.pc openssl.pc
|
||||
endef
|
||||
|
||||
define $(package)_stage_cmds
|
||||
$(MAKE) INSTALL_PREFIX=$($(package)_staging_dir) -j1 install_sw
|
||||
endef
|
||||
|
||||
define $(package)_postprocess_cmds
|
||||
rm -rf share bin etc
|
||||
endef
|
@ -1,13 +1,11 @@
|
||||
packages:=boost libevent gmp bls-dash backtrace cmake immer
|
||||
|
||||
protobuf_native_packages = native_protobuf
|
||||
protobuf_packages = protobuf
|
||||
qt_linux_packages:=qt expat dbus libxcb xcb_proto libXau xproto freetype fontconfig libxkbcommon
|
||||
|
||||
openssl_packages = openssl
|
||||
|
||||
qt_packages = qrencode zlib
|
||||
|
||||
qt_linux_packages:=qt expat dbus libxcb xcb_proto libXau xproto freetype fontconfig
|
||||
qrencode_linux_packages = qrencode
|
||||
qrencode_android_packages = qrencode
|
||||
qrencode_darwin_packages = qrencode
|
||||
qrencode_mingw32_packages = qrencode
|
||||
|
||||
qt_android_packages=qt
|
||||
qt_darwin_packages=qt
|
||||
|
@ -1,29 +0,0 @@
|
||||
package=protobuf
|
||||
$(package)_version=$(native_$(package)_version)
|
||||
$(package)_download_path=$(native_$(package)_download_path)
|
||||
$(package)_file_name=$(native_$(package)_file_name)
|
||||
$(package)_sha256_hash=$(native_$(package)_sha256_hash)
|
||||
$(package)_dependencies=native_$(package)
|
||||
$(package)_cxxflags=-std=c++17
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts=--disable-shared --with-protoc=$(build_prefix)/bin/protoc
|
||||
$(package)_config_opts_linux=--with-pic
|
||||
endef
|
||||
|
||||
define $(package)_config_cmds
|
||||
$($(package)_autoconf)
|
||||
endef
|
||||
|
||||
define $(package)_build_cmds
|
||||
$(MAKE) -C src libprotobuf.la
|
||||
endef
|
||||
|
||||
define $(package)_stage_cmds
|
||||
$(MAKE) DESTDIR=$($(package)_staging_dir) -C src install-libLTLIBRARIES install-nobase_includeHEADERS &&\
|
||||
$(MAKE) DESTDIR=$($(package)_staging_dir) install-pkgconfigDATA
|
||||
endef
|
||||
|
||||
define $(package)_postprocess_cmds
|
||||
rm lib/libprotoc.a
|
||||
endef
|
@ -7,6 +7,7 @@ $(package)_sha256_hash=efe5188b1ddbcbf98763b819b146be6a90481aac30cfc8d858ab78a19
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts=--disable-shared --without-tools --without-tests --disable-sdltest
|
||||
$(package)_config_opts += --disable-gprof --disable-gcov --disable-mudflap
|
||||
$(package)_config_opts += --disable-dependency-tracking --enable-option-checking
|
||||
$(package)_config_opts_linux=--with-pic
|
||||
$(package)_config_opts_android=--with-pic
|
||||
endef
|
||||
@ -26,3 +27,7 @@ endef
|
||||
define $(package)_stage_cmds
|
||||
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||
endef
|
||||
|
||||
define $(package)_postprocess_cmds
|
||||
rm lib/*.la
|
||||
endef
|
||||
|
@ -1,28 +1,27 @@
|
||||
PACKAGE=qt
|
||||
$(package)_version=5.9.8
|
||||
$(package)_download_path=https://download.qt.io/archive/qt/5.9/$($(package)_version)/submodules
|
||||
$(package)_suffix=opensource-src-$($(package)_version).tar.xz
|
||||
$(package)_version=5.12.11
|
||||
$(package)_download_path=https://download.qt.io/official_releases/qt/5.12/$($(package)_version)/submodules
|
||||
$(package)_suffix=everywhere-src-$($(package)_version).tar.xz
|
||||
$(package)_file_name=qtbase-$($(package)_suffix)
|
||||
$(package)_sha256_hash=9b9dec1f67df1f94bce2955c5604de992d529dde72050239154c56352da0907d
|
||||
$(package)_dependencies=zlib
|
||||
ifeq ($(NO_OPENSSL),)
|
||||
$(package)_dependencies+= openssl
|
||||
endif
|
||||
$(package)_linux_dependencies=freetype fontconfig libxcb
|
||||
$(package)_sha256_hash=1c1b4e33137ca77881074c140d54c3c9747e845a31338cfe8680f171f0bc3a39
|
||||
$(package)_linux_dependencies=freetype fontconfig libxcb libxkbcommon
|
||||
$(package)_qt_libs=corelib network widgets gui plugins testlib
|
||||
$(package)_patches=fix_qt_pkgconfig.patch mac-qmake.conf fix_configure_mac.patch fix_no_printer.patch fix_riscv64_arch.patch
|
||||
$(package)_patches+= fix_rcc_determinism.patch xkb-default.patch no-xlib.patch
|
||||
$(package)_linguist_tools = lrelease lupdate lconvert
|
||||
$(package)_patches = qt.pro qttools_src.pro
|
||||
$(package)_patches += fix_qt_pkgconfig.patch mac-qmake.conf fix_no_printer.patch no-xlib.patch
|
||||
$(package)_patches+= fix_android_qmake_conf.patch fix_android_jni_static.patch dont_hardcode_pwd.patch
|
||||
$(package)_patches+= freetype_back_compat.patch drop_lrelease_dependency.patch fix_powerpc_libpng.patch
|
||||
$(package)_patches+= fix_mingw_cross_compile.patch fix_qpainter_non_determinism.patch
|
||||
$(package)_patches+= no_sdk_version_check.patch
|
||||
$(package)_patches+= fix_qpainter_non_determinism.patch fix_lib_paths.patch fix_android_pch.patch
|
||||
$(package)_patches+= fix_limits_header.patch
|
||||
$(package)_patches+= fix_montery_include.patch
|
||||
$(package)_patches += glibc_compatibility.patch
|
||||
|
||||
# Update OSX_QT_TRANSLATIONS when this is updated
|
||||
$(package)_qttranslations_file_name=qttranslations-$($(package)_suffix)
|
||||
$(package)_qttranslations_sha256_hash=fb5a47799754af73d3bf501fe513342cfe2fc37f64e80df5533f6110e804220c
|
||||
$(package)_qttranslations_sha256_hash=577b0668a777eb2b451c61e8d026d79285371597ce9df06b6dee6c814164b7c3
|
||||
|
||||
$(package)_qttools_file_name=qttools-$($(package)_suffix)
|
||||
$(package)_qttools_sha256_hash=a97556eb7b2f30252cdd8a598c396cfce2b2f79d2bae883af6d3b26a2cdcc63c
|
||||
$(package)_qttools_sha256_hash=98b2aaca230458f65996f3534fd471d2ffd038dd58ac997c0589c06dc2385b4f
|
||||
|
||||
$(package)_extra_sources = $($(package)_qttranslations_file_name)
|
||||
$(package)_extra_sources += $($(package)_qttools_file_name)
|
||||
@ -31,6 +30,7 @@ define $(package)_set_vars
|
||||
$(package)_config_opts_release = -release
|
||||
$(package)_config_opts_release += -silent
|
||||
$(package)_config_opts_debug = -debug
|
||||
$(package)_config_opts_debug += -optimized-tools
|
||||
$(package)_config_opts += -bindir $(build_prefix)/bin
|
||||
$(package)_config_opts += -c++std c++1z
|
||||
$(package)_config_opts += -confirm-license
|
||||
@ -47,11 +47,15 @@ $(package)_config_opts += -no-ico
|
||||
$(package)_config_opts += -no-iconv
|
||||
$(package)_config_opts += -no-kms
|
||||
$(package)_config_opts += -no-linuxfb
|
||||
$(package)_config_opts += -no-libjpeg
|
||||
$(package)_config_opts += -no-libproxy
|
||||
$(package)_config_opts += -no-libudev
|
||||
$(package)_config_opts += -no-mtdev
|
||||
$(package)_config_opts += -no-openssl
|
||||
$(package)_config_opts += -no-openvg
|
||||
$(package)_config_opts += -no-reduce-relocations
|
||||
$(package)_config_opts += -no-qml-debug
|
||||
$(package)_config_opts += -no-sctp
|
||||
$(package)_config_opts += -no-securetransport
|
||||
$(package)_config_opts += -no-sql-db2
|
||||
$(package)_config_opts += -no-sql-ibase
|
||||
$(package)_config_opts += -no-sql-oci
|
||||
@ -61,23 +65,18 @@ $(package)_config_opts += -no-sql-odbc
|
||||
$(package)_config_opts += -no-sql-psql
|
||||
$(package)_config_opts += -no-sql-sqlite
|
||||
$(package)_config_opts += -no-sql-sqlite2
|
||||
$(package)_config_opts += -no-system-proxies
|
||||
$(package)_config_opts += -no-use-gold-linker
|
||||
$(package)_config_opts += -no-xinput2
|
||||
$(package)_config_opts += -nomake examples
|
||||
$(package)_config_opts += -nomake tests
|
||||
$(package)_config_opts += -nomake tools
|
||||
$(package)_config_opts += -opensource
|
||||
ifeq ($(NO_OPENSSL),)
|
||||
$(package)_config_opts += -openssl-linked
|
||||
endif
|
||||
$(package)_config_opts += -optimized-tools
|
||||
$(package)_config_opts += -pch
|
||||
$(package)_config_opts += -pkg-config
|
||||
$(package)_config_opts += -prefix $(host_prefix)
|
||||
$(package)_config_opts += -qt-libpng
|
||||
$(package)_config_opts += -qt-libjpeg
|
||||
$(package)_config_opts += -qt-pcre
|
||||
$(package)_config_opts += -qt-harfbuzz
|
||||
$(package)_config_opts += -system-zlib
|
||||
$(package)_config_opts += -qt-zlib
|
||||
$(package)_config_opts += -static
|
||||
$(package)_config_opts += -v
|
||||
$(package)_config_opts += -no-feature-bearermanagement
|
||||
@ -87,22 +86,26 @@ $(package)_config_opts += -no-feature-concurrent
|
||||
$(package)_config_opts += -no-feature-dial
|
||||
$(package)_config_opts += -no-feature-fontcombobox
|
||||
$(package)_config_opts += -no-feature-ftp
|
||||
$(package)_config_opts += -no-feature-http
|
||||
$(package)_config_opts += -no-feature-image_heuristic_mask
|
||||
$(package)_config_opts += -no-feature-keysequenceedit
|
||||
$(package)_config_opts += -no-feature-lcdnumber
|
||||
$(package)_config_opts += -no-feature-networkdiskcache
|
||||
$(package)_config_opts += -no-feature-networkproxy
|
||||
$(package)_config_opts += -no-feature-pdf
|
||||
$(package)_config_opts += -no-feature-printdialog
|
||||
$(package)_config_opts += -no-feature-printer
|
||||
$(package)_config_opts += -no-feature-printpreviewdialog
|
||||
$(package)_config_opts += -no-feature-printpreviewwidget
|
||||
$(package)_config_opts += -no-feature-sessionmanager
|
||||
$(package)_config_opts += -no-feature-socks5
|
||||
$(package)_config_opts += -no-feature-sql
|
||||
$(package)_config_opts += -no-feature-sqlmodel
|
||||
$(package)_config_opts += -no-feature-statemachine
|
||||
$(package)_config_opts += -no-feature-syntaxhighlighter
|
||||
$(package)_config_opts += -no-feature-textbrowser
|
||||
$(package)_config_opts += -no-feature-textodfwriter
|
||||
$(package)_config_opts += -no-feature-topleveldomain
|
||||
$(package)_config_opts += -no-feature-udpsocket
|
||||
$(package)_config_opts += -no-feature-undocommand
|
||||
$(package)_config_opts += -no-feature-undogroup
|
||||
$(package)_config_opts += -no-feature-undostack
|
||||
@ -113,13 +116,15 @@ $(package)_config_opts += -no-feature-xml
|
||||
|
||||
$(package)_config_opts_darwin = -no-dbus
|
||||
$(package)_config_opts_darwin += -no-opengl
|
||||
$(package)_config_opts_darwin += -pch
|
||||
$(package)_config_opts_darwin += -no-feature-corewlan
|
||||
$(package)_config_opts_darwin += QMAKE_MACOSX_DEPLOYMENT_TARGET=$(OSX_MIN_VERSION)
|
||||
|
||||
ifneq ($(build_os),darwin)
|
||||
$(package)_config_opts_darwin += -xplatform macx-clang-linux
|
||||
$(package)_config_opts_darwin += -device-option MAC_SDK_PATH=$(OSX_SDK)
|
||||
$(package)_config_opts_darwin += -device-option MAC_SDK_VERSION=$(OSX_SDK_VERSION)
|
||||
$(package)_config_opts_darwin += -device-option CROSS_COMPILE="$(host)-"
|
||||
$(package)_config_opts_darwin += -device-option MAC_MIN_VERSION=$(OSX_MIN_VERSION)
|
||||
$(package)_config_opts_darwin += -device-option MAC_TARGET=$(host)
|
||||
$(package)_config_opts_darwin += -device-option XCODE_VERSION=$(XCODE_VERSION)
|
||||
endif
|
||||
@ -127,13 +132,15 @@ endif
|
||||
# for macOS on Apple Silicon (ARM) see https://bugreports.qt.io/browse/QTBUG-85279
|
||||
$(package)_config_opts_aarch64_darwin += -device-option QMAKE_APPLE_DEVICE_ARCHS=arm64
|
||||
|
||||
$(package)_config_opts_linux = -qt-xkbcommon-x11
|
||||
$(package)_config_opts_linux += -qt-xcb
|
||||
$(package)_config_opts_linux = -qt-xcb
|
||||
$(package)_config_opts_linux += -no-xcb-xlib
|
||||
$(package)_config_opts_linux += -no-feature-xlib
|
||||
$(package)_config_opts_linux += -system-freetype
|
||||
$(package)_config_opts_linux += -fontconfig
|
||||
$(package)_config_opts_linux += -no-opengl
|
||||
$(package)_config_opts_linux += -no-feature-vulkan
|
||||
$(package)_config_opts_linux += -no-feature-getentropy
|
||||
$(package)_config_opts_linux += -no-feature-renameat2
|
||||
$(package)_config_opts_linux += -dbus-runtime
|
||||
$(package)_config_opts_arm_linux += -platform linux-g++ -xplatform bitcoin-linux-g++
|
||||
$(package)_config_opts_i686_linux = -xplatform linux-g++-32
|
||||
@ -148,7 +155,11 @@ $(package)_config_opts_riscv64_linux = -platform linux-g++ -xplatform bitcoin-li
|
||||
$(package)_config_opts_mingw32 = -no-opengl
|
||||
$(package)_config_opts_mingw32 += -no-dbus
|
||||
$(package)_config_opts_mingw32 += -xplatform win32-g++
|
||||
$(package)_config_opts_mingw32 += "QMAKE_CFLAGS = '$($(package)_cflags) $($(package)_cppflags)'"
|
||||
$(package)_config_opts_mingw32 += "QMAKE_CXXFLAGS = '$($(package)_cflags) $($(package)_cppflags)'"
|
||||
$(package)_config_opts_mingw32 += "QMAKE_LFLAGS = '$($(package)_ldflags)'"
|
||||
$(package)_config_opts_mingw32 += -device-option CROSS_COMPILE="$(host)-"
|
||||
$(package)_config_opts_mingw32 += -pch
|
||||
|
||||
$(package)_config_opts_android = -xplatform android-clang
|
||||
$(package)_config_opts_android += -android-sdk $(ANDROID_SDK)
|
||||
@ -164,14 +175,13 @@ $(package)_config_opts_android += -qt-freetype
|
||||
$(package)_config_opts_android += -no-fontconfig
|
||||
$(package)_config_opts_android += -L $(host_prefix)/lib
|
||||
$(package)_config_opts_android += -I $(host_prefix)/include
|
||||
$(package)_config_opts_android += -pch
|
||||
$(package)_config_opts_android += -no-feature-vulkan
|
||||
|
||||
$(package)_config_opts_aarch64_android += -android-arch arm64-v8a
|
||||
$(package)_config_opts_armv7a_android += -android-arch armeabi-v7a
|
||||
$(package)_config_opts_x86_64_android += -android-arch x86_64
|
||||
$(package)_config_opts_i686_android += -android-arch i686
|
||||
|
||||
$(package)_build_env = QT_RCC_TEST=1
|
||||
$(package)_build_env += QT_RCC_SOURCE_DATE_OVERRIDE=1
|
||||
endef
|
||||
|
||||
define $(package)_fetch_cmds
|
||||
@ -198,42 +208,37 @@ endef
|
||||
#
|
||||
# 1. Apply our patches to the extracted source. See each patch for more info.
|
||||
#
|
||||
# 2. Point to lrelease in qttools/bin/lrelease; otherwise Qt will look for it in
|
||||
# $(host)/native/bin/lrelease and not find it.
|
||||
# 2. Create a macOS-Clang-Linux mkspec using our mac-qmake.conf.
|
||||
#
|
||||
# 3. Create a macOS-Clang-Linux mkspec using our mac-qmake.conf.
|
||||
#
|
||||
# 4. After making a copy of the mkspec for the linux-arm-gnueabi host, named
|
||||
# 3. After making a copy of the mkspec for the linux-arm-gnueabi host, named
|
||||
# bitcoin-linux-g++, replace instances of linux-arm-gnueabi with $(host). This
|
||||
# way we can generically support hosts like riscv64-linux-gnu, which Qt doesn't
|
||||
# ship a mkspec for. See it's usage in config_opts_* above.
|
||||
#
|
||||
# 5. Put our C, CXX and LD FLAGS into gcc-base.conf. Only used for non-host builds.
|
||||
# 4. Put our C, CXX and LD FLAGS into gcc-base.conf. Only used for non-host builds.
|
||||
#
|
||||
# 6. Do similar for the win32-g++ mkspec.
|
||||
# 5. Do similar for the win32-g++ mkspec.
|
||||
#
|
||||
# 7. In clang.conf, swap out clang & clang++, for our compiler + flags. See #17466.
|
||||
# 6. In clang.conf, swap out clang & clang++, for our compiler + flags. See #17466.
|
||||
#
|
||||
# 8. Adjust a regex in toolchain.prf, to accomodate Guix's usage of
|
||||
# 7. Adjust a regex in toolchain.prf, to accommodate Guix's usage of
|
||||
# CROSS_LIBRARY_PATH. See #15277.
|
||||
define $(package)_preprocess_cmds
|
||||
patch -p1 -i $($(package)_patch_dir)/freetype_back_compat.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_powerpc_libpng.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/drop_lrelease_dependency.patch && \
|
||||
cp $($(package)_patch_dir)/qt.pro qt.pro && \
|
||||
cp $($(package)_patch_dir)/qttools_src.pro qttools/src/src.pro && \
|
||||
patch -p1 -i $($(package)_patch_dir)/dont_hardcode_pwd.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_qt_pkgconfig.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_configure_mac.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_no_printer.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_rcc_determinism.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/xkb-default.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_android_qmake_conf.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_android_jni_static.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_riscv64_arch.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_android_pch.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/no-xlib.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_mingw_cross_compile.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_qpainter_non_determinism.patch &&\
|
||||
patch -p1 -i $($(package)_patch_dir)/no_sdk_version_check.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_lib_paths.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_limits_header.patch && \
|
||||
sed -i.old "s|updateqm.commands = \$$$$\$$$$LRELEASE|updateqm.commands = $($(package)_extract_dir)/qttools/bin/lrelease|" qttranslations/translations/translations.pro && \
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_montery_include.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/glibc_compatibility.patch && \
|
||||
mkdir -p qtbase/mkspecs/macx-clang-linux &&\
|
||||
cp -f qtbase/mkspecs/macx-clang/qplatformdefs.h qtbase/mkspecs/macx-clang-linux/ &&\
|
||||
cp -f $($(package)_patch_dir)/mac-qmake.conf qtbase/mkspecs/macx-clang-linux/qmake.conf && \
|
||||
@ -242,45 +247,29 @@ define $(package)_preprocess_cmds
|
||||
echo "!host_build: QMAKE_CFLAGS += $($(package)_cflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
|
||||
echo "!host_build: QMAKE_CXXFLAGS += $($(package)_cxxflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
|
||||
echo "!host_build: QMAKE_LFLAGS += $($(package)_ldflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
|
||||
sed -i.old "s|QMAKE_CFLAGS += |!host_build: QMAKE_CFLAGS = $($(package)_cflags) $($(package)_cppflags) |" qtbase/mkspecs/win32-g++/qmake.conf && \
|
||||
sed -i.old "s|QMAKE_CXXFLAGS += |!host_build: QMAKE_CXXFLAGS = $($(package)_cxxflags) $($(package)_cppflags) |" qtbase/mkspecs/win32-g++/qmake.conf && \
|
||||
sed -i.old "0,/^QMAKE_LFLAGS_/s|^QMAKE_LFLAGS_|!host_build: QMAKE_LFLAGS = $($(package)_ldflags)\n&|" qtbase/mkspecs/win32-g++/qmake.conf && \
|
||||
sed -i.old "s|QMAKE_CC = clang|QMAKE_CC = $($(package)_cc)|" qtbase/mkspecs/common/clang.conf && \
|
||||
sed -i.old "s|QMAKE_CXX = clang++|QMAKE_CXX = $($(package)_cxx)|" qtbase/mkspecs/common/clang.conf && \
|
||||
sed -i.old "s|QMAKE_CC = \$$$$\$$$${CROSS_COMPILE}clang|QMAKE_CC = $($(package)_cc)|" qtbase/mkspecs/common/clang.conf && \
|
||||
sed -i.old "s|QMAKE_CXX = \$$$$\$$$${CROSS_COMPILE}clang++|QMAKE_CXX = $($(package)_cxx)|" qtbase/mkspecs/common/clang.conf && \
|
||||
sed -i.old "s/error(\"failed to parse default search paths from compiler output\")/\!darwin: error(\"failed to parse default search paths from compiler output\")/g" qtbase/mkspecs/features/toolchain.prf
|
||||
endef
|
||||
|
||||
define $(package)_config_cmds
|
||||
export PKG_CONFIG_SYSROOT_DIR=/ && \
|
||||
export PKG_CONFIG_LIBDIR=$(host_prefix)/lib/pkgconfig && \
|
||||
export PKG_CONFIG_PATH=$(host_prefix)/share/pkgconfig && \
|
||||
cd qtbase && \
|
||||
./configure $($(package)_config_opts) && \
|
||||
echo "host_build: QT_CONFIG ~= s/system-zlib/zlib" >> mkspecs/qconfig.pri && \
|
||||
echo "CONFIG += force_bootstrap" >> mkspecs/qconfig.pri && \
|
||||
cd .. && \
|
||||
$(MAKE) -C qtbase sub-src-clean && \
|
||||
qtbase/bin/qmake -o qttranslations/Makefile qttranslations/qttranslations.pro && \
|
||||
qtbase/bin/qmake -o qttranslations/translations/Makefile qttranslations/translations/translations.pro && \
|
||||
qtbase/bin/qmake -o qttools/src/linguist/lrelease/Makefile qttools/src/linguist/lrelease/lrelease.pro && \
|
||||
qtbase/bin/qmake -o qttools/src/linguist/lupdate/Makefile qttools/src/linguist/lupdate/lupdate.pro
|
||||
./configure -top-level $($(package)_config_opts)
|
||||
endef
|
||||
|
||||
define $(package)_build_cmds
|
||||
$(MAKE) -C qtbase/src $(addprefix sub-,$($(package)_qt_libs)) && \
|
||||
$(MAKE) -C qttools/src/linguist/lrelease && \
|
||||
$(MAKE) -C qttools/src/linguist/lupdate && \
|
||||
$(MAKE) -C qttranslations
|
||||
$(MAKE)
|
||||
endef
|
||||
|
||||
define $(package)_stage_cmds
|
||||
$(MAKE) -C qtbase/src INSTALL_ROOT=$($(package)_staging_dir) $(addsuffix -install_subtargets,$(addprefix sub-,$($(package)_qt_libs))) && \
|
||||
$(MAKE) -C qttools/src/linguist/lrelease INSTALL_ROOT=$($(package)_staging_dir) install_target && \
|
||||
$(MAKE) -C qttools/src/linguist/lupdate INSTALL_ROOT=$($(package)_staging_dir) install_target && \
|
||||
$(MAKE) -C qttools/src/linguist INSTALL_ROOT=$($(package)_staging_dir) $(addsuffix -install_subtargets,$(addprefix sub-,$($(package)_linguist_tools))) && \
|
||||
$(MAKE) -C qttranslations INSTALL_ROOT=$($(package)_staging_dir) install_subtargets
|
||||
endef
|
||||
|
||||
define $(package)_postprocess_cmds
|
||||
rm -rf native/mkspecs/ native/lib/ lib/cmake/ && \
|
||||
rm -f lib/lib*.la lib/*.prl plugins/*/*.prl
|
||||
rm -f lib/lib*.la
|
||||
endef
|
||||
|
@ -4,11 +4,6 @@ $(package)_download_path=https://xcb.freedesktop.org/dist
|
||||
$(package)_file_name=xcb-proto-$($(package)_version).tar.bz2
|
||||
$(package)_sha256_hash=7ef40ddd855b750bc597d2a435da21e55e502a0fefa85b274f2c922800baaf05
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts=--disable-shared
|
||||
$(package)_config_opts_linux=--with-pic
|
||||
endef
|
||||
|
||||
define $(package)_config_cmds
|
||||
$($(package)_autoconf)
|
||||
endef
|
||||
|
@ -6,6 +6,7 @@ $(package)_sha256_hash=636162c1759805a5a0114a369dffdeccb8af8c859ef6e1445f26a4e6e
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts=--without-fop --without-xmlto --without-xsltproc --disable-specs
|
||||
$(package)_config_opts += --disable-dependency-tracking --enable-option-checking
|
||||
endef
|
||||
|
||||
define $(package)_preprocess_cmds
|
||||
|
@ -5,9 +5,10 @@ $(package)_file_name=$(package)-$($(package)_version).tar.gz
|
||||
$(package)_sha256_hash=bcbabe1e2c7d0eec4ed612e10b94b112dd5f06fcefa994a0c79a45d835cd21eb
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts=--without-docs --disable-shared --disable-curve --disable-curve-keygen --disable-perf --disable-Werror --disable-drafts
|
||||
$(package)_config_opts=--without-docs --disable-shared --disable-curve --disable-curve-keygen --disable-perf
|
||||
$(package)_config_opts += --without-libsodium --without-libgssapi_krb5 --without-pgm --without-norm --without-vmci
|
||||
$(package)_config_opts += --disable-libunwind --disable-radix-tree --without-gcov
|
||||
$(package)_config_opts += --disable-libunwind --disable-radix-tree --without-gcov --disable-dependency-tracking
|
||||
$(package)_config_opts += --disable-Werror --disable-drafts --enable-option-checking
|
||||
$(package)_config_opts_linux=--with-pic
|
||||
$(package)_config_opts_android=--with-pic
|
||||
$(package)_cxxflags=-std=c++17
|
||||
@ -31,5 +32,5 @@ endef
|
||||
|
||||
define $(package)_postprocess_cmds
|
||||
sed -i.old "s/ -lstdc++//" lib/pkgconfig/libzmq.pc && \
|
||||
rm -rf bin share
|
||||
rm -rf bin share lib/*.la
|
||||
endef
|
||||
|
@ -1,31 +0,0 @@
|
||||
package=zlib
|
||||
$(package)_version=1.2.12
|
||||
$(package)_download_path=https://www.zlib.net
|
||||
$(package)_file_name=$(package)-$($(package)_version).tar.gz
|
||||
$(package)_sha256_hash=91844808532e5ce316b3c010929493c0244f3d37593afd6de04f71821d5136d9
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts= CC="$($(package)_cc)"
|
||||
$(package)_config_opts+=CFLAGS="$($(package)_cflags) $($(package)_cppflags) -fPIC"
|
||||
$(package)_config_opts+=RANLIB="$($(package)_ranlib)"
|
||||
$(package)_config_opts+=AR="$($(package)_ar)"
|
||||
$(package)_config_opts_darwin+=AR="$($(package)_libtool)"
|
||||
$(package)_config_opts_darwin+=ARFLAGS="-o"
|
||||
$(package)_config_opts_android+=CHOST=$(host)
|
||||
endef
|
||||
|
||||
# zlib has its own custom configure script that takes in options like CC,
|
||||
# CFLAGS, RANLIB, AR, and ARFLAGS from the environment rather than from
|
||||
# command-line arguments.
|
||||
define $(package)_config_cmds
|
||||
env $($(package)_config_opts) ./configure --static --prefix=$(host_prefix)
|
||||
endef
|
||||
|
||||
define $(package)_build_cmds
|
||||
$(MAKE) libz.a
|
||||
endef
|
||||
|
||||
define $(package)_stage_cmds
|
||||
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||
endef
|
||||
|
@ -1,17 +0,0 @@
|
||||
diff --git a/crypto/ui/ui_openssl.c b/crypto/ui/ui_openssl.c
|
||||
index a38c758..d99edc2 100644
|
||||
--- a/crypto/ui/ui_openssl.c
|
||||
+++ b/crypto/ui/ui_openssl.c
|
||||
@@ -190,9 +190,9 @@
|
||||
# undef SGTTY
|
||||
#endif
|
||||
|
||||
-#if defined(linux) && !defined(TERMIO)
|
||||
-# undef TERMIOS
|
||||
-# define TERMIO
|
||||
+#if defined(linux)
|
||||
+# define TERMIOS
|
||||
+# undef TERMIO
|
||||
# undef SGTTY
|
||||
#endif
|
||||
|
@ -1,20 +0,0 @@
|
||||
commit 67b3ed7406e1d0762188dbad2c44a06824ba0778
|
||||
Author: fanquake <fanquake@gmail.com>
|
||||
Date: Tue Aug 18 15:24:01 2020 +0800
|
||||
|
||||
Drop dependency on lrelease
|
||||
|
||||
Qts buildsystem insists on using the installed lrelease, but gets
|
||||
confused about how to find it. Since we manually control the build
|
||||
order, just drop the dependency.
|
||||
|
||||
See #9469
|
||||
|
||||
diff --git a/qttranslations/translations/translations.pro b/qttranslations/translations/translations.pro
|
||||
index 694544c..eff339d 100644
|
||||
--- a/qttranslations/translations/translations.pro
|
||||
+++ b/qttranslations/translations/translations.pro
|
||||
@@ -109,3 +109,2 @@ updateqm.commands = $$LRELEASE ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT}
|
||||
silent:updateqm.commands = @echo lrelease ${QMAKE_FILE_IN} && $$updateqm.commands
|
||||
-updateqm.depends = $$LRELEASE_EXE
|
||||
updateqm.name = LRELEASE ${QMAKE_FILE_IN}
|
@ -1,6 +1,6 @@
|
||||
--- old/qtbase/src/plugins/platforms/android/androidjnimain.cpp
|
||||
+++ new/qtbase/src/plugins/platforms/android/androidjnimain.cpp
|
||||
@@ -890,6 +890,14 @@
|
||||
@@ -898,6 +898,14 @@
|
||||
__android_log_print(ANDROID_LOG_FATAL, "Qt", "registerNatives failed");
|
||||
return -1;
|
||||
}
|
||||
|
10
depends/patches/qt/fix_android_pch.patch
Normal file
10
depends/patches/qt/fix_android_pch.patch
Normal file
@ -0,0 +1,10 @@
|
||||
--- old/qtbase/mkspecs/common/android-base-head.conf
|
||||
+++ new/qtbase/mkspecs/common/android-base-head.conf
|
||||
@@ -73,6 +73,6 @@ CROSS_COMPILE = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX-
|
||||
QMAKE_PCH_OUTPUT_EXT = .gch
|
||||
|
||||
QMAKE_CFLAGS_PRECOMPILE = -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
|
||||
-QMAKE_CFLAGS_USE_PRECOMPILE = -include ${QMAKE_PCH_OUTPUT_BASE}
|
||||
+QMAKE_CFLAGS_USE_PRECOMPILE = -include-pch ${QMAKE_PCH_OUTPUT}
|
||||
QMAKE_CXXFLAGS_PRECOMPILE = -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
|
||||
QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
|
@ -1,20 +1,10 @@
|
||||
--- old/qtbase/mkspecs/android-clang/qmake.conf
|
||||
+++ new/qtbase/mkspecs/android-clang/qmake.conf
|
||||
@@ -30,7 +30,7 @@
|
||||
QMAKE_CFLAGS += -target mips64el-none-linux-android
|
||||
@@ -47,7 +47,7 @@ ANDROID_STDCPP_PATH = $$ANDROID_SOURCES_CXX_STL_LIBDIR/libc++_shared.so
|
||||
ANDROID_USE_LLVM = true
|
||||
|
||||
QMAKE_CFLAGS += -gcc-toolchain $$NDK_TOOLCHAIN_PATH
|
||||
-QMAKE_LINK = $$QMAKE_CXX $$QMAKE_CFLAGS -Wl,--exclude-libs,libgcc.a
|
||||
+QMAKE_LINK = $$QMAKE_CXX $$QMAKE_CFLAGS -Wl,--exclude-libs,libgcc.a -nostdlib++
|
||||
QMAKE_CFLAGS += -DANDROID_HAS_WSTRING --sysroot=$$NDK_ROOT/sysroot \
|
||||
-isystem $$NDK_ROOT/sysroot/usr/include/$$NDK_TOOLS_PREFIX \
|
||||
-isystem $$NDK_ROOT/sources/cxx-stl/llvm-libc++/include \
|
||||
@@ -40,7 +40,7 @@
|
||||
ANDROID_SOURCES_CXX_STL_LIBDIR = $$NDK_ROOT/sources/cxx-stl/llvm-libc++/libs/$$ANDROID_TARGET_ARCH
|
||||
|
||||
ANDROID_STDCPP_PATH = $$ANDROID_SOURCES_CXX_STL_LIBDIR/libc++_shared.so
|
||||
-ANDROID_CXX_STL_LIBS = -lc++
|
||||
+ANDROID_CXX_STL_LIBS = -lc++_shared
|
||||
|
||||
QMAKE_ARM_CFLAGS_RELEASE = -Oz
|
||||
QMAKE_ARM_CFLAGS_RELEASE_WITH_DEBUGINFO = -g -Oz
|
||||
exists($$ANDROID_SOURCES_CXX_STL_LIBDIR/libc++.so): \
|
||||
- ANDROID_CXX_STL_LIBS = -lc++
|
||||
+ ANDROID_CXX_STL_LIBS = -lc++_shared
|
||||
else: \
|
||||
ANDROID_CXX_STL_LIBS = $$ANDROID_SOURCES_CXX_STL_LIBDIR/libc++.so.$$replace(ANDROID_PLATFORM, "android-", "")
|
||||
|
@ -1,50 +0,0 @@
|
||||
--- old/qtbase/mkspecs/features/mac/sdk.prf 2018-02-08 10:24:48.000000000 -0800
|
||||
+++ new/qtbase/mkspecs/features/mac/sdk.prf 2018-03-23 10:38:56.000000000 -0700
|
||||
@@ -8,21 +8,21 @@
|
||||
defineReplace(xcodeSDKInfo) {
|
||||
info = $$1
|
||||
equals(info, "Path"): \
|
||||
- info = --show-sdk-path
|
||||
+ infoarg = --show-sdk-path
|
||||
equals(info, "PlatformPath"): \
|
||||
- info = --show-sdk-platform-path
|
||||
+ infoarg = --show-sdk-platform-path
|
||||
equals(info, "SDKVersion"): \
|
||||
- info = --show-sdk-version
|
||||
+ infoarg = --show-sdk-version
|
||||
sdk = $$2
|
||||
isEmpty(sdk): \
|
||||
sdk = $$QMAKE_MAC_SDK
|
||||
|
||||
isEmpty(QMAKE_MAC_SDK.$${sdk}.$${info}) {
|
||||
- QMAKE_MAC_SDK.$${sdk}.$${info} = $$system("/usr/bin/xcrun --sdk $$sdk $$info 2>/dev/null")
|
||||
+ QMAKE_MAC_SDK.$${sdk}.$${info} = $$system("/usr/bin/xcrun --sdk $$sdk $$infoarg 2>/dev/null")
|
||||
# --show-sdk-platform-path won't work for Command Line Tools; this is fine
|
||||
# only used by the XCTest backend to testlib
|
||||
- isEmpty(QMAKE_MAC_SDK.$${sdk}.$${info}):if(!isEmpty(QMAKE_XCODEBUILD_PATH)|!equals(info, "--show-sdk-platform-path")): \
|
||||
- error("Could not resolve SDK $$info for \'$$sdk\'")
|
||||
+ isEmpty(QMAKE_MAC_SDK.$${sdk}.$${info}):if(!isEmpty(QMAKE_XCODEBUILD_PATH)|!equals(infoarg, "--show-sdk-platform-path")): \
|
||||
+ error("Could not resolve SDK $$info for \'$$sdk\' using $$infoarg")
|
||||
cache(QMAKE_MAC_SDK.$${sdk}.$${info}, set stash, QMAKE_MAC_SDK.$${sdk}.$${info})
|
||||
}
|
||||
|
||||
--- old/qtbase/configure 2018-02-08 10:24:48.000000000 -0800
|
||||
+++ new/qtbase/configure 2018-03-23 05:42:29.000000000 -0700
|
||||
@@ -232,8 +232,13 @@
|
||||
|
||||
sdk=$(getSingleQMakeVariable "QMAKE_MAC_SDK" "$1")
|
||||
if [ -z "$sdk" ]; then echo "QMAKE_MAC_SDK must be set when building on Mac" >&2; exit 1; fi
|
||||
- sysroot=$(/usr/bin/xcrun --sdk $sdk --show-sdk-path 2>/dev/null)
|
||||
- if [ -z "$sysroot" ]; then echo "Failed to resolve SDK path for '$sdk'" >&2; exit 1; fi
|
||||
+ sysroot=$(getSingleQMakeVariable "QMAKE_MAC_SDK_PATH" "$1")
|
||||
+
|
||||
+ echo "sysroot pre-configured as $sysroot";
|
||||
+ if [ -z "$sysroot" ]; then
|
||||
+ sysroot=$(/usr/bin/xcrun --sdk $sdk --show-sdk-path 2>/dev/null)
|
||||
+ if [ -z "$sysroot" ]; then echo "Failed to resolve SDK path for '$sdk'" >&2; exit 1; fi
|
||||
+ fi
|
||||
|
||||
case "$sdk" in
|
||||
macosx*)
|
||||
|
||||
|
193
depends/patches/qt/fix_lib_paths.patch
Normal file
193
depends/patches/qt/fix_lib_paths.patch
Normal file
@ -0,0 +1,193 @@
|
||||
--- old/qtbase/mkspecs/common/mac.conf
|
||||
+++ new/qtbase/mkspecs/common/mac.conf
|
||||
@@ -14,7 +14,6 @@
|
||||
|
||||
QMAKE_RESOURCE = /Developer/Tools/Rez
|
||||
QMAKE_EXTENSION_SHLIB = dylib
|
||||
-QMAKE_EXTENSIONS_AUX_SHLIB = tbd
|
||||
QMAKE_LIBDIR =
|
||||
|
||||
# sdk.prf will prefix the proper SDK sysroot
|
||||
|
||||
--- old/qtbase/mkspecs/features/qmake_use.prf
|
||||
+++ new/qtbase/mkspecs/features/qmake_use.prf
|
||||
@@ -22,6 +22,8 @@
|
||||
!defined(QMAKE_LIBS_$$nu, var): \
|
||||
error("Library '$$lower($$replace(nu, _, -))' is not defined.")
|
||||
|
||||
+ QMAKE_LIBDIR += $$eval(QMAKE_LIBDIR_$$nu)
|
||||
+
|
||||
debug: \
|
||||
LIBS$${suffix} += $$eval(QMAKE_LIBS_$${nu}_DEBUG) $$eval(QMAKE_LIBS_$$nu)
|
||||
else: \
|
||||
|
||||
--- old/qtbase/mkspecs/features/qt_configure.prf
|
||||
+++ new/qtbase/mkspecs/features/qt_configure.prf
|
||||
@@ -526,98 +526,23 @@
|
||||
return($$sysrootified)
|
||||
}
|
||||
|
||||
-# libs-var, libs, in-paths, out-paths-var
|
||||
+# libs-var, libs, in-paths
|
||||
defineTest(qtConfResolveLibs) {
|
||||
- ret = true
|
||||
- paths = $$3
|
||||
- out =
|
||||
- copy = false
|
||||
- for (l, 2) {
|
||||
- $$copy {
|
||||
- copy = false
|
||||
- out += $$l
|
||||
- } else: equals(l, "-s") {
|
||||
- # em++ flag to link libraries from emscripten-ports; passed on literally.
|
||||
- copy = true
|
||||
- out += $$l
|
||||
- } else: contains(l, "^-L.*") {
|
||||
- lp = $$replace(l, "^-L", )
|
||||
- gcc: lp = $$qtGccSysrootifiedPath($$lp)
|
||||
- !exists($$lp/.) {
|
||||
- qtLog("Library path $$val_escape(lp) is invalid.")
|
||||
- ret = false
|
||||
- } else {
|
||||
- paths += $$lp
|
||||
- }
|
||||
- } else: contains(l, "^-l.*") {
|
||||
- lib = $$replace(l, "^-l", )
|
||||
- lcan =
|
||||
- integrity:contains(lib, "^.*\\.a") {
|
||||
- # INTEGRITY compiler searches for exact filename
|
||||
- # if -l argument has .a suffix
|
||||
- lcan += $${lib}
|
||||
- } else: contains(lib, "^:.*") {
|
||||
- # Use exact filename when -l:filename syntax is used.
|
||||
- lib ~= s/^://
|
||||
- lcan += $${lib}
|
||||
- } else: unix {
|
||||
- # Under UNIX, we look for actual shared libraries, in addition
|
||||
- # to static ones.
|
||||
- shexts = $$QMAKE_EXTENSION_SHLIB $$QMAKE_EXTENSIONS_AUX_SHLIB
|
||||
- for (ext, shexts) {
|
||||
- lcan += $${QMAKE_PREFIX_SHLIB}$${lib}.$${ext}
|
||||
- }
|
||||
- lcan += \
|
||||
- $${QMAKE_PREFIX_STATICLIB}$${lib}.$${QMAKE_EXTENSION_STATICLIB}
|
||||
- } else {
|
||||
- # Under Windows, we look only for static libraries, as even for DLLs
|
||||
- # one actually links against a static import library.
|
||||
- mingw {
|
||||
- lcan += \
|
||||
- # MinGW supports UNIX-style library naming in addition to
|
||||
- # the MSVC style.
|
||||
- lib$${lib}.dll.a lib$${lib}.a \
|
||||
- # Fun fact: prefix-less libraries are also supported.
|
||||
- $${lib}.dll.a $${lib}.a
|
||||
- }
|
||||
- lcan += $${lib}.lib
|
||||
- }
|
||||
- l = $$qtConfFindInPathList($$lcan, $$paths $$EXTRA_LIBDIR $$QMAKE_DEFAULT_LIBDIRS)
|
||||
- isEmpty(l) {
|
||||
- qtLog("None of [$$val_escape(lcan)] found in [$$val_escape(paths)] and global paths.")
|
||||
- ret = false
|
||||
- } else {
|
||||
- out += $$l
|
||||
- }
|
||||
- } else {
|
||||
- out += $$l
|
||||
- }
|
||||
- }
|
||||
- $$1 = $$out
|
||||
+ for (path, 3): \
|
||||
+ pre_lflags += -L$$path
|
||||
+ $$1 = $$pre_lflags $$2
|
||||
export($$1)
|
||||
- !isEmpty(4) {
|
||||
- $$4 = $$paths
|
||||
- export($$4)
|
||||
- }
|
||||
- return($$ret)
|
||||
-}
|
||||
-
|
||||
-# source-var
|
||||
-defineTest(qtConfResolveAllLibs) {
|
||||
- ret = true
|
||||
- !qtConfResolveLibs($${1}.libs, $$eval($${1}.libs), , $${1}.libdirs): \
|
||||
- ret = false
|
||||
- for (b, $${1}.builds._KEYS_): \
|
||||
- !qtConfResolveLibs($${1}.builds.$${b}, $$eval($${1}.builds.$${b}), $$eval($${1}.libdirs), ): \
|
||||
- ret = false
|
||||
- return($$ret)
|
||||
+ return(true)
|
||||
}
|
||||
|
||||
# libs-var, in-paths, libs
|
||||
defineTest(qtConfResolvePathLibs) {
|
||||
ret = true
|
||||
- gcc: 2 = $$qtGccSysrootifiedPaths($$2)
|
||||
- for (libdir, 2) {
|
||||
+ gcc: \
|
||||
+ local_paths = $$qtGccSysrootifiedPaths($$2)
|
||||
+ else: \
|
||||
+ local_paths = $$2
|
||||
+ for (libdir, local_paths) {
|
||||
!exists($$libdir/.) {
|
||||
qtLog("Library path $$val_escape(libdir) is invalid.")
|
||||
ret = false
|
||||
@@ -667,8 +592,11 @@
|
||||
# includes-var, in-paths, test-object-var
|
||||
defineTest(qtConfResolvePathIncs) {
|
||||
ret = true
|
||||
- gcc: 2 = $$qtGccSysrootifiedPaths($$2)
|
||||
- for (incdir, 2) {
|
||||
+ gcc: \
|
||||
+ local_paths = $$qtGccSysrootifiedPaths($$2)
|
||||
+ else: \
|
||||
+ local_paths = $$2
|
||||
+ for (incdir, local_paths) {
|
||||
!exists($$incdir/.) {
|
||||
qtLog("Include path $$val_escape(incdir) is invalid.")
|
||||
ret = false
|
||||
@@ -727,6 +655,7 @@
|
||||
vars += $$eval(config.commandline.rev_assignments.$${iv})
|
||||
defined(config.input.$${iv}, var) {
|
||||
eval($${1}.builds.$${b} = $$eval(config.input.$${iv}))
|
||||
+ export($${1}.builds.$${b})
|
||||
$${1}.builds._KEYS_ *= $${b}
|
||||
any = true
|
||||
} else {
|
||||
@@ -741,11 +670,14 @@
|
||||
export($${1}.builds._KEYS_)
|
||||
# we also reset the generic libs, to avoid surprises.
|
||||
$${1}.libs =
|
||||
+ export($${1}.libs)
|
||||
}
|
||||
|
||||
# direct libs. overwrites inline libs.
|
||||
- defined(config.input.$${input}.libs, var): \
|
||||
+ defined(config.input.$${input}.libs, var) {
|
||||
eval($${1}.libs = $$eval(config.input.$${input}.libs))
|
||||
+ export($${1}.libs)
|
||||
+ }
|
||||
|
||||
includes = $$eval(config.input.$${input}.incdir)
|
||||
|
||||
@@ -754,6 +686,7 @@
|
||||
!isEmpty(prefix) {
|
||||
includes += $$prefix/include
|
||||
$${1}.libs = -L$$prefix/lib $$eval($${1}.libs)
|
||||
+ export($${1}.libs)
|
||||
}
|
||||
|
||||
libdir = $$eval(config.input.$${input}.libdir)
|
||||
@@ -762,11 +695,9 @@
|
||||
for (ld, libdir): \
|
||||
libs += -L$$ld
|
||||
$${1}.libs = $$libs $$eval($${1}.libs)
|
||||
+ export($${1}.libs)
|
||||
}
|
||||
|
||||
- !qtConfResolveAllLibs($$1): \
|
||||
- return(false)
|
||||
-
|
||||
!qtConfResolvePathIncs($${1}.includedir, $$includes, $$2): \
|
||||
return(false)
|
||||
|
@ -1,25 +0,0 @@
|
||||
commit 5a992a549adfe5a587bbcd6cd2b2cee47d236e27
|
||||
Author: fanquake <fanquake@gmail.com>
|
||||
Date: Fri Sep 4 08:13:44 2020 +0800
|
||||
|
||||
Work around broken mingw cross-compilation
|
||||
|
||||
See upstream issues:
|
||||
https://bugreports.qt.io/browse/QTBUG-63637
|
||||
https://bugreports.qt.io/browse/QTBUG-63659
|
||||
https://codereview.qt-project.org/q/8bebded9
|
||||
|
||||
We should be able to drop this once we are building qt 5.10.1 or later.
|
||||
|
||||
Added in #12971.
|
||||
|
||||
diff --git a/qtbase/mkspecs/win32-g++/qmake.conf b/qtbase/mkspecs/win32-g++/qmake.conf
|
||||
index e071a0d1..ad229b10 100644
|
||||
--- a/qtbase/mkspecs/win32-g++/qmake.conf
|
||||
+++ b/qtbase/mkspecs/win32-g++/qmake.conf
|
||||
@@ -87,3 +87,5 @@ QMAKE_NM = $${CROSS_COMPILE}nm -P
|
||||
include(../common/angle.conf)
|
||||
|
||||
load(qt_config)
|
||||
+QMAKE_LINK_OBJECT_MAX = 10
|
||||
+QMAKE_LINK_OBJECT_SCRIPT = object_script
|
22
depends/patches/qt/fix_montery_include.patch
Normal file
22
depends/patches/qt/fix_montery_include.patch
Normal file
@ -0,0 +1,22 @@
|
||||
From: Øystein Heskestad <oystein.heskestad@qt.io>
|
||||
Date: Wed, 27 Oct 2021 13:07:46 +0200
|
||||
Subject: [PATCH] Add missing macOS header file that was indirectly included before
|
||||
|
||||
See: https://bugreports.qt.io/browse/QTBUG-97855
|
||||
|
||||
Upstream Commits:
|
||||
- Qt 6.2: c884bf138a21dd7320e35cef34d24e22e74d7ce0
|
||||
|
||||
diff --git a/qtbase/src/plugins/platforms/cocoa/qiosurfacegraphicsbuffer.h b/qtbase/src/plugins/platforms/cocoa/qiosurfacegraphicsbuffer.h
|
||||
index e070ba977d..0896917334 100644
|
||||
--- a/qtbase/src/plugins/platforms/cocoa/qiosurfacegraphicsbuffer.h
|
||||
+++ b/qtbase/src/plugins/platforms/cocoa/qiosurfacegraphicsbuffer.h
|
||||
@@ -43,6 +43,8 @@
|
||||
#include <qpa/qplatformgraphicsbuffer.h>
|
||||
#include <private/qcore_mac_p.h>
|
||||
|
||||
+#include <CoreGraphics/CGColorSpace.h>
|
||||
+
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QIOSurfaceGraphicsBuffer : public QPlatformGraphicsBuffer
|
@ -10,10 +10,10 @@
|
||||
|
||||
--- x/qtbase/src/plugins/plugins.pro
|
||||
+++ y/qtbase/src/plugins/plugins.pro
|
||||
@@ -8,6 +8,3 @@ qtHaveModule(gui) {
|
||||
qtConfig(imageformatplugin): SUBDIRS *= imageformats
|
||||
@@ -9,6 +9,3 @@ qtHaveModule(gui) {
|
||||
!android:qtConfig(library): SUBDIRS *= generic
|
||||
}
|
||||
qtHaveModule(widgets): SUBDIRS += styles
|
||||
-
|
||||
-!winrt:qtHaveModule(printsupport): \
|
||||
- SUBDIRS += printsupport
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user