blob: c169078e35532595307a66562ec76a0c7e1f2af1 [file] [log] [blame]
Manuel Pégourié-Gonnard3385cf42015-04-02 17:59:30 +01001#!/usr/bin/perl
2
Manuel Pégourié-Gonnardb20a70f2015-04-08 14:56:51 +02003# rename identifiers (functions, types, enum constant, etc)
4# on upgrades of major version according to a list
5
Manuel Pégourié-Gonnard3385cf42015-04-02 17:59:30 +01006use warnings;
7use strict;
8
9use utf8;
10use open qw(:std utf8);
11
Manuel Pégourié-Gonnardb20a70f2015-04-08 14:56:51 +020012my $usage = "Usage: $0 [-f datafile] [-s] [--] [filenames...]\n";
Manuel Pégourié-Gonnard3385cf42015-04-02 17:59:30 +010013
Manuel Pégourié-Gonnard2aa81cc2015-04-10 11:19:10 +020014(my $datafile = $0) =~ s/rename.pl$/data_files\/rename-1.3-2.0.txt/;
Manuel Pégourié-Gonnard88323c72015-04-03 14:38:02 +020015my $do_strings = 0;
Manuel Pégourié-Gonnardb20a70f2015-04-08 14:56:51 +020016
17while( @ARGV && $ARGV[0] =~ /^-/ ) {
18 my $opt = shift;
19 if( $opt eq '--' ) {
20 last;
21 } elsif( $opt eq '-f' ) {
22 $datafile = shift;
23 } elsif( $opt eq '-s' ) {
24 $do_strings = 1; shift;
25 } else {
26 die $usage;
27 }
Manuel Pégourié-Gonnard88323c72015-04-03 14:38:02 +020028}
29
Manuel Pégourié-Gonnard3385cf42015-04-02 17:59:30 +010030my %subst;
Manuel Pégourié-Gonnard2aa81cc2015-04-10 11:19:10 +020031open my $nfh, '<', $datafile or die "Could not read $datafile\n";
32my $ident = qr/[_A-Za-z][_A-Za-z0-9]*/;
33while( my $line = <$nfh> ) {
34 chomp $line;
35 my ( $old, $new ) = ( $line =~ /^($ident)\s+($ident)$/ );
36 if( ! $old || ! $new ) {
37 die "$0: $datafile:$.: bad input '$line'\n";
38 }
Manuel Pégourié-Gonnard3385cf42015-04-02 17:59:30 +010039 $subst{$old} = $new;
40}
Manuel Pégourié-Gonnard2aa81cc2015-04-10 11:19:10 +020041close $nfh or die;
Manuel Pégourié-Gonnard3385cf42015-04-02 17:59:30 +010042
Manuel Pégourié-Gonnardc559f042015-04-08 20:10:16 +020043my $string = qr/"(?:\\.|[^\\"])*"/;
Manuel Pégourié-Gonnard3385cf42015-04-02 17:59:30 +010044my $space = qr/\s+/;
45my $idnum = qr/[a-zA-Z0-9_]+/;
Manuel Pégourié-Gonnard5f29a732015-04-20 12:27:12 +010046my $symbols = qr/[-!#\$%&'()*+,.\/:;<=>?@[\\\]^_`{|}~]+|"/;
Manuel Pégourié-Gonnard3385cf42015-04-02 17:59:30 +010047
Manuel Pégourié-Gonnard88323c72015-04-03 14:38:02 +020048# if we replace inside strings, we don't consider them a token
49my $token = $do_strings ? qr/$space|$idnum|$symbols/
50 : qr/$string|$space|$idnum|$symbols/;
51
Manuel Pégourié-Gonnard3385cf42015-04-02 17:59:30 +010052my %warnings;
53
54while( my $filename = shift )
55{
56 print STDERR "$filename... ";
Manuel Pégourié-Gonnardf7d945f2015-04-03 15:21:50 +020057 if( -d $filename ) { print STDERR "skip (directory)\n"; next }
Manuel Pégourié-Gonnard3385cf42015-04-02 17:59:30 +010058
59 open my $rfh, '<', $filename or die;
60 my @lines = <$rfh>;
61 close $rfh or die;
62
63 my @out;
64 for my $line (@lines) {
Manuel Pégourié-Gonnardfb9f2a02015-04-03 18:37:07 +020065 if( $line =~ /#include/ ) {
66 $line =~ s/polarssl/mbedtls/;
67 $line =~ s/POLARSSL/MBEDTLS/;
68 push( @out, $line );
69 next;
70 }
71
Manuel Pégourié-Gonnard88323c72015-04-03 14:38:02 +020072 my @words = ($line =~ /$token/g);
Manuel Pégourié-Gonnard3385cf42015-04-02 17:59:30 +010073 my $checkline = join '', @words;
74 if( $checkline eq $line ) {
75 my @new = map { exists $subst{$_} ? $subst{$_} : $_ } @words;
76 push( @out, join '', @new );
77 } else {
78 $warnings{$filename} = [] unless $warnings{$filename};
79 push @{ $warnings{$filename} }, $line;
80 push( @out, $line );
81 }
82 }
83
84 open my $wfh, '>', $filename or die;
85 print $wfh $_ for @out;
86 close $wfh or die;
87 print STDERR "done\n";
88}
89
90if( %warnings ) {
Manuel Pégourié-Gonnardc559f042015-04-08 20:10:16 +020091 print "\nWarning: lines skipped due to unexpected characters:\n";
Manuel Pégourié-Gonnard3385cf42015-04-02 17:59:30 +010092 for my $filename (sort keys %warnings) {
93 print "in $filename:\n";
94 print for @{ $warnings{$filename} };
95 }
96}