TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

After the latest update to MiKTeX 2.9 it seems that my luatex installation is broken. I tried to track the error and I am not sure if it is a bug or something else strange.

What happens is that the generated file lualibs.lua looks as follows:

--  This is file `lualibs.lua',
--  generated with the docstrip utility.
--  The original source files were:
--  lualibs.dtx  (with options: `lualibs')
--  This is a generated file.
--  Copyright (C) 2009 by PRAGMA ADE / ConTeXt Development Team
--  See ConTeXt's mreadme.pdf for the license.
--  This work consists of the main source file lualibs.dtx
--  and the derived file lualibs.lua.
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  By default, \identifier{lualibs} will not load the libraries individually.
  Instead, it includes two \emphasis{merged packages} that have been compiled
  from the original files.
  This is achieved by means of \identifier{mtx-package}, a script for bundling
  \LUA code shipped with \CONTEXT.
  This concatenates the code of several \LUA files into a single file that is
  both easier to distribute and loading (marginally) faster.
  \identifier{mtx-package} ensures that the code from each file gets its
  own closure and strips newlines and comments, resulting in a smaller payload.
  Another package that relies on it heavily is the font loader as contained in
  \identifier{luaotfload} and \identifier{luatex-fonts}.

  If \CONTEXT is installed on the system, the merge files can be created
  by running:

    mtxrun --script package --merge lualibs-basic.lua
    mtxrun --script package --merge lualibs-extended.lua

  Of course there is a make target for that:

    make merge
  will take care of assembling the packages from the files distributed with

  For this to work, the syntax of the \LUA file needs to be well-formed:
  files that should be merged must be included via a function
  It doesn’t matter if the function actually does something; a dummy will
  Also, the argument to \verb|loadmodule()| must be wrapped in parentheses.
  This rule is quite convenient, actually, since it allows excluding files
  from the merge while still using \verb|loadmodule()| consistently.

    loadmodule("my-lua-file.lua") -- <= will be merged
    loadmodule('my-2nd-file.lua') -- <= will be merged
    loadmodule "my-3rd-file.lua"  -- <= will be ignored

  Note that there is one exception to the packaging:
  \fileent{lualibs-util-jsn.lua} cannot be successfully packaged because
  it follows a different coding convention, returning a \LUA table on exit.
  Therefore, the file is loaded separately as part of the \identifier{extended}
  set like any other \LUA module.

-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
lualibs = lualibs or { }

lualibs.module_info = {
  name          = "lualibs",
  version       = 2.00,
  date          = "2013/04/30",
  description   = "ConTeXt Lua standard libraries.",
  author        = "Hans Hagen, PRAGMA-ADE, Hasselt NL & Elie Roux & Philipp Gesang",
  copyright     = "PRAGMA ADE / ConTeXt Development Team",
  license       = "See ConTeXt's mreadme.pdf for the license",

config           = config or { }
config.lualibs   = config.lualibs or { }

if config.lualibs.prefer_merged == nil then
  lualibs.prefer_merged = true
if config.lualibs.load_extended == nil then
  lualibs.load_extended = true
config.lualibs.verbose = config.lualibs.verbose == false

local dofile          = dofile
local kpsefind_file   = kpse.find_file
local stringformat    = string.format
local texiowrite_nl   = texio.write_nl

local find_file, error, warn, info
  local _error, _warn, _info
  if luatexbase and luatexbase.provides_module then
    _error, _warn, _info = luatexbase.provides_module(lualibs.module_info)
    _error, _warn, _info = texiowrite_nl, texiowrite_nl, texiowrite_nl

  if lualibs.verbose then
    error, warn, info = _error, _warn, _info
    local dummylogger = function ( ) end
    error, warn, info = _error, dummylogger, dummylogger
  lualibs.error, lualibs.warn, lualibs.info = error, warn, info

if luatexbase and luatexbase.find_file then
  find_file = luatexbase.find_file
  find_file = kpsefind_file

local loadmodule = loadmodule or function (name, t)
  if not t then t = "library" end
  local filepath  = find_file(name, "lua")
  if not filepath or filepath == "" then
    warn(stringformat("Could not locate %s “%s”.", t, name))
    return false
  return true

lualibs.loadmodule = loadmodule

if lualibs.basic_loaded ~= true then
  loadmodule"lualibs-compat.lua" --- restore stuff gone since v1.*

if  lualibs.load_extended   == true
and lualibs.extended_loaded ~= true then

--- This restores the default of loading everything should a package
--- have requested otherwise. Will be gone once there is a canonical
--- interface for parameterized loading of libraries.
lualibs.load_extended = true

-- vim:tw=71:sw=2:ts=2:expandtab

-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--  End of File `lualibs.lua'.

As far as I can see this is not a valid lua file and therefore everything that depends on this, such as mkluatexfontdb fails. I tried grabbing the current version of lualibs from CTAN and started tex lualibs.dtx but ended up with the same lualibs.lua file.

Is this a bug or something else?

share|improve this question

closed as too localized by topskip, egreg, mafp, Torbjørn T., Daniel May 8 '13 at 12:07

This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center.If this question can be reworded to fit the rules in the help center, please edit the question.

As far as I know there has been a problem in the last version uploaded to CTAN; a correction might already be in place. See this message on the TeX Live mailing list and the follow up to it. – egreg May 8 '13 at 10:57
@egreg: Thank you, than I will try to get an old version and wait for the update. – Alexander May 8 '13 at 11:04
Yes. I broke it. Sorry for that. A fixed package should be on its way since Monday but so far the CTAN mirrors only show the defective one. EDIT: you can get a snapshot of the current version from the github repo. – phg May 8 '13 at 11:28