From b4b0b0cb4d3da565aaead1a534ba3fb21953884e Mon Sep 17 00:00:00 2001 From: mikael-lovqvists-claude-agent Date: Wed, 4 Mar 2026 19:35:42 +0000 Subject: [PATCH] Add Makefile with build and test targets --- Makefile | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f4897d5 --- /dev/null +++ b/Makefile @@ -0,0 +1,56 @@ +SHELL := /bin/bash +CC := cc +CFLAGS := -Wall -O2 +TARGET := fa2json +SRCS := fs-watcher.c json-writer.c + +.PHONY: all test clean + +all: $(TARGET) + +$(TARGET): $(SRCS) + $(CC) $(CFLAGS) -o $@ $^ + +# Requires root (fanotify FID + mount needs CAP_SYS_ADMIN). +# Loop device and mount are cleaned up automatically on exit. +# If the test aborts unexpectedly, check: losetup -l and /proc/mounts +test: $(TARGET) + @set -euo pipefail; \ + IMG=""; MNTDIR=""; LOOPDEV=""; FA2JSON_PID=""; \ + cleanup() { \ + [ -n "$$FA2JSON_PID" ] && { kill "$$FA2JSON_PID" 2>/dev/null; wait "$$FA2JSON_PID" 2>/dev/null || true; }; \ + [ -n "$$MNTDIR" ] && umount "$$MNTDIR" 2>/dev/null || true; \ + [ -n "$$LOOPDEV" ] && losetup -d "$$LOOPDEV" 2>/dev/null || true; \ + [ -n "$$IMG" ] && rm -f "$$IMG"; \ + [ -n "$$MNTDIR" ] && rmdir "$$MNTDIR" 2>/dev/null || true; \ + }; \ + trap cleanup EXIT; \ + IMG=$$(mktemp /tmp/fa2json-test-XXXXXX.img); \ + MNTDIR=$$(mktemp -d /tmp/fa2json-mnt-XXXXXX); \ + echo "--- Creating 10M ext4 image ---"; \ + dd if=/dev/zero of="$$IMG" bs=1M count=10 status=none; \ + mkfs.ext4 -q "$$IMG"; \ + LOOPDEV=$$(losetup --find --show "$$IMG"); \ + mount "$$LOOPDEV" "$$MNTDIR"; \ + echo "--- Starting fa2json on $$MNTDIR ---"; \ + ./$(TARGET) "$$MNTDIR" & FA2JSON_PID=$$!; \ + sleep 0.3; \ + echo "--- Filesystem operations ---"; \ + mkdir "$$MNTDIR/dir_a"; \ + touch "$$MNTDIR/file_a.txt"; \ + echo "content" >> "$$MNTDIR/file_a.txt"; \ + mkdir "$$MNTDIR/dir_b"; \ + touch "$$MNTDIR/dir_b/nested.txt"; \ + mv "$$MNTDIR/file_a.txt" "$$MNTDIR/file_b.txt"; \ + mv "$$MNTDIR/dir_b" "$$MNTDIR/dir_a/dir_b_moved"; \ + chmod 600 "$$MNTDIR/file_b.txt"; \ + touch -m "$$MNTDIR/file_b.txt"; \ + chmod 755 "$$MNTDIR/dir_a"; \ + rm "$$MNTDIR/file_b.txt"; \ + rm "$$MNTDIR/dir_a/dir_b_moved/nested.txt"; \ + rm -rf "$$MNTDIR/dir_a"; \ + sleep 0.3; \ + echo "--- Done ---" + +clean: + rm -f $(TARGET) -- 2.49.1