Build fix #3: Adopt attribution AVCaptureSession SPI for GPU process
[WebKit-https.git] / Source / WTF / Scripts / GeneratePreferences.rb
index 3c6eaf0707959ccb0587c742a80ee6ee61453ad5..522ee3c506cfd4ae581f03b7dd20cb672fe173b8 100644 (file)
@@ -38,7 +38,7 @@ options = {
   :templates => []
 }
 optparse = OptionParser.new do |opts|
-  opts.banner = "Usage: #{File.basename($0)} --input file"
+  opts.banner = "Usage: #{File.basename($0)} --frontend <frontend> --base <base> --debug <debug> --experimental <experimental> --internal <internal> --template file"
 
   opts.separator ""
 
@@ -100,6 +100,7 @@ class Preference
   attr_accessor :condition
   attr_accessor :hidden
   attr_accessor :defaultValues
+  attr_accessor :exposed
 
   def initialize(name, opts, frontend)
     @name = name
@@ -113,6 +114,7 @@ class Preference
     @condition = opts["condition"]
     @hidden = opts["hidden"] || false
     @defaultValues = opts["defaultValue"][frontend]
+    @exposed = !opts["exposed"] || opts["exposed"].include?(frontend)
   end
 
   def nameLower
@@ -120,7 +122,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]
@@ -190,6 +192,12 @@ class Preferences
     @experimentalFeatures.sort! { |x, y| x.name <=> y.name }.sort! { |x, y| x.humanReadableName <=> y.humanReadableName }
     @internalFeatures.sort! { |x, y| x.name <=> y.name }.sort! { |x, y| x.humanReadableName <=> y.humanReadableName }
 
+    @exposedPreferences = @preferences.select { |p| p.exposed }
+    @exposedPreferencesNotDebug = @preferencesNotDebug.select { |p| p.exposed }
+    @exposedPreferencesDebug = @preferencesDebug.select { |p| p.exposed }
+    @exposedExperimentalFeatures = @experimentalFeatures.select { |p| p.exposed }
+    @exposedInternalFeatures = @internalFeatures.select { |p| p.exposed }
+
     @preferencesBoundToSetting = @preferences.select { |p| !p.webcoreBinding }
     @preferencesBoundToDeprecatedGlobalSettings = @preferences.select { |p| p.webcoreBinding == "DeprecatedGlobalSettings" }
     @preferencesBoundToRuntimeEnabledFeatures = @preferences.select { |p| p.webcoreBinding == "RuntimeEnabledFeatures" }
@@ -201,7 +209,10 @@ class Preferences
     result = []
     if parsedPreferences
       parsedPreferences.each do |name, options|
-        if !options["exposed"] or options["exposed"].include?(@frontend)
+        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["defaultValue"].include?(@frontend)
           preference = Preference.new(name, options, @frontend)
           @preferences << preference
           result << preference
@@ -212,14 +223,19 @@ class Preferences
   end
 
   def renderTemplate(templateFile, outputDirectory)
-    puts "Generating output for template file: #{templateFile}"
-
-    resultFile = File.basename(templateFile, ".erb")
+    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, resultFile), "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