dovecot-2.0: config: Parser script now supports preserving #ifde...

dovecot at dovecot.org dovecot at dovecot.org
Thu Mar 25 20:05:00 EET 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/b218d4ec6996
changeset: 10986:b218d4ec6996
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Mar 25 20:03:52 2010 +0200
description:
config: Parser script now supports preserving #ifdefs around service_settings.

diffstat:

 src/config/settings-get.pl |  31 ++++++++++++++++++++++++++++---
 1 files changed, 28 insertions(+), 3 deletions(-)

diffs (77 lines):

diff -r 93be85bb9db8 -r b218d4ec6996 src/config/settings-get.pl
--- a/src/config/settings-get.pl	Thu Mar 25 19:28:56 2010 +0200
+++ b/src/config/settings-get.pl	Thu Mar 25 20:03:52 2010 +0200
@@ -13,6 +13,7 @@
 print 'extern buffer_t config_all_services_buf;';
 
 my @services = ();
+my @service_ifdefs = ();
 my %parsers = {};
 
 foreach my $file (@ARGV) {
@@ -25,6 +26,8 @@
   my $code = "";
   my %funcs;
   my $cur_name = "";
+  my $ifdef = "";
+  my $state_ifdef = 0;
   
   while (<$f>) {
     my $write = 0;
@@ -35,7 +38,14 @@
 	$state++;
       } elsif (/^struct service_settings (.*) = {/) {
 	$state++;
+	if ($ifdef eq "") {
+	  $state_ifdef = 0;
+	} else {
+	  $_ = $ifdef."\n".$_;
+	  $state_ifdef = 1;
+	}
 	push @services, $1;
+	push @service_ifdefs, $ifdef;
       } elsif (/^(static )?const struct setting_parser_info (.*) = {/) {
 	$cur_name = $2;
 	$state++ if ($cur_name !~ /^\*default_/);
@@ -45,7 +55,13 @@
 	$state = 4;
 	$code .= $_;
       }
-
+      
+      if (/(^#ifdef .*)$/ || /^(#if .*)$/) {
+	$ifdef = $1;
+      } else {
+	$ifdef = "";
+      }
+      
       if (/#define.*DEF/ || /^#undef.*DEF/ || /ARRAY_DEFINE_TYPE.*_settings/) {
 	$write = 1;
 	$state = 2 if (/\\$/);
@@ -83,6 +99,10 @@
       $write = 1;
       if (/};/) {
 	$state = 0;
+	if ($state_ifdef) {
+	  $_ .= "#endif\n";
+	  $state_ifdef = 0;
+	}
       }
     }
   
@@ -99,8 +119,13 @@
 
 print "static struct service_settings *config_all_services[] = {\n";
 
-foreach my $name (@services) {
-  print "\t&$name,\n";
+for (my $i = 0; $i < scalar(@services); $i++) {
+  my $ifdef = $service_ifdefs[$i];
+  print "$ifdef\n" if ($ifdef ne "");
+  print "\t";
+  print "," if ($i > 0);
+  print "&".$services[$i]."\n";
+  print "#endif\n" if ($ifdef ne "");
 }
 print "};\n";
 print "buffer_t config_all_services_buf = {\n";


More information about the dovecot-cvs mailing list