lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


I'm just getting started doing my first real thing with Lua.

I'm creating a new software package management system; I think it's
time for something simpler than rpm.

Naturally, the first problem that has to be solved is the spec file
parser, and naturally I chose Lua for that:-).

Here's a sample spec file for my current prototype lashup:

    name = "bash";
    version = "2.05b";
    nv = name .. version; -- name-version, helper for below
    sf = nv .. ".tar.gz"; -- source filename, similarly
    url = "http://mirrors.kernel.org/gnu/"; .. name .. "/" .. sf;
    build = "tar xzvf " .. sf .. " && cd " .. nv .. [[ &&
        ./configure --enable-static-link --prefix=/usr --with-curses &&
        make && make prefix=$BPM_ROOT install
    ]];

The "nv" and "sv" variables aren't actually needed by the packaging
system, they're just there to make the url and build string building
less tedious.

This:

    url = "http://mirrors.kernel.org/gnu/"; .. name .. "/" .. name .. "-" ..
          version .. ".tar.gz";

I call tedious. And the build string gets even worse.

Would that I could do something like

    url = "http://mirrors.kernel.org/gnu/%{name}/%{name}-%{version}.tar.gz";;

(rpm syntax), or anything vaguely comparable. I'd really prefer that
over having to stop the string, use the concatenation operator, and
restart the string each time.

Does anybody have any brilliant hack for arranging for nice
generalized variable interpolation into strings? I can of course
take other approaches, e.g.

    name = "bash";
    version = "2.05b";
    nv = name .. version; -- name-version, helper for below
    sf = nv .. ".tar.gz"; -- source filename, similarly
    url = string.format("http://mirrors.kernel.org/gnu/%s/%s";, name, sf);
    build = string.format([[tar xzvf %s && cd %s &&
        ./configure --enable-static-link --prefix=/usr --with-curses &&
        make && make prefix=$BPM_ROOT install
    ]], sf, nv);

or explicitly invoking string.gsub, but all of these alternatives,
at least to my tastes, make the resulting spec file a bit more
opaque --- especially to people who aren't fluent in Lua.

-Bennett

Attachment: pgp4cS3qnbnn0.pgp
Description: PGP signature