annotate src/config/settings-get.pl @ 9179:f8460b27db00 HEAD

doveconf: With -p only protocol-specific settings are returned. -n and -a return human-readable output.
author Timo Sirainen <tss@iki.fi>
date Thu, 30 Apr 2009 15:02:44 -0400
parents e4cc93190ec3
children e374a365521d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
1 #!/usr/bin/env perl
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2 use strict;
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 print '#include "lib.h"'."\n";
9011
c37f7113b1ee doveconf now checks that all settings are ok by calling check functions.
Timo Sirainen <tss@iki.fi>
parents: 9002
diff changeset
5 print '#include "array.h"'."\n";
9177
e4cc93190ec3 Moved pop3_uidl_format checking to mail-storage-settings.
Timo Sirainen <tss@iki.fi>
parents: 9159
diff changeset
6 print '#include "var-expand.h"'."\n";
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 print '#include "settings-parser.h"'."\n";
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 print '#include "all-settings.h"'."\n";
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 print '#include <stddef.h>'."\n";
9011
c37f7113b1ee doveconf now checks that all settings are ok by calling check functions.
Timo Sirainen <tss@iki.fi>
parents: 9002
diff changeset
10 print '#include <unistd.h>'."\n";
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 print '#define CONFIG_BINARY'."\n";
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 my %parsers = {};
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 foreach my $file (@ARGV) {
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 my $f;
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 open($f, $file) || die "Can't open $file: $@";
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 my $state = 0;
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 my $file_contents = "";
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 my $externs = "";
9011
c37f7113b1ee doveconf now checks that all settings are ok by calling check functions.
Timo Sirainen <tss@iki.fi>
parents: 9002
diff changeset
22 my $code = "";
c37f7113b1ee doveconf now checks that all settings are ok by calling check functions.
Timo Sirainen <tss@iki.fi>
parents: 9002
diff changeset
23 my %funcs;
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 while (<$f>) {
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 my $write = 0;
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 if ($state == 0) {
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 if (/struct .*_settings {/ ||
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 /struct setting_define.*{/ ||
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 /struct .*_default_settings = {/) {
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 $state++;
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 } elsif (/^(static )?struct setting_parser_info (.*) = {/) {
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 $state++;
9179
f8460b27db00 doveconf: With -p only protocol-specific settings are returned. -n and -a return human-readable output.
Timo Sirainen <tss@iki.fi>
parents: 9177
diff changeset
34 my $name = $2;
f8460b27db00 doveconf: With -p only protocol-specific settings are returned. -n and -a return human-readable output.
Timo Sirainen <tss@iki.fi>
parents: 9177
diff changeset
35 $parsers{$name} = 1 if ($name !~ /\*/);
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 } elsif (/^extern struct setting_parser_info (.*);/) {
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 $externs .= "extern struct setting_parser_info $1;\n";
9011
c37f7113b1ee doveconf now checks that all settings are ok by calling check functions.
Timo Sirainen <tss@iki.fi>
parents: 9002
diff changeset
38 } elsif (/\/\* <settings checks> \*\//) {
c37f7113b1ee doveconf now checks that all settings are ok by calling check functions.
Timo Sirainen <tss@iki.fi>
parents: 9002
diff changeset
39 $state = 4;
c37f7113b1ee doveconf now checks that all settings are ok by calling check functions.
Timo Sirainen <tss@iki.fi>
parents: 9002
diff changeset
40 $code .= $_;
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9011
diff changeset
43 if (/#define.*DEF/ || /^#undef.*DEF/ || /ARRAY_DEFINE_TYPE.*_settings/) {
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44 $write = 1;
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 $state = 2 if (/\\$/);
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47 } elsif ($state == 2) {
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48 $write = 1;
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 $state = 0 if (!/\\$/);
9011
c37f7113b1ee doveconf now checks that all settings are ok by calling check functions.
Timo Sirainen <tss@iki.fi>
parents: 9002
diff changeset
50 } elsif ($state == 4) {
c37f7113b1ee doveconf now checks that all settings are ok by calling check functions.
Timo Sirainen <tss@iki.fi>
parents: 9002
diff changeset
51 $code .= $_;
c37f7113b1ee doveconf now checks that all settings are ok by calling check functions.
Timo Sirainen <tss@iki.fi>
parents: 9002
diff changeset
52 $state = 0 if (/\/\* <\/settings checks> \*\//);
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 if ($state == 1 || $state == 3) {
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56 if ($state == 1) {
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57 if (/DEFLIST.*".*",(.*)$/) {
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58 my $value = $1;
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59 if ($value =~ /.*&(.*)\)/) {
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 $parsers{$1} = 0;
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61 $externs .= "extern struct setting_parser_info $1;\n";
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62 } else {
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 $state = 3;
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 } elsif ($state == 3) {
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67 if (/.*&(.*)\)/) {
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68 $parsers{$1} = 0;
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 $write = 1;
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73 if (/};/) {
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
74 $state = 0;
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
76 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
77
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78 $file_contents .= $_ if ($write);
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
79 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81 print "/* $file */\n";
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82 print $externs;
9011
c37f7113b1ee doveconf now checks that all settings are ok by calling check functions.
Timo Sirainen <tss@iki.fi>
parents: 9002
diff changeset
83 print $code;
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84 print $file_contents;
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86 close $f;
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89 print "struct config_setting_parser_list config_setting_parsers[] = {\n";
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
90 foreach my $name (keys %parsers) {
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
91 next if (!$parsers{$name});
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
92
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
93 my $module = "";
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
94 if ($name =~ /^([^_]*)/) {
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
95 $module = $1;
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
97 print " { \"$module\", &".$name.", NULL, NULL }, \n";
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
98 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
99 print " { NULL, NULL, NULL, NULL }\n";
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
100 print "};\n";