
########################################
#
# Helper macros
#

#
# shiftn(num,list...)
#
# shift the list num times
#
define(`shiftn',`ifelse($1,0,`shift($*)',`shiftn(decr($1),shift(shift($*)))')')

#
# ifndef(expr,true_block,false_block)
#
# m4 does not have this.
#
define(`ifndef',`ifdef(`$1',`$3',`$2')')

#
# __endline__
#
# dummy macro to insert a newline.  used for 
# errprint, so the close parentheses can be
# indented correctly.
#
define(`__endline__',`
')

########################################
#
# refpolwarn(message)
#
# print a warning message
#
define(`refpolicywarn',`errprint(__file__:__line__: Warning: `$1'__endline__)')

########################################
#
# refpolerr(message)
#
# print an error message.  does not
# make anything fail.
#
define(`refpolicyerr',`errprint(__file__:__line__: Error: `$1'__endline__)')

########################################
#
# gen_user(username, prefix, role_set, mls_defaultlevel, mls_range)
#
define(`gen_user',`define(`gen_all_users', gen_all_users `dnl
user $1 roles { $3 }`'ifdef(`enable_mls', ` level $4 range $5')`';
')')

define(`gen_all_users',`')

########################################
#
# gen_context(context,mls_sensitivity,[mcs_categories])
#
define(`gen_context',`$1`'ifdef(`enable_mls',`:$2')`'')

define(`dflt_or_overr',`ifdef(`$1',$1,$2)')

########################################
#
# gen_bool(name,default_value)
#
define(`gen_bool',`
	bool $1 dflt_or_overr(`$1'_conf,$2);
')
