summaryrefslogtreecommitdiff
path: root/pkg/kbd/gen.lua
blob: 855e39e761ef86462d1a720f57b9707f3c4fce43 (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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
cflags{
	[[-D 'DATADIR="/share/kbd"']],
	'-I $dir',
	'-I $srcdir',
	'-I $srcdir/src',
	'-I $srcdir/src/libcommon',
	'-I $srcdir/src/libkbdfile',
	'-I $srcdir/src/libkeymap',
	'-I $srcdir/src/libkeymap/keymap',
	'-I $builddir/pkg/linux-headers/include',
}

pkg.deps = {
	'pkg/linux-headers/headers',
}

lib('libcommon.a', 'src/libcommon/(getfd.c error.c version.c xmalloc.c)')
lib('libkbdfile.a', 'src/libkbdfile/(init.c kbdfile.c)')
lib('libkeymap.a', [[src/libkeymap/(
	analyze.c
	array.c
	common.c
	diacr.c
	dump.c
	func.c
	kernel.c
	kmap.c
	ksyms.c
	loadkeys.c
	modifiers.c
	parser.c
	summary.c
)]])
lib('libfont.a', 'src/(kdfontop.c kdmapop.c loadunimap.c psffontop.c utf8.c)')

-- old: loadunimap mapscrn
-- optional: clrunmap getunimap setlogcons setvesablank setpalette screendump
-- i386/x86_64 only: resizecons
-- ubase: chvt

local tools = {
	{'deallocvt',       '1'},
	{'dumpkeys',        '1', true},
	{'fgconsole',       '1'},
	{'getkeycodes',     '8'},
	{'kbd_mode',        '1'},
	{'kbdinfo'},
	{'loadkeys',        '1', true},
	{'openvt',          '1'},
	{'psfxtable',       '1'},
	{'setfont',         '8', true, {'src/setfont.c', 'src/mapscrn.c'}},
	{'setkeycodes',     '8'},
	{'setvtrgb',        '8'},
	{'showconsolefont', '8'},
	{'showkey',         '1'},
}

for _, tool in ipairs(tools) do
	local name, sect, subst, srcs = table.unpack(tool)
	exe(name, {srcs or 'src/'..name..'.c', 'libcommon.a', 'libfont.a', 'libkeymap.a', 'libkbdfile.a'})
	file('bin/'..name, '755', '$outdir/'..name)
	if sect then
		local manpage = string.format('docs/man/man%s/%s.%s', sect, name, sect)
		if subst then
			local out = string.format('$outdir/%s.%s', name, sect)
			build('sed', out, '$srcdir/'..manpage..'.in', {
				expr='s,@DATADIR@,/share/kbd,g',
			})
			manpage = out
		end
		man{manpage}
	end
end

-- keymap data
for keymap in iterlines('keymaps.txt') do
	local out = '$outdir/keymaps/'..keymap..'.gz'
	build('gzip', out, '$srcdir/data/keymaps/'..keymap)
	file('share/kbd/keymaps/'..keymap..'.gz', '644', out)
end
sym('share/kbd/keymaps/ppc', 'mac')

fetch 'curl'