#!/usr/bin/perl -w use strict; use ExtUtils::MakeMaker qw(prompt); use File::Find; my $just_check = @ARGV ? $ARGV[0] eq '-c' : 0; shift if $just_check; my $dir = shift || '.'; my %names; my $prefix = 'apr_'; while () { chomp; my($old, $new) = grep { s/^$prefix//o } split; next unless $old and $new; $names{$old} = $new; } my $pattern = join '|', keys %names; #print "replacement pattern=$pattern\n"; find sub { chomp; return unless /\.[ch]$/; my $file = "$File::Find::dir/$_"; print "looking in $file\n"; replace($_, !$just_check); }, $dir; sub replace { my($file, $replace) = @_; local *IN, *OUT; my @lines; my $found = 0; open IN, $file or die "open $file: $!"; while () { for (m/[^_\"]*$prefix($pattern)\b/og) { $found++; print " $file:$. apr_$_ -> apr_$names{$_}\n"; } push @lines, $_ if $replace; } close IN; return unless $found and $replace; # my $ans = prompt("replace?", 'y'); # return unless $ans =~ /^y/i; open OUT, ">$file" or die "open $file: $!"; for (@lines) { unless (/^\#include/) { s/([^_\"]*$prefix)($pattern)\b/$1$names{$2}/og; } print OUT $_; } close OUT; } __DATA__ apr_time_t: apr_implode_gmt apr_time_exp_gmt_get apr_socket_t: apr_close_socket apr_socket_close apr_create_socket apr_socket_create apr_get_sockaddr apr_socket_addr_get apr_get_socketdata apr_socket_data_get apr_set_socketdata apr_socket_data_set apr_shutdown apr_socket_shutdown apr_bind apr_socket_bind apr_listen apr_socket_listen apr_accept apr_socket_accept apr_connect apr_socket_connect apr_send apr_socket_send apr_sendv apr_socket_sendv apr_sendto apr_socket_sendto apr_recvfrom apr_socket_recvfrom apr_sendfile apr_socket_sendfile apr_recv apr_socket_recv apr_filepath_*: apr_filename_of_pathname apr_filepath_name_get apr_gid_t: apr_get_groupid apr_gid_get apr_get_groupname apr_gid_name_get apr_group_name_get apr_gid_name_get apr_compare_groups apr_gid_compare apr_uid_t: apr_get_home_directory apr_uid_homepath_get apr_get_userid apr_uid_get apr_current_userid apr_uid_current apr_compare_users apr_uid_compare apr_get_username apr_uid_name_get apr_compare_users apr_uid_compare