-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
156 lines (120 loc) · 5.25 KB
/
Makefile
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
PACKAGE := dvorak-hhkb
VERSION := 0.4
AUTHOR := R.Jaksa 2023 GPLv3
SUBVERSION :=
CR_:="\\033[31m"
CC_:="\\033[36m"
CK_:="\\033[90m"
CD_:="\\033[0m"
# --------------------------------------------------------------------------------------------- CONFIG
# obtain the config string from the "config" file
CONFIG := $(shell cat config | sed 's:\#.*::' | xargs)
# identify the model = the target variant of HHKB
ifneq (,$(findstring Professional,$(CONFIG)))
MODEL := hhkbp2
else ifneq (,$(findstring Lite,$(CONFIG)))
MODEL := hhkbl
else # the default
MODEL := hhkbp2
endif
# identify the range: hhkb vs hhkbkp
# and whether Keypad will be included to the model
ifneq (,$(findstring KP,$(CONFIG)))
RANGE := hhkbkp
MODEL := $(MODEL)kp
DEVICEHEIGHTPOINTS := -dDEVICEHEIGHTPOINTS=600
else
RANGE := hhkb
DEVICEHEIGHTPOINTS := -dDEVICEHEIGHTPOINTS=820
endif
# identify the layout
ifneq (,$(findstring CE,$(CONFIG)))
LAYOUT := dvorakce
else # the default
LAYOUT := dvorak
endif
# -------------------------------------------------------------------------------------------- TARGETS
# xorg.conf target files (cfg0 are sources)
CFG0 := $(shell find xorg.conf.d -type f | grep -v -F .bkp)
CFG := $(CFG0:%=/usr/share/X11/%)
# etc target files (etc0 are sources)
ETC0 := $(shell find etc -type f | grep -v -F .bkp)
ETC := $(ETC0:%=/%)
# xkb files to copy = target files
XKB0 := $(shell find xkb/compat -type f -o -type l | grep -v -F .bkp)
XKB0 += $(shell find xkb/rules -type f -o -type l | grep -v -F .bkp)
XKB0 += $(shell find xkb/types -type f -o -type l | grep -v -F .bkp)
XKB0 += xkb/geometry/$(MODEL)
XKB0 += xkb/keycodes/$(RANGE)
XKB0 += xkb/symbols/$(LAYOUT)-$(RANGE)
XKB := $(XKB0:%=/usr/share/X11/%)
# build dir
XKB1 := $(XKB0:%=build/%)
CFG1 := $(CFG0:%=build/%)
ETC1 := $(ETC0:%=build/%)
# xkb files to install as a direct copy (without compilation)
XKB2 := $(shell echo $(XKB) | xargs -n1 | grep -v keycodes | grep -v symbols | grep -v rules)
# ---------------------------------------------------------------------------------------------- BUILD
all: info $(XKB1) $(CFG1) $(ETC1) doc/hhkb.png
# verbose: the config and target xkb-files
info: infoc # build info
@echo; echo $(XKB1) $(CFG1) $(ETC1) | xargs -n1 | xargs -iX echo -e " $(CK_)X$(CD_)"; echo
infoi: infoc # install info
@echo; echo $(XKB) $(CFG) $(ETC) | xargs -n1 | xargs -iX echo -e " $(CK_)X$(CD_)"; echo
infoc: # config info
@echo -e "$(CC_)cfg:$(CD_) \"$(CONFIG)\" => $(LAYOUT)-$(MODEL)"
build/xkb/keycodes build/xkb/symbols build/xkb/rules build/xkb/compat build/xkb/types build/xkb/geometry build/xorg.conf.d build/etc/default:
@mkdir -p $@
# cpp can be used as well: cpp -nostdinc -C -P $< > $@
# although, cpp resolves "// \" comment as a continuing line unfortunately
# although, cpp -P as a side-effect removes all formatting incl. empty lines and all comments
build/xkb/keycodes/%: xkb/keycodes/%.c xkb/keycodes/*.h config Makefile | build/xkb/keycodes
UTIL/pcpp -v $< > $@
build/xkb/symbols/%: xkb/symbols/%.c xkb/symbols/*.h config Makefile | build/xkb/symbols
UTIL/pcpp -v $< > $@
build/xkb/geometry/%: xkb/geometry/%.c xkb/geometry/*.h config Makefile | build/xkb/geometry
UTIL/pcpp -v $< > $@
build/xkb/rules/%: xkb/rules/% config Makefile | build/xkb/rules
cat $< | sed 's:MODEL:$(MODEL):g' | sed 's:RANGE:$(RANGE):g' | sed 's:LAYOUT:$(LAYOUT):g' > $@
build/xorg.conf.d/%: xorg.conf.d/% config Makefile | build/xorg.conf.d
cat $< | sed 's:MODEL:$(MODEL):g' | sed 's:RANGE:$(RANGE):g' | sed 's:LAYOUT:$(LAYOUT):g' > $@
build/etc/default/%: etc/default/% config Makefile | build/etc/default
cat $< | sed 's:"MODEL":"$(MODEL)":g' | sed 's:"LAYOUT-RANGE":"$(LAYOUT)-$(RANGE)":g' > $@
build/xkb/compat/%: xkb/compat/% Makefile | build/xkb/compat
cp $< $@
build/xkb/types/%: xkb/types/% Makefile | build/xkb/types
cp $< $@
# note: figures will be correct only after xkb files are on place
doc/hhkb.png: $(XKB1) Makefile
@sleep .3
@printf "$(CK_)"
setxkbmap -I build/xkb -print -rules dvorak-hhkb -geometry $(MODEL) | xkbcomp -Ibuild/xkb -w 4 -xkm - - | xkbprint -ll 1 -fit -color - $@.ps
gs -r220 -q -sDEVICE=pnggray -dNOPAUSE -dBATCH -dDEVICEWIDTHPOINTS=1600 $(DEVICEHEIGHTPOINTS) -sOutputFile=$@.png $@.ps
convert $@.png -resize 2400 $@.2.png
pngquant -f --strip -Q 50 -o $@.3.png $@.2.png
zopflipng -y -m --lossy_8bit $@.3.png $@ 2>&1 >/dev/null
# mv $@.3.png $@
rm -f $@.png $@.ps $@.*.png
# feh $@
# -------------------------------------------------------------------------------------------- INSTALL
install: infoi $(XKB) $(CFG) $(ETC)
# commands prefix
prefix = $(shell if test -e $(1); then echo -n "$(CC_)upd:$(CD_)"; else echo -n "$(CR_)new:$(CD_)"; fi)
$(XKB) $(CFG): /usr/share/X11/%: build/%
@printf "$(call prefix,$@) "
install -D -m 644 $< $@
$(ETC): /%: build/%
@printf "$(call prefix,$@) "
install -D -m 644 $< $@
# only currently configured files are uninstalled by this
uninstall:
@echo -e "$(CK_)rm -i $(XKB) $(CFG)$(CD_)"
@-rm -i $(XKB) $(CFG)
@echo -e "$(CR_)not removed:$(CD_) $(ETC)"
# ----------------------------------------------------------------------------------------------------
clean:
rm -fr build
mrproper: clean
rm doc/hhkb.png
-include ~/.github/Makefile.git
# --------------------------------------------------------------------------------------- R.Jaksa 2023