Statistics
| Branch: | Revision:

iof-bird / bird-2.0.1 / conf / gen_keywords.m4 @ 6b3f1a54

History | View | Annotate | Download (1.72 KB)

1
m4_divert(-1)m4_dnl
2
#
3
#	BIRD -- Generator of Configuration Keyword List
4
#
5
#	(c) 1998--2000 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
6
#
7
#	Can be freely distributed and used under the terms of the GNU GPL.
8
#
9

    
10
# Common aliases
11
m4_define(DNL, `m4_dnl')
12

    
13
# Diversions used:
14
#	1	keywords
15

    
16
# Simple iterator
17
m4_define(CF_itera, `m4_ifelse($#, 1, [[CF_iter($1)]], [[CF_iter($1)[[]]CF_itera(m4_shift($@))]])')
18
m4_define(CF_iterate, `m4_define([[CF_iter]], m4_defn([[$1]]))CF_itera($2)')
19

    
20
# We include all the headers
21
m4_define(CF_HDR, `m4_divert(0)')
22
m4_define(CF_DECLS, `m4_divert(-1)')
23
m4_define(CF_DEFINES, `m4_divert(-1)')
24

    
25
# Keywords are translated to C initializers
26
m4_define(CF_handle_kw, `m4_divert(1){ "m4_translit($1,[[A-Z]],[[a-z]])", $1, NULL },
27
m4_divert(-1)')
28
m4_define(CF_keywd, `m4_ifdef([[CF_tok_$1]],,[[m4_define([[CF_tok_$1]],1)CF_handle_kw($1)]])')
29
m4_define(CF_KEYWORDS, `m4_define([[CF_toks]],[[]])CF_iterate([[CF_keywd]], [[$@]])m4_ifelse(CF_toks,,,%token[[]]CF_toks
30
)DNL')
31

    
32
# CLI commands generate keywords as well
33
m4_define(CF_CLI, `CF_KEYWORDS(m4_translit($1, [[ ]], [[,]]))
34
')
35

    
36
# Enums are translated to C initializers: use CF_ENUM(typename, prefix, values)
37
m4_define(CF_enum, `m4_divert(1){ "CF_enum_prefix[[]]$1", -((CF_enum_type<<16) | CF_enum_prefix[[]]$1), NULL },
38
m4_divert(-1)')
39
m4_define(CF_ENUM, `m4_define([[CF_enum_type]],$1)m4_define([[CF_enum_prefix]],$2)CF_iterate([[CF_enum]], [[m4_shift(m4_shift($@))]])DNL')
40

    
41
# After all configuration templates end, we generate the 
42
m4_m4wrap(`
43
m4_divert(0)
44
static struct keyword keyword_list[] = {
45
m4_undivert(1){ NULL, -1, NULL } };
46
')
47

    
48
# As we are processing C source, we must access all M4 primitives via
49
# m4_* and also set different quoting convention: `[[' and ']]'
50
m4_changequote([[,]])