%language=ANSI-C
%enum
%struct-type
%readonly-tables
%define hash-function-name confitems_hash
%define lookup-function-name confitems_get
%define initializer-suffix ,0,0,NULL,NULL,NULL
%{
#include "confitems.h"
#include "conf.h"

#undef bool
#define ITEM_ENTRY(name, type, verify_fn) \
	offsetof(struct conf, name), confitem_parse_ ## type, \
	confitem_format_ ## type, verify_fn
#define ITEM(name, type) \
	ITEM_ENTRY(name, type, NULL)
#define ITEM_V(name, type, verification) \
	ITEM_ENTRY(name, type, confitem_verify_ ## verification)
%}
struct conf_item;
%%
base_dir,                   ITEM_V(base_dir, env_string, absolute_path)
cache_dir,                  ITEM(cache_dir, env_string)
cache_dir_levels,           ITEM_V(cache_dir_levels, unsigned, dir_levels)
compiler,                   ITEM(compiler, string)
compiler_check,             ITEM(compiler_check, string)
compression,                ITEM(compression, bool)
compression_level,          ITEM(compression_level, unsigned)
cpp_extension,              ITEM(cpp_extension, string)
debug,                      ITEM(debug, bool)
depend_mode,                ITEM(depend_mode, bool)
direct_mode,                ITEM(direct_mode, bool)
disable,                    ITEM(disable, bool)
extra_files_to_hash,        ITEM(extra_files_to_hash, env_string)
hard_link,                  ITEM(hard_link, bool)
hash_dir,                   ITEM(hash_dir, bool)
ignore_headers_in_manifest, ITEM(ignore_headers_in_manifest, env_string)
keep_comments_cpp,          ITEM(keep_comments_cpp, bool)
limit_multiple,             ITEM(limit_multiple, double)
log_file,                   ITEM(log_file, env_string)
max_files,                  ITEM(max_files, unsigned)
max_size,                   ITEM(max_size, size)
path,                       ITEM(path, env_string)
pch_external_checksum,      ITEM(pch_external_checksum, bool)
prefix_command,             ITEM(prefix_command, env_string)
prefix_command_cpp,         ITEM(prefix_command_cpp, env_string)
read_only,                  ITEM(read_only, bool)
read_only_direct,           ITEM(read_only_direct, bool)
recache,                    ITEM(recache, bool)
run_second_cpp,             ITEM(run_second_cpp, bool)
sloppiness,                 ITEM(sloppiness, sloppiness)
stats,                      ITEM(stats, bool)
temporary_dir,              ITEM(temporary_dir, env_string)
umask,                      ITEM(umask, umask)
unify,                      ITEM(unify, bool)
