lib/rscons.rb in rscons-1.4.3 vs lib/rscons.rb in rscons-1.5.0

- old
+ new

@@ -1,5 +1,6 @@ +require_relative "rscons/build_target" require_relative "rscons/builder" require_relative "rscons/cache" require_relative "rscons/environment" require_relative "rscons/varset" require_relative "rscons/version" @@ -12,22 +13,25 @@ require_relative "rscons/builders/preprocess" require_relative "rscons/builders/program" # Namespace module for rscons classes module Rscons + # Names of the default builders which will be added to all newly created + # {Environment} objects. DEFAULT_BUILDERS = [ :CFile, :Disassemble, :Library, :Object, :Preprocess, :Program, ] + # Class to represent a fatal error while building a target. class BuildError < RuntimeError; end - # Remove all generated files + # Remove all generated files. def self.clean cache = Cache.instance # remove all built files cache.targets.each do |target| FileUtils.rm_f(target) @@ -40,18 +44,84 @@ end end cache.clear end - # Return whether the given path is an absolute filesystem path or not - # @param path [String] the path to examine + # 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 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 + # + # @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<String>] 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 + 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 + ["sh", "-c"] + 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<String>] 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"] + end + rescue + end + end + end || [] + end + + # Set the command executer array. + # + # @param val [Array<String>] Command used to execute commands. + def self.command_executer=(val) + @@command_executer = val + end end + +# Unbuffer $stdout +$stdout.sync = true