genren.pl revision b13da9df870a61b11249bf741347908dbea0edd8
1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#!/usr/bin/perl 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#* 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#******************************************************************************* 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#* Copyright (C) 2001-2007, 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 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru$headername = 'urename.h'; 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru$path = substr($0, 0, rindex($0, "/")+1)."../../common/unicode/uversion.h"; 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru(-e $path) || die "Cannot find uversion.h"; 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruopen(UVERSION, $path); 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruwhile(<UVERSION>) { 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(/\#define U_ICU_VERSION_SUFFIX/) { 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru chop; 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s/\#define U_ICU_VERSION_SUFFIX //; 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru $U_ICU_VERSION_SUFFIX = "$_"; 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru last; 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruwhile($ARGV[0] =~ /^-/) { # detects whether there are any arguments 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru $_ = shift @ARGV; # extracts the argument for processing 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /^-v/ && ($VERBOSE++, next); # verbose 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /^-h/ && (&printHelpMsgAndExit, next); # help 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /^-o/ && (($headername = shift (@ARGV)), next); # output file 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /^-S/ && (($U_ICU_VERSION_SUFFIX = shift(@ARGV)), next); # pick the suffix 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru warn("Invalid option $_\n"); 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &printHelpMsgAndExit; 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunless(@ARGV > 0) { 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru warn "No libraries, exiting...\n"; 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &printHelpMsgAndExit; 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#$headername = "uren".substr($ARGV[0], 6, index(".", $ARGV[0])-7).".h"; 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru$HEADERDEF = uc($headername); # this is building the constant for #define 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru$HEADERDEF =~ s/\./_/; 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru open HEADER, ">$headername"; # opening a header file 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#We will print our copyright here + warnings 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprint HEADER <<"EndOfHeaderComment"; 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Copyright (C) 2002-2007, International Business Machines 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* file name: $headername 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* encoding: US-ASCII 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* tab size: 8 (not used) 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* indentation:4 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Created by: Perl script written by Vladimir Weinstein 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Contains data for renaming ICU exports. 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Gets included by umachine.h 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* THIS FILE IS MACHINE-GENERATED, DON'T PLAY WITH IT IF YOU DON'T KNOW WHAT 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* YOU ARE DOING, OTHERWISE VERY BAD THINGS WILL HAPPEN! 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef $HEADERDEF 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define $HEADERDEF 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Uncomment the following line to disable renaming on platforms 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru that do not use Autoconf. */ 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* #define U_DISABLE_RENAMING 1 */ 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !U_DISABLE_RENAMING 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruEndOfHeaderComment 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querufor(;@ARGV; shift(@ARGV)) { 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru @NMRESULT = `nm -Cg -f s $ARGV[0]`; 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if($?) { 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru warn "Couldn't do 'nm' for $ARGV[0], continuing...\n"; 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru next; # Couldn't do nm for the file 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru splice @NMRESULT, 0, 6; 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru foreach (@NMRESULT) { # Process every line of result and stuff it in $_ 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ($_, $address, $type) = split(/\|/); 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &verbose( "type: \"$type\" "); 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!($type =~ /[UAwW?]/)) { 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(/@@/) { # These would be imports 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &verbose( "Import: $_ \"$type\"\n"); 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } elsif (/::/) { # C++ methods, stuff class name in associative array 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &verbose( "C++ method: $_\n"); 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ## icu_2_0::CharString::~CharString(void) -> CharString 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru @CppName = split(/::/); ## remove scope stuff 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(@CppName>1) { 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ## MessageFormat virtual table -> MessageFormat 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru @CppName = split(/ /, $CppName[1]); ## remove debug stuff 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ## ures_getUnicodeStringByIndex(UResourceBundle -> ures_getUnicodeStringByIndex 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru @CppName = split(/\(/, $CppName[0]); ## remove function args 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru $CppClasses{$CppName[0]}++; 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } elsif ( /\(/) { # These are strange functions 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru print STDERR "$_\n"; 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } elsif ( /icu_/) { 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru print STDERR "Skipped strange mangled function $_\n"; 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { # This is regular C function 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &verbose( "C func: $_\n"); 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru @funcname = split(/[\(\s+]/); 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru $CFuncs{$funcname[0]}++; 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &verbose( "Skipped: $_ $1\n"); 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprint HEADER "\n/* C exports renaming data */\n\n"; 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruforeach(sort keys(%CFuncs)) { 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru print HEADER "#define $_ $_$U_ICU_VERSION_SUFFIX\n"; 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprint HEADER "/* C++ class names renaming defines */\n\n"; 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprint HEADER "#ifdef XP_CPLUSPLUS\n"; 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprint HEADER "#if !U_HAVE_NAMESPACE\n\n"; 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruforeach(sort keys(%CppClasses)) { 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru print HEADER "#define $_ $_$U_ICU_VERSION_SUFFIX\n"; 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprint HEADER "\n#endif\n"; 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprint HEADER "#endif\n"; 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprint HEADER "\n#endif\n"; 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprint HEADER "\n#endif\n"; 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclose HEADER; 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querusub verbose { 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if($VERBOSE) { 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru print STDERR @_; 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querusub printHelpMsgAndExit { 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru print STDERR <<"EndHelpText"; 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUsage: $0 [OPTIONS] LIBRARY_FILES 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Options: 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -v - verbose 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -h - help 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -o - output file name (defaults to 'urename.h' 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -S - suffix (defaults to _MAJOR_MINOR of current ICU version) 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruWill produce a renaming .h file 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruEndHelpText 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru exit 0; 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 172