CC = 9c
LD = 9l
PKG_CFLAGS = $(shell pkg-config --cflags dbus-1 wayland-client xkbcommon)
PKG_LIBS = $(shell pkg-config --libs dbus-1 wayland-client xkbcommon)
CFLAGS = -Wall -Wextra -O2 -g $(PKG_CFLAGS)
PROG = strans
DOCKER_IMAGE = strans-build

SRCS = $(wildcard *.c)
OBJS = $(SRCS:.c=.o)

all: $(PROG) xim gtk

$(PROG): $(OBJS)
	$(LD) -o $@ $(OBJS) -lthread -lString -lbio -lxcb -lm $(PKG_LIBS)

$(OBJS): dat.h fn.h ipc.h
# Avoid Arch's GLIBC_2.43 sqrtf optimization for older glibc runtimes.
font.o: CFLAGS += -fno-builtin-sqrt
font.o: stb_truetype.h
wayland.o: input-method-unstable-v2-client-protocol.h \
	virtual-keyboard-unstable-v1-client-protocol.h

clean:
	rm -f $(OBJS) $(PROG)
	$(MAKE) -C tests clean
	$(MAKE) -C xim/ clean
	$(MAKE) -C gtk/ clean
	$(MAKE) -C bench/ clean

xim:
	$(MAKE) -C xim/

gtk:
	$(MAKE) -C gtk/

bench:
	$(MAKE) -C bench/

docker: Dockerfile
	docker build -t $(DOCKER_IMAGE) - < Dockerfile
	docker run --rm --user "$$(id -u):$$(id -g)" \
		-v "$(CURDIR):/src" $(DOCKER_IMAGE) \
		sh -c 'make clean && make all'

docker-check: docker
	docker run --rm --user "$$(id -u):$$(id -g)" \
		-e TESTARGS="$(TESTARGS)" -v "$(CURDIR):/src" \
		$(DOCKER_IMAGE) make check

check: verify-map test

test:
	$(MAKE) -C tests check TESTARGS="$(TESTARGS)"

verify-map:
	python3 map/mktelex.py | cmp - map/telex.map
	python3 -B map/mkemoji | cmp - map/emoji.dict
	python3 -B tests/mkemoji_test.py

.PHONY: all check test verify-map clean xim gtk bench docker docker-check
