# Copyright 2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit savedconfig xdg-utils cargo
#`cargo.eclass` 包含一个关键函数 `cargo_gen_config`,它会在构建过程中被调用。这个函数的作用是:
#1. **检查系统环境中是否已经存在可用的、版本足够的 `rustc` 和 `cargo`**。
#2. 如果存在,就生成一个指向系统现有工具链的 Cargo 配置文件(通常在 `~/.cargo/config.toml`),并**直接使用它**。
#3. 如果不存在,或者版本太旧,它才会**回退到使用通过 `BDEPEND` 声明的 Gentoo 包**(如 `virtual/rust`)。
#这意味着,只要用户系统里有任何可用的 Rust(无论是 Gentoo 安装的还是 `rustup` 安装的),`cargo.eclass` 都会优先使用它。
if [[ ${PV} == *9999 ]]; then
EGIT_REPO_URI="https://gitee.com/guyuming76/rfm"
inherit git-r3
fi
DESCRIPTION="suckless style file manager"
HOMEPAGE="https://gitee.com/guyuming76/rfm/"
LICENSE="GPL-3"
SLOT="0"
IUSE="+debug +wayland +git +locate +reedline"
REQUIRED_USE="debug"
EGIT_SUBMODULES=()
BDEPEND="
virtual/pkgconfig
x11-libs/gtk+:3[wayland?]
app-text/cmark
sys-libs/readline
dev-libs/json-glib
reedline? ( || (
dev-lang/rust
dev-lang/rust-bin
)
)
"
RDEPEND="
>=dev-libs/glib-2.74
locate? ( || (
sys-apps/plocate
sys-apps/mlocate
)
)
git? (
dev-vcs/git
)
"
#x11-misc/xdg-utils
#dev-util/desktop-file-utils
export CalledByEbuild="YES"
src_unpack() {
git-r3_src_unpack
if use reedline; then
S="${S}/reedline_wrapper" cargo_live_src_unpack
fi
}
src_prepare() {
restore_config config.h
default
}
src_configure() {
#cargo_gen_config
sed -i "s:/local::g" config.mk || die
if ! use git; then
sed -i "s:-DGitIntegration::g" config.mk || die
fi
if ! use reedline; then
sed -i "s:-Dreedline:-DGNU_readline:g" config.mk || die
fi
# Are there any better way to check language setting?
if [[ -z "$(locale | grep -i zh_CN)" ]]; then
sed -i "s:Chinese.h:English.h:g" config.mk || die
fi
}
src_compile() {
# 如果使用 reedline,先构建 Rust 部分
if use reedline; then
pushd reedline_wrapper >/dev/null || die
#需版本号环境变量,build.rs中用来建立符号链接
RFM_VERSION="${VERSION}" cargo_src_compile
popd >/dev/null || die
pushd rfmReedline >/dev/null || die
cargo_src_compile
popd >/dev/null || die
fi
# 然后构建 C 部分
emake
}
src_install() {
default
save_config config.h
insinto /usr/share/icons/hicolor/scalable/apps
doins rfm.svg
insinto /usr/share/applications
doins rfm.desktop
insinto /usr/include
doins rfm_addon.h
#xdg-mime default rfm.desktop inode/directory
}
pkg_postinst() {
gtk-update-icon-cache -f /usr/share/icons/hicolor
xdg_desktop_database_update
xdg_mimeinfo_database_update
#after install run xdg-mime query default inode/directory to check, rfm.desktop should be returned
#update-desktop-database
}
pkg_postrm() {
gtk-update-icon-cache -f /usr/share/icons/hicolor
xdg_desktop_database_update
xdg_mimeinfo_database_update
#after install run xdg-mime query default inode/directory to check, rfm.desktop should NOT be returned
#update-desktop-database
}