core-lightning-9999-r3bitcoin
download
# Copyright 2010-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
POSTGRES_COMPAT=( {11..18} )
PYTHON_COMPAT=( python3_{12..14} )
PYTHON_SUBDIRS=( contrib/{pyln-proto,pyln-spec/bolt{1,2,4,7},pyln-client} )
DISTUTILS_OPTIONAL=1
DISTUTILS_USE_PEP517=hatchling
RUST_MIN_VER="1.85.0"
CARGO_OPTIONAL=1
CRATES="
adler2-2.0.1
aho-corasick-1.1.4
android_system_properties-0.1.5
anstream-1.0.0
anstyle-1.0.14
anstyle-parse-1.0.0
anstyle-query-1.1.5
anstyle-wincon-3.0.11
anyhow-1.0.103
arbitrary-1.4.2
arc-swap-1.9.2
arrayvec-0.7.8
asn1-rs-0.7.2
asn1-rs-derive-0.6.0
asn1-rs-impl-0.2.0
async-trait-0.1.89
atomic-waker-1.1.2
autocfg-1.5.1
axum-0.8.9
axum-core-0.5.6
axum-server-0.8.0
base58ck-0.1.101
base64-0.21.7
base64-0.22.1
bech32-0.11.1
bitcoin-0.32.101
bitcoin-consensus-encoding-1.0.0
bitcoin-internals-0.5.0
bitcoin-io-0.1.101
bitcoin-payment-instructions-0.5.1
bitcoin-units-0.1.101
bitcoin_hashes-0.14.101
bitflags-1.3.2
bitflags-2.13.0
block-buffer-0.10.4
block-buffer-0.12.1
bumpalo-3.20.3
bytes-1.12.1
cc-1.2.67
cfg-if-1.0.4
chacha20-0.10.1
chrono-0.4.45
colorchoice-1.0.5
combine-4.6.7
const-oid-0.10.2
core-foundation-0.9.4
core-foundation-0.10.1
core-foundation-sys-0.8.7
cpufeatures-0.2.17
cpufeatures-0.3.0
crc32fast-1.5.0
crypto-common-0.1.7
crypto-common-0.2.2
data-encoding-2.11.0
defmt-1.1.1
defmt-macros-1.1.1
defmt-parser-1.0.0
der-parser-10.0.0
deranged-0.5.8
derive_arbitrary-1.4.2
digest-0.10.7
digest-0.11.3
displaydoc-0.2.6
dnssec-prover-0.6.8
either-1.16.0
encoding_rs-0.8.35
engineioxide-0.16.2
engineioxide-core-0.1.0
env_filter-2.0.0
env_logger-0.11.11
equivalent-1.0.2
errno-0.3.14
fastrand-2.4.1
find-msvc-tools-0.1.9
fixedbitset-0.5.7
flate2-1.1.9
fnv-1.0.7
foldhash-0.1.5
form_urlencoded-1.2.2
fs-err-3.3.1
futures-0.3.32
futures-channel-0.3.32
futures-core-0.3.32
futures-executor-0.3.32
futures-io-0.3.32
futures-macro-0.3.32
futures-sink-0.3.32
futures-task-0.3.32
futures-util-0.3.32
generator-0.7.5
generic-array-0.14.7
getrandom-0.2.17
getrandom-0.3.4
getrandom-0.4.3
h2-0.3.27
h2-0.4.15
hashbrown-0.13.2
hashbrown-0.15.5
hashbrown-0.17.1
heck-0.5.0
hex-0.4.3
hex-conservative-0.2.2
hex-conservative-0.3.2
hex_lit-0.1.1
http-0.2.12
http-1.4.2
http-body-0.4.6
http-body-1.0.1
http-body-util-0.1.3
httparse-1.10.1
httpdate-1.0.3
hybrid-array-0.4.13
hyper-0.14.32
hyper-1.10.1
hyper-rustls-0.24.2
hyper-rustls-0.27.9
hyper-timeout-0.5.2
hyper-util-0.1.20
iana-time-zone-0.1.65
iana-time-zone-haiku-0.1.2
icu_collections-2.1.1
icu_locale_core-2.1.1
icu_normalizer-2.1.1
icu_normalizer_data-2.1.1
icu_properties-2.1.2
icu_properties_data-2.1.2
icu_provider-2.1.1
idna-1.1.0
idna_adapter-1.2.1
indexmap-2.14.0
ipnet-2.12.0
is_terminal_polyfill-1.70.2
itertools-0.14.0
itoa-1.0.18
jiff-0.2.32
jiff-static-0.2.32
jni-0.22.4
jni-macros-0.22.4
jni-sys-0.4.1
jni-sys-macros-0.4.1
js-sys-0.3.103
lazy_static-1.5.0
libc-0.2.186
libm-0.2.16
lightning-0.1.11
lightning-invoice-0.33.3
lightning-types-0.2.1
linux-raw-sys-0.12.1
litemap-0.8.2
lock_api-0.4.14
log-0.4.33
log-panics-2.1.0
loom-0.5.6
matchers-0.2.0
matchit-0.8.4
matchit-0.9.2
memchr-2.8.3
mime-0.3.17
mime_guess-2.0.5
minimal-lexical-0.2.1
miniz_oxide-0.8.9
mio-1.2.1
multimap-0.10.1
nom-7.1.3
nu-ansi-term-0.50.3
num-bigint-0.4.8
num-conv-0.1.0
num-integer-0.1.46
num-traits-0.2.19
oid-registry-0.8.1
once_cell-1.21.4
once_cell_polyfill-1.70.2
openssl-probe-0.2.1
parking_lot-0.12.5
parking_lot_core-0.9.12
pem-3.0.6
percent-encoding-2.3.2
petgraph-0.8.3
pin-project-1.1.13
pin-project-internal-1.1.13
pin-project-lite-0.2.17
portable-atomic-1.13.1
portable-atomic-util-0.2.7
possiblyrandom-0.2.1
potential_utf-0.1.5
powerfmt-0.2.0
ppv-lite86-0.2.21
prettyplease-0.2.37
proc-macro2-1.0.106
prost-0.14.4
prost-build-0.14.4
prost-derive-0.14.4
prost-types-0.14.4
protoc-bin-vendored-3.2.0
protoc-bin-vendored-linux-aarch_64-3.2.0
protoc-bin-vendored-linux-ppcle_64-3.2.0
protoc-bin-vendored-linux-s390_64-3.2.0
protoc-bin-vendored-linux-x86_32-3.2.0
protoc-bin-vendored-linux-x86_64-3.2.0
protoc-bin-vendored-macos-aarch_64-3.2.0
protoc-bin-vendored-macos-x86_64-3.2.0
protoc-bin-vendored-win32-3.2.0
pulldown-cmark-0.13.4
pulldown-cmark-to-cmark-22.0.0
quick-xml-0.41.0
quote-1.0.46
r-efi-5.3.0
r-efi-6.0.0
rand-0.9.5
rand-0.10.2
rand_chacha-0.9.0
rand_core-0.9.5
rand_core-0.10.1
rcgen-0.14.7
redox_syscall-0.5.18
regex-1.13.0
regex-automata-0.4.15
regex-syntax-0.8.11
reqwest-0.11.27
reqwest-0.13.4
ring-0.17.14
roxmltree-0.20.0
roxmltree_to_serde-0.6.2
rust-embed-8.12.0
rust-embed-impl-8.12.0
rust-embed-utils-8.12.0
rustc_version-0.4.1
rusticata-macros-4.1.0
rustix-1.1.4
rustls-0.21.12
rustls-0.23.41
rustls-native-certs-0.8.4
rustls-pemfile-1.0.4
rustls-pki-types-1.15.0
rustls-platform-verifier-0.7.0
rustls-platform-verifier-android-0.1.1
rustls-webpki-0.101.7
rustls-webpki-0.103.13
rustversion-1.0.23
ryu-1.0.23
same-file-1.0.6
schannel-0.1.29
scoped-tls-1.0.1
scopeguard-1.2.0
sct-0.7.1
secp256k1-0.29.1
secp256k1-sys-0.10.1
security-framework-3.7.0
security-framework-sys-2.17.0
semver-1.0.28
serde-1.0.228
serde_core-1.0.228
serde_derive-1.0.228
serde_json-1.0.150
serde_path_to_error-0.1.20
serde_qs-1.1.2
serde_urlencoded-0.7.1
serde_yaml_ng-0.10.0
sha1-0.10.7
sha1-0.11.0
sha2-0.11.0
sharded-slab-0.1.7
shlex-2.0.1
signal-hook-registry-1.4.8
simd-adler32-0.3.9
simd_cesu8-1.1.1
simdutf8-0.1.5
slab-0.4.12
smallvec-1.15.2
socket2-0.5.10
socket2-0.6.4
socketioxide-0.16.3
socketioxide-core-0.16.1
socketioxide-parser-common-0.16.1
stable_deref_trait-1.2.1
state-0.6.0
subtle-2.6.1
syn-2.0.118
sync_wrapper-0.1.2
sync_wrapper-1.0.2
synstructure-0.13.2
system-configuration-0.5.1
system-configuration-sys-0.5.0
tempfile-3.27.0
thiserror-1.0.69
thiserror-2.0.18
thiserror-impl-1.0.69
thiserror-impl-2.0.18
thread_local-1.1.10
time-0.3.45
time-core-0.1.7
time-macros-0.2.25
tinystr-0.8.3
tokio-1.52.3
tokio-macros-2.7.0
tokio-rustls-0.24.1
tokio-rustls-0.26.4
tokio-socks-0.5.3
tokio-stream-0.1.18
tokio-test-0.4.5
tokio-tungstenite-0.26.2
tokio-tungstenite-0.30.0
tokio-util-0.7.18
tonic-0.14.5
tonic-build-0.14.5
tonic-prost-0.14.5
tonic-prost-build-0.14.5
tower-0.5.3
tower-http-0.6.11
tower-http-0.7.0
tower-layer-0.3.3
tower-service-0.3.3
tracing-0.1.44
tracing-attributes-0.1.31
tracing-core-0.1.36
tracing-log-0.2.0
tracing-subscriber-0.3.23
try-lock-0.2.5
tungstenite-0.26.2
tungstenite-0.30.0
typenum-1.20.1
unicase-2.9.0
unicode-ident-1.0.24
unsafe-libyaml-0.2.11
untrusted-0.9.0
url-2.5.8
utf-8-0.7.6
utf8_iter-1.0.4
utf8parse-0.2.2
utoipa-5.5.0
utoipa-gen-5.5.0
utoipa-swagger-ui-9.0.2
utoipa-swagger-ui-vendored-0.1.2
valuable-0.1.1
version_check-0.9.5
walkdir-2.5.0
want-0.3.1
wasi-0.11.1+wasi-snapshot-preview1
wasip2-1.0.1+wasi-0.2.4
wasm-bindgen-0.2.126
wasm-bindgen-futures-0.4.76
wasm-bindgen-macro-0.2.126
wasm-bindgen-macro-support-0.2.126
wasm-bindgen-shared-0.2.126
web-sys-0.3.103
webpki-root-certs-1.0.8
webpki-roots-0.25.4
webpki-roots-1.0.8
winapi-util-0.1.11
windows-0.48.0
windows-core-0.62.2
windows-implement-0.60.2
windows-interface-0.59.3
windows-link-0.2.1
windows-result-0.4.1
windows-strings-0.5.1
windows-sys-0.48.0
windows-sys-0.52.0
windows-sys-0.61.2
windows-targets-0.48.5
windows-targets-0.52.6
windows_aarch64_gnullvm-0.48.5
windows_aarch64_gnullvm-0.52.6
windows_aarch64_msvc-0.48.5
windows_aarch64_msvc-0.52.6
windows_i686_gnu-0.48.5
windows_i686_gnu-0.52.6
windows_i686_gnullvm-0.52.6
windows_i686_msvc-0.48.5
windows_i686_msvc-0.52.6
windows_x86_64_gnu-0.48.5
windows_x86_64_gnu-0.52.6
windows_x86_64_gnullvm-0.48.5
windows_x86_64_gnullvm-0.52.6
windows_x86_64_msvc-0.48.5
windows_x86_64_msvc-0.52.6
winreg-0.50.0
wit-bindgen-0.46.0
writeable-0.6.3
x509-parser-0.18.1
yasna-0.5.2
yoke-0.8.3
yoke-derive-0.8.2
zerocopy-0.8.54
zerocopy-derive-0.8.54
zerofrom-0.1.8
zerofrom-derive-0.1.7
zeroize-1.9.0
zerotrie-0.2.4
zerovec-0.11.6
zerovec-derive-0.11.3
zip-3.0.0
zlib-rs-0.6.6
zmij-1.0.22
zopfli-0.8.3
"
inherit backports bash-completion-r1 cargo depends distutils-r1 edo git-r3 postgres toolchain-funcs
MyPN=lightning
EGIT_REPO_URI=( "https://github.com/ElementsProject/${MyPN}.git" )
EGIT_SUBMODULES=( '-*' external/gheap )
BACKPORTS=(
168ad335da3b9e321d175da1320dc10654670b82 # Makefile: use standard variables for compiling and linking C programs
d8f5abfdab0179d4eea1bd7166db8fb2650a21ad # build: move -std=gnu11 to CFLAGS
7238aa29c5b06423ddf8e9d3eebea722106f022b # Makefile: -Wl,--gc-sections goes in LDFLAGS, not LDLIBS
)
DESCRIPTION="An implementation of Bitcoin's Lightning Network in C"
HOMEPAGE="${EGIT_REPO_URI[*]%.git}"
BACKPORTS_BASE_URI="${EGIT_REPO_URI[0]%.git}/commit/"
SRC_URI="https://github.com/zserge/jsmn/archive/v1.0.0.tar.gz -> jsmn-1.0.0.tar.gz
rust? ( ${CARGO_CRATE_URIS} )
$(backports_patch_uris)
"
LICENSE="MIT BSD-2 CC0-1.0 GPL-2 LGPL-2.1 LGPL-3"
SLOT="0"
#KEYWORDS="~amd64 ~arm ~arm64 ~mips ~ppc ~x86 "
KEYWORDS=""
IUSE="debug doc +man postgres python rust sqlite test test-full"
RESTRICT="!test? ( test )"
CDEPEND="
>=dev-libs/libsecp256k1-zkp-0.1.0_pre20220318:=[ecdh,extrakeys(-),recovery,schnorrsig(-)]
>=dev-libs/libsodium-1.0.16:=
>=net-libs/libwally-core-1.5.1:0/6[elements]
|| ( >=sys-libs/libbacktrace-1.0_p20220218:= =sys-libs/libbacktrace-0.0.0_pre20220218:= )
>=sys-libs/zlib-1.2.13:=
postgres? ( ${POSTGRES_DEP} )
python? ( ${PYTHON_DEPS} )
sqlite? ( >=dev-db/sqlite-3.29.0:= )
"
PYTHON_DEPEND='
>=dev-python/base58-2.1.1[${PYTHON_USEDEP}]
>=dev-python/bitstring-4.3.0[${PYTHON_USEDEP}]
>=dev-python/coincurve-21.0.0[${PYTHON_USEDEP}]
>=dev-python/cryptography-46[${PYTHON_USEDEP}]
>=dev-python/pysocks-1[${PYTHON_USEDEP}]
'
MAKO_DEPEND='
>=dev-python/mako-1.1.6[${PYTHON_USEDEP}]
'
SPHINX_DEPEND='
dev-python/recommonmark[${PYTHON_USEDEP}]
dev-python/sphinx[${PYTHON_USEDEP}]
dev-python/sphinx-rtd-theme[${PYTHON_USEDEP}]
'
TEST_FULL_DEPEND="${PYTHON_DEPEND}"'
>=dev-python/cheroot-8[${PYTHON_USEDEP}]
>=dev-python/ephemeral-port-reserve-1.1.4[${PYTHON_USEDEP}]
>=dev-python/flask-3.0.0[${PYTHON_USEDEP}]
>=dev-python/grpcio-1.75.1[${PYTHON_USEDEP}]
>=dev-python/jsonschema-4.4.0[${PYTHON_USEDEP}]
>=dev-python/mnemonic-0.21[${PYTHON_USEDEP}]
>=dev-python/protobuf-6.32.1[${PYTHON_USEDEP}]
>=dev-python/psycopg-2.9.0:2[${PYTHON_USEDEP}]
>=dev-python/pytest-8.0.0[${PYTHON_USEDEP}]
>=dev-python/pytest-xdist-3.6.0[${PYTHON_USEDEP}]
dev-python/python-bitcointx[${PYTHON_USEDEP}]
>=dev-python/python-socketio-5.15.0[${PYTHON_USEDEP}]
>=dev-python/requests-2.32.0[${PYTHON_USEDEP}]
>=dev-python/websocket-client-1.2.3[${PYTHON_USEDEP}]
'
RDEPEND="${CDEPEND}
acct-group/lightning
acct-user/lightning
python? ( ${PYTHON_DEPEND//'${PYTHON_USEDEP}'/${PYTHON_USEDEP}} )
"
DEPEND="${CDEPEND}
"
BDEPEND="
acct-group/lightning
acct-user/lightning
>=app-misc/jq-1.6
man? ( app-text/lowdown )
$(python_gen_any_dep "${MAKO_DEPEND}")
doc? (
python? ( $(python_gen_any_dep "${SPHINX_DEPEND}") )
)
net-misc/curl[ssl]
python? (
${DISTUTILS_DEPS}
test? (
>=dev-python/pytest-7[${PYTHON_USEDEP}]
${PYTHON_DEPEND//'${PYTHON_USEDEP}'/${PYTHON_USEDEP}}
)
)
rust? (
${RUST_DEPEND}
>=dev-libs/protobuf-4[protoc(+)]
)
sys-devel/gettext
virtual/pkgconfig
test-full? (
net-p2p/bitcoin-core[cli,daemon,sqlite(+),wallet(+)]
$(PYTHON_REQ_USE='sqlite' python_gen_any_dep "${TEST_FULL_DEPEND}")
)
"
REQUIRED_USE="
|| ( postgres sqlite )
postgres? ( ${POSTGRES_REQ_USE/||/^^} )
python? ( ${PYTHON_REQUIRED_USE} )
test-full? ( test )
"
# FIXME: bundled deps: ccan
PATCHES=(
"${FILESDIR}/26.04-python-bitcointx.patch"
)
DOCS=( CHANGELOG.md README.md SECURITY.md )
EPYTEST_PLUGINS=( )
EPYTEST_DESELECT=(
# test depends on machine being "reasonably fast," which we can't guarantee
test_connection.py::test_no_delay
# these tests require Internet access, which we don't provide
test_cln_rs.py::test_bip353
test_connection.py::test_networkevents
test_currencyrate.py::test_{apis_batch{1,2},custom_source}
test_gossip.py::test_announce_{dns_suppressed,and_connect_via_dns}
)
EPYTEST_IGNORE=(
# we don't depend on any of the installers that Reckless wants
tests/test_reckless.py
)
efmt() {
: ${1:?} ; local l ; while read -r l ; do "${!#}" "${l}" ; done < <(fmt "${@:1:$#-1}")
}
re_match() {
local -n var="${1:?}" ; local regex="${2:?}" ; shift 2
var=( )
local each ; for each ; do
[[ "${each}" =~ ${regex} ]] && var+=( "${each}" )
done
(( "${#var[@]}" ))
}
python_check_deps() {
{ [[ " ${python_need} " != *' mako '* ]] || has_depends -p \
${MAKO_DEPEND//'${PYTHON_USEDEP}'/"${PYTHON_USEDEP}"} ; } &&
{ [[ " ${python_need} " != *' sphinx '* ]] || has_depends -p \
${SPHINX_DEPEND//'${PYTHON_USEDEP}'/"${PYTHON_USEDEP}"} ; } &&
{ [[ " ${python_need} " != *' test-full '* ]] || has_depends -p \
${TEST_FULL_DEPEND//'${PYTHON_USEDEP}'/"${PYTHON_USEDEP}"} ; }
}
python_foreach_subdir() {
local subdir
for subdir in "${PYTHON_SUBDIRS[@]}" ; do
pushd -- "${subdir}" >/dev/null || die
"${@}"
popd >/dev/null || die
done
}
pkg_setup() {
if use postgres ; then
postgres_pkg_setup
else
export PG_CONFIG=
fi
use test && tc-ld-disable-gold # mock magic doesn't support gold
use rust && rust_pkg_setup
}
src_unpack() {
local -a git_crates
re_match git_crates '\.gh\.tar\.gz$' ${A} && unpack "${git_crates[@]}"
git-r3_src_unpack
find "${S}/external" -depth -mindepth 1 -maxdepth 1 -type d ! -name 'gheap' -delete || die
cd "${S}/external" || die
unpack jsmn-1.0.0.tar.gz
mv jsmn{-1.0.0,} || die
if use rust ; then
set ${CRATES}
local A="${*/%/.crate}"
cargo_src_unpack
fi
}
src_prepare() {
backports_apply_patches
default
# hack to suppress tools/refresh-submodules.sh
# and spurious rebuilds due to missing lowdown sources
sed -e '/^submodcheck:/,/^$/{/^\t/d}' \
-e '/\bexternal\/lowdown\b/d' \
-i external/Makefile || die
# app-text/lowdown actually isn't required unconditionally
use man || sed -e "/check_command 'lowdown'/,/^fi$/d" -i configure || die
if ! use sqlite ; then
sed -e $'/^var=HAVE_SQLITE3/,/\\bEND\\b/{/^code=/a#error\n}' -i configure || die
# https://github.com/ElementsProject/lightning/issues/8473
rm plugins/bkpr/test/run-recorder.c || die
fi
# delete all pre-generated files; they're often stale anyway
# rm -f cln-grpc/{src/{convert,server}.rs,proto/node.proto} \
# cln-rpc/src/model.rs \
# doc/*.[0-9] || die
# we can't delete contrib/pyln-grpc-proto/pyln/grpc/{node_pb2{,_grpc},primitives_pb2}.py
# because regenerating them requires dev-python/grpcio-tools, which is a huge PITA
# only run 'install' command if there are actually files to install
# and don't unconditionally regenerate Python sources
sed -e 's/^\t\$(INSTALL_DATA) \(\$([^)]\+)\).*$/ifneq (\1,)\n\0\nendif/' \
-e '/^default:/s/\bgen\b\|\$(PYTHON_GENERATED)//g' \
-i Makefile || die
# don't assume uv is installed (or relevant!)
sed -e 's/\buv run\b//g' -i configure || die
# don't look for headers or libraries beneath /usr/local
sed -e '/"Darwin-arm64"/,/^$/d' \
-e 's/ *\(-[IL]\$(\?\(CPATH\|LIBRARY_PATH\))\? *\)\+/ /g' \
-i configure Makefile || die
# we'll strip the binaries ourselves
sed -e '/^[[:space:]]*strip[[:space:]]*=/d' -i Cargo.toml || die
sed -e '/^PLUGINS += \$(RUST_PLUGINS)$/arust-plugins : $(RUST_PLUGINS)\' \
-e '.PHONY : rust-plugins' \
-i plugins/Makefile || die
# save our SSDs! ("cp" -> "cp -l")
local shopt_pop=$(shopt -p globstar)
shopt -s globstar
sed -e 's/\bcp\b/cp -l/g' -i -- **/Makefile || die
${shopt_pop}
use python && distutils-r1_src_prepare
}
src_configure() {
local BUNDLED_LIBS="external/build-${CHOST}/libjsmn.a"
. "${FILESDIR}/compat_vars.bash"
CLIGHTNING_MAKEOPTS=(
V=1
DISTRO=Gentoo
DEFAULT_TARGETS=
COVERAGE=
DOC_DATA=
BOLTDIR="${WORKDIR}/does_not_exist"
COMPAT_CFLAGS="${COMPAT_CFLAGS[*]}"
LIBSODIUM_HEADERS=
LIBWALLY_HEADERS=
LIBSECP_HEADERS=
LIBBACKTRACE_HEADERS=
EXTERNAL_LIBS="${BUNDLED_LIBS}"
EXTERNAL_INCLUDE_FLAGS="-I external/jsmn/ -I external/gheap/ $("$(tc-getPKG_CONFIG)" --cflags libsodium wallycore libsecp256k1_zkp)"
EXTERNAL_LDLIBS="${BUNDLED_LIBS} $("$(tc-getPKG_CONFIG)" --libs libsodium wallycore libsecp256k1_zkp) -lbacktrace"
docdir="/usr/share/doc/${PF}"
)
use man || CLIGHTNING_MAKEOPTS+=(
MANPAGES=
)
use test || CLIGHTNING_MAKEOPTS+=(
ALL_TEST_PROGRAMS=
ALL_FUZZ_TARGETS=
)
use test-full || CLIGHTNING_MAKEOPTS+=(
DEVTOOLS=
)
use sqlite || CLIGHTNING_MAKEOPTS+=(
SQLITE3_CFLAGS=
SQLITE3_LDLIBS=
)
use rust && CLIGHTNING_MAKEOPTS+=(
RUST_PROFILE=release
CARGO_OPTS=--profile=release
CLN_RPC_EXAMPLES=
CLN_GRPC_EXAMPLES=
CLN_PLUGIN_EXAMPLES=
CLNREST_EXAMPLES=
)
python_need='mako' python_setup
edo ./configure \
CC="$(tc-getCC)" \
CONFIGURATOR_CC="$(tc-getBUILD_CC)" \
CFLAGS="-Wno-error ${CFLAGS}" \
$(usex debug '' CDEBUGFLAGS=) \
COPTFLAGS= \
--prefix="${EPREFIX}"/usr \
$(use_enable debug{,build}) \
--disable-compat \
--disable-valgrind \
--disable-static \
--disable-coverage \
--disable-address-sanitizer \
--disable-ub-sanitize \
--disable-fuzzing \
$(use_enable rust)
use python && distutils-r1_src_configure
use rust && cargo_src_configure
}
src_compile() {
python_need='mako' python_setup
emake "${CLIGHTNING_MAKEOPTS[@]}"
if use doc ; then
# dev-python/mkdocs is no longer supported (#971358)
if use python ; then
python_need='sphinx'
python_setup
fi
fi
use python && distutils-r1_src_compile
if use rust ; then
# these sources weren't generated above because we set DEFAULT_TARGETS=
emake "${CLIGHTNING_MAKEOPTS[@]}" cln-{,g}rpc-all
cargo_src_compile
use test && cargo_src_test --no-run
# link all the Cargo-built plugins into the plugins directory
emake "${CLIGHTNING_MAKEOPTS[@]}" rust-plugins
fi
}
python_compile() {
python_foreach_subdir python_compile_subdir
}
python_compile_subdir() {
distutils-r1_python_compile
rm -f -- "${BUILD_DIR}/install$(python_get_sitedir)/pyln"{,/spec}/{__init__.py,__pycache__/__init__.*.pyc} || die
}
python_compile_all() {
use doc && python_foreach_subdir python_compile_subdir_docs
}
python_compile_subdir_docs() {
local -a HTML_DOCS
[[ -f docs/conf.py ]] && build_sphinx docs
}
src_test() {
# disable flaky bitcoin/test/run-secret_eq_consttime
local -x SLOW_MACHINE=1
emake "${CLIGHTNING_MAKEOPTS[@]}" check-units
use python && distutils-r1_src_test
use rust && cargo_src_test
if use test-full ; then
local python_need='test-full'
python_setup
local EPYTEST_XDIST=1
# double up, as these tests are surprisingly ineffective at saturating the CPU
[[ -v EPYTEST_JOBS ]] || local -i EPYTEST_JOBS="$(makeopts_jobs)*2"
local -a pythonpath
mapfile -t pythonpath <<<"$(readlink -e -- "${PYTHON_SUBDIRS[@]}" contrib/pyln-{grpc-proto,testing})"
local -x PYTHONPATH="$(IFS=: ; printf '%s' "${pythonpath[*]}")" RUST_PROFILE=release
TEST_DIR="${T}" epytest tests
fi
}
python_test() {
epytest "${PYTHON_SUBDIRS[@]}"
}
python_install_all() {
python_foreach_subdir python_install_subdir_docs
}
python_install_subdir_docs() {
local shopt_pop=$(shopt -p nullglob)
shopt -s nullglob
local -a docs=( README* )
${shopt_pop}
docinto "${PWD##*/}"
(( ${#docs[@]} )) && dodoc "${docs[@]}"
use doc && [[ -d docs/_build/html ]] && dodoc -r docs/_build/html
}
src_install() {
emake "${CLIGHTNING_MAKEOPTS[@]}" DESTDIR="${D}" install
einstalldocs
insinto /etc/lightning
newins "${FILESDIR}/lightningd-26.04.conf" lightningd.conf
fowners :lightning /etc/lightning/lightningd.conf
fperms 0640 /etc/lightning/lightningd.conf
newinitd "${FILESDIR}/init.d-lightningd" lightningd
newconfd "${FILESDIR}/conf.d-lightningd" lightningd
newbashcomp contrib/lightning-cli.bash-completion lightning-cli
use python && distutils-r1_src_install
insinto "/etc/portage/savedconfig/${CATEGORY}"
newins compat.vars "${PN}"
}
pkg_preinst() {
if [[ -e ${EROOT%/}/etc/lightning/config && ! -e ${EROOT%/}/etc/lightning/lightningd.conf ]] ; then
elog "Moving your /etc/lightning/config to /etc/lightning/lightningd.conf"
mv --no-clobber -- "${EROOT%/}/etc/lightning/"{config,lightningd.conf}
fi
}
pkg_postinst() {
efmt -su elog <<-EOF
To use lightning-cli with the /etc/init.d/lightningd service:
- Add your user(s) to the 'lightning' group.
- Symlink ~/.lightning to /var/lib/lightning.
EOF
}