Imported Upstream version 1.6.6
[debian/sudo] / mkdefaults
1 #!/usr/bin/perl -w
2 #
3 # Generate sudo_defs_table and associated defines
4 #
5 # Input should be formatted thusly:
6 #
7 # var_name
8 #       TYPE
9 #       description (or NULL)
10
11 # Deal with optional -o (output) argument
12 if ($#ARGV > 0 && $ARGV[0] eq "-o") {
13     shift;
14     $header = $cfile = shift;
15     $header .= '.h';
16     $cfile .= '.c';
17 }
18 die "usage: $0 input_file" unless $#ARGV == 0;
19
20 $infile = $ARGV[0];
21 if (!defined($header)) {
22     $header = $infile;
23     $header =~ s/(\.in)?$/.h/;
24 }
25 if (!defined($cfile)) {
26     $cfile = $infile;
27     $cfile =~ s/(\.in)?$/.c/;
28 }
29
30 open(IN, "<$infile") || die "$0: can't open $infile: $!\n";
31 open(HEADER, ">$header") || die "$0: can't open $header: $!\n";
32 open(CFILE, ">$cfile") || die "$0: can't open $cfile: $!\n";
33
34 print CFILE "struct sudo_defs_types sudo_defs_table[] = {\n    {\n";
35
36 $count = -1;
37 while(<IN>) {
38     chomp;
39     next if /^\s*$/;
40     next if /^\s*#/;
41
42     if (/^\S/) {
43         # Print last record
44         &print_record() if defined($var);
45
46         $var = $_;
47         ($type, $desc) = (undef, undef);
48         $count++;
49     } else {
50         s/^\s+//;
51         s/\s+$//;
52         die "$0: syntax error near line $.\n" if
53             defined($type) && defined($desc);
54         next if /^NULL$/;
55         if (defined($type)) {
56             # Strip leading and trailing double quote and escape the rest
57             s/^"//;
58             s/"$//;
59             s/"/\\"/g;
60             $desc = "\"$_\"";
61         } else {
62             $type = $_;
63         }
64     }
65 }
66 &print_record();
67 print CFILE "\tNULL, 0, NULL\n    }\n};\n";
68
69 close(IN);
70 close(HEADER);
71 close(CFILE);
72
73 sub print_record {
74     $defname = "I_" . uc($var);
75     printf HEADER "#define %-24s%d", $defname, $count;
76     #print HEADER "\t/* $desc */" if defined($desc);
77     print HEADER "\n";
78
79     $desc = "NULL" unless defined($desc);
80     print CFILE "\t\"$var\", $type,\n\t$desc\n    }, {\n";
81 }