Add Makefile with build and test targets #4
56
Makefile
Normal file
56
Makefile
Normal 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)
|
||||||
Reference in New Issue
Block a user