source: MondoRescue/branches/stable/mindi-busybox/examples/mk2knr.pl @ 821

Last change on this file since 821 was 821, checked in by Bruno Cornec, 14 years ago

Addition of busybox 1.2.1 as a mindi-busybox new package
This should avoid delivering binary files in mindi not built there (Fedora and Debian are quite serious about that)

  • Property svn:executable set to *
File size: 2.4 KB
Line 
1#!/usr/bin/perl -w
2#
3# @(#) mk2knr.pl - generates a perl script that converts lexemes to K&R-style
4#
5# How to use this script:
6#  - In the busybox directory type 'examples/mk2knr.pl files-to-convert'
7#  - Review the 'convertme.pl' script generated and remove / edit any of the
8#    substitutions in there (please especially check for false positives)
9#  - Type './convertme.pl same-files-as-before'
10#  - Compile and see if it works
11#
12# BUGS: This script does not ignore strings inside comments or strings inside
13# quotes (it probably should).
14
15# set this to something else if you want
16$convertme = 'convertme.pl';
17
18# internal-use variables (don't touch)
19$convert = 0;
20%converted = ();
21
22# if no files were specified, print usage
23die "usage: $0 file.c | file.h\n" if scalar(@ARGV) == 0;
24
25# prepare the "convert me" file
26open(CM, ">$convertme") or die "convertme.pl $!";
27print CM "#!/usr/bin/perl -p -i\n\n";
28
29# process each file passed on the cmd line
30while (<>) {
31
32    # if the line says "getopt" in it anywhere, we don't want to muck with it
33    # because option lists tend to include strings like "cxtzvOf:" which get
34    # matched by the "check for mixed case" regexps below
35    next if /getopt/;
36
37    # tokenize the string into just the variables
38    while (/([a-zA-Z_][a-zA-Z0-9_]*)/g) {
39        $var = $1;
40
41        # ignore the word "BusyBox"
42        next if ($var =~ /BusyBox/);
43
44        # this checks for javaStyle or szHungarianNotation
45        $convert++ if ($var =~ /^[a-z]+[A-Z][a-z]+/);
46
47        # this checks for PascalStyle
48        $convert++ if ($var =~ /^[A-Z][a-z]+[A-Z][a-z]+/);
49
50        # if we want to add more checks, we can add 'em here, but the above
51        # checks catch "just enough" and not too much, so prolly not.
52
53        if ($convert) {
54            $convert = 0;
55
56            # skip ahead if we've already dealt with this one
57            next if ($converted{$var});
58
59            # record that we've dealt with this var
60            $converted{$var} = 1;
61
62            print CM "s/\\b$var\\b/"; # more to come in just a minute
63
64            # change the first letter to lower-case
65            $var = lcfirst($var);
66
67            # put underscores before all remaining upper-case letters
68            $var =~ s/([A-Z])/_$1/g;
69
70            # now change the remaining characters to lower-case
71            $var = lc($var);
72
73            print CM "$var/g;\n";
74        }
75    }
76}
77
78# tidy up and make the $convertme script executable
79close(CM);
80chmod 0755, $convertme;
81
82# print a helpful help message
83print "Done. Scheduled name changes are in $convertme.\n";
84print "Please review/modify it and then type ./$convertme to do the search & replace.\n";
Note: See TracBrowser for help on using the repository browser.