local knit = require("knit") local root = knit.abs(".") local deploy_dir = cli.deploy_dir or env.HOME .. "/.local/bin" rust_bins := bin/dam bin/lastfm_rs bin/plants zig_bins := bin/pmn bin/pracomer bin/speediness go_bins := bin/wrd bin/rem2org bin/bandano python_bins := bin/diggah bin/lazymaster bin/nts bin/shuffle bin/kundali ruby_bins := bin/hue bin/reflink-snap janet_bins := bin/backup c_bins := bin/tpswitch mpd_queue_bins := bin/mpd_add_to_queue bin/mpd_edit_queue bin/mpd_update_queue bin/mpd_insert_next bin/mpd_trim_queue mpd_playlist_bins := bin/mpd_add_to_playlist bin/mpd_edit_playlist bin/mpd_update_library mpd_report_bins := bin/mpd_now_playing bin/mpd_report bin/mpd_report_monthly bin/mpd_report_daily mpd_bins := $mpd_queue_bins $mpd_playlist_bins $mpd_report_bins bins := $rust_bins $zig_bins $go_bins $mpd_bins $python_bins $ruby_bins $janet_bins $c_bins cflags := -std=c17 -D_POSIX_C_SOURCE=200809L -Wall -Wextra -Wconversion -Wstrict-prototypes -O2 -march=native -mtune=native -fanalyzer -Wshadow -fstack-protector-strong -D_FORTIFY_SOURCE=2 -fPIE -Wformat -Werror=format-security -Wnull-dereference -Wdangling-pointer -Wtrampolines -Walloca -Wcast-align=strict -Wdate-time -Wfloat-equal -Wpointer-arith -Wredundant-decls -Wswitch-default -Wvla -Wwrite-strings ldflags := -lmpdclient -Wl,-z,relro -Wl,-z,now cc := /usr/bin/cc hue_rb := hue/lib/hue.rb hue/lib/hue/bridge.rb hue/lib/hue/bulb.rb hue/lib/hue/cli.rb hue/lib/hue/colors.rb hue/lib/hue/animations/candle.rb hue/lib/hue/animations/sunrise.rb hue/lib/hue/cli/command.rb hue/lib/hue/colors/color.rb hue/lib/hue/colors/color_temperature.rb hue/lib/hue/colors/hue_saturation.rb hue/lib/hue/colors/rgb.rb hue/lib/hue/colors/xy.rb hue/lib/hue/config/abstract.rb hue/lib/hue/config/application.rb hue/lib/hue/config/bridge.rb hue/lib/hue/extensions/bridge.rb hue/lib/hue/extensions/bulb.rb hue/lib/hue/extensions/hue.rb hue/lib/hue/utilities/indentation.rb hue/lib/hue/cli/commands/delete.rb hue/lib/hue/cli/commands/light.rb hue/lib/hue/cli/commands/lights.rb hue/lib/hue/cli/commands/register.rb hue/lib/hue/cli/processors/light_state_alias.rb return b{ $ bin/dam: Cargo.toml Cargo.lock rust-toolchain.toml dam/Cargo.toml $(knit.glob("dam/src/*.rs")) cargo build --release -p dam cp target/release/dam $output $ bin/lastfm_rs: Cargo.toml Cargo.lock rust-toolchain.toml lastfm_rs/Cargo.toml $(knit.glob("lastfm_rs/src/*.rs")) cargo build --release -p lastfm_rs cp target/release/lastfm_rs $output $ bin/plants: Cargo.toml Cargo.lock rust-toolchain.toml plants/Cargo.toml $(knit.glob("plants/src/*.rs")) cargo build --release -p plants cp target/release/plants $output $ bin/pmn: pmn/build.zig pmn/build.zig.zon $(knit.glob("pmn/src/*.zig")) cd pmn && zig build -Doptimize=ReleaseSafe cp pmn/zig-out/bin/pmn $output $ bin/pracomer: pracomer/build.zig pracomer/build.zig.zon $(knit.glob("pracomer/src/*.zig")) cd pracomer && zig build -Doptimize=ReleaseSafe cp pracomer/zig-out/bin/pracomer $output $ bin/speediness: speediness/build.zig speediness/build.zig.zon $(knit.glob("speediness/src/*.zig")) cd speediness && zig build -Doptimize=ReleaseSafe cp speediness/zig-out/bin/speediness $output $ bin/wrd: wrd/go.mod $(knit.glob("wrd/*.go")) cd wrd && go build -o $(root)/$output . $ bin/rem2org: rem2org/go.mod $(knit.glob("rem2org/*.go")) cd rem2org && go build -o $(root)/$output . $ bin/bandano: bandano/go.mod bandano/go.sum $(knit.glob("bandano/*.go")) cd bandano && go build -o $(root)/$output . $ bin/tpswitch: tpswitch/tpswitch.c $cc $cflags -o $output tpswitch/tpswitch.c $ bin/mpd_add_to_playlist: mpd/mpd_add_to_playlist.c mpd/mpd_common.c mpd/mpd_common.h $cc $cflags -o $output mpd/mpd_add_to_playlist.c mpd/mpd_common.c $ldflags $ bin/mpd_add_to_queue: mpd/mpd_add_to_queue.c mpd/mpd_common.c mpd/mpd_common.h $cc $cflags -o $output mpd/mpd_add_to_queue.c mpd/mpd_common.c $ldflags $ bin/mpd_edit_queue: mpd/mpd_edit_queue.c mpd/mpd_common.c mpd/mpd_common.h $cc $cflags -o $output mpd/mpd_edit_queue.c mpd/mpd_common.c $ldflags $ bin/mpd_update_library: mpd/mpd_update_library.c mpd/mpd_common.c mpd/mpd_common.h $cc $cflags -o $output mpd/mpd_update_library.c mpd/mpd_common.c $ldflags $ bin/mpd_update_queue: mpd/mpd_update_queue.c mpd/mpd_common.c mpd/mpd_common.h $cc $cflags -o $output mpd/mpd_update_queue.c mpd/mpd_common.c $ldflags $ bin/mpd_insert_next: mpd/mpd_insert_next.c mpd/mpd_common.c mpd/mpd_common.h $cc $cflags -o $output mpd/mpd_insert_next.c mpd/mpd_common.c $ldflags $ bin/mpd_edit_playlist: mpd/mpd_edit_playlist.c mpd/mpd_common.c mpd/mpd_common.h $cc $cflags -o $output mpd/mpd_edit_playlist.c mpd/mpd_common.c $ldflags $ bin/mpd_now_playing: mpd/mpd_now_playing.c mpd/mpd_common.c mpd/mpd_common.h $cc $cflags -o $output mpd/mpd_now_playing.c mpd/mpd_common.c $ldflags $ bin/mpd_trim_queue: mpd/mpd_trim_queue.c mpd/mpd_common.c mpd/mpd_common.h $cc $cflags -o $output mpd/mpd_trim_queue.c mpd/mpd_common.c $ldflags $ bin/mpd_report: mpd/mpd_report.c mpd/mpd_common.c mpd/mpd_common.h $cc $cflags -o $output mpd/mpd_report.c mpd/mpd_common.c $ldflags $ bin/mpd_report_monthly: mpd/mpd_report_monthly cp mpd/mpd_report_monthly $output chmod +x $output $ .venv-stamp: requirements.txt python3 -m venv .venv .venv/bin/pip install --quiet --require-hashes -r requirements.txt sha256sum requirements.txt > $output $ bin/diggah: .venv-stamp diggah/diggah.py printf '#!/bin/sh\nexec "%s/.venv/bin/python" "%s/diggah/diggah.py" "$$@"\n' $root $root > $output chmod +x $output $ bin/kundali: .venv-stamp kundali/kundali.py printf '#!/bin/sh\nexec "%s/.venv/bin/python" "%s/kundali/kundali.py" "$$@"\n' $root $root > $output chmod +x $output $ bin/lazymaster: .venv-stamp lazymaster/lazymaster.py printf '#!/bin/sh\nexec "%s/.venv/bin/python" "%s/lazymaster/lazymaster.py" "$$@"\n' $root $root > $output chmod +x $output $ bin/nts: .venv-stamp nts/nts.py printf '#!/bin/sh\nexec "%s/.venv/bin/python" "%s/nts/nts.py" "$$@"\n' $root $root > $output chmod +x $output $ bin/shuffle: .venv-stamp shuffle/shuffle.py printf '#!/bin/sh\nexec "%s/.venv/bin/python" "%s/shuffle/shuffle.py" "$$@"\n' $root $root > $output chmod +x $output $ bin/hue: hue/bin/hue $hue_rb printf '#!/bin/sh\nexec ruby -I"%s/hue/lib" "%s/hue/bin/hue" "$$@"\n' $root $root > $output chmod +x $output $ bin/reflink-snap: reflink-snap/reflink-snap.rb printf '#!/bin/sh\nexec ruby "%s/reflink-snap/reflink-snap.rb" "$$@"\n' $root > $output chmod +x $output $ bin/backup: backup/backup cp backup/backup $output chmod +x $output $ all:VB: $bins $ deploy-dir:VB: install -d -m 700 $deploy_dir $ deploy/all:VB: deploy-dir $bins install -m 755 $bins $deploy_dir/ echo "deployed all tools to $deploy_dir" $ deploy/mpd:VB: deploy-dir $mpd_bins install -m 755 $mpd_bins $deploy_dir/ echo "deployed mpd tools to $deploy_dir" $ deploy/%:VB: deploy-dir bin/% install -m 755 bin/$match $deploy_dir/ echo "deployed $match to $deploy_dir" $ bin/mpd_report_daily: mpd/mpd_report_daily cp mpd/mpd_report_daily $output chmod +x $output }