#!/bin/sh # $Id: config2man,v 1.3 2005/03/05 00:37:39 dasenbro Exp $ # # Copyright (c) 2001 Carnegie Mellon University. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # # 3. The name "Carnegie Mellon University" must not be used to # endorse or promote products derived from this software without # prior written permission. For permission or any other legal # details, please contact # Office of Technology Transfer # Carnegie Mellon University # 5000 Forbes Avenue # Pittsburgh, PA 15213-3890 # (412) 268-4387, fax: (412) 268-7395 # tech-transfer@andrew.cmu.edu # # 4. Redistributions of any form whatsoever must retain the following # acknowledgment: # "This product includes software developed by Computing Services # at Carnegie Mellon University (http://www.cmu.edu/computing/)." # # CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO # THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY # AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE # FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN # AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING # OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # exec perl -x -S $0 ${1+"$@"} # -*-perl-*- #!perl -w if ($] !~ /^5\..*/) { # uh-oh. this isn't perl 5. foreach (split(/:/, $ENV{PATH})) { # try to find "perl5". exec("$_/perl5", "-x", "-S", $0, @ARGV) if (-x "$_/perl5"); } # we failed. bail. die "Your perl is too old; I need perl 5.\n"; } # load the real script. this is isolated in an 'eval' so perl4 won't # choke on the perl5-isms. eval join("\n", <DATA>); if ($@) { die "$@"; } __END__ require 5; use strict; sub print_values { my @values = eval $_[0]; my $v; my $sep = " "; print "\nAllowed values:"; foreach $v (@values) { print "$sep\\fI$v\\fR"; $sep = ", "; } print "\n"; } my $mode = 0; my $save = ""; my $enums = ""; my $blank = ""; my $version = "\$Revision: 1.3 $blank"; $version =~ s/.Revision: (.*) /$1/; print ".\\\" -*- nroff -*-\n"; print ".\\\" auto-generated by config2man $version\n"; while (<>) { if ($mode == 0) { # look for { option, default, type [enums] }; don't output until we # hit a comment if (m|{\s*\"(.*?)\"\s*,\s*\"?(.*?)\"?\s*,\s*(.*?)\s*(\(.*\))?\s*}|) { my $opt = $1; my $def = $2 eq "NULL" ? "<none>" : $2; if ($def eq "") { $def = "<empty string>" } $save = ".IP \"\\fB$1:\\fR $def\" 5\n"; $enums = $4; } # look for single-line comment elsif (m|/\*\s*(.*)\s*\*/|) { print $save; $save = ""; print "$1\n"; if ($enums) { print_values($enums); } } # look for /* to shift into passthrough mode; print current # cached option header if any elsif (m|/\*\s*(.*)|) { print $save; $save = ""; print $1; print "\n"; # add LF so lines don't run together $mode = 1; } else { chomp; #print "ignoring '$_'\n"; } } elsif ($mode == 1) { # passthru; look for */ to end if (m|\s*(.*)\*/|) { print $1; print "\n"; if ($enums) { print_values($enums); } $mode = 0; # back to search mode } elsif (m|\s*(.*)\s*|) { print "$1\n"; } } }