mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 16ba360423
			
		
	
	
		16ba360423
		
	
	
	
	
		
			
			* template/prelude.c.tmpl (Prelude#translate): strip VPATH prefix from prelude names, so that srcdir diffrences do not make the generated code diffrent. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48490 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			87 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # -*- coding: us-ascii -*-
 | |
| 
 | |
| class VPath
 | |
|   attr_accessor :separator
 | |
| 
 | |
|   def initialize(*list)
 | |
|     @list = list
 | |
|     @additional = []
 | |
|     @separator = nil
 | |
|   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|\.(\W).+)/, "separator for vpath") {|sep, vsep|
 | |
|       # hack for msys make.
 | |
|       @separator = vsep || sep
 | |
|     }
 | |
|   end
 | |
| 
 | |
|   def list
 | |
|     @additional.reject! do |dirs|
 | |
|       case dirs
 | |
|       when String
 | |
|         @list << dirs
 | |
|       when Array
 | |
|         raise "--path-separator option is needed for vpath list" unless @separator
 | |
|         # @separator ||= (require 'rbconfig'; RbConfig::CONFIG["PATH_SEPARATOR"])
 | |
|         @list.concat(dirs[0].split(@separator))
 | |
|       end
 | |
|       true
 | |
|     end
 | |
|     @list
 | |
|   end
 | |
| 
 | |
|   def strip(path)
 | |
|     prefix = list.map {|dir| Regexp.quote(dir)}
 | |
|     path.sub(/\A#{prefix.join('|')}(?:\/|\z)/, '')
 | |
|   end
 | |
| end
 |