public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Sam James" <sam@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: net-p2p/bitcoin-qt/files/, net-p2p/bitcoin-qt/
Date: Thu,  5 Jan 2023 04:38:24 +0000 (UTC)	[thread overview]
Message-ID: <1672893466.4e7f8e21541417f5040cbdab5ccc6cf4c8e9db00.sam@gentoo> (raw)

commit:     4e7f8e21541417f5040cbdab5ccc6cf4c8e9db00
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Thu Jan  5 03:22:35 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu Jan  5 04:37:46 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=4e7f8e21

net-p2p/bitcoin-qt: add 24.0.1

Signed-off-by: Sam James <sam <AT> gentoo.org>

 net-p2p/bitcoin-qt/Manifest                   |   1 +
 net-p2p/bitcoin-qt/bitcoin-qt-24.0.1.ebuild   | 156 ++++++++++++++
 net-p2p/bitcoin-qt/files/24.0.1-syslibs.patch | 281 ++++++++++++++++++++++++++
 3 files changed, 438 insertions(+)

diff --git a/net-p2p/bitcoin-qt/Manifest b/net-p2p/bitcoin-qt/Manifest
index 0408f94aa093..c33fa9abf302 100644
--- a/net-p2p/bitcoin-qt/Manifest
+++ b/net-p2p/bitcoin-qt/Manifest
@@ -1,4 +1,5 @@
 DIST bitcoin-0.21.0.knots20210130.patches.tar.xz 505040 BLAKE2B c8999de4158b8781bba6ad014ae14859f1e0bab3080c59a18910cf7447eb56da4b17a0e1843fdd3669d22636df9e4ddcc4526e4293bfd86dc884983a29a5f76c SHA512 7ee27da3d26be0e93ecddff7bb21ef1746bcdb07f9a2b0ea48065367b4c44391e974e04a21e511c05fca8f55971ab8e3c3ac01a3775cc52a537d9e10966d9871
 DIST bitcoin-22.0.knots20211108.patches.tar.xz 1318256 BLAKE2B d6e56bc0ca1d706e99e7f42d8f335f016335b6bf3637c733d993696872f0a4c655cc58fc0394dfdf9916e13f0d7fbdcebf25fbdc9a165227e3c59133033644c0 SHA512 daab5860b7c7e137b6bf350cdc153e6e19172e49935640d1f6fe1f1be1e4df805b1db7fd30b0f95a560106956adab70cc6282fe933ae9de153cb971dd280f83d
+DIST bitcoin-24.0.1.tar.gz 11412628 BLAKE2B 2a8c83aecd12d8d40305d78ede1f389884ee62cfe4af39a9b416b8887a595f3393d599ebe9ddeb576bba5896923feb7ee45ba32d7d4cb0ce9e6d0ef39ecf83c7 SHA512 de1ddb543429f70b0b55a46500e0bc4807cca1b1655a28f8ab186d6f6e620f8cf82420bbdf412976ffed9bc6d742926b19933429c734edaf7430a4f8c37e1685
 DIST bitcoin-v0.21.0.tar.gz 7533957 BLAKE2B 01247cbb9fca2381a8c08ab1c88c479c640963caef22e4207aab46b05813dbf2a5286ac9e98132fb34db0e9ac6c18c79e45a89de166f5c6d480d8ac6e14ecca2 SHA512 c58187996932b0151432a65885b7e8a7b216fb1ab0576fb7d4b5e9620d957594b05e181153e2e0e50bcd5ce764861ec11019ffbb1095d3e704f441e61ac6a04f
 DIST bitcoin-v22.0.tar.gz 7977783 BLAKE2B ba212037bc8efcfbbbf6340c48ed886c4a5aa93e4a34097eafea39734a6f4e25fa6b174f894655f63c504380d8761657771795bfcc641018bf1f1661deef9321 SHA512 1b4b17360e97f390ae678adb7a239c359d3a1288799710683e26f09fc53341b6fca3211465fa3e4fdee37324d85ec1a31ffd1a3714e969df13441f755fa4b7ad

diff --git a/net-p2p/bitcoin-qt/bitcoin-qt-24.0.1.ebuild b/net-p2p/bitcoin-qt/bitcoin-qt-24.0.1.ebuild
new file mode 100644
index 000000000000..a08802221ce1
--- /dev/null
+++ b/net-p2p/bitcoin-qt/bitcoin-qt-24.0.1.ebuild
@@ -0,0 +1,156 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DB_VER="4.8"
+inherit autotools bash-completion-r1 db-use desktop xdg
+
+DESCRIPTION="An end-user Qt GUI for the Bitcoin crypto-currency"
+HOMEPAGE="https://bitcoincore.org/"
+SRC_URI="
+	https://bitcoincore.org/bin/bitcoin-core-${PV}/${P/-qt}.tar.gz
+"
+S="${WORKDIR}"/${P/-qt}
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~x86 ~amd64-linux ~x86-linux"
+IUSE="+asm +berkdb dbus +external-signer kde nat-pmp +qrcode sqlite systemtap test upnp +wallet zeromq"
+RESTRICT="!test? ( test )"
+
+REQUIRED_USE="
+	sqlite? ( wallet )
+	berkdb? ( wallet )
+	wallet? ( || ( berkdb sqlite ) )
+"
+RDEPEND="
+	dev-libs/boost:=
+	>=dev-libs/libsecp256k1-0.2.0:=[recovery,schnorr]
+	dev-qt/qtcore:5
+	dev-qt/qtgui:5
+	dev-qt/qtnetwork:5
+	dev-qt/qtwidgets:5
+	virtual/bitcoin-leveldb
+	dbus? ( dev-qt/qtdbus:5 )
+	dev-libs/libevent:=
+	nat-pmp? ( net-libs/libnatpmp )
+	qrcode? (
+		media-gfx/qrencode:=
+	)
+	sqlite? ( >=dev-db/sqlite-3.7.17:= )
+	upnp? ( >=net-libs/miniupnpc-1.9.20150916:= )
+	berkdb? ( sys-libs/db:$(db_ver_to_slot "${DB_VER}")=[cxx] )
+	zeromq? ( net-libs/zeromq:= )
+"
+DEPEND="
+	${RDEPEND}
+	systemtap? ( dev-util/systemtap )
+"
+BDEPEND="dev-qt/linguist-tools:5"
+
+DOCS=(
+	doc/bips.md
+	doc/bitcoin-conf.md
+	doc/descriptors.md
+	doc/files.md
+	doc/JSON-RPC-interface.md
+	doc/psbt.md
+	doc/reduce-memory.md
+	doc/reduce-traffic.md
+	doc/release-notes.md
+	doc/REST-interface.md
+	doc/tor.md
+)
+
+PATCHES=(
+	"${FILESDIR}"/24.0.1-syslibs.patch
+)
+
+pkg_pretend() {
+	elog "You are building ${PN} from Bitcoin Core."
+	elog "For more information, see:"
+	elog "https://bitcoincore.org/en/releases/${PV}/"
+}
+
+src_prepare() {
+	sed -i 's/^\(complete -F _bitcoind \)bitcoind \(bitcoin-qt\)$/\1\2/' contrib/bitcoind.bash-completion || die
+
+	# Save the generic icon for later
+	cp src/qt/res/src/bitcoin.svg bitcoin128.svg || die
+
+	default
+
+	eautoreconf
+
+	rm -r src/leveldb src/secp256k1 || die
+}
+
+src_configure() {
+	local myeconfargs=(
+		$(use_enable asm)
+		$(use_with dbus qtdbus)
+		$(use_enable systemtap ebpf)
+		$(use_enable external-signer)
+		$(use_with nat-pmp natpmp)
+		$(use_with nat-pmp natpmp-default)
+		$(use_with qrcode qrencode)
+		$(use_with upnp miniupnpc)
+		$(use_enable upnp upnp-default)
+		$(use_enable test tests)
+		$(use_enable wallet)
+		$(use_enable zeromq zmq)
+		--with-gui=qt5
+		--disable-util-cli
+		--disable-util-tx
+		--disable-util-util
+		--disable-util-wallet
+		--disable-bench
+		--without-libs
+		--without-daemon
+		--disable-fuzz
+		--disable-fuzz-binary
+		--disable-ccache
+		--disable-static
+		$(use_with berkdb bdb)
+		$(use_with sqlite)
+		--with-system-leveldb
+		--with-system-libsecp256k1
+	)
+
+	econf "${myeconfargs[@]}"
+}
+
+src_install() {
+	default
+
+	if use test; then
+		rm -f "${ED}/usr/bin/test_bitcoin" || die
+		rm -f "${ED}/usr/bin/test_bitcoin-qt" || die
+	fi
+
+	insinto /usr/share/icons/hicolor/scalable/apps/
+	doins bitcoin128.svg
+
+	cp "${FILESDIR}/org.bitcoin.bitcoin-qt.desktop" "${T}" || die
+	sed -i 's/Knots/Core/;s/^\(Icon=\).*$/\1bitcoin128/' "${T}/org.bitcoin.bitcoin-qt.desktop" || die
+	domenu "${T}/org.bitcoin.bitcoin-qt.desktop"
+
+	use zeromq && dodoc doc/zmq.md
+
+	newbashcomp contrib/bitcoind.bash-completion ${PN}
+
+	if use kde; then
+		insinto /usr/share/kservices5
+		doins "${FILESDIR}/bitcoin-qt.protocol"
+		dosym "../../kservices5/bitcoin-qt.protocol" "/usr/share/kde4/services/bitcoin-qt.protocol"
+	fi
+}
+
+pkg_postinst() {
+	xdg_pkg_postinst
+
+	elog "To have ${PN} automatically use Tor when it's running, be sure your"
+	elog "'torrc' config file has 'ControlPort' and 'CookieAuthentication' setup"
+	elog "correctly, and add your user to the 'tor' user group."
+}

diff --git a/net-p2p/bitcoin-qt/files/24.0.1-syslibs.patch b/net-p2p/bitcoin-qt/files/24.0.1-syslibs.patch
new file mode 100644
index 000000000000..00404a2ff021
--- /dev/null
+++ b/net-p2p/bitcoin-qt/files/24.0.1-syslibs.patch
@@ -0,0 +1,281 @@
+Originally based on 22.0-fix_build_without_leveldb.patch.
+
+- Allow system libsecp256k1
+- Allow system leveldb
+- Abort if runtime leveldb != compiled-against leveldb
+- Handle berkdb support being disabled better
+--- a/configure.ac
++++ b/configure.ac
+@@ -1362,6 +1362,23 @@ if test "$enable_fuzz_binary" = "yes"; then
+   CHECK_RUNTIME_LIB
+ fi
+ 
++dnl Check for libsecp256k1, only if explicitly requested
++AC_ARG_WITH([system-libsecp256k1],
++  [AS_HELP_STRING([--with-system-libsecp256k1],
++  [Build with system libsecp256k1 (default is no; DANGEROUS; NOT SUPPORTED)])],
++  [system_libsecp256k1=$withval],
++  [system_libsecp256k1=no]
++)
++if test x$system_libsecp256k1 != xno; then
++  PKG_CHECK_MODULES([libsecp256k1],[libsecp256k1],,[true])
++else
++  libsecp256k1_CFLAGS='-I$(srcdir)/secp256k1/include'
++  libsecp256k1_LIBS='secp256k1/libsecp256k1.la'
++fi
++AM_CONDITIONAL([EMBEDDED_LIBSECP256K1],[test x$system_libsecp256k1 = xno])
++AC_SUBST(libsecp256k1_CFLAGS)
++AC_SUBST(libsecp256k1_LIBS)
++
+ if test "$enable_wallet" != "no"; then
+     dnl Check for libdb_cxx only if wallet enabled
+     if test "$use_bdb" != "no"; then
+@@ -1413,11 +1430,76 @@ if test "$use_usdt" != "no"; then
+ fi
+ AM_CONDITIONAL([ENABLE_USDT_TRACEPOINTS], [test "$use_usdt" = "yes"])
+ 
++build_leveldb=yes
+ if test "$build_bitcoin_cli$build_bitcoin_tx$build_bitcoin_util$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests" = "nonononononono"; then
+   use_upnp=no
+   use_natpmp=no
+   use_zmq=no
++  build_leveldb=no
++fi
++
++if test x$build_leveldb = xno; then
++  system_leveldb=no
++fi
++dnl Check for leveldb, only if explicitly requested
++if test x$system_leveldb != xno; then
++  build_leveldb=no
++  LEVELDB_CPPFLAGS=
++  AC_CHECK_LIB([leveldb],[main],[
++    LIBLEVELDB=-lleveldb
++  ],[
++    AC_MSG_ERROR([leveldb library not found; using --with-system-leveldb is not supported anyway])
++  ])
++  AC_CHECK_HEADER([leveldb/filter_policy.h],[],[
++    AC_MSG_ERROR([LevelDB headers not found; using --with-system-leveldb is not supported anyway])
++  ])
++  AC_CHECK_HEADER([leveldb/helpers/memenv.h],[
++    AC_MSG_CHECKING([for memenv.h path])
++    BITCOIN_SUBDIR_TO_INCLUDE([LEVELDB_CPPFLAGS],[leveldb/helpers/],[memenv])
++  ],[
++    AC_CHECK_HEADER([memenv.h],[],[
++      AC_MSG_ERROR([LevelDB headers not found; using --with-system-leveldb is not supported anyway])
++    ])
++  ])
++
++  AC_MSG_CHECKING([library containing leveldb::NewMemEnv])
++  TEMP_LIBS="$LIBS"
++  TEMP_CPPFLAGS="$CPPFLAGS"
++  CPPFLAGS="$CPPFLAGS $LEVELDB_CPPFLAGS"
++  for searchlib in "" "-lmemenv" ERR; do
++    if test "x$searchlib" = "xERR"; then
++      AC_MSG_RESULT([no])
++      AC_MSG_ERROR([LevelDB's memenv helper not found; using --with-system-leveldb is not supported anyway])
++    fi
++    searchlib="$searchlib $LIBLEVELDB"
++    LIBS="$searchlib $TEMP_LIBS"
++    AC_LINK_IFELSE([AC_LANG_SOURCE([
++        #include <leveldb/env.h>
++        #include <leveldb/helpers/memenv.h>
++
++        int main() {
++            leveldb::Env *myenv = leveldb::NewMemEnv(leveldb::Env::Default());
++            delete myenv;
++        }
++    ])],[
++      AC_MSG_RESULT([$searchlib])
++      LIBMEMENV="$searchlib"
++      break
++    ])
++  done
++  LIBS="$TEMP_LIBS"
++  CPPFLAGS="$TEMP_CPPFLAGS"
+ fi
++AM_CONDITIONAL([EMBEDDED_LEVELDB],[test x$build_leveldb = xyes])
++AC_SUBST(LEVELDB_CPPFLAGS)
++AC_SUBST(LIBLEVELDB)
++AC_SUBST(LIBMEMENV)
++AC_ARG_WITH([system-leveldb],
++  [AS_HELP_STRING([--with-system-leveldb],
++  [Build with system LevelDB (default is no; DANGEROUS; NOT SUPPORTED)])],
++  [system_leveldb=$withval],
++  [system_leveldb=no]
++)
+ 
+ dnl Check for libminiupnpc (optional)
+ if test "$use_upnp" != "no"; then
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -23,7 +23,7 @@ noinst_PROGRAMS =
+ TESTS =
+ BENCHMARKS =
+ 
+-BITCOIN_INCLUDES=-I$(builddir) -I$(srcdir)/$(MINISKETCH_INCLUDE_DIR_INT) -I$(srcdir)/secp256k1/include -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) $(LEVELDB_CPPFLAGS)
++BITCOIN_INCLUDES=-I$(builddir) -I$(srcdir)/$(MINISKETCH_INCLUDE_DIR_INT) $(libsecp256k1_CFLAGS) -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS)
+ 
+ LIBBITCOIN_NODE=libbitcoin_node.a
+ LIBBITCOIN_COMMON=libbitcoin_common.a
+@@ -32,7 +32,11 @@ LIBBITCOIN_CLI=libbitcoin_cli.a
+ LIBBITCOIN_UTIL=libbitcoin_util.a
+ LIBBITCOIN_CRYPTO_BASE=crypto/libbitcoin_crypto_base.la
+ LIBBITCOINQT=qt/libbitcoinqt.a
++if EMBEDDED_LIBSECP256K1
+ LIBSECP256K1=secp256k1/libsecp256k1.la
++else
++LIBSECP256K1=$(libsecp256k1_LIBS)
++endif
+ 
+ if ENABLE_ZMQ
+ LIBBITCOIN_ZMQ=libbitcoin_zmq.a
+@@ -67,8 +71,10 @@ LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_ARM_SHANI)
+ endif
+ noinst_LTLIBRARIES += $(LIBBITCOIN_CRYPTO)
+ 
++if EMBEDDED_LIBSECP256K1
+ $(LIBSECP256K1): $(wildcard secp256k1/src/*.h) $(wildcard secp256k1/src/*.c) $(wildcard secp256k1/include/*)
+ 	$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(@D) $(@F)
++endif
+ 
+ # Make is not made aware of per-object dependencies to avoid limiting building parallelization
+ # But to build the less dependent modules first, we manually select their order here:
+@@ -1080,7 +1086,9 @@ endif
+ include Makefile.minisketch.include
+ 
+ include Makefile.crc32c.include
++if EMBEDDED_LEVELDB
+ include Makefile.leveldb.include
++endif
+ 
+ include Makefile.test_util.include
+ include Makefile.test_fuzz.include
+--- a/src/Makefile.test.include
++++ b/src/Makefile.test.include
+@@ -377,8 +377,9 @@ if ENABLE_BENCH
+ 	$(BENCH_BINARY) --sanity-check > /dev/null
+ endif
+ endif
++if EMBEDDED_LIBSECP256K1
+ 	$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C secp256k1 check
+-
++endif
+ if ENABLE_TESTS
+ UNIVALUE_TESTS = univalue/test/object univalue/test/unitester
+ noinst_PROGRAMS += $(UNIVALUE_TESTS)
+--- a/src/dbwrapper.cpp
++++ b/src/dbwrapper.cpp
+@@ -7,26 +7,45 @@
+ #include <fs.h>
+ #include <logging.h>
+ #include <random.h>
++#include <node/interface_ui.h>
+ #include <tinyformat.h>
+ #include <util/strencodings.h>
+ #include <util/system.h>
++#include <util/translation.h>
+ 
+ #include <algorithm>
+ #include <cassert>
+ #include <cstdarg>
+ #include <cstdint>
+ #include <cstdio>
++#include <leveldb/c.h>
+ #include <leveldb/cache.h>
+ #include <leveldb/db.h>
+ #include <leveldb/env.h>
+ #include <leveldb/filter_policy.h>
+-#include <leveldb/helpers/memenv/memenv.h>
++#include <leveldb/helpers/memenv.h>
+ #include <leveldb/iterator.h>
+ #include <leveldb/options.h>
+ #include <leveldb/status.h>
+ #include <memory>
+ #include <optional>
+ 
++bool dbwrapper_SanityCheck()
++{
++    unsigned long header_version = (leveldb::kMajorVersion << 16) | leveldb::kMinorVersion;
++    unsigned long library_version = (leveldb_major_version() << 16) | leveldb_minor_version();
++
++    if (header_version != library_version) {
++        InitError(Untranslated(strprintf("Compiled with LevelDB %d.%d, but linked with LevelDB %d.%d (incompatible).",
++            leveldb::kMajorVersion, leveldb::kMinorVersion,
++            leveldb_major_version(), leveldb_minor_version()
++        )));
++        return false;
++    }
++
++    return true;
++}
++
+ class CBitcoinLevelDBLogger : public leveldb::Logger {
+ public:
+     // This code is adapted from posix_logger.h, which is why it is using vsprintf.
+--- a/src/dbwrapper.h
++++ b/src/dbwrapper.h
+@@ -31,6 +31,8 @@ class Env;
+ static const size_t DBWRAPPER_PREALLOC_KEY_SIZE = 64;
+ static const size_t DBWRAPPER_PREALLOC_VALUE_SIZE = 1024;
+ 
++bool dbwrapper_SanityCheck();
++
+ class dbwrapper_error : public std::runtime_error
+ {
+ public:
+--- a/src/kernel/checks.cpp
++++ b/src/kernel/checks.cpp
+@@ -3,9 +3,10 @@
+ // file COPYING or http://www.opensource.org/licenses/mit-license.php.
+ 
+ #include <kernel/checks.h>
+-
++#include <dbwrapper.h>
+ #include <key.h>
+ #include <random.h>
++#include <node/interface_ui.h>
+ #include <util/time.h>
+ #include <util/translation.h>
+ 
+@@ -15,6 +16,10 @@ namespace kernel {
+ 
+ std::optional<bilingual_str> SanityChecks(const Context&)
+ {
++    if (!dbwrapper_SanityCheck()) {
++        return Untranslated("Database sanity check failure. Aborting.");
++    }
++
+     if (!ECC_InitSanityCheck()) {
+         return Untranslated("Elliptic curve cryptography sanity check failure. Aborting.");
+     }
+--- a/src/qt/createwalletdialog.cpp
++++ b/src/qt/createwalletdialog.cpp
+@@ -12,6 +12,7 @@
+ 
+ #include <qt/guiutil.h>
+ 
++#include <QMessageBox>
+ #include <QPushButton>
+ 
+ CreateWalletDialog::CreateWalletDialog(QWidget* parent) :
+@@ -94,9 +95,16 @@ CreateWalletDialog::CreateWalletDialog(QWidget* parent) :
+         ui->external_signer_checkbox->setChecked(false);
+ #endif
+ 
+-#ifndef USE_BDB
+-        ui->descriptor_checkbox->setEnabled(false);
+-        ui->descriptor_checkbox->setChecked(true);
++#ifdef USE_BDB
++    connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
++#else
++    connect(ui->buttonBox, &QDialogButtonBox::accepted, [this]() {
++        if (!this->isDescriptorWalletChecked()) {
++            QMessageBox::critical(this, tr("Cannot create wallet"), tr("This build was compiled without BDB support, so only experimental descriptor wallets are supported."));
++            return;
++        }
++        this->accept();
++    });
+ #endif
+ 
+ #ifndef ENABLE_EXTERNAL_SIGNER


             reply	other threads:[~2023-01-05  4:38 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-05  4:38 Sam James [this message]
  -- strict thread matches above, loose matches on Subject: below --
2021-01-21 23:23 [gentoo-commits] repo/gentoo:master commit in: net-p2p/bitcoin-qt/files/, net-p2p/bitcoin-qt/ Sam James
2018-10-23 20:38 Virgil Dupras
2018-09-30 19:05 Virgil Dupras
2018-04-07 20:49 Andreas Sturmlechner
2018-03-31 23:09 Michał Górny
2017-01-24  1:17 Andreas Sturmlechner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1672893466.4e7f8e21541417f5040cbdab5ccc6cf4c8e9db00.sam@gentoo \
    --to=sam@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox