# Copyright 2025-2026 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 CRATES=" " declare -A GIT_CRATES=( [crossterm]='https://github.com/nornagon/crossterm;87db8bfa6dc99427fd3b071681b07fc31c6ce995;crossterm-%commit%' [nucleo-matcher]='https://github.com/helix-editor/nucleo;4253de9faabb4e5c6d81d946a5e35a90f87347ee;nucleo-%commit%/matcher' [nucleo]='https://github.com/helix-editor/nucleo;4253de9faabb4e5c6d81d946a5e35a90f87347ee;nucleo-%commit%' [ratatui]='https://github.com/nornagon/ratatui;9b2ad1298408c45918ee9f8241a6f95498cdbed2;ratatui-%commit%' [runfiles]='https://github.com/dzbarsky/rules_rust;b56cbaa8465e74127f1ea216f813cd377295ad81;rules_rust-%commit%/rust/runfiles' [tokio-tungstenite]='https://github.com/JakkuSakura/tokio-tungstenite;2ae536b0de793f3ddf31fc2f22d445bf1ef2023d;tokio-tungstenite-%commit%' [tungstenite]='https://github.com/JakkuSakura/tungstenite-rs;f514de8644821113e5d18a027d6d28a5c8cc0a6e;tungstenite-rs-%commit%' ) RUST_MIN_VER="1.91.0" inherit cargo DESCRIPTION="Codex CLI - OpenAI's AI-powered coding agent" HOMEPAGE="https://github.com/openai/codex" SRC_URI=" https://github.com/openai/${PN}/archive/rust-v${PV}.tar.gz -> ${P}.tar.gz https://github.com/gentoo-zh-drafts/codex/releases/download/rust-v${PV}/codex-rust-v${PV}-crates.tar.xz ${CARGO_CRATE_URIS} " S="${WORKDIR}/${PN}-rust-v${PV}/codex-rs" LICENSE="Apache-2.0" # Dependent crate licenses LICENSE+=" Apache-2.0 BSD-2 BSD Boost-1.0 CC0-1.0 CDLA-Permissive-2.0 ISC MIT MPL-2.0 Unicode-3.0 ZLIB " SLOT="0" KEYWORDS="~amd64 ~arm64" # Tests fail due to ring crate conflicts with system OpenSSL RESTRICT="test" DEPEND=" dev-libs/openssl:= sys-apps/dbus " RDEPEND="${DEPEND}" BDEPEND="virtual/pkgconfig" # rust does not use *FLAGS from make.conf, silence portage warning QA_FLAGS_IGNORED="usr/bin/${PN}" gen_git_crate_dir() { # https://github.com/gentoo/gentoo/blob/b09dd88412fe2d5eee5a8891e08bfa2d67848da3/eclass/cargo.eclass#L442 IFS=';' read -r crate_uri commit crate_dir <<<"${GIT_CRATES[$1]}" echo "${WORKDIR}/${crate_dir//%commit%/${commit}}" } src_prepare() { default # Fix tokio-tungstenite's ssh git dependency on tungstenite sed -i '/^\[dependencies\.tungstenite\]/,/^$/{ s|git = "ssh://git@github.com/JakkuSakura/tungstenite-rs.git"|path = "'"$(gen_git_crate_dir tungstenite)"'"| /^branch = /d }' "$(gen_git_crate_dir tokio-tungstenite)/Cargo.toml" || die # Remove the [patch.crates-io] section and add path-based patches sed -i '/^\[patch\.crates-io\]/,/^$/d' "${S}/Cargo.toml" || die sed -i '/^\[patch\."ssh:\/\/git@github\.com/,/^$/d' "${S}/Cargo.toml" || die # Add new patch section with local paths cat >> "${S}/Cargo.toml" <<-EOF || die [patch.crates-io] crossterm = { path = "$(gen_git_crate_dir crossterm)" } ratatui = { path = "$(gen_git_crate_dir ratatui)" } tokio-tungstenite = { path = "$(gen_git_crate_dir tokio-tungstenite)" } tungstenite = { path = "$(gen_git_crate_dir tungstenite)" } EOF } src_compile() { cargo_src_compile --package codex-cli } src_install() { dobin "$(cargo_target_dir)/codex" einstalldocs }