kinit() sets up the XKB extension, after which the server stops sending core MappingNotify to this client, so the refresh branch never fired and strans kept its startup keymap; setxkbmap after launch left every XIM key resolved against the old layout. Select XKB NewKeyboardNotify and MapNotify (with the map parts, or MapNotify is never delivered) and rebuild the keymap on those events instead.
99 lines
2.7 KiB
Makefile
99 lines
2.7 KiB
Makefile
CC = 9c
|
|
LD = 9l
|
|
PKG_CONFIG ?= pkg-config
|
|
CFLAGS ?= -O2 -g
|
|
WARN_CFLAGS = -Wall -Wextra
|
|
IBUS_CFLAGS = $(shell $(PKG_CONFIG) --cflags dbus-1 xkbcommon)
|
|
IBUS_LIBS = $(shell $(PKG_CONFIG) --libs dbus-1 xkbcommon)
|
|
XIM_CFLAGS = $(shell $(PKG_CONFIG) --cflags xcb-imdkit xcb-xkb xkbcommon-x11)
|
|
XIM_LIBS = $(shell $(PKG_CONFIG) --libs xcb-imdkit xcb-xkb xkbcommon-x11)
|
|
TEXT_CFLAGS = $(shell $(PKG_CONFIG) --cflags pangocairo cairo)
|
|
TEXT_LIBS = $(shell $(PKG_CONFIG) --libs pangocairo cairo)
|
|
POPUP_CFLAGS = $(shell $(PKG_CONFIG) --cflags xcb-randr)
|
|
POPUP_LIBS = $(shell $(PKG_CONFIG) --libs xcb-randr)
|
|
PROJECT_CPPFLAGS =
|
|
PROJECT_LDLIBS = -lthread -lbio -lxcb $(IBUS_LIBS) $(TEXT_LIBS) \
|
|
$(XIM_LIBS) $(POPUP_LIBS)
|
|
PROG = strans
|
|
DOCKER_IMAGE = strans-build
|
|
DOCKER_RUN = docker run --rm --user "$$(id -u):$$(id -g)" \
|
|
-v "$(CURDIR):/src" $(DOCKER_IMAGE)
|
|
|
|
SRCS = dict.c font.c ibus.c ipc.c ko.c main.c popup_layout.c \
|
|
srv.c str.c strans.c trie.c vi.c win.c
|
|
XIMSRCS = xim/xim.c xim/keymap.c
|
|
XIMOBJS = $(XIMSRCS:.c=.o)
|
|
OBJS = $(SRCS:.c=.o) $(XIMOBJS)
|
|
|
|
all: $(PROG) gtk
|
|
|
|
$(PROG): $(OBJS)
|
|
$(LD) $(LDFLAGS) -o $@ $(OBJS) $(PROJECT_LDLIBS) $(LDLIBS)
|
|
|
|
$(OBJS): dat.h fn.h ipc.h
|
|
ibus.o: PROJECT_CPPFLAGS += $(IBUS_CFLAGS)
|
|
font.o: PROJECT_CPPFLAGS += $(TEXT_CFLAGS)
|
|
win.o: PROJECT_CPPFLAGS += $(POPUP_CFLAGS)
|
|
$(XIMOBJS): PROJECT_CPPFLAGS += -I. $(XIM_CFLAGS)
|
|
|
|
%.o: %.c
|
|
$(CC) $(CPPFLAGS) $(PROJECT_CPPFLAGS) $(WARN_CFLAGS) $(CFLAGS) -c -o $@ $<
|
|
|
|
clean:
|
|
rm -f $(OBJS) $(PROG)
|
|
$(MAKE) -C tests clean
|
|
$(MAKE) -C gtk/ clean
|
|
$(MAKE) -C bench/ clean
|
|
|
|
gtk:
|
|
$(MAKE) -C gtk/
|
|
|
|
bench:
|
|
$(MAKE) -C bench/
|
|
|
|
docker-image: Dockerfile
|
|
docker build -t $(DOCKER_IMAGE) - < Dockerfile
|
|
|
|
docker-build:
|
|
$(DOCKER_RUN) sh -c 'make clean && make all'
|
|
|
|
docker-check:
|
|
$(DOCKER_RUN) sh -c 'make clean && \
|
|
make check check-live check-stress UNITARGS="$(UNITARGS)"'
|
|
|
|
docker-check-live:
|
|
$(DOCKER_RUN) sh -c 'make clean && make check-live'
|
|
|
|
docker-check-stress:
|
|
$(DOCKER_RUN) sh -c 'make clean && make check-stress'
|
|
|
|
docker-bench:
|
|
$(DOCKER_RUN) sh -c 'make clean && make bench'
|
|
|
|
docker: docker-image
|
|
$(MAKE) docker-build
|
|
|
|
check: verify-map
|
|
$(MAKE) -C tests check UNITARGS="$(UNITARGS)"
|
|
|
|
check-live: $(PROG) gtk
|
|
$(MAKE) -C tests check-live
|
|
|
|
check-stress: $(PROG)
|
|
$(MAKE) -C tests check-stress
|
|
|
|
test: check
|
|
|
|
verify-map:
|
|
python3 map/mktelex.py | cmp - map/telex.map
|
|
python3 -B map/mkemoji | cmp - map/emoji.dict
|
|
python3 -B map/mkhanja | cmp - map/hanja.dict
|
|
python3 -B map/verifymap.py map/*.map map/*.dict
|
|
python3 -B tests/mkemoji_test.py
|
|
python3 -B tests/mkhanja_test.py
|
|
python3 -B tests/skk2ktrans_test.py
|
|
|
|
.PHONY: all check check-live check-stress test verify-map clean gtk bench \
|
|
docker docker-image docker-build docker-check docker-check-live \
|
|
docker-check-stress docker-bench
|