From d22ac50ad493256c707b7b39eadf3ac46d989224 Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 29 Nov 2012 08:12:29 +0000 Subject: tool/vpath.rb * tool/generic_erb.rb, tool/id2token.rb: add --path-separator option for mingw where make and built ruby live in different world. * tool/vpath.rb: extract from tool/instruction.rb. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37985 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- tool/vpath.rb | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 tool/vpath.rb (limited to 'tool/vpath.rb') diff --git a/tool/vpath.rb b/tool/vpath.rb new file mode 100644 index 0000000000..5241d2d544 --- /dev/null +++ b/tool/vpath.rb @@ -0,0 +1,79 @@ +# -*- coding: us-ascii -*- + +class VPath + attr_accessor :separator + + def initialize(*list) + @list = list + @additional = [] + @separator = File::PATH_SEPARATOR + end + + def inspect + list.inspect + end + + def search(meth, base, *rest) + begin + meth.call(base, *rest) + rescue Errno::ENOENT => error + list.each do |dir| + return meth.call(File.join(dir, base), *rest) rescue nil + end + raise error + end + end + + def process(*args, &block) + search(File.method(__callee__), *args, &block) + end + + alias stat process + alias lstat process + + def open(*args) + f = search(File.method(:open), *args) + if block_given? + begin + yield f + ensure + f.close unless f.closed? + end + else + f + end + end + + def read(*args) + open(*args) {|f| f.read} + end + + def foreach(file, *args, &block) + open(file) {|f| f.each(*args, &block)} + end + + def def_options(opt) + opt.on("-I", "--srcdir=DIR", "add a directory to search path") {|dir| + @additional << dir + } + opt.on("-L", "--vpath=PATH LIST", "add directories to search path") {|dirs| + @additional << [dirs] + } + opt.on("--path-separator=SEP", /\A\W\z/, "separator for vpath") {|sep| + @separator = sep + } + end + + def list + @additional.reject! do |dirs| + case dirs + when String + @list << dirs + when Array + @list.concat(dirs[0].split(@separator)) + end + true + end + @list + end +end -- cgit v1.2.3