From 93fc514763864910b3aa3f5d2c3465e8aeaf456d Mon Sep 17 00:00:00 2001 From: John Turner Date: Thu, 11 Dec 2025 01:55:26 +0000 Subject: [PATCH] read eapi file in profiles --- src/repo/profile/mod.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/repo/profile/mod.rs b/src/repo/profile/mod.rs index 3edd170..edbc880 100644 --- a/src/repo/profile/mod.rs +++ b/src/repo/profile/mod.rs @@ -8,7 +8,7 @@ use std::{ use get::Get; use itertools::Itertools; -use crate::{atom::Atom, useflag::UseFlag}; +use crate::{Parseable, atom::Atom, repo::ebuild::Eapi, useflag::UseFlag}; mod make_defaults; mod package; @@ -43,12 +43,15 @@ pub enum Error { PackageUse(#[from] package_use::Error), #[error("error evaluating use settings: {0}")] Use(#[from] useflags::Error), + #[error("parser error: {0}")] + Parser(String), } #[derive(Debug, Clone, Get)] pub struct Profile { #[get(kind = "deref")] path: PathBuf, + eapi: Option, #[get(kind = "deref")] parents: Vec, make_defaults: HashMap, @@ -87,6 +90,16 @@ impl Profile { Err(e) => return Err(Error::Io(parents_path, e)), }; + let eapi_path = path.as_ref().join("eapi"); + let eapi = match fs::read_to_string(&eapi_path) + .map(|s| Eapi::parse(s.trim()).map_err(str::to_string)) + { + Ok(Ok(eapi)) => Some(eapi), + Ok(Err(rest)) => return Err(Error::Parser(rest)), + Err(e) if matches!(e.kind(), io::ErrorKind::NotFound) => None, + Err(e) => return Err(Error::Io(eapi_path, e)), + }; + let make_defaults = make_defaults::evaluate(&parents, &path)?; let packages = packages::evaluate(&parents, &path)?; @@ -110,6 +123,7 @@ impl Profile { Ok(Self { path: path.as_ref().to_path_buf(), parents, + eapi, make_defaults, packages, package_mask,