From b3580fb55bac0dc1a02c491468c88fdfe248705b Mon Sep 17 00:00:00 2001 From: Ram Viswanadha Date: Wed, 8 Jun 2005 01:21:01 +0000 Subject: [PATCH] ICU-4563 update tool to cope up with changes to data build X-SVN-Rev: 17823 --- icu4c/source/tools/genrb/gendtjar.pl | 171 ++++++++++++++++++++++----- 1 file changed, 139 insertions(+), 32 deletions(-) diff --git a/icu4c/source/tools/genrb/gendtjar.pl b/icu4c/source/tools/genrb/gendtjar.pl index 2a476b9996b..17474e5d73e 100755 --- a/icu4c/source/tools/genrb/gendtjar.pl +++ b/icu4c/source/tools/genrb/gendtjar.pl @@ -22,42 +22,148 @@ use File::Copy; use Getopt::Long; use File::Path; use File::Copy; - +use Cwd; +use Cwd 'abs_path'; 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 $version; - #usage() unless defined $icu4jRootDir; - $icuswap = $icuRootDir."/bin/icuswap -tb"; - $tempDir =cwd(); - $tempDir .= "/temp"; - $version =~ s/\.//; - $icu4jImpl = "com/ibm/icu/impl/data/"; - $icu4jDataDir = $icu4jImpl."/icudt".$version."b"; - $icu4jDevDataDir = "com/ibm/icu/dev/data/"; - $icu4jTestDataDir = "$icu4jDevDataDir/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); + GetOptions( + "--icu-root=s" => \$icuRootDir, + "--jar=s" => \$jarDir, + "--icu4j-root=s" => \$icu4jDir, + "--version=s" => \$version + ); + $cwd = abs_path(getcwd); + unless (defined $icuRootDir){ + $icuRootDir =abs_path($cwd."/../../.."); + } + unless (defined $icu4jDir){ + $icu4jDir =abs_path($icuRootDir."/../icu4j"); + } + unless (defined $jarDir){ + if(defined $ENV{'JAVA_HOME'}){ + $jarDir=$ENV{'JAVA_HOME'}."/bin"; + }else{ + print("JAVA_HOME enviroment variable undefined and --jar argument not specifed.\n"); + usage(); + } + } + + $platform = getPlatform(); + $icuBinDir = $icuRootDir; + + $path=$ENV{'PATH'}; + + if($platform eq "cygwin"){ + $icuBinDir .= "/source/bin"; + $icuLibDir = abs_path($icuBinDir."/../lib"); + $path .=":$icuBinDir:$icuLibDir"; + + $libpath = $ENV{'LD_LIBRARY_PATH'}.":$icuLibDir"; + $ENV{'LD_LIBRARY_PATH'} = $libpath; + + print ("##### LD_LIBRARY_PATH = $ENV{'LD_LIBRARY_PATH'}\n"); + + }elsif($platform eq "MSWin32"){ + $icuBinDir =$icuRootDir."/bin"; + $path .=$icuBinDir; + + } + $ENV{'PATH'} = $path; + print ("##### PATH = $ENV{'PATH'}\n"); + # TODO add more platforms and test on Linux and Unix + + $icuBuildDir =$icuRootDir."/source/data/out/build"; + $icuTestDataDir =$icuRootDir."/source/test/testdata/out/build/"; + + # now build ICU + buildICU($platform, $icuRootDir, $icuTestDataDir); + + #figure out the version and endianess + unless (defined $version){ + ($version, $endian) = getVersion(); + #print "#################### $version, $endian ######\n"; + } + + $icuswap = $icuBinDir."/icuswap -tb"; + $tempDir = $cwd."/temp"; + $version =~ s/\.//; + $icu4jImpl = "com/ibm/icu/impl/data/"; + $icu4jDataDir = $icu4jImpl."/icudt".$version."b"; + $icu4jDevDataDir = "com/ibm/icu/dev/data/"; + $icu4jTestDataDir = "$icu4jDevDataDir/testdata"; + + $icuDataDir =$icuBuildDir."/icudt".$version.checkPlatformEndianess(); - convertTestData($icuTestDataDir, $icuswap, $tempDir, $icu4jTestDataDir); - createJar("$jarDir/jar", "testdata.jar", $tempDir, $icu4jTestDataDir); - copyData(); + 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); + copyData($icu4jDir, $icu4jImpl, $icu4jDevDataDir, $tempDir); } +#----------------------------------------------------------------------- +sub buildICU{ + local($platform, $icuRootDir, $icuTestDataDir) = @_; + $icuSrcDir = $icuRootDir."/source"; + $icuSrcDataDir = $icuSrcDir."/data"; + + chdir($icuSrcDir); + # clean the data directories + unlink($icuBuildDir."../"); + unlink($icuTestDataDir."../"); + + if($platform eq "cygwin"){ + # make all in ICU + cmd("make all"); + chdir($icuSrcDataDir); + cmd("make uni-core-data"); + chdir($icuTestDataDir."../../"); + print($icuTestDataDir."../../\n"); + cmd("make"); + }elsif($platform eq "MSWin32"){ + #devenv.com $projectFileName \/build $configurationName > \"$cLogFile\" 2>&1 + cmd("devenv.com allinone/allinone.sln /useenv /build Debug"); + # build required data. this is required coz building icu will not build all the data + chdir($icuSrcDataDir); + cmd("NMAKE /f makedata.mak ICUMAKE=\"$icuSrcDataDir\" CFG=debug uni-core-data"); + + }else{ + print "ERROR: Could not build ICU unknown platform $platform. \n"; + exit(-1); + } + + chdir($cwd); +} +#----------------------------------------------------------------------- +sub getVersion{ + my @list; + opendir(DIR,$icuBuildDir); + + @list = readdir(DIR); + closedir(DIR); + + if(scalar(@list)>3){ + print("ERROR: More than 1 directory in build. Can't decide the version"); + exit(-1); + } + foreach $item (@list){ + next if($item eq "." || $item eq ".."); + my ($ver, $end) =$item =~ m/icudt(.*)(l|b|e)$/; + return $ver,$end; + } +} + +#----------------------------------------------------------------------- +sub getPlatform{ + $platform = $^O; + return $platform; +} #----------------------------------------------------------------------- sub createJar{ local($jar, $jarFile, $tempDir, $dirToJar) = @_; @@ -66,7 +172,7 @@ sub createJar{ cmd($command); } #----------------------------------------------------------------------- -sub checkPlatform { +sub checkPlatformEndianess { my $is_big_endian = unpack("h*", pack("s", 1)) =~ /01/; if ($is_big_endian) { return "b"; @@ -76,10 +182,11 @@ sub checkPlatform { } #----------------------------------------------------------------------- sub copyData{ - print("Copying: $tempDir/icudata.jar to $icu4jDir/src/$icu4jImpl"); - copy("$tempDir/icudata.jar", "$icu4jDir/src/$icu4jImpl"); - print("Copying: $tempDir/testData.jar $icu4jDir/src/$icu4jDevDataDir"); - copy("$tempDir/testData.jar","$icu4jDir/src/$icu4jDevDataDir"); + local($icu4jDir, $icu4jImpl, $icu4jDevDataDir, $tempDir) =@_; + print("Copying: $tempDir/icudata.jar to $icu4jDir/src/$icu4jImpl"); + copy("$tempDir/icudata.jar", "$icu4jDir/src/$icu4jImpl"); + print("Copying: $tempDir/testData.jar $icu4jDir/src/$icu4jDevDataDir"); + copy("$tempDir/testData.jar","$icu4jDir/src/$icu4jDevDataDir"); } #----------------------------------------------------------------------- sub convertData{