rubytree 0.9.5 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
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