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;
$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);
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;
mkpath("$tempDir/$icu4jDataDir");
chdir($tempDir);
my @list;
opendir(DIR,$icuDataDir);
print $icuDataDir;
@list = readdir(DIR);
closedir(DIR);
print "{Command: $op*.*}\n";
my $op = $icuswap;
$i=0;
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;
mkpath("$tempDir/$icu4jDataDir");
chdir($tempDir);
print "{Command: $op*.*}\n";
my $op = $icuswap;
my @list;
opendir(DIR,$icuDataDir);
print $icuDataDir;
@list = readdir(DIR);
closedir(DIR);
$i=0;
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;
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=<directory where icu4c lives>
--jar=<directory where jar.exe lives>
--icu4j-root=<directory>
--version=<ICU4C version>
e.g:
gendtjar.pl --icu-root=\\work\\icu --jar=\\jdk1.4.1\\bin --icu4j-root=\\work\\icu4j --version=3.0
END
exit(0);
}