rubytree 0.9.5 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/setup.rb CHANGED
@@ -8,21 +8,21 @@
8
8
  # the GNU LGPL, Lesser General Public License version 2.1.
9
9
  #
10
10
 
11
- unless Enumerable.method_defined?(:map) # Ruby 1.4.6
11
+ unless Enumerable.method_defined?(:map) # Ruby 1.4.6
12
12
  module Enumerable
13
13
  alias map collect
14
14
  end
15
15
  end
16
16
 
17
- unless File.respond_to?(:read) # Ruby 1.6
17
+ unless File.respond_to?(:read) # Ruby 1.6
18
18
  def File.read(fname)
19
- open(fname) {|f|
19
+ open(fname) do |f|
20
20
  return f.read
21
- }
21
+ end
22
22
  end
23
23
  end
24
24
 
25
- unless Errno.const_defined?(:ENOTEMPTY) # Windows?
25
+ unless Errno.const_defined?(:ENOTEMPTY) # Windows?
26
26
  module Errno
27
27
  class ENOTEMPTY
28
28
  # We do not raise this exception, implementation is not needed.
@@ -31,19 +31,17 @@ unless Errno.const_defined?(:ENOTEMPTY) # Windows?
31
31
  end
32
32
 
33
33
  def File.binread(fname)
34
- open(fname, 'rb') {|f|
34
+ open(fname, 'rb') do |f|
35
35
  return f.read
36
- }
36
+ end
37
37
  end
38
38
 
39
39
  # for corrupted Windows' stat(2)
40
40
  def File.dir?(path)
41
- File.directory?((path[-1,1] == '/') ? path : path + '/')
41
+ File.directory?(path[-1, 1] == '/' ? path : path + '/')
42
42
  end
43
43
 
44
-
45
44
  class ConfigTable
46
-
47
45
  include Enumerable
48
46
 
49
47
  def initialize(rbconfig)
@@ -57,17 +55,14 @@ class ConfigTable
57
55
  @no_harm = false
58
56
  end
59
57
 
60
- attr_accessor :install_prefix
61
- attr_accessor :config_opt
58
+ attr_accessor :install_prefix, :config_opt
62
59
 
63
- attr_writer :verbose
60
+ attr_writer :verbose, :no_harm
64
61
 
65
62
  def verbose?
66
63
  @verbose
67
64
  end
68
65
 
69
- attr_writer :no_harm
70
-
71
66
  def no_harm?
72
67
  @no_harm
73
68
  end
@@ -81,7 +76,7 @@ class ConfigTable
81
76
  end
82
77
 
83
78
  def names
84
- @items.map {|i| i.name }
79
+ @items.map { |i| i.name }
85
80
  end
86
81
 
87
82
  def each(&block)
@@ -103,15 +98,13 @@ class ConfigTable
103
98
 
104
99
  def remove(name)
105
100
  item = lookup(name)
106
- @items.delete_if {|i| i.name == name }
107
- @table.delete_if {|name, i| i.name == name }
101
+ @items.delete_if { |i| i.name == name }
102
+ @table.delete_if { |name, i| i.name == name }
108
103
  item
109
104
  end
110
105
 
111
106
  def load_script(path, inst = nil)
112
- if File.file?(path)
113
- MetaConfigEnvironment.new(self, inst).instance_eval File.read(path), path
114
- end
107
+ MetaConfigEnvironment.new(self, inst).instance_eval File.read(path), path if File.file?(path)
115
108
  end
116
109
 
117
110
  def savefile
@@ -119,23 +112,21 @@ class ConfigTable
119
112
  end
120
113
 
121
114
  def load_savefile
122
- begin
123
- File.foreach(savefile()) do |line|
124
- k, v = *line.split(/=/, 2)
125
- self[k] = v.strip
126
- end
127
- rescue Errno::ENOENT
128
- setup_rb_error $!.message + "\n#{File.basename($0)} config first"
115
+ File.foreach(savefile) do |line|
116
+ k, v = *line.split(/=/, 2)
117
+ self[k] = v.strip
129
118
  end
119
+ rescue Errno::ENOENT
120
+ setup_rb_error $!.message + "\n#{File.basename($0)} config first"
130
121
  end
131
122
 
132
123
  def save
133
- @items.each {|i| i.value }
134
- File.open(savefile(), 'w') {|f|
124
+ @items.each { |i| i.value }
125
+ File.open(savefile, 'w') do |f|
135
126
  @items.each do |i|
136
127
  f.printf "%s=%s\n", i.name, i.value if i.value? and i.value
137
128
  end
138
- }
129
+ end
139
130
  end
140
131
 
141
132
  def load_standard_entries
@@ -185,20 +176,20 @@ class ConfigTable
185
176
  siterubyver = siteruby
186
177
  siterubyverarch = "$siterubyver/#{c['arch']}"
187
178
  end
188
- parameterize = lambda {|path|
179
+ parameterize = lambda { |path|
189
180
  path.sub(/\A#{Regexp.quote(c['prefix'])}/, '$prefix')
190
181
  }
191
182
 
192
- if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg }
193
- makeprog = arg.sub(/'/, '').split(/=/, 2)[1]
194
- else
195
- makeprog = 'make'
196
- end
183
+ makeprog = if arg = c['configure_args'].split.detect { |arg| /--with-make-prog=/ =~ arg }
184
+ arg.sub(/'/, '').split(/=/, 2)[1]
185
+ else
186
+ 'make'
187
+ end
197
188
 
198
189
  [
199
190
  ExecItem.new('installdirs', 'std/site/home',
200
191
  'std: install under libruby; site: install under site_ruby; home: install under $HOME')\
201
- {|val, table|
192
+ do |val, table|
202
193
  case val
203
194
  when 'std'
204
195
  table['rbdir'] = '$librubyver'
@@ -212,7 +203,7 @@ class ConfigTable
212
203
  table['rbdir'] = '$libdir/ruby'
213
204
  table['sodir'] = '$libdir/ruby'
214
205
  end
215
- },
206
+ end,
216
207
  PathItem.new('prefix', 'path', c['prefix'],
217
208
  'path prefix of target environment'),
218
209
  PathItem.new('bindir', 'path', parameterize.call(c['bindir']),
@@ -234,7 +225,7 @@ class ConfigTable
234
225
  PathItem.new('librubyverarch', 'path', librubyverarch,
235
226
  'the directory for standard ruby extensions'),
236
227
  PathItem.new('siteruby', 'path', siteruby,
237
- 'the directory for version-independent aux ruby libraries'),
228
+ 'the directory for version-independent aux ruby libraries'),
238
229
  PathItem.new('siterubyver', 'path', siterubyver,
239
230
  'the directory for aux ruby libraries'),
240
231
  PathItem.new('siterubyverarch', 'path', siterubyverarch,
@@ -258,7 +249,7 @@ class ConfigTable
258
249
  private :standard_entries
259
250
 
260
251
  def load_multipackage_entries
261
- multipackage_entries().each do |ent|
252
+ multipackage_entries.each do |ent|
262
253
  add ent
263
254
  end
264
255
  end
@@ -274,22 +265,21 @@ class ConfigTable
274
265
  private :multipackage_entries
275
266
 
276
267
  ALIASES = {
277
- 'std-ruby' => 'librubyver',
278
- 'stdruby' => 'librubyver',
279
- 'rubylibdir' => 'librubyver',
280
- 'archdir' => 'librubyverarch',
281
- 'site-ruby-common' => 'siteruby', # For backward compatibility
282
- 'site-ruby' => 'siterubyver', # For backward compatibility
283
- 'bin-dir' => 'bindir',
284
- 'bin-dir' => 'bindir',
285
- 'rb-dir' => 'rbdir',
286
- 'so-dir' => 'sodir',
287
- 'data-dir' => 'datadir',
288
- 'ruby-path' => 'rubypath',
289
- 'ruby-prog' => 'rubyprog',
290
- 'ruby' => 'rubyprog',
291
- 'make-prog' => 'makeprog',
292
- 'make' => 'makeprog'
268
+ 'std-ruby' => 'librubyver',
269
+ 'stdruby' => 'librubyver',
270
+ 'rubylibdir' => 'librubyver',
271
+ 'archdir' => 'librubyverarch',
272
+ 'site-ruby-common' => 'siteruby', # For backward compatibility
273
+ 'site-ruby' => 'siterubyver', # For backward compatibility
274
+ 'bin-dir' => 'bindir',
275
+ 'rb-dir' => 'rbdir',
276
+ 'so-dir' => 'sodir',
277
+ 'data-dir' => 'datadir',
278
+ 'ruby-path' => 'rubypath',
279
+ 'ruby-prog' => 'rubyprog',
280
+ 'ruby' => 'rubyprog',
281
+ 'make-prog' => 'makeprog',
282
+ 'make' => 'makeprog'
293
283
  }
294
284
 
295
285
  def fixup
@@ -303,7 +293,7 @@ class ConfigTable
303
293
 
304
294
  def parse_opt(opt)
305
295
  m = @options_re.match(opt) or setup_rb_error "config: unknown option #{opt}"
306
- m.to_a[1,2]
296
+ m.to_a[1, 2]
307
297
  end
308
298
 
309
299
  def dllext
@@ -323,8 +313,7 @@ class ConfigTable
323
313
  @description = desc
324
314
  end
325
315
 
326
- attr_reader :name
327
- attr_reader :description
316
+ attr_reader :name, :description, :value
328
317
 
329
318
  attr_accessor :default
330
319
  alias help_default default
@@ -337,12 +326,8 @@ class ConfigTable
337
326
  true
338
327
  end
339
328
 
340
- def value
341
- @value
342
- end
343
-
344
329
  def resolve(table)
345
- @value.gsub(%r<\$([^/]+)>) { table[$1] }
330
+ @value.gsub(%r{\$([^/]+)}) { table[Regexp.last_match(1)] }
346
331
  end
347
332
 
348
333
  def set(val)
@@ -370,6 +355,7 @@ class ConfigTable
370
355
 
371
356
  def check(val)
372
357
  return 'yes' unless val
358
+
373
359
  case val
374
360
  when /\Ay(es)?\z/i, /\At(rue)?\z/i then 'yes'
375
361
  when /\An(o)?\z/i, /\Af(alse)\z/i then 'no'
@@ -387,8 +373,8 @@ class ConfigTable
387
373
  private
388
374
 
389
375
  def check(path)
390
- setup_rb_error "config: --#{@name} requires argument" unless path
391
- path[0,1] == '$' ? path : File.expand_path(path)
376
+ setup_rb_error "config: --#{@name} requires argument" unless path
377
+ path[0, 1] == '$' ? path : File.expand_path(path)
392
378
  end
393
379
  end
394
380
 
@@ -411,9 +397,7 @@ class ConfigTable
411
397
  private
412
398
 
413
399
  def check(val)
414
- unless @ok.include?(val.strip)
415
- setup_rb_error "config: use --#{@name}=#{@template} (#{val})"
416
- end
400
+ setup_rb_error "config: use --#{@name}=#{@template} (#{val})" unless @ok.include?(val.strip)
417
401
  val.strip
418
402
  end
419
403
  end
@@ -433,17 +417,15 @@ class ConfigTable
433
417
  false
434
418
  end
435
419
 
436
- def resolve(table)
437
- setup_rb_error "$#{name()} wrongly used as option value"
420
+ def resolve(_table)
421
+ setup_rb_error "$#{name} wrongly used as option value"
438
422
  end
439
423
 
440
424
  undef set
441
425
 
442
426
  def evaluate(val, table)
443
427
  v = val.strip.downcase
444
- unless @ok.include?(v)
445
- setup_rb_error "invalid option --#{@name}=#{val} (use #{@template})"
446
- end
428
+ setup_rb_error "invalid option --#{@name}=#{val} (use #{@template})" unless @ok.include?(v)
447
429
  @action.call v, table
448
430
  end
449
431
  end
@@ -463,9 +445,7 @@ class ConfigTable
463
445
  private
464
446
 
465
447
  def check(val)
466
- unless File.dir?("packages/#{val}")
467
- setup_rb_error "config: no such package: #{val}"
468
- end
448
+ setup_rb_error "config: no such package: #{val}" unless File.dir?("packages/#{val}")
469
449
  val
470
450
  end
471
451
  end
@@ -518,30 +498,33 @@ class ConfigTable
518
498
 
519
499
  # For only multipackage
520
500
  def packages
521
- raise '[setup.rb fatal] multi-package metaconfig API packages() called for single-package; contact application package vendor' unless @installer
501
+ unless @installer
502
+ raise '[setup.rb fatal] multi-package metaconfig API packages() called for single-package; contact application package vendor'
503
+ end
504
+
522
505
  @installer.packages
523
506
  end
524
507
 
525
508
  # For only multipackage
526
509
  def declare_packages(list)
527
- raise '[setup.rb fatal] multi-package metaconfig API declare_packages() called for single-package; contact application package vendor' unless @installer
510
+ unless @installer
511
+ raise '[setup.rb fatal] multi-package metaconfig API declare_packages() called for single-package; contact application package vendor'
512
+ end
513
+
528
514
  @installer.packages = list
529
515
  end
530
516
  end
531
-
532
- end # class ConfigTable
533
-
517
+ end # class ConfigTable
534
518
 
535
519
  # This module requires: #verbose?, #no_harm?
536
520
  module FileOperations
537
-
538
521
  def mkdir_p(dirname, prefix = nil)
539
522
  dirname = prefix + File.expand_path(dirname) if prefix
540
- $stderr.puts "mkdir -p #{dirname}" if verbose?
523
+ warn "mkdir -p #{dirname}" if verbose?
541
524
  return if no_harm?
542
525
 
543
526
  # Does not check '/', it's too abnormal.
544
- dirs = File.expand_path(dirname).split(%r<(?=/)>)
527
+ dirs = File.expand_path(dirname).split(%r{(?=/)})
545
528
  if /\A[a-z]:\z/i =~ dirs[0]
546
529
  disk = dirs.shift
547
530
  dirs[0] = disk + dirs[0]
@@ -553,14 +536,16 @@ module FileOperations
553
536
  end
554
537
 
555
538
  def rm_f(path)
556
- $stderr.puts "rm -f #{path}" if verbose?
539
+ warn "rm -f #{path}" if verbose?
557
540
  return if no_harm?
541
+
558
542
  force_remove_file path
559
543
  end
560
544
 
561
545
  def rm_rf(path)
562
- $stderr.puts "rm -rf #{path}" if verbose?
546
+ warn "rm -rf #{path}" if verbose?
563
547
  return if no_harm?
548
+
564
549
  remove_tree path
565
550
  end
566
551
 
@@ -578,6 +563,7 @@ module FileOperations
578
563
  Dir.foreach(path) do |ent|
579
564
  next if ent == '.'
580
565
  next if ent == '..'
566
+
581
567
  entpath = "#{path}/#{ent}"
582
568
  if File.symlink?(entpath)
583
569
  remove_file entpath
@@ -598,68 +584,66 @@ module FileOperations
598
584
  force_remove_file dest
599
585
  begin
600
586
  File.rename src, dest
601
- rescue
602
- File.open(dest, 'wb') {|f|
587
+ rescue StandardError
588
+ File.open(dest, 'wb') do |f|
603
589
  f.write File.binread(src)
604
- }
590
+ end
605
591
  File.chmod File.stat(src).mode, dest
606
592
  File.unlink src
607
593
  end
608
594
  end
609
595
 
610
596
  def force_remove_file(path)
611
- begin
612
- remove_file path
613
- rescue
614
- end
597
+ remove_file path
598
+ rescue StandardError
615
599
  end
616
600
 
617
601
  def remove_file(path)
618
- File.chmod 0777, path
602
+ File.chmod 0o777, path
619
603
  File.unlink path
620
604
  end
621
605
 
622
606
  def install(from, dest, mode, prefix = nil)
623
- $stderr.puts "install #{from} #{dest}" if verbose?
607
+ warn "install #{from} #{dest}" if verbose?
624
608
  return if no_harm?
625
609
 
626
610
  realdest = prefix ? prefix + File.expand_path(dest) : dest
627
611
  realdest = File.join(realdest, File.basename(from)) if File.dir?(realdest)
628
612
  str = File.binread(from)
629
613
  if diff?(str, realdest)
630
- verbose_off {
614
+ verbose_off do
631
615
  rm_f realdest if File.exist?(realdest)
632
- }
633
- File.open(realdest, 'wb') {|f|
616
+ end
617
+ File.open(realdest, 'wb') do |f|
634
618
  f.write str
635
- }
619
+ end
636
620
  File.chmod mode, realdest
637
621
 
638
- File.open("#{objdir_root()}/InstalledFiles", 'a') {|f|
622
+ File.open("#{objdir_root}/InstalledFiles", 'a') do |f|
639
623
  if prefix
640
624
  f.puts realdest.sub(prefix, '')
641
625
  else
642
626
  f.puts realdest
643
627
  end
644
- }
628
+ end
645
629
  end
646
630
  end
647
631
 
648
632
  def diff?(new_content, path)
649
633
  return true unless File.exist?(path)
634
+
650
635
  new_content != File.binread(path)
651
636
  end
652
637
 
653
638
  def command(*args)
654
- $stderr.puts args.join(' ') if verbose?
655
- system(*args) or raise RuntimeError,
656
- "system(#{args.map{|a| a.inspect }.join(' ')}) failed"
639
+ warn args.join(' ') if verbose?
640
+ system(*args) or raise "system(#{args.map { |a| a.inspect }.join(' ')}) failed"
657
641
  end
658
642
 
659
643
  def ruby(*args)
660
644
  command config('rubyprog'), *args
661
645
  end
662
-
646
+
663
647
  def make(task = nil)
664
648
  command(*[config('makeprog'), task].compact)
665
649
  end
@@ -669,25 +653,22 @@ module FileOperations
669
653
  end
670
654
 
671
655
  def files_of(dir)
672
- Dir.open(dir) {|d|
673
- return d.select {|ent| File.file?("#{dir}/#{ent}") }
674
- }
656
+ Dir.open(dir) do |d|
657
+ return d.select { |ent| File.file?("#{dir}/#{ent}") }
658
+ end
675
659
  end
676
660
 
677
- DIR_REJECT = %w( . .. CVS SCCS RCS CVS.adm .svn )
661
+ DIR_REJECT = %w[. .. CVS SCCS RCS CVS.adm .svn]
678
662
 
679
663
  def directories_of(dir)
680
- Dir.open(dir) {|d|
681
- return d.select {|ent| File.dir?("#{dir}/#{ent}") } - DIR_REJECT
682
- }
664
+ Dir.open(dir) do |d|
665
+ return d.select { |ent| File.dir?("#{dir}/#{ent}") } - DIR_REJECT
666
+ end
683
667
  end
684
-
685
668
  end
686
669
 
687
-
688
670
  # This module requires: #srcdir_root, #objdir_root, #relpath
689
671
  module HookScriptAPI
690
-
691
672
  def get_config(key)
692
673
  @config[key]
693
674
  end
@@ -704,15 +685,15 @@ module HookScriptAPI
704
685
  #
705
686
 
706
687
  def curr_srcdir
707
- "#{srcdir_root()}/#{relpath()}"
688
+ "#{srcdir_root}/#{relpath}"
708
689
  end
709
690
 
710
691
  def curr_objdir
711
- "#{objdir_root()}/#{relpath()}"
692
+ "#{objdir_root}/#{relpath}"
712
693
  end
713
694
 
714
695
  def srcfile(path)
715
- "#{curr_srcdir()}/#{path}"
696
+ "#{curr_srcdir}/#{path}"
716
697
  end
717
698
 
718
699
  def srcexist?(path)
@@ -722,63 +703,60 @@ module HookScriptAPI
722
703
  def srcdirectory?(path)
723
704
  File.dir?(srcfile(path))
724
705
  end
725
-
706
+
726
707
  def srcfile?(path)
727
708
  File.file?(srcfile(path))
728
709
  end
729
710
 
730
711
  def srcentries(path = '.')
731
- Dir.open("#{curr_srcdir()}/#{path}") {|d|
732
- return d.to_a - %w(. ..)
733
- }
712
+ Dir.open("#{curr_srcdir}/#{path}") do |d|
713
+ return d.to_a - %w[. ..]
714
+ end
734
715
  end
735
716
 
736
717
  def srcfiles(path = '.')
737
- srcentries(path).select {|fname|
738
- File.file?(File.join(curr_srcdir(), path, fname))
739
- }
718
+ srcentries(path).select do |fname|
719
+ File.file?(File.join(curr_srcdir, path, fname))
720
+ end
740
721
  end
741
722
 
742
723
  def srcdirectories(path = '.')
743
- srcentries(path).select {|fname|
744
- File.dir?(File.join(curr_srcdir(), path, fname))
745
- }
724
+ srcentries(path).select do |fname|
725
+ File.dir?(File.join(curr_srcdir, path, fname))
726
+ end
746
727
  end
747
-
748
728
  end
749
729
 
750
-
751
730
  class ToplevelInstaller
752
-
753
731
  Version = '3.4.1'
754
732
  Copyright = 'Copyright (c) 2000-2005 Minero Aoki'
755
733
 
756
734
  TASKS = [
757
- [ 'all', 'do config, setup, then install' ],
758
- [ 'config', 'saves your configurations' ],
759
- [ 'show', 'shows current configuration' ],
760
- [ 'setup', 'compiles ruby extentions and others' ],
761
- [ 'install', 'installs files' ],
762
- [ 'test', 'run all tests in test/' ],
763
- [ 'clean', "does `make clean' for each extention" ],
764
- [ 'distclean',"does `make distclean' for each extention" ]
735
+ ['all', 'do config, setup, then install'],
736
+ ['config', 'saves your configurations'],
737
+ ['show', 'shows current configuration'],
738
+ ['setup', 'compiles ruby extentions and others'],
739
+ ['install', 'installs files'],
740
+ ['test', 'run all tests in test/'],
741
+ ['clean', "does `make clean' for each extention"],
742
+ ['distclean', "does `make distclean' for each extention"]
765
743
  ]
766
744
 
767
- def ToplevelInstaller.invoke
768
- config = ConfigTable.new(load_rbconfig())
745
+ def self.invoke
746
+ config = ConfigTable.new(load_rbconfig)
769
747
  config.load_standard_entries
770
748
  config.load_multipackage_entries if multipackage?
771
749
  config.fixup
772
- klass = (multipackage?() ? ToplevelInstallerMulti : ToplevelInstaller)
750
+ klass = (multipackage? ? ToplevelInstallerMulti : ToplevelInstaller)
773
751
  klass.new(File.dirname($0), config).invoke
774
752
  end
775
753
 
776
- def ToplevelInstaller.multipackage?
754
+ def self.multipackage?
777
755
  File.dir?(File.dirname($0) + '/packages')
778
756
  end
779
757
 
780
- def ToplevelInstaller.load_rbconfig
781
- if arg = ARGV.detect {|arg| /\A--rbconfig=/ =~ arg }
758
+ def self.load_rbconfig
759
+ if arg = ARGV.detect { |arg| /\A--rbconfig=/ =~ arg }
782
760
  ARGV.delete(arg)
783
761
  load File.expand_path(arg.split(/=/, 2)[1])
784
762
  $".push 'rbconfig.rb'
@@ -800,12 +778,12 @@ class ToplevelInstaller
800
778
  end
801
779
 
802
780
  def inspect
803
- "#<#{self.class} #{__id__()}>"
781
+ "#<#{self.class} #{__id__}>"
804
782
  end
805
783
 
806
784
  def invoke
807
785
  run_metaconfigs
808
- case task = parsearg_global()
786
+ case task = parsearg_global
809
787
  when nil, 'all'
810
788
  parsearg_config
811
789
  init_installers
@@ -815,7 +793,7 @@ class ToplevelInstaller
815
793
  else
816
794
  case task
817
795
  when 'config', 'test'
818
- ;
796
+
819
797
  when 'clean', 'distclean'
820
798
  @config.load_savefile if File.exist?(@config.savefile)
821
799
  else
@@ -826,7 +804,7 @@ class ToplevelInstaller
826
804
  __send__ "exec_#{task}"
827
805
  end
828
806
  end
829
-
807
+
830
808
  def run_metaconfigs
831
809
  @config.load_script "#{@ardir}/metaconfig"
832
810
  end
@@ -882,16 +860,16 @@ class ToplevelInstaller
882
860
  end
883
861
 
884
862
  def valid_task?(t)
885
- valid_task_re() =~ t
863
+ valid_task_re =~ t
886
864
  end
887
865
 
888
866
  def valid_task_re
889
- @valid_task_re ||= /\A(?:#{TASKS.map {|task,desc| task }.join('|')})\z/
867
+ @valid_task_re ||= /\A(?:#{TASKS.map { |task, _desc| task }.join('|')})\z/
890
868
  end
891
869
 
892
870
  def parsearg_no_options
893
871
  unless ARGV.empty?
894
- task = caller(0).first.slice(%r<`parsearg_(\w+)'>, 1)
872
+ task = caller(0).first.slice(/`parsearg_(\w+)'/, 1)
895
873
  setup_rb_error "#{task}: unknown options: #{ARGV.join(' ')}"
896
874
  end
897
875
  end
@@ -937,7 +915,7 @@ class ToplevelInstaller
937
915
  @config.no_harm = true
938
916
  when /\A--prefix=/
939
917
  path = a.split(/=/, 2)[1]
940
- path = File.expand_path(path) unless path[0,1] == '/'
918
+ path = File.expand_path(path) unless path[0, 1] == '/'
941
919
  @config.install_prefix = path
942
920
  else
943
921
  setup_rb_error "install: unknown option #{a}"
@@ -962,7 +940,7 @@ class ToplevelInstaller
962
940
  out.printf fmt, ' --verbose', 'output messages verbosely'
963
941
  out.printf fmt, ' --help', 'print this message'
964
942
  out.printf fmt, ' --version', 'print version and quit'
965
- out.printf fmt, ' --copyright', 'print copyright and quit'
943
+ out.printf fmt, ' --copyright', 'print copyright and quit'
966
944
  out.puts
967
945
  out.puts 'Tasks:'
968
946
  TASKS.each do |name, desc|
@@ -975,11 +953,11 @@ class ToplevelInstaller
975
953
  @config.each do |item|
976
954
  out.printf fmt, item.help_opt, item.description, item.help_default
977
955
  end
978
- out.printf fmt, '--rbconfig=path', 'rbconfig.rb to load',"running ruby's"
956
+ out.printf fmt, '--rbconfig=path', 'rbconfig.rb to load', "running ruby's"
979
957
  out.puts
980
958
  out.puts 'Options for INSTALL:'
981
959
  out.printf fmt, '--no-harm', 'only display what to do if given', 'off'
982
- out.printf fmt, '--prefix=path', 'install path prefix', ''
960
+ out.printf fmt, '--prefix=path', 'install path prefix', ''
983
961
  out.puts
984
962
  end
985
963
 
@@ -989,7 +967,7 @@ class ToplevelInstaller
989
967
 
990
968
  def exec_config
991
969
  @installer.exec_config
992
- @config.save # must be final
970
+ @config.save # must be final
993
971
  end
994
972
 
995
973
  def exec_setup
@@ -1017,18 +995,16 @@ class ToplevelInstaller
1017
995
  def exec_distclean
1018
996
  @installer.exec_distclean
1019
997
  end
1020
-
1021
- end # class ToplevelInstaller
1022
-
998
+ end # class ToplevelInstaller
1023
999
 
1024
1000
  class ToplevelInstallerMulti < ToplevelInstaller
1025
-
1026
1001
  include FileOperations
1027
1002
 
1028
1003
  def initialize(ardir_root, config)
1029
1004
  super
1030
1005
  @packages = directories_of("#{@ardir}/packages")
1031
1006
  raise 'no package exists' if @packages.empty?
1007
+
1032
1008
  @root_installer = Installer.new(@config, @ardir, File.expand_path('.'))
1033
1009
  end
1034
1010
 
@@ -1043,6 +1019,7 @@ class ToplevelInstallerMulti < ToplevelInstaller
1043
1019
 
1044
1020
  def packages=(list)
1045
1021
  raise 'package list is empty' if list.empty?
1022
+
1046
1023
  list.each do |name|
1047
1024
  raise "directory packages/#{name} does not exist"\
1048
1025
  unless File.dir?("#{@ardir}/packages/#{name}")
@@ -1054,21 +1031,21 @@ class ToplevelInstallerMulti < ToplevelInstaller
1054
1031
  @installers = {}
1055
1032
  @packages.each do |pack|
1056
1033
  @installers[pack] = Installer.new(@config,
1057
- "#{@ardir}/packages/#{pack}",
1058
- "packages/#{pack}")
1034
+ "#{@ardir}/packages/#{pack}",
1035
+ "packages/#{pack}")
1059
1036
  end
1060
1037
  with = extract_selection(config('with'))
1061
1038
  without = extract_selection(config('without'))
1062
- @selected = @installers.keys.select {|name|
1063
- (with.empty? or with.include?(name)) \
1064
- and not without.include?(name)
1065
- }
1039
+ @selected = @installers.keys.select do |name|
1040
+ (with.empty? or with.include?(name)) \
1041
+ and !without.include?(name)
1042
+ end
1066
1043
  end
1067
1044
 
1068
1045
  def extract_selection(list)
1069
1046
  a = list.split(/,/)
1070
1047
  a.each do |name|
1071
- setup_rb_error "no such package: #{name}" unless @installers.key?(name)
1048
+ setup_rb_error "no such package: #{name}" unless @installers.key?(name)
1072
1049
  end
1073
1050
  a
1074
1051
  end
@@ -1086,40 +1063,40 @@ class ToplevelInstallerMulti < ToplevelInstaller
1086
1063
 
1087
1064
  def exec_config
1088
1065
  run_hook 'pre-config'
1089
- each_selected_installers {|inst| inst.exec_config }
1066
+ each_selected_installers { |inst| inst.exec_config }
1090
1067
  run_hook 'post-config'
1091
- @config.save # must be final
1068
+ @config.save # must be final
1092
1069
  end
1093
1070
 
1094
1071
  def exec_setup
1095
1072
  run_hook 'pre-setup'
1096
- each_selected_installers {|inst| inst.exec_setup }
1073
+ each_selected_installers { |inst| inst.exec_setup }
1097
1074
  run_hook 'post-setup'
1098
1075
  end
1099
1076
 
1100
1077
  def exec_install
1101
1078
  run_hook 'pre-install'
1102
- each_selected_installers {|inst| inst.exec_install }
1079
+ each_selected_installers { |inst| inst.exec_install }
1103
1080
  run_hook 'post-install'
1104
1081
  end
1105
1082
 
1106
1083
  def exec_test
1107
1084
  run_hook 'pre-test'
1108
- each_selected_installers {|inst| inst.exec_test }
1085
+ each_selected_installers { |inst| inst.exec_test }
1109
1086
  run_hook 'post-test'
1110
1087
  end
1111
1088
 
1112
1089
  def exec_clean
1113
1090
  rm_f @config.savefile
1114
1091
  run_hook 'pre-clean'
1115
- each_selected_installers {|inst| inst.exec_clean }
1092
+ each_selected_installers { |inst| inst.exec_clean }
1116
1093
  run_hook 'post-clean'
1117
1094
  end
1118
1095
 
1119
1096
  def exec_distclean
1120
1097
  rm_f @config.savefile
1121
1098
  run_hook 'pre-distclean'
1122
- each_selected_installers {|inst| inst.exec_distclean }
1099
+ each_selected_installers { |inst| inst.exec_distclean }
1123
1100
  run_hook 'post-distclean'
1124
1101
  end
1125
1102
 
@@ -1130,7 +1107,7 @@ class ToplevelInstallerMulti < ToplevelInstaller
1130
1107
  def each_selected_installers
1131
1108
  Dir.mkdir 'packages' unless File.dir?('packages')
1132
1109
  @selected.each do |pack|
1133
- $stderr.puts "Processing the package `#{pack}' ..." if verbose?
1110
+ warn "Processing the package `#{pack}' ..." if verbose?
1134
1111
  Dir.mkdir "packages/#{pack}" unless File.dir?("packages/#{pack}")
1135
1112
  Dir.chdir "packages/#{pack}"
1136
1113
  yield @installers[pack]
@@ -1151,13 +1128,10 @@ class ToplevelInstallerMulti < ToplevelInstaller
1151
1128
  def no_harm?
1152
1129
  @config.no_harm?
1153
1130
  end
1154
-
1155
- end # class ToplevelInstallerMulti
1156
-
1131
+ end # class ToplevelInstallerMulti
1157
1132
 
1158
1133
  class Installer
1159
-
1160
- FILETYPES = %w( bin lib ext data conf man )
1134
+ FILETYPES = %w[bin lib ext data conf man]
1161
1135
 
1162
1136
  include FileOperations
1163
1137
  include HookScriptAPI
@@ -1173,8 +1147,7 @@ class Installer
1173
1147
  "#<#{self.class} #{File.basename(@srcdir)}>"
1174
1148
  end
1175
1149
 
1176
- def noop(rel)
1177
- end
1150
+ def noop(rel); end
1178
1151
 
1179
1152
  #
1180
1153
  # Hook Script API base methods
@@ -1207,12 +1180,11 @@ class Installer
1207
1180
  end
1208
1181
 
1209
1182
  def verbose_off
1210
- begin
1211
- save, @config.verbose = @config.verbose?, false
1212
- yield
1213
- ensure
1214
- @config.verbose = save
1215
- end
1183
+ save = @config.verbose?
1184
+ @config.verbose = false
1185
+ yield
1186
+ ensure
1187
+ @config.verbose = save
1216
1188
  end
1217
1189
 
1218
1190
  #
@@ -1226,8 +1198,8 @@ class Installer
1226
1198
  alias config_dir_bin noop
1227
1199
  alias config_dir_lib noop
1228
1200
 
1229
- def config_dir_ext(rel)
1230
- extconf if extdir?(curr_srcdir())
1201
+ def config_dir_ext(_rel)
1202
+ extconf if extdir?(curr_srcdir)
1231
1203
  end
1232
1204
 
1233
1205
  alias config_dir_data noop
@@ -1235,7 +1207,7 @@ class Installer
1235
1207
  alias config_dir_man noop
1236
1208
 
1237
1209
  def extconf
1238
- ruby "#{curr_srcdir()}/extconf.rb", *@config.config_opt
1210
+ ruby "#{curr_srcdir}/extconf.rb", *@config.config_opt
1239
1211
  end
1240
1212
 
1241
1213
  #
@@ -1246,16 +1218,16 @@ class Installer
1246
1218
  exec_task_traverse 'setup'
1247
1219
  end
1248
1220
 
1249
- def setup_dir_bin(rel)
1250
- files_of(curr_srcdir()).each do |fname|
1251
- update_shebang_line "#{curr_srcdir()}/#{fname}"
1221
+ def setup_dir_bin(_rel)
1222
+ files_of(curr_srcdir).each do |fname|
1223
+ update_shebang_line "#{curr_srcdir}/#{fname}"
1252
1224
  end
1253
1225
  end
1254
1226
 
1255
1227
  alias setup_dir_lib noop
1256
1228
 
1257
- def setup_dir_ext(rel)
1258
- make if extdir?(curr_srcdir())
1229
+ def setup_dir_ext(_rel)
1230
+ make if extdir?(curr_srcdir)
1259
1231
  end
1260
1232
 
1261
1233
  alias setup_dir_data noop
@@ -1265,23 +1237,27 @@ class Installer
1265
1237
  def update_shebang_line(path)
1266
1238
  return if no_harm?
1267
1239
  return if config('shebang') == 'never'
1240
+
1268
1241
  old = Shebang.load(path)
1269
1242
  if old
1270
- $stderr.puts "warning: #{path}: Shebang line includes too many args. It is not portable and your program may not work." if old.args.size > 1
1243
+ if old.args.size > 1
1244
+ warn "warning: #{path}: Shebang line includes too many args. It is not portable and your program may not work."
1245
+ end
1271
1246
  new = new_shebang(old)
1272
1247
  return if new.to_s == old.to_s
1273
1248
  else
1274
1249
  return unless config('shebang') == 'all'
1250
+
1275
1251
  new = Shebang.new(config('rubypath'))
1276
1252
  end
1277
- $stderr.puts "updating shebang: #{File.basename(path)}" if verbose?
1278
- open_atomic_writer(path) {|output|
1279
- File.open(path, 'rb') {|f|
1280
- f.gets if old # discard
1253
+ warn "updating shebang: #{File.basename(path)}" if verbose?
1254
+ open_atomic_writer(path) do |output|
1255
+ File.open(path, 'rb') do |f|
1256
+ f.gets if old # discard
1281
1257
  output.puts new.to_s
1282
1258
  output.print f.read
1283
- }
1284
- }
1259
+ end
1260
+ end
1285
1261
  end
1286
1262
 
1287
1263
  def new_shebang(old)
@@ -1291,6 +1267,7 @@ class Installer
1291
1267
  Shebang.new(config('rubypath'), old.args[1..-1])
1292
1268
  else
1293
1269
  return old unless config('shebang') == 'all'
1270
+
1294
1271
  Shebang.new(config('rubypath'))
1295
1272
  end
1296
1273
  end
@@ -1306,16 +1283,17 @@ class Installer
1306
1283
  end
1307
1284
 
1308
1285
  class Shebang
1309
- def Shebang.load(path)
1286
+ def self.load(path)
1310
1287
  line = nil
1311
- File.open(path) {|f|
1288
+ File.open(path) do |f|
1312
1289
  line = f.gets
1313
- }
1290
+ end
1314
1291
  return nil unless /\A#!/ =~ line
1292
+
1315
1293
  parse(line)
1316
1294
  end
1317
1295
 
1318
- def Shebang.parse(line)
1296
+ def self.parse(line)
1319
1297
  cmd, *args = *line.strip.sub(/\A\#!/, '').split(' ')
1320
1298
  new(cmd, args)
1321
1299
  end
@@ -1325,8 +1303,7 @@ class Installer
1325
1303
  @args = args
1326
1304
  end
1327
1305
 
1328
- attr_reader :cmd
1329
- attr_reader :args
1306
+ attr_reader :cmd, :args
1330
1307
 
1331
1308
  def to_s
1332
1309
  "#! #{@cmd}" + (@args.empty? ? '' : " #{@args.join(' ')}")
@@ -1343,32 +1320,33 @@ class Installer
1343
1320
  end
1344
1321
 
1345
1322
  def install_dir_bin(rel)
1346
- install_files targetfiles(), "#{config('bindir')}/#{rel}", 0755
1323
+ install_files targetfiles, "#{config('bindir')}/#{rel}", 0o755
1347
1324
  end
1348
1325
 
1349
1326
  def install_dir_lib(rel)
1350
- install_files libfiles(), "#{config('rbdir')}/#{rel}", 0644
1327
+ install_files libfiles, "#{config('rbdir')}/#{rel}", 0o644
1351
1328
  end
1352
1329
 
1353
1330
  def install_dir_ext(rel)
1354
- return unless extdir?(curr_srcdir())
1331
+ return unless extdir?(curr_srcdir)
1332
+
1355
1333
  install_files rubyextentions('.'),
1356
1334
  "#{config('sodir')}/#{File.dirname(rel)}",
1357
- 0555
1335
+ 0o555
1358
1336
  end
1359
1337
 
1360
1338
  def install_dir_data(rel)
1361
- install_files targetfiles(), "#{config('datadir')}/#{rel}", 0644
1339
+ install_files targetfiles, "#{config('datadir')}/#{rel}", 0o644
1362
1340
  end
1363
1341
 
1364
1342
  def install_dir_conf(rel)
1365
1343
  # FIXME: should not remove current config files
1366
1344
  # (rename previous file to .old/.org)
1367
- install_files targetfiles(), "#{config('sysconfdir')}/#{rel}", 0644
1345
+ install_files targetfiles, "#{config('sysconfdir')}/#{rel}", 0o644
1368
1346
  end
1369
1347
 
1370
1348
  def install_dir_man(rel)
1371
- install_files targetfiles(), "#{config('mandir')}/#{rel}", 0644
1349
+ install_files targetfiles, "#{config('mandir')}/#{rel}", 0o644
1372
1350
  end
1373
1351
 
1374
1352
  def install_files(list, dest, mode)
@@ -1379,57 +1357,56 @@ class Installer
1379
1357
  end
1380
1358
 
1381
1359
  def libfiles
1382
- glob_reject(%w(*.y *.output), targetfiles())
1360
+ glob_reject(%w[*.y *.output], targetfiles)
1383
1361
  end
1384
1362
 
1385
- def rubyextentions(dir)
1386
- ents = glob_select("*.#{@config.dllext}", targetfiles())
1387
- if ents.empty?
1388
- setup_rb_error "no ruby extention exists: 'ruby #{$0} setup' first"
1389
- end
1363
+ def rubyextentions(_dir)
1364
+ ents = glob_select("*.#{@config.dllext}", targetfiles)
1365
+ setup_rb_error "no ruby extention exists: 'ruby #{$0} setup' first" if ents.empty?
1390
1366
  ents
1391
1367
  end
1392
1368
 
1393
1369
  def targetfiles
1394
- mapdir(existfiles() - hookfiles())
1370
+ mapdir(existfiles - hookfiles)
1395
1371
  end
1396
1372
 
1397
1373
  def mapdir(ents)
1398
- ents.map {|ent|
1374
+ ents.map do |ent|
1399
1375
  if File.exist?(ent)
1400
- then ent # objdir
1401
- else "#{curr_srcdir()}/#{ent}" # srcdir
1376
+ then ent # objdir
1377
+ else
1378
+ "#{curr_srcdir}/#{ent}" # srcdir
1402
1379
  end
1403
- }
1380
+ end
1404
1381
  end
1405
1382
 
1406
1383
  # picked up many entries from cvs-1.11.1/src/ignore.c
1407
- JUNK_FILES = %w(
1384
+ JUNK_FILES = %w[
1408
1385
  core RCSLOG tags TAGS .make.state
1409
1386
  .nse_depinfo #* .#* cvslog.* ,* .del-* *.olb
1410
1387
  *~ *.old *.bak *.BAK *.orig *.rej _$* *$
1411
1388
 
1412
1389
  *.org *.in .*
1413
- )
1390
+ ]
1414
1391
 
1415
1392
  def existfiles
1416
- glob_reject(JUNK_FILES, (files_of(curr_srcdir()) | files_of('.')))
1393
+ glob_reject(JUNK_FILES, (files_of(curr_srcdir) | files_of('.')))
1417
1394
  end
1418
1395
 
1419
1396
  def hookfiles
1420
- %w( pre-%s post-%s pre-%s.rb post-%s.rb ).map {|fmt|
1421
- %w( config setup install clean ).map {|t| sprintf(fmt, t) }
1422
- }.flatten
1397
+ %w[pre-%s post-%s pre-%s.rb post-%s.rb].map do |fmt|
1398
+ %w[config setup install clean].map { |t| format(fmt, t) }
1399
+ end.flatten
1423
1400
  end
1424
1401
 
1425
1402
  def glob_select(pat, ents)
1426
1403
  re = globs2re([pat])
1427
- ents.select {|ent| re =~ ent }
1404
+ ents.select { |ent| re =~ ent }
1428
1405
  end
1429
1406
 
1430
1407
  def glob_reject(pats, ents)
1431
1408
  re = globs2re(pats)
1432
- ents.reject {|ent| re =~ ent }
1409
+ ents.reject { |ent| re =~ ent }
1433
1410
  end
1434
1411
 
1435
1412
  GLOB2REGEX = {
@@ -1441,7 +1418,7 @@ class Installer
1441
1418
 
1442
1419
  def globs2re(pats)
1443
1420
  /\A(?:#{
1444
- pats.map {|pat| pat.gsub(/[\.\$\#\*]/) {|ch| GLOB2REGEX[ch] } }.join('|')
1421
+ pats.map { |pat| pat.gsub(/[.$\#*]/) { |ch| GLOB2REGEX[ch] } }.join('|')
1445
1422
  })\z/
1446
1423
  end
1447
1424
 
@@ -1453,10 +1430,10 @@ class Installer
1453
1430
 
1454
1431
  def exec_test
1455
1432
  unless File.directory?('test')
1456
- $stderr.puts 'no test in this package' if verbose?
1433
+ warn 'no test in this package' if verbose?
1457
1434
  return
1458
1435
  end
1459
- $stderr.puts 'Running tests...' if verbose?
1436
+ warn 'Running tests...' if verbose?
1460
1437
  begin
1461
1438
  require 'test/unit'
1462
1439
  rescue LoadError
@@ -1483,8 +1460,9 @@ class Installer
1483
1460
  alias clean_dir_conf noop
1484
1461
  alias clean_dir_man noop
1485
1462
 
1486
- def clean_dir_ext(rel)
1487
- return unless extdir?(curr_srcdir())
1463
+ def clean_dir_ext(_rel)
1464
+ return unless extdir?(curr_srcdir)
1465
+
1488
1466
  make 'clean' if File.file?('Makefile')
1489
1467
  end
1490
1468
 
@@ -1501,8 +1479,9 @@ class Installer
1501
1479
  alias distclean_dir_bin noop
1502
1480
  alias distclean_dir_lib noop
1503
1481
 
1504
- def distclean_dir_ext(rel)
1505
- return unless extdir?(curr_srcdir())
1482
+ def distclean_dir_ext(_rel)
1483
+ return unless extdir?(curr_srcdir)
1484
+
1506
1485
  make 'distclean' if File.file?('Makefile')
1507
1486
  end
1508
1487
 
@@ -1518,7 +1497,7 @@ class Installer
1518
1497
  run_hook "pre-#{task}"
1519
1498
  FILETYPES.each do |type|
1520
1499
  if type == 'ext' and config('without-ext') == 'yes'
1521
- $stderr.puts 'skipping ext/* by user option' if verbose?
1500
+ warn 'skipping ext/* by user option' if verbose?
1522
1501
  next
1523
1502
  end
1524
1503
  traverse task, type, "#{task}_dir_#{type}"
@@ -1527,14 +1506,14 @@ class Installer
1527
1506
  end
1528
1507
 
1529
1508
  def traverse(task, rel, mid)
1530
- dive_into(rel) {
1509
+ dive_into(rel) do
1531
1510
  run_hook "pre-#{task}"
1532
- __send__ mid, rel.sub(%r[\A.*?(?:/|\z)], '')
1533
- directories_of(curr_srcdir()).each do |d|
1511
+ __send__ mid, rel.sub(%r{\A.*?(?:/|\z)}, '')
1512
+ directories_of(curr_srcdir).each do |d|
1534
1513
  traverse task, "#{rel}/#{d}", mid
1535
1514
  end
1536
1515
  run_hook "post-#{task}"
1537
- }
1516
+ end
1538
1517
  end
1539
1518
 
1540
1519
  def dive_into(rel)
@@ -1544,29 +1523,29 @@ class Installer
1544
1523
  Dir.mkdir dir unless File.dir?(dir)
1545
1524
  prevdir = Dir.pwd
1546
1525
  Dir.chdir dir
1547
- $stderr.puts '---> ' + rel if verbose?
1526
+ warn '---> ' + rel if verbose?
1548
1527
  @currdir = rel
1549
1528
  yield
1550
1529
  Dir.chdir prevdir
1551
- $stderr.puts '<--- ' + rel if verbose?
1530
+ warn '<--- ' + rel if verbose?
1552
1531
  @currdir = File.dirname(rel)
1553
1532
  end
1554
1533
 
1555
1534
  def run_hook(id)
1556
- path = [ "#{curr_srcdir()}/#{id}",
1557
- "#{curr_srcdir()}/#{id}.rb" ].detect {|cand| File.file?(cand) }
1535
+ path = ["#{curr_srcdir}/#{id}",
1536
+ "#{curr_srcdir}/#{id}.rb"].detect { |cand| File.file?(cand) }
1558
1537
  return unless path
1538
+
1559
1539
  begin
1560
1540
  instance_eval File.read(path), path, 1
1561
- rescue
1541
+ rescue StandardError
1562
1542
  raise if $DEBUG
1543
+
1563
1544
  setup_rb_error "hook #{path} failed:\n" + $!.message
1564
1545
  end
1565
1546
  end
1566
-
1567
1547
  end # class Installer
1568
1548
 
1569
-
1570
1549
  class SetupError < StandardError; end
1571
1550
 
1572
1551
  def setup_rb_error(msg)
@@ -1578,8 +1557,9 @@ if $0 == __FILE__
1578
1557
  ToplevelInstaller.invoke
1579
1558
  rescue SetupError
1580
1559
  raise if $DEBUG
1581
- $stderr.puts $!.message
1582
- $stderr.puts "Try 'ruby #{$0} --help' for detailed usage."
1560
+
1561
+ warn $!.message
1562
+ warn "Try 'ruby #{$0} --help' for detailed usage."
1583
1563
  exit 1
1584
1564
  end
1585
1565
  end