squish.lua

Sat, 25 Jul 2009 22:13:34 +0100

author
Matthew Wild <mwild1@gmail.com>
date
Sat, 25 Jul 2009 22:13:34 +0100
changeset 15
2aa02b99d2af
parent 13
b93f52cbe253
child 16
aaf1b38007d8
permissions
-rwxr-xr-x

Restrict access to opts table from squishy files now that we have GetOption

0
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 #!/usr/bin/env lua
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 local short_opts = { v = "verbose", vv = "very_verbose", o = "output", q = "quiet", qq = "very_quiet" }
15
2aa02b99d2af Restrict access to opts table from squishy files now that we have GetOption
Matthew Wild <mwild1@gmail.com>
parents: 13
diff changeset
4 local opts = {};
0
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 for _, opt in ipairs(arg) do
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 if opt:match("^%-") then
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 local name = opt:match("^%-%-?([^%s=]+)()")
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 name = (short_opts[name] or name):gsub("%-+", "_");
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 if name:match("^no_") then
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 name = name:sub(4, -1);
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 opts[name] = false;
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 else
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 opts[name] = opt:match("=(.*)$") or true;
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 else
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 base_path = opt;
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 if opts.very_verbose then opts.verbose = true; end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 if opts.very_quiet then opts.quiet = true; end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 local noprint = function () end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 local print_err, print_info, print_verbose, print_debug = noprint, noprint, noprint, noprint;
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 if not opts.very_quiet then print_err = print; end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 if not opts.quiet then print_info = print; end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 if opts.verbose or opts.very_verbose then print_verbose = print; end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30 if opts.very_verbose then print_debug = print; end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31
4
9806107f59ea squish.lua: Use --enable-debug flag to decide whether to enable debug options
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
32 local enable_debug = opts.enable_debug;
0
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33
11
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
34 local modules, main_files, resources = {}, {}, {};
0
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 -- Functions to be called from squishy file --
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38 function Module(name)
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 local i = #modules+1;
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 modules[i] = { name = name, url = ___fetch_url };
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41 return function (path)
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 modules[i].path = path;
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45
11
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
46 function Resource(name, path)
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
47 local i = #resources+1;
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
48 resources[i] = { name = name, path = path or name };
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
49 return function (path)
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
50 resources[i].path = path;
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
51 end
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
52 end
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
53
0
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54 function AutoFetchURL(url)
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
55 ___fetch_url = url;
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
58 function Main(fn)
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
59 table.insert(main_files, fn);
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
60 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
61
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
62 function Output(fn)
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
63 out_fn = fn;
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
64 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
65
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66 function Option(name)
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67 if opts[name] == nil then
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68 opts[name] = true;
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69 return function (value)
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70 opts[name] = value;
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
71 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 else
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
73 return function () end;
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
74 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
75 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
76
13
b93f52cbe253 Add GetOption function for squishy files
Matthew Wild <mwild1@gmail.com>
parents: 11
diff changeset
77 function GetOption(name)
b93f52cbe253 Add GetOption function for squishy files
Matthew Wild <mwild1@gmail.com>
parents: 11
diff changeset
78 return opts[name:gsub('%-', '_')];
b93f52cbe253 Add GetOption function for squishy files
Matthew Wild <mwild1@gmail.com>
parents: 11
diff changeset
79 end
b93f52cbe253 Add GetOption function for squishy files
Matthew Wild <mwild1@gmail.com>
parents: 11
diff changeset
80
0
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
81 -- -- -- -- -- -- -- --- -- -- -- -- -- -- -- --
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
82
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
83 base_path = (base_path or "."):gsub("/$", "").."/"
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
84 squishy_file = base_path .. "squishy";
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
85 out_fn = opts.output or "squished.out.lua";
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
86
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
87 local ok, err = pcall(dofile, squishy_file);
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
88
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
89 if not ok then
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
90 print_err("Couldn't read squishy file: "..err);
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
91 os.exit(1);
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
92 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
93
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
94 local fetch = {};
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
95 function fetch.filesystem(path)
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
96 local f, err = io.open(path);
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
97 if not f then return false, err; end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
98
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
99 local data = f:read("*a");
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
100 f:close();
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
101
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
102 return data;
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
103 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
104
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
105 function fetch.http(url)
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
106 local http = require "socket.http";
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
107
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
108 local body, status = http.request(url);
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
109 if status == 200 then
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
110 return body;
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
111 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
112 return false, "HTTP status code: "..tostring(status);
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
113 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
114
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
115 print_info("Writing "..out_fn.."...");
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116 local f = io.open(out_fn, "w+");
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
117
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
118 if opts.executable then
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
119 f:write("#!/usr/bin/env lua\n");
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
120 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
121
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
122 if enable_debug then
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
123 f:write [[
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
124 local function ___rename_chunk(chunk, name)
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
125 if type(chunk) == "function" then
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
126 chunk = string.dump(chunk);
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
127 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
128 local intsize = chunk:sub(8,8):byte();
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
129 local b = { chunk:sub(13, 13+intsize-1):byte(1, intsize) };
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
130 local oldlen = 0;
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
131 for i = 1, #b do
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
132 oldlen = oldlen + b[i] * 2^((i-1)*8);
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
133 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
134
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
135 local newname = name.."\0";
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
136 local newlen = #newname;
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
137
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
138 local b = { };
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
139 for i=1,intsize do
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
140 b[i] = string.char(math.floor(newlen / 2^((i-1)*8)) % (2^(i*8)));
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
141 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
142
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
143 return loadstring(chunk:sub(1, 12)..table.concat(b)..newname
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
144 ..chunk:sub(13+intsize+oldlen, -1));
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
145 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
146 ]];
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
147 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
148
10
d5a4aabb104b Some logging level changes
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
149 print_verbose("Packing modules...");
0
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
150 for _, module in ipairs(modules) do
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
151 local modulename, path = module.name, base_path..module.path;
10
d5a4aabb104b Some logging level changes
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
152 print_debug("Packing "..modulename.." ("..path..")...");
0
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
153 local data, err = fetch.filesystem(path);
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
154 if (not data) and module.url then
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
155 print_debug("Fetching: ".. module.url:gsub("%?", module.path))
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
156 data, err = fetch.http(module.url:gsub("%?", module.path));
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
157 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
158 if data then
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
159 f:write("package.preload['", modulename, "'] = (function ()\n");
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
160 f:write(data);
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
161 f:write("end)\n");
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
162 if enable_debug then
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
163 f:write(string.format("package.preload[%q] = ___rename_chunk(package.preload[%q], %q);\n\n",
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
164 modulename, modulename, "@"..path));
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
165 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
166 else
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
167 print_err("Couldn't pack module '"..modulename.."': "..err);
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
168 os.exit(1);
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
169 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
170 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
171
11
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
172 if #resources > 0 then
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
173 print_verbose("Packing resources...")
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
174 f:write("do local resources = {};\n");
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
175 for _, resource in ipairs(resources) do
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
176 local name, path = resource.name, resource.path;
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
177 local res_file, err = io.open(base_path..path);
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
178 if not res_file then
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
179 print_err("Couldn't load resource: "..tostring(err));
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
180 os.exit(1);
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
181 end
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
182 local data = res_file:read("*a");
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
183 local maxequals = 0;
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
184 data:gsub("(=+)", function (equals_string) maxequals = math.max(maxequals, #equals_string); end);
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
185
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
186 f:write(("resources[%q] = ["):format(name), string.rep("=", maxequals+1), "[");
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
187 f:write(data);
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
188 f:write("]", string.rep("=", maxequals+1), "];");
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
189 end
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
190 f:write[[function require_resource(name) return resources[name] or error("resource '"..tostring(name).."' not found"); end end ]]
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
191 end
10bb5834c6db Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
192
0
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
193 print_debug("Finalising...")
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
194 for _, fn in pairs(main_files) do
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
195 local fin, err = io.open(base_path..fn);
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
196 if not fin then
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
197 print_err("Failed to open "..fn..": "..err);
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
198 os.exit(1);
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
199 else
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
200 f:write((fin:read("*a"):gsub("^#.-\n", "")));
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
201 fin:close();
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
202 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
203 end
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
204
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
205 f:close();
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
206
b119b560ca3d squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
207 print_info("OK!");

mercurial