# Packaging Build recipes for the distributions that matter. Each one follows the same recipe: unpack the release archive, regenerate the autotools files (`autoreconf -fi` — the generated `configure`/`Makefile.in` are not committed), `configure`, `make`, `make install`. The binary is a single static-ish ELF that only needs glibc. | Distro | File | Tooling | |--------|------|---------| | Arch | `arch/PKGBUILD` | `makepkg` | | Gentoo | `gentoo/app-misc/fastwc/fastwc-0.1.0.ebuild` | `ebuild` / `emerge` (drop into a local repo or `app-portage/eselect-repository`) | | NixOS | `nix/default.nix` | `nix build -f default.nix` (or a `callPackage` from a nixpkgs overlay) | | Void | `void/template` | `xbps-src pkg fastwc` (in a `void-packages` checkout: `cp -r ../fastwc/packaging/void srcpkgs/fastwc`) | | Fedora | `fedora/fastwc.spec` | `rpmbuild -ba fastwc.spec` (or `fedpkg`/`mock`) | ## Before the first build Each recipe points at the Gitea release archive `https://git.spectoria.dev/huntedbytheirs/fastwc/archive/v0.1.0.tar.gz`, which does not exist until a `v0.1.0` tag is pushed: ```sh git tag -a v0.1.0 -m "fastwc 0.1.0" git push origin v0.1.0 ``` Then fill in the integrity placeholders each distro demands: - **Arch**: replace `sha256sums=('SKIP')` with the hash `makepkg` reports on the first attempt. - **NixOS**: `lib.fakeHash` makes the first build fail with the real hash — paste it in. - **Void**: replace `checksum=SKIP` with the sha256 `xbps-src` wants (it will refuse to build until then). - **Gentoo / Fedora**: hashes live outside the recipe (the `Manifest` file / source RPM metadata), so nothing to fill in here. ## Notes - **Gitea archive layout**: these archives extract to a top-level directory named after the repo (`fastwc/`, no version suffix), which is why the recipes `cd fastwc`, set `S="${WORKDIR}/fastwc"`, or use `%autosetup -n fastwc`. If a future host renames the layout, adjust those three spots. - **Architecture**: the SIMD kernels dispatch AVX-512/AVX-2/SSE2 at runtime with a scalar fallback, so the code builds anywhere — the recipes currently declare `x86_64` because that is what the benchmark contract is validated on. Loosen if you build elsewhere. - **`-pthread`** is in `AM_CFLAGS`; glibc >= 2.34 provides pthreads in libc, so there is no separate runtime dependency. - The `fastwc` binary installs to `$(bindir)/fastwc` and does not shadow `wc` — nothing conflicts with coreutils.