summaryrefslogtreecommitdiff
path: root/pkg/bc/gen.lua
blob: 2f0928e4cc904a451773bf1de9f5e1615fd7d9f4 (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
cflags{
	'-D NDEBUG',
	'-D VERSION=3.1.4',
	'-D _POSIX_C_SOURCE=200809L',
	'-I $srcdir/include',
	'-include $dir/config.h',
}

sub('tools.ninja', function()
	toolchain(config.host)
	exe('strgen', {'gen/strgen.c'})
	rule('strgen', [[$outdir/strgen $in $out $name $header '$label' '$define' $removetabs]])
	build('strgen', '$outdir/bc_help.c', {'$srcdir/gen/bc_help.txt', '|', '$outdir/strgen'}, {
		name='bc_help', header='bc.h', label='', define='BC_ENABLED', removetabs='',
	})
	build('strgen', '$outdir/dc_help.c', {'$srcdir/gen/dc_help.txt', '|', '$outdir/strgen'}, {
		name='dc_help', header='dc.h', label='', define='DC_ENABLED', removetabs='',
	})
	build('strgen', '$outdir/lib.c', {'$srcdir/gen/lib.bc', '|', '$outdir/strgen'}, {
		name='bc_lib', header='bc.h', label='bc_lib_name', define='BC_ENABLED', removetabs='1',
	})
	build('strgen', '$outdir/lib2.c', {'$srcdir/gen/lib2.bc', '|', '$outdir/strgen'}, {
		name='bc_lib2', header='bc.h', label='bc_lib2_name', define='BC_ENABLED && BC_ENABLE_EXTRA_MATH', removetabs='1',
	})
end)

exe('bin/bc', [[
	src/(
		args.c
		data.c
		file.c
		lang.c
		lex.c
		main.c
		num.c
		opt.c
		parse.c
		program.c
		read.c
		vector.c
		vm.c
		bc/(bc.c lex.c parse.c)
		dc/(dc.c lex.c parse.c)
		history/history.c
		rand/rand.c
	)
	$outdir/(bc_help.c dc_help.c lib.c lib2.c)
]])
file('bin/bc', '755', '$outdir/bin/bc')

local opts = {}
for line in iterlines('config.h', 1) do
	local var, val = line:match('^define ([^ ]+) ([^ ]+)')
	if var and val == '1' then
		opts[var] = true
	end
end

local manfile = ''
if not opts.BC_ENABLE_EXTRA_MATH then manfile = manfile..'E' end
if not opts.BC_ENABLE_HISTORY    then manfile = manfile..'H' end
if not opts.BC_ENABLE_NLS        then manfile = manfile..'N' end
if not opts.BC_ENABLE_PROMPT     then manfile = manfile..'P' end
if manfile == ''                 then manfile = 'A' end

build('copy', '$outdir/bc.1', '$srcdir/manuals/bc/'..manfile..'.1')
man{'$outdir/bc.1'}

fetch 'git'