diff --git a/lib/rscons.rb b/lib/rscons.rb index 9a89dc9..cedbb18 100644 --- a/lib/rscons.rb +++ b/lib/rscons.rb @@ -19,6 +19,7 @@ require_relative "rscons/builders/simple_builder" # Namespace module for rscons classes module Rscons + # Names of the default builders which will be added to all newly created # {Environment} objects. DEFAULT_BUILDERS = [ @@ -37,110 +38,114 @@ module Rscons # Class to represent a fatal error while building a target. class BuildError < RuntimeError; end - # Remove all generated files. - # - # @return [void] - def self.clean - cache = Cache.instance - # remove all built files - cache.targets.each do |target| - FileUtils.rm_f(target) - end - # remove all created directories if they are empty - cache.directories.sort {|a, b| b.size <=> a.size}.each do |directory| - next unless File.directory?(directory) - if (Dir.entries(directory) - ['.', '..']).empty? - Dir.rmdir(directory) rescue nil + class << self + + # Remove all generated files. + # + # @return [void] + def clean + cache = Cache.instance + # remove all built files + cache.targets.each do |target| + FileUtils.rm_f(target) end - end - cache.clear - end - - # Return whether the given path is an absolute filesystem path. - # - # @param path [String] the path to examine. - # - # @return [Boolean] Whether the given path is an absolute filesystem path. - def self.absolute_path?(path) - path =~ %r{^(/|\w:[\\/])} - end - - # Return whether the given target is a phony target. - # - # @param target [Symbol, String] Target name. - # - # @return [Boolean] Whether the given target is a phony target. - def self.phony_target?(target) - target.is_a?(Symbol) - end - - # Return a new path by changing the suffix in path to suffix. - # - # @param path [String] The path to alter. - # @param suffix [String] The new filename suffix, e.g. ".exe". - # - # @return [String] New path. - def self.set_suffix(path, suffix) - path.sub(/\.[^.]*$/, "") + suffix - end - - # Return the system shell and arguments for executing a shell command. - # - # @return [Array] The shell and flag. - def self.get_system_shell - @@shell ||= - begin - test_shell = lambda do |*args| - begin - "success" == IO.popen([*args, "echo success"]) do |io| - io.read.strip - end - rescue - false - end + # remove all created directories if they are empty + cache.directories.sort {|a, b| b.size <=> a.size}.each do |directory| + next unless File.directory?(directory) + if (Dir.entries(directory) - ['.', '..']).empty? + Dir.rmdir(directory) rescue nil end - if ENV["SHELL"] and ENV["SHELL"] != "" and test_shell[ENV["SHELL"], "-c"] - [ENV["SHELL"], "-c"] - elsif Object.const_get("RUBY_PLATFORM") =~ /mingw/ - if test_shell["sh", "-c"] - # Using Rscons from MSYS should use MSYS's shell. - ["sh", "-c"] + end + cache.clear + end + + # Return whether the given path is an absolute filesystem path. + # + # @param path [String] the path to examine. + # + # @return [Boolean] Whether the given path is an absolute filesystem path. + def absolute_path?(path) + path =~ %r{^(/|\w:[\\/])} + end + + # Return whether the given target is a phony target. + # + # @param target [Symbol, String] Target name. + # + # @return [Boolean] Whether the given target is a phony target. + def phony_target?(target) + target.is_a?(Symbol) + end + + # Return a new path by changing the suffix in path to suffix. + # + # @param path [String] The path to alter. + # @param suffix [String] The new filename suffix, e.g. ".exe". + # + # @return [String] New path. + def set_suffix(path, suffix) + path.sub(/\.[^.]*$/, "") + suffix + end + + # Return the system shell and arguments for executing a shell command. + # + # @return [Array] The shell and flag. + def get_system_shell + @@shell ||= + begin + test_shell = lambda do |*args| + begin + "success" == IO.popen([*args, "echo success"]) do |io| + io.read.strip + end + rescue + false + end + end + if ENV["SHELL"] and ENV["SHELL"] != "" and test_shell[ENV["SHELL"], "-c"] + [ENV["SHELL"], "-c"] + elsif Object.const_get("RUBY_PLATFORM") =~ /mingw/ + if test_shell["sh", "-c"] + # Using Rscons from MSYS should use MSYS's shell. + ["sh", "-c"] + else + ["cmd", "/c"] + end else - ["cmd", "/c"] + ["sh", "-c"] end - else - ["sh", "-c"] end - end - end + end - # Return an Array containing a command used to execute commands. - # - # This will normally be an empty Array, but on Windows if Rscons detects - # that it is running in MSYS then ["env"] will be returned. - # - # @return [Array] Command used to execute commands. - def self.command_executer - @@command_executer ||= - if Object.const_get("RUBY_PLATFORM") =~ /mingw/ - if ENV.keys.find {|key| key =~ /MSYS/} - begin - if IO.popen(["env", "echo", "success"]) {|io| io.read.strip} == "success" - ["env"] + # Return an Array containing a command used to execute commands. + # + # This will normally be an empty Array, but on Windows if Rscons detects + # that it is running in MSYS then ["env"] will be returned. + # + # @return [Array] Command used to execute commands. + def command_executer + @@command_executer ||= + if Object.const_get("RUBY_PLATFORM") =~ /mingw/ + if ENV.keys.find {|key| key =~ /MSYS/} + begin + if IO.popen(["env", "echo", "success"]) {|io| io.read.strip} == "success" + ["env"] + end + rescue end - rescue end - end - end || [] - end + end || [] + end + + # Set the command executer array. + # + # @param val [Array] Command used to execute commands. + # + # @return [Array] Command used to execute commands. + def command_executer=(val) + @@command_executer = val + end - # Set the command executer array. - # - # @param val [Array] Command used to execute commands. - # - # @return [Array] Command used to execute commands. - def self.command_executer=(val) - @@command_executer = val end end