diff options
author | Jonathan Kew <jfkthame@googlemail.com> | 2008-03-04 13:26:36 +0000 |
---|---|---|
committer | Jonathan Kew <jfkthame@googlemail.com> | 2008-03-04 13:26:36 +0000 |
commit | 53790d2a0c50915d8cec71df3e89cd24d887b2fe (patch) | |
tree | 16f6b4df067eb3c2024e0a7735cb7ccea86b3aba /Build/source/libs/icu-xetex/tools/genren/genren.pl | |
parent | f483a5de9331a257f597282e611ecfb63f5ab118 (diff) |
update icu-xetex to 3.8.1-based code from xetex repository
git-svn-id: svn://tug.org/texlive/trunk@6842 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs/icu-xetex/tools/genren/genren.pl')
-rwxr-xr-x | Build/source/libs/icu-xetex/tools/genren/genren.pl | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/Build/source/libs/icu-xetex/tools/genren/genren.pl b/Build/source/libs/icu-xetex/tools/genren/genren.pl new file mode 100755 index 00000000000..181491fa97a --- /dev/null +++ b/Build/source/libs/icu-xetex/tools/genren/genren.pl @@ -0,0 +1,171 @@ +#!/usr/bin/perl +#* +#******************************************************************************* +#* Copyright (C) 2001-2007, International Business Machines +#* Corporation and others. All Rights Reserved. +#******************************************************************************* +#* +#* file name: genren.pl +#* encoding: US-ASCII +#* tab size: 8 (not used) +#* indentation:4 +#* +#* Created by: Vladimir Weinstein +#* 07/19/2001 +#* +#* Used to generate renaming headers. +#* Run on UNIX platforms (linux) in order to catch all the exports + +$headername = 'urename.h'; + +$path = substr($0, 0, rindex($0, "/")+1)."../../common/unicode/uversion.h"; + +(-e $path) || die "Cannot find uversion.h"; + +open(UVERSION, $path); + +while(<UVERSION>) { + if(/\#define U_ICU_VERSION_SUFFIX/) { + chop; + s/\#define U_ICU_VERSION_SUFFIX //; + $U_ICU_VERSION_SUFFIX = "$_"; + last; + } +} + +while($ARGV[0] =~ /^-/) { # detects whether there are any arguments + $_ = shift @ARGV; # extracts the argument for processing + /^-v/ && ($VERBOSE++, next); # verbose + /^-h/ && (&printHelpMsgAndExit, next); # help + /^-o/ && (($headername = shift (@ARGV)), next); # output file + /^-S/ && (($U_ICU_VERSION_SUFFIX = shift(@ARGV)), next); # pick the suffix + warn("Invalid option $_\n"); + &printHelpMsgAndExit; +} + +unless(@ARGV > 0) { + warn "No libraries, exiting...\n"; + &printHelpMsgAndExit; +} + +#$headername = "uren".substr($ARGV[0], 6, index(".", $ARGV[0])-7).".h"; + +$HEADERDEF = uc($headername); # this is building the constant for #define +$HEADERDEF =~ s/\./_/; + + + open HEADER, ">$headername"; # opening a header file + +#We will print our copyright here + warnings +print HEADER <<"EndOfHeaderComment"; +/* +******************************************************************************* +* Copyright (C) 2002-2007, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************* +* +* file name: $headername +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* Created by: Perl script written by Vladimir Weinstein +* +* Contains data for renaming ICU exports. +* Gets included by umachine.h +* +* THIS FILE IS MACHINE-GENERATED, DON'T PLAY WITH IT IF YOU DON'T KNOW WHAT +* YOU ARE DOING, OTHERWISE VERY BAD THINGS WILL HAPPEN! +*/ + +#ifndef $HEADERDEF +#define $HEADERDEF + +/* Uncomment the following line to disable renaming on platforms + that do not use Autoconf. */ +/* #define U_DISABLE_RENAMING 1 */ + +#if !U_DISABLE_RENAMING +EndOfHeaderComment + +for(;@ARGV; shift(@ARGV)) { + @NMRESULT = `nm -Cg -f s $ARGV[0]`; + if($?) { + warn "Couldn't do 'nm' for $ARGV[0], continuing...\n"; + next; # Couldn't do nm for the file + } + splice @NMRESULT, 0, 6; + + foreach (@NMRESULT) { # Process every line of result and stuff it in $_ + ($_, $address, $type) = split(/\|/); + &verbose( "type: \"$type\" "); + if(!($type =~ /[UAwW?]/)) { + if(/@@/) { # These would be imports + &verbose( "Import: $_ \"$type\"\n"); + } elsif (/::/) { # C++ methods, stuff class name in associative array + &verbose( "C++ method: $_\n"); + ## icu_2_0::CharString::~CharString(void) -> CharString + @CppName = split(/::/); ## remove scope stuff + if(@CppName>1) { + ## MessageFormat virtual table -> MessageFormat + @CppName = split(/ /, $CppName[1]); ## remove debug stuff + } + ## ures_getUnicodeStringByIndex(UResourceBundle -> ures_getUnicodeStringByIndex + @CppName = split(/\(/, $CppName[0]); ## remove function args + $CppClasses{$CppName[0]}++; + } elsif ( /\(/) { # These are strange functions + print STDERR "$_\n"; + } elsif ( /icu_/) { + print STDERR "Skipped strange mangled function $_\n"; + } else { # This is regular C function + &verbose( "C func: $_\n"); + @funcname = split(/[\(\s+]/); + $CFuncs{$funcname[0]}++; + } + } else { + &verbose( "Skipped: $_ $1\n"); + } + } +} + +print HEADER "\n/* C exports renaming data */\n\n"; +foreach(sort keys(%CFuncs)) { + print HEADER "#define $_ $_$U_ICU_VERSION_SUFFIX\n"; +} + +print HEADER "/* C++ class names renaming defines */\n\n"; +print HEADER "#ifdef XP_CPLUSPLUS\n"; +print HEADER "#if !U_HAVE_NAMESPACE\n\n"; +foreach(sort keys(%CppClasses)) { + print HEADER "#define $_ $_$U_ICU_VERSION_SUFFIX\n"; +} +print HEADER "\n#endif\n"; +print HEADER "#endif\n"; +print HEADER "\n#endif\n"; +print HEADER "\n#endif\n"; + +close HEADER; + +sub verbose { + if($VERBOSE) { + print STDERR @_; + } +} + + +sub printHelpMsgAndExit { + print STDERR <<"EndHelpText"; +Usage: $0 [OPTIONS] LIBRARY_FILES + Options: + -v - verbose + -h - help + -o - output file name (defaults to 'urename.h' + -S - suffix (defaults to _MAJOR_MINOR of current ICU version) +Will produce a renaming .h file + +EndHelpText + + exit 0; + +} + |