make()
{
    mk_system build

    mk_program \
        PROGRAM="dceflex" \
        SOURCES="ccl.c dfa.c ecs.c gen.c initscan.c main.c misc.c nfa.c skel.c sym.c tblcmp.c yylex.c parse.c" \
        INCLUDEDIRS=". ../include" \
        DEPS="parse.h"

    mk_target \
        TARGET="parse.c" \
        DEPS="@${BISON}" \
        make_parse_c "&parse.c" "&parse.y"

    mk_target \
        TARGET="parse.h" \
        DEPS="$result"
}

make_parse_c()
{
    # $1 = output
    # $2 = input

    mk_msg_domain bison
    mk_msg "${1#$MK_OBJECT_DIR/}"

    mk_run_or_fail ${BISON} -o "$1.tmp" --defines="${1%.c}.h" "$2"
    sed '/extern char.*malloc/d' < "$1.tmp" > "$1" || mk_fail "could not run sed"
    mk_safe_rm "$1.tmp"
}
