summaryrefslogblamecommitdiff
path: root/net-p2p/monero/monero-0.18.3.4.ebuild
blob: 5cf08045736f52c7c17da8fa6d1f4c8332193a5e (plain) (tree)






































































                                                                                                                                                                  




                                                                                      
                                                                       
                                                                      






























































                                                                                                                            
                                                              













                                                                



































































                                                                                                                                          
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8
PYTHON_COMPAT=( python3_{11..12} )
CMAKE_MAKEFILE_GENERATOR="emake"
inherit cmake flag-o-matic toolchain-funcs python-any-r1 systemd qmake-utils

DESCRIPTION="Secure, private, untraceable cryptocurrency"
HOMEPAGE="https://getmonero.org"

EGIT_COMMIT_EXTERNAL_TREZOR_COMMON="028c9b2e95d83b4164748a12cfdc181f0dd11920"
EGIT_COMMIT_EXTERNAL_SUPERCOP="633500ad8c8759995049ccd022107d1fa8a1bbc9"
EGIT_COMMIT_EXTERNAL_QUIRC="516d91a94d880ca1006fc1d57f318bdff8411f0d"
SRC_URI="https://github.com/monero-project/${PN}/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz
	https://github.com/trezor/trezor-common/archive/${EGIT_COMMIT_EXTERNAL_TREZOR_COMMON}.tar.gz -> trezor-common-${EGIT_COMMIT_EXTERNAL_TREZOR_COMMON}.tar.gz
	https://github.com/monero-project/supercop/archive/${EGIT_COMMIT_EXTERNAL_SUPERCOP}.tar.gz -> supercop-${EGIT_COMMIT_EXTERNAL_SUPERCOP}.tar.gz
	qt5? (
		https://github.com/monero-project/${PN}-gui/archive/refs/tags/v${PV}.tar.gz -> ${PN}-gui-${PV}.tar.gz
		https://github.com/dlbeer/quirc/archive/${EGIT_COMMIT_EXTERNAL_QUIRC}.tar.gz -> quirc-${EGIT_COMMIT_EXTERNAL_QUIRC}.tar.gz
	)"

LICENSE="NEWLIB"
SLOT="0/${PV}"
KEYWORDS="~amd64 ~arm64"
CPU_FLAGS="cpu_flags_arm_aes cpu_flags_x86_aes"
IUSE="doc qt5 nls readline smartcard ${CPU_FLAGS}"

RDEPEND="net-dns/unbound:=[threads]
	>=dev-libs/randomx-1.1.9:=
	net-libs/miniupnpc:=
	dev-libs/openssl:0
	>=dev-libs/boost-1.62:=[icu,nls]
	>=net-libs/zeromq-4.3:=[sodium]
	dev-libs/rapidjson:=
	readline? ( sys-libs/readline:= )
	smartcard? (
		>=dev-libs/hidapi-0.11.0:=
		virtual/libusb:=
		virtual/libudev:=
		dev-libs/protobuf:=
	)
	qt5? (
		dev-qt/qtconcurrent:5
		dev-qt/qtcore:5
		dev-qt/qtgui:5
		dev-qt/qtdeclarative:5
		dev-qt/qtnetwork:5
		dev-qt/qtsvg:5
		dev-qt/qtxmlpatterns:5[qml]
		dev-qt/qtwidgets:5
		dev-qt/qtmultimedia:5
		dev-qt/qtquickcontrols:5
		dev-qt/qtquickcontrols2:5
		dev-qt/qtgraphicaleffects:5
		dev-libs/libgcrypt:=
		media-fonts/fontawesome[ttf]
	)
	acct-user/monero
	acct-group/monero"
DEPEND="${RDEPEND}
	nls? ( dev-qt/linguist-tools )"
BDEPEND="${PYTHON_DEPS}
	doc? (
		media-gfx/graphviz
		app-text/doxygen
	)
	qt5? ( dev-qt/linguist-tools:5 )
	smartcard? ( $(python_gen_any_dep 'dev-python/protobuf-python[${PYTHON_USEDEP}]') )"

PATCHES_MONERO=(
	"${FILESDIR}/monero-${PV}-upnp-drop-in-tree-miniupnpc.patch"
	"${FILESDIR}/monero-${PV}-upnp-add-support-for-miniupnpc-API-version-18.patch"
	"${FILESDIR}/monero-${PV}-upnp-fix-warning.patch"
	"${FILESDIR}/monero-${PV}-use-gentoo-versioning.patch"
	"${FILESDIR}/monero-${PV}-use-gentoo-dev-libs-randomx.patch"
	"${FILESDIR}/monero-${PV}-translations-use-host-compiler.patch"
	"${FILESDIR}/monero-${PV}-build-remove-mcpu-march-mtune.patch"
)

PATCHES_MONERO_GUI=(
	"${FILESDIR}/monero-gui-${PV}-cmake-use-gentoo-versioning.patch"
)

CMAKE_BUILD_TYPE=Release

src_unpack() {
	default

	rm -rf "${S}/external/trezor-common" || die
	ln -snf "${WORKDIR}/trezor-common-${EGIT_COMMIT_EXTERNAL_TREZOR_COMMON}" "${S}/external/trezor-common" || die

	rm -rf "${S}/external/supercop" || die
	ln -snf "${WORKDIR}/supercop-${EGIT_COMMIT_EXTERNAL_SUPERCOP}" "${S}/external/supercop" || die

	if use qt5 ; then
		rm -rf "${WORKDIR}/monero-gui-${PV}/monero" || die
		ln -snf "${WORKDIR}/monero-${PV}" "${WORKDIR}/monero-gui-${PV}/monero" || die

		rm -rf "${WORKDIR}/monero-gui-${PV}/external/quirc" || die
		ln -snf "${WORKDIR}/quirc-${EGIT_COMMIT_EXTERNAL_QUIRC}" "${WORKDIR}/monero-gui-${PV}/external/quirc" || die
	fi
}

src_prepare() {
	export AR=$(tc-getAR)
	export CC=$(tc-getCC)
	export CXX=$(tc-getCXX)
	tc-export_build_env BUILD_C{C,XX}

	# Needed for lrelease
	export PATH="${PATH}:$(qt5_get_bindir)" || die

	append-cflags -DUSE_EXTRA_EC_CERT
	append-cxxflags -DUSE_EXTRA_EC_CERT

	CMAKE_USE_DIR="${WORKDIR}/monero-${PV}"
	BUILD_DIR="${WORKDIR}/monero-${PV}_build"
	pushd "${CMAKE_USE_DIR}" > /dev/null || die
	S="${CMAKE_USE_DIR}" PATCHES="${PATCHES_MONERO[@]}" cmake_src_prepare
	popd > /dev/null || die

	if use qt5 ; then
		CMAKE_USE_DIR="${WORKDIR}/monero-gui-${PV}"
		BUILD_DIR="${WORKDIR}/monero-gui-${PV}_build"
		pushd "${CMAKE_USE_DIR}" > /dev/null || die
		S="${CMAKE_USE_DIR}" PATCHES="${PATCHES_MONERO_GUI[@]}" cmake_src_prepare
		popd > /dev/null || die
	fi
}

src_configure() {
	local mycmakeargs
	local cmakeargs_monero=(
		-Wno-dev
		-DBUILD_TAG="$(tc-arch)"
		-DUSE_CCACHE=OFF
		-DPYTHON_EXECUTABLE="${PYTHON}"
		-DBUILD_DOCUMENTATION="$(usex doc ON OFF)"
		-DBUILD_TESTS=OFF
		-DUSE_READLINE="$(usex readline ON OFF)"
		-DUSE_DEVICE_TREZOR="$(usex smartcard ON OFF)"
		-DBUILD_GUI_DEPS="$(usex qt5 ON OFF)"
		-DSTACK_TRACE=OFF
		-DBUILD_SHARED_LIBS=OFF
		-DMANUAL_SUBMODULES=ON
	)

	if use cpu_flags_arm_aes || use cpu_flags_x86_aes ; then
		cmakeargs_monero+=( -DNO_AES=OFF )
	else
		cmakeargs_monero+=( -DNO_AES=ON )
	fi

	local cmakeargs_monerogui=(
		"${cmakeargs_monero[@]}"
		-DWITH_DESKTOP_ENTRY=ON
		-DWITH_SCANNER=ON
		-DWITH_UPDATER=OFF
		-DDEV_MODE=OFF
	)

	export DATABASE="lmdb"
	export DEVELOPER_LOCAL_TOOLS=0
	export DEVELOPER_LIBUNBOUND_OLD=0

	cat > "${WORKDIR}/monero-${PV}_build/translations.cmake" <<- _EOF_ || die
		SET (CMAKE_C_COMPILER "${BUILD_CC}")
		SET (CMAKE_C_FLAGS "${BUILD_CFLAGS}")
		SET (CMAKE_CXX_COMPILER "${BUILD_CXX}")
		SET (CMAKE_CXX_FLAGS "${BUILD_CXXFLAGS}")
		SET (CMAKE_EXE_LINKER_FLAGS "${BUILD_LDFLAGS}")
		SET (CMAKE_MODULE_LINKER_FLAGS "${BUILD_LDFLAGS}")
		SET (CMAKE_SHARED_LINKER_FLAGS "${BUILD_LDFLAGS}")
_EOF_

	CMAKE_USE_DIR="${WORKDIR}/monero-${PV}"
	BUILD_DIR="${WORKDIR}/monero-${PV}_build"
	mycmakeargs=( ${cmakeargs_monero[@]} )
	cmake_src_configure

	if use qt5 ; then
		mkdir -p "${WORKDIR}/monero-gui-${PV}_build/monero" || die
		cp "${WORKDIR}/monero-${PV}_build/translations.cmake" "${WORKDIR}/monero-gui-${PV}_build/monero/translations.cmake" || die

		CMAKE_USE_DIR="${WORKDIR}/monero-gui-${PV}"
		BUILD_DIR="${WORKDIR}/monero-gui-${PV}_build"
		mycmakeargs=( ${cmakeargs_monerogui[@]} )
		cmake_src_configure
	fi
}

src_compile() {
	CMAKE_USE_DIR="${WORKDIR}/monero-${PV}"
	BUILD_DIR="${WORKDIR}/monero-${PV}_build"
	cmake_src_compile

	if use qt5 ; then
		CMAKE_USE_DIR="${WORKDIR}/monero-gui-${PV}"
		BUILD_DIR="${WORKDIR}/monero-gui-${PV}_build"
		cmake_src_compile
	fi
}

src_install() {
	CMAKE_USE_DIR="${WORKDIR}/monero-${PV}"
	BUILD_DIR="${WORKDIR}/monero-${PV}_build"
	cmake_src_install

	if use qt5 ; then
		CMAKE_USE_DIR="${WORKDIR}/monero-gui-${PV}"
		BUILD_DIR="${WORKDIR}/monero-gui-${PV}_build"
		cmake_src_install
	fi

	rm -rf "${ED}/usr/include" || die
	rm -rf "${ED}/usr/lib" || die

	insinto /etc
	doins utils/conf/monerod.conf

	newinitd "${FILESDIR}/monerod.initd" monerod
	systemd_dounit utils/systemd/monerod.service
}