From 7698fbf61831b3555077b0f7f3e8b91ecd4d56da Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sun, 8 Feb 2015 18:04:37 -0500 Subject: [PATCH] add "rscons" binary - close #24 --- bin/rscons | 3 ++ lib/rscons/cli.rb | 78 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100755 bin/rscons create mode 100644 lib/rscons/cli.rb diff --git a/bin/rscons b/bin/rscons new file mode 100755 index 0000000..c7a1455 --- /dev/null +++ b/bin/rscons @@ -0,0 +1,3 @@ +require "rscons/cli" + +Rscons::Cli.run(ARGV) diff --git a/lib/rscons/cli.rb b/lib/rscons/cli.rb new file mode 100644 index 0000000..575754e --- /dev/null +++ b/lib/rscons/cli.rb @@ -0,0 +1,78 @@ +require "rscons" +require "optparse" + +module Rscons + # Command-Line Interface functionality. + module Cli + + # Default files to look for to execute if none specified. + DEFAULT_RSCONSFILES = %w[Rsconsfile Rsconsfile.rb] + + class << self + + # Run the Rscons CLI. + # + # @param argv [Array] + # Command-line parameters. + # + # @return [void] + def run(argv) + argv = argv.dup + rsconsfile = nil + + OptionParser.new do |opts| + opts.banner = "Usage: #{$0} [options]" + + opts.separator "" + opts.separator "Options:" + + opts.on("-c", "--clean", "Perform clean operation") do + Rscons.clean + exit 0 + end + + opts.on("-f FILE", "Execute FILE (default Rsconsfile)") do |f| + rsconsfile = f + end + + opts.on_tail("--version", "Show version") do + puts "Rscons version #{Rscons::VERSION}" + exit 0 + end + + opts.on_tail("-h", "--help", "Show this help.") do + puts opts + exit 0 + end + + end.parse!(argv) + + if rsconsfile + unless File.exists?(rsconsfile) + $stderr.puts "Cannot read #{rsconsfile}" + exit 1 + end + else + rsconsfile = DEFAULT_RSCONSFILES.find do |f| + File.exists?(f) + end + unless rsconsfile + $stderr.puts "Could not find the Rsconsfile to execute." + $stderr.puts "Looked in: [#{DEFAULT_RSCONSFILES.join(", ")}]" + exit 1 + end + end + + begin + load rsconsfile + rescue Rscons::BuildError => e + $stderr.puts e.message + exit 1 + end + + exit 0 + end + + end + end +end