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