initial import
[vuplus_webkit] / Tools / Scripts / clean-header-guards
1 #!/usr/bin/ruby
2
3 require 'find'
4 require 'optparse'
5
6 options = {}
7 OptionParser.new do |opts|
8   opts.banner = "Usage: clean-header-guards [options]"
9   
10   opts.on("--prefix [PREFIX]", "Append a header prefix to all guards") do |prefix|
11     options[:prefix] = prefix
12   end
13 end.parse!
14
15 IgnoredFilenamePatterns = [
16   # ignore headers which are known not to have guard
17   /WebCorePrefix/, 
18   /ForwardingHeaders/,
19   %r|bindings/objc|, 
20   /vcproj/, # anything inside a vcproj is in the windows wasteland
21   
22   # we don't own any of these headers
23   %r|icu/unicode|,
24   %r|platform/graphics/cairo|,
25   %r|platform/image-decoders|,
26   
27   /config.h/ # changing this one sounds scary
28 ].freeze
29
30 IgnoreFileNamesPattern = Regexp.union(*IgnoredFilenamePatterns).freeze
31
32 Find::find(".") do |filename|
33   next unless filename =~ /\.h$/
34   next if filename.match(IgnoreFileNamesPattern)
35   
36   File.open(filename, "r+") do |file|
37     contents = file.read
38     match_results = contents.match(/#ifndef (\S+)\n#define \1/s)
39     if match_results
40       current_guard = match_results[1]
41       new_guard = File.basename(filename).sub('.', '_')
42       new_guard = options[:prefix] + '_' + new_guard  if options[:prefix]
43       contents.gsub!(/#{current_guard}\b/, new_guard)
44     else
45       puts "Ignoring #{filename}, failed to find existing header guards."
46     end
47     tmp_filename = filename + ".tmp"
48     File.open(tmp_filename, "w+") do |new_file|
49       new_file.write(contents)
50     end
51     File.rename tmp_filename, filename
52   end
53 end