Modernize Qt dependency path

This commit is contained in:
root
2026-04-30 06:38:51 +00:00
parent c655e4d576
commit 49ac41045b
43 changed files with 2034 additions and 368 deletions
+6 -5
View File
@@ -237,8 +237,9 @@ am__DIST_COMMON = $(srcdir)/Makefile.in \
$(top_srcdir)/test/functional/test_runner.py \ $(top_srcdir)/test/functional/test_runner.py \
$(top_srcdir)/test/util/bitcoin-util-test.py \ $(top_srcdir)/test/util/bitcoin-util-test.py \
$(top_srcdir)/test/util/rpcauth-test.py COPYING INSTALL \ $(top_srcdir)/test/util/rpcauth-test.py COPYING INSTALL \
build-aux/compile build-aux/config.guess build-aux/config.sub \ README.md build-aux/compile build-aux/config.guess \
build-aux/install-sh build-aux/ltmain.sh build-aux/missing build-aux/config.sub build-aux/install-sh build-aux/ltmain.sh \
build-aux/missing
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION) distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir) top_distdir = $(distdir)
@@ -354,6 +355,7 @@ EVENT_PTHREADS_LIBS = @EVENT_PTHREADS_LIBS@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
EXTENDED_FUNCTIONAL_TESTS = @EXTENDED_FUNCTIONAL_TESTS@ EXTENDED_FUNCTIONAL_TESTS = @EXTENDED_FUNCTIONAL_TESTS@
FGREP = @FGREP@ FGREP = @FGREP@
FILECMD = @FILECMD@
GCOV = @GCOV@ GCOV = @GCOV@
GENHTML = @GENHTML@ GENHTML = @GENHTML@
GENISOIMAGE = @GENISOIMAGE@ GENISOIMAGE = @GENISOIMAGE@
@@ -364,7 +366,7 @@ GREP = @GREP@
HARDENED_CPPFLAGS = @HARDENED_CPPFLAGS@ HARDENED_CPPFLAGS = @HARDENED_CPPFLAGS@
HARDENED_CXXFLAGS = @HARDENED_CXXFLAGS@ HARDENED_CXXFLAGS = @HARDENED_CXXFLAGS@
HARDENED_LDFLAGS = @HARDENED_LDFLAGS@ HARDENED_LDFLAGS = @HARDENED_LDFLAGS@
HAVE_CXX11 = @HAVE_CXX11@ HAVE_CXX17 = @HAVE_CXX17@
HEXDUMP = @HEXDUMP@ HEXDUMP = @HEXDUMP@
IMAGEMAGICK_CONVERT = @IMAGEMAGICK_CONVERT@ IMAGEMAGICK_CONVERT = @IMAGEMAGICK_CONVERT@
INSTALL = @INSTALL@ INSTALL = @INSTALL@
@@ -435,8 +437,6 @@ PYTHON = @PYTHON@
PYTHONPATH = @PYTHONPATH@ PYTHONPATH = @PYTHONPATH@
QR_CFLAGS = @QR_CFLAGS@ QR_CFLAGS = @QR_CFLAGS@
QR_LIBS = @QR_LIBS@ QR_LIBS = @QR_LIBS@
QT5_CFLAGS = @QT5_CFLAGS@
QT5_LIBS = @QT5_LIBS@
QTACCESSIBILITY_CFLAGS = @QTACCESSIBILITY_CFLAGS@ QTACCESSIBILITY_CFLAGS = @QTACCESSIBILITY_CFLAGS@
QTACCESSIBILITY_LIBS = @QTACCESSIBILITY_LIBS@ QTACCESSIBILITY_LIBS = @QTACCESSIBILITY_LIBS@
QTCGL_CFLAGS = @QTCGL_CFLAGS@ QTCGL_CFLAGS = @QTCGL_CFLAGS@
@@ -459,6 +459,7 @@ QTTHEME_CFLAGS = @QTTHEME_CFLAGS@
QTTHEME_LIBS = @QTTHEME_LIBS@ QTTHEME_LIBS = @QTTHEME_LIBS@
QTXCBQPA_CFLAGS = @QTXCBQPA_CFLAGS@ QTXCBQPA_CFLAGS = @QTXCBQPA_CFLAGS@
QTXCBQPA_LIBS = @QTXCBQPA_LIBS@ QTXCBQPA_LIBS = @QTXCBQPA_LIBS@
QT_CFLAGS = @QT_CFLAGS@
QT_DBUS_CFLAGS = @QT_DBUS_CFLAGS@ QT_DBUS_CFLAGS = @QT_DBUS_CFLAGS@
QT_DBUS_INCLUDES = @QT_DBUS_INCLUDES@ QT_DBUS_INCLUDES = @QT_DBUS_INCLUDES@
QT_DBUS_LIBS = @QT_DBUS_LIBS@ QT_DBUS_LIBS = @QT_DBUS_LIBS@
+83 -17
View File
@@ -53,7 +53,7 @@ dnl CAUTION: Do not use this inside of a conditional.
AC_DEFUN([BITCOIN_QT_INIT],[ AC_DEFUN([BITCOIN_QT_INIT],[
dnl enable qt support dnl enable qt support
AC_ARG_WITH([gui], AC_ARG_WITH([gui],
[AS_HELP_STRING([--with-gui@<:@=no|qt5|auto@:>@], [AS_HELP_STRING([--with-gui@<:@=no|qt5|qt6|auto@:>@],
[build agrarian-qt GUI (default=auto)])], [build agrarian-qt GUI (default=auto)])],
[ [
bitcoin_qt_want_version=$withval bitcoin_qt_want_version=$withval
@@ -136,11 +136,19 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
fi fi
_BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QMinimalIntegrationPlugin)],[-lqminimal]) _BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QMinimalIntegrationPlugin)],[-lqminimal])
AC_DEFINE(QT_QPA_PLATFORM_MINIMAL, 1, [Define this symbol if the minimal qt platform exists]) AC_DEFINE(QT_QPA_PLATFORM_MINIMAL, 1, [Define this symbol if the minimal qt platform exists])
if test "x$QT_LIB_PREFIX" = xQt6; then
_BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QTlsBackendOpenSSL)],[-lqopensslbackend -lssl -lcrypto])
AC_DEFINE(QT_TLS_OPENSSL, 1, [Define this symbol if the Qt OpenSSL TLS backend exists])
fi
if test "x$TARGET_OS" = xwindows; then if test "x$TARGET_OS" = xwindows; then
_BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)],[-lqwindows]) _BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)],[-lqwindows])
AC_DEFINE(QT_QPA_PLATFORM_WINDOWS, 1, [Define this symbol if the qt platform is windows]) AC_DEFINE(QT_QPA_PLATFORM_WINDOWS, 1, [Define this symbol if the qt platform is windows])
elif test "x$TARGET_OS" = xlinux; then elif test "x$TARGET_OS" = xlinux; then
_BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QXcbIntegrationPlugin)],[-lqxcb -lxcb-static]) if test "x$QT_LIB_PREFIX" = xQt6; then
_BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QXcbIntegrationPlugin)],[-lqxcb])
else
_BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QXcbIntegrationPlugin)],[-lqxcb -lxcb-static])
fi
AC_DEFINE(QT_QPA_PLATFORM_XCB, 1, [Define this symbol if the qt platform is xcb]) AC_DEFINE(QT_QPA_PLATFORM_XCB, 1, [Define this symbol if the qt platform is xcb])
elif test "x$TARGET_OS" = xdarwin; then elif test "x$TARGET_OS" = xdarwin; then
AX_CHECK_LINK_FLAG([[-framework IOKit]],[QT_LIBS="$QT_LIBS -framework IOKit"],[AC_MSG_ERROR(could not iokit framework)]) AX_CHECK_LINK_FLAG([[-framework IOKit]],[QT_LIBS="$QT_LIBS -framework IOKit"],[AC_MSG_ERROR(could not iokit framework)])
@@ -153,7 +161,13 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
]) ])
if test "x$use_pkgconfig$qt_bin_path" = xyes; then if test "x$use_pkgconfig$qt_bin_path" = xyes; 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$qt_bin_path" != x && test -d "$qt_bin_path/../libexec"; then
qt_bin_path="$qt_bin_path$PATH_SEPARATOR$qt_bin_path/../libexec"
fi
if test "x$qt_bin_path" != x; then
qt_bin_path="$qt_bin_path$PATH_SEPARATOR$PATH"
fi fi
if test "x$use_hardening" != xno; then if test "x$use_hardening" != xno; then
@@ -203,11 +217,11 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
]) ])
fi fi
BITCOIN_QT_PATH_PROGS([MOC], [moc-qt5 moc5 moc], $qt_bin_path) BITCOIN_QT_PATH_PROGS([MOC], [moc-qt6 moc6 moc-qt5 moc5 moc], $qt_bin_path)
BITCOIN_QT_PATH_PROGS([UIC], [uic-qt5 uic5 uic], $qt_bin_path) BITCOIN_QT_PATH_PROGS([UIC], [uic-qt6 uic6 uic-qt5 uic5 uic], $qt_bin_path)
BITCOIN_QT_PATH_PROGS([RCC], [rcc-qt5 rcc5 rcc], $qt_bin_path) BITCOIN_QT_PATH_PROGS([RCC], [rcc-qt6 rcc6 rcc-qt5 rcc5 rcc], $qt_bin_path)
BITCOIN_QT_PATH_PROGS([LRELEASE], [lrelease-qt5 lrelease5 lrelease], $qt_bin_path) BITCOIN_QT_PATH_PROGS([LRELEASE], [lrelease-qt6 lrelease6 lrelease-qt5 lrelease5 lrelease], $qt_bin_path)
BITCOIN_QT_PATH_PROGS([LUPDATE], [lupdate-qt5 lupdate5 lupdate],$qt_bin_path, yes) BITCOIN_QT_PATH_PROGS([LUPDATE], [lupdate-qt6 lupdate6 lupdate-qt5 lupdate5 lupdate],$qt_bin_path, yes)
MOC_DEFS='-DHAVE_CONFIG_H -I$(srcdir)' MOC_DEFS='-DHAVE_CONFIG_H -I$(srcdir)'
case $host in case $host in
@@ -246,7 +260,7 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
],[ ],[
bitcoin_enable_qt=no bitcoin_enable_qt=no
]) ])
AC_MSG_RESULT([$bitcoin_enable_qt (Qt5)]) AC_MSG_RESULT([$bitcoin_enable_qt ($QT_LIB_PREFIX)])
AC_SUBST(QT_PIE_FLAGS) AC_SUBST(QT_PIE_FLAGS)
AC_SUBST(QT_INCLUDES) AC_SUBST(QT_INCLUDES)
@@ -256,7 +270,7 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
AC_SUBST(QT_DBUS_LIBS) AC_SUBST(QT_DBUS_LIBS)
AC_SUBST(QT_TEST_INCLUDES) AC_SUBST(QT_TEST_INCLUDES)
AC_SUBST(QT_TEST_LIBS) AC_SUBST(QT_TEST_LIBS)
AC_SUBST(QT_SELECT, qt5) AC_SUBST(QT_SELECT)
AC_SUBST(MOC_DEFS) AC_SUBST(MOC_DEFS)
]) ])
@@ -284,6 +298,26 @@ AC_DEFUN([_BITCOIN_QT_CHECK_QT5],[
[bitcoin_cv_qt5=no]) [bitcoin_cv_qt5=no])
])]) ])])
dnl Internal. Check if the included version of Qt is Qt6.
dnl Requires: INCLUDES must be populated as necessary.
dnl Output: bitcoin_cv_qt6=yes|no
AC_DEFUN([_BITCOIN_QT_CHECK_QT6],[
AC_CACHE_CHECK(for Qt 6, bitcoin_cv_qt6,[
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <QtCore/qconfig.h>
#ifndef QT_VERSION
# include <QtCore/qglobal.h>
#endif
]],
[[
#if QT_VERSION < 0x060000 || QT_VERSION_MAJOR < 6
choke
#endif
]])],
[bitcoin_cv_qt6=yes],
[bitcoin_cv_qt6=no])
])])
dnl Internal. Check if the included version of Qt is greater than Qt58. dnl Internal. Check if the included version of Qt is greater than Qt58.
dnl Requires: INCLUDES must be populated as necessary. dnl Requires: INCLUDES must be populated as necessary.
dnl Output: bitcoin_cv_qt5=yes|no dnl Output: bitcoin_cv_qt5=yes|no
@@ -359,6 +393,28 @@ AC_DEFUN([_BITCOIN_QT_FIND_STATIC_PLUGINS],[
if test -d "$qt_plugin_path/accessible"; then if test -d "$qt_plugin_path/accessible"; then
QT_LIBS="$QT_LIBS -L$qt_plugin_path/accessible" QT_LIBS="$QT_LIBS -L$qt_plugin_path/accessible"
fi fi
if test "x$QT_LIB_PREFIX" = xQt6; then
if test -d "$qt_plugin_path/imageformats"; then
QT_LIBS="$QT_LIBS -L$qt_plugin_path/imageformats"
fi
if test -d "$qt_plugin_path/tls"; then
QT_LIBS="$QT_LIBS -L$qt_plugin_path/tls"
fi
if test -d "$qt_plugin_path/platforminputcontexts"; then
QT_LIBS="$QT_LIBS -L$qt_plugin_path/platforminputcontexts"
fi
if test -d "$qt_plugin_path/generic"; then
QT_LIBS="$QT_LIBS -L$qt_plugin_path/generic"
fi
if test "x$TARGET_OS" = xlinux; then
QT_LIBS="-lQt6XcbQpa -lQt6InputSupport -lQt6FbSupport -lQt6DeviceDiscoverySupport $QT_LIBS"
QT_LIBS="$QT_LIBS -lQt6BundledHarfbuzz -lQt6BundledLibpng -lQt6BundledLibjpeg -lQt6BundledPcre2"
if test "x$PKG_CONFIG" != x; then
QT6_XCB_LIBS=`PKG_CONFIG_LIBDIR=/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/share/pkgconfig $PKG_CONFIG --libs --static x11 x11-xcb xcb xcb-cursor xcb-icccm xcb-image xcb-keysyms xcb-randr xcb-renderutil xcb-shape xcb-shm xcb-sync xcb-xfixes xcb-xkb xkbcommon xkbcommon-x11 fontconfig freetype2 harfbuzz 2>/dev/null`
QT_LIBS="$QT_LIBS $QT6_XCB_LIBS"
fi
fi
else
if test "x$use_pkgconfig" = xyes; then if test "x$use_pkgconfig" = xyes; then
: dnl : dnl
m4_ifdef([PKG_CHECK_MODULES],[ m4_ifdef([PKG_CHECK_MODULES],[
@@ -415,6 +471,7 @@ AC_DEFUN([_BITCOIN_QT_FIND_STATIC_PLUGINS],[
fi fi
fi fi
fi fi
fi
fi fi
]) ])
@@ -427,14 +484,17 @@ dnl Outputs: All necessary QT_* variables are set.
dnl Outputs: have_qt_test and have_qt_dbus are set (if applicable) to yes|no. dnl Outputs: have_qt_test and have_qt_dbus are set (if applicable) to yes|no.
AC_DEFUN([_BITCOIN_QT_FIND_LIBS_WITH_PKGCONFIG],[ AC_DEFUN([_BITCOIN_QT_FIND_LIBS_WITH_PKGCONFIG],[
m4_ifdef([PKG_CHECK_MODULES],[ m4_ifdef([PKG_CHECK_MODULES],[
QT_LIB_PREFIX=Qt5 QT_LIB_PREFIX=Qt6
qt5_modules="Qt5Core Qt5Gui Qt5Network Qt5Widgets" qt_modules="Qt6Core Qt6Gui Qt6Network Qt6Widgets"
if test "x$bitcoin_qt_want_version" = xqt5; then
QT_LIB_PREFIX=Qt5
qt_modules="Qt5Core Qt5Gui Qt5Network Qt5Widgets"
fi
BITCOIN_QT_CHECK([ BITCOIN_QT_CHECK([
PKG_CHECK_MODULES([QT5], [$qt5_modules], [QT_INCLUDES="$QT5_CFLAGS"; QT_LIBS="$QT5_LIBS" have_qt=yes],[have_qt=no]) PKG_CHECK_MODULES([QT], [$qt_modules], [QT_INCLUDES="$QT_CFLAGS"; QT_LIBS="$QT_LIBS" have_qt=yes],[have_qt=no])
if test "x$have_qt" != xyes; then if test "x$have_qt" != xyes; then
have_qt=no _BITCOIN_QT_FIND_LIBS_WITHOUT_PKGCONFIG
BITCOIN_QT_FAIL([Qt dependencies not found])
fi fi
]) ])
BITCOIN_QT_CHECK([ BITCOIN_QT_CHECK([
@@ -471,10 +531,17 @@ AC_DEFUN([_BITCOIN_QT_FIND_LIBS_WITHOUT_PKGCONFIG],[
BITCOIN_QT_CHECK([ BITCOIN_QT_CHECK([
if test "x$bitcoin_qt_want_version" = xauto; then if test "x$bitcoin_qt_want_version" = xauto; then
_BITCOIN_QT_CHECK_QT6
_BITCOIN_QT_CHECK_QT5 _BITCOIN_QT_CHECK_QT5
_BITCOIN_QT_CHECK_QT58 _BITCOIN_QT_CHECK_QT58
fi fi
QT_LIB_PREFIX=Qt5 QT_LIB_PREFIX=Qt6
if test "x$bitcoin_qt_want_version" = xqt5; then
QT_LIB_PREFIX=Qt5
fi
if test "x$bitcoin_qt_want_version" = xauto && test "x$bitcoin_cv_qt6" != xyes; then
QT_LIB_PREFIX=Qt5
fi
]) ])
BITCOIN_QT_CHECK([ BITCOIN_QT_CHECK([
@@ -527,4 +594,3 @@ AC_DEFUN([_BITCOIN_QT_FIND_LIBS_WITHOUT_PKGCONFIG],[
CXXFLAGS="$TEMP_CXXFLAGS" CXXFLAGS="$TEMP_CXXFLAGS"
LIBS="$TEMP_LIBS" LIBS="$TEMP_LIBS"
]) ])
Vendored
+1580 -61
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -62,8 +62,8 @@ case $host in
lt_cv_deplibs_check_method="pass_all" lt_cv_deplibs_check_method="pass_all"
;; ;;
esac esac
dnl Require C++11 compiler (no GNU extensions) dnl Require C++17 compiler (no GNU extensions). Qt 6.8 requires C++17.
AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory], [nodefault]) AX_CXX_COMPILE_STDCXX([17], [noext], [mandatory], [nodefault])
dnl Check if -latomic is required for <std::atomic> dnl Check if -latomic is required for <std::atomic>
CHECK_ATOMIC CHECK_ATOMIC
+7 -23
View File
@@ -6,10 +6,6 @@ JOBS="${JOBS:-1}"
HOST="${HOST:-x86_64-pc-linux-gnu}" HOST="${HOST:-x86_64-pc-linux-gnu}"
PREFIX="$ROOT/depends/$HOST" PREFIX="$ROOT/depends/$HOST"
BASE_CONFIG="$PREFIX/share/config.site" BASE_CONFIG="$PREFIX/share/config.site"
CONFIG_SITE_FILE="${CONFIG_SITE_FILE:-/tmp/agrarian-linux-wallet-config.site}"
QT_PKG_CONFIG_DIR="${QT_PKG_CONFIG_DIR:-/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/share/pkgconfig}"
QT_BINDIR="${QT_BINDIR:-/usr/lib/qt5/bin}"
PROTOC_BINDIR="${PROTOC_BINDIR:-/usr/bin}"
require_cmd() { require_cmd() {
if ! command -v "$1" >/dev/null 2>&1; then if ! command -v "$1" >/dev/null 2>&1; then
@@ -31,36 +27,24 @@ require_cmd make
require_cmd pkg-config require_cmd pkg-config
require_cmd gcc require_cmd gcc
require_cmd g++ require_cmd g++
require_cmd sed require_cmd cmake
require_cmd cp require_cmd ninja
require_cmd "$PROTOC_BINDIR/protoc"
require_path "$QT_BINDIR/moc"
require_path "$QT_BINDIR/uic"
require_path "$QT_BINDIR/rcc"
require_path "$QT_BINDIR/lrelease"
require_path "$QT_BINDIR/lupdate"
echo "Building native depends for $HOST..." echo "Building native depends for $HOST..."
make -C depends -j"$JOBS" make -C depends HOST="$HOST" NO_QT=0 -j"$JOBS"
require_path "$BASE_CONFIG" require_path "$BASE_CONFIG"
cp "$BASE_CONFIG" "$CONFIG_SITE_FILE"
sed -i.old \
-e "s#^with_qt_bindir=.*#with_qt_bindir='$QT_BINDIR'#" \
-e "s#^with_protoc_bindir=.*#with_protoc_bindir='$PROTOC_BINDIR'#" \
-e "s#^PKG_CONFIG_LIBDIR=.*#PKG_CONFIG_LIBDIR='$PREFIX/lib/pkgconfig:$PREFIX/share/pkgconfig:$QT_PKG_CONFIG_DIR'#" \
"$CONFIG_SITE_FILE"
if [[ ! -f configure ]]; then if [[ ! -f configure ]]; then
./autogen.sh ./autogen.sh
fi fi
echo "Configuring Ubuntu Qt wallet build..." echo "Configuring Ubuntu Qt6 wallet build..."
CONFIG_SITE="$CONFIG_SITE_FILE" ./configure \ CONFIG_SITE="$BASE_CONFIG" ./configure \
--disable-maintainer-mode \ --disable-maintainer-mode \
--disable-tests \ --disable-tests \
--disable-bench \ --disable-bench \
--with-gui=qt5 --with-gui=qt6 \
--with-qtdbus=no
echo "Building Ubuntu Qt wallet with JOBS=$JOBS..." echo "Building Ubuntu Qt wallet with JOBS=$JOBS..."
make -j"$JOBS" make -j"$JOBS"
+4 -3
View File
@@ -54,17 +54,18 @@ EOF
-rpcbind=127.0.0.1 -rpcport="$RPCPORT" -port="$PORT" -keypool=1 -daemon -rpcbind=127.0.0.1 -rpcport="$RPCPORT" -port="$PORT" -keypool=1 -daemon
for _ in $(seq 1 "$WAIT_SECONDS"); do for _ in $(seq 1 "$WAIT_SECONDS"); do
if rpc getinfo >/dev/null 2>&1; then if rpc getwalletinfo >/dev/null 2>&1; then
break break
fi fi
sleep 1 sleep 1
done done
if ! rpc getinfo >/dev/null; then if ! rpc getwalletinfo >/dev/null; then
echo "Timed out waiting for RPC on 127.0.0.1:$RPCPORT" >&2 echo "Timed out waiting for wallet RPC on 127.0.0.1:$RPCPORT" >&2
tail -n 80 "$DATADIR/regtest/debug.log" >&2 || true tail -n 80 "$DATADIR/regtest/debug.log" >&2 || true
exit 1 exit 1
fi fi
rpc getinfo >/dev/null
rpc getwalletinfo >/dev/null rpc getwalletinfo >/dev/null
rpc getmininginfo >/dev/null rpc getmininginfo >/dev/null
rpc getstakingstatus >/dev/null rpc getstakingstatus >/dev/null
+48
View File
@@ -0,0 +1,48 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
DATADIR="${DATADIR:-$(mktemp -d /tmp/agrarian-qt-smoke.XXXXXX)}"
LOGFILE="${LOGFILE:-/tmp/agrarian-qt-smoke.log}"
WAIT_SECONDS="${WAIT_SECONDS:-25}"
AGRARIAN_QT="${AGRARIAN_QT:-$ROOT/src/qt/agrarian-qt}"
require_path() {
if [[ ! -x "$1" ]]; then
echo "Missing executable: $1" >&2
exit 1
fi
}
require_path "$AGRARIAN_QT"
mkdir -p "$DATADIR"
rm -f "$LOGFILE"
set +e
timeout --kill-after=5s "${WAIT_SECONDS}s" xvfb-run -a "$AGRARIAN_QT" \
-regtest -datadir="$DATADIR" -choosedatadir=0 -debug=qt -debug=rpc \
-printtoconsole -server=0 -listen=0 -dnsseed=0 -connect=0 >"$LOGFILE" 2>&1
exit_code=$?
set -e
if [[ "$exit_code" -ne 124 ]]; then
echo "Expected Qt wallet to keep running until timeout, got exit code $exit_code" >&2
tail -n 80 "$LOGFILE" >&2 || true
exit 1
fi
if ! grep -q "init message: Done loading" "$LOGFILE"; then
echo "Qt wallet did not reach Done loading" >&2
tail -n 120 "$LOGFILE" >&2 || true
exit 1
fi
if grep -E "No functional TLS|No such signal|Unknown property" "$LOGFILE" >/dev/null; then
echo "Qt wallet logged a Qt6 runtime compatibility warning" >&2
grep -E "No functional TLS|No such signal|Unknown property" "$LOGFILE" >&2 || true
exit 1
fi
echo "Agrarian Qt smoke test passed"
echo " datadir: $DATADIR"
echo " log: $LOGFILE"
+102
View File
@@ -0,0 +1,102 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
DATADIR="${DATADIR:-$(mktemp -d /tmp/agrarian-wallet-smoke.XXXXXX)}"
RPCPORT="${RPCPORT:-36435}"
PORT="${PORT:-36436}"
WAIT_SECONDS="${WAIT_SECONDS:-90}"
AGRARIAND="${AGRARIAND:-$ROOT/src/agrariand}"
AGRARIAN_CLI="${AGRARIAN_CLI:-$ROOT/src/agrarian-cli}"
BACKUP="${BACKUP:-/tmp/agrarian-wallet-backup-smoke.dat}"
cleanup() {
if [[ -x "$AGRARIAN_CLI" && -d "$DATADIR" ]]; then
"$AGRARIAN_CLI" -datadir="$DATADIR" -regtest \
-rpcuser=wallet -rpcpassword=wallet-pass -rpcport="$RPCPORT" stop >/dev/null 2>&1 || true
fi
}
trap cleanup EXIT
require_path() {
if [[ ! -x "$1" ]]; then
echo "Missing executable: $1" >&2
exit 1
fi
}
rpc() {
"$AGRARIAN_CLI" -datadir="$DATADIR" -regtest \
-rpcuser=wallet -rpcpassword=wallet-pass -rpcconnect=127.0.0.1 \
-rpcport="$RPCPORT" "$@"
}
require_path "$AGRARIAND"
require_path "$AGRARIAN_CLI"
mkdir -p "$DATADIR"
cat > "$DATADIR/agrarian.conf" <<EOF
regtest=1
server=1
rpcuser=wallet
rpcpassword=wallet-pass
rpcbind=127.0.0.1
rpcallowip=127.0.0.1
listen=0
dnsseed=0
upnp=0
staking=0
keypool=10
EOF
"$AGRARIAND" -datadir="$DATADIR" -regtest -server -listen=0 -dnsseed=0 \
-connect=0 -upnp=0 -staking=0 -rpcuser=wallet -rpcpassword=wallet-pass \
-rpcbind=127.0.0.1 -rpcport="$RPCPORT" -port="$PORT" -keypool=10 -daemon
for _ in $(seq 1 "$WAIT_SECONDS"); do
if rpc getinfo >/dev/null 2>&1; then
break
fi
sleep 1
done
if ! rpc getinfo >/dev/null; then
echo "Timed out waiting for RPC on 127.0.0.1:$RPCPORT" >&2
tail -n 80 "$DATADIR/regtest/debug.log" >&2 || true
exit 1
fi
rpc getwalletinfo >/dev/null
receive_address="$(rpc getnewaddress receive)"
send_address="$(rpc getnewaddress sendtest)"
rpc generate 101 >/dev/null
mined_balance="$(rpc getbalance)"
txid="$(rpc sendtoaddress "$send_address" 1.0)"
rpc generate 1 >/dev/null
rpc gettransaction "$txid" >/dev/null
rm -f "$BACKUP"
rpc backupwallet "$BACKUP"
test -s "$BACKUP"
set +e
encrypt_output="$(rpc encryptwallet smoke-passphrase 2>&1)"
encrypt_code=$?
set -e
if [[ "$encrypt_code" -ne 0 ]]; then
echo "$encrypt_output" >&2
exit "$encrypt_code"
fi
sleep 2
if rpc getinfo >/dev/null 2>&1; then
echo "Expected encryptwallet to stop the daemon, but RPC is still available" >&2
exit 1
fi
echo "Agrarian wallet smoke test passed"
echo " datadir: $DATADIR"
echo " receive_address: $receive_address"
echo " send_txid: $txid"
echo " mined_balance_before_send: $mined_balance"
echo " backup: $BACKUP"
+1 -1
View File
@@ -47,7 +47,7 @@ define $(package)_build_cmds
endef endef
define $(package)_stage_cmds define $(package)_stage_cmds
$(MAKE) INSTALL_PREFIX=$($(package)_staging_dir) -j1 install_sw $(MAKE) DESTDIR=$($(package)_staging_dir) -j1 install_sw
endef endef
define $(package)_postprocess_cmds define $(package)_postprocess_cmds
+1 -1
View File
@@ -25,7 +25,7 @@ USE_UPNP ?= 1
qt_native_packages := native_protobuf qt_native_packages := native_protobuf
qt_packages := qrencode protobuf zlib qt_packages := qrencode protobuf zlib
qt_linux_packages := qt expat dbus libxcb xcb_proto libXau xproto freetype fontconfig libX11 xextproto libXext xtrans qt_linux_packages := qt
qt_darwin_packages := qt qt_darwin_packages := qt
qt_mingw32_packages := qt qt_mingw32_packages := qt
+33 -147
View File
@@ -1,20 +1,18 @@
PACKAGE=qt PACKAGE=qt
$(package)_version=5.9.7 $(package)_version=6.8.3
$(package)_download_path=https://download.qt.io/new_archive/qt/5.9/$($(package)_version)/submodules $(package)_download_path=https://download.qt.io/official_releases/qt/6.8/$($(package)_version)/submodules
$(package)_suffix=opensource-src-$($(package)_version).tar.xz $(package)_suffix=everywhere-src-$($(package)_version).tar.xz
$(package)_file_name=qtbase-$($(package)_suffix) $(package)_file_name=qtbase-$($(package)_suffix)
$(package)_sha256_hash=36dd9574f006eaa1e5af780e4b33d11fe39d09fd7c12f3b9d83294174bd28f00 $(package)_sha256_hash=56001b905601bb9023d399f3ba780d7fa940f3e4861e496a7c490331f49e0b80
$(package)_dependencies=openssl zlib $(package)_dependencies=openssl zlib
$(package)_linux_dependencies=freetype fontconfig libxcb libX11 xproto libXext $(package)_linux_dependencies=
$(package)_build_subdir=qtbase $(package)_build_subdir=qtbase-build
$(package)_qt_libs=corelib network widgets gui plugins testlib
$(package)_patches=mac-qmake.conf
$(package)_qttranslations_file_name=qttranslations-$($(package)_suffix) $(package)_qttranslations_file_name=qttranslations-$($(package)_suffix)
$(package)_qttranslations_sha256_hash=b36da7d93c3ab6fca56b32053bb73bc619c8b192bb89b74e3bcde2705f1c2a14 $(package)_qttranslations_sha256_hash=c3c61d79c3d8fe316a20b3617c64673ce5b5519b2e45535f49bee313152fa531
$(package)_qttools_file_name=qttools-$($(package)_suffix) $(package)_qttools_file_name=qttools-$($(package)_suffix)
$(package)_qttools_sha256_hash=d62e0f70d99645d6704dbb8976fb2222443061743689943d40970c52c49367a1 $(package)_qttools_sha256_hash=02a4e219248b94f1333df843d25763f35251c1074cdc4fb5bda67d340f8c8b3a
$(package)_extra_sources = $($(package)_qttranslations_file_name) $(package)_extra_sources = $($(package)_qttranslations_file_name)
$(package)_extra_sources += $($(package)_qttools_file_name) $(package)_extra_sources += $($(package)_qttools_file_name)
@@ -22,100 +20,35 @@ $(package)_extra_sources += $($(package)_qttools_file_name)
define $(package)_set_vars define $(package)_set_vars
$(package)_config_opts_release = -release $(package)_config_opts_release = -release
$(package)_config_opts_debug = -debug $(package)_config_opts_debug = -debug
$(package)_config_opts += -bindir $(build_prefix)/bin $(package)_config_opts += -bindir bin
$(package)_config_opts += -c++std c++11
$(package)_config_opts += -confirm-license $(package)_config_opts += -confirm-license
$(package)_config_opts += -dbus-runtime
$(package)_config_opts += -hostprefix $(build_prefix)
$(package)_config_opts += -no-compile-examples
$(package)_config_opts += -no-cups $(package)_config_opts += -no-cups
$(package)_config_opts += -no-egl $(package)_config_opts += -no-dbus
$(package)_config_opts += -no-eglfs
$(package)_config_opts += -no-freetype
$(package)_config_opts += -no-gif
$(package)_config_opts += -no-glib $(package)_config_opts += -no-glib
$(package)_config_opts += -no-icu $(package)_config_opts += -no-icu
$(package)_config_opts += -no-iconv $(package)_config_opts += -no-opengl
$(package)_config_opts += -no-kms $(package)_config_opts += -no-pch
$(package)_config_opts += -no-linuxfb $(package)_config_opts += -no-feature-sql
$(package)_config_opts += -no-libudev
$(package)_config_opts += -no-mtdev
$(package)_config_opts += -no-openvg
$(package)_config_opts += -no-reduce-relocations
$(package)_config_opts += -no-qml-debug
$(package)_config_opts += -no-sql-db2
$(package)_config_opts += -no-sql-ibase
$(package)_config_opts += -no-sql-oci
$(package)_config_opts += -no-sql-tds
$(package)_config_opts += -no-sql-mysql
$(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-use-gold-linker
$(package)_config_opts += -no-xinput2
$(package)_config_opts += -nomake examples $(package)_config_opts += -nomake examples
$(package)_config_opts += -nomake tests $(package)_config_opts += -nomake tests
$(package)_config_opts += -opensource $(package)_config_opts += -opensource
$(package)_config_opts += -openssl-linked $(package)_config_opts += -openssl-linked
$(package)_config_opts += -optimized-qmake
$(package)_config_opts += -no-pch
$(package)_config_opts += -pkg-config $(package)_config_opts += -pkg-config
$(package)_config_opts += -prefix $(host_prefix) $(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 += -qt-harfbuzz
$(package)_config_opts += -system-zlib $(package)_config_opts += -qt-libjpeg
$(package)_config_opts += -qt-libpng
$(package)_config_opts += -qt-pcre
$(package)_config_opts += -static $(package)_config_opts += -static
$(package)_config_opts += -silent $(package)_config_opts += -system-zlib
$(package)_config_opts += -v $(package)_config_opts_linux = -fontconfig
$(package)_config_opts += -no-feature-dial $(package)_config_opts_linux += -qpa xcb
$(package)_config_opts += -no-feature-ftp $(package)_config_opts_linux += -xcb
$(package)_config_opts += -no-feature-lcdnumber $(package)_config_opts_linux += -xkbcommon
$(package)_config_opts += -no-feature-pdf
$(package)_config_opts += -no-feature-printer
$(package)_config_opts += -no-feature-printdialog
$(package)_config_opts += -no-feature-concurrent
$(package)_config_opts += -no-feature-sql
$(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-udpsocket
$(package)_config_opts += -no-feature-wizard
$(package)_config_opts += -no-feature-xml
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 MAC_LD64_VERSION=$(LD64_VERSION)
endif
$(package)_config_opts_linux = -qt-xkbcommon-x11
$(package)_config_opts_linux += -qt-xcb
$(package)_config_opts_linux += -system-freetype $(package)_config_opts_linux += -system-freetype
$(package)_config_opts_linux += -no-feature-sessionmanager $(package)_config_opts_linux += -no-feature-sessionmanager
$(package)_config_opts_linux += -fontconfig $(package)_config_opts_mingw32 = -qpa windows
$(package)_config_opts_linux += -no-opengl $(package)_config_opts_darwin = -qpa cocoa
$(package)_config_opts_arm_linux += -platform linux-g++ -xplatform agrarian-linux-g++
$(package)_config_opts_i686_linux = -xplatform linux-g++-32
$(package)_config_opts_x86_64_linux = -xplatform linux-g++-64
$(package)_config_opts_aarch64_linux = -xplatform linux-aarch64-gnu-g++
$(package)_config_opts_riscv64_linux = -platform linux-g++ -xplatform agrarian-linux-g++
$(package)_config_opts_s390x_linux += -platform linux-g++ -xplatform linux-g++-64
$(package)_config_opts_powerpc_linux += -platform linux-g++ -xplatform linux-g++-32
$(package)_config_opts_powerpc64le_linux += -platform linux-g++ -xplatform linux-g++-64
$(package)_config_opts_sparc64_linux += -platform linux-g++ -xplatform linux-g++-64
$(package)_config_opts_alpha_linux += -platform linux-g++ -xplatform linux-g++-64
$(package)_config_opts_m68k_linux += -platform linux-g++ -xplatform linux-g++-32
$(package)_config_opts_mingw32 = -no-opengl -xplatform win32-g++ -device-option CROSS_COMPILE="$(host)-"
$(package)_build_env = QT_RCC_TEST=1
$(package)_build_env += QT_RCC_SOURCE_DATE_OVERRIDE=1
endef endef
define $(package)_fetch_cmds define $(package)_fetch_cmds
@@ -130,75 +63,28 @@ define $(package)_extract_cmds
echo "$($(package)_qttranslations_sha256_hash) $($(package)_source_dir)/$($(package)_qttranslations_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ echo "$($(package)_qttranslations_sha256_hash) $($(package)_source_dir)/$($(package)_qttranslations_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \
echo "$($(package)_qttools_sha256_hash) $($(package)_source_dir)/$($(package)_qttools_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ echo "$($(package)_qttools_sha256_hash) $($(package)_source_dir)/$($(package)_qttools_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \
$(build_SHA256SUM) -c $($(package)_extract_dir)/.$($(package)_file_name).hash && \ $(build_SHA256SUM) -c $($(package)_extract_dir)/.$($(package)_file_name).hash && \
mkdir qtbase && \ mkdir qtbase qtbase-build qttools qttools-build qttranslations qttranslations-build && \
tar --no-same-owner --strip-components=1 -xf $($(package)_source) -C qtbase && \ tar --no-same-owner --strip-components=1 -xf $($(package)_source) -C qtbase && \
mkdir qttranslations && \ tar --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttools_file_name) -C qttools && \
tar --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttranslations_file_name) -C qttranslations && \ tar --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttranslations_file_name) -C qttranslations
mkdir qttools && \
tar --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttools_file_name) -C qttools
endef
define $(package)_preprocess_cmds
sed -i.old "s|FT_Get_Font_Format|FT_Get_X11_Font_Format|" qtbase/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp && \
sed -i.old "/#include <QtCore\/qbytearray.h>/a #include <limits>" qtbase/src/corelib/tools/qbytearraymatcher.h && \
sed -i.old "/#include \"qfloat16_p.h\"/a #include <limits>" qtbase/src/corelib/global/qfloat16.cpp && \
sed -i.old "s/#if defined(Q_CC_MINGW) || !defined(TOUCHEVENTF_MOVE)/#if (defined(Q_CC_MINGW) \&\& WINVER < 0x0601) || !defined(TOUCHEVENTF_MOVE)/" qtbase/src/plugins/platforms/windows/qwindowsmousehandler.cpp && \
sed -i.old "s|updateqm.commands = \$$$$\$$$$LRELEASE|updateqm.commands = $($(package)_extract_dir)/qttools/bin/lrelease|" qttranslations/translations/translations.pro && \
sed -i.old "/updateqm.depends =/d" qttranslations/translations/translations.pro && \
sed -i.old "s/src_plugins.depends = src_sql src_network/src_plugins.depends = src_network/" qtbase/src/src.pro && \
sed -i.old "s|X11/extensions/XIproto.h|X11/X.h|" qtbase/src/plugins/platforms/xcb/qxcbxsettings.cpp && \
sed -i.old "/SUBDIRS += printsupport/d" qtbase/src/plugins/plugins.pro && \
sed -i.old -e 's/if \[ "$$$$XPLATFORM_MAC" = "yes" \]; then xspecvals=$$$$(macSDKify/if \[ "$$$$BUILD_ON_MAC" = "yes" \]; then xspecvals=$$$$(macSDKify/' -e 's|/bin/pwd|pwd|' qtbase/configure && \
sed -i.old 's/CGEventCreateMouseEvent(0, kCGEventMouseMoved, pos, 0)/CGEventCreateMouseEvent(0, kCGEventMouseMoved, pos, kCGMouseButtonLeft)/' qtbase/src/plugins/platforms/cocoa/qcocoacursor.mm && \
mkdir -p qtbase/mkspecs/macx-clang-linux &&\
cp -f qtbase/mkspecs/macx-clang/Info.plist.lib qtbase/mkspecs/macx-clang-linux/ &&\
cp -f qtbase/mkspecs/macx-clang/Info.plist.app 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 && \
cp -r qtbase/mkspecs/linux-arm-gnueabi-g++ qtbase/mkspecs/agrarian-linux-g++ && \
sed -i.old "s/arm-linux-gnueabi-/$(host)-/g" qtbase/mkspecs/agrarian-linux-g++/qmake.conf && \
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 && \
echo "QMAKE_LINK_OBJECT_MAX = 10" >> qtbase/mkspecs/win32-g++/qmake.conf &&\
echo "QMAKE_LINK_OBJECT_SCRIPT = object_script" >> qtbase/mkspecs/win32-g++/qmake.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_LFLAGS = |!host_build: QMAKE_LFLAGS = $($(package)_ldflags) |" 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
endef endef
define $(package)_config_cmds define $(package)_config_cmds
export PKG_CONFIG_SYSROOT_DIR=/ && \ export PKG_CONFIG_SYSROOT_DIR=/ && \
export PKG_CONFIG_LIBDIR=$(host_prefix)/lib/pkgconfig && \ export PKG_CONFIG_LIBDIR=$(host_prefix)/lib/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/share/pkgconfig && \
export PKG_CONFIG_PATH=$(host_prefix)/share/pkgconfig && \ export PKG_CONFIG_PATH=$(host_prefix)/share/pkgconfig && \
./configure $($(package)_config_opts) && \ ../qtbase/configure $($(package)_config_opts) -- -G Ninja
echo "host_build: QT_CONFIG ~= s/system-zlib/zlib" >> mkspecs/qconfig.pri && \
echo "CONFIG += force_bootstrap" >> mkspecs/qconfig.pri && \
$(MAKE) sub-src-clean && \
cd ../qttranslations && ../qtbase/bin/qmake qttranslations.pro -o Makefile && \
cd translations && ../../qtbase/bin/qmake translations.pro -o Makefile && cd ../.. && \
cd qttools/src/linguist/lrelease/ && ../../../../qtbase/bin/qmake lrelease.pro -o Makefile && \
cd ../lupdate/ && ../../../../qtbase/bin/qmake lupdate.pro -o Makefile && cd ../../../..
endef endef
define $(package)_build_cmds define $(package)_build_cmds
$(MAKE) -C src $(addprefix sub-,$($(package)_qt_libs)) && \ cmake --build . --parallel
$(MAKE) -C ../qttools/src/linguist/lrelease && \
$(MAKE) -C ../qttools/src/linguist/lupdate && \
$(MAKE) -C ../qttranslations
endef endef
define $(package)_stage_cmds define $(package)_stage_cmds
$(MAKE) -C src INSTALL_ROOT=$($(package)_staging_dir) $(addsuffix -install_subtargets,$(addprefix sub-,$($(package)_qt_libs))) && cd .. && \ DESTDIR=$($(package)_staging_dir) cmake --install .
$(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 qttranslations INSTALL_ROOT=$($(package)_staging_dir) install_subtargets && \
if `test -f qtbase/src/plugins/platforms/xcb/xcb-static/libxcb-static.a`; then \
cp qtbase/src/plugins/platforms/xcb/xcb-static/libxcb-static.a $($(package)_staging_prefix_dir)/lib; \
fi
endef endef
define $(package)_postprocess_cmds define $(package)_postprocess_cmds
rm -rf native/mkspecs/ native/lib/ lib/cmake/ && \ rm -rf lib/cmake share/doc share/examples share/qt6/sbom && \
rm -f lib/lib*.la lib/*.prl plugins/*/*.prl rm -f lib/lib*.la lib/*.prl plugins/*/*.prl
endef endef
+9
View File
@@ -9,6 +9,15 @@ define $(package)_set_vars
$(package)_config_opts_linux=--with-pic $(package)_config_opts_linux=--with-pic
endef endef
define $(package)_preprocess_cmds
sed -i.old \
-e 's/import sys, os, py_compile, imp/import sys, os, py_compile, importlib.util/' \
-e "s/hasattr(imp, 'get_tag')/True/g" \
-e 's/imp.cache_from_source(filepath)/importlib.util.cache_from_source(filepath)/g' \
-e 's/imp.cache_from_source(filepath, False)/importlib.util.cache_from_source(filepath, optimization="")/g' \
py-compile
endef
define $(package)_config_cmds define $(package)_config_cmds
$($(package)_autoconf) $($(package)_autoconf)
endef endef
+18 -22
View File
@@ -21,14 +21,12 @@ Install the native daemon build dependencies:
sudo apt-get update sudo apt-get update
sudo apt-get install -y \ sudo apt-get install -y \
build-essential pkg-config autoconf automake libtool bsdmainutils \ build-essential pkg-config autoconf automake libtool bsdmainutils \
libboost-all-dev libevent-dev libgmp-dev libssl-dev \ cmake ninja-build python3 curl git
libdb5.3-dev libdb5.3++-dev
For the desktop wallet, also install Qt and protobuf tools: For a headless Qt wallet smoke test, also install:
sudo apt-get install -y \ sudo apt-get install -y \
qtbase5-dev qttools5-dev-tools qtchooser \ xvfb
libqrencode-dev libprotobuf-dev protobuf-compiler
Daemon-only build Daemon-only build
----------------- -----------------
@@ -57,42 +55,40 @@ For the desktop wallet, use:
JOBS=1 ./contrib/build-linux-wallet.sh JOBS=1 ./contrib/build-linux-wallet.sh
The wallet helper builds/restores the native depends prefix first, then creates The wallet helper builds/restores the native depends prefix first, including
a temporary config.site that keeps the depends libraries while allowing system Qt 6.8.3, OpenSSL 3.5.6, and Boost 1.91.0. It then configures the project with
Qt 5 tools and pkg-config files to be used. the generated depends `config.site` and builds the Ubuntu Qt wallet.
Defaults: Defaults:
HOST=x86_64-pc-linux-gnu HOST=x86_64-pc-linux-gnu
QT_BINDIR=/usr/lib/qt5/bin
PROTOC_BINDIR=/usr/bin
CONFIG_SITE_FILE=/tmp/agrarian-linux-wallet-config.site
Warnings Warnings
-------- --------
Qt 5.15 and protobuf 3.x emit compatibility/deprecation warnings in a few Qt The Qt6/OpenSSL3 path should build without Qt compatibility warnings. First-run
translation units. Those warnings are expected while the Windows build remains runtime logs may report missing cache files such as `peers.dat`, `banlist.dat`,
pinned to Qt 5.9.7 and protobuf 2.6.1. or masternode cache files; those are created during startup.
Functional smoke test Functional smoke test
--------------------- ---------------------
After building the daemon, run the isolated regtest smoke test: After building, run the isolated smoke tests:
./contrib/smoke-test-daemon.sh ./contrib/smoke-test-daemon.sh
./contrib/smoke-test-wallet.sh
./contrib/smoke-test-qt.sh
The script starts `agrariand` with a temporary regtest datadir, confirms RPC and The daemon script confirms RPC and wallet calls work, mines one block, checks
wallet calls work, mines one block with `generate`, checks the block count, and the block count, and stops the daemon. The wallet script checks address
stops the daemon. creation, mining, send/confirm, backup, and encryption shutdown. The Qt script
starts `agrarian-qt` under Xvfb and confirms the GUI reaches `Done loading`
without Qt6 TLS, signal, or stylesheet compatibility warnings.
OpenSSL 3 OpenSSL 3
--------- ---------
Ubuntu 24.04 ships OpenSSL 3. Agrarian no longer rejects this only because The deterministic depends build currently uses OpenSSL 3.5.6.
`RAND_egd` is unavailable. Some deprecated OpenSSL SHA calls still warn during
compilation; those warnings are expected until the hashing helper code is
modernized.
Berkeley DB Berkeley DB
----------- -----------
+8 -10
View File
@@ -32,8 +32,7 @@ Ubuntu package baseline
For the native Ubuntu wallet: For the native Ubuntu wallet:
sudo apt-get install -y \ sudo apt-get install -y \
qtbase5-dev qttools5-dev-tools qtchooser \ cmake ninja-build xvfb
libqrencode-dev libprotobuf-dev protobuf-compiler
For the Windows wallet: For the Windows wallet:
@@ -51,11 +50,9 @@ Why the helpers exist
The wallet build is sensitive to tool version mismatches: The wallet build is sensitive to tool version mismatches:
* Native Ubuntu uses current system Qt tools and protobuf while keeping the * Native Ubuntu uses the deterministic depends Qt6, OpenSSL, Boost, protobuf,
deterministic depends libraries. and supporting libraries.
* Windows uses the Qt 5.9.7 and protobuf 2.6.1 libraries from depends. Its host * Cross-target wallets must use the matching Qt host tools staged by depends.
tools must match those libraries closely enough for generated C++ output to
compile.
The helper scripts keep those rules in one place so the build is repeatable on a The helper scripts keep those rules in one place so the build is repeatable on a
fresh server. fresh server.
@@ -80,10 +77,11 @@ After the Windows wallet build:
Version checks Version checks
-------------- --------------
On Ubuntu: On Ubuntu, use the smoke tests:
QT_QPA_PLATFORM=offscreen src/qt/agrarian-qt --version ./contrib/smoke-test-daemon.sh
src/agrariand --version ./contrib/smoke-test-wallet.sh
./contrib/smoke-test-qt.sh
For Windows binaries from the Linux build host: For Windows binaries from the Linux build host:
+5 -5
View File
@@ -6,26 +6,26 @@ These are the dependencies currently used by Agrarian Core. You can find instruc
| Dependency | Version used | Minimum required | CVEs | Shared | [Bundled Qt library](https://doc.qt.io/qt-5/configure-options.html#third-party-libraries) | | Dependency | Version used | Minimum required | CVEs | Shared | [Bundled Qt library](https://doc.qt.io/qt-5/configure-options.html#third-party-libraries) |
| --- | --- | --- | --- | --- | --- | | --- | --- | --- | --- | --- | --- |
| Berkeley DB | [4.8.30](https://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html) | 4.8.x | No | | | | Berkeley DB | [4.8.30](https://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html) | 4.8.x | No | | |
| Boost | [1.64.0](https://www.boost.org/users/download/) | [1.47.0](https://github.com/bitcoin/bitcoin/pull/8920) | No | | | | Boost | [1.91.0](https://www.boost.org/users/download/) | [1.47.0](https://github.com/bitcoin/bitcoin/pull/8920) | No | | |
| Clang | | [3.3+](https://llvm.org/releases/download.html) (C++11 support) | | | | | Clang | | C++17 support | | | |
| D-Bus | [1.10.18](https://cgit.freedesktop.org/dbus/dbus/tree/NEWS?h=dbus-1.10) | | No | Yes | | | D-Bus | [1.10.18](https://cgit.freedesktop.org/dbus/dbus/tree/NEWS?h=dbus-1.10) | | No | Yes | |
| Expat | [2.2.6](https://libexpat.github.io/) | | No | Yes | | | Expat | [2.2.6](https://libexpat.github.io/) | | No | Yes | |
| fontconfig | [2.12.1](https://www.freedesktop.org/software/fontconfig/release/) | | No | Yes | | | fontconfig | [2.12.1](https://www.freedesktop.org/software/fontconfig/release/) | | No | Yes | |
| FreeType | [2.7.1](https://download.savannah.gnu.org/releases/freetype) | | No | | | | FreeType | [2.7.1](https://download.savannah.gnu.org/releases/freetype) | | No | | |
| GCC | | [4.8+](https://gcc.gnu.org/) (C++11 support) | | | | | GCC | | C++17 support | | | |
| HarfBuzz-NG | | | | | | | HarfBuzz-NG | | | | | |
| libevent | [2.1.8-stable](https://github.com/libevent/libevent/releases) | 2.0.22 | No | | | | libevent | [2.1.8-stable](https://github.com/libevent/libevent/releases) | 2.0.22 | No | | |
| libjpeg | | | | | [Yes](https://github.com/agrarian-project/agrarian/blob/master/depends/packages/qt.mk#L65) | | libjpeg | | | | | [Yes](https://github.com/agrarian-project/agrarian/blob/master/depends/packages/qt.mk#L65) |
| libpng | | | | | [Yes](https://github.com/agrarian-project/agrarian/blob/master/depends/packages/qt.mk#L64) | | libpng | | | | | [Yes](https://github.com/agrarian-project/agrarian/blob/master/depends/packages/qt.mk#L64) |
| librsvg | | | | | | | librsvg | | | | | |
| MiniUPnPc | [2.0.20180203](http://miniupnp.free.fr/files) | | No | | | | MiniUPnPc | [2.0.20180203](http://miniupnp.free.fr/files) | | No | | |
| OpenSSL | [1.0.1k](https://www.openssl.org/source) | | Yes | | | | OpenSSL | [3.5.6](https://www.openssl.org/source) | | No | | |
| GMP | [6.1.2](https://gmplib.org/) | | No | | | | GMP | [6.1.2](https://gmplib.org/) | | No | | |
| PCRE | | | | | [Yes](https://github.com/agrarian-project/agrarian/blob/master/depends/packages/qt.mk#L66) | | PCRE | | | | | [Yes](https://github.com/agrarian-project/agrarian/blob/master/depends/packages/qt.mk#L66) |
| protobuf | [2.6.1](https://github.com/google/protobuf/releases) | | No | | | | protobuf | [2.6.1](https://github.com/google/protobuf/releases) | | No | | |
| Python (tests) | | [3.5](https://www.python.org/downloads) | | | | | Python (tests) | | [3.5](https://www.python.org/downloads) | | | |
| qrencode | [3.4.4](https://fukuchi.org/works/qrencode) | | No | | | | qrencode | [3.4.4](https://fukuchi.org/works/qrencode) | | No | | |
| Qt | [5.9.7](https://download.qt.io/official_releases/qt/) | [5.5.1](https://github.com/bitcoin/bitcoin/issues/13478) | No | | | | Qt | [6.8.3](https://download.qt.io/official_releases/qt/) | 6.8 LTS | No | | |
| XCB | | | | | [Yes](https://github.com/agrarian-project/agrarian/blob/master/depends/packages/qt.mk#L87) (Linux only) | | XCB | | | | | [Yes](https://github.com/agrarian-project/agrarian/blob/master/depends/packages/qt.mk#L87) (Linux only) |
| xkbcommon | | | | | [Yes](https://github.com/agrarian-project/agrarian/blob/master/depends/packages/qt.mk#L86) (Linux only) | | xkbcommon | | | | | [Yes](https://github.com/agrarian-project/agrarian/blob/master/depends/packages/qt.mk#L86) (Linux only) |
| ZeroMQ | [4.3.1](https://github.com/zeromq/libzmq/releases) | 4.0.0 | No | | | | ZeroMQ | [4.3.1](https://github.com/zeromq/libzmq/releases) | 4.0.0 | No | | |
+3 -3
View File
@@ -247,6 +247,7 @@ EVENT_PTHREADS_LIBS = @EVENT_PTHREADS_LIBS@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
EXTENDED_FUNCTIONAL_TESTS = @EXTENDED_FUNCTIONAL_TESTS@ EXTENDED_FUNCTIONAL_TESTS = @EXTENDED_FUNCTIONAL_TESTS@
FGREP = @FGREP@ FGREP = @FGREP@
FILECMD = @FILECMD@
GCOV = @GCOV@ GCOV = @GCOV@
GENHTML = @GENHTML@ GENHTML = @GENHTML@
GENISOIMAGE = @GENISOIMAGE@ GENISOIMAGE = @GENISOIMAGE@
@@ -257,7 +258,7 @@ GREP = @GREP@
HARDENED_CPPFLAGS = @HARDENED_CPPFLAGS@ HARDENED_CPPFLAGS = @HARDENED_CPPFLAGS@
HARDENED_CXXFLAGS = @HARDENED_CXXFLAGS@ HARDENED_CXXFLAGS = @HARDENED_CXXFLAGS@
HARDENED_LDFLAGS = @HARDENED_LDFLAGS@ HARDENED_LDFLAGS = @HARDENED_LDFLAGS@
HAVE_CXX11 = @HAVE_CXX11@ HAVE_CXX17 = @HAVE_CXX17@
HEXDUMP = @HEXDUMP@ HEXDUMP = @HEXDUMP@
IMAGEMAGICK_CONVERT = @IMAGEMAGICK_CONVERT@ IMAGEMAGICK_CONVERT = @IMAGEMAGICK_CONVERT@
INSTALL = @INSTALL@ INSTALL = @INSTALL@
@@ -328,8 +329,6 @@ PYTHON = @PYTHON@
PYTHONPATH = @PYTHONPATH@ PYTHONPATH = @PYTHONPATH@
QR_CFLAGS = @QR_CFLAGS@ QR_CFLAGS = @QR_CFLAGS@
QR_LIBS = @QR_LIBS@ QR_LIBS = @QR_LIBS@
QT5_CFLAGS = @QT5_CFLAGS@
QT5_LIBS = @QT5_LIBS@
QTACCESSIBILITY_CFLAGS = @QTACCESSIBILITY_CFLAGS@ QTACCESSIBILITY_CFLAGS = @QTACCESSIBILITY_CFLAGS@
QTACCESSIBILITY_LIBS = @QTACCESSIBILITY_LIBS@ QTACCESSIBILITY_LIBS = @QTACCESSIBILITY_LIBS@
QTCGL_CFLAGS = @QTCGL_CFLAGS@ QTCGL_CFLAGS = @QTCGL_CFLAGS@
@@ -352,6 +351,7 @@ QTTHEME_CFLAGS = @QTTHEME_CFLAGS@
QTTHEME_LIBS = @QTTHEME_LIBS@ QTTHEME_LIBS = @QTTHEME_LIBS@
QTXCBQPA_CFLAGS = @QTXCBQPA_CFLAGS@ QTXCBQPA_CFLAGS = @QTXCBQPA_CFLAGS@
QTXCBQPA_LIBS = @QTXCBQPA_LIBS@ QTXCBQPA_LIBS = @QTXCBQPA_LIBS@
QT_CFLAGS = @QT_CFLAGS@
QT_DBUS_CFLAGS = @QT_DBUS_CFLAGS@ QT_DBUS_CFLAGS = @QT_DBUS_CFLAGS@
QT_DBUS_INCLUDES = @QT_DBUS_INCLUDES@ QT_DBUS_INCLUDES = @QT_DBUS_INCLUDES@
QT_DBUS_LIBS = @QT_DBUS_LIBS@ QT_DBUS_LIBS = @QT_DBUS_LIBS@
+3 -3
View File
@@ -1932,6 +1932,7 @@ EVENT_PTHREADS_LIBS = @EVENT_PTHREADS_LIBS@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
EXTENDED_FUNCTIONAL_TESTS = @EXTENDED_FUNCTIONAL_TESTS@ EXTENDED_FUNCTIONAL_TESTS = @EXTENDED_FUNCTIONAL_TESTS@
FGREP = @FGREP@ FGREP = @FGREP@
FILECMD = @FILECMD@
GCOV = @GCOV@ GCOV = @GCOV@
GENHTML = @GENHTML@ GENHTML = @GENHTML@
GENISOIMAGE = @GENISOIMAGE@ GENISOIMAGE = @GENISOIMAGE@
@@ -1942,7 +1943,7 @@ GREP = @GREP@
HARDENED_CPPFLAGS = @HARDENED_CPPFLAGS@ HARDENED_CPPFLAGS = @HARDENED_CPPFLAGS@
HARDENED_CXXFLAGS = @HARDENED_CXXFLAGS@ HARDENED_CXXFLAGS = @HARDENED_CXXFLAGS@
HARDENED_LDFLAGS = @HARDENED_LDFLAGS@ HARDENED_LDFLAGS = @HARDENED_LDFLAGS@
HAVE_CXX11 = @HAVE_CXX11@ HAVE_CXX17 = @HAVE_CXX17@
HEXDUMP = @HEXDUMP@ HEXDUMP = @HEXDUMP@
IMAGEMAGICK_CONVERT = @IMAGEMAGICK_CONVERT@ IMAGEMAGICK_CONVERT = @IMAGEMAGICK_CONVERT@
INSTALL = @INSTALL@ INSTALL = @INSTALL@
@@ -2013,8 +2014,6 @@ PYTHON = @PYTHON@
PYTHONPATH = @PYTHONPATH@ PYTHONPATH = @PYTHONPATH@
QR_CFLAGS = @QR_CFLAGS@ QR_CFLAGS = @QR_CFLAGS@
QR_LIBS = @QR_LIBS@ QR_LIBS = @QR_LIBS@
QT5_CFLAGS = @QT5_CFLAGS@
QT5_LIBS = @QT5_LIBS@
QTACCESSIBILITY_CFLAGS = @QTACCESSIBILITY_CFLAGS@ QTACCESSIBILITY_CFLAGS = @QTACCESSIBILITY_CFLAGS@
QTACCESSIBILITY_LIBS = @QTACCESSIBILITY_LIBS@ QTACCESSIBILITY_LIBS = @QTACCESSIBILITY_LIBS@
QTCGL_CFLAGS = @QTCGL_CFLAGS@ QTCGL_CFLAGS = @QTCGL_CFLAGS@
@@ -2037,6 +2036,7 @@ QTTHEME_CFLAGS = @QTTHEME_CFLAGS@
QTTHEME_LIBS = @QTTHEME_LIBS@ QTTHEME_LIBS = @QTTHEME_LIBS@
QTXCBQPA_CFLAGS = @QTXCBQPA_CFLAGS@ QTXCBQPA_CFLAGS = @QTXCBQPA_CFLAGS@
QTXCBQPA_LIBS = @QTXCBQPA_LIBS@ QTXCBQPA_LIBS = @QTXCBQPA_LIBS@
QT_CFLAGS = @QT_CFLAGS@
QT_DBUS_CFLAGS = @QT_DBUS_CFLAGS@ QT_DBUS_CFLAGS = @QT_DBUS_CFLAGS@
QT_DBUS_INCLUDES = @QT_DBUS_INCLUDES@ QT_DBUS_INCLUDES = @QT_DBUS_INCLUDES@
QT_DBUS_LIBS = @QT_DBUS_LIBS@ QT_DBUS_LIBS = @QT_DBUS_LIBS@
+5 -2
View File
@@ -70,8 +70,8 @@
/* Define this symbol if the consensus lib has been built */ /* Define this symbol if the consensus lib has been built */
#undef HAVE_CONSENSUS_LIB #undef HAVE_CONSENSUS_LIB
/* define if the compiler supports basic C++11 syntax */ /* define if the compiler supports basic C++17 syntax */
#undef HAVE_CXX11 #undef HAVE_CXX17
/* Define to 1 if you have the declaration of `be16toh', and to 0 if you /* Define to 1 if you have the declaration of `be16toh', and to 0 if you
don't. */ don't. */
@@ -366,6 +366,9 @@
/* Define this symbol if qt plugins are static */ /* Define this symbol if qt plugins are static */
#undef QT_STATICPLUGIN #undef QT_STATICPLUGIN
/* Define this symbol if the Qt OpenSSL TLS backend exists */
#undef QT_TLS_OPENSSL
/* Define to 1 if all of the C90 standard headers exist (not just the ones /* Define to 1 if all of the C90 standard headers exist (not just the ones
required in a freestanding environment). This macro is provided for required in a freestanding environment). This macro is provided for
backward compatibility; new code need not use it. */ backward compatibility; new code need not use it. */
+17 -4
View File
@@ -58,6 +58,12 @@
#if QT_VERSION < 0x050400 #if QT_VERSION < 0x050400
Q_IMPORT_PLUGIN(AccessibleFactory) Q_IMPORT_PLUGIN(AccessibleFactory)
#endif #endif
#if defined(QT_TLS_OPENSSL)
Q_IMPORT_PLUGIN(QTlsBackendOpenSSL);
#endif
#if defined(QT_QPA_PLATFORM_MINIMAL)
Q_IMPORT_PLUGIN(QMinimalIntegrationPlugin);
#endif
#if defined(QT_QPA_PLATFORM_XCB) #if defined(QT_QPA_PLATFORM_XCB)
Q_IMPORT_PLUGIN(QXcbIntegrationPlugin); Q_IMPORT_PLUGIN(QXcbIntegrationPlugin);
#elif defined(QT_QPA_PLATFORM_WINDOWS) #elif defined(QT_QPA_PLATFORM_WINDOWS)
@@ -120,12 +126,19 @@ static void initTranslations(QTranslator& qtTranslatorBase, QTranslator& qtTrans
// - First load the translator for the base language, without territory // - First load the translator for the base language, without territory
// - Then load the more specific locale translator // - Then load the more specific locale translator
const QString qtTranslationsPath =
#if QT_VERSION >= 0x060000
QLibraryInfo::path(QLibraryInfo::TranslationsPath);
#else
QLibraryInfo::location(QLibraryInfo::TranslationsPath);
#endif
// Load e.g. qt_de.qm // Load e.g. qt_de.qm
if (qtTranslatorBase.load("qt_" + lang, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) if (qtTranslatorBase.load("qt_" + lang, qtTranslationsPath))
QApplication::installTranslator(&qtTranslatorBase); QApplication::installTranslator(&qtTranslatorBase);
// Load e.g. qt_de_DE.qm // Load e.g. qt_de_DE.qm
if (qtTranslator.load("qt_" + lang_territory, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) if (qtTranslator.load("qt_" + lang_territory, qtTranslationsPath))
QApplication::installTranslator(&qtTranslator); QApplication::installTranslator(&qtTranslator);
// Load e.g. bitcoin_de.qm (shortcut "de" needs to be defined in agrarian.qrc) // Load e.g. bitcoin_de.qm (shortcut "de" needs to be defined in agrarian.qrc)
@@ -502,11 +515,11 @@ int main(int argc, char* argv[])
Q_INIT_RESOURCE(agrarian_locale); Q_INIT_RESOURCE(agrarian_locale);
Q_INIT_RESOURCE(agrarian); Q_INIT_RESOURCE(agrarian);
#if QT_VERSION > 0x050100 #if QT_VERSION > 0x050100 && QT_VERSION < 0x060000
// Generate high-dpi pixmaps // Generate high-dpi pixmaps
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
#endif #endif
#if QT_VERSION >= 0x050600 #if QT_VERSION >= 0x050600 && QT_VERSION < 0x060000
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif #endif
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
+3 -3
View File
@@ -16,6 +16,7 @@
#include <QDebug> #include <QDebug>
#include <QList> #include <QList>
#include <QLocale>
bool BannedNodeLessThan::operator()(const CCombinedBan& left, const CCombinedBan& right) const bool BannedNodeLessThan::operator()(const CCombinedBan& left, const CCombinedBan& right) const
{ {
@@ -125,9 +126,8 @@ QVariant BanTableModel::data(const QModelIndex &index, int role) const
case Address: case Address:
return QString::fromStdString(rec->subnet.ToString()); return QString::fromStdString(rec->subnet.ToString());
case Bantime: case Bantime:
QDateTime date = QDateTime::fromMSecsSinceEpoch(0); QDateTime date = QDateTime::fromSecsSinceEpoch(rec->banEntry.nBanUntil);
date = date.addSecs(rec->banEntry.nBanUntil); return QLocale::system().toString(date, QLocale::LongFormat);
return date.toString(Qt::SystemLocaleLongDate);
} }
} }
+4 -1
View File
@@ -119,7 +119,10 @@ public:
opt.rect = rect(); opt.rect = rect();
cachedMinimumSizeHint = style()->sizeFromContents(QStyle::CT_SpinBox, &opt, hint, this).expandedTo(QApplication::globalStrut()); cachedMinimumSizeHint = style()->sizeFromContents(QStyle::CT_SpinBox, &opt, hint, this);
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
cachedMinimumSizeHint = cachedMinimumSizeHint.expandedTo(QApplication::globalStrut());
#endif
} }
return cachedMinimumSizeHint; return cachedMinimumSizeHint;
} }
+18 -15
View File
@@ -37,9 +37,12 @@
#include <iostream> #include <iostream>
#include <QAction> #include <QAction>
#include <QActionGroup>
#include <QApplication> #include <QApplication>
#include <QDateTime> #include <QDateTime>
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
#include <QDesktopWidget> #include <QDesktopWidget>
#endif
#include <QDragEnterEvent> #include <QDragEnterEvent>
#include <QIcon> #include <QIcon>
#include <QListWidget> #include <QListWidget>
@@ -305,9 +308,9 @@ void BitcoinGUI::createActions(const NetworkStyle* networkStyle)
overviewAction->setToolTip(overviewAction->statusTip()); overviewAction->setToolTip(overviewAction->statusTip());
overviewAction->setCheckable(true); overviewAction->setCheckable(true);
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
overviewAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_1)); overviewAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_1));
#else #else
overviewAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_1)); overviewAction->setShortcut(QKeySequence(Qt::ALT | Qt::Key_1));
#endif #endif
tabGroup->addAction(overviewAction); tabGroup->addAction(overviewAction);
@@ -316,9 +319,9 @@ void BitcoinGUI::createActions(const NetworkStyle* networkStyle)
sendCoinsAction->setToolTip(sendCoinsAction->statusTip()); sendCoinsAction->setToolTip(sendCoinsAction->statusTip());
sendCoinsAction->setCheckable(true); sendCoinsAction->setCheckable(true);
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
sendCoinsAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_2)); sendCoinsAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_2));
#else #else
sendCoinsAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_2)); sendCoinsAction->setShortcut(QKeySequence(Qt::ALT | Qt::Key_2));
#endif #endif
tabGroup->addAction(sendCoinsAction); tabGroup->addAction(sendCoinsAction);
@@ -327,9 +330,9 @@ void BitcoinGUI::createActions(const NetworkStyle* networkStyle)
receiveCoinsAction->setToolTip(receiveCoinsAction->statusTip()); receiveCoinsAction->setToolTip(receiveCoinsAction->statusTip());
receiveCoinsAction->setCheckable(true); receiveCoinsAction->setCheckable(true);
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
receiveCoinsAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_3)); receiveCoinsAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_3));
#else #else
receiveCoinsAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_3)); receiveCoinsAction->setShortcut(QKeySequence(Qt::ALT | Qt::Key_3));
#endif #endif
tabGroup->addAction(receiveCoinsAction); tabGroup->addAction(receiveCoinsAction);
@@ -338,9 +341,9 @@ void BitcoinGUI::createActions(const NetworkStyle* networkStyle)
historyAction->setToolTip(historyAction->statusTip()); historyAction->setToolTip(historyAction->statusTip());
historyAction->setCheckable(true); historyAction->setCheckable(true);
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
historyAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_4)); historyAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_4));
#else #else
historyAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_4)); historyAction->setShortcut(QKeySequence(Qt::ALT | Qt::Key_4));
#endif #endif
tabGroup->addAction(historyAction); tabGroup->addAction(historyAction);
@@ -349,9 +352,9 @@ void BitcoinGUI::createActions(const NetworkStyle* networkStyle)
privacyAction->setToolTip(privacyAction->statusTip()); privacyAction->setToolTip(privacyAction->statusTip());
privacyAction->setCheckable(true); privacyAction->setCheckable(true);
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
privacyAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_5)); privacyAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_5));
#else #else
privacyAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_5)); privacyAction->setShortcut(QKeySequence(Qt::ALT | Qt::Key_5));
#endif #endif
tabGroup->addAction(privacyAction); tabGroup->addAction(privacyAction);
@@ -364,9 +367,9 @@ void BitcoinGUI::createActions(const NetworkStyle* networkStyle)
masternodeAction->setToolTip(masternodeAction->statusTip()); masternodeAction->setToolTip(masternodeAction->statusTip());
masternodeAction->setCheckable(true); masternodeAction->setCheckable(true);
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
masternodeAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_6)); masternodeAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_6));
#else #else
masternodeAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_6)); masternodeAction->setShortcut(QKeySequence(Qt::ALT | Qt::Key_6));
#endif #endif
tabGroup->addAction(masternodeAction); tabGroup->addAction(masternodeAction);
connect(masternodeAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(masternodeAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized()));
@@ -378,9 +381,9 @@ void BitcoinGUI::createActions(const NetworkStyle* networkStyle)
governanceAction->setToolTip(governanceAction->statusTip()); governanceAction->setToolTip(governanceAction->statusTip());
governanceAction->setCheckable(true); governanceAction->setCheckable(true);
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
governanceAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_7)); governanceAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_7));
#else #else
governanceAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_7)); governanceAction->setShortcut(QKeySequence(Qt::ALT | Qt::Key_7));
#endif #endif
tabGroup->addAction(governanceAction); tabGroup->addAction(governanceAction);
@@ -401,7 +404,7 @@ void BitcoinGUI::createActions(const NetworkStyle* networkStyle)
quitAction = new QAction(QIcon(":/icons/quit"), tr("E&xit"), this); quitAction = new QAction(QIcon(":/icons/quit"), tr("E&xit"), this);
quitAction->setStatusTip(tr("Quit application")); quitAction->setStatusTip(tr("Quit application"));
quitAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q)); quitAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_Q));
quitAction->setMenuRole(QAction::QuitRole); quitAction->setMenuRole(QAction::QuitRole);
aboutAction = new QAction(networkStyle->getAppIcon(), tr("&About Agrarian Core"), this); aboutAction = new QAction(networkStyle->getAppIcon(), tr("&About Agrarian Core"), this);
aboutAction->setStatusTip(tr("Show information about Agrarian Core")); aboutAction->setStatusTip(tr("Show information about Agrarian Core"));
+1 -2
View File
@@ -72,8 +72,7 @@ static std::string ScriptToString(const CScript& Script, bool Long = false, bool
static std::string TimeToString(uint64_t Time) static std::string TimeToString(uint64_t Time)
{ {
QDateTime timestamp; QDateTime timestamp = QDateTime::fromSecsSinceEpoch(Time);
timestamp.setTime_t(Time);
return timestamp.toString("yyyy-MM-dd hh:mm:ss").toUtf8().data(); return timestamp.toString("yyyy-MM-dd hh:mm:ss").toUtf8().data();
} }
+3 -3
View File
@@ -110,9 +110,9 @@ QDateTime ClientModel::getLastBlockDate() const
{ {
LOCK(cs_main); LOCK(cs_main);
if (chainActive.Tip()) if (chainActive.Tip())
return QDateTime::fromTime_t(chainActive.Tip()->GetBlockTime()); return QDateTime::fromSecsSinceEpoch(chainActive.Tip()->GetBlockTime());
else else
return QDateTime::fromTime_t(Params().GenesisBlock().GetBlockTime()); // Genesis block's time of current network return QDateTime::fromSecsSinceEpoch(Params().GenesisBlock().GetBlockTime()); // Genesis block's time of current network
} }
double ClientModel::getVerificationProgress() const double ClientModel::getVerificationProgress() const
@@ -248,7 +248,7 @@ QString ClientModel::clientName() const
QString ClientModel::formatClientStartupTime() const QString ClientModel::formatClientStartupTime() const
{ {
return QDateTime::fromTime_t(nClientStartupTime).toString(); return QDateTime::fromSecsSinceEpoch(nClientStartupTime).toString();
} }
void ClientModel::updateBanlist() void ClientModel::updateBanlist()
+6 -1
View File
@@ -730,7 +730,12 @@ void CoinControlDialog::updateView()
ui->treeWidget->setEnabled(false); // performance, otherwise updateLabels would be called for every checked checkbox ui->treeWidget->setEnabled(false); // performance, otherwise updateLabels would be called for every checked checkbox
ui->treeWidget->setAlternatingRowColors(!treeMode); ui->treeWidget->setAlternatingRowColors(!treeMode);
QFlags<Qt::ItemFlag> flgCheckbox = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable; QFlags<Qt::ItemFlag> flgCheckbox = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable;
QFlags<Qt::ItemFlag> flgTristate = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable | Qt::ItemIsTristate; QFlags<Qt::ItemFlag> flgTristate = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable |
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
Qt::ItemIsAutoTristate;
#else
Qt::ItemIsTristate;
#endif
int nDisplayUnit = model->getOptionsModel()->getDisplayUnit(); int nDisplayUnit = model->getOptionsModel()->getDisplayUnit();
double mempoolEstimatePriority = mempool.estimatePriority(nTxConfirmTarget); double mempoolEstimatePriority = mempool.estimatePriority(nTxConfirmTarget);
+18 -9
View File
@@ -48,14 +48,21 @@
#include <QClipboard> #include <QClipboard>
#include <QDateTime> #include <QDateTime>
#include <QDesktopServices> #include <QDesktopServices>
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
#include <QDesktopWidget> #include <QDesktopWidget>
#endif
#include <QDir>
#include <QDoubleValidator> #include <QDoubleValidator>
#include <QFileDialog> #include <QFileDialog>
#include <QFileInfo>
#include <QFont> #include <QFont>
#include <QGuiApplication> #include <QGuiApplication>
#include <QLineEdit> #include <QLineEdit>
#include <QLocale>
#include <QRegularExpression>
#include <QScreen> #include <QScreen>
#include <QSettings> #include <QSettings>
#include <QStandardPaths>
#include <QTextDocument> // for Qt::mightBeRichText #include <QTextDocument> // for Qt::mightBeRichText
#include <QThread> #include <QThread>
#include <QUrlQuery> #include <QUrlQuery>
@@ -82,12 +89,12 @@ namespace GUIUtil
{ {
QString dateTimeStr(const QDateTime& date) QString dateTimeStr(const QDateTime& date)
{ {
return date.date().toString(Qt::SystemLocaleShortDate) + QString(" ") + date.toString("hh:mm"); return QLocale::system().toString(date.date(), QLocale::ShortFormat) + QString(" ") + date.toString("hh:mm");
} }
QString dateTimeStr(qint64 nTime) QString dateTimeStr(qint64 nTime)
{ {
return dateTimeStr(QDateTime::fromTime_t((qint32)nTime)); return dateTimeStr(QDateTime::fromSecsSinceEpoch((qint32)nTime));
} }
QFont bitcoinAddressFont() QFont bitcoinAddressFont()
@@ -269,10 +276,11 @@ QString getSaveFileName(QWidget* parent, const QString& caption, const QString&
QString result = QDir::toNativeSeparators(QFileDialog::getSaveFileName(parent, caption, myDir, filter, &selectedFilter)); QString result = QDir::toNativeSeparators(QFileDialog::getSaveFileName(parent, caption, myDir, filter, &selectedFilter));
/* Extract first suffix from filter pattern "Description (*.foo)" or "Description (*.foo *.bar ...) */ /* Extract first suffix from filter pattern "Description (*.foo)" or "Description (*.foo *.bar ...) */
QRegExp filter_re(".* \\(\\*\\.(.*)[ \\)]"); QRegularExpression filter_re(".* \\(\\*\\.([^\\s\\)]+).*\\)");
QString selectedSuffix; QString selectedSuffix;
if (filter_re.exactMatch(selectedFilter)) { QRegularExpressionMatch filter_match = filter_re.match(selectedFilter);
selectedSuffix = filter_re.cap(1); if (filter_match.hasMatch()) {
selectedSuffix = filter_match.captured(1);
} }
/* Add suffix if needed */ /* Add suffix if needed */
@@ -310,10 +318,11 @@ QString getOpenFileName(QWidget* parent, const QString& caption, const QString&
if (selectedSuffixOut) { if (selectedSuffixOut) {
/* Extract first suffix from filter pattern "Description (*.foo)" or "Description (*.foo *.bar ...) */ /* Extract first suffix from filter pattern "Description (*.foo)" or "Description (*.foo *.bar ...) */
QRegExp filter_re(".* \\(\\*\\.(.*)[ \\)]"); QRegularExpression filter_re(".* \\(\\*\\.([^\\s\\)]+).*\\)");
QString selectedSuffix; QString selectedSuffix;
if (filter_re.exactMatch(selectedFilter)) { QRegularExpressionMatch filter_match = filter_re.match(selectedFilter);
selectedSuffix = filter_re.cap(1); if (filter_match.hasMatch()) {
selectedSuffix = filter_match.captured(1);
} }
*selectedSuffixOut = selectedSuffix; *selectedSuffixOut = selectedSuffix;
} }
@@ -809,7 +818,7 @@ bool isExternal(QString theme)
if (theme.isEmpty()) if (theme.isEmpty())
return false; return false;
return (theme.operator!=("default")); return theme != "default";
} }
// Open CSS when configured // Open CSS when configured
+1 -1
View File
@@ -120,7 +120,7 @@ OptionsDialog::OptionsDialog(QWidget* parent, bool enableWallet) : QDialog(paren
if(langStr.contains("_")) if(langStr.contains("_"))
{ {
/** display language strings as "native language - native country (locale name)", e.g. "Deutsch - Deutschland (de)" */ /** display language strings as "native language - native country (locale name)", e.g. "Deutsch - Deutschland (de)" */
ui->lang->addItem(locale.nativeLanguageName() + QString(" - ") + locale.nativeCountryName() + QString(" (") + langStr + QString(")"), QVariant(langStr)); ui->lang->addItem(locale.nativeLanguageName() + QString(" - ") + locale.nativeTerritoryName() + QString(" (") + langStr + QString(")"), QVariant(langStr));
} }
else else
{ {
+4 -4
View File
@@ -219,12 +219,12 @@ QVariant OptionsModel::data(const QModelIndex& index, int role) const
return settings.value("fUseProxy", false); return settings.value("fUseProxy", false);
case ProxyIP: { case ProxyIP: {
// contains IP at index 0 and port at index 1 // contains IP at index 0 and port at index 1
QStringList strlIpPort = settings.value("addrProxy").toString().split(":", QString::SkipEmptyParts); QStringList strlIpPort = settings.value("addrProxy").toString().split(":", Qt::SkipEmptyParts);
return strlIpPort.at(0); return strlIpPort.at(0);
} }
case ProxyPort: { case ProxyPort: {
// contains IP at index 0 and port at index 1 // contains IP at index 0 and port at index 1
QStringList strlIpPort = settings.value("addrProxy").toString().split(":", QString::SkipEmptyParts); QStringList strlIpPort = settings.value("addrProxy").toString().split(":", Qt::SkipEmptyParts);
return strlIpPort.at(1); return strlIpPort.at(1);
} }
@@ -308,7 +308,7 @@ bool OptionsModel::setData(const QModelIndex& index, const QVariant& value, int
break; break;
case ProxyIP: { case ProxyIP: {
// contains current IP at index 0 and current port at index 1 // contains current IP at index 0 and current port at index 1
QStringList strlIpPort = settings.value("addrProxy").toString().split(":", QString::SkipEmptyParts); QStringList strlIpPort = settings.value("addrProxy").toString().split(":", Qt::SkipEmptyParts);
// if that key doesn't exist or has a changed IP // if that key doesn't exist or has a changed IP
if (!settings.contains("addrProxy") || strlIpPort.at(0) != value.toString()) { if (!settings.contains("addrProxy") || strlIpPort.at(0) != value.toString()) {
// construct new value from new IP and current port // construct new value from new IP and current port
@@ -319,7 +319,7 @@ bool OptionsModel::setData(const QModelIndex& index, const QVariant& value, int
} break; } break;
case ProxyPort: { case ProxyPort: {
// contains current IP at index 0 and current port at index 1 // contains current IP at index 0 and current port at index 1
QStringList strlIpPort = settings.value("addrProxy").toString().split(":", QString::SkipEmptyParts); QStringList strlIpPort = settings.value("addrProxy").toString().split(":", Qt::SkipEmptyParts);
// if that key doesn't exist or has a changed port // if that key doesn't exist or has a changed port
if (!settings.contains("addrProxy") || strlIpPort.at(1) != value.toString()) { if (!settings.contains("addrProxy") || strlIpPort.at(1) != value.toString()) {
// construct new value from current IP and new port // construct new value from current IP and new port
+1 -1
View File
@@ -37,6 +37,7 @@
#include <QObject> #include <QObject>
#include <QString> #include <QString>
#include <QSslError>
class OptionsModel; class OptionsModel;
@@ -48,7 +49,6 @@ class QByteArray;
class QLocalServer; class QLocalServer;
class QNetworkAccessManager; class QNetworkAccessManager;
class QNetworkReply; class QNetworkReply;
class QSslError;
class QUrl; class QUrl;
QT_END_NAMESPACE QT_END_NAMESPACE
+1 -1
View File
@@ -217,7 +217,7 @@ bool RecentRequestEntryLessThan::operator()(RecentRequestEntry& left, RecentRequ
switch (column) { switch (column) {
case RecentRequestsTableModel::Date: case RecentRequestsTableModel::Date:
return pLeft->date.toTime_t() < pRight->date.toTime_t(); return pLeft->date.toSecsSinceEpoch() < pRight->date.toSecsSinceEpoch();
case RecentRequestsTableModel::Label: case RecentRequestsTableModel::Label:
return pLeft->recipient.label < pRight->recipient.label; return pLeft->recipient.label < pRight->recipient.label;
case RecentRequestsTableModel::Address: case RecentRequestsTableModel::Address:
+2 -2
View File
@@ -30,7 +30,7 @@ public:
template <typename Stream, typename Operation> template <typename Stream, typename Operation>
inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion)
{ {
unsigned int nDate = date.toTime_t(); unsigned int nDate = date.toSecsSinceEpoch();
READWRITE(this->nVersion); READWRITE(this->nVersion);
nVersion = this->nVersion; nVersion = this->nVersion;
@@ -39,7 +39,7 @@ public:
READWRITE(recipient); READWRITE(recipient);
if (ser_action.ForRead()) if (ser_action.ForRead())
date = QDateTime::fromTime_t(nDate); date = QDateTime::fromSecsSinceEpoch(nDate);
} }
}; };
+1 -1
View File
@@ -72,7 +72,7 @@ width: 70px;
} }
QToolBar > QToolButton { QToolBar > QToolButton {
Alignment: left; qproperty-alignment: 'AlignLeft';
background-color: #372f44; background-color: #372f44;
selection-background-color:transparent; selection-background-color:transparent;
border:0.5px solid #888; border:0.5px solid #888;
+7 -3
View File
@@ -367,7 +367,7 @@ bool RPCConsole::eventFilter(QObject* obj, QEvent* event)
case Qt::Key_PageUp: /* pass paging keys to messages widget */ case Qt::Key_PageUp: /* pass paging keys to messages widget */
case Qt::Key_PageDown: case Qt::Key_PageDown:
if (obj == ui->lineEdit) { if (obj == ui->lineEdit) {
QApplication::postEvent(ui->messagesWidget, new QKeyEvent(*keyevt)); QApplication::postEvent(ui->messagesWidget, new QKeyEvent(keyevt->type(), keyevt->key(), keyevt->modifiers(), keyevt->text(), keyevt->isAutoRepeat(), keyevt->count()));
return true; return true;
} }
break; break;
@@ -375,7 +375,7 @@ bool RPCConsole::eventFilter(QObject* obj, QEvent* event)
case Qt::Key_Enter: case Qt::Key_Enter:
// forward these events to lineEdit // forward these events to lineEdit
if(obj == autoCompleter->popup()) { if(obj == autoCompleter->popup()) {
QApplication::postEvent(ui->lineEdit, new QKeyEvent(*keyevt)); QApplication::postEvent(ui->lineEdit, new QKeyEvent(keyevt->type(), keyevt->key(), keyevt->modifiers(), keyevt->text(), keyevt->isAutoRepeat(), keyevt->count()));
return true; return true;
} }
break; break;
@@ -386,7 +386,7 @@ bool RPCConsole::eventFilter(QObject* obj, QEvent* event)
((mod & Qt::ControlModifier) && key == Qt::Key_V) || ((mod & Qt::ControlModifier) && key == Qt::Key_V) ||
((mod & Qt::ShiftModifier) && key == Qt::Key_Insert))) { ((mod & Qt::ShiftModifier) && key == Qt::Key_Insert))) {
ui->lineEdit->setFocus(); ui->lineEdit->setFocus();
QApplication::postEvent(ui->lineEdit, new QKeyEvent(*keyevt)); QApplication::postEvent(ui->lineEdit, new QKeyEvent(keyevt->type(), keyevt->key(), keyevt->modifiers(), keyevt->text(), keyevt->isAutoRepeat(), keyevt->count()));
return true; return true;
} }
} }
@@ -451,7 +451,11 @@ void RPCConsole::setClientModel(ClientModel* model)
connect(banAction24h, SIGNAL(triggered()), signalMapper, SLOT(map())); connect(banAction24h, SIGNAL(triggered()), signalMapper, SLOT(map()));
connect(banAction7d, SIGNAL(triggered()), signalMapper, SLOT(map())); connect(banAction7d, SIGNAL(triggered()), signalMapper, SLOT(map()));
connect(banAction365d, SIGNAL(triggered()), signalMapper, SLOT(map())); connect(banAction365d, SIGNAL(triggered()), signalMapper, SLOT(map()));
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
connect(signalMapper, SIGNAL(mappedInt(int)), this, SLOT(banSelectedNode(int)));
#else
connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(banSelectedNode(int))); connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(banSelectedNode(int)));
#endif
// peer table context menu signals // peer table context menu signals
connect(ui->peerWidget, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showPeersTableContextMenu(const QPoint&))); connect(ui->peerWidget, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showPeersTableContextMenu(const QPoint&)));
+8
View File
@@ -180,11 +180,19 @@ void SendCoinsDialog::setModel(WalletModel* model)
connect(ui->sliderSmartFee, SIGNAL(valueChanged(int)), this, SLOT(updateSmartFeeLabel())); connect(ui->sliderSmartFee, SIGNAL(valueChanged(int)), this, SLOT(updateSmartFeeLabel()));
connect(ui->sliderSmartFee, SIGNAL(valueChanged(int)), this, SLOT(updateGlobalFeeVariables())); connect(ui->sliderSmartFee, SIGNAL(valueChanged(int)), this, SLOT(updateGlobalFeeVariables()));
connect(ui->sliderSmartFee, SIGNAL(valueChanged(int)), this, SLOT(coinControlUpdateLabels())); connect(ui->sliderSmartFee, SIGNAL(valueChanged(int)), this, SLOT(coinControlUpdateLabels()));
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
connect(ui->groupFee, SIGNAL(idClicked(int)), this, SLOT(updateFeeSectionControls()));
connect(ui->groupFee, SIGNAL(idClicked(int)), this, SLOT(updateGlobalFeeVariables()));
connect(ui->groupFee, SIGNAL(idClicked(int)), this, SLOT(coinControlUpdateLabels()));
connect(ui->groupCustomFee, SIGNAL(idClicked(int)), this, SLOT(updateGlobalFeeVariables()));
connect(ui->groupCustomFee, SIGNAL(idClicked(int)), this, SLOT(coinControlUpdateLabels()));
#else
connect(ui->groupFee, SIGNAL(buttonClicked(int)), this, SLOT(updateFeeSectionControls())); connect(ui->groupFee, SIGNAL(buttonClicked(int)), this, SLOT(updateFeeSectionControls()));
connect(ui->groupFee, SIGNAL(buttonClicked(int)), this, SLOT(updateGlobalFeeVariables())); connect(ui->groupFee, SIGNAL(buttonClicked(int)), this, SLOT(updateGlobalFeeVariables()));
connect(ui->groupFee, SIGNAL(buttonClicked(int)), this, SLOT(coinControlUpdateLabels())); connect(ui->groupFee, SIGNAL(buttonClicked(int)), this, SLOT(coinControlUpdateLabels()));
connect(ui->groupCustomFee, SIGNAL(buttonClicked(int)), this, SLOT(updateGlobalFeeVariables())); connect(ui->groupCustomFee, SIGNAL(buttonClicked(int)), this, SLOT(updateGlobalFeeVariables()));
connect(ui->groupCustomFee, SIGNAL(buttonClicked(int)), this, SLOT(coinControlUpdateLabels())); connect(ui->groupCustomFee, SIGNAL(buttonClicked(int)), this, SLOT(coinControlUpdateLabels()));
#endif
connect(ui->customFee, SIGNAL(valueChanged()), this, SLOT(updateGlobalFeeVariables())); connect(ui->customFee, SIGNAL(valueChanged()), this, SLOT(updateGlobalFeeVariables()));
connect(ui->customFee, SIGNAL(valueChanged()), this, SLOT(coinControlUpdateLabels())); connect(ui->customFee, SIGNAL(valueChanged()), this, SLOT(coinControlUpdateLabels()));
connect(ui->checkBoxMinimumFee, SIGNAL(stateChanged(int)), this, SLOT(setMinimumFee())); connect(ui->checkBoxMinimumFee, SIGNAL(stateChanged(int)), this, SLOT(setMinimumFee()));
+2
View File
@@ -19,7 +19,9 @@
#include <QApplication> #include <QApplication>
#include <QCloseEvent> #include <QCloseEvent>
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
#include <QDesktopWidget> #include <QDesktopWidget>
#endif
#include <QGuiApplication> #include <QGuiApplication>
#include <QPainter> #include <QPainter>
#include <QScreen> #include <QScreen>
+2 -2
View File
@@ -13,9 +13,9 @@
#include <QDateTime> #include <QDateTime>
// Earliest date that can be represented (far in the past) // Earliest date that can be represented (far in the past)
const QDateTime TransactionFilterProxy::MIN_DATE = QDateTime::fromTime_t(0); const QDateTime TransactionFilterProxy::MIN_DATE = QDateTime::fromSecsSinceEpoch(0);
// Last date that can be represented (far in the future) // Last date that can be represented (far in the future)
const QDateTime TransactionFilterProxy::MAX_DATE = QDateTime::fromTime_t(0xFFFFFFFF); const QDateTime TransactionFilterProxy::MAX_DATE = QDateTime::fromSecsSinceEpoch(0xFFFFFFFF);
TransactionFilterProxy::TransactionFilterProxy(QObject* parent) : QSortFilterProxyModel(parent), TransactionFilterProxy::TransactionFilterProxy(QObject* parent) : QSortFilterProxyModel(parent),
dateFrom(MIN_DATE), dateFrom(MIN_DATE),
+1 -1
View File
@@ -608,7 +608,7 @@ QVariant TransactionTableModel::data(const QModelIndex& index, int role) const
case TypeRole: case TypeRole:
return rec->type; return rec->type;
case DateRole: case DateRole:
return QDateTime::fromTime_t(static_cast<uint>(rec->time)); return QDateTime::fromSecsSinceEpoch(static_cast<uint>(rec->time));
case WatchonlyRole: case WatchonlyRole:
return rec->involvesWatchAddress; return rec->involvesWatchAddress;
case WatchonlyDecorationRole: case WatchonlyDecorationRole:
+5 -1
View File
@@ -175,7 +175,11 @@ TransactionView::TransactionView(QWidget* parent) : QWidget(parent), model(0), t
mapperThirdPartyTxUrls = new QSignalMapper(this); mapperThirdPartyTxUrls = new QSignalMapper(this);
// Connect actions // Connect actions
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
connect(mapperThirdPartyTxUrls, SIGNAL(mappedString(QString)), this, SLOT(openThirdPartyTxUrl(QString)));
#else
connect(mapperThirdPartyTxUrls, SIGNAL(mapped(QString)), this, SLOT(openThirdPartyTxUrl(QString))); connect(mapperThirdPartyTxUrls, SIGNAL(mapped(QString)), this, SLOT(openThirdPartyTxUrl(QString)));
#endif
connect(dateWidget, SIGNAL(activated(int)), this, SLOT(chooseDate(int))); connect(dateWidget, SIGNAL(activated(int)), this, SLOT(chooseDate(int)));
connect(typeWidget, SIGNAL(activated(int)), this, SLOT(chooseType(int))); connect(typeWidget, SIGNAL(activated(int)), this, SLOT(chooseType(int)));
@@ -231,7 +235,7 @@ void TransactionView::setModel(WalletModel* model)
if (model->getOptionsModel()) { if (model->getOptionsModel()) {
// Add third party transaction URLs to context menu // Add third party transaction URLs to context menu
QStringList listUrls = model->getOptionsModel()->getThirdPartyTxUrls().split("|", QString::SkipEmptyParts); QStringList listUrls = model->getOptionsModel()->getThirdPartyTxUrls().split("|", Qt::SkipEmptyParts);
for (int i = 0; i < listUrls.size(); ++i) { for (int i = 0; i < listUrls.size(); ++i) {
QString host = QUrl(listUrls[i].trimmed(), QUrl::StrictMode).host(); QString host = QUrl(listUrls[i].trimmed(), QUrl::StrictMode).host();
if (!host.isEmpty()) { if (!host.isEmpty()) {
+2 -3
View File
@@ -22,7 +22,7 @@
#include <QCloseEvent> #include <QCloseEvent>
#include <QLabel> #include <QLabel>
#include <QRegExp> #include <QRegularExpression>
#include <QTextTable> #include <QTextTable>
#include <QTextCursor> #include <QTextCursor>
#include <QVBoxLayout> #include <QVBoxLayout>
@@ -52,8 +52,7 @@ HelpMessageDialog::HelpMessageDialog(QWidget* parent, bool about) : QDialog(pare
QString licenseInfoHTML = licenseInfo; QString licenseInfoHTML = licenseInfo;
// Make URLs clickable // Make URLs clickable
QRegExp uri("<(.*)>", Qt::CaseSensitive, QRegExp::RegExp2); QRegularExpression uri("<(.*?)>");
uri.setMinimal(true); // use non-greedy matching
licenseInfoHTML.replace(uri, "<a href=\"\\1\">\\1</a>"); licenseInfoHTML.replace(uri, "<a href=\"\\1\">\\1</a>");
// Replace newlines with HTML breaks // Replace newlines with HTML breaks
licenseInfoHTML.replace("\n\n", "<br><br>"); licenseInfoHTML.replace("\n\n", "<br><br>");
+1 -1
View File
@@ -65,7 +65,7 @@ WalletView::WalletView(QWidget* parent) : QStackedWidget(parent),
QFont fontHeaderLeft; QFont fontHeaderLeft;
fontHeaderLeft.setPointSize(20); fontHeaderLeft.setPointSize(20);
fontHeaderLeft.setBold(true); fontHeaderLeft.setBold(true);
fontHeaderLeft.setWeight(75); fontHeaderLeft.setWeight(QFont::Bold);
labelOverviewHeaderLeft->setFont(fontHeaderLeft); labelOverviewHeaderLeft->setFont(fontHeaderLeft);
horizontalLayout_Header->addWidget(labelOverviewHeaderLeft); horizontalLayout_Header->addWidget(labelOverviewHeaderLeft);
+6 -1
View File
@@ -59,7 +59,12 @@ void ZPivControlDialog::updateList()
ui->treeWidget->clear(); ui->treeWidget->clear();
// add a top level item for each denomination // add a top level item for each denomination
QFlags<Qt::ItemFlag> flgTristate = Qt::ItemIsEnabled | Qt::ItemIsUserCheckable | Qt::ItemIsTristate; QFlags<Qt::ItemFlag> flgTristate = Qt::ItemIsEnabled | Qt::ItemIsUserCheckable |
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
Qt::ItemIsAutoTristate;
#else
Qt::ItemIsTristate;
#endif
map<libzerocoin::CoinDenomination, int> mapDenomPosition; map<libzerocoin::CoinDenomination, int> mapDenomPosition;
for (auto denom : libzerocoin::zerocoinDenomList) { for (auto denom : libzerocoin::zerocoinDenomList) {
CZPivControlWidgetItem* itemDenom(new CZPivControlWidgetItem); CZPivControlWidgetItem* itemDenom(new CZPivControlWidgetItem);
+1 -2
View File
@@ -132,8 +132,7 @@ private:
bool TryEnter(const char* pszName, const char* pszFile, int nLine) bool TryEnter(const char* pszName, const char* pszFile, int nLine)
{ {
EnterCritical(pszName, pszFile, nLine, (void*)(lock.mutex()), true); EnterCritical(pszName, pszFile, nLine, (void*)(lock.mutex()), true);
lock.try_lock(); if (!lock.try_lock())
if (!lock.owns_lock())
LeaveCritical(); LeaveCritical();
return lock.owns_lock(); return lock.owns_lock();
} }
+1 -1
View File
@@ -1699,7 +1699,7 @@ UniValue backupwallet(const UniValue& params, bool fHelp)
"\nExamples:\n" + "\nExamples:\n" +
HelpExampleCli("backupwallet", "\"backup.dat\"") + HelpExampleRpc("backupwallet", "\"backup.dat\"")); HelpExampleCli("backupwallet", "\"backup.dat\"") + HelpExampleRpc("backupwallet", "\"backup.dat\""));
LOCK2(cs_main, pwalletMain->cs_wallet); LOCK(pwalletMain->cs_wallet);
string strDest = params[0].get_str(); string strDest = params[0].get_str();
if (!BackupWallet(*pwalletMain, strDest)) if (!BackupWallet(*pwalletMain, strDest))