annotate src/zlib-1.2.7/zlib2ansi @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents e13257ea84a4
children
rev   line source
Chris@4 1 #!/usr/bin/perl
Chris@4 2
Chris@4 3 # Transform K&R C function definitions into ANSI equivalent.
Chris@4 4 #
Chris@4 5 # Author: Paul Marquess
Chris@4 6 # Version: 1.0
Chris@4 7 # Date: 3 October 2006
Chris@4 8
Chris@4 9 # TODO
Chris@4 10 #
Chris@4 11 # Asumes no function pointer parameters. unless they are typedefed.
Chris@4 12 # Assumes no literal strings that look like function definitions
Chris@4 13 # Assumes functions start at the beginning of a line
Chris@4 14
Chris@4 15 use strict;
Chris@4 16 use warnings;
Chris@4 17
Chris@4 18 local $/;
Chris@4 19 $_ = <>;
Chris@4 20
Chris@4 21 my $sp = qr{ \s* (?: /\* .*? \*/ )? \s* }x; # assume no nested comments
Chris@4 22
Chris@4 23 my $d1 = qr{ $sp (?: [\w\*\s]+ $sp)* $sp \w+ $sp [\[\]\s]* $sp }x ;
Chris@4 24 my $decl = qr{ $sp (?: \w+ $sp )+ $d1 }xo ;
Chris@4 25 my $dList = qr{ $sp $decl (?: $sp , $d1 )* $sp ; $sp }xo ;
Chris@4 26
Chris@4 27
Chris@4 28 while (s/^
Chris@4 29 ( # Start $1
Chris@4 30 ( # Start $2
Chris@4 31 .*? # Minimal eat content
Chris@4 32 ( ^ \w [\w\s\*]+ ) # $3 -- function name
Chris@4 33 \s* # optional whitespace
Chris@4 34 ) # $2 - Matched up to before parameter list
Chris@4 35
Chris@4 36 \( \s* # Literal "(" + optional whitespace
Chris@4 37 ( [^\)]+ ) # $4 - one or more anythings except ")"
Chris@4 38 \s* \) # optional whitespace surrounding a Literal ")"
Chris@4 39
Chris@4 40 ( (?: $dList )+ ) # $5
Chris@4 41
Chris@4 42 $sp ^ { # literal "{" at start of line
Chris@4 43 ) # Remember to $1
Chris@4 44 //xsom
Chris@4 45 )
Chris@4 46 {
Chris@4 47 my $all = $1 ;
Chris@4 48 my $prefix = $2;
Chris@4 49 my $param_list = $4 ;
Chris@4 50 my $params = $5;
Chris@4 51
Chris@4 52 StripComments($params);
Chris@4 53 StripComments($param_list);
Chris@4 54 $param_list =~ s/^\s+//;
Chris@4 55 $param_list =~ s/\s+$//;
Chris@4 56
Chris@4 57 my $i = 0 ;
Chris@4 58 my %pList = map { $_ => $i++ }
Chris@4 59 split /\s*,\s*/, $param_list;
Chris@4 60 my $pMatch = '(\b' . join('|', keys %pList) . '\b)\W*$' ;
Chris@4 61
Chris@4 62 my @params = split /\s*;\s*/, $params;
Chris@4 63 my @outParams = ();
Chris@4 64 foreach my $p (@params)
Chris@4 65 {
Chris@4 66 if ($p =~ /,/)
Chris@4 67 {
Chris@4 68 my @bits = split /\s*,\s*/, $p;
Chris@4 69 my $first = shift @bits;
Chris@4 70 $first =~ s/^\s*//;
Chris@4 71 push @outParams, $first;
Chris@4 72 $first =~ /^(\w+\s*)/;
Chris@4 73 my $type = $1 ;
Chris@4 74 push @outParams, map { $type . $_ } @bits;
Chris@4 75 }
Chris@4 76 else
Chris@4 77 {
Chris@4 78 $p =~ s/^\s+//;
Chris@4 79 push @outParams, $p;
Chris@4 80 }
Chris@4 81 }
Chris@4 82
Chris@4 83
Chris@4 84 my %tmp = map { /$pMatch/; $_ => $pList{$1} }
Chris@4 85 @outParams ;
Chris@4 86
Chris@4 87 @outParams = map { " $_" }
Chris@4 88 sort { $tmp{$a} <=> $tmp{$b} }
Chris@4 89 @outParams ;
Chris@4 90
Chris@4 91 print $prefix ;
Chris@4 92 print "(\n" . join(",\n", @outParams) . ")\n";
Chris@4 93 print "{" ;
Chris@4 94
Chris@4 95 }
Chris@4 96
Chris@4 97 # Output any trailing code.
Chris@4 98 print ;
Chris@4 99 exit 0;
Chris@4 100
Chris@4 101
Chris@4 102 sub StripComments
Chris@4 103 {
Chris@4 104
Chris@4 105 no warnings;
Chris@4 106
Chris@4 107 # Strip C & C++ coments
Chris@4 108 # From the perlfaq
Chris@4 109 $_[0] =~
Chris@4 110
Chris@4 111 s{
Chris@4 112 /\* ## Start of /* ... */ comment
Chris@4 113 [^*]*\*+ ## Non-* followed by 1-or-more *'s
Chris@4 114 (
Chris@4 115 [^/*][^*]*\*+
Chris@4 116 )* ## 0-or-more things which don't start with /
Chris@4 117 ## but do end with '*'
Chris@4 118 / ## End of /* ... */ comment
Chris@4 119
Chris@4 120 | ## OR C++ Comment
Chris@4 121 // ## Start of C++ comment //
Chris@4 122 [^\n]* ## followed by 0-or-more non end of line characters
Chris@4 123
Chris@4 124 | ## OR various things which aren't comments:
Chris@4 125
Chris@4 126 (
Chris@4 127 " ## Start of " ... " string
Chris@4 128 (
Chris@4 129 \\. ## Escaped char
Chris@4 130 | ## OR
Chris@4 131 [^"\\] ## Non "\
Chris@4 132 )*
Chris@4 133 " ## End of " ... " string
Chris@4 134
Chris@4 135 | ## OR
Chris@4 136
Chris@4 137 ' ## Start of ' ... ' string
Chris@4 138 (
Chris@4 139 \\. ## Escaped char
Chris@4 140 | ## OR
Chris@4 141 [^'\\] ## Non '\
Chris@4 142 )*
Chris@4 143 ' ## End of ' ... ' string
Chris@4 144
Chris@4 145 | ## OR
Chris@4 146
Chris@4 147 . ## Anything other char
Chris@4 148 [^/"'\\]* ## Chars which doesn't start a comment, string or escape
Chris@4 149 )
Chris@4 150 }{$2}gxs;
Chris@4 151
Chris@4 152 }