1 2module Rake 3 require 'rake/alt_system' 4 5 # Win 32 interface methods for Rake. Windows specific functionality 6 # will be placed here to collect that knowledge in one spot. 7 module Win32 8 9 # Error indicating a problem in locating the home directory on a 10 # Win32 system. 11 class Win32HomeError < RuntimeError 12 end 13 14 class << self 15 # True if running on a windows system. 16 def windows? 17 AltSystem::WINDOWS 18 end 19 20 # Run a command line on windows. 21 def rake_system(*cmd) 22 AltSystem.system(*cmd) 23 end 24 25 # The standard directory containing system wide rake files on 26 # Win 32 systems. Try the following environment variables (in 27 # order): 28 # 29 # * HOME 30 # * HOMEDRIVE + HOMEPATH 31 # * APPDATA 32 # * USERPROFILE 33 # 34 # If the above are not defined, the return nil. 35 def win32_system_dir #:nodoc: 36 win32_shared_path = ENV['HOME'] 37 if win32_shared_path.nil? && ENV['HOMEDRIVE'] && ENV['HOMEPATH'] 38 win32_shared_path = ENV['HOMEDRIVE'] + ENV['HOMEPATH'] 39 end 40 41 win32_shared_path ||= ENV['APPDATA'] 42 win32_shared_path ||= ENV['USERPROFILE'] 43 raise Win32HomeError, "Unable to determine home path environment variable." if 44 win32_shared_path.nil? or win32_shared_path.empty? 45 normalize(File.join(win32_shared_path, 'Rake')) 46 end 47 48 # Normalize a win32 path so that the slashes are all forward slashes. 49 def normalize(path) 50 path.gsub(/\\/, '/') 51 end 52 53 end 54 end 55end 56