CC ?= cc NUKLEAR_DIR ?= vendor TARGET := kanji-deck CPPFLAGS := -D_POSIX_C_SOURCE=200809L -DNK_INCLUDE_DEFAULT_ALLOCATOR -DNK_BUTTON_TRIGGER_ON_RELEASE -Iinclude -isystem $(NUKLEAR_DIR) LDLIBS := -lX11 -lm XFT_CFLAGS := $(shell pkg-config --cflags xft 2>/dev/null) XFT_LIBS := $(shell pkg-config --libs xft 2>/dev/null) ifneq ($(strip $(XFT_LIBS)),) CPPFLAGS += -DNK_XLIB_USE_XFT $(XFT_CFLAGS) LDLIBS += $(XFT_LIBS) endif C89FLAGS ?= -std=c89 -pedantic-errors -Wall -Wextra -Werror \ -Wstrict-prototypes -Wmissing-prototypes -Wformat=2 \ -Wformat-security -Wconversion -Wsign-conversion LDFLAGS ?= APP_OBJECTS := src/main.o src/kd_deck.o src/kd_image.o src/nuklear_impl.o .PHONY: all clean check check-image check-deps all: $(TARGET) check-deps: @test -f "$(NUKLEAR_DIR)/nuklear.h" || { \ echo "Missing $(NUKLEAR_DIR)/nuklear.h; copy Nuklear's single header there." >&2; exit 1; } @test -f "$(NUKLEAR_DIR)/nuklear_xlib.h" || { \ echo "Missing $(NUKLEAR_DIR)/nuklear_xlib.h; copy demo/x11/nuklear_xlib.h there." >&2; exit 1; } $(APP_OBJECTS): | check-deps src/main.o: src/main.c include/kd_deck.h include/kd_image.h $(CC) $(CPPFLAGS) $(C89FLAGS) -c $< -o $@ src/kd_deck.o: src/kd_deck.c include/kd_deck.h $(CC) $(CPPFLAGS) $(C89FLAGS) -c $< -o $@ src/kd_image.o: src/kd_image.c include/kd_image.h $(CC) $(CPPFLAGS) $(C89FLAGS) -c $< -o $@ src/nuklear_impl.o: src/nuklear_impl.c $(CC) $(CPPFLAGS) -std=c89 -pedantic-errors -w -c $< -o $@ $(TARGET): $(APP_OBJECTS) $(CC) $(LDFLAGS) $(APP_OBJECTS) -o $@ $(LDLIBS) check: tests/test_deck ./tests/test_deck check-image: tests/test_image @set -eu; temp=$$(mktemp -d); trap 'rm -rf "$$temp"' EXIT HUP INT TERM; \ printf 'P3\n2 1\n255\n255 0 0 0 255 0\n' > "$$temp/p3.ppm"; \ printf 'P6\n2 1\n255\n\377\000\000\000\377\000' > "$$temp/p6.ppm"; \ if command -v xvfb-run >/dev/null 2>&1; then \ xvfb-run -a ./tests/test_image "$$temp/p3.ppm" "$$temp/p6.ppm"; \ else \ ./tests/test_image "$$temp/p3.ppm" "$$temp/p6.ppm"; \ fi tests/test_image: tests/test_image.c src/kd_image.c include/kd_image.h $(CC) $(CPPFLAGS) $(C89FLAGS) tests/test_image.c src/kd_image.c -o $@ -lX11 tests/test_deck: tests/test_deck.c src/kd_deck.c include/kd_deck.h $(CC) -D_POSIX_C_SOURCE=200809L -Iinclude $(C89FLAGS) \ tests/test_deck.c src/kd_deck.c -o $@ clean: rm -f $(TARGET) $(APP_OBJECTS) tests/test_deck tests/test_image