diff options
author | n_hibma <n_hibma@FreeBSD.org> | 2001-04-07 20:51:24 +0000 |
---|---|---|
committer | n_hibma <n_hibma@FreeBSD.org> | 2001-04-07 20:51:24 +0000 |
commit | cd7f922577a6598a4fe281c3f885333bd0b5f355 (patch) | |
tree | 4ed24a0d0f637e2a6fa2b6793264173b7cc04c1a | |
parent | 3d472160f60df98bb5cb6653fa5962f68d068dc8 (diff) | |
download | FreeBSD-src-cd7f922577a6598a4fe281c3f885333bd0b5f355.zip FreeBSD-src-cd7f922577a6598a4fe281c3f885333bd0b5f355.tar.gz |
Use getopt instead of a home grown one
Submitted by: DES
-rw-r--r-- | sys/kern/makedevops.pl | 144 | ||||
-rw-r--r-- | sys/kern/makeobjops.pl | 162 |
2 files changed, 139 insertions, 167 deletions
diff --git a/sys/kern/makedevops.pl b/sys/kern/makedevops.pl index 46a2e05..4dd11f0 100644 --- a/sys/kern/makedevops.pl +++ b/sys/kern/makedevops.pl @@ -41,64 +41,39 @@ # Script to produce device front-end sugar. # -$debug = 0; -$cfile = 0; # by default do not produce any file type -$hfile = 0; - -$keepcurrentdir = 1; +use Getopt::Std; $line_width = 80; # Process the command line # -while ( $arg = shift @ARGV ) { - if ( $arg eq '-c' ) { - warn "Producing .c output files" - if $debug; - $cfile = 1; - } elsif ( $arg eq '-h' ) { - warn "Producing .h output files" - if $debug; - $hfile = 1; - } elsif ( $arg eq '-ch' || $arg eq '-hc' ) { - warn "Producing .c and .h output files" - if $debug; - $cfile = 1; - $hfile = 1; - } elsif ( $arg eq '-d' ) { - $debug = 1; - } elsif ( $arg eq '-p' ) { - warn "Will produce files in original not in current directory" - if $debug; - $keepcurrentdir = 0; - } elsif ( $arg eq '-l' ) { - if ( $line_width = shift @ARGV and $line_width > 0 ) { - warn "Line width set to $line_width" - if $debug; - } else { - die "Please specify a valid line width after -l"; - } - } elsif ( $arg =~ m/\.m$/ ) { - warn "Filename: $arg" - if $debug; - push @filenames, $arg; - } else { - warn "$arg ignored" - if $debug; - } +getopts('cdhl:p') + or usage(); + +warn "Will produce files in original not in current directory" + if $opt_d && $opt_p; + +if (defined($opt_l)) { + die("Invalid line width '$opt_l'\n") + unless ($opt_l =~ m/^\d*$/ && $opt_l > 0); + $line_width = $opt_l; + warn "Line width set to $line_width" + if $opt_d; +} + +foreach $arg (@ARGV) { + die("Invalid filename '$arg'\n") + unless ($arg =~ m/\.m$/); + warn "Filename: $arg" + if $opt_d; + push @filenames, $arg; } # Validate the command line parameters # -die "usage: $0 [-d] [-p] [-l <nr>] [-c|-h] srcfile -where -c produce only .c files - -h produce only .h files - -p use the path component in the source file for destination dir - -l set line width for output files [80] - -d switch on debugging -" - unless ($cfile or $hfile) +&usage() + unless ($opt_c or $opt_h) and $#filenames != -1; # FIXME should be able to do this more easily @@ -124,21 +99,21 @@ foreach $src ( @filenames ) { ($name, $path, $suffix) = &fileparse($src, '.m'); $path = '.' - if $keepcurrentdir; + unless $opt_p; $cfilename="$path/$name.c"; $hfilename="$path/$name.h"; warn "Processing from $src to $cfilename / $hfilename via $ctmpname / $htmpname" - if $debug; + if $opt_d; die "Could not open $src, $!" if !open SRC, "$src"; die "Could not open $ctmpname, $!" - if $cfile and !open CFILE, ">$ctmpname"; + if $opt_c and !open CFILE, ">$ctmpname"; die "Could not open $htmpname, $!" - if $hfile and !open HFILE, ">$htmpname"; + if $opt_h and !open HFILE, ">$htmpname"; - if ( $cfile ) { + if ( $opt_c ) { # Produce the header of the C file # print CFILE "/*\n"; @@ -159,7 +134,7 @@ foreach $src ( @filenames ) { print CFILE "#include <sys/bus_private.h>\n"; } - if ( $hfile ) { + if ( $opt_h ) { # Produce the header of the H file # print HFILE "/*\n"; @@ -187,9 +162,9 @@ foreach $src ( @filenames ) { # if ( $line =~ m/^#\s*include\s+(["<])([^">]+)([">]).*/i ) { warn "Included file: $1$2" . ($1 eq '<'? '>':'"') - if $debug; + if $opt_d; print CFILE "#include $1$2" . ($1 eq '<'? '>':'"') . "\n" - if $cfile; + if $opt_c; } $line =~ s/#.*//; # remove comments @@ -203,7 +178,7 @@ foreach $src ( @filenames ) { $semicolon = $2; unless ( $intname =~ m/^[a-z_][a-z0-9_]*$/ ) { warn $line - if $debug; + if $opt_d; warn "$src:$lineno: Invalid interface name '$intname', use [a-z_][a-z0-9_]*"; $error = 1; last LINE; @@ -213,14 +188,14 @@ foreach $src ( @filenames ) { if $semicolon !~ s/;$//; warn "Interface $intname" - if $debug; + if $opt_d; print HFILE '#ifndef _'.$intname."_if_h_\n" - if $hfile; + if $opt_h; print HFILE '#define _'.$intname."_if_h_\n\n" - if $hfile; + if $opt_h; print CFILE '#include "'.$intname.'_if.h"'."\n\n" - if $cfile; + if $opt_c; } elsif ( $line =~ m/^CODE\s*{$/i ) { $code = ""; $line = <SRC>; @@ -232,7 +207,7 @@ foreach $src ( @filenames ) { $line = <SRC>; $lineno++ } - if ( $cfile ) { + if ( $opt_c ) { print CFILE "\n".$code."\n"; } } elsif ( $line =~ m/^HEADER\s*{$/i ) { @@ -246,7 +221,7 @@ foreach $src ( @filenames ) { $line = <SRC>; $lineno++ } - if ( $hfile ) { + if ( $opt_h ) { print HFILE $header; } } elsif ( $line =~ m/^(STATIC|)METHOD/i ) { @@ -266,11 +241,11 @@ foreach $src ( @filenames ) { $ret = join(" ", @ret); # return type warn "Method: name=$name return type=$ret" - if $debug; + if $opt_d; if ( !$name or !$ret ) { warn $line - if $debug; + if $opt_d; warn "$src:$lineno: Invalid method specification"; $error = 1; last LINE; @@ -278,7 +253,7 @@ foreach $src ( @filenames ) { unless ( $name =~ m/^[a-z_][a-z_0-9]*$/ ) { warn $line - if $debug; + if $opt_d; warn "$src:$lineno: Invalid method name '$name', use [a-z_][a-z0-9_]*"; $error = 1; last LINE; @@ -308,7 +283,7 @@ foreach $src ( @filenames ) { $default = $1; } else { warn "$src:$lineno: Ignored '$1'" # warn about garbage at end of line - if $debug and $1; + if $opt_d and $1; } # Create a list of variables without the types prepended @@ -335,7 +310,7 @@ foreach $src ( @filenames ) { warn 'Arguments: ' . join(', ', @arguments) . "\n" . 'Varnames: ' . join(', ', @varnames) - if $debug; + if $opt_d; $mname = $intname.'_'.$name; # method name $umname = uc($mname); # uppercase method name @@ -345,11 +320,11 @@ foreach $src ( @filenames ) { $default = "0" if $default eq ""; - if ( $hfile ) { + if ( $opt_h ) { # the method description print HFILE "extern struct device_op_desc $mname\_desc;\n"; # the method typedef - my $prototype = "typedef $ret $mname\_t("; + my $prototype = "typedef $ret $mname\_t("; print HFILE &format_line("$prototype$arguments);", $line_width, ', ', ',',' ' x length($prototype)) . "\n"; @@ -357,7 +332,7 @@ foreach $src ( @filenames ) { print HFILE "$mname\_t $umname;\n\n"; } - if ( $cfile ) { + if ( $opt_c ) { # Print out the method desc print CFILE "struct device_op_desc $mname\_desc = {\n"; print CFILE "\t0, 0, (devop_t) $default, \"$mname\"\n"; @@ -368,10 +343,10 @@ foreach $src ( @filenames ) { print CFILE "$ret $umname($varnames)\n"; print CFILE "\t".join(";\n\t", @arguments).";\n"; } else { - my $prototype = "$ret $umname("; + my $prototype = "$ret $umname("; print CFILE &format_line("$prototype$arguments)", $line_width, ', ', ',', ' ' x length($prototype)) - . "\n"; + . "\n"; } print CFILE "{\n"; if ($static) { @@ -388,7 +363,7 @@ foreach $src ( @filenames ) { } } else { warn $line - if $debug; + if $opt_d; warn "$src:$lineno: Invalid line encountered"; $error = 1; last LINE; @@ -398,21 +373,21 @@ foreach $src ( @filenames ) { # print the final '#endif' in the header file # print HFILE "#endif /* _".$intname."_if_h_ */\n" - if $hfile; + if $opt_h; close SRC; close CFILE - if $cfile; + if $opt_c; close HFILE - if $hfile; + if $opt_h; if ( !$error ) { - if ( $cfile ) { + if ( $opt_c ) { ($rc = system("mv $ctmpname $cfilename")) and warn "mv $ctmpname $cfilename failed, $rc"; } - if ( $hfile ) { + if ( $opt_h ) { ($rc = system("mv $htmpname $hfilename")) and warn "mv $htmpname $hfilename failed, $rc"; } @@ -427,6 +402,17 @@ foreach $src ( @filenames ) { exit $gerror; +sub usage { + die join("\n", @_, + "usage: $0 [-d] [-p] [-l <nr>] [-c|-h] srcfile", + "where -c produce only .c files", + " -h produce only .h files", + " -p use the path component in the source file for destination dir", + " -l set line width for output files [80]", + " -d switch on debugging") + . "\n"; +} + sub format_line { my ($line, $maxlength, $break, $new_end, $new_start) = @_; my $rline = ""; diff --git a/sys/kern/makeobjops.pl b/sys/kern/makeobjops.pl index b998445..652c21b 100644 --- a/sys/kern/makeobjops.pl +++ b/sys/kern/makeobjops.pl @@ -42,65 +42,40 @@ # Script to produce kobj front-end sugar. # -$debug = 0; -$cfile = 0; # by default do not produce any file type -$hfile = 0; - -$keepcurrentdir = 1; +use Getopt::Std; $line_width = 80; # Process the command line # -while ($arg = shift @ARGV) { - if ($arg eq '-c') { - warn "Producing .c output files" - if $debug; - $cfile = 1; - } elsif ($arg eq '-h') { - warn "Producing .h output files" - if $debug; - $hfile = 1; - } elsif ($arg eq '-ch' || $arg eq '-hc') { - warn "Producing .c and .h output files" - if $debug; - $cfile = 1; - $hfile = 1; - } elsif ($arg eq '-d') { - $debug = 1; - } elsif ($arg eq '-p') { - warn "Will produce files in original not in current directory" - if $debug; - $keepcurrentdir = 0; - } elsif ($arg eq '-l') { - if ($line_width = shift @ARGV and $line_width > 0) { - warn "Line width set to $line_width" - if $debug; - } else { - die "Please specify a valid line width after -l"; - } - } elsif ($arg =~ m/\.m$/) { - warn "Filename: $arg" - if $debug; - push @filenames, $arg; - } else { - warn "$arg ignored" - if $debug; - } +getopts('cdhl:p') + or usage(); + +warn "Will produce files in original not in current directory" + if $opt_d && $opt_p; + +if (defined($opt_l)) { + die("Invalid line width '$opt_l'\n") + unless ($opt_l =~ m/^\d*$/ && $opt_l > 0); + $line_width = $opt_l; + warn "Line width set to $line_width" + if $opt_d; +} + +foreach $arg (@ARGV) { + die("Invalid input filename '$arg'\n") + unless ($arg =~ m/\.m$/); + warn "Filename: $arg" + if $opt_d; + push @filenames, $arg; } # Validate the command line parameters # -die "usage: $0 [-d] [-p] [-l <nr>] [-c|-h] srcfile -where -c produce only .c files - -h produce only .h files - -p use the path component in the source file for destination dir - -l set line width for output files [80] - -d switch on debugging -" - unless ($cfile or $hfile) - and $#filenames != -1; +&usage() + unless ($opt_c or $opt_h) + and $#filenames != -1; # FIXME should be able to do this more easily # @@ -125,21 +100,21 @@ foreach $src (@filenames) { ($name, $path, $suffix) = &fileparse($src, '.m'); $path = '.' - if $keepcurrentdir; + unless $opt_p; $cfilename="$path/$name.c"; $hfilename="$path/$name.h"; warn "Processing from $src to $cfilename / $hfilename via $ctmpname / $htmpname" - if $debug; + if $opt_d; - die "Could not open $src, $!" + die "Could not open $src for reading, $!" if !open SRC, "$src"; - die "Could not open $ctmpname, $!" - if $cfile and !open CFILE, ">$ctmpname"; - die "Could not open $htmpname, $!" - if $hfile and !open HFILE, ">$htmpname"; + die "Could not open $ctmpname for writing, $!" + if $opt_c and !open CFILE, ">$ctmpname"; + die "Could not open $htmpname for writing, $!" + if $opt_h and !open HFILE, ">$htmpname"; - if ($cfile) { + if ($opt_c) { # Produce the header of the C file # print CFILE "/*\n"; @@ -160,7 +135,7 @@ foreach $src (@filenames) { print CFILE "#include <sys/kobj.h>\n"; } - if ($hfile) { + if ($opt_h) { # Produce the header of the H file # print HFILE "/*\n"; @@ -190,14 +165,14 @@ foreach $src (@filenames) { # if ($line =~ m/^#\s*include\s+(["<])([^">]+)([">]).*/i) { warn "Included file: $1$2" . ($1 eq '<'? '>':'"') - if $debug; + if $opt_d; print CFILE "#include $1$2" . ($1 eq '<'? '>':'"') . "\n" - if $cfile; + if $opt_c; } - $line =~ s/#.*//; # remove comments - $line =~ s/^\s+//; # remove leading ... - $line =~ s/\s+$//; # remove trailing whitespace + $line =~ s/#.*//; # remove comments + $line =~ s/^\s+//; # remove leading ... + $line =~ s/\s+$//; # remove trailing whitespace if ($line =~ m/^$/) { # skip empty lines # nop @@ -206,7 +181,7 @@ foreach $src (@filenames) { $semicolon = $2; unless ($intname =~ m/^[a-z_][a-z0-9_]*$/) { warn $line - if $debug; + if $opt_d; warn "$src:$lineno: Invalid interface name '$intname', use [a-z_][a-z0-9_]*"; $error = 1; last LINE; @@ -216,14 +191,14 @@ foreach $src (@filenames) { if $semicolon !~ s/;$//; warn "Interface $intname" - if $debug; + if $opt_d; print HFILE '#ifndef _'.$intname."_if_h_\n" - if $hfile; + if $opt_h; print HFILE '#define _'.$intname."_if_h_\n\n" - if $hfile; + if $opt_h; print CFILE '#include "'.$intname.'_if.h"'."\n\n" - if $cfile; + if $opt_c; } elsif ($line =~ m/^CODE\s*{$/i) { $code = ""; $line = <SRC>; @@ -236,7 +211,7 @@ foreach $src (@filenames) { $lineno++ } print CFILE "\n".$code."\n" - if $cfile; + if $opt_c; } elsif ($line =~ m/^HEADER\s*{$/i) { $header = ""; $line = <SRC>; @@ -249,7 +224,7 @@ foreach $src (@filenames) { $lineno++ } print HFILE $header - if $hfile; + if $opt_h; } elsif ($line =~ m/^(STATIC|)METHOD/i) { # Get the return type function name and delete that from # the line. What is left is the possibly first function argument @@ -261,17 +236,17 @@ foreach $src (@filenames) { last LINE; } $line =~ s/^(STATIC|)METHOD\s+([^\{]+?)\s*\{\s*//i; - $static = $1; + $static = $1; @ret = split m/\s+/, $2; $name = pop @ret; # last element is name of method $ret = join(" ", @ret); # return type warn "Method: name=$name return type=$ret" - if $debug; + if $opt_d; if (!$name or !$ret) { warn $line - if $debug; + if $opt_d; warn "$src:$lineno: Invalid method specification"; $error = 1; last LINE; @@ -279,7 +254,7 @@ foreach $src (@filenames) { unless ($name =~ m/^[a-z_][a-z_0-9]*$/) { warn $line - if $debug; + if $opt_d; warn "$src:$lineno: Invalid method name '$name', use [a-z_][a-z0-9_]*"; $error = 1; last LINE; @@ -310,7 +285,7 @@ foreach $src (@filenames) { $default = $1; } else { warn "$src:$lineno: Ignored '$1'" # warn about garbage at end of line - if $debug and $1; + if $opt_d and $1; } # Create a list of variables without the types prepended @@ -322,22 +297,22 @@ foreach $src (@filenames) { @arguments = split m/\s*;\s*/, $line; @varnames = (); # list of varnames foreach $argument (@arguments) { - next # skip argument if argument is empty + next # skip argument if argument is empty if !$argument; @ar = split m/[*\s]+/, $argument; - if ($#ar == 0) { # only 1 word in argument? + if ($#ar == 0) { # only 1 word in argument? warn "$src:$lineno: no type for '$argument'"; $error = 1; last LINE; } - push @varnames, $ar[-1]; # last element is name of variable + push @varnames, $ar[-1]; # last element is name of variable }; warn 'Arguments: ' . join(', ', @arguments) . "\n" . 'Varnames: ' . join(', ', @varnames) - if $debug; + if $opt_d; $mname = $intname.'_'.$name; # method name $umname = uc($mname); # uppercase method name @@ -349,7 +324,7 @@ foreach $src (@filenames) { $default = "0" if $default eq ""; push @defaultmethods, $default; - if ($hfile) { + if ($opt_h) { # the method description print HFILE "extern struct kobjop_desc $mname\_desc;\n"; # the method typedef @@ -360,14 +335,14 @@ foreach $src (@filenames) { . "\n"; } - if ($cfile) { + if ($opt_c) { # Print out the method desc print CFILE "struct kobjop_desc $mname\_desc = {\n"; print CFILE "\t0, (kobjop_t) $default\n"; print CFILE "};\n\n"; } - if ($hfile) { + if ($opt_h) { # Print out the method itself if (0) { # haven't chosen the format yet print HFILE "static __inline $ret $umname($varnames)\n"; @@ -394,7 +369,7 @@ foreach $src (@filenames) { } } else { warn $line - if $debug; + if $opt_d; warn "$src:$lineno: Invalid line encountered"; $error = 1; last LINE; @@ -404,21 +379,21 @@ foreach $src (@filenames) { # print the final '#endif' in the header file # print HFILE "#endif /* _".$intname."_if_h_ */\n" - if $hfile; + if $opt_h; close SRC; close CFILE - if $cfile; + if $opt_c; close HFILE - if $hfile; + if $opt_h; if (!$error) { - if ($cfile) { + if ($opt_c) { ($rc = system("mv $ctmpname $cfilename")) and warn "mv $ctmpname $cfilename failed, $rc"; } - if ($hfile) { + if ($opt_h) { ($rc = system("mv $htmpname $hfilename")) and warn "mv $htmpname $hfilename failed, $rc"; } @@ -433,6 +408,17 @@ foreach $src (@filenames) { exit $gerror; +sub usage { + die join("\n", @_, + "usage: $0 [-d] [-p] [-l <nr>] [-c|-h] srcfile", + "where -c produce only .c files", + " -h produce only .h files", + " -p use the path component in the source file for destination dir", + " -l set line width for output files [80]", + " -d switch on debugging") + . "\n"; +} + sub format_line { my ($line, $maxlength, $break, $new_end, $new_start) = @_; my $rline = ""; |