GeneratePreferences.rb is noisy
[WebKit-https.git] / Source / WTF / Scripts / GeneratePreferences.rb
index 38eacc7dc352d583ba4878a88c38e2e20f9c0c9d..c9fb6df53d5f83c62d3d8ef63eba9f7fd7a711f0 100644 (file)
@@ -34,7 +34,6 @@ options = {
   :debugPreferences => nil,
   :experimentalPreferences => nil,
   :internalPreferences => nil,
-  :templateDirectory => nil,
   :outputDirectory => nil,
   :templates => []
 }
@@ -49,13 +48,12 @@ optparse = OptionParser.new do |opts|
   opts.on("--experimental input", "file to generate experimental preferences from") { |experimentalPreferences| options[:experimentalPreferences] = experimentalPreferences }
   opts.on("--internal input", "file to generate internal preferences from") { |internalPreferences| options[:internalPreferences] = internalPreferences }
   opts.on("--template input", "template to use for generation (may be specified multiple times)") { |template| options[:templates] << template }
-  opts.on("--templateDir input", "directory to look for templates in") { |templateDir| options[:templateDirectory] = templateDir }
   opts.on("--outputDir output", "directory to generate file in") { |outputDir| options[:outputDirectory] = outputDir }
 end
 
 optparse.parse!
 
-if !options[:frontend] || !options[:basePreferences] || !options[:debugPreferences] || !options[:experimentalPreferences] || !options[:internalPreferences] || !options[:templateDirectory]
+if !options[:frontend] || !options[:basePreferences] || !options[:debugPreferences] || !options[:experimentalPreferences] || !options[:internalPreferences]
   puts optparse
   exit -1
 end
@@ -122,7 +120,7 @@ class Preference
       @getter
     elsif @name.start_with?("VP")
       @name[0..1].downcase + @name[2..@name.length]
-    elsif @name.start_with?("CSS", "XSS", "FTP", "DOM", "DNS", "PDF", "ICE")
+    elsif @name.start_with?("CSS", "DOM", "DNS", "FTP", "ICE", "IPC", "PDF", "XSS")
       @name[0..2].downcase + @name[3..@name.length]
     elsif @name.start_with?("HTTP")
       @name[0..3].downcase + @name[4..@name.length]
@@ -203,6 +201,9 @@ class Preferences
     result = []
     if parsedPreferences
       parsedPreferences.each do |name, options|
+        if !options["webcoreBinding"] && options["defaultValue"].size != 3
+          raise "ERROR: Preferences bound to WebCore::Settings must have default values for all frontends: #{name}"
+        end
         if !options["exposed"] or options["exposed"].include?(@frontend)
           preference = Preference.new(name, options, @frontend)
           @preferences << preference
@@ -213,18 +214,25 @@ class Preferences
     result
   end
 
-  def renderTemplate(templateDirectory, template, outputDirectory)
-    templateFile = File.join(templateDirectory, template + ".erb")
+  def renderTemplate(templateFile, outputDirectory)
+    resultFile = File.join(outputDirectory, File.basename(templateFile, ".erb"))
+    tempResultFile = resultFile + ".tmp"
 
     output = ERB.new(File.read(templateFile), 0, "-").result(binding)
-    File.open(File.join(outputDirectory, template), "w+") do |f|
+    File.open(tempResultFile, "w+") do |f|
       f.write(output)
     end
+    if (!File.exist?(resultFile) || IO::read(resultFile) != IO::read(tempResultFile))
+      FileUtils.move(tempResultFile, resultFile)
+    else
+      FileUtils.remove_file(tempResultFile)
+      FileUtils.uptodate?(resultFile, [templateFile]) or FileUtils.touch(resultFile)
+    end
   end
 end
 
 preferences = Preferences.new(parsedBasePreferences, parsedDebugPreferences, parsedExperimentalPreferences, parsedInternalPreferences, options[:frontend])
 
 options[:templates].each do |template|
-  preferences.renderTemplate(options[:templateDirectory], template, options[:outputDirectory])
+  preferences.renderTemplate(template, options[:outputDirectory])
 end