# 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.87.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.102 arbitrary-1.4.2 arc-swap-1.9.1 arrayvec-0.7.6 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.100 base64-0.21.7 base64-0.22.1 bech32-0.11.1 bitcoin-0.32.100 bitcoin-io-0.1.100 bitcoin-payment-instructions-0.5.1 bitcoin-units-0.1.100 bitcoin_hashes-0.14.100 bitflags-1.3.2 bitflags-2.11.1 block-buffer-0.10.4 bumpalo-3.20.3 bytes-1.11.1 cc-1.2.63 cfg-if-1.0.4 chacha20-0.10.0 chrono-0.4.44 colorchoice-1.0.5 combine-4.6.7 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 data-encoding-2.11.0 der-parser-10.0.0 deranged-0.5.8 derive_arbitrary-1.4.2 digest-0.10.7 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-1.0.1 env_logger-0.11.10 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.0 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.2 h2-0.3.27 h2-0.4.14 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_lit-0.1.1 http-0.2.12 http-1.4.1 http-body-0.4.6 http-body-1.0.1 http-body-util-0.1.3 httparse-1.10.1 httpdate-1.0.3 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 id-arena-2.3.0 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.28 jiff-static-0.2.28 jni-0.22.4 jni-macros-0.22.4 jni-sys-0.4.1 jni-sys-macros-0.4.1 js-sys-0.3.99 lazy_static-1.5.0 leb128fmt-0.1.0 libc-0.2.186 libm-0.2.16 lightning-0.1.8 lightning-invoice-0.33.2 lightning-types-0.2.0 linux-raw-sys-0.12.1 litemap-0.8.2 lock_api-0.4.14 log-0.4.30 log-panics-2.1.0 loom-0.5.6 matchers-0.2.0 matchit-0.8.4 matchit-0.9.2 memchr-2.8.1 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.6 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.0 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.3 prost-build-0.14.3 prost-derive-0.14.3 prost-types-0.14.3 pulldown-cmark-0.13.4 pulldown-cmark-to-cmark-22.0.0 quick-xml-0.39.4 quote-1.0.45 r-efi-5.3.0 r-efi-6.0.0 rand-0.9.4 rand-0.10.1 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.12.3 regex-automata-0.4.14 regex-syntax-0.8.10 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.11.0 rust-embed-impl-8.11.0 rust-embed-utils-8.11.0 rustc_version-0.4.1 rusticata-macros-4.1.0 rustix-1.1.4 rustls-0.21.12 rustls-0.23.40 rustls-native-certs-0.8.3 rustls-pemfile-1.0.4 rustls-pki-types-1.14.1 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.22 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.6 sha2-0.10.9 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.1 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.117 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.9 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.29.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-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.29.0 typenum-1.20.1 unicase-2.9.0 unicode-ident-1.0.24 unicode-xid-0.2.6 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 wasip3-0.4.0+wasi-0.3.0-rc-2026-01-06 wasm-bindgen-0.2.122 wasm-bindgen-futures-0.4.72 wasm-bindgen-macro-0.2.122 wasm-bindgen-macro-support-0.2.122 wasm-bindgen-shared-0.2.122 wasm-encoder-0.244.0 wasm-metadata-0.244.0 wasmparser-0.244.0 web-sys-0.3.99 webpki-root-certs-1.0.7 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 wit-bindgen-0.51.0 wit-bindgen-core-0.51.0 wit-bindgen-rust-0.51.0 wit-bindgen-rust-macro-0.51.0 wit-component-0.244.0 wit-parser-0.244.0 writeable-0.6.3 x509-parser-0.18.1 yasna-0.5.2 yoke-0.8.2 yoke-derive-0.8.2 zerocopy-0.8.50 zerocopy-derive-0.8.50 zerofrom-0.1.8 zerofrom-derive-0.1.7 zeroize-1.8.2 zerotrie-0.2.4 zerovec-0.11.6 zerovec-derive-0.11.3 zip-3.0.0 zlib-rs-0.6.3 zmij-1.0.21 zopfli-0.8.3 " inherit backports bash-completion-r1 cargo depends distutils-r1 eapi9-ver edo flag-o-matic postgres toolchain-funcs MyPN=lightning MyPV=${PV/_} MyPVR=${MyPV}-gentoo-${PR} BACKPORTS=( 37519064790d8cd14c97335b6792552d760f2b81 # tests/fuzz/fuzz-open_channel: fix bad local variable access after longjmp (#9165) # https://github.com/ElementsProject/lightning/pull/8933/commits a4ddf101628753087ccb4b105e49d668237d4c1d # configure: don't use 'echo -n' under /bin/sh 5e71c6736857861c643cc7ed6c5d3f5679033a80 # configure: be consistent in writing status output to stderr f5d2d065b3173204ab7d690afda3bc9d712f7358 # configure: fix quoting mistake in setting DEFAULT_CWARNFLAGS in usage() 268d00205897cfe4311a28f9c8f78ced00340abe # Makefile: don't show config.vars on the LD line in show-flags 9536b35e8832c68d8c65b6000105b45c7512c7b8 # build: allow overriding CFLAGS, CPPFLAGS, and LDFLAGS bea9de1db477aea210f36fced8a0a92272e28cb5 # Makefile: use standard variables for compiling and linking C programs a479dbdc3bed6f0c3fdd368e3405e3dd5ddfb91a # build: move -std=gnu11 to CPPFLAGS 901eaa1d67cd9399ba396b527c0518ecc9e1e8a5 # configure: fix have_function_sections test d47beba835cb81e9bd898f915bb3d2b3564a1b98 # build: manage installation targets with Make individually 7188e8797c84bf306f9349ff25e473f14c65d534 # configure: allow overriding library flags via environment vars ) DESCRIPTION="An implementation of Bitcoin's Lightning Network in C" HOMEPAGE="https://github.com/ElementsProject/${MyPN}" BACKPORTS_BASE_URI="${HOMEPAGE}/commit/" SRC_URI="${HOMEPAGE}/archive/refs/tags/v${MyPV}.tar.gz -> ${P}.tar.gz https://github.com/zserge/jsmn/archive/v1.0.0.tar.gz -> jsmn-1.0.0.tar.gz https://github.com/valyala/gheap/archive/67fc83bc953324f4759e52951921d730d7e65099.tar.gz -> gheap-67fc83b.tar.gz rust? ( ${CARGO_CRATE_URIS} ) $(backports_patch_uris) " S="${WORKDIR}/${MyPN}-${MyPV}" LICENSE="MIT BSD-2 CC0-1.0 GPL-2 LGPL-2.1 LGPL-3" SLOT="0" if [[ "${PV}" != *_rc* ]] ; then KEYWORDS="~amd64 ~arm ~arm64 ~mips ~ppc ~x86" fi IUSE="debug doc +man postgres python rust sqlite test test-full" RESTRICT="mirror !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}") ) ) 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-28.0[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_pretend() { if [[ ! "${REPLACE_RUNNING_CLIGHTNING}" ]] && [[ -x "${EROOT%/}/usr/bin/lightningd" ]] && { has_version "<${CATEGORY}/${PN}-$(ver_cut 1-3)" || has_version ">=${CATEGORY}/${PN}-$(ver_cut 1-2).$(($(ver_cut 3)+1))" ; } && [[ "$(find /proc/[0-9]*/exe -xtype f -lname "${EROOT%/}/usr/bin/lightningd*" -print -quit 2>/dev/null)" || -x "${EROOT%/}/run/openrc/started/lightningd" ]] then efmt eerror <<-EOF A potentially incompatible version of the lightningd daemon is currently running. Installing version ${PV} would likely cause the running daemon to fail when it next spawns a subdaemon process. Please stop the running daemon and reattempt this installation, or set REPLACE_RUNNING_CLIGHTNING=1 if you are certain you know what you are doing. EOF die 'lightningd is running' fi } pkg_setup() { use postgres && postgres_pkg_setup 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 "${P}.tar.gz" "${git_crates[@]}" cd "${S}/external" || die rm -r */ || die unpack jsmn-1.0.0.tar.gz gheap-67fc83b.tar.gz mv jsmn{-1.0.0,} || die mv gheap{-*,} || 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 # https://github.com/ElementsProject/lightning/issues/8473 rm plugins/bkpr/test/run-recorder.c || die fi # don't unconditionally regenerate Python sources # and don't try to run git sed -e '/^default:/s/\bgen\b\|\$(PYTHON_GENERATED)//g' \ -e '/^check-source-bolt\s*:/d' \ -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 # our VERSION="${MyPVR}" confuses is_released_version() [[ ${PV} != *([.[:digit:]]) ]] || sed -ne '/^bool is_released_version(void)/{a { return true; } p;:x;n;/^}$/d;bx};p' -i common/version.c || 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} # don't require running in a Git worktree rm conftest.py || die use python && distutils-r1_src_prepare } src_configure() { local BUNDLED_LIBS="external/build-${CHOST}/libjsmn.a" . "${FILESDIR}/compat_vars.bash" CLIGHTNING_MAKEOPTS=( V=1 VERSION="${MyPVR}" 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 postgres || local -x POSTGRES_INCLUDE= POSTGRES_LDLIBS= use sqlite || local -x 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= ) use debug && append-cflags -Wno-error python_need='mako' python_setup local -x PYTEST="${PYTHON} -m pytest" # avoid calling uv edo ./configure \ CC="$(tc-getCC)" \ CONFIGURATOR_CC="$(tc-getBUILD_CC)" \ $(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.06.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 if ver_replacing -lt 25.05 ; then efmt ewarn <<-EOF Due to experimental protocol upgrades, --experimental-splicing is incompatible with previous CLN versions. You will not be able to reestablish channels with older nodes at all if this is enabled! If you have CLN peers with the experimental splicing feature, consider disabling this option until they upgrade to support the latest draft spec. EOF fi }