[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Embedding scripts in executable
- From: Ross Berteig <Ross@...>
- Date: Tue, 27 Sep 2011 17:49:48 -0700
At 03:50 PM 9/27/2011, Tim Caswell wrote:
>....
>I have a folder full of lua modules (written in lua) and I want
>them embedded in my binary at compile/link time in such a way
>that the require system can find them.
>
>Is there a cross-platform way to embed these scripts and make
>them accessible to require?
I'm using Mathew Wild's Squish[1] along with luac and bin2c to
accomplish this in one project. Squish collects (and can also
discard whitespace and comments, and even GZip) all the module
sources into one amalgamation .lua file that if executed
preloads all the modules. I then use luac and bin2c to turn it
into a constant array and code to load and execute it. That file
is #included inline at a suitable point early in the program
startup. After that point, all of the modules are sitting in
package.preload and require just does the right thing. It turned
a small utility that had been one .exe along with ten .lua files
into a single .exe file, and made the downstream user much happier.
[1] http://matthewwild.co.uk/projects/squish/home
I ended up with a single .exe file because this utility
statically linked its lua core and is not expected or required
to be extensible with DLLs. Note that Squish cannot do anything
about binary modules or supporting DLLs.
>I'm using luajit, but I think this question is generic.
I haven't tried this with LuaJIT, but I don't think there's too
much magic going on in the Squished output. Squish is open
source, so if there is an issue there is a chance it can be patched.
Ross Berteig Ross@CheshireEng.com
Cheshire Engineering Corp. http://www.CheshireEng.com/