Thu, 08 Jul 2010 01:11:40 +0100
make_squishy: Fix traceback when file doesn't contain any path component
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 | |
46 | 3 | local short_opts = { v = "verbose", vv = "very_verbose", o = "output", q = "quiet", qq = "very_quiet", g = "debug" } |
16
aaf1b38007d8
Add --use-http option, and default to off
Matthew Wild <mwild1@gmail.com>
parents:
15
diff
changeset
|
4 | local opts = { use_http = false }; |
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 | |
29
0737a3bcf10b
Map print() to print_verbose()
Matthew Wild <mwild1@gmail.com>
parents:
28
diff
changeset
|
32 | print = print_verbose; |
0737a3bcf10b
Map print() to print_verbose()
Matthew Wild <mwild1@gmail.com>
parents:
28
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) |
37
cb8b48b08e1e
Only add a module to the list once, no matter how many times it is added in the squishy file
Matthew Wild <mwild1@gmail.com>
parents:
34
diff
changeset
|
39 | if modules[name] then |
cb8b48b08e1e
Only add a module to the list once, no matter how many times it is added in the squishy file
Matthew Wild <mwild1@gmail.com>
parents:
34
diff
changeset
|
40 | print_verbose("Ignoring duplicate module definition for "..name); |
cb8b48b08e1e
Only add a module to the list once, no matter how many times it is added in the squishy file
Matthew Wild <mwild1@gmail.com>
parents:
34
diff
changeset
|
41 | return function () end |
cb8b48b08e1e
Only add a module to the list once, no matter how many times it is added in the squishy file
Matthew Wild <mwild1@gmail.com>
parents:
34
diff
changeset
|
42 | end |
0
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 | local i = #modules+1; |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 | modules[i] = { name = name, url = ___fetch_url }; |
37
cb8b48b08e1e
Only add a module to the list once, no matter how many times it is added in the squishy file
Matthew Wild <mwild1@gmail.com>
parents:
34
diff
changeset
|
45 | modules[name] = modules[i]; |
0
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 | return function (path) |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 | modules[i].path = path; |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 | end |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 | end |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 | |
11
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
51 | function Resource(name, path) |
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
52 | local i = #resources+1; |
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
53 | resources[i] = { name = name, path = path or name }; |
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
54 | return function (path) |
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
55 | resources[i].path = path; |
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
56 | end |
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
57 | end |
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
58 | |
0
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 | function AutoFetchURL(url) |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 | ___fetch_url = url; |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 | end |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 | |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 | function Main(fn) |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 | 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
|
65 | end |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 | |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 | function Output(fn) |
55
feb7832393cd
Don't let squishy file override the user's specified output file, if one
Matthew Wild <mwild1@gmail.com>
parents:
54
diff
changeset
|
68 | if opts.output == nil then |
feb7832393cd
Don't let squishy file override the user's specified output file, if one
Matthew Wild <mwild1@gmail.com>
parents:
54
diff
changeset
|
69 | out_fn = fn; |
feb7832393cd
Don't let squishy file override the user's specified output file, if one
Matthew Wild <mwild1@gmail.com>
parents:
54
diff
changeset
|
70 | end |
0
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 | |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 | function Option(name) |
31
84b653f78e5f
Rewrite '-' to '_' in Option command
Matthew Wild <mwild1@gmail.com>
parents:
29
diff
changeset
|
74 | name = name:gsub("%-", "_"); |
0
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 | 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
|
76 | opts[name] = true; |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 | return function (value) |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 | opts[name] = value; |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 | end |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 | else |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
81 | return function () end; |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 | end |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 | end |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 | |
13
b93f52cbe253
Add GetOption function for squishy files
Matthew Wild <mwild1@gmail.com>
parents:
11
diff
changeset
|
85 | function GetOption(name) |
b93f52cbe253
Add GetOption function for squishy files
Matthew Wild <mwild1@gmail.com>
parents:
11
diff
changeset
|
86 | return opts[name:gsub('%-', '_')]; |
b93f52cbe253
Add GetOption function for squishy files
Matthew Wild <mwild1@gmail.com>
parents:
11
diff
changeset
|
87 | end |
b93f52cbe253
Add GetOption function for squishy files
Matthew Wild <mwild1@gmail.com>
parents:
11
diff
changeset
|
88 | |
23
e3b923ccadb1
Support for Message and Error in squishy files to show messages to the user, and Exit to halt squishing
Matthew Wild <mwild1@gmail.com>
parents:
22
diff
changeset
|
89 | function Message(message) |
24
73ac55bcc19a
Make Message and Error commands obey user's verbosity options
Matthew Wild <mwild1@gmail.com>
parents:
23
diff
changeset
|
90 | if not opts.quiet then |
73ac55bcc19a
Make Message and Error commands obey user's verbosity options
Matthew Wild <mwild1@gmail.com>
parents:
23
diff
changeset
|
91 | print_info(message); |
73ac55bcc19a
Make Message and Error commands obey user's verbosity options
Matthew Wild <mwild1@gmail.com>
parents:
23
diff
changeset
|
92 | end |
23
e3b923ccadb1
Support for Message and Error in squishy files to show messages to the user, and Exit to halt squishing
Matthew Wild <mwild1@gmail.com>
parents:
22
diff
changeset
|
93 | end |
e3b923ccadb1
Support for Message and Error in squishy files to show messages to the user, and Exit to halt squishing
Matthew Wild <mwild1@gmail.com>
parents:
22
diff
changeset
|
94 | |
e3b923ccadb1
Support for Message and Error in squishy files to show messages to the user, and Exit to halt squishing
Matthew Wild <mwild1@gmail.com>
parents:
22
diff
changeset
|
95 | function Error(message) |
24
73ac55bcc19a
Make Message and Error commands obey user's verbosity options
Matthew Wild <mwild1@gmail.com>
parents:
23
diff
changeset
|
96 | if not opts.very_quiet then |
73ac55bcc19a
Make Message and Error commands obey user's verbosity options
Matthew Wild <mwild1@gmail.com>
parents:
23
diff
changeset
|
97 | print_err(message); |
73ac55bcc19a
Make Message and Error commands obey user's verbosity options
Matthew Wild <mwild1@gmail.com>
parents:
23
diff
changeset
|
98 | end |
23
e3b923ccadb1
Support for Message and Error in squishy files to show messages to the user, and Exit to halt squishing
Matthew Wild <mwild1@gmail.com>
parents:
22
diff
changeset
|
99 | end |
e3b923ccadb1
Support for Message and Error in squishy files to show messages to the user, and Exit to halt squishing
Matthew Wild <mwild1@gmail.com>
parents:
22
diff
changeset
|
100 | |
e3b923ccadb1
Support for Message and Error in squishy files to show messages to the user, and Exit to halt squishing
Matthew Wild <mwild1@gmail.com>
parents:
22
diff
changeset
|
101 | function Exit() |
e3b923ccadb1
Support for Message and Error in squishy files to show messages to the user, and Exit to halt squishing
Matthew Wild <mwild1@gmail.com>
parents:
22
diff
changeset
|
102 | os.exit(1); |
e3b923ccadb1
Support for Message and Error in squishy files to show messages to the user, and Exit to halt squishing
Matthew Wild <mwild1@gmail.com>
parents:
22
diff
changeset
|
103 | end |
0
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 | |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
106 | 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
|
107 | squishy_file = base_path .. "squishy"; |
25
a4972a690064
Complain if output file not specified, or if squish would generate an empty file
Matthew Wild <mwild1@gmail.com>
parents:
24
diff
changeset
|
108 | out_fn = opts.output; |
0
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
109 | |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
110 | 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
|
111 | |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
112 | if not ok then |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
113 | 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
|
114 | os.exit(1); |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
115 | end |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
116 | |
25
a4972a690064
Complain if output file not specified, or if squish would generate an empty file
Matthew Wild <mwild1@gmail.com>
parents:
24
diff
changeset
|
117 | if not out_fn then |
a4972a690064
Complain if output file not specified, or if squish would generate an empty file
Matthew Wild <mwild1@gmail.com>
parents:
24
diff
changeset
|
118 | print_err("No output file specified by user or squishy file"); |
a4972a690064
Complain if output file not specified, or if squish would generate an empty file
Matthew Wild <mwild1@gmail.com>
parents:
24
diff
changeset
|
119 | os.exit(1); |
a4972a690064
Complain if output file not specified, or if squish would generate an empty file
Matthew Wild <mwild1@gmail.com>
parents:
24
diff
changeset
|
120 | elseif #main_files == 0 and #modules == 0 and #resources == 0 then |
a4972a690064
Complain if output file not specified, or if squish would generate an empty file
Matthew Wild <mwild1@gmail.com>
parents:
24
diff
changeset
|
121 | print_err("No files, modules or resources. Not going to generate an empty file."); |
a4972a690064
Complain if output file not specified, or if squish would generate an empty file
Matthew Wild <mwild1@gmail.com>
parents:
24
diff
changeset
|
122 | os.exit(1); |
a4972a690064
Complain if output file not specified, or if squish would generate an empty file
Matthew Wild <mwild1@gmail.com>
parents:
24
diff
changeset
|
123 | end |
a4972a690064
Complain if output file not specified, or if squish would generate an empty file
Matthew Wild <mwild1@gmail.com>
parents:
24
diff
changeset
|
124 | |
0
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
125 | local fetch = {}; |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
126 | function fetch.filesystem(path) |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
127 | 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
|
128 | 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
|
129 | |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
130 | 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
|
131 | f:close(); |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
132 | |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
133 | return data; |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
134 | end |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
135 | |
16
aaf1b38007d8
Add --use-http option, and default to off
Matthew Wild <mwild1@gmail.com>
parents:
15
diff
changeset
|
136 | if opts.use_http then |
aaf1b38007d8
Add --use-http option, and default to off
Matthew Wild <mwild1@gmail.com>
parents:
15
diff
changeset
|
137 | function fetch.http(url) |
aaf1b38007d8
Add --use-http option, and default to off
Matthew Wild <mwild1@gmail.com>
parents:
15
diff
changeset
|
138 | local http = require "socket.http"; |
aaf1b38007d8
Add --use-http option, and default to off
Matthew Wild <mwild1@gmail.com>
parents:
15
diff
changeset
|
139 | |
aaf1b38007d8
Add --use-http option, and default to off
Matthew Wild <mwild1@gmail.com>
parents:
15
diff
changeset
|
140 | local body, status = http.request(url); |
aaf1b38007d8
Add --use-http option, and default to off
Matthew Wild <mwild1@gmail.com>
parents:
15
diff
changeset
|
141 | if status == 200 then |
aaf1b38007d8
Add --use-http option, and default to off
Matthew Wild <mwild1@gmail.com>
parents:
15
diff
changeset
|
142 | return body; |
aaf1b38007d8
Add --use-http option, and default to off
Matthew Wild <mwild1@gmail.com>
parents:
15
diff
changeset
|
143 | end |
aaf1b38007d8
Add --use-http option, and default to off
Matthew Wild <mwild1@gmail.com>
parents:
15
diff
changeset
|
144 | return false, "HTTP status code: "..tostring(status); |
0
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
145 | end |
16
aaf1b38007d8
Add --use-http option, and default to off
Matthew Wild <mwild1@gmail.com>
parents:
15
diff
changeset
|
146 | else |
aaf1b38007d8
Add --use-http option, and default to off
Matthew Wild <mwild1@gmail.com>
parents:
15
diff
changeset
|
147 | function fetch.http(url) |
aaf1b38007d8
Add --use-http option, and default to off
Matthew Wild <mwild1@gmail.com>
parents:
15
diff
changeset
|
148 | return false, "Module not found. Re-squish with --use-http option to fetch it from "..url; |
aaf1b38007d8
Add --use-http option, and default to off
Matthew Wild <mwild1@gmail.com>
parents:
15
diff
changeset
|
149 | end |
0
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
150 | end |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
151 | |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
152 | print_info("Writing "..out_fn.."..."); |
32
d78440c40faa
Warn when output file not writeable
Matthew Wild <mwild1@gmail.com>
parents:
31
diff
changeset
|
153 | local f, err = io.open(out_fn, "w+"); |
d78440c40faa
Warn when output file not writeable
Matthew Wild <mwild1@gmail.com>
parents:
31
diff
changeset
|
154 | if not f then |
d78440c40faa
Warn when output file not writeable
Matthew Wild <mwild1@gmail.com>
parents:
31
diff
changeset
|
155 | print_err("Couldn't open output file: "..tostring(err)); |
d78440c40faa
Warn when output file not writeable
Matthew Wild <mwild1@gmail.com>
parents:
31
diff
changeset
|
156 | os.exit(1); |
d78440c40faa
Warn when output file not writeable
Matthew Wild <mwild1@gmail.com>
parents:
31
diff
changeset
|
157 | end |
0
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
158 | |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
159 | if opts.executable then |
28
99ec02c56716
Allow user or squishy file to specify custom shebang
Matthew Wild <mwild1@gmail.com>
parents:
25
diff
changeset
|
160 | if opts.executable == true then |
99ec02c56716
Allow user or squishy file to specify custom shebang
Matthew Wild <mwild1@gmail.com>
parents:
25
diff
changeset
|
161 | f:write("#!/usr/bin/env lua\n"); |
99ec02c56716
Allow user or squishy file to specify custom shebang
Matthew Wild <mwild1@gmail.com>
parents:
25
diff
changeset
|
162 | else |
99ec02c56716
Allow user or squishy file to specify custom shebang
Matthew Wild <mwild1@gmail.com>
parents:
25
diff
changeset
|
163 | f:write(opts.executable, "\n"); |
99ec02c56716
Allow user or squishy file to specify custom shebang
Matthew Wild <mwild1@gmail.com>
parents:
25
diff
changeset
|
164 | end |
0
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 | |
39
1d2cca116cce
Rename --enable-debug option to --debug
Matthew Wild <mwild1@gmail.com>
parents:
38
diff
changeset
|
167 | if opts.debug then |
34 | 168 | f:write(require_resource("squish.debug")); |
0
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 | |
38
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
171 | print_verbose("Resolving modules..."); |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
172 | do |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
173 | local LUA_DIRSEP = package.config:sub(1,1); |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
174 | local LUA_PATH_MARK = package.config:sub(5,5); |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
175 | |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
176 | local package_path = package.path:gsub("[^;]+", function (path) |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
177 | if not path:match("^%"..LUA_DIRSEP) then |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
178 | return base_path..path; |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
179 | end |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
180 | end):gsub("/%./", "/"); |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
181 | local package_cpath = package.cpath:gsub("[^;]+", function (path) |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
182 | if not path:match("^%"..LUA_DIRSEP) then |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
183 | return base_path..path; |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
184 | end |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
185 | end):gsub("/%./", "/"); |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
186 | |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
187 | function resolve_module(name, path) |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
188 | name = name:gsub("%.", LUA_DIRSEP); |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
189 | for c in path:gmatch("[^;]+") do |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
190 | c = c:gsub("%"..LUA_PATH_MARK, name); |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
191 | print_debug("Looking for "..c) |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
192 | local f = io.open(c); |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
193 | if f then |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
194 | print_debug("Found!"); |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
195 | f:close(); |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
196 | return c; |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
197 | end |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
198 | end |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
199 | return nil; -- not found |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
200 | end |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
201 | |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
202 | for i, module in ipairs(modules) do |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
203 | if not module.path then |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
204 | module.path = resolve_module(module.name, package_path); |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
205 | if not module.path then |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
206 | print_err("Couldn't resolve module: "..module.name); |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
207 | else |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
208 | -- Strip base_path from resolved path |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
209 | module.path = module.path:gsub("^"..base_path:gsub("%p", "%%%1"), ""); |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
210 | end |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
211 | end |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
212 | end |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
213 | end |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
214 | |
903128a42604
Support for resolving the paths of modules when they are not explicitly specified
Matthew Wild <mwild1@gmail.com>
parents:
37
diff
changeset
|
215 | |
10 | 216 | 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
|
217 | 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
|
218 | local modulename, path = module.name, base_path..module.path; |
10 | 219 | 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
|
220 | 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
|
221 | 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
|
222 | 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
|
223 | 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
|
224 | end |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
225 | if data then |
21
27c2e279f0f3
Fix to work with modules which call module(...)
Matthew Wild <mwild1@gmail.com>
parents:
20
diff
changeset
|
226 | f:write("package.preload['", modulename, "'] = (function (...)\n"); |
0
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
227 | f:write(data); |
58
17121881cbf7
squish: Insert a space before ending our wrapper function, in case the module doesn't end with whitespace already
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
228 | f:write(" end)\n"); |
39
1d2cca116cce
Rename --enable-debug option to --debug
Matthew Wild <mwild1@gmail.com>
parents:
38
diff
changeset
|
229 | if opts.debug then |
34 | 230 | f:write(string.format("package.preload[%q] = ___adjust_chunk(package.preload[%q], %q);\n\n", |
0
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
231 | modulename, modulename, "@"..path)); |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
232 | end |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
233 | else |
67
2fc48318b8bb
squish: Handle nil errors when can't pack a module
Matthew Wild <mwild1@gmail.com>
parents:
58
diff
changeset
|
234 | print_err("Couldn't pack module '"..modulename.."': "..(err or "unknown error... path to module file correct?")); |
0
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
235 | os.exit(1); |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
236 | end |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
237 | end |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
238 | |
11
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
239 | if #resources > 0 then |
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
240 | print_verbose("Packing resources...") |
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
241 | f:write("do local resources = {};\n"); |
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
242 | for _, resource in ipairs(resources) do |
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
243 | local name, path = resource.name, resource.path; |
53
bd189ae0de00
Fixes for handling binary resources
Matthew Wild <mwild1@gmail.com>
parents:
46
diff
changeset
|
244 | local res_file, err = io.open(base_path..path, "rb"); |
11
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
245 | if not res_file then |
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
246 | print_err("Couldn't load resource: "..tostring(err)); |
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
247 | os.exit(1); |
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
248 | end |
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
249 | local data = res_file:read("*a"); |
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
250 | local maxequals = 0; |
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
251 | 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
|
252 | |
53
bd189ae0de00
Fixes for handling binary resources
Matthew Wild <mwild1@gmail.com>
parents:
46
diff
changeset
|
253 | f:write(("resources[%q] = %q"):format(name, data)); |
bd189ae0de00
Fixes for handling binary resources
Matthew Wild <mwild1@gmail.com>
parents:
46
diff
changeset
|
254 | --[[ f:write(("resources[%q] = ["):format(name), string.rep("=", maxequals+1), "["); |
11
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
255 | f:write(data); |
53
bd189ae0de00
Fixes for handling binary resources
Matthew Wild <mwild1@gmail.com>
parents:
46
diff
changeset
|
256 | f:write("]", string.rep("=", maxequals+1), "];"); ]] |
11
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
257 | end |
41
4ff9ecb6f1f6
Rename --enable-virtual-io to --virtual-io
Matthew Wild <mwild1@gmail.com>
parents:
39
diff
changeset
|
258 | if opts.virtual_io then |
19
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
16
diff
changeset
|
259 | local vio = require_resource("vio"); |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
16
diff
changeset
|
260 | if not vio then |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
16
diff
changeset
|
261 | print_err("Virtual IO requested but is not enabled in this build of squish"); |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
16
diff
changeset
|
262 | else |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
16
diff
changeset
|
263 | -- Insert vio library |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
16
diff
changeset
|
264 | f:write(vio, "\n") |
54
90bf9ea1aaf0
squish.lua: Small fix to comment
Matthew Wild <mwild1@gmail.com>
parents:
53
diff
changeset
|
265 | -- Override standard functions to use vio if opening a resource |
20
1766b5a287e1
Add io.lines support for the virtual io
Matthew Wild <mwild1@gmail.com>
parents:
19
diff
changeset
|
266 | f:write[[local io_open, io_lines = io.open, io.lines; function io.open(fn, mode) |
19
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
16
diff
changeset
|
267 | if not resources[fn] then |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
16
diff
changeset
|
268 | return io_open(fn, mode); |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
16
diff
changeset
|
269 | else |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
16
diff
changeset
|
270 | return vio.open(resources[fn]); |
20
1766b5a287e1
Add io.lines support for the virtual io
Matthew Wild <mwild1@gmail.com>
parents:
19
diff
changeset
|
271 | end end |
1766b5a287e1
Add io.lines support for the virtual io
Matthew Wild <mwild1@gmail.com>
parents:
19
diff
changeset
|
272 | function io.lines(fn) |
1766b5a287e1
Add io.lines support for the virtual io
Matthew Wild <mwild1@gmail.com>
parents:
19
diff
changeset
|
273 | if not resources[fn] then |
1766b5a287e1
Add io.lines support for the virtual io
Matthew Wild <mwild1@gmail.com>
parents:
19
diff
changeset
|
274 | return io_lines(fn); |
1766b5a287e1
Add io.lines support for the virtual io
Matthew Wild <mwild1@gmail.com>
parents:
19
diff
changeset
|
275 | else |
1766b5a287e1
Add io.lines support for the virtual io
Matthew Wild <mwild1@gmail.com>
parents:
19
diff
changeset
|
276 | return vio.open(resources[fn]):lines() |
22
cb14d8c0d0f7
Add support for virtual IO in dofile and loadfile
Matthew Wild <mwild1@gmail.com>
parents:
21
diff
changeset
|
277 | end end |
cb14d8c0d0f7
Add support for virtual IO in dofile and loadfile
Matthew Wild <mwild1@gmail.com>
parents:
21
diff
changeset
|
278 | local _dofile = dofile; |
cb14d8c0d0f7
Add support for virtual IO in dofile and loadfile
Matthew Wild <mwild1@gmail.com>
parents:
21
diff
changeset
|
279 | function dofile(fn) |
cb14d8c0d0f7
Add support for virtual IO in dofile and loadfile
Matthew Wild <mwild1@gmail.com>
parents:
21
diff
changeset
|
280 | if not resources[fn] then |
cb14d8c0d0f7
Add support for virtual IO in dofile and loadfile
Matthew Wild <mwild1@gmail.com>
parents:
21
diff
changeset
|
281 | return _dofile(fn); |
cb14d8c0d0f7
Add support for virtual IO in dofile and loadfile
Matthew Wild <mwild1@gmail.com>
parents:
21
diff
changeset
|
282 | else |
cb14d8c0d0f7
Add support for virtual IO in dofile and loadfile
Matthew Wild <mwild1@gmail.com>
parents:
21
diff
changeset
|
283 | return assert(loadstring(resources[fn]))(); |
cb14d8c0d0f7
Add support for virtual IO in dofile and loadfile
Matthew Wild <mwild1@gmail.com>
parents:
21
diff
changeset
|
284 | end end |
cb14d8c0d0f7
Add support for virtual IO in dofile and loadfile
Matthew Wild <mwild1@gmail.com>
parents:
21
diff
changeset
|
285 | local _loadfile = loadfile; |
cb14d8c0d0f7
Add support for virtual IO in dofile and loadfile
Matthew Wild <mwild1@gmail.com>
parents:
21
diff
changeset
|
286 | function loadfile(fn) |
cb14d8c0d0f7
Add support for virtual IO in dofile and loadfile
Matthew Wild <mwild1@gmail.com>
parents:
21
diff
changeset
|
287 | if not resources[fn] then |
cb14d8c0d0f7
Add support for virtual IO in dofile and loadfile
Matthew Wild <mwild1@gmail.com>
parents:
21
diff
changeset
|
288 | return _loadfile(fn); |
cb14d8c0d0f7
Add support for virtual IO in dofile and loadfile
Matthew Wild <mwild1@gmail.com>
parents:
21
diff
changeset
|
289 | else |
cb14d8c0d0f7
Add support for virtual IO in dofile and loadfile
Matthew Wild <mwild1@gmail.com>
parents:
21
diff
changeset
|
290 | return loadstring(resources[fn], "@"..fn); |
cb14d8c0d0f7
Add support for virtual IO in dofile and loadfile
Matthew Wild <mwild1@gmail.com>
parents:
21
diff
changeset
|
291 | end end ]] |
19
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
16
diff
changeset
|
292 | end |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
16
diff
changeset
|
293 | end |
11
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
294 | 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
|
295 | end |
10bb5834c6db
Support for adding 'resources'
Matthew Wild <mwild1@gmail.com>
parents:
10
diff
changeset
|
296 | |
0
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
297 | print_debug("Finalising...") |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
298 | 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
|
299 | 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
|
300 | if not fin then |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
301 | 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
|
302 | os.exit(1); |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
303 | else |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
304 | 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
|
305 | fin:close(); |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
306 | end |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
307 | end |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
308 | |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
309 | f:close(); |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
310 | |
b119b560ca3d
squish, because libraries don't have to be tricky to package!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
311 | print_info("OK!"); |