diff options
| author | Paul Buetow <paul@buetow.org> | 2026-07-18 12:42:02 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-07-18 12:42:02 +0300 |
| commit | 42036d5ec36160a9caa6de64f9476726a5386a69 (patch) | |
| tree | cea966e9683dc5adc967912341b9847abd40dfed /src/lib/config.staging.source.sh | |
| parent | 3c35381b71f992eb7a86552697ea647bb76b68b1 (diff) | |
Support FreeBSD and macOS via resolved GNU tool variables
shuriken relied on GNU-only extensions (find -printf, stat -c, cp -a,
sort -R) and hard-refused to run outside Linux. Resolve each of the four
tools once at startup to a FIND/STAT/CP/SORT variable, preferring a
g-prefixed sibling (gfind, gstat, gcp, gsort) when present on PATH -
mirroring the $SED/$GREP/$DATE tool-selection pattern in the sibling
gemtexter project - so the same source runs unmodified on Linux, macOS,
and FreeBSD once GNU coreutils/findutils are installed there.
- src/lib/compat.source.sh: add resolve_gnu_tool + FIND/STAT/CP/SORT;
add a fast verify_gnu_tool_versions preflight (--version contains
"GNU") ahead of the existing behavioral probes, which now run against
the resolved variables instead of hardcoded tool names; split the
probes and error reporting into their own ~30-line functions.
- Replace the GNU-only find -printf / stat -c / cp -a / sort -R call
sites in photo-list, image, album-photo-select, metadata-cache,
config.staging, and random source files with the resolved variables.
POSIX-portable find/sort calls elsewhere are untouched.
- README.md: drop the "Linux-only" claim; document brew/pkg GNU
coreutils+findutils install steps for macOS and FreeBSD.
- tests/cli.sh: add coverage for the g-prefixed-sibling preference and
for the new --version-string preflight's error message, alongside the
existing behavioral-probe guard tests.
just build / just check-generated / just shellcheck / just test /
git diff --check all pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Diffstat (limited to 'src/lib/config.staging.source.sh')
| -rw-r--r-- | src/lib/config.staging.source.sh | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/lib/config.staging.source.sh b/src/lib/config.staging.source.sh index b76da58..e48f45b 100644 --- a/src/lib/config.staging.source.sh +++ b/src/lib/config.staging.source.sh @@ -29,12 +29,14 @@ prepare_generation_staging_dir() { return fi + # $CP (compat.source.sh): -a (archive mode) is not supported by minimal/older + # BSD cp variants, so this must run against the resolved GNU cp. for cache_dir in photos thumbs blurs; do if [ -d "$final_dist/$cache_dir" ]; then if ! mkdir -p "$staging_dir/$cache_dir"; then return 1 fi - if ! cp -a "$final_dist/$cache_dir/." "$staging_dir/$cache_dir/"; then + if ! "$CP" -a "$final_dist/$cache_dir/." "$staging_dir/$cache_dir/"; then return 1 fi fi |
