if not modules then modules = { } end modules ['luat-cnf'] = {
    version   = 1.001,
    comment   = "companion to luat-lib.mkiv",
    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
    copyright = "PRAGMA ADE / ConTeXt Development Team",
    license   = "see context related readme files"
}

local type, next, tostring, tonumber =  type, next, tostring, tonumber
local format, concat, find = string.format, table.concat, string.find

local allocate = utilities.storage.allocate

texconfig.kpse_init    = false
texconfig.shell_escape = 't'

luatex       = luatex or { }
local luatex = luatex

texconfig.error_line      =     79 --    79 -- obsolete
texconfig.half_error_line =     50 --    50 -- obsolete

texconfig.expand_depth    =  10000 -- 10000
texconfig.hash_extra      = 100000 --     0
texconfig.nest_size       =   1000 --    50
texconfig.max_in_open     =    500 --    15
texconfig.max_print_line  =  10000 --    79
texconfig.max_strings     = 500000 -- 15000
texconfig.param_size      =  25000 --    60
texconfig.save_size       =  50000 --  4000
texconfig.stack_size      =  10000 --   300

--~ local function initialize()
--~     local t, variable = allocate(), resolvers.variable
--~     for name, default in next, variablenames do
--~         local name = variablenames[i]
--~         local value = variable(name)
--~         value = tonumber(value)
--~         if not value or value == "" or value == 0 then
--~             value = default
--~         end
--~         texconfig[name], t[name] = value, value
--~     end
--~     initialize = nil
--~     return t
--~ end

--~ luatex.variables = initialize()

local stub = [[

-- checking

storage = storage or { }
luatex  = luatex  or { }

-- we provide our own file handling

texconfig.kpse_init    = false
texconfig.shell_escape = 't'

-- as soon as possible

luatex.starttime = os.gettimeofday()

-- this will happen after the format is loaded

function texconfig.init()

    -- development

    local builtin, globals = { }, { }

    libraries = { -- we set it her as we want libraries also 'indexed'
        basiclua = {
            "string", "table", "coroutine", "debug", "file", "io", "lpeg", "math", "os", "package",
        },
        basictex = { -- noad
            "callback", "font", "img", "lang", "lua", "node", "pdf", "status", "tex", "texconfig", "texio", "token",
        },
        extralua = {
            "gzip",  "zip", "zlib", "lfs", "ltn12", "mime", "socket", "md5", "profiler", "unicode", "utf",
        },
        extratex = {
            "epdf", "fontloader", "kpse", "mplib",
        },
        obsolete = {
            "fontforge", -- can be filled by luat-log
            "kpse",
        },
        builtin = builtin, -- to be filled
        globals = globals, -- to be filled
    }

    for k, v in next, _G do
        globals[k] = tostring(v)
    end

    local function collect(t)
        local lib = { }
        for k, v in next, t do
            local keys = { }
            local gv = _G[v]
            if type(gv) == "table" then
                for k, v in next, gv do
                    keys[k] = tostring(v) -- true -- by tostring we cannot call overloades functions (security)
                end
            end
            lib[v] = keys
            builtin[v] = keys
        end
        return lib
    end

    libraries.basiclua = collect(libraries.basiclua)
    libraries.basictex = collect(libraries.basictex)
    libraries.extralua = collect(libraries.extralua)
    libraries.extratex = collect(libraries.extratex)
    libraries.obsolete = collect(libraries.obsolete)

    -- shortcut and helper

    local function init(start)
        local b = lua.bytecode
        local i = start
        while b[i] do
            b[i]() ;
            b[i] = nil ;
            i = i + 1
         -- collectgarbage('step')
        end
        return i - start
    end

    -- the stored tables and modules

    storage.noftables  = init(0)
    storage.nofmodules = init(%s)

end

-- we provide a qualified path

callback.register('find_format_file',function(name)
    texconfig.formatname = name
    return name
end)

-- done, from now on input and callbacks are internal
]]


local variablenames = {
    "error_line", "half_error_line",
    "expand_depth", "hash_extra", "nest_size",
    "max_in_open", "max_print_line", "max_strings",
    "param_size", "save_size", "stack_size",
}

local function makestub()
    name = name or (environment.jobname .. ".lui")
    firsttable = firsttable or lua.firstbytecode
    local t = {
        "-- this file is generated, don't change it\n",
        "-- configuration (can be overloaded later)\n"
    }
    for _,v in next, variablenames do
        local tv = texconfig[v]
        if tv and tv ~= "" then
            t[#t+1] = format("texconfig.%s=%s",v,tv)
        end
    end
    io.savedata(name,format("%s\n\n%s",concat(t,"\n"),format(stub,firsttable)))
end

lua.registerfinalizer(makestub,"create stub file")
