#!/usr/bin/perl # ******************************************************************** # * COPYRIGHT: # * Copyright (c) 2002-2004, International Business Machines Corporation and # * others. All Rights Reserved. # ******************************************************************** # Script to generate the icudata.jar and testdata.jar files. This file is # part of icu4j. It is checked into CVS. It is generated from # locale data in the icu4c project. See usage() notes (below) # for more information. # This script requires perl. For Win32, I recommend www.activestate.com. # Ram Viswanadha # copied heavily from genrbjar.pl use File::Find; use File::Basename; use IO::File; use Cwd; use File::Copy; use Getopt::Long; use File::Path; use File::Copy; main(); #------------------------------------------------------------------ sub main(){ GetOptions( "--icu-root=s" => \$icuRootDir, "--jar=s" => \$jarDir, "--icu4j-root=s" => \$icu4jDir, "--version=s" => \$version ); usage() unless defined $icuRootDir; usage() unless defined $jarDir; #usage() unless defined $icu4jRootDir; $icuswap = $icuRootDir."/bin/icuswap -tb"; $tempDir =cwd(); $tempDir .= "/temp"; $version =~ s/\.//; $icu4jDataDir ="com/ibm/icu/impl/data/icudt".$version."b"; $icu4jTestDataDir = "com/ibm/icu/dev/data/testdata"; $icuDataDir =$icuRootDir."/source/data/out/build/icudt".$version.checkPlatform(); $icuTestDataDir =$icuRootDir."/source/test/testdata/out/build/"; convertData($icuDataDir, $icuswap, $tempDir, $icu4jDataDir); #convertData($icuDataDir."/coll/", $icuswap, $tempDir, $icu4jDataDir."/coll"); createJar("$jarDir/jar", "icudata.jar", $tempDir, $icu4jDataDir); convertTestData($icuTestDataDir, $icuswap, $tempDir, $icu4jTestDataDir); createJar("$jarDir/jar", "testdata.jar", $tempDir, $icu4jTestDataDir); } #----------------------------------------------------------------------- sub createJar{ local($jar, $jarFile, $tempDir, $dirToJar) = @_; chdir($tempDir); $command = "$jar cvf $jarFile -C $tempDir $dirToJar"; cmd($command); } #----------------------------------------------------------------------- sub checkPlatform { my $is_big_endian = unpack("h*", pack("s", 1)) =~ /01/; if ($is_big_endian) { return "b"; }else{ return "l"; } } #----------------------------------------------------------------------- #----------------------------------------------------------------------- sub convertData{ local($icuDataDir, $icuswap, $tempDir, $icu4jDataDir) =@_; my $dir = $tempDir."/".$icu4jDataDir; # create the temp directory mkpath("$tempDir/$icu4jDataDir"); # cd to the temp directory chdir($tempDir); my @list; opendir(DIR,$icuDataDir); print $icuDataDir; @list = readdir(DIR); closedir(DIR); print "{Command: $op*.*}\n"; my $op = $icuswap; $i=0; # now convert foreach $item (@list){ next if($item eq "." || $item eq ".."); next if($item =~ /^t_.*$\.res/ ||$item =~ /^translit_.*$\.res/ || $item =~ /$\.cnv/ || $item=~/$\.crs/ || $item=~ /$\.txt/ || $item=~ /^zoneinfo/ || $item=~/icudata\.res/ || $item=~/$\.exp/ || $item=~/$\.lib/ || $item=~/$\.obj/ || $item=~/cnvalias\.icu/ || $item=~/$\.lst/); if(-d "$icuDataDir/$item"){ convertData("$icuDataDir/$item/", $icuswap, $tempDir, "$icu4jDataDir./$item/"); next; } $command = $icuswap." $icuDataDir/$item $tempDir/$icu4jDataDir/$item"; cmd($command); } chdir(".."); print "\nDONE\n"; } #----------------------------------------------------------------------- sub convertTestData{ local($icuDataDir, $icuswap, $tempDir, $icu4jDataDir) =@_; my $dir = $tempDir."/".$icu4jDataDir; # create the temp directory mkpath("$tempDir/$icu4jDataDir"); # cd to the temp directory chdir($tempDir); print "{Command: $op*.*}\n"; my $op = $icuswap; my @list; opendir(DIR,$icuDataDir); print $icuDataDir; @list = readdir(DIR); closedir(DIR); $i=0; # now convert foreach $item (@list){ next if($item eq "." || $item eq ".."); next if($item =~ /$\.cnv/ || item=~/$\.crs/ || $item=~ /$\.txt/ || $item=~/$\.exp/ || $item=~/$\.lib/ || $item=~/$\.obj/ || $item=~/$\.mak/ || $item=~/test\.icu/ || $item=~/$\.lst/); if($item =~ /^testdata_/){ $file = $item; $file =~ s/testdata_//g; $command = "$icuswap $icuDataDir/$item $tempDir/$icu4jDataDir/$file"; cmd($command); } } chdir(".."); print "\nDONE\n"; } #------------------------------------------------------------------------------------------------ sub cmd { my $cmd = shift; my $prompt = shift; $prompt = "Command: $cmd.." unless ($prompt); print $prompt."\n"; system($cmd); my $exit_value = $? >> 8; #my $signal_num = $? & 127; #my $dumped_core = $? & 128; if ($exit_value == 0) { print "ok\n"; } else { ++$errCount; print "ERROR ($exit_value)\n"; exit(1); } } #----------------------------------------------------------------------- sub usage { print << "END"; Usage: gendtjar.pl Options: --icu-root= --jar= --icu4j-root= --version= e.g: gendtjar.pl --icu-root=\\work\\icu --jar=\\jdk1.4.1\\bin --icu4j-root=\\work\\icu4j --version=3.0 END exit(0); }