squish.lua

changeset 34
0e34461ab2a6
parent 32
d78440c40faa
child 37
cb8b48b08e1e
equal deleted inserted replaced
33:575e8a530f30 34:0e34461ab2a6
158 f:write(opts.executable, "\n"); 158 f:write(opts.executable, "\n");
159 end 159 end
160 end 160 end
161 161
162 if enable_debug then 162 if enable_debug then
163 f:write [[ 163 f:write(require_resource("squish.debug"));
164 local function ___rename_chunk(chunk, name)
165 if type(chunk) == "function" then
166 chunk = string.dump(chunk);
167 end
168 local intsize = chunk:sub(8,8):byte();
169 local b = { chunk:sub(13, 13+intsize-1):byte(1, intsize) };
170 local oldlen = 0;
171 for i = 1, #b do
172 oldlen = oldlen + b[i] * 2^((i-1)*8);
173 end
174
175 local newname = name.."\0";
176 local newlen = #newname;
177
178 local b = { };
179 for i=1,intsize do
180 b[i] = string.char(math.floor(newlen / 2^((i-1)*8)) % (2^(i*8)));
181 end
182
183 return loadstring(chunk:sub(1, 12)..table.concat(b)..newname
184 ..chunk:sub(13+intsize+oldlen, -1));
185 end
186 ]];
187 end 164 end
188 165
189 print_verbose("Packing modules..."); 166 print_verbose("Packing modules...");
190 for _, module in ipairs(modules) do 167 for _, module in ipairs(modules) do
191 local modulename, path = module.name, base_path..module.path; 168 local modulename, path = module.name, base_path..module.path;
198 if data then 175 if data then
199 f:write("package.preload['", modulename, "'] = (function (...)\n"); 176 f:write("package.preload['", modulename, "'] = (function (...)\n");
200 f:write(data); 177 f:write(data);
201 f:write("end)\n"); 178 f:write("end)\n");
202 if enable_debug then 179 if enable_debug then
203 f:write(string.format("package.preload[%q] = ___rename_chunk(package.preload[%q], %q);\n\n", 180 f:write(string.format("package.preload[%q] = ___adjust_chunk(package.preload[%q], %q);\n\n",
204 modulename, modulename, "@"..path)); 181 modulename, modulename, "@"..path));
205 end 182 end
206 else 183 else
207 print_err("Couldn't pack module '"..modulename.."': "..err); 184 print_err("Couldn't pack module '"..modulename.."': "..err);
208 os.exit(1); 185 os.exit(1);

mercurial