# SPDX-License-Identifier: MIT OR Apache-2.0 # To update the vendor tarball and manifest: # spectool -g semcode.spec # ./generate-vendor.sh semcode-%%{commit}.tar.gz %global crate semcode %global forgeurl https://github.com/facebookexperimental/semcode %global commit 81c43e1c91ba6eecb3820453623f18cb6faae9cb %global shortcommit %(c=%{commit}; echo ${c:0:7}) %global date 20260330 %forgemeta # Snapshot info is in Version via caret; clear distprefix so %autorelease # does not duplicate it in Release %global distprefix %{nil} Name: semcode Version: 0.1.1^%{date}git%{shortcommit} Release: %autorelease Summary: Semantic code search tool for C/C++ and Rust codebases License: MIT OR Apache-2.0 URL: %{forgeurl} Source0: %{forgesource} Source1: %{name}-%{shortcommit}-vendor.tar.xz # Pre-generated vendor manifest (cargo2rpm OOMs on this dependency tree) Source2: cargo-vendor.txt # Exclude vendored sources from brp-mangle-shebangs (Rust #![...] attributes # look like shebangs to the checker) %global __brp_mangle_shebangs_exclude_from ^%{_usrsrc}/debug/.*$ # Use fast zstd compression to avoid COPR timeout on large debuginfo %global _binary_payload w3.zstdio BuildRequires: cargo-rpm-macros >= 24 BuildRequires: gcc-c++ BuildRequires: clang-devel BuildRequires: protobuf-compiler BuildRequires: protobuf-devel BuildRequires: openssl-devel BuildRequires: libcurl-devel BuildRequires: pkg-config %description Semcode is a semantic code search tool that indexes C/C++ and Rust codebases using Tree-sitter analysis and machine learning embeddings. It provides an interactive query interface, call graph analysis, type and macro discovery, diff analysis, pattern matching, and integrations via MCP and LSP servers. %prep %forgeautosetup -p1 tar xf %{SOURCE1} %cargo_prep -v vendor %build %cargo_build cp %{SOURCE2} . %install for bin in semcode semcode-index semcode-mcp semcode-lsp; do install -Dpm 0755 target/release/$bin %{buildroot}%{_bindir}/$bin done # Claude Code plugin mkdir -p %{buildroot}%{_datadir}/%{name}/plugin cp -a plugin/semcode/* %{buildroot}%{_datadir}/%{name}/plugin/ %check # Skip git tests that require a real git repository %cargo_test -- -- --skip git::tests %files %license LICENSE-MIT LICENSE-APACHE %license cargo-vendor.txt %doc README.md docs/ %{_bindir}/semcode %{_bindir}/semcode-index %{_bindir}/semcode-mcp %{_bindir}/semcode-lsp %{_datadir}/%{name}/plugin/ %changelog %autochangelog