mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-08 06:53:45 +00:00
ICU-4563 update tool to cope up with changes to data build
X-SVN-Rev: 17823
This commit is contained in:
parent
5dc3d7c9d4
commit
b3580fb55b
1 changed files with 139 additions and 32 deletions
|
@ -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{
|
||||
|
|
Loading…
Add table
Reference in a new issue