@@ -22,7 +22,9 @@ def expand(str)
22
22
end
23
23
24
24
class ExtLibs
25
- def initialize
25
+ def initialize ( mode = :all , cache_dir : nil )
26
+ @mode = mode
27
+ @cache_dir = cache_dir
26
28
@colorize = Colorize . new
27
29
end
28
30
@@ -160,7 +162,78 @@ def do_command(mode, dest, url, cache_dir, chksums)
160
162
extracted
161
163
end
162
164
163
- def run ( argv )
165
+ def process ( list )
166
+ mode = @mode
167
+ cache_dir = @cache_dir
168
+ after_extract = ( mode == :all or mode == :patch )
169
+ success = true
170
+ if $VERBOSE
171
+ $stdout. puts "downloading for #{ list } "
172
+ $stdout. flush
173
+ end
174
+ vars = Vars . new
175
+ extracted = false
176
+ dest = File . dirname ( list )
177
+ url = chksums = nil
178
+ IO . foreach ( list ) do |line |
179
+ line . sub! ( /\s *#.*/ , '' )
180
+ if /^(\w +)\s *=\s *(.*)/ =~ line
181
+ vars [ $1] = vars . expand ( $2)
182
+ next
183
+ end
184
+ if chksums
185
+ chksums . concat ( line . split )
186
+ elsif /^\t / =~ line
187
+ if extracted and after_extract
188
+ patch , *args = line . split . map { |s | vars . expand ( s ) }
189
+ do_patch ( dest , patch , args )
190
+ end
191
+ next
192
+ elsif /^!\s *(?:chdir:\s *([^|\s ]+)\| \s *)?(.*)/ =~ line
193
+ if extracted and after_extract
194
+ command = vars . expand ( $2. strip )
195
+ chdir = $1 and chdir = vars . expand ( chdir )
196
+ do_exec ( command , chdir , dest )
197
+ end
198
+ next
199
+ elsif /->/ =~ line
200
+ if extracted and after_extract
201
+ link , file = $`. strip , $'. strip
202
+ do_link ( vars . expand ( link ) , vars . expand ( file ) , dest )
203
+ end
204
+ next
205
+ else
206
+ url , *chksums = line . split ( ' ' )
207
+ end
208
+ if chksums . last == '\\'
209
+ chksums . pop
210
+ next
211
+ end
212
+ unless url
213
+ chksums = nil
214
+ next
215
+ end
216
+ url = vars . expand ( url )
217
+ begin
218
+ extracted = do_command ( mode , dest , url , cache_dir , chksums )
219
+ rescue => e
220
+ warn e . full_message
221
+ success = false
222
+ end
223
+ url = chksums = nil
224
+ end
225
+ success
226
+ end
227
+
228
+ def process_under ( dir )
229
+ success = true
230
+ Dir . glob ( "#{ dir } /**/extlibs" ) do |list |
231
+ success &= process ( list )
232
+ end
233
+ success
234
+ end
235
+
236
+ def self . run ( argv )
164
237
cache_dir = nil
165
238
mode = :all
166
239
until argv . empty?
@@ -190,71 +263,10 @@ def run(argv)
190
263
argv . shift
191
264
end
192
265
193
- success = true
194
- argv . each do |dir |
195
- Dir . glob ( "#{ dir } /**/extlibs" ) do |list |
196
- if $VERBOSE
197
- $stdout. puts "downloading for #{ list } "
198
- $stdout. flush
199
- end
200
- vars = Vars . new
201
- extracted = false
202
- dest = File . dirname ( list )
203
- url = chksums = nil
204
- IO . foreach ( list ) do |line |
205
- line . sub! ( /\s *#.*/ , '' )
206
- if /^(\w +)\s *=\s *(.*)/ =~ line
207
- vars [ $1] = vars . expand ( $2)
208
- next
209
- end
210
- if chksums
211
- chksums . concat ( line . split )
212
- elsif /^\t / =~ line
213
- if extracted and ( mode == :all or mode == :patch )
214
- patch , *args = line . split . map { |s | vars . expand ( s ) }
215
- do_patch ( dest , patch , args )
216
- end
217
- next
218
- elsif /^!\s *(?:chdir:\s *([^|\s ]+)\| \s *)?(.*)/ =~ line
219
- if extracted and ( mode == :all or mode == :patch )
220
- command = vars . expand ( $2. strip )
221
- chdir = $1 and chdir = vars . expand ( chdir )
222
- do_exec ( command , chdir , dest )
223
- end
224
- next
225
- elsif /->/ =~ line
226
- if extracted and ( mode == :all or mode == :patch )
227
- link , file = $`. strip , $'. strip
228
- do_link ( vars . expand ( link ) , vars . expand ( file ) , dest )
229
- end
230
- next
231
- else
232
- url , *chksums = line . split ( ' ' )
233
- end
234
- if chksums . last == '\\'
235
- chksums . pop
236
- next
237
- end
238
- unless url
239
- chksums = nil
240
- next
241
- end
242
- url = vars . expand ( url )
243
- begin
244
- extracted = do_command ( mode , dest , url , cache_dir , chksums )
245
- rescue => e
246
- warn e . full_message
247
- success = false
248
- end
249
- url = chksums = nil
250
- end
251
- end
266
+ extlibs = new ( mode , cache_dir : cache_dir )
267
+ argv . inject ( true ) do |success , dir |
268
+ success & extlibs . process_under ( dir )
252
269
end
253
- success
254
- end
255
-
256
- def self . run ( argv )
257
- self . new . run ( argv )
258
270
end
259
271
end
260
272
0 commit comments