1 Commits

Author SHA1 Message Date
b4b0b0cb4d Add Makefile with build and test targets 2026-03-04 19:35:42 +00:00

56
Makefile Normal file
View File

@@ -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)