webengine/osswebengine/WebKitTools/Scripts/clean-header-guards
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 14 Sep 2010 23:23:58 +0300
branchRCL_3
changeset 95 d96eed154187
parent 0 dd21522fd290
permissions -rw-r--r--
Revision: 201034 Kit: 201035

#!/usr/bin/ruby

require 'find'
require 'optparse'

options = {}
OptionParser.new do |opts|
  opts.banner = "Usage: clean-header-guards [options]"
  
  opts.on("--prefix [PREFIX]", "Append a header prefix to all guards") do |prefix|
    options[:prefix] = prefix
  end
end.parse!

IgnoredFilenamePatterns = [
  # ignore headers which are known not to have guard
  /WebCorePrefix/, 
  /ForwardingHeaders/,
  %r|bindings/objc|, 
  /vcproj/, # anything inside a vcproj is in the windows wasteland
  
  # we don't own any of these headers
  %r|icu/unicode|,
  %r|platform/graphics/cairo|,
  %r|platform/image-decoders|,
  
  /config.h/ # changing this one sounds scary
].freeze

IgnoreFileNamesPattern = Regexp.union(*IgnoredFilenamePatterns).freeze

Find::find(".") do |filename|
  next unless filename =~ /\.h$/
  next if filename.match(IgnoreFileNamesPattern)
  
  File.open(filename, "r+") do |file|
    contents = file.read
    match_results = contents.match(/#ifndef (\S+)\n#define \1/s)
    if match_results
      current_guard = match_results[1]
      new_guard = File.basename(filename).sub('.', '_')
      new_guard = options[:prefix] + '_' + new_guard  if options[:prefix]
      contents.gsub!(/#{current_guard}\b/, new_guard)
    else
      puts "Ignoring #{filename}, failed to find existing header guards."
    end
    tmp_filename = filename + ".tmp"
    File.open(tmp_filename, "w+") do |new_file|
      new_file.write(contents)
    end
    File.rename tmp_filename, filename
  end
end