PORTNAME=	colibri
DISTVERSIONPREFIX=	v
DISTVERSION=	0.11.0
CATEGORIES=	sysutils

MAINTAINER=	hello@clawdie.si
COMMENT=	Clawdie Colibri control plane (agent supervision, tasks, skills)
WWW=		https://code.smilepowered.org/clawdie/colibri

LICENSE=	MIT
LICENSE_FILE=	${WRKSRC}/LICENSE

USES=		cargo

# Source tarball from the Clawdie Forgejo. A tagged release is required: the
# archive at archive/v${DISTVERSION}.tar.gz extracts to colibri/.
MASTER_SITES=	https://code.smilepowered.org/clawdie/colibri/archive/
DISTFILES=	${DISTVERSIONFULL}${EXTRACT_SUFX}
WRKSRC=		${WRKDIR}/colibri

# CARGO_CRATES — the crates.io dependency closure, generated from Cargo.lock.
# Regenerate after any dependency change and verify it stays in sync:
#   make cargo-crates                              # on a FreeBSD build host
#   packaging/freebsd/port/check-cargo-crates.sh   # drift check (any host, CI)
# distinfo (source tarball + crate checksums) is produced separately by
# `make makesum` on the build host.
CARGO_CRATES=	ahash-0.8.12 \
			aho-corasick-1.1.4 \
			allocator-api2-0.2.21 \
			android_system_properties-0.1.5 \
			anstream-1.0.0 \
			anstyle-1.0.14 \
			anstyle-parse-1.0.0 \
			anstyle-query-1.1.5 \
			anstyle-wincon-3.0.11 \
			anyhow-1.0.102 \
			atomic-0.6.1 \
			atomic-waker-1.1.2 \
			autocfg-1.5.1 \
			backon-1.6.0 \
			base64-0.22.1 \
			bit-set-0.5.3 \
			bit-vec-0.6.3 \
			bitflags-1.3.2 \
			bitflags-2.11.1 \
			block-buffer-0.10.4 \
			bumpalo-3.20.3 \
			bytemuck-1.25.0 \
			bytes-1.11.1 \
			castaway-0.2.4 \
			cc-1.2.62 \
			cfg-if-1.0.4 \
			cfg_aliases-0.1.1 \
			cfg_aliases-0.2.1 \
			chrono-0.4.44 \
			clap-4.6.1 \
			clap_builder-4.6.0 \
			clap_derive-4.6.1 \
			clap_lex-1.1.0 \
			colorchoice-1.0.5 \
			compact_str-0.9.1 \
			convert_case-0.10.0 \
			core-foundation-sys-0.8.7 \
			cpufeatures-0.2.17 \
			crossbeam-utils-0.8.21 \
			crossterm-0.29.0 \
			crossterm_winapi-0.9.1 \
			crypto-common-0.1.7 \
			csscolorparser-0.6.2 \
			darling-0.23.0 \
			darling_core-0.23.0 \
			darling_macro-0.23.0 \
			dashmap-6.2.1 \
			deltae-0.3.2 \
			deranged-0.5.8 \
			derive_more-2.1.1 \
			derive_more-impl-2.1.1 \
			digest-0.10.7 \
			displaydoc-0.2.5 \
			document-features-0.2.12 \
			dotenvy-0.15.7 \
			downcast-rs-1.2.1 \
			either-1.16.0 \
			equivalent-1.0.2 \
			errno-0.3.14 \
			euclid-0.22.14 \
			fallible-iterator-0.3.0 \
			fallible-streaming-iterator-0.1.9 \
			fancy-regex-0.11.0 \
			fastrand-2.4.1 \
			filedescriptor-0.8.3 \
			find-msvc-tools-0.1.9 \
			finl_unicode-1.4.0 \
			fixedbitset-0.4.2 \
			fnv-1.0.7 \
			foldhash-0.1.5 \
			foldhash-0.2.0 \
			form_urlencoded-1.2.2 \
			futures-channel-0.3.32 \
			futures-core-0.3.32 \
			futures-sink-0.3.32 \
			futures-task-0.3.32 \
			futures-util-0.3.32 \
			generic-array-0.14.7 \
			getrandom-0.2.17 \
			getrandom-0.3.4 \
			getrandom-0.4.2 \
			gloo-timers-0.3.0 \
			hashbrown-0.14.5 \
			hashbrown-0.15.5 \
			hashbrown-0.16.1 \
			hashbrown-0.17.1 \
			hashlink-0.9.1 \
			heck-0.5.0 \
			hex-0.4.3 \
			http-1.4.1 \
			http-body-1.0.1 \
			http-body-util-0.1.3 \
			httparse-1.10.1 \
			hyper-1.9.0 \
			hyper-rustls-0.27.9 \
			hyper-util-0.1.20 \
			iana-time-zone-0.1.65 \
			iana-time-zone-haiku-0.1.2 \
			icu_collections-2.2.0 \
			icu_locale_core-2.2.0 \
			icu_normalizer-2.2.0 \
			icu_normalizer_data-2.2.0 \
			icu_properties-2.2.0 \
			icu_properties_data-2.2.0 \
			icu_provider-2.2.0 \
			id-arena-2.3.0 \
			ident_case-1.0.1 \
			idna-1.1.0 \
			idna_adapter-1.2.2 \
			indexmap-2.14.0 \
			indoc-2.0.7 \
			instability-0.3.12 \
			ipnet-2.12.0 \
			is_terminal_polyfill-1.70.2 \
			itertools-0.14.0 \
			itoa-1.0.18 \
			js-sys-0.3.99 \
			kasuari-0.4.12 \
			lab-0.11.0 \
			lazy_static-1.5.0 \
			leb128fmt-0.1.0 \
			libc-0.2.186 \
			libsqlite3-sys-0.28.0 \
			line-clipping-0.3.7 \
			linux-raw-sys-0.12.1 \
			litemap-0.8.2 \
			litrs-1.0.0 \
			lock_api-0.4.14 \
			log-0.4.30 \
			lru-0.16.4 \
			lru-slab-0.1.2 \
			mac_address-1.1.8 \
			matchers-0.2.0 \
			memchr-2.8.0 \
			memmem-0.1.1 \
			memoffset-0.9.1 \
			minimal-lexical-0.2.1 \
			mio-1.2.0 \
			nix-0.28.0 \
			nix-0.29.0 \
			nom-7.1.3 \
			nu-ansi-term-0.50.3 \
			num-conv-0.2.2 \
			num-derive-0.4.2 \
			num-traits-0.2.19 \
			num_threads-0.1.7 \
			once_cell-1.21.4 \
			once_cell_polyfill-1.70.2 \
			ordered-float-4.6.0 \
			parking_lot-0.12.5 \
			parking_lot_core-0.9.12 \
			percent-encoding-2.3.2 \
			pest-2.8.6 \
			pest_derive-2.8.6 \
			pest_generator-2.8.6 \
			pest_meta-2.8.6 \
			phf-0.11.3 \
			phf_codegen-0.11.3 \
			phf_generator-0.11.3 \
			phf_macros-0.11.3 \
			phf_shared-0.11.3 \
			pin-project-lite-0.2.17 \
			pkg-config-0.3.33 \
			portable-atomic-1.13.1 \
			portable-pty-0.9.0 \
			potential_utf-0.1.5 \
			powerfmt-0.2.0 \
			ppv-lite86-0.2.21 \
			prettyplease-0.2.37 \
			proc-macro2-1.0.106 \
			quinn-0.11.9 \
			quinn-proto-0.11.14 \
			quinn-udp-0.5.14 \
			quote-1.0.45 \
			r-efi-5.3.0 \
			r-efi-6.0.0 \
			rand-0.8.6 \
			rand-0.9.4 \
			rand_chacha-0.9.0 \
			rand_core-0.6.4 \
			rand_core-0.9.5 \
			ratatui-0.30.0 \
			ratatui-core-0.1.0 \
			ratatui-crossterm-0.1.0 \
			ratatui-macros-0.7.0 \
			ratatui-termwiz-0.1.0 \
			ratatui-widgets-0.3.0 \
			redox_syscall-0.5.18 \
			regex-1.12.3 \
			regex-automata-0.4.14 \
			regex-syntax-0.8.10 \
			reqwest-0.12.28 \
			ring-0.17.14 \
			rusqlite-0.31.0 \
			rustc-hash-2.1.2 \
			rustc_version-0.4.1 \
			rustix-1.1.4 \
			rustls-0.23.40 \
			rustls-pki-types-1.14.1 \
			rustls-webpki-0.103.13 \
			rustversion-1.0.22 \
			ryu-1.0.23 \
			scopeguard-1.2.0 \
			semver-1.0.28 \
			serde-1.0.228 \
			serde_core-1.0.228 \
			serde_derive-1.0.228 \
			serde_json-1.0.150 \
			serde_urlencoded-0.7.1 \
			serial2-0.2.37 \
			sha2-0.10.9 \
			sharded-slab-0.1.7 \
			shared_library-0.1.9 \
			shell-words-1.1.1 \
			shlex-1.3.0 \
			signal-hook-0.3.18 \
			signal-hook-mio-0.2.5 \
			signal-hook-registry-1.4.8 \
			siphasher-1.0.3 \
			slab-0.4.12 \
			smallvec-1.15.1 \
			socket2-0.6.3 \
			stable_deref_trait-1.2.1 \
			static_assertions-1.1.0 \
			strsim-0.11.1 \
			strum-0.27.2 \
			strum_macros-0.27.2 \
			subtle-2.6.1 \
			syn-1.0.109 \
			syn-2.0.117 \
			sync_wrapper-1.0.2 \
			synstructure-0.13.2 \
			terminfo-0.9.0 \
			termios-0.3.3 \
			termwiz-0.23.3 \
			thiserror-1.0.69 \
			thiserror-2.0.18 \
			thiserror-impl-1.0.69 \
			thiserror-impl-2.0.18 \
			thread_local-1.1.9 \
			time-0.3.47 \
			time-core-0.1.8 \
			tinystr-0.8.3 \
			tinyvec-1.11.0 \
			tinyvec_macros-0.1.1 \
			tokio-1.52.3 \
			tokio-macros-2.7.0 \
			tokio-rustls-0.26.4 \
			tokio-util-0.7.18 \
			tower-0.5.3 \
			tower-http-0.6.11 \
			tower-layer-0.3.3 \
			tower-service-0.3.3 \
			tracing-0.1.44 \
			tracing-attributes-0.1.31 \
			tracing-core-0.1.36 \
			tracing-log-0.2.0 \
			tracing-subscriber-0.3.23 \
			try-lock-0.2.5 \
			typenum-1.20.0 \
			ucd-trie-0.1.7 \
			unicode-ident-1.0.24 \
			unicode-segmentation-1.13.2 \
			unicode-truncate-2.0.1 \
			unicode-width-0.2.2 \
			unicode-xid-0.2.6 \
			untrusted-0.9.0 \
			url-2.5.8 \
			utf8_iter-1.0.4 \
			utf8parse-0.2.2 \
			uuid-1.23.1 \
			valuable-0.1.1 \
			vcpkg-0.2.15 \
			version_check-0.9.5 \
			vtparse-0.6.2 \
			want-0.3.1 \
			wasi-0.11.1+wasi-snapshot-preview1 \
			wasip2-1.0.3+wasi-0.2.9 \
			wasip3-0.4.0+wasi-0.3.0-rc-2026-01-06 \
			wasm-bindgen-0.2.122 \
			wasm-bindgen-futures-0.4.72 \
			wasm-bindgen-macro-0.2.122 \
			wasm-bindgen-macro-support-0.2.122 \
			wasm-bindgen-shared-0.2.122 \
			wasm-encoder-0.244.0 \
			wasm-metadata-0.244.0 \
			wasmparser-0.244.0 \
			web-sys-0.3.99 \
			web-time-1.1.0 \
			webpki-roots-1.0.7 \
			wezterm-bidi-0.2.3 \
			wezterm-blob-leases-0.1.1 \
			wezterm-color-types-0.3.0 \
			wezterm-dynamic-0.2.1 \
			wezterm-dynamic-derive-0.1.1 \
			wezterm-input-types-0.1.0 \
			winapi-0.3.9 \
			winapi-i686-pc-windows-gnu-0.4.0 \
			winapi-x86_64-pc-windows-gnu-0.4.0 \
			windows-core-0.62.2 \
			windows-implement-0.60.2 \
			windows-interface-0.59.3 \
			windows-link-0.2.1 \
			windows-result-0.4.1 \
			windows-strings-0.5.1 \
			windows-sys-0.52.0 \
			windows-sys-0.60.2 \
			windows-sys-0.61.2 \
			windows-targets-0.52.6 \
			windows-targets-0.53.5 \
			windows_aarch64_gnullvm-0.52.6 \
			windows_aarch64_gnullvm-0.53.1 \
			windows_aarch64_msvc-0.52.6 \
			windows_aarch64_msvc-0.53.1 \
			windows_i686_gnu-0.52.6 \
			windows_i686_gnu-0.53.1 \
			windows_i686_gnullvm-0.52.6 \
			windows_i686_gnullvm-0.53.1 \
			windows_i686_msvc-0.52.6 \
			windows_i686_msvc-0.53.1 \
			windows_x86_64_gnu-0.52.6 \
			windows_x86_64_gnu-0.53.1 \
			windows_x86_64_gnullvm-0.52.6 \
			windows_x86_64_gnullvm-0.53.1 \
			windows_x86_64_msvc-0.52.6 \
			windows_x86_64_msvc-0.53.1 \
			winreg-0.10.1 \
			wit-bindgen-0.51.0 \
			wit-bindgen-0.57.1 \
			wit-bindgen-core-0.51.0 \
			wit-bindgen-rust-0.51.0 \
			wit-bindgen-rust-macro-0.51.0 \
			wit-component-0.244.0 \
			wit-parser-0.244.0 \
			writeable-0.6.3 \
			yoke-0.8.2 \
			yoke-derive-0.8.2 \
			zerocopy-0.8.48 \
			zerocopy-derive-0.8.48 \
			zerofrom-0.1.8 \
			zerofrom-derive-0.1.7 \
			zeroize-1.8.2 \
			zerotrie-0.2.4 \
			zerovec-0.11.6 \
			zerovec-derive-0.11.3 \
			zmij-1.0.21

# Build only the crates whose binaries we ship. colibri-client provides both
# `colibri` and `colibri-test-agent`. No GUI dependencies are pulled in.
CARGO_BUILD_ARGS=	-p clawdie \
			-p colibri-client \
			-p colibri-daemon \
			-p colibri-mcp \
			-p colibri-glasspane-tui

# The repo pins a rustup channel (rust-toolchain.toml); in a clean poudriere
# jail we use the ports lang/rust toolchain, so drop the pin before building.
post-extract:
	@${RM} -f ${WRKSRC}/rust-toolchain.toml

BINS=	clawdie colibri colibri-daemon colibri-mcp colibri-test-agent colibri-tui

do-install:
	@${MKDIR} ${STAGEDIR}${PREFIX}/bin
.for b in ${BINS}
	${INSTALL_PROGRAM} \
		${CARGO_TARGET_DIR}/${CARGO_BUILD_TARGET}/release/${b} \
		${STAGEDIR}${PREFIX}/bin/${b}
.endfor
	# rc.d services (the daemon's rc.d expects the binary at PREFIX/bin/colibri-daemon).
	@${MKDIR} ${STAGEDIR}${PREFIX}/etc/rc.d
	${INSTALL_SCRIPT} ${FILESDIR}/colibri_daemon.in \
		${STAGEDIR}${PREFIX}/etc/rc.d/colibri_daemon
	${INSTALL_SCRIPT} ${FILESDIR}/colibri_bridge.in \
		${STAGEDIR}${PREFIX}/etc/rc.d/colibri_bridge

.include <bsd.port.mk>
