Index: debian.chrome/scripts/misc/splitconfig.pl |
diff --git a/debian.chrome/scripts/misc/splitconfig.pl b/debian.chrome/scripts/misc/splitconfig.pl |
new file mode 100755 |
index 0000000000000000000000000000000000000000..3dca468fca6afc59078b519cc98ec61c47f4f109 |
--- /dev/null |
+++ b/debian.chrome/scripts/misc/splitconfig.pl |
@@ -0,0 +1,111 @@ |
+#!/usr/bin/perl -w |
+ |
+%allconfigs = (); |
+%common = (); |
+ |
+print "Reading config's ...\n"; |
+ |
+opendir(DIR, "."); |
+ |
+while (defined($config = readdir(DIR))) { |
+ # Only config.* |
+ next if $config !~ /^config\..*/; |
+ # Nothing that is disabled, or remnant |
+ next if $config =~ /.*\.(default|disabled|stub)$/; |
+ |
+ %{$allconfigs{$config}} = (); |
+ |
+ print " processing $config ... "; |
+ |
+ open(CONFIG, "< $config"); |
+ |
+ while (<CONFIG>) { |
+ # Skip comments |
+ /^#*\s*CONFIG_(\w+)[\s=](.*)$/ or next; |
+ |
+ ${$allconfigs{$config}}{$1} = $2; |
+ |
+ $common{$1} = $2; |
+ } |
+ |
+ close(CONFIG); |
+ |
+ print "done.\n"; |
+} |
+ |
+closedir(DIR); |
+ |
+print "\n"; |
+ |
+print "Merging lists ... \n"; |
+ |
+# %options - pointer to flavour config inside the allconfigs array |
+for $config (keys(%allconfigs)) { |
+ my %options = %{$allconfigs{$config}}; |
+ |
+ print " processing $config ... "; |
+ |
+ for $key (keys(%common)) { |
+ next if not defined $common{$key}; |
+ |
+ # If we don't have the common option, then it isn't |
+ # common. If we do have that option, it must have the same |
+ # value. EXCEPT where this file does not have a value at all |
+ # which may safely be merged with any other value; the value |
+ # will be elided during recombination of the parts. |
+ if (!defined($options{$key})) { |
+ # Its ok really ... let it merge |
+ } elsif (not defined($options{$key})) { |
+ undef $common{$key}; |
+ } elsif ($common{$key} ne $options{$key}) { |
+ undef $common{$key}; |
+ } |
+ } |
+ |
+ print "done.\n"; |
+} |
+ |
+print "\n"; |
+ |
+print "Creating common config ... "; |
+ |
+open(COMMON, "> config.common"); |
+print COMMON "#\n# Common config options automatically generated by splitconfig.pl\n#\n"; |
+ |
+for $key (sort(keys(%common))) { |
+ if (not defined $common{$key}) { |
+ print COMMON "# CONFIG_$key is UNMERGABLE\n"; |
+ } elsif ($common{$key} eq "is not set") { |
+ print COMMON "# CONFIG_$key is not set\n"; |
+ } else { |
+ print COMMON "CONFIG_$key=$common{$key}\n"; |
+ } |
+} |
+close(COMMON); |
+ |
+print "done.\n\n"; |
+ |
+print "Creating stub configs ...\n"; |
+ |
+for $config (keys(%allconfigs)) { |
+ my %options = %{$allconfigs{$config}}; |
+ |
+ print " processing $config ... "; |
+ |
+ open(STUB, "> $config"); |
+ print STUB "#\n# Config options for $config automatically generated by splitconfig.pl\n#\n"; |
+ |
+ for $key (sort(keys(%options))) { |
+ next if defined $common{$key}; |
+ |
+ if ($options{$key} =~ /^is /) { |
+ print STUB "# CONFIG_$key $options{$key}\n"; |
+ } else { |
+ print STUB "CONFIG_$key=$options{$key}\n"; |
+ } |
+ } |
+ |
+ close(STUB); |
+ |
+ print "done.\n"; |
+} |