boltbuild 0.1.0

BoltBuild is a programmable build system.
Documentation
---@type Context
local context = ...
context:load_tool('internal/module_core')

BoltFlex = {}

function BoltFlex.find_flex()
    if not context.env.FLEX then
        context:try('Looking for flex', function()
            local flex = context:find_program('flex')
            context.env.FLEX = flex
            if flex then
                context.env.FLEXFLAGS = { }
                return flex
            else
                error('flex not found')
            end
        end)
    end
end

context:command_driver('flex',
        'magenta',
        '${FLEX} ${FLEXFLAGS} -o ${TGT[0]} ${SRC[0]}',
        { 'c', 'cxx' })

BoltModule.register_extension('l,ll', function(generator, node, path)
    local out_node, directory = generator:make_build_node(node, path, 'src')
    if node:extension() == 'll' then
        out_node = out_node:change_ext('cc')
    else
        out_node = out_node:change_ext('c')
    end
    generator:declare_task('flex', { node }, { out_node })
    table.insert(generator.source, { directory, out_node })
end)