1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#!/usr/bin/perl
2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#*
3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#*******************************************************************************
450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#*   Copyright (C) 2001-2010, International Business Machines
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#*   Corporation and others.  All Rights Reserved.
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#*******************************************************************************
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#*
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#*   file name:  genren.pl
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#*   encoding:   US-ASCII
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#*   tab size:   8 (not used)
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#*   indentation:4
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#*
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#*   Created by: Vladimir Weinstein
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#*   07/19/2001
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#*
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#*  Used to generate renaming headers.
17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#*  Run on UNIX platforms (linux) in order to catch all the exports
18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
19b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruuse POSIX qw(strftime);
20b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru$headername = 'urename.h';
22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru$path = substr($0, 0, rindex($0, "/")+1)."../../common/unicode/uversion.h";
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
25c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru$nmopts = '-Cg -f s';
26c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru$post = '';
27c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
2850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho$mode = 'POSIX';
29c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru(-e $path) || die "Cannot find uversion.h";
31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruopen(UVERSION, $path);
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruwhile(<UVERSION>) {
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(/\#define U_ICU_VERSION_SUFFIX/) {
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        chop;
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s/\#define U_ICU_VERSION_SUFFIX //;
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        $U_ICU_VERSION_SUFFIX = "$_";
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        last;
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruwhile($ARGV[0] =~ /^-/) { # detects whether there are any arguments
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    $_ = shift @ARGV;      # extracts the argument for processing
45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /^-v/ && ($VERBOSE++, next);                      # verbose
46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /^-h/ && (&printHelpMsgAndExit, next);               # help
47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /^-o/ && (($headername = shift (@ARGV)), next);   # output file
48c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /^-n/ && (($nmopts = shift (@ARGV)), next);   # nm opts
49c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /^-p/ && (($post = shift (@ARGV)), next);   # nm opts
50c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /^-x/ && (($mode = shift (@ARGV)), next);   # nm opts
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /^-S/ && (($U_ICU_VERSION_SUFFIX = shift(@ARGV)), next); # pick the suffix
52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    warn("Invalid option $_\n");
53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    &printHelpMsgAndExit;
54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunless(@ARGV > 0) {
57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    warn "No libraries, exiting...\n";
58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    &printHelpMsgAndExit;
59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#$headername = "uren".substr($ARGV[0], 6, index(".", $ARGV[0])-7).".h";
62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru$HEADERDEF = uc($headername);  # this is building the constant for #define
64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru$HEADERDEF =~ s/\./_/;
65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    open HEADER, ">$headername"; # opening a header file
68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#We will print our copyright here + warnings
70b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
71b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru$YEAR = strftime "%Y",localtime;
72b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprint HEADER <<"EndOfHeaderComment";
74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*******************************************************************************
76b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru*   Copyright (C) 2002-$YEAR, International Business Machines
77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   Corporation and others.  All Rights Reserved.
78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*******************************************************************************
79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   file name:  $headername
81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   encoding:   US-ASCII
82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   tab size:   8 (not used)
83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   indentation:4
84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   Created by: Perl script written by Vladimir Weinstein
86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*  Contains data for renaming ICU exports.
88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*  Gets included by umachine.h
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*  THIS FILE IS MACHINE-GENERATED, DON'T PLAY WITH IT IF YOU DON'T KNOW WHAT
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*  YOU ARE DOING, OTHERWISE VERY BAD THINGS WILL HAPPEN!
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef $HEADERDEF
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define $HEADERDEF
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Uncomment the following line to disable renaming on platforms
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   that do not use Autoconf. */
99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* #define U_DISABLE_RENAMING 1 */
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !U_DISABLE_RENAMING
10250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
10350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* We need the U_ICU_ENTRY_POINT_RENAME definition. There's a default one in unicode/uvernum.h we can use, but we will give
10450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho   the platform a chance to define it first.
10550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho   Normally (if utypes.h or umachine.h was included first) this will not be necessary as it will already be defined.
10650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */
10750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#ifndef U_ICU_ENTRY_POINT_RENAME
10850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/umachine.h"
10950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
11050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
11150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* If we still don't have U_ICU_ENTRY_POINT_RENAME use the default. */
11250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#ifndef U_ICU_ENTRY_POINT_RENAME
11350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/uvernum.h"
11450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
11550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
11650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* Error out before the following defines cause very strange and unexpected code breakage */
11750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#ifndef U_ICU_ENTRY_POINT_RENAME
11850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#error U_ICU_ENTRY_POINT_RENAME is not defined - cannot continue. Consider defining U_DISABLE_RENAMING if renaming should not be used.
11950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
12050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruEndOfHeaderComment
122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
12350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho$fileCount = 0;
12450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho$itemCount = 0;
12550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho$symbolCount = 0;
12650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querufor(;@ARGV; shift(@ARGV)) {
12850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    $fileCount++;
129c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    @NMRESULT = `nm $nmopts $ARGV[0] $post`;
130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if($?) {
131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        warn "Couldn't do 'nm' for $ARGV[0], continuing...\n";
132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        next; # Couldn't do nm for the file
133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
134c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    if($mode =~ /POSIX/) {
135c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        splice @NMRESULT, 0, 6;
136c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    } elsif ($mode =~ /Mach-O/) {
137c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#        splice @NMRESULT, 0, 10;
138c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    }
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    foreach (@NMRESULT) { # Process every line of result and stuff it in $_
14050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        $itemCount++;
141c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        if($mode =~ /POSIX/) {
142c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru            ($_, $address, $type) = split(/\|/);
143c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        } elsif ($mode =~ /Mach-O/) {
144c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru            if(/^(?:[0-9a-fA-F]){8} ([A-Z]) (?:_)?(.*)$/) {
145c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru                ($_, $type) = ($2, $1);
146c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru            } else {
147c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru                next;
148c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru            }
149c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        } else {
150c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru            die "Unknown mode $mode";
151c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        }
152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        &verbose( "type: \"$type\" ");
153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(!($type =~ /[UAwW?]/)) {
154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(/@@/) { # These would be imports
155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                &verbose( "Import: $_ \"$type\"\n");
156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                &verbose( "C++ method: $_\n");
15750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            } elsif (/^[^\(]*::/) { # C++ methods, stuff class name in associative array
15850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho	        ##  DON'T match    ...  (   foo::bar ...   want :: to be to the left of paren
159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                ## icu_2_0::CharString::~CharString(void) -> CharString
160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                @CppName = split(/::/); ## remove scope stuff
161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if(@CppName>1) {
162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    ## MessageFormat virtual table -> MessageFormat
163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    @CppName = split(/ /, $CppName[1]); ## remove debug stuff
164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                ## ures_getUnicodeStringByIndex(UResourceBundle -> ures_getUnicodeStringByIndex
166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                @CppName = split(/\(/, $CppName[0]); ## remove function args
167c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru                if($CppName[0] =~ /^operator/) {
168c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru                    &verbose ("Skipping C++ function: $_\n");
169c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru                } elsif($CppName[0] =~ /^~/) {
170c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru                    &verbose ("Skipping C++ destructor: $_\n");
171c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru                } else {
17250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho		    &verbose( " Class: '$CppName[0]': $_ \n");
173c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru                    $CppClasses{$CppName[0]}++;
17450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho		    $symbolCount++;
175c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru                }
17650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho	    } elsif ( my ($cfn) = m/^([A-Za-z0-9_]*)\(.*/ ) {
17750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho		&verbose ( "$ARGV[0]:  got global C++ function  $cfn with '$_'\n" );
17850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                $CFuncs{$cfn}++;
17950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho		$symbolCount++;
180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } elsif ( /\(/) { # These are strange functions
18150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                print STDERR "$ARGV[0]: Not sure what to do with '$_'\n";
18250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho	    } elsif ( /^_init/ ) {
18350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho		&verbose( "$ARGV[0]: Skipped initializer $_\n" );
18450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho	    } elsif ( /^_fini/ ) {
18550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho		&verbose( "$ARGV[0]: Skipped finilizer $_\n" );
186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } elsif ( /icu_/) {
18750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                print STDERR "$ARGV[0]: Skipped strange mangled function $_\n";
188c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru            } elsif ( /^vtable for /) {
18950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                print STDERR "$ARGV[0]: Skipped vtable $_\n";
190c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru            } elsif ( /^typeinfo for /) {
19150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                print STDERR "$ARGV[0]: Skipped typeinfo $_\n";
192c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru            } elsif ( /operator\+/ ) {
19350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                print STDERR "$ARGV[0]: Skipped ignored function $_\n";
194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } else { # This is regular C function
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                &verbose( "C func: $_\n");
196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                @funcname = split(/[\(\s+]/);
197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                $CFuncs{$funcname[0]}++;
19850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho		$symbolCount++;
199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            &verbose( "Skipped: $_ $1\n");
202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
20650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoif( $fileCount == 0 ) {
20750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  die "Error: $itemCount lines from $fileCount files processed, but $symbolCount symbols were found.\n";
20850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
20950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
21050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoif( $symbolCount == 0 ) {
21150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  die "Error: $itemCount lines from $fileCount files processed, but $symbolCount symbols were found.\n";
21250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
21350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
21450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoprint " Loaded $symbolCount symbols from $itemCount lines in $fileCount files.\n";
21550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprint HEADER "\n/* C exports renaming data */\n\n";
217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruforeach(sort keys(%CFuncs)) {
21850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    print HEADER "#define $_ U_ICU_ENTRY_POINT_RENAME($_)\n";
21950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#    print HEADER "#define $_ $_$U_ICU_VERSION_SUFFIX\n";
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
22250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoprint HEADER "\n\n";
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprint HEADER "/* C++ class names renaming defines */\n\n";
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprint HEADER "#ifdef XP_CPLUSPLUS\n";
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprint HEADER "#if !U_HAVE_NAMESPACE\n\n";
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruforeach(sort keys(%CppClasses)) {
22750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    print HEADER "#define $_ U_ICU_ENTRY_POINT_RENAME($_)\n";
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprint HEADER "\n#endif\n";
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprint HEADER "#endif\n";
231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprint HEADER "\n#endif\n";
232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprint HEADER "\n#endif\n";
233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclose HEADER;
235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querusub verbose {
237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if($VERBOSE) {
238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        print STDERR @_;
239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querusub printHelpMsgAndExit {
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    print STDERR <<"EndHelpText";
245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUsage: $0 [OPTIONS] LIBRARY_FILES
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  Options:
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    -v - verbose
248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    -h - help
249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    -o - output file name (defaults to 'urename.h'
250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    -S - suffix (defaults to _MAJOR_MINOR of current ICU version)
251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruWill produce a renaming .h file
252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruEndHelpText
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    exit 0;
256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
259