Annotation of src/usr.bin/sudo/mkdefaults, Revision 1.1
1.1 ! millert 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: }