1#!/usr/bin/env ruby
2
3require 'optparse'
4
5# this file run with BASERUBY, which may be older than 1.9, so no
6# require_relative
7require File.expand_path('../vcs', __FILE__)
8
9Program = $0
10
11@output = nil
12def self.output=(output)
13  if @output and @output != output
14    raise "you can specify only one of --changed, --revision.h and --doxygen"
15  end
16  @output = output
17end
18@suppress_not_found = false
19
20srcdir = nil
21parser = OptionParser.new {|opts|
22  opts.on("--srcdir=PATH", "use PATH as source directory") do |path|
23    srcdir = path
24  end
25  opts.on("--changed", "changed rev") do
26    self.output = :changed
27  end
28  opts.on("--revision.h", "RUBY_REVISION macro") do
29    self.output = :revision_h
30  end
31  opts.on("--doxygen", "Doxygen format") do
32    self.output = :doxygen
33  end
34  opts.on("-q", "--suppress_not_found") do
35    @suppress_not_found = true
36  end
37}
38parser.parse! rescue abort "#{File.basename(Program)}: #{$!}\n#{parser}"
39
40srcdir ||= File.dirname(File.dirname(Program))
41begin
42  vcs = VCS.detect(srcdir)
43rescue VCS::NotFoundError => e
44  abort "#{File.basename(Program)}: #{e.message}" unless @suppress_not_found
45else
46  begin
47    last, changed = vcs.get_revisions(ARGV.shift)
48  rescue => e
49    abort "#{File.basename(Program)}: #{e.message}" unless @suppress_not_found
50    exit false
51  end
52end
53
54case @output
55when :changed, nil
56  puts changed
57when :revision_h
58  puts "#define RUBY_REVISION #{changed.to_i}"
59when :doxygen
60  puts "r#{changed}/r#{last}"
61else
62  raise "unknown output format `#{@output}'"
63end
64