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
|