1PORTNAME=	codex
2DISTVERSIONPREFIX=	rust-v
3DISTVERSION=	0.131.0
4CATEGORIES=	misc devel
5
6MAINTAINER=	ports@MidnightBSD.org
7COMMENT=	Lightweight coding agent that runs in your terminal
8WWW=		https://openai.com/codex \
9		https://github.com/openai/codex
10
11LICENSE=	Apache-2.0
12LICENSE_FILE=	${WRKSRC}/LICENSE
13
14BUILD_DEPENDS=	gn:devel/gn
15LIB_DEPENDS=	libzstd.so:archivers/zstd \
16		libasound.so:audio/alsa-lib \
17		libdbus-1.so:devel/dbus \
18		libonig.so:devel/oniguruma
19RUN_DEPENDS=	bash:shells/bash \
20		rg:textproc/ripgrep
21TEST_DEPENDS=	bash:shells/bash
22
23USES=		cargo llvm:min=19 ninja:build python:test shebangfix ssl
24
25BROKEN_i386=	fails to build: rustc-LLVM ERROR: out of memory
26
27MAKE_JOBS_UNSAFE=	yes
28WITHOUT_LTO=	yes
29
30USE_GITHUB=	yes
31GH_ACCOUNT=	openai
32
33SHEBANG_FILES=	codex-rs/skills/src/assets/samples/imagegen/scripts/image_gen.py \
34		codex-rs/skills/src/assets/samples/imagegen/scripts/remove_chroma_key.py \
35		codex-rs/skills/src/assets/samples/plugin-creator/scripts/create_basic_plugin.py \
36		codex-rs/skills/src/assets/samples/skill-creator/scripts/generate_openai_yaml.py \
37		codex-rs/skills/src/assets/samples/skill-creator/scripts/init_skill.py \
38		codex-rs/skills/src/assets/samples/skill-creator/scripts/quick_validate.py \
39		codex-rs/skills/src/assets/samples/skill-installer/scripts/github_utils.py \
40		codex-rs/skills/src/assets/samples/skill-installer/scripts/install-skill-from-github.py \
41		codex-rs/skills/src/assets/samples/skill-installer/scripts/list-skills.py \
42		codex-rs/vendor/bubblewrap/demos/userns-block-fd.py \
43		codex-rs/vendor/bubblewrap/tests/test-seccomp.py \
44		codex-rs/vendor/bubblewrap/tests/use-as-subproject/assert-correct-rpath.py
45
46CARGO_CARGOTOML=	${BUILD_WRKSRC}/Cargo.toml
47CARGO_CARGOLOCK=	${BUILD_WRKSRC}/Cargo.lock
48CARGO_BUILD_ARGS=	--bin ${PORTNAME}
49CARGO_INSTALL_PATH=	codex-rs
50CODEX_TEST_ARGS=	--workspace --exclude codex-v8-poc --no-fail-fast
51CARGO_ENV=		OPENSSL_NO_VENDOR=1 \
52			CARGO_PROFILE_RELEASE_CODEGEN_UNITS=16 \
53			CARGO_PROFILE_RELEASE_LTO=false \
54			V8_FROM_SOURCE=1 \
55			GN=${LOCALBASE}/bin/gn \
56			NINJA=${NINJA_CMD} \
57			CLANG_BASE_PATH=/usr
58
59BINARY_ALIAS=	python3=${PYTHON_CMD}
60
61BUILD_WRKSRC=	${WRKSRC}/codex-rs
62
63PLIST_FILES=	bin/${PORTNAME}
64PORTDOCS=	README.md config.md
65
66OPTIONS_DEFINE=		COMPLETIONS DOCS
67OPTIONS_DEFAULT=	COMPLETIONS
68
69COMPLETIONS_DESC=	Build and/or install shell completions
70
71COMPLETIONS_PLIST_FILES=etc/bash_completion.d/${PORTNAME} \
72			share/fish/completions/${PORTNAME}.fish \
73			share/zsh/site-functions/_${PORTNAME}
74
75post-patch:
76	@${REINPLACE_CMD} -e 's|/bin/bash|${LOCALBASE}&|' \
77		${BUILD_WRKSRC}/cli/src/debug_sandbox/pid_tracker.rs \
78		${BUILD_WRKSRC}/core/src/command_canonicalization.rs \
79		${BUILD_WRKSRC}/core/src/command_canonicalization_tests.rs \
80		${BUILD_WRKSRC}/core/src/context/environment_context_tests.rs \
81		${BUILD_WRKSRC}/core/src/exec_policy.rs \
82		${BUILD_WRKSRC}/core/src/exec_policy_tests.rs \
83		${BUILD_WRKSRC}/core/src/exec_tests.rs \
84		${BUILD_WRKSRC}/core/src/shell.rs \
85		${BUILD_WRKSRC}/core/src/shell_snapshot_tests.rs \
86		${BUILD_WRKSRC}/core/src/shell_tests.rs \
87		${BUILD_WRKSRC}/core/src/tools/handlers/shell_tests.rs \
88		${BUILD_WRKSRC}/core/src/tools/handlers/unified_exec_tests.rs \
89		${BUILD_WRKSRC}/core/src/tools/runtimes/mod.rs \
90		${BUILD_WRKSRC}/core/src/tools/runtimes/mod_tests.rs \
91		${BUILD_WRKSRC}/core/tests/suite/exec.rs \
92		${BUILD_WRKSRC}/core/tests/suite/unified_exec.rs \
93		${BUILD_WRKSRC}/core/tests/suite/user_notification.rs \
94		${BUILD_WRKSRC}/exec-server/tests/file_system.rs \
95		${BUILD_WRKSRC}/shell-command/src/parse_command.rs \
96		${BUILD_WRKSRC}/shell-escalation/src/unix/escalate_server.rs \
97		${BUILD_WRKSRC}/tui/src/exec_command.rs
98	@${REINPLACE_CMD} -e 's|python3|${PYTHON_VERSION}|' \
99		${BUILD_WRKSRC}/app-server/tests/suite/v2/command_exec.rs \
100		${BUILD_WRKSRC}/app-server/tests/suite/v2/hooks_list.rs \
101		${BUILD_WRKSRC}/app-server/tests/suite/v2/thread_resume.rs \
102		${BUILD_WRKSRC}/app-server/tests/suite/v2/thread_shell_command.rs \
103		${BUILD_WRKSRC}/app-server/tests/suite/v2/turn_interrupt.rs \
104		${BUILD_WRKSRC}/app-server/tests/suite/v2/turn_start.rs \
105		${BUILD_WRKSRC}/app-server/tests/suite/v2/turn_start_zsh_fork.rs \
106		${BUILD_WRKSRC}/config/src/config_requirements.rs \
107		${BUILD_WRKSRC}/config/src/hooks_tests.rs \
108		${BUILD_WRKSRC}/core-skills/src/invocation_utils.rs \
109		${BUILD_WRKSRC}/core-skills/src/invocation_utils_tests.rs \
110		${BUILD_WRKSRC}/core/src/command_canonicalization_tests.rs \
111		${BUILD_WRKSRC}/core/src/config/config_loader_tests.rs \
112		${BUILD_WRKSRC}/core/src/exec_policy.rs \
113		${BUILD_WRKSRC}/core/src/exec_policy_tests.rs \
114		${BUILD_WRKSRC}/core/src/mcp_tool_call_tests.rs \
115		${BUILD_WRKSRC}/core/src/session/tests.rs \
116		${BUILD_WRKSRC}/core/tests/suite/approvals.rs \
117		${BUILD_WRKSRC}/core/tests/suite/compact.rs \
118		${BUILD_WRKSRC}/core/tests/suite/compact_remote_parity.rs \
119		${BUILD_WRKSRC}/core/tests/suite/exec.rs \
120		${BUILD_WRKSRC}/core/tests/suite/hooks.rs \
121		${BUILD_WRKSRC}/core/tests/suite/hooks_mcp.rs \
122		${BUILD_WRKSRC}/core/tests/suite/openai_file_mcp.rs \
123		${BUILD_WRKSRC}/core/tests/suite/tools.rs \
124		${BUILD_WRKSRC}/core/tests/suite/unified_exec.rs \
125		${BUILD_WRKSRC}/exec-server/tests/exec_process.rs \
126		${BUILD_WRKSRC}/exec/tests/suite/sandbox.rs \
127		${BUILD_WRKSRC}/execpolicy/tests/basic.rs \
128		${BUILD_WRKSRC}/external-agent-migration/src/lib.rs \
129		${BUILD_WRKSRC}/hooks/src/engine/mod_tests.rs \
130		${BUILD_WRKSRC}/hooks/src/events/compact.rs \
131		${BUILD_WRKSRC}/hooks/src/events/post_tool_use.rs \
132		${BUILD_WRKSRC}/linux-sandbox/tests/suite/landlock.rs \
133		${BUILD_WRKSRC}/linux-sandbox/tests/suite/managed_proxy.rs \
134		${BUILD_WRKSRC}/shell-command/src/bash.rs \
135		${BUILD_WRKSRC}/shell-command/src/command_safety/is_safe_command.rs \
136		${BUILD_WRKSRC}/tui/src/app/tests.rs \
137		${BUILD_WRKSRC}/tui/src/chatwidget/tests/app_server.rs \
138		${BUILD_WRKSRC}/tui/src/chatwidget/tests/approval_requests.rs \
139		${BUILD_WRKSRC}/tui/src/chatwidget/tests/exec_flow.rs \
140		${BUILD_WRKSRC}/tui/src/debug_config.rs \
141		${BUILD_WRKSRC}/tui/src/exec_command.rs \
142		${BUILD_WRKSRC}/tui/src/render/highlight.rs \
143		${BUILD_WRKSRC}/utils/pty/src/tests.rs
144
145post-build-COMPLETIONS-on:
146	@${MKDIR} ${WRKSRC}/completions
147.for sh in bash fish zsh
148	${CARGO_TARGET_DIR}/*/*/${PORTNAME} completion ${sh} > \
149		${WRKSRC}/completions/${PORTNAME}.${sh}
150.endfor
151
152do-install:
153	${INSTALL_PROGRAM} ${CARGO_TARGET_DIR}/*/*/${PORTNAME} \
154		${PREFIX}/bin
155
156do-install-COMPLETIONS-on:
157	@${MKDIR} ${FAKE_DESTDIR}${PREFIX}/etc/bash_completion.d \
158		${FAKE_DESTDIR}${PREFIX}/share/fish/completions \
159		${FAKE_DESTDIR}${PREFIX}/share/zsh/site-functions
160	${INSTALL_DATA} ${WRKSRC}/completions/${PORTNAME}.bash \
161		${FAKE_DESTDIR}${PREFIX}/etc/bash_completion.d/${PORTNAME}
162	${INSTALL_DATA} ${WRKSRC}/completions/${PORTNAME}.fish \
163		${FAKE_DESTDIR}${PREFIX}/share/fish/completions/${PORTNAME}.fish
164	${INSTALL_DATA} ${WRKSRC}/completions/${PORTNAME}.zsh \
165		${FAKE_DESTDIR}${PREFIX}/share/zsh/site-functions/_${PORTNAME}
166
167do-install-DOCS-on:
168	@${MKDIR} ${FAKE_DESTDIR}${DOCSDIR}
169	${INSTALL_MAN} ${PORTDOCS:S|^|${BUILD_WRKSRC}/|} ${FAKE_DESTDIR}${DOCSDIR}
170
171do-test:
172	@${CARGO_CARGO_RUN} test \
173		--manifest-path ${CARGO_CARGOTOML} \
174		--verbose \
175		--verbose \
176		--profile ci-test \
177		${CODEX_TEST_ARGS}
178
179.include <bsd.port.mk>
180