summaryrefslogtreecommitdiff
path: root/Makefile
blob: 0df6b25a07c25841881daf58059493eb0b84427c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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