1*b1cdbd2cSJim Jagielski#************************************************************** 2*b1cdbd2cSJim Jagielski# 3*b1cdbd2cSJim Jagielski# Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski# or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski# distributed with this work for additional information 6*b1cdbd2cSJim Jagielski# regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski# to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski# "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski# with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski# 11*b1cdbd2cSJim Jagielski# http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski# 13*b1cdbd2cSJim Jagielski# Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski# software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski# KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski# specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski# under the License. 19*b1cdbd2cSJim Jagielski# 20*b1cdbd2cSJim Jagielski#************************************************************** 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielskipackage installer::javainstaller; 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielskiuse Cwd; 26*b1cdbd2cSJim Jagielskiuse installer::exiter; 27*b1cdbd2cSJim Jagielskiuse installer::files; 28*b1cdbd2cSJim Jagielskiuse installer::globals; 29*b1cdbd2cSJim Jagielskiuse installer::languages; 30*b1cdbd2cSJim Jagielskiuse installer::pathanalyzer; 31*b1cdbd2cSJim Jagielskiuse installer::scriptitems; 32*b1cdbd2cSJim Jagielskiuse installer::systemactions; 33*b1cdbd2cSJim Jagielskiuse installer::worker; 34*b1cdbd2cSJim Jagielskiuse installer::logger; 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski############################################################## 37*b1cdbd2cSJim Jagielski# Returning a specific language string from the block 38*b1cdbd2cSJim Jagielski# of all translations 39*b1cdbd2cSJim Jagielski############################################################## 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielskisub get_language_string_from_language_block 42*b1cdbd2cSJim Jagielski{ 43*b1cdbd2cSJim Jagielski my ($language_block, $language, $oldstring) = @_; 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski my $newstring = ""; 46*b1cdbd2cSJim Jagielski 47*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$language_block}; $i++ ) 48*b1cdbd2cSJim Jagielski { 49*b1cdbd2cSJim Jagielski if ( ${$language_block}[$i] =~ /^\s*$language\s*\=\s*\"(.*)\"\s*$/ ) 50*b1cdbd2cSJim Jagielski { 51*b1cdbd2cSJim Jagielski $newstring = $1; 52*b1cdbd2cSJim Jagielski last; 53*b1cdbd2cSJim Jagielski } 54*b1cdbd2cSJim Jagielski } 55*b1cdbd2cSJim Jagielski 56*b1cdbd2cSJim Jagielski if ( $newstring eq "" ) 57*b1cdbd2cSJim Jagielski { 58*b1cdbd2cSJim Jagielski $language = "en-US"; # defaulting to english 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$language_block}; $i++ ) 61*b1cdbd2cSJim Jagielski { 62*b1cdbd2cSJim Jagielski if ( ${$language_block}[$i] =~ /^\s*$language\s*\=\s*\"(.*)\"\s*$/ ) 63*b1cdbd2cSJim Jagielski { 64*b1cdbd2cSJim Jagielski $newstring = $1; 65*b1cdbd2cSJim Jagielski last; 66*b1cdbd2cSJim Jagielski } 67*b1cdbd2cSJim Jagielski } 68*b1cdbd2cSJim Jagielski } 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski return $newstring; 71*b1cdbd2cSJim Jagielski} 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski############################################################## 74*b1cdbd2cSJim Jagielski# Returning the complete block in all languages 75*b1cdbd2cSJim Jagielski# for a specified string 76*b1cdbd2cSJim Jagielski############################################################## 77*b1cdbd2cSJim Jagielski 78*b1cdbd2cSJim Jagielskisub get_language_block_from_language_file 79*b1cdbd2cSJim Jagielski{ 80*b1cdbd2cSJim Jagielski my ($searchstring, $languagefile) = @_; 81*b1cdbd2cSJim Jagielski 82*b1cdbd2cSJim Jagielski my @language_block = (); 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$languagefile}; $i++ ) 85*b1cdbd2cSJim Jagielski { 86*b1cdbd2cSJim Jagielski if ( ${$languagefile}[$i] =~ /^\s*\[\s*$searchstring\s*\]\s*$/ ) 87*b1cdbd2cSJim Jagielski { 88*b1cdbd2cSJim Jagielski my $counter = $i; 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski push(@language_block, ${$languagefile}[$counter]); 91*b1cdbd2cSJim Jagielski $counter++; 92*b1cdbd2cSJim Jagielski 93*b1cdbd2cSJim Jagielski while (( $counter <= $#{$languagefile} ) && (!( ${$languagefile}[$counter] =~ /^\s*\[/ ))) 94*b1cdbd2cSJim Jagielski { 95*b1cdbd2cSJim Jagielski push(@language_block, ${$languagefile}[$counter]); 96*b1cdbd2cSJim Jagielski $counter++; 97*b1cdbd2cSJim Jagielski } 98*b1cdbd2cSJim Jagielski 99*b1cdbd2cSJim Jagielski last; 100*b1cdbd2cSJim Jagielski } 101*b1cdbd2cSJim Jagielski } 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski return \@language_block; 104*b1cdbd2cSJim Jagielski} 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski####################################################### 107*b1cdbd2cSJim Jagielski# Searching for the module name and description in the 108*b1cdbd2cSJim Jagielski# modules collector 109*b1cdbd2cSJim Jagielski####################################################### 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielskisub get_module_name_description 112*b1cdbd2cSJim Jagielski{ 113*b1cdbd2cSJim Jagielski my ($modulesarrayref, $onelanguage, $gid, $type) = @_; 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski my $found = 0; 116*b1cdbd2cSJim Jagielski 117*b1cdbd2cSJim Jagielski my $newstring = ""; 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$modulesarrayref}; $i++ ) 120*b1cdbd2cSJim Jagielski { 121*b1cdbd2cSJim Jagielski my $onemodule = ${$modulesarrayref}[$i]; 122*b1cdbd2cSJim Jagielski 123*b1cdbd2cSJim Jagielski if ( $onemodule->{'gid'} eq $gid ) 124*b1cdbd2cSJim Jagielski { 125*b1cdbd2cSJim Jagielski my $typestring = $type . " " . "(" . $onelanguage . ")"; 126*b1cdbd2cSJim Jagielski if ( $onemodule->{$typestring} ) { $newstring = $onemodule->{$typestring}; } 127*b1cdbd2cSJim Jagielski $found = 1; 128*b1cdbd2cSJim Jagielski } 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski if ( $found ) { last; } 131*b1cdbd2cSJim Jagielski } 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski # defaulting to english 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski if ( ! $found ) 136*b1cdbd2cSJim Jagielski { 137*b1cdbd2cSJim Jagielski my $defaultlanguage = "en-US"; 138*b1cdbd2cSJim Jagielski 139*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$modulesarrayref}; $i++ ) 140*b1cdbd2cSJim Jagielski { 141*b1cdbd2cSJim Jagielski my $onemodule = ${$modulesarrayref}[$i]; 142*b1cdbd2cSJim Jagielski 143*b1cdbd2cSJim Jagielski if ( $onemodule->{'gid'} eq $gid ) 144*b1cdbd2cSJim Jagielski { 145*b1cdbd2cSJim Jagielski my $typestring = $type . " " . "(" . $defaultlanguage . ")"; 146*b1cdbd2cSJim Jagielski if ( $onemodule->{$typestring} ) { $newstring = $onemodule->{$typestring}; } 147*b1cdbd2cSJim Jagielski $found = 1; 148*b1cdbd2cSJim Jagielski } 149*b1cdbd2cSJim Jagielski 150*b1cdbd2cSJim Jagielski if ( $found ) { last; } 151*b1cdbd2cSJim Jagielski } 152*b1cdbd2cSJim Jagielski } 153*b1cdbd2cSJim Jagielski 154*b1cdbd2cSJim Jagielski return $newstring; 155*b1cdbd2cSJim Jagielski} 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski####################################################### 158*b1cdbd2cSJim Jagielski# Setting the productname and productversion 159*b1cdbd2cSJim Jagielski####################################################### 160*b1cdbd2cSJim Jagielski 161*b1cdbd2cSJim Jagielskisub set_productname_and_productversion 162*b1cdbd2cSJim Jagielski{ 163*b1cdbd2cSJim Jagielski my ($templatefile, $variableshashref) = @_; 164*b1cdbd2cSJim Jagielski 165*b1cdbd2cSJim Jagielski $installer::logger::Lang->print("\n"); 166*b1cdbd2cSJim Jagielski $installer::logger::Lang->print("Setting product name and product version in Java template file\n"); 167*b1cdbd2cSJim Jagielski 168*b1cdbd2cSJim Jagielski my $productname = $variableshashref->{'PRODUCTNAME'}; 169*b1cdbd2cSJim Jagielski my $productversion = $variableshashref->{'PRODUCTVERSION'}; 170*b1cdbd2cSJim Jagielski 171*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$templatefile}; $i++ ) 172*b1cdbd2cSJim Jagielski { 173*b1cdbd2cSJim Jagielski ${$templatefile}[$i] =~ s/\{PRODUCTNAME\}/$productname/g; 174*b1cdbd2cSJim Jagielski ${$templatefile}[$i] =~ s/\{PRODUCTVERSION\}/$productversion/g; 175*b1cdbd2cSJim Jagielski } 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski $infoline = "End of: Setting product name and product version in Java template file\n\n"; 178*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 179*b1cdbd2cSJim Jagielski} 180*b1cdbd2cSJim Jagielski 181*b1cdbd2cSJim Jagielski####################################################### 182*b1cdbd2cSJim Jagielski# Setting the localized Module name and description 183*b1cdbd2cSJim Jagielski####################################################### 184*b1cdbd2cSJim Jagielski 185*b1cdbd2cSJim Jagielskisub set_component_name_and_description 186*b1cdbd2cSJim Jagielski{ 187*b1cdbd2cSJim Jagielski my ($templatefile, $modulesarrayref, $onelanguage) = @_; 188*b1cdbd2cSJim Jagielski 189*b1cdbd2cSJim Jagielski $installer::logger::Lang->print("\n"); 190*b1cdbd2cSJim Jagielski $installer::logger::Lang->print("Setting component names and description in Java template file\n"); 191*b1cdbd2cSJim Jagielski 192*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$templatefile}; $i++ ) 193*b1cdbd2cSJim Jagielski { 194*b1cdbd2cSJim Jagielski # OOO_gid_Module_Prg_Wrt_Name 195*b1cdbd2cSJim Jagielski # OOO_gid_Module_Prg_Wrt_Description 196*b1cdbd2cSJim Jagielski 197*b1cdbd2cSJim Jagielski my $oneline = ${$templatefile}[$i]; 198*b1cdbd2cSJim Jagielski my $oldstring = ""; 199*b1cdbd2cSJim Jagielski my $gid = ""; 200*b1cdbd2cSJim Jagielski my $type = ""; 201*b1cdbd2cSJim Jagielski 202*b1cdbd2cSJim Jagielski if ( $oneline =~ /\b(OOO_gid_\w+)\b/ ) 203*b1cdbd2cSJim Jagielski { 204*b1cdbd2cSJim Jagielski $oldstring = $1; 205*b1cdbd2cSJim Jagielski 206*b1cdbd2cSJim Jagielski $infoline = "Found: $oldstring\n"; 207*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 208*b1cdbd2cSJim Jagielski 209*b1cdbd2cSJim Jagielski if ( $oldstring =~ /^\s*OOO_(gid_\w+)_(\w+?)\s*$/ ) 210*b1cdbd2cSJim Jagielski { 211*b1cdbd2cSJim Jagielski $gid = $1; 212*b1cdbd2cSJim Jagielski $type = $2; 213*b1cdbd2cSJim Jagielski } 214*b1cdbd2cSJim Jagielski 215*b1cdbd2cSJim Jagielski my $newstring = get_module_name_description($modulesarrayref, $onelanguage, $gid, $type); 216*b1cdbd2cSJim Jagielski 217*b1cdbd2cSJim Jagielski $infoline = "\tReplacing (language $onelanguage): OLDSTRING: $oldstring NEWSTRING $newstring\n"; 218*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 219*b1cdbd2cSJim Jagielski 220*b1cdbd2cSJim Jagielski ${$templatefile}[$i] =~ s/$oldstring/$newstring/; # always substitute, even if $newstring eq "" 221*b1cdbd2cSJim Jagielski } 222*b1cdbd2cSJim Jagielski } 223*b1cdbd2cSJim Jagielski 224*b1cdbd2cSJim Jagielski $infoline = "End of: Setting component names and description in Java template file\n\n"; 225*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 226*b1cdbd2cSJim Jagielski} 227*b1cdbd2cSJim Jagielski 228*b1cdbd2cSJim Jagielski####################################################### 229*b1cdbd2cSJim Jagielski# Translating the Java file 230*b1cdbd2cSJim Jagielski####################################################### 231*b1cdbd2cSJim Jagielski 232*b1cdbd2cSJim Jagielskisub translate_javafile 233*b1cdbd2cSJim Jagielski{ 234*b1cdbd2cSJim Jagielski my ($templatefile, $languagefile, $onelanguage) = @_; 235*b1cdbd2cSJim Jagielski 236*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$templatefile}; $i++ ) 237*b1cdbd2cSJim Jagielski { 238*b1cdbd2cSJim Jagielski my @allstrings = (); 239*b1cdbd2cSJim Jagielski 240*b1cdbd2cSJim Jagielski my $oneline = ${$templatefile}[$i]; 241*b1cdbd2cSJim Jagielski 242*b1cdbd2cSJim Jagielski while ( $oneline =~ /\b(OOO_\w+)\b/ ) 243*b1cdbd2cSJim Jagielski { 244*b1cdbd2cSJim Jagielski my $replacestring = $1; 245*b1cdbd2cSJim Jagielski push(@allstrings, $replacestring); 246*b1cdbd2cSJim Jagielski $oneline =~ s/$replacestring//; 247*b1cdbd2cSJim Jagielski } 248*b1cdbd2cSJim Jagielski 249*b1cdbd2cSJim Jagielski my $oldstring; 250*b1cdbd2cSJim Jagielski 251*b1cdbd2cSJim Jagielski foreach $oldstring (@allstrings) 252*b1cdbd2cSJim Jagielski { 253*b1cdbd2cSJim Jagielski my $language_block = get_language_block_from_language_file($oldstring, $languagefile); 254*b1cdbd2cSJim Jagielski my $newstring = get_language_string_from_language_block($language_block, $onelanguage, $oldstring); 255*b1cdbd2cSJim Jagielski 256*b1cdbd2cSJim Jagielski $newstring =~ s/\"/\\\"/g; # masquerading the " 257*b1cdbd2cSJim Jagielski $newstring =~ s/\\\\\"/\\\"/g; # unmasquerading if \" was converted to \\" (because " was already masked) 258*b1cdbd2cSJim Jagielski 259*b1cdbd2cSJim Jagielski # if (!( $newstring eq "" )) { ${$idtfile}[$i] =~ s/$oldstring/$newstring/; } 260*b1cdbd2cSJim Jagielski ${$templatefile}[$i] =~ s/$oldstring/$newstring/; # always substitute, even if $newstring eq "" 261*b1cdbd2cSJim Jagielski } 262*b1cdbd2cSJim Jagielski } 263*b1cdbd2cSJim Jagielski} 264*b1cdbd2cSJim Jagielski 265*b1cdbd2cSJim Jagielski########################################################### 266*b1cdbd2cSJim Jagielski# Returning the license file name for a defined language 267*b1cdbd2cSJim Jagielski########################################################### 268*b1cdbd2cSJim Jagielski 269*b1cdbd2cSJim Jagielskisub get_licensefilesource 270*b1cdbd2cSJim Jagielski{ 271*b1cdbd2cSJim Jagielski my ($language, $includepatharrayref) = @_; 272*b1cdbd2cSJim Jagielski 273*b1cdbd2cSJim Jagielski my $licensefilename = "LICENSE_" . $language; 274*b1cdbd2cSJim Jagielski 275*b1cdbd2cSJim Jagielski my $licenseref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$licensefilename, $includepatharrayref, 0); 276*b1cdbd2cSJim Jagielski if ($$licenseref eq "") { installer::exiter::exit_program("ERROR: Could not find License file $licensefilename!", "get_licensefilesource"); } 277*b1cdbd2cSJim Jagielski 278*b1cdbd2cSJim Jagielski my $infoline = "Found licensefile $licensefilename: $$licenseref \n"; 279*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 280*b1cdbd2cSJim Jagielski 281*b1cdbd2cSJim Jagielski return $$licenseref; 282*b1cdbd2cSJim Jagielski} 283*b1cdbd2cSJim Jagielski 284*b1cdbd2cSJim Jagielski####################################################### 285*b1cdbd2cSJim Jagielski# Converting the license string into the 286*b1cdbd2cSJim Jagielski# Java specific encoding. 287*b1cdbd2cSJim Jagielski####################################################### 288*b1cdbd2cSJim Jagielski 289*b1cdbd2cSJim Jagielskisub convert_licenstring 290*b1cdbd2cSJim Jagielski{ 291*b1cdbd2cSJim Jagielski my ($licensefile, $includepatharrayref, $javadir, $onelanguage) = @_; 292*b1cdbd2cSJim Jagielski 293*b1cdbd2cSJim Jagielski my $licensedir = $javadir . $installer::globals::separator . "license"; 294*b1cdbd2cSJim Jagielski installer::systemactions::create_directory($licensedir); 295*b1cdbd2cSJim Jagielski 296*b1cdbd2cSJim Jagielski # saving the original license file 297*b1cdbd2cSJim Jagielski 298*b1cdbd2cSJim Jagielski my $licensefilename = $licensedir . $installer::globals::separator . "licensefile.txt"; 299*b1cdbd2cSJim Jagielski installer::files::save_file($licensefilename, $licensefile); 300*b1cdbd2cSJim Jagielski 301*b1cdbd2cSJim Jagielski # creating the ulf file from the license file 302*b1cdbd2cSJim Jagielski 303*b1cdbd2cSJim Jagielski $licensefilename = $licensedir . $installer::globals::separator . "licensefile.ulf"; 304*b1cdbd2cSJim Jagielski my @licensearray = (); 305*b1cdbd2cSJim Jagielski 306*b1cdbd2cSJim Jagielski my $section = "\[TRANSLATE\]\n"; 307*b1cdbd2cSJim Jagielski push(@licensearray, $section); 308*b1cdbd2cSJim Jagielski 309*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$licensefile}; $i++ ) 310*b1cdbd2cSJim Jagielski { 311*b1cdbd2cSJim Jagielski my $oneline = ${$licensefile}[$i]; 312*b1cdbd2cSJim Jagielski 313*b1cdbd2cSJim Jagielski if ($i == 0) { $oneline =~ s/^\s*\�\�\�//; } 314*b1cdbd2cSJim Jagielski 315*b1cdbd2cSJim Jagielski $oneline =~ s/\s*$//; 316*b1cdbd2cSJim Jagielski $oneline =~ s/\"/\\\"/g; # masquerading the " 317*b1cdbd2cSJim Jagielski $oneline =~ s/\'/\\\'/g; # masquerading the ' 318*b1cdbd2cSJim Jagielski 319*b1cdbd2cSJim Jagielski $oneline =~ s/\$\{/\{/g; # replacement of variables, only {PRODUCTNAME}, not ${PRODUCTNAME} 320*b1cdbd2cSJim Jagielski 321*b1cdbd2cSJim Jagielski my $ulfstring = $onelanguage . " = " . "\"" . $oneline . "\"\n"; 322*b1cdbd2cSJim Jagielski push(@licensearray, $ulfstring); 323*b1cdbd2cSJim Jagielski } 324*b1cdbd2cSJim Jagielski 325*b1cdbd2cSJim Jagielski installer::files::save_file($licensefilename, \@licensearray); 326*b1cdbd2cSJim Jagielski 327*b1cdbd2cSJim Jagielski # converting the ulf file to the jlf file with ulfconv 328*b1cdbd2cSJim Jagielski 329*b1cdbd2cSJim Jagielski @licensearray = (); 330*b1cdbd2cSJim Jagielski 331*b1cdbd2cSJim Jagielski my $converter = "ulfconv"; 332*b1cdbd2cSJim Jagielski 333*b1cdbd2cSJim Jagielski my $converterref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$converter, $includepatharrayref, 0); 334*b1cdbd2cSJim Jagielski if ($$converterref eq "") { installer::exiter::exit_program("ERROR: Could not find converter $converter!", "convert_licenstring"); } 335*b1cdbd2cSJim Jagielski 336*b1cdbd2cSJim Jagielski my $infoline = "Found converter file $converter: $$converterref \n"; 337*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 338*b1cdbd2cSJim Jagielski 339*b1cdbd2cSJim Jagielski my $systemcall = "$$converterref $licensefilename |"; 340*b1cdbd2cSJim Jagielski open (CONV, "$systemcall"); 341*b1cdbd2cSJim Jagielski @licensearray = <CONV>; 342*b1cdbd2cSJim Jagielski close (CONV); 343*b1cdbd2cSJim Jagielski 344*b1cdbd2cSJim Jagielski $licensefilename = $licensedir . $installer::globals::separator . "licensefile.jlf"; 345*b1cdbd2cSJim Jagielski installer::files::save_file($licensefilename, \@licensearray); 346*b1cdbd2cSJim Jagielski 347*b1cdbd2cSJim Jagielski # creating the license string from the jlf file 348*b1cdbd2cSJim Jagielski 349*b1cdbd2cSJim Jagielski $licensestring = ""; 350*b1cdbd2cSJim Jagielski 351*b1cdbd2cSJim Jagielski for ( my $i = 1; $i <= $#licensearray; $i++ ) # not the first line! 352*b1cdbd2cSJim Jagielski { 353*b1cdbd2cSJim Jagielski my $oneline = $licensearray[$i]; 354*b1cdbd2cSJim Jagielski $oneline =~ s/^\s*$onelanguage\s*\=\s*\"//; 355*b1cdbd2cSJim Jagielski $oneline =~ s/\"\s*$//; 356*b1cdbd2cSJim Jagielski $licensestring = $licensestring . $oneline . "\\n"; 357*b1cdbd2cSJim Jagielski } 358*b1cdbd2cSJim Jagielski 359*b1cdbd2cSJim Jagielski $infoline = "Systemcall: $systemcall\n"; 360*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 361*b1cdbd2cSJim Jagielski 362*b1cdbd2cSJim Jagielski if ( $licensestring eq "" ) 363*b1cdbd2cSJim Jagielski { 364*b1cdbd2cSJim Jagielski $infoline = "ERROR: Could not convert $licensefilename !\n"; 365*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 366*b1cdbd2cSJim Jagielski } 367*b1cdbd2cSJim Jagielski 368*b1cdbd2cSJim Jagielski return $licensestring; 369*b1cdbd2cSJim Jagielski} 370*b1cdbd2cSJim Jagielski 371*b1cdbd2cSJim Jagielski####################################################### 372*b1cdbd2cSJim Jagielski# Adding the license file into the java file 373*b1cdbd2cSJim Jagielski# In the template java file there are two 374*b1cdbd2cSJim Jagielski# occurences of INSTALLSDK_GUI_LICENSE 375*b1cdbd2cSJim Jagielski# and INSTALLSDK_CONSOLE_LICENSE 376*b1cdbd2cSJim Jagielski####################################################### 377*b1cdbd2cSJim Jagielski 378*b1cdbd2cSJim Jagielskisub add_license_file_into_javafile 379*b1cdbd2cSJim Jagielski{ 380*b1cdbd2cSJim Jagielski my ( $templatefile, $licensefile, $includepatharrayref, $javadir, $onelanguage ) = @_; 381*b1cdbd2cSJim Jagielski 382*b1cdbd2cSJim Jagielski my $licensestring = convert_licenstring($licensefile, $includepatharrayref, $javadir, $onelanguage); 383*b1cdbd2cSJim Jagielski 384*b1cdbd2cSJim Jagielski # saving the licensestring in an ulf file 385*b1cdbd2cSJim Jagielski # converting the file using "ulfconv license.ulf" 386*b1cdbd2cSJim Jagielski # including the new string into the java file 387*b1cdbd2cSJim Jagielski 388*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$templatefile}; $i++ ) 389*b1cdbd2cSJim Jagielski { 390*b1cdbd2cSJim Jagielski ${$templatefile}[$i] =~ s/INSTALLSDK_GUI_LICENSE/$licensestring/; 391*b1cdbd2cSJim Jagielski ${$templatefile}[$i] =~ s/INSTALLSDK_CONSOLE_LICENSE/$licensestring/; 392*b1cdbd2cSJim Jagielski } 393*b1cdbd2cSJim Jagielski} 394*b1cdbd2cSJim Jagielski 395*b1cdbd2cSJim Jagielski####################################################### 396*b1cdbd2cSJim Jagielski# Executing one system call 397*b1cdbd2cSJim Jagielski####################################################### 398*b1cdbd2cSJim Jagielski 399*b1cdbd2cSJim Jagielskisub make_systemcall 400*b1cdbd2cSJim Jagielski{ 401*b1cdbd2cSJim Jagielski my ( $systemcall, $logreturn ) = @_; 402*b1cdbd2cSJim Jagielski 403*b1cdbd2cSJim Jagielski my @returns = (); 404*b1cdbd2cSJim Jagielski 405*b1cdbd2cSJim Jagielski $installer::logger::Info->printf("... %s ...\n", $systemcall); 406*b1cdbd2cSJim Jagielski 407*b1cdbd2cSJim Jagielski open (REG, "$systemcall"); 408*b1cdbd2cSJim Jagielski while (<REG>) {push(@returns, $_); } 409*b1cdbd2cSJim Jagielski close (REG); 410*b1cdbd2cSJim Jagielski 411*b1cdbd2cSJim Jagielski my $returnvalue = $?; # $? contains the return value of the systemcall 412*b1cdbd2cSJim Jagielski 413*b1cdbd2cSJim Jagielski my $infoline = "Systemcall: $systemcall\n"; 414*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 415*b1cdbd2cSJim Jagielski 416*b1cdbd2cSJim Jagielski if ( $logreturn ) 417*b1cdbd2cSJim Jagielski { 418*b1cdbd2cSJim Jagielski foreach my $line (@returns) 419*b1cdbd2cSJim Jagielski { 420*b1cdbd2cSJim Jagielski $installer::logger::Lang->printf($line); 421*b1cdbd2cSJim Jagielski } 422*b1cdbd2cSJim Jagielski } 423*b1cdbd2cSJim Jagielski 424*b1cdbd2cSJim Jagielski if ($returnvalue) 425*b1cdbd2cSJim Jagielski { 426*b1cdbd2cSJim Jagielski $infoline = "ERROR: $systemcall\n"; 427*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 428*b1cdbd2cSJim Jagielski $error_occured = 1; 429*b1cdbd2cSJim Jagielski } 430*b1cdbd2cSJim Jagielski else 431*b1cdbd2cSJim Jagielski { 432*b1cdbd2cSJim Jagielski $infoline = "SUCCESS: $systemcall\n"; 433*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 434*b1cdbd2cSJim Jagielski } 435*b1cdbd2cSJim Jagielski 436*b1cdbd2cSJim Jagielski return \@returns; 437*b1cdbd2cSJim Jagielski} 438*b1cdbd2cSJim Jagielski 439*b1cdbd2cSJim Jagielski####################################################### 440*b1cdbd2cSJim Jagielski# Setting the class path for the Installer SDK 441*b1cdbd2cSJim Jagielski####################################################### 442*b1cdbd2cSJim Jagielski 443*b1cdbd2cSJim Jagielskisub set_classpath_for_install_sdk 444*b1cdbd2cSJim Jagielski{ 445*b1cdbd2cSJim Jagielski my ( $directory ) = @_; 446*b1cdbd2cSJim Jagielski 447*b1cdbd2cSJim Jagielski my $installsdk = ""; 448*b1cdbd2cSJim Jagielski my $solarVersion = ""; 449*b1cdbd2cSJim Jagielski my $inPath = ""; 450*b1cdbd2cSJim Jagielski my $updMinorExt = ""; 451*b1cdbd2cSJim Jagielski 452*b1cdbd2cSJim Jagielski if ( defined( $ENV{ 'SOLARVERSION' } ) ) { $solarVersion = $ENV{'SOLARVERSION'}; } 453*b1cdbd2cSJim Jagielski else { installer::exiter::exit_program("ERROR: Environment variable \"SOLARVERSION\" not set!", "set_classpath_for_install_sdk"); } 454*b1cdbd2cSJim Jagielski 455*b1cdbd2cSJim Jagielski if ( defined( $ENV{ 'INPATH' } ) ) { $inPath = $ENV{'INPATH'}; } 456*b1cdbd2cSJim Jagielski else { installer::exiter::exit_program("ERROR: Environment variable \"INPATH\" not set!", "set_classpath_for_install_sdk"); } 457*b1cdbd2cSJim Jagielski 458*b1cdbd2cSJim Jagielski if ( defined( $ENV{ 'UPDMINOREXT' } ) ) { $updMinorExt = $ENV{'UPDMINOREXT'}; } 459*b1cdbd2cSJim Jagielski 460*b1cdbd2cSJim Jagielski $installsdk = $solarVersion . $installer::globals::separator . $inPath . $installer::globals::separator . "bin" . $updMinorExt; 461*b1cdbd2cSJim Jagielski $installsdk = $installsdk . $installer::globals::separator . "javainstaller"; 462*b1cdbd2cSJim Jagielski 463*b1cdbd2cSJim Jagielski if ( $ENV{'INSTALLSDK_SOURCE'} ) { $installsdk = $ENV{'INSTALLSDK_SOURCE'}; } # overriding the Install SDK with INSTALLSDK_SOURCE 464*b1cdbd2cSJim Jagielski 465*b1cdbd2cSJim Jagielski # The variable CLASSPATH has to contain: 466*b1cdbd2cSJim Jagielski # $installsdk/classes:$installsdk/classes/setupsdk.jar: 467*b1cdbd2cSJim Jagielski # $installsdk/classes/parser.jar:$installsdk/classes/jaxp.jar: 468*b1cdbd2cSJim Jagielski # $installsdk/classes/ldapjdk.jar:$directory 469*b1cdbd2cSJim Jagielski 470*b1cdbd2cSJim Jagielski my @additional_classpath = (); 471*b1cdbd2cSJim Jagielski push(@additional_classpath, "$installsdk\/classes"); 472*b1cdbd2cSJim Jagielski push(@additional_classpath, "$installsdk\/installsdk.jar"); 473*b1cdbd2cSJim Jagielski push(@additional_classpath, "$installsdk\/classes\/parser.jar"); 474*b1cdbd2cSJim Jagielski push(@additional_classpath, "$installsdk\/classes\/jaxp.jar"); 475*b1cdbd2cSJim Jagielski push(@additional_classpath, "$directory"); 476*b1cdbd2cSJim Jagielski 477*b1cdbd2cSJim Jagielski my $newclasspathstring = ""; 478*b1cdbd2cSJim Jagielski my $oldclasspathstring = ""; 479*b1cdbd2cSJim Jagielski if ( $ENV{'CLASSPATH'} ) { $oldclasspathstring = $ENV{'CLASSPATH'}; } 480*b1cdbd2cSJim Jagielski else { $oldclasspathstring = "\."; } 481*b1cdbd2cSJim Jagielski 482*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#additional_classpath; $i++ ) 483*b1cdbd2cSJim Jagielski { 484*b1cdbd2cSJim Jagielski $newclasspathstring = $newclasspathstring . $additional_classpath[$i] . ":"; 485*b1cdbd2cSJim Jagielski } 486*b1cdbd2cSJim Jagielski 487*b1cdbd2cSJim Jagielski $newclasspathstring = $newclasspathstring . $oldclasspathstring; 488*b1cdbd2cSJim Jagielski 489*b1cdbd2cSJim Jagielski $ENV{'CLASSPATH'} = $newclasspathstring; 490*b1cdbd2cSJim Jagielski 491*b1cdbd2cSJim Jagielski my $infoline = "Setting CLASSPATH to $ENV{'CLASSPATH'}\n"; 492*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 493*b1cdbd2cSJim Jagielski} 494*b1cdbd2cSJim Jagielski 495*b1cdbd2cSJim Jagielski####################################################### 496*b1cdbd2cSJim Jagielski# Setting the class file name in the Java locale file 497*b1cdbd2cSJim Jagielski####################################################### 498*b1cdbd2cSJim Jagielski 499*b1cdbd2cSJim Jagielskisub set_classfilename 500*b1cdbd2cSJim Jagielski{ 501*b1cdbd2cSJim Jagielski my ($templatefile, $classfilename, $searchstring) = @_; 502*b1cdbd2cSJim Jagielski 503*b1cdbd2cSJim Jagielski for ( my $j = 0; $j <= $#{$templatefile}; $j++ ) 504*b1cdbd2cSJim Jagielski { 505*b1cdbd2cSJim Jagielski if ( ${$templatefile}[$j] =~ /\Q$searchstring\E/ ) 506*b1cdbd2cSJim Jagielski { 507*b1cdbd2cSJim Jagielski ${$templatefile}[$j] =~ s/$searchstring/$classfilename/; 508*b1cdbd2cSJim Jagielski last; 509*b1cdbd2cSJim Jagielski } 510*b1cdbd2cSJim Jagielski } 511*b1cdbd2cSJim Jagielski} 512*b1cdbd2cSJim Jagielski 513*b1cdbd2cSJim Jagielski####################################################### 514*b1cdbd2cSJim Jagielski# Substituting one variable in the xml file 515*b1cdbd2cSJim Jagielski####################################################### 516*b1cdbd2cSJim Jagielski 517*b1cdbd2cSJim Jagielskisub replace_one_variable 518*b1cdbd2cSJim Jagielski{ 519*b1cdbd2cSJim Jagielski my ($xmlfile, $variable, $searchstring) = @_; 520*b1cdbd2cSJim Jagielski 521*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$xmlfile}; $i++ ) 522*b1cdbd2cSJim Jagielski { 523*b1cdbd2cSJim Jagielski ${$xmlfile}[$i] =~ s/\$\{$searchstring\}/$variable/g; 524*b1cdbd2cSJim Jagielski } 525*b1cdbd2cSJim Jagielski} 526*b1cdbd2cSJim Jagielski 527*b1cdbd2cSJim Jagielski####################################################### 528*b1cdbd2cSJim Jagielski# Substituting the variables in the xml file 529*b1cdbd2cSJim Jagielski####################################################### 530*b1cdbd2cSJim Jagielski 531*b1cdbd2cSJim Jagielskisub substitute_variables 532*b1cdbd2cSJim Jagielski{ 533*b1cdbd2cSJim Jagielski my ($xmlfile, $variableshashref) = @_; 534*b1cdbd2cSJim Jagielski 535*b1cdbd2cSJim Jagielski my $key; 536*b1cdbd2cSJim Jagielski 537*b1cdbd2cSJim Jagielski foreach $key (keys %{$variableshashref}) 538*b1cdbd2cSJim Jagielski { 539*b1cdbd2cSJim Jagielski my $value = $variableshashref->{$key}; 540*b1cdbd2cSJim Jagielski replace_one_variable($xmlfile, $value, $key); 541*b1cdbd2cSJim Jagielski } 542*b1cdbd2cSJim Jagielski} 543*b1cdbd2cSJim Jagielski 544*b1cdbd2cSJim Jagielski########################################################## 545*b1cdbd2cSJim Jagielski# Finding the line number in xml file of a special 546*b1cdbd2cSJim Jagielski# component 547*b1cdbd2cSJim Jagielski########################################################## 548*b1cdbd2cSJim Jagielski 549*b1cdbd2cSJim Jagielskisub find_component_line 550*b1cdbd2cSJim Jagielski{ 551*b1cdbd2cSJim Jagielski my ($xmlfile, $componentname) = @_; 552*b1cdbd2cSJim Jagielski 553*b1cdbd2cSJim Jagielski my $linenumber = 0; 554*b1cdbd2cSJim Jagielski 555*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$xmlfile}; $i++ ) 556*b1cdbd2cSJim Jagielski { 557*b1cdbd2cSJim Jagielski if ( ${$xmlfile}[$i] =~ /name\s*\=\'\s*$componentname/ ) 558*b1cdbd2cSJim Jagielski { 559*b1cdbd2cSJim Jagielski $linenumber = $i; 560*b1cdbd2cSJim Jagielski last; 561*b1cdbd2cSJim Jagielski } 562*b1cdbd2cSJim Jagielski } 563*b1cdbd2cSJim Jagielski 564*b1cdbd2cSJim Jagielski return $linenumber; 565*b1cdbd2cSJim Jagielski} 566*b1cdbd2cSJim Jagielski 567*b1cdbd2cSJim Jagielski########################################################## 568*b1cdbd2cSJim Jagielski# Removing one package from the xml file 569*b1cdbd2cSJim Jagielski########################################################## 570*b1cdbd2cSJim Jagielski 571*b1cdbd2cSJim Jagielskisub remove_package 572*b1cdbd2cSJim Jagielski{ 573*b1cdbd2cSJim Jagielski my ($xmlfile, $packagename) = @_; 574*b1cdbd2cSJim Jagielski 575*b1cdbd2cSJim Jagielski my $searchstring = $packagename; 576*b1cdbd2cSJim Jagielski if ( $searchstring =~ /\-(\S+?)\s*$/ ) { $searchstring = $1; } # "SUNW%PRODUCTNAME-mailcap" -> "mailcap" 577*b1cdbd2cSJim Jagielski 578*b1cdbd2cSJim Jagielski my $packagestring = ""; 579*b1cdbd2cSJim Jagielski my $namestring = ""; 580*b1cdbd2cSJim Jagielski my $infoline = ""; 581*b1cdbd2cSJim Jagielski 582*b1cdbd2cSJim Jagielski if ( $installer::globals::issolarispkgbuild ) 583*b1cdbd2cSJim Jagielski { 584*b1cdbd2cSJim Jagielski $packagestring = "\<pkgunit"; 585*b1cdbd2cSJim Jagielski $namestring = "pkgName"; 586*b1cdbd2cSJim Jagielski } 587*b1cdbd2cSJim Jagielski elsif ( $installer::globals::islinuxrpmbuild ) 588*b1cdbd2cSJim Jagielski { 589*b1cdbd2cSJim Jagielski $packagestring = "\<rpmunit"; 590*b1cdbd2cSJim Jagielski $namestring = "rpmUniqueName"; 591*b1cdbd2cSJim Jagielski } 592*b1cdbd2cSJim Jagielski 593*b1cdbd2cSJim Jagielski my $removed_packge = 0; 594*b1cdbd2cSJim Jagielski 595*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$xmlfile}; $i++ ) 596*b1cdbd2cSJim Jagielski { 597*b1cdbd2cSJim Jagielski if ( ${$xmlfile}[$i] =~ /^\s*\Q$packagestring\E/ ) 598*b1cdbd2cSJim Jagielski { 599*b1cdbd2cSJim Jagielski # this is a package, but is it the correct one? 600*b1cdbd2cSJim Jagielski 601*b1cdbd2cSJim Jagielski my $do_delete = 0; 602*b1cdbd2cSJim Jagielski my $linecounter = 1; 603*b1cdbd2cSJim Jagielski my $startline = $i+1; 604*b1cdbd2cSJim Jagielski my $line = ${$xmlfile}[$startline]; 605*b1cdbd2cSJim Jagielski if (($line =~ /^\s*\Q$namestring\E\s*\=/) && ($line =~ /\-\Q$searchstring\E/)) { $do_delete = 1; } 606*b1cdbd2cSJim Jagielski 607*b1cdbd2cSJim Jagielski # but not deleting fonts package in language packs 608*b1cdbd2cSJim Jagielski if ( $line =~ /-ONELANGUAGE-/ ) { $do_delete = 0; } 609*b1cdbd2cSJim Jagielski 610*b1cdbd2cSJim Jagielski my $endcounter = 0; 611*b1cdbd2cSJim Jagielski 612*b1cdbd2cSJim Jagielski while ((!( $line =~ /\/\>/ )) && ( $startline <= $#{$xmlfile} )) 613*b1cdbd2cSJim Jagielski { 614*b1cdbd2cSJim Jagielski $linecounter++; 615*b1cdbd2cSJim Jagielski $startline++; 616*b1cdbd2cSJim Jagielski $line = ${$xmlfile}[$startline]; 617*b1cdbd2cSJim Jagielski if (($line =~ /^\s*\Q$namestring\E\s*\=/) && ($line =~ /\-\Q$searchstring\E/)) { $do_delete = 1; } 618*b1cdbd2cSJim Jagielski } 619*b1cdbd2cSJim Jagielski 620*b1cdbd2cSJim Jagielski $linecounter = $linecounter + 1; 621*b1cdbd2cSJim Jagielski 622*b1cdbd2cSJim Jagielski if ( $do_delete ) 623*b1cdbd2cSJim Jagielski { 624*b1cdbd2cSJim Jagielski my $infoline = "\tReally removing package $packagename from xml file.\n"; 625*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 626*b1cdbd2cSJim Jagielski splice(@{$xmlfile},$i, $linecounter); # removing $linecounter lines, beginning in line $i 627*b1cdbd2cSJim Jagielski $removed_packge = 1; 628*b1cdbd2cSJim Jagielski last; 629*b1cdbd2cSJim Jagielski } 630*b1cdbd2cSJim Jagielski } 631*b1cdbd2cSJim Jagielski } 632*b1cdbd2cSJim Jagielski 633*b1cdbd2cSJim Jagielski if ( $removed_packge ) 634*b1cdbd2cSJim Jagielski { 635*b1cdbd2cSJim Jagielski $infoline = "Package $packagename successfully removed from xml file.\n"; 636*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 637*b1cdbd2cSJim Jagielski } 638*b1cdbd2cSJim Jagielski else 639*b1cdbd2cSJim Jagielski { 640*b1cdbd2cSJim Jagielski $infoline = "Did not find package $packagename in xml file.\n"; 641*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 642*b1cdbd2cSJim Jagielski } 643*b1cdbd2cSJim Jagielski 644*b1cdbd2cSJim Jagielski} 645*b1cdbd2cSJim Jagielski 646*b1cdbd2cSJim Jagielski########################################################## 647*b1cdbd2cSJim Jagielski# Removing one component from the xml file 648*b1cdbd2cSJim Jagielski########################################################## 649*b1cdbd2cSJim Jagielski 650*b1cdbd2cSJim Jagielskisub remove_component 651*b1cdbd2cSJim Jagielski{ 652*b1cdbd2cSJim Jagielski my ($xmlfile, $componentname) = @_; 653*b1cdbd2cSJim Jagielski 654*b1cdbd2cSJim Jagielski my @removed_lines = (); 655*b1cdbd2cSJim Jagielski 656*b1cdbd2cSJim Jagielski push(@removed_lines, "\n"); 657*b1cdbd2cSJim Jagielski 658*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$xmlfile}; $i++ ) 659*b1cdbd2cSJim Jagielski { 660*b1cdbd2cSJim Jagielski if ( ${$xmlfile}[$i] =~ /name\s*\=\'\s*$componentname/ ) 661*b1cdbd2cSJim Jagielski { 662*b1cdbd2cSJim Jagielski # Counting the lines till the second "</component>" 663*b1cdbd2cSJim Jagielski 664*b1cdbd2cSJim Jagielski push(@removed_lines, ${$xmlfile}[$i]); 665*b1cdbd2cSJim Jagielski my $linecounter = 1; 666*b1cdbd2cSJim Jagielski my $startline = $i+1; 667*b1cdbd2cSJim Jagielski my $line = ${$xmlfile}[$startline]; 668*b1cdbd2cSJim Jagielski push(@removed_lines, $line); 669*b1cdbd2cSJim Jagielski my $endcounter = 0; 670*b1cdbd2cSJim Jagielski 671*b1cdbd2cSJim Jagielski while ((!( $line =~ /^\s*\<\/component\>\s*$/ )) && ( $startline <= $#{$xmlfile} )) 672*b1cdbd2cSJim Jagielski { 673*b1cdbd2cSJim Jagielski $linecounter++; 674*b1cdbd2cSJim Jagielski $startline++; 675*b1cdbd2cSJim Jagielski $line = ${$xmlfile}[$startline]; 676*b1cdbd2cSJim Jagielski push(@removed_lines, $line); 677*b1cdbd2cSJim Jagielski } 678*b1cdbd2cSJim Jagielski 679*b1cdbd2cSJim Jagielski $linecounter = $linecounter + 2; # last line and following empty line 680*b1cdbd2cSJim Jagielski 681*b1cdbd2cSJim Jagielski splice(@{$xmlfile},$i, $linecounter); # removing $linecounter lines, beginning in line $i 682*b1cdbd2cSJim Jagielski last; 683*b1cdbd2cSJim Jagielski } 684*b1cdbd2cSJim Jagielski } 685*b1cdbd2cSJim Jagielski 686*b1cdbd2cSJim Jagielski return \@removed_lines; 687*b1cdbd2cSJim Jagielski} 688*b1cdbd2cSJim Jagielski 689*b1cdbd2cSJim Jagielski########################################################## 690*b1cdbd2cSJim Jagielski# If this is an installation set without language packs 691*b1cdbd2cSJim Jagielski# the language pack module can be removed 692*b1cdbd2cSJim Jagielski########################################################## 693*b1cdbd2cSJim Jagielski 694*b1cdbd2cSJim Jagielskisub remove_languagepack_from_xmlfile 695*b1cdbd2cSJim Jagielski{ 696*b1cdbd2cSJim Jagielski my ($xmlfile) = @_; 697*b1cdbd2cSJim Jagielski 698*b1cdbd2cSJim Jagielski # Component begins with "<component selected="true" name='module_languagepacks' componentVersion="${PRODUCTVERSION}">" 699*b1cdbd2cSJim Jagielski # and ends with "</component>" (the second "</component>" !) 700*b1cdbd2cSJim Jagielski 701*b1cdbd2cSJim Jagielski remove_component($xmlfile, "languagepack_DEFAULT"); 702*b1cdbd2cSJim Jagielski remove_component($xmlfile, "languagepack_ONELANGUAGE"); 703*b1cdbd2cSJim Jagielski remove_component($xmlfile, "module_languagepacks"); 704*b1cdbd2cSJim Jagielski} 705*b1cdbd2cSJim Jagielski 706*b1cdbd2cSJim Jagielski########################################################## 707*b1cdbd2cSJim Jagielski# Duplicating a component 708*b1cdbd2cSJim Jagielski########################################################## 709*b1cdbd2cSJim Jagielski 710*b1cdbd2cSJim Jagielskisub duplicate_component 711*b1cdbd2cSJim Jagielski{ 712*b1cdbd2cSJim Jagielski my ( $arrayref ) = @_; 713*b1cdbd2cSJim Jagielski 714*b1cdbd2cSJim Jagielski @newarray = (); 715*b1cdbd2cSJim Jagielski 716*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$arrayref}; $i++ ) 717*b1cdbd2cSJim Jagielski { 718*b1cdbd2cSJim Jagielski push(@newarray, ${$arrayref}[$i]); 719*b1cdbd2cSJim Jagielski } 720*b1cdbd2cSJim Jagielski 721*b1cdbd2cSJim Jagielski return \@newarray; 722*b1cdbd2cSJim Jagielski} 723*b1cdbd2cSJim Jagielski 724*b1cdbd2cSJim Jagielski########################################################## 725*b1cdbd2cSJim Jagielski# Including a component into the xml file 726*b1cdbd2cSJim Jagielski# at a specified line 727*b1cdbd2cSJim Jagielski########################################################## 728*b1cdbd2cSJim Jagielski 729*b1cdbd2cSJim Jagielskisub include_component_at_specific_line 730*b1cdbd2cSJim Jagielski{ 731*b1cdbd2cSJim Jagielski my ($xmlfile, $unit, $line) = @_; 732*b1cdbd2cSJim Jagielski 733*b1cdbd2cSJim Jagielski splice(@{$xmlfile},$line, 0, @{$unit}); 734*b1cdbd2cSJim Jagielski} 735*b1cdbd2cSJim Jagielski 736*b1cdbd2cSJim Jagielski########################################################## 737*b1cdbd2cSJim Jagielski# Font packages do not exist for all languages. 738*b1cdbd2cSJim Jagielski########################################################## 739*b1cdbd2cSJim Jagielski 740*b1cdbd2cSJim Jagielskisub remove_font_package_from_unit 741*b1cdbd2cSJim Jagielski{ 742*b1cdbd2cSJim Jagielski my ( $unitcopy, $onelanguage ) = @_; 743*b1cdbd2cSJim Jagielski 744*b1cdbd2cSJim Jagielski my $searchstring = "-fonts"; 745*b1cdbd2cSJim Jagielski 746*b1cdbd2cSJim Jagielski my $packagestring = ""; 747*b1cdbd2cSJim Jagielski my $namestring = ""; 748*b1cdbd2cSJim Jagielski 749*b1cdbd2cSJim Jagielski if ( $installer::globals::issolarispkgbuild ) 750*b1cdbd2cSJim Jagielski { 751*b1cdbd2cSJim Jagielski $packagestring = "\<pkgunit"; 752*b1cdbd2cSJim Jagielski $namestring = "pkgName"; 753*b1cdbd2cSJim Jagielski } 754*b1cdbd2cSJim Jagielski elsif ( $installer::globals::islinuxrpmbuild ) 755*b1cdbd2cSJim Jagielski { 756*b1cdbd2cSJim Jagielski $packagestring = "\<rpmunit"; 757*b1cdbd2cSJim Jagielski $namestring = "rpmUniqueName"; 758*b1cdbd2cSJim Jagielski } 759*b1cdbd2cSJim Jagielski 760*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$unitcopy}; $i++ ) 761*b1cdbd2cSJim Jagielski { 762*b1cdbd2cSJim Jagielski if ( ${$unitcopy}[$i] =~ /^\s*\Q$packagestring\E/ ) 763*b1cdbd2cSJim Jagielski { 764*b1cdbd2cSJim Jagielski # this is a package, but is it the correct one? 765*b1cdbd2cSJim Jagielski 766*b1cdbd2cSJim Jagielski my $do_delete = 0; 767*b1cdbd2cSJim Jagielski my $linecounter = 1; 768*b1cdbd2cSJim Jagielski my $startline = $i+1; 769*b1cdbd2cSJim Jagielski my $line = ${$unitcopy}[$startline]; 770*b1cdbd2cSJim Jagielski if (($line =~ /^\s*\Q$namestring\E\s*\=/) && ($line =~ /\Q$searchstring\E/)) { $do_delete = 1; } 771*b1cdbd2cSJim Jagielski 772*b1cdbd2cSJim Jagielski my $endcounter = 0; 773*b1cdbd2cSJim Jagielski 774*b1cdbd2cSJim Jagielski while ((!( $line =~ /\/\>/ )) && ( $startline <= $#{$unitcopy} )) 775*b1cdbd2cSJim Jagielski { 776*b1cdbd2cSJim Jagielski $linecounter++; 777*b1cdbd2cSJim Jagielski $startline++; 778*b1cdbd2cSJim Jagielski $line = ${$unitcopy}[$startline]; 779*b1cdbd2cSJim Jagielski if (($line =~ /^\s*\Q$namestring\E\s*\=/) && ($line =~ /\Q$searchstring\E/)) { $do_delete = 1; } 780*b1cdbd2cSJim Jagielski } 781*b1cdbd2cSJim Jagielski 782*b1cdbd2cSJim Jagielski $linecounter = $linecounter + 1; 783*b1cdbd2cSJim Jagielski 784*b1cdbd2cSJim Jagielski if ( $do_delete ) 785*b1cdbd2cSJim Jagielski { 786*b1cdbd2cSJim Jagielski splice(@{$unitcopy},$i, $linecounter); # removing $linecounter lines, beginning in line $i 787*b1cdbd2cSJim Jagielski last; 788*b1cdbd2cSJim Jagielski } 789*b1cdbd2cSJim Jagielski } 790*b1cdbd2cSJim Jagielski } 791*b1cdbd2cSJim Jagielski} 792*b1cdbd2cSJim Jagielski 793*b1cdbd2cSJim Jagielski########################################################## 794*b1cdbd2cSJim Jagielski# If this is an installation set with language packs, 795*b1cdbd2cSJim Jagielski# modules for each language pack have to be created 796*b1cdbd2cSJim Jagielski# dynamically 797*b1cdbd2cSJim Jagielski########################################################## 798*b1cdbd2cSJim Jagielski 799*b1cdbd2cSJim Jagielskisub duplicate_languagepack_in_xmlfile 800*b1cdbd2cSJim Jagielski{ 801*b1cdbd2cSJim Jagielski my ($xmlfile, $languagesarrayref) = @_; 802*b1cdbd2cSJim Jagielski 803*b1cdbd2cSJim Jagielski my $unit = remove_component($xmlfile, "languagepack_ONELANGUAGE"); 804*b1cdbd2cSJim Jagielski my $startline = find_component_line($xmlfile, "module_languagepacks"); 805*b1cdbd2cSJim Jagielski my $infoline = ""; 806*b1cdbd2cSJim Jagielski $startline = $startline + 1; 807*b1cdbd2cSJim Jagielski 808*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$languagesarrayref}; $i++ ) 809*b1cdbd2cSJim Jagielski { 810*b1cdbd2cSJim Jagielski my $onelanguage = ${$languagesarrayref}[$i]; 811*b1cdbd2cSJim Jagielski my $unitcopy = duplicate_component($unit); 812*b1cdbd2cSJim Jagielski 813*b1cdbd2cSJim Jagielski # replacing string ONELANGUAGE in the unit copy 814*b1cdbd2cSJim Jagielski for ( my $j = 0; $j <= $#{$unitcopy}; $j++ ) { ${$unitcopy}[$j] =~ s/ONELANGUAGE/$onelanguage/g; } 815*b1cdbd2cSJim Jagielski 816*b1cdbd2cSJim Jagielski # including the unitcopy into the xml file 817*b1cdbd2cSJim Jagielski include_component_at_specific_line($xmlfile, $unitcopy, $startline); 818*b1cdbd2cSJim Jagielski $startline = $startline + $#{$unitcopy} + 1; 819*b1cdbd2cSJim Jagielski } 820*b1cdbd2cSJim Jagielski 821*b1cdbd2cSJim Jagielski # adding the default language as language pack, too 822*b1cdbd2cSJim Jagielski $unit = remove_component($xmlfile, "languagepack_DEFAULT"); 823*b1cdbd2cSJim Jagielski $startline = find_component_line($xmlfile, "module_languagepacks"); 824*b1cdbd2cSJim Jagielski $startline = $startline + 1; 825*b1cdbd2cSJim Jagielski 826*b1cdbd2cSJim Jagielski $onelanguage = ${$languagesarrayref}[0]; 827*b1cdbd2cSJim Jagielski $unitcopy = duplicate_component($unit); 828*b1cdbd2cSJim Jagielski 829*b1cdbd2cSJim Jagielski # replacing string DEFAULT in the unit copy 830*b1cdbd2cSJim Jagielski for ( my $j = 0; $j <= $#{$unitcopy}; $j++ ) { ${$unitcopy}[$j] =~ s/DEFAULT/$onelanguage/g; } 831*b1cdbd2cSJim Jagielski 832*b1cdbd2cSJim Jagielski # including the unitcopy into the xml file 833*b1cdbd2cSJim Jagielski include_component_at_specific_line($xmlfile, $unitcopy, $startline); 834*b1cdbd2cSJim Jagielski $startline = $startline + $#{$unitcopy} + 1; 835*b1cdbd2cSJim Jagielski} 836*b1cdbd2cSJim Jagielski 837*b1cdbd2cSJim Jagielski####################################################### 838*b1cdbd2cSJim Jagielski# Removing empty packages from xml file. The names 839*b1cdbd2cSJim Jagielski# are stored in @installer::globals::emptypackages 840*b1cdbd2cSJim Jagielski####################################################### 841*b1cdbd2cSJim Jagielski 842*b1cdbd2cSJim Jagielskisub remove_empty_packages_in_xmlfile 843*b1cdbd2cSJim Jagielski{ 844*b1cdbd2cSJim Jagielski my ($xmlfile) = @_; 845*b1cdbd2cSJim Jagielski 846*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#installer::globals::emptypackages; $i++ ) 847*b1cdbd2cSJim Jagielski { 848*b1cdbd2cSJim Jagielski my $packagename = $installer::globals::emptypackages[$i]; 849*b1cdbd2cSJim Jagielski my $infoline = "Try to remove package $packagename from xml file.\n"; 850*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 851*b1cdbd2cSJim Jagielski remove_package($xmlfile, $packagename); 852*b1cdbd2cSJim Jagielski } 853*b1cdbd2cSJim Jagielski} 854*b1cdbd2cSJim Jagielski 855*b1cdbd2cSJim Jagielski####################################################### 856*b1cdbd2cSJim Jagielski# Preparing the language packs in the xml file 857*b1cdbd2cSJim Jagielski####################################################### 858*b1cdbd2cSJim Jagielski 859*b1cdbd2cSJim Jagielskisub prepare_language_pack_in_xmlfile 860*b1cdbd2cSJim Jagielski{ 861*b1cdbd2cSJim Jagielski my ($xmlfile, $languagesarrayref) = @_; 862*b1cdbd2cSJim Jagielski 863*b1cdbd2cSJim Jagielski # if ( ! $installer::globals::is_unix_multi ) 864*b1cdbd2cSJim Jagielski # { 865*b1cdbd2cSJim Jagielski # remove_languagepack_from_xmlfile($xmlfile); 866*b1cdbd2cSJim Jagielski # } 867*b1cdbd2cSJim Jagielski # else 868*b1cdbd2cSJim Jagielski # { 869*b1cdbd2cSJim Jagielski duplicate_languagepack_in_xmlfile($xmlfile, $languagesarrayref); 870*b1cdbd2cSJim Jagielski # } 871*b1cdbd2cSJim Jagielski 872*b1cdbd2cSJim Jagielski} 873*b1cdbd2cSJim Jagielski 874*b1cdbd2cSJim Jagielski####################################################### 875*b1cdbd2cSJim Jagielski# Returning a rpm unit from a xml file 876*b1cdbd2cSJim Jagielski####################################################### 877*b1cdbd2cSJim Jagielski 878*b1cdbd2cSJim Jagielskisub get_rpm_unit_from_xmlfile 879*b1cdbd2cSJim Jagielski{ 880*b1cdbd2cSJim Jagielski my ($rpmname, $xmlfile) = @_; 881*b1cdbd2cSJim Jagielski 882*b1cdbd2cSJim Jagielski my $infoline = "Searching for $rpmname in xml file.\n"; 883*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 884*b1cdbd2cSJim Jagielski 885*b1cdbd2cSJim Jagielski my @rpmunit = (); 886*b1cdbd2cSJim Jagielski my $includeline = 0; 887*b1cdbd2cSJim Jagielski my $record = 0; 888*b1cdbd2cSJim Jagielski my $foundrpm = 0; 889*b1cdbd2cSJim Jagielski 890*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$xmlfile}; $i++ ) 891*b1cdbd2cSJim Jagielski { 892*b1cdbd2cSJim Jagielski my $oneline = ${$xmlfile}[$i]; 893*b1cdbd2cSJim Jagielski 894*b1cdbd2cSJim Jagielski if ( $oneline =~ /^\s*\<rpmunit/ ) { $record = 1; } 895*b1cdbd2cSJim Jagielski 896*b1cdbd2cSJim Jagielski if ( $record ) { push(@rpmunit, $oneline); } 897*b1cdbd2cSJim Jagielski 898*b1cdbd2cSJim Jagielski if ( $oneline =~ /^\s*rpmUniqueName\s*=\s*\"\Q$rpmname\E\"\s*$/ ) { $foundrpm = 1; } 899*b1cdbd2cSJim Jagielski 900*b1cdbd2cSJim Jagielski if (( $record ) && ( $oneline =~ /\/\>\s*$/ )) { $record = 0; } 901*b1cdbd2cSJim Jagielski 902*b1cdbd2cSJim Jagielski if (( ! $foundrpm ) && ( ! $record )) { @rpmunit = (); } 903*b1cdbd2cSJim Jagielski 904*b1cdbd2cSJim Jagielski if (( $foundrpm ) && ( ! $record )) { $includeline = $i + 1; } 905*b1cdbd2cSJim Jagielski 906*b1cdbd2cSJim Jagielski if (( $foundrpm ) && ( ! $record )) { last; } 907*b1cdbd2cSJim Jagielski } 908*b1cdbd2cSJim Jagielski 909*b1cdbd2cSJim Jagielski if ( ! $foundrpm ) { installer::exiter::exit_program("ERROR: Did not find rpmunit $rpmname in xml file!", "get_rpm_unit_from_xmlfile"); } 910*b1cdbd2cSJim Jagielski 911*b1cdbd2cSJim Jagielski $infoline = "Found $rpmname in xml file. Returning block lines: $#rpmunit + 1. Includeline: $includeline \n"; 912*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 913*b1cdbd2cSJim Jagielski 914*b1cdbd2cSJim Jagielski return (\@rpmunit, $includeline); 915*b1cdbd2cSJim Jagielski} 916*b1cdbd2cSJim Jagielski 917*b1cdbd2cSJim Jagielski####################################################### 918*b1cdbd2cSJim Jagielski# Exchanging package names in xml file 919*b1cdbd2cSJim Jagielski####################################################### 920*b1cdbd2cSJim Jagielski 921*b1cdbd2cSJim Jagielskisub exchange_name_in_rpmunit 922*b1cdbd2cSJim Jagielski{ 923*b1cdbd2cSJim Jagielski my ($rpmunit, $oldpackagename, $newpackagename) = @_; 924*b1cdbd2cSJim Jagielski 925*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$rpmunit}; $i++ ) 926*b1cdbd2cSJim Jagielski { 927*b1cdbd2cSJim Jagielski ${$rpmunit}[$i] =~ s/$oldpackagename/$newpackagename/; 928*b1cdbd2cSJim Jagielski } 929*b1cdbd2cSJim Jagielski} 930*b1cdbd2cSJim Jagielski 931*b1cdbd2cSJim Jagielski####################################################### 932*b1cdbd2cSJim Jagielski# Preparing link RPMs in the xml file 933*b1cdbd2cSJim Jagielski####################################################### 934*b1cdbd2cSJim Jagielski 935*b1cdbd2cSJim Jagielskisub prepare_linkrpm_in_xmlfile 936*b1cdbd2cSJim Jagielski{ 937*b1cdbd2cSJim Jagielski my ($xmlfile, $rpmlist) = @_; 938*b1cdbd2cSJim Jagielski 939*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$rpmlist}; $i++ ) 940*b1cdbd2cSJim Jagielski { 941*b1cdbd2cSJim Jagielski my $oldpackagename = ""; 942*b1cdbd2cSJim Jagielski my $newpackagename = ""; 943*b1cdbd2cSJim Jagielski 944*b1cdbd2cSJim Jagielski my $rpmline = ${$rpmlist}[$i]; 945*b1cdbd2cSJim Jagielski 946*b1cdbd2cSJim Jagielski my $infoline = "Preparing link/patch RPM: $rpmline\n"; 947*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 948*b1cdbd2cSJim Jagielski 949*b1cdbd2cSJim Jagielski if ( $rpmline =~ /^\s*(\S.*?\S)\s+(\S.*?\S)\s*$/ ) 950*b1cdbd2cSJim Jagielski { 951*b1cdbd2cSJim Jagielski $oldpackagename = $1; 952*b1cdbd2cSJim Jagielski $newpackagename = $2; 953*b1cdbd2cSJim Jagielski } 954*b1cdbd2cSJim Jagielski 955*b1cdbd2cSJim Jagielski my ($rpmunit, $includeline) = get_rpm_unit_from_xmlfile($oldpackagename, $xmlfile); 956*b1cdbd2cSJim Jagielski exchange_name_in_rpmunit($rpmunit, $oldpackagename, $newpackagename); 957*b1cdbd2cSJim Jagielski include_component_at_specific_line($xmlfile, $rpmunit, $includeline); 958*b1cdbd2cSJim Jagielski } 959*b1cdbd2cSJim Jagielski} 960*b1cdbd2cSJim Jagielski 961*b1cdbd2cSJim Jagielski####################################################################### 962*b1cdbd2cSJim Jagielski# Removing w4w filter module from xml file for Solaris x86 and Linux 963*b1cdbd2cSJim Jagielski####################################################################### 964*b1cdbd2cSJim Jagielski 965*b1cdbd2cSJim Jagielskisub remove_w4w_from_xmlfile 966*b1cdbd2cSJim Jagielski{ 967*b1cdbd2cSJim Jagielski my ($xmlfile) = @_; 968*b1cdbd2cSJim Jagielski 969*b1cdbd2cSJim Jagielski # Component begins with "<component selected='true' name='gid_Module_Prg_Wrt_Flt_W4w' componentVersion="8">" 970*b1cdbd2cSJim Jagielski # and ends with "</component>" 971*b1cdbd2cSJim Jagielski 972*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$xmlfile}; $i++ ) 973*b1cdbd2cSJim Jagielski { 974*b1cdbd2cSJim Jagielski if ( ${$xmlfile}[$i] =~ /name\s*\=\'\s*gid_Module_Prg_Wrt_Flt_W4w/ ) 975*b1cdbd2cSJim Jagielski { 976*b1cdbd2cSJim Jagielski # Counting the lines till "</component>" 977*b1cdbd2cSJim Jagielski 978*b1cdbd2cSJim Jagielski my $linecounter = 1; 979*b1cdbd2cSJim Jagielski my $startline = $i+1; 980*b1cdbd2cSJim Jagielski my $line = ${$xmlfile}[$startline]; 981*b1cdbd2cSJim Jagielski 982*b1cdbd2cSJim Jagielski while ((!( $line =~ /^\s*\<\/component\>\s*$/ )) && ( $startline <= $#{$xmlfile} )) 983*b1cdbd2cSJim Jagielski { 984*b1cdbd2cSJim Jagielski $linecounter++; 985*b1cdbd2cSJim Jagielski $startline++; 986*b1cdbd2cSJim Jagielski $line = ${$xmlfile}[$startline]; 987*b1cdbd2cSJim Jagielski } 988*b1cdbd2cSJim Jagielski 989*b1cdbd2cSJim Jagielski $linecounter = $linecounter + 2; # last line and following empty line 990*b1cdbd2cSJim Jagielski 991*b1cdbd2cSJim Jagielski splice(@{$xmlfile},$i, $linecounter); # removing $linecounter lines, beginning in line $i 992*b1cdbd2cSJim Jagielski last; 993*b1cdbd2cSJim Jagielski } 994*b1cdbd2cSJim Jagielski } 995*b1cdbd2cSJim Jagielski} 996*b1cdbd2cSJim Jagielski 997*b1cdbd2cSJim Jagielski####################################################################### 998*b1cdbd2cSJim Jagielski# Removing module from xml file, if not defined in scp 999*b1cdbd2cSJim Jagielski####################################################################### 1000*b1cdbd2cSJim Jagielski 1001*b1cdbd2cSJim Jagielskisub remove_scpgid_from_xmlfile 1002*b1cdbd2cSJim Jagielski{ 1003*b1cdbd2cSJim Jagielski my ($xmlfile, $scpgid) = @_; 1004*b1cdbd2cSJim Jagielski 1005*b1cdbd2cSJim Jagielski # Component begins with "<component selected='true' name='$scpgid' componentVersion="8">" 1006*b1cdbd2cSJim Jagielski # and ends with "</component>" 1007*b1cdbd2cSJim Jagielski 1008*b1cdbd2cSJim Jagielski my $successfully_removed = 0; 1009*b1cdbd2cSJim Jagielski 1010*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$xmlfile}; $i++ ) 1011*b1cdbd2cSJim Jagielski { 1012*b1cdbd2cSJim Jagielski if ( ${$xmlfile}[$i] =~ /name\s*\=\'\s*\Q$scpgid\E/ ) 1013*b1cdbd2cSJim Jagielski { 1014*b1cdbd2cSJim Jagielski # Counting the lines till "</component>" 1015*b1cdbd2cSJim Jagielski 1016*b1cdbd2cSJim Jagielski my $linecounter = 1; 1017*b1cdbd2cSJim Jagielski my $startline = $i+1; 1018*b1cdbd2cSJim Jagielski my $line = ${$xmlfile}[$startline]; 1019*b1cdbd2cSJim Jagielski 1020*b1cdbd2cSJim Jagielski while ((!( $line =~ /^\s*\<\/component\>\s*$/ )) && ( $startline <= $#{$xmlfile} )) 1021*b1cdbd2cSJim Jagielski { 1022*b1cdbd2cSJim Jagielski $linecounter++; 1023*b1cdbd2cSJim Jagielski $startline++; 1024*b1cdbd2cSJim Jagielski $line = ${$xmlfile}[$startline]; 1025*b1cdbd2cSJim Jagielski } 1026*b1cdbd2cSJim Jagielski 1027*b1cdbd2cSJim Jagielski $linecounter = $linecounter + 2; # last line and following empty line 1028*b1cdbd2cSJim Jagielski 1029*b1cdbd2cSJim Jagielski splice(@{$xmlfile},$i, $linecounter); # removing $linecounter lines, beginning in line $i 1030*b1cdbd2cSJim Jagielski $successfully_removed = 1; 1031*b1cdbd2cSJim Jagielski last; 1032*b1cdbd2cSJim Jagielski } 1033*b1cdbd2cSJim Jagielski } 1034*b1cdbd2cSJim Jagielski 1035*b1cdbd2cSJim Jagielski my $infoline = ""; 1036*b1cdbd2cSJim Jagielski if ($successfully_removed) 1037*b1cdbd2cSJim Jagielski { 1038*b1cdbd2cSJim Jagielski $infoline = "Module $scpgid successfully removed from xml file.\n"; 1039*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1040*b1cdbd2cSJim Jagielski } 1041*b1cdbd2cSJim Jagielski else 1042*b1cdbd2cSJim Jagielski { 1043*b1cdbd2cSJim Jagielski $infoline = "Module $scpgid not found in xml file (no problem).\n"; 1044*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1045*b1cdbd2cSJim Jagielski } 1046*b1cdbd2cSJim Jagielski} 1047*b1cdbd2cSJim Jagielski 1048*b1cdbd2cSJim Jagielski####################################################################### 1049*b1cdbd2cSJim Jagielski# Special mechanism for removing modules for xml file, if they are 1050*b1cdbd2cSJim Jagielski# not defined in scp (introduced for onlineupdate module). 1051*b1cdbd2cSJim Jagielski####################################################################### 1052*b1cdbd2cSJim Jagielski 1053*b1cdbd2cSJim Jagielskisub remove_module_if_not_defined 1054*b1cdbd2cSJim Jagielski{ 1055*b1cdbd2cSJim Jagielski my ($xmlfile, $modulesarrayref, $scpgid) = @_; 1056*b1cdbd2cSJim Jagielski 1057*b1cdbd2cSJim Jagielski my $infoline = "Checking existence of $scpgid in scp definition\n"; 1058*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1059*b1cdbd2cSJim Jagielski 1060*b1cdbd2cSJim Jagielski my $found = 0; 1061*b1cdbd2cSJim Jagielski 1062*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$modulesarrayref}; $i++ ) 1063*b1cdbd2cSJim Jagielski { 1064*b1cdbd2cSJim Jagielski my $onemodule = ${$modulesarrayref}[$i]; 1065*b1cdbd2cSJim Jagielski if ( $onemodule->{'gid'} eq $scpgid ) { $found = 1; } 1066*b1cdbd2cSJim Jagielski if ( $found ) { last; } 1067*b1cdbd2cSJim Jagielski } 1068*b1cdbd2cSJim Jagielski 1069*b1cdbd2cSJim Jagielski if ( ! $found ) 1070*b1cdbd2cSJim Jagielski { 1071*b1cdbd2cSJim Jagielski $infoline = "Module $scpgid not found -> Removing from xml file.\n"; 1072*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1073*b1cdbd2cSJim Jagielski remove_scpgid_from_xmlfile($xmlfile, $scpgid); 1074*b1cdbd2cSJim Jagielski } 1075*b1cdbd2cSJim Jagielski} 1076*b1cdbd2cSJim Jagielski 1077*b1cdbd2cSJim Jagielski########################################################### 1078*b1cdbd2cSJim Jagielski# Preparing the package subdirectory 1079*b1cdbd2cSJim Jagielski########################################################### 1080*b1cdbd2cSJim Jagielski 1081*b1cdbd2cSJim Jagielskisub create_empty_packages 1082*b1cdbd2cSJim Jagielski{ 1083*b1cdbd2cSJim Jagielski my ( $xmlfile ) = @_; 1084*b1cdbd2cSJim Jagielski 1085*b1cdbd2cSJim Jagielski if ( $installer::globals::issolarispkgbuild ) 1086*b1cdbd2cSJim Jagielski { 1087*b1cdbd2cSJim Jagielski my $path = ""; 1088*b1cdbd2cSJim Jagielski 1089*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$xmlfile}; $i++ ) 1090*b1cdbd2cSJim Jagielski { 1091*b1cdbd2cSJim Jagielski if ( ${$xmlfile}[$i] =~ /pkgRelativePath\s*\=\s*\'(.*?)\'\s*$/ ) 1092*b1cdbd2cSJim Jagielski { 1093*b1cdbd2cSJim Jagielski $path = $1; 1094*b1cdbd2cSJim Jagielski installer::systemactions::create_directory_structure($path); 1095*b1cdbd2cSJim Jagielski last; # only creating one path 1096*b1cdbd2cSJim Jagielski } 1097*b1cdbd2cSJim Jagielski } 1098*b1cdbd2cSJim Jagielski 1099*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$xmlfile}; $i++ ) 1100*b1cdbd2cSJim Jagielski { 1101*b1cdbd2cSJim Jagielski if ( ${$xmlfile}[$i] =~ /pkgName\s*\=\s*\'(.*?)\'\s*$/ ) 1102*b1cdbd2cSJim Jagielski { 1103*b1cdbd2cSJim Jagielski my $pkgname = $1; 1104*b1cdbd2cSJim Jagielski if ( $path ne "" ) { $pkgname = $path . $installer::globals::separator . $pkgname; } 1105*b1cdbd2cSJim Jagielski installer::systemactions::create_directory_structure($pkgname); 1106*b1cdbd2cSJim Jagielski } 1107*b1cdbd2cSJim Jagielski } 1108*b1cdbd2cSJim Jagielski } 1109*b1cdbd2cSJim Jagielski 1110*b1cdbd2cSJim Jagielski # "-novalidate" does not work for Linux RPMs 1111*b1cdbd2cSJim Jagielski 1112*b1cdbd2cSJim Jagielski if ( $installer::globals::islinuxrpmbuild ) 1113*b1cdbd2cSJim Jagielski { 1114*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$xmlfile}; $i++ ) 1115*b1cdbd2cSJim Jagielski { 1116*b1cdbd2cSJim Jagielski if ( ${$xmlfile}[$i] =~ /rpmPath\s*\=\s*\"(.*?)\"\s*$/ ) 1117*b1cdbd2cSJim Jagielski { 1118*b1cdbd2cSJim Jagielski my $rpmpath = $1; 1119*b1cdbd2cSJim Jagielski my $path = ""; 1120*b1cdbd2cSJim Jagielski 1121*b1cdbd2cSJim Jagielski if ( $rpmpath =~ /^\s*(.*)\/(.*?)\s*$/ ) 1122*b1cdbd2cSJim Jagielski { 1123*b1cdbd2cSJim Jagielski $path = $1; 1124*b1cdbd2cSJim Jagielski } 1125*b1cdbd2cSJim Jagielski 1126*b1cdbd2cSJim Jagielski if ( $path ne "" ) { installer::systemactions::create_directory_structure($path); } 1127*b1cdbd2cSJim Jagielski 1128*b1cdbd2cSJim Jagielski my $systemcall = "touch $rpmpath"; # creating empty rpm 1129*b1cdbd2cSJim Jagielski system($systemcall); 1130*b1cdbd2cSJim Jagielski } 1131*b1cdbd2cSJim Jagielski } 1132*b1cdbd2cSJim Jagielski } 1133*b1cdbd2cSJim Jagielski} 1134*b1cdbd2cSJim Jagielski 1135*b1cdbd2cSJim Jagielski########################################################### 1136*b1cdbd2cSJim Jagielski# Reading the archive file name from the xml file 1137*b1cdbd2cSJim Jagielski########################################################### 1138*b1cdbd2cSJim Jagielski 1139*b1cdbd2cSJim Jagielskisub get_archivefilename 1140*b1cdbd2cSJim Jagielski{ 1141*b1cdbd2cSJim Jagielski my ( $xmlfile ) = @_; 1142*b1cdbd2cSJim Jagielski 1143*b1cdbd2cSJim Jagielski my $archivefilename = ""; 1144*b1cdbd2cSJim Jagielski 1145*b1cdbd2cSJim Jagielski for ( my $j = 0; $j <= $#{$xmlfile}; $j++ ) 1146*b1cdbd2cSJim Jagielski { 1147*b1cdbd2cSJim Jagielski if ( ${$xmlfile}[$j] =~ /archiveFileName\s*=\s*\'(.*?)\'/ ) 1148*b1cdbd2cSJim Jagielski { 1149*b1cdbd2cSJim Jagielski $archivefilename = $1; 1150*b1cdbd2cSJim Jagielski last; 1151*b1cdbd2cSJim Jagielski } 1152*b1cdbd2cSJim Jagielski } 1153*b1cdbd2cSJim Jagielski 1154*b1cdbd2cSJim Jagielski return $archivefilename; 1155*b1cdbd2cSJim Jagielski} 1156*b1cdbd2cSJim Jagielski 1157*b1cdbd2cSJim Jagielski####################################################### 1158*b1cdbd2cSJim Jagielski# Copying the loader locally 1159*b1cdbd2cSJim Jagielski####################################################### 1160*b1cdbd2cSJim Jagielski 1161*b1cdbd2cSJim Jagielskisub copy_setup_locally 1162*b1cdbd2cSJim Jagielski{ 1163*b1cdbd2cSJim Jagielski my ($includepatharrayref, $loadername, $newname) = @_; 1164*b1cdbd2cSJim Jagielski 1165*b1cdbd2cSJim Jagielski my $loadernameref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$loadername, $includepatharrayref, 0); 1166*b1cdbd2cSJim Jagielski 1167*b1cdbd2cSJim Jagielski if ($$loadernameref eq "") { installer::exiter::exit_program("ERROR: Could not find Java loader $loadername!", "copy_setup_locally"); } 1168*b1cdbd2cSJim Jagielski 1169*b1cdbd2cSJim Jagielski installer::systemactions::copy_one_file($$loadernameref, $newname); 1170*b1cdbd2cSJim Jagielski my $localcall = "chmod 775 $newname \>\/dev\/null 2\>\&1"; 1171*b1cdbd2cSJim Jagielski system($localcall); 1172*b1cdbd2cSJim Jagielski} 1173*b1cdbd2cSJim Jagielski 1174*b1cdbd2cSJim Jagielski 1175*b1cdbd2cSJim Jagielski####################################################### 1176*b1cdbd2cSJim Jagielski# Copying the loader into the installation set 1177*b1cdbd2cSJim Jagielski####################################################### 1178*b1cdbd2cSJim Jagielski 1179*b1cdbd2cSJim Jagielskisub put_loader_into_installset 1180*b1cdbd2cSJim Jagielski{ 1181*b1cdbd2cSJim Jagielski my ($installdir, $filename) = @_; 1182*b1cdbd2cSJim Jagielski 1183*b1cdbd2cSJim Jagielski my $installname = $installdir . $installer::globals::separator . $filename; 1184*b1cdbd2cSJim Jagielski 1185*b1cdbd2cSJim Jagielski installer::systemactions::copy_one_file($filename, $installname); 1186*b1cdbd2cSJim Jagielski 1187*b1cdbd2cSJim Jagielski my $localcall = "chmod 775 $installname \>\/dev\/null 2\>\&1"; 1188*b1cdbd2cSJim Jagielski system($localcall); 1189*b1cdbd2cSJim Jagielski} 1190*b1cdbd2cSJim Jagielski 1191*b1cdbd2cSJim Jagielski################################################################# 1192*b1cdbd2cSJim Jagielski# Setting for Solaris the package names in the Java translation 1193*b1cdbd2cSJim Jagielski# file. The name is used for the 1194*b1cdbd2cSJim Jagielski# This name is displayed tools like prodreg. 1195*b1cdbd2cSJim Jagielski# Unfortunately this name in the component is also used 1196*b1cdbd2cSJim Jagielski# in the translation template file for the module name 1197*b1cdbd2cSJim Jagielski# and module description translations. 1198*b1cdbd2cSJim Jagielski################################################################# 1199*b1cdbd2cSJim Jagielski 1200*b1cdbd2cSJim Jagielskisub replace_component_name_in_java_file 1201*b1cdbd2cSJim Jagielski{ 1202*b1cdbd2cSJim Jagielski my ($alljavafiles, $oldname, $newname) = @_; 1203*b1cdbd2cSJim Jagielski 1204*b1cdbd2cSJim Jagielski # The new name must not contain white spaces 1205*b1cdbd2cSJim Jagielski 1206*b1cdbd2cSJim Jagielski $newname =~ s/ /\_/g; 1207*b1cdbd2cSJim Jagielski 1208*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$alljavafiles}; $i++ ) 1209*b1cdbd2cSJim Jagielski { 1210*b1cdbd2cSJim Jagielski my $javafilename = ${$alljavafiles}[$i]; 1211*b1cdbd2cSJim Jagielski my $javafile = installer::files::read_file($javafilename); 1212*b1cdbd2cSJim Jagielski 1213*b1cdbd2cSJim Jagielski my $oldstring = "ComponentDescription-" . $oldname; 1214*b1cdbd2cSJim Jagielski my $newstring = "ComponentDescription-" . $newname; 1215*b1cdbd2cSJim Jagielski 1216*b1cdbd2cSJim Jagielski for ( my $j = 0; $j <= $#{$javafile}; $j++ ) { ${$javafile}[$j] =~ s/\b$oldstring\b/$newstring/; } 1217*b1cdbd2cSJim Jagielski 1218*b1cdbd2cSJim Jagielski $oldstring = $oldname . "-install-DisplayName"; 1219*b1cdbd2cSJim Jagielski $newstring = $newname . "-install-DisplayName"; 1220*b1cdbd2cSJim Jagielski 1221*b1cdbd2cSJim Jagielski for ( my $j = 0; $j <= $#{$javafile}; $j++ ) { ${$javafile}[$j] =~ s/\b$oldstring\b/$newstring/; } 1222*b1cdbd2cSJim Jagielski 1223*b1cdbd2cSJim Jagielski $oldstring = $oldname . "-uninstall-DisplayName"; 1224*b1cdbd2cSJim Jagielski $newstring = $newname . "-uninstall-DisplayName"; 1225*b1cdbd2cSJim Jagielski 1226*b1cdbd2cSJim Jagielski for ( my $j = 0; $j <= $#{$javafile}; $j++ ) { ${$javafile}[$j] =~ s/\b$oldstring\b/$newstring/; } 1227*b1cdbd2cSJim Jagielski 1228*b1cdbd2cSJim Jagielski installer::files::save_file($javafilename, $javafile); 1229*b1cdbd2cSJim Jagielski $infoline = "Changes in Java file: $javafilename : $oldname \-\> $newname\n"; 1230*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1231*b1cdbd2cSJim Jagielski } 1232*b1cdbd2cSJim Jagielski} 1233*b1cdbd2cSJim Jagielski 1234*b1cdbd2cSJim Jagielski################################################################# 1235*b1cdbd2cSJim Jagielski# Some module names are not defined in the scp project. 1236*b1cdbd2cSJim Jagielski# The names for this modules are searched in the base Java 1237*b1cdbd2cSJim Jagielski# translation file. 1238*b1cdbd2cSJim Jagielski################################################################# 1239*b1cdbd2cSJim Jagielski 1240*b1cdbd2cSJim Jagielskisub get_module_name_from_basejavafile 1241*b1cdbd2cSJim Jagielski{ 1242*b1cdbd2cSJim Jagielski my ($componentname, $javatemplateorigfile, $ulffile) = @_; 1243*b1cdbd2cSJim Jagielski 1244*b1cdbd2cSJim Jagielski my $searchname = $componentname . "-install-DisplayName"; 1245*b1cdbd2cSJim Jagielski my $modulename = ""; 1246*b1cdbd2cSJim Jagielski my $replacename = ""; 1247*b1cdbd2cSJim Jagielski 1248*b1cdbd2cSJim Jagielski # line content: { "coremodule-install-DisplayName", "OOO_INSTALLSDK_117" }, 1249*b1cdbd2cSJim Jagielski 1250*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$javatemplateorigfile}; $i++ ) 1251*b1cdbd2cSJim Jagielski { 1252*b1cdbd2cSJim Jagielski if ( ${$javatemplateorigfile}[$i] =~ /\"\s*\Q$searchname\E\s*\"\s*\,\s*\"\s*(.*?)\s*\"\s*\}\s*\,\s*$/ ) 1253*b1cdbd2cSJim Jagielski { 1254*b1cdbd2cSJim Jagielski $replacename = $1; 1255*b1cdbd2cSJim Jagielski last; 1256*b1cdbd2cSJim Jagielski } 1257*b1cdbd2cSJim Jagielski } 1258*b1cdbd2cSJim Jagielski 1259*b1cdbd2cSJim Jagielski if ( $replacename ne "" ) 1260*b1cdbd2cSJim Jagielski { 1261*b1cdbd2cSJim Jagielski my $language_block = get_language_block_from_language_file($replacename, $ulffile); 1262*b1cdbd2cSJim Jagielski $modulename = get_language_string_from_language_block($language_block, "en-US", $replacename); 1263*b1cdbd2cSJim Jagielski } 1264*b1cdbd2cSJim Jagielski 1265*b1cdbd2cSJim Jagielski return $modulename; 1266*b1cdbd2cSJim Jagielski} 1267*b1cdbd2cSJim Jagielski 1268*b1cdbd2cSJim Jagielski################################################################# 1269*b1cdbd2cSJim Jagielski# Setting for Solaris the package names in the xml file. 1270*b1cdbd2cSJim Jagielski# This name is displayed tools like prodreg. 1271*b1cdbd2cSJim Jagielski# Unfortunately this name in the component is also used 1272*b1cdbd2cSJim Jagielski# in the translation template file for the module name 1273*b1cdbd2cSJim Jagielski# and module description translations. 1274*b1cdbd2cSJim Jagielski################################################################# 1275*b1cdbd2cSJim Jagielski 1276*b1cdbd2cSJim Jagielskisub replace_component_names 1277*b1cdbd2cSJim Jagielski{ 1278*b1cdbd2cSJim Jagielski my ($xmlfile, $templatefilename, $modulesarrayref, $javatemplateorigfile, $ulffile) = @_; 1279*b1cdbd2cSJim Jagielski 1280*b1cdbd2cSJim Jagielski # path in which all java languages files are located 1281*b1cdbd2cSJim Jagielski 1282*b1cdbd2cSJim Jagielski my $javafilesdir = $templatefilename; 1283*b1cdbd2cSJim Jagielski installer::pathanalyzer::get_path_from_fullqualifiedname(\$javafilesdir); 1284*b1cdbd2cSJim Jagielski my $alljavafiles = installer::systemactions::find_file_with_file_extension("java", $javafilesdir); 1285*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$alljavafiles}; $i++ ) { ${$alljavafiles}[$i] = $javafilesdir . ${$alljavafiles}[$i]; } 1286*b1cdbd2cSJim Jagielski 1287*b1cdbd2cSJim Jagielski # analyzing the xml file 1288*b1cdbd2cSJim Jagielski 1289*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$xmlfile}; $i++ ) 1290*b1cdbd2cSJim Jagielski { 1291*b1cdbd2cSJim Jagielski my $newstring = ""; 1292*b1cdbd2cSJim Jagielski my $componentname = ""; 1293*b1cdbd2cSJim Jagielski 1294*b1cdbd2cSJim Jagielski if ( ${$xmlfile}[$i] =~ /\bcomponent\b.*\bname\s*\=\'\s*(.*?)\s*\'/ ) 1295*b1cdbd2cSJim Jagielski { 1296*b1cdbd2cSJim Jagielski $componentname = $1; 1297*b1cdbd2cSJim Jagielski 1298*b1cdbd2cSJim Jagielski # Getting module name from the scp files in $modulesarrayref 1299*b1cdbd2cSJim Jagielski 1300*b1cdbd2cSJim Jagielski my $onelanguage = "en-US"; 1301*b1cdbd2cSJim Jagielski my $gid = $componentname; 1302*b1cdbd2cSJim Jagielski my $type = "Name"; 1303*b1cdbd2cSJim Jagielski 1304*b1cdbd2cSJim Jagielski my $modulename = ""; 1305*b1cdbd2cSJim Jagielski $modulename = get_module_name_description($modulesarrayref, $onelanguage, $gid, $type); 1306*b1cdbd2cSJim Jagielski 1307*b1cdbd2cSJim Jagielski if ( $modulename eq "" ) 1308*b1cdbd2cSJim Jagielski { 1309*b1cdbd2cSJim Jagielski $infoline = "Info: Modulename for $gid not defined in modules collector. Looking in Java ulf file.\n"; 1310*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1311*b1cdbd2cSJim Jagielski } 1312*b1cdbd2cSJim Jagielski 1313*b1cdbd2cSJim Jagielski if ( $modulename eq "" ) # the modulename can also be set in the Java ulf file 1314*b1cdbd2cSJim Jagielski { 1315*b1cdbd2cSJim Jagielski $modulename = get_module_name_from_basejavafile($componentname, $javatemplateorigfile, $ulffile); 1316*b1cdbd2cSJim Jagielski } 1317*b1cdbd2cSJim Jagielski 1318*b1cdbd2cSJim Jagielski if ( $modulename ne "" ) # only do something, if the modulename was found 1319*b1cdbd2cSJim Jagielski { 1320*b1cdbd2cSJim Jagielski ${$xmlfile}[$i] =~ s/$componentname/$modulename/; 1321*b1cdbd2cSJim Jagielski 1322*b1cdbd2cSJim Jagielski $infoline = "Replacement in xml file (Solaris): $componentname \-\> $modulename\n"; 1323*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1324*b1cdbd2cSJim Jagielski 1325*b1cdbd2cSJim Jagielski # Replacement has to be done in all Java language files 1326*b1cdbd2cSJim Jagielski replace_component_name_in_java_file($alljavafiles, $componentname, $modulename); 1327*b1cdbd2cSJim Jagielski } 1328*b1cdbd2cSJim Jagielski 1329*b1cdbd2cSJim Jagielski if ( $modulename eq "" ) # the modulename can also be set in the Java ulf file 1330*b1cdbd2cSJim Jagielski { 1331*b1cdbd2cSJim Jagielski $infoline = "WARNING: No replacement in xml file for component: $componentname\n"; 1332*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1333*b1cdbd2cSJim Jagielski } 1334*b1cdbd2cSJim Jagielski } 1335*b1cdbd2cSJim Jagielski } 1336*b1cdbd2cSJim Jagielski} 1337*b1cdbd2cSJim Jagielski 1338*b1cdbd2cSJim Jagielski############################################################################# 1339*b1cdbd2cSJim Jagielski# Collecting all packages or rpms located in the installation directory 1340*b1cdbd2cSJim Jagielski############################################################################# 1341*b1cdbd2cSJim Jagielski 1342*b1cdbd2cSJim Jagielskisub get_all_packages_in_installdir 1343*b1cdbd2cSJim Jagielski{ 1344*b1cdbd2cSJim Jagielski my ($installdir, $subdir) = @_; 1345*b1cdbd2cSJim Jagielski 1346*b1cdbd2cSJim Jagielski my $infoline = ""; 1347*b1cdbd2cSJim Jagielski 1348*b1cdbd2cSJim Jagielski my @allrpms = (); # not needed for Solaris at the moment 1349*b1cdbd2cSJim Jagielski my $allrpms = \@allrpms; 1350*b1cdbd2cSJim Jagielski 1351*b1cdbd2cSJim Jagielski $installdir =~ s/\Q$installer::globals::separator\E\s*$//; 1352*b1cdbd2cSJim Jagielski my $directory = $installdir . $installer::globals::separator . $subdir; 1353*b1cdbd2cSJim Jagielski $directory =~ s/\Q$installer::globals::separator\E\s*$//; 1354*b1cdbd2cSJim Jagielski 1355*b1cdbd2cSJim Jagielski if ( $installer::globals::islinuxrpmbuild ) 1356*b1cdbd2cSJim Jagielski { 1357*b1cdbd2cSJim Jagielski $allrpms = installer::systemactions::find_file_with_file_extension("rpm", $directory); 1358*b1cdbd2cSJim Jagielski 1359*b1cdbd2cSJim Jagielski # collecting rpms with the complete path 1360*b1cdbd2cSJim Jagielski 1361*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$allrpms}; $i++ ) 1362*b1cdbd2cSJim Jagielski { 1363*b1cdbd2cSJim Jagielski ${$allrpms}[$i] = $directory . $installer::globals::separator . ${$allrpms}[$i]; 1364*b1cdbd2cSJim Jagielski $infoline = "Found RPM: ${$allrpms}[$i]\n"; 1365*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1366*b1cdbd2cSJim Jagielski } 1367*b1cdbd2cSJim Jagielski } 1368*b1cdbd2cSJim Jagielski 1369*b1cdbd2cSJim Jagielski return $allrpms; 1370*b1cdbd2cSJim Jagielski} 1371*b1cdbd2cSJim Jagielski 1372*b1cdbd2cSJim Jagielski####################################################### 1373*b1cdbd2cSJim Jagielski# Adding the values of the array 1374*b1cdbd2cSJim Jagielski####################################################### 1375*b1cdbd2cSJim Jagielski 1376*b1cdbd2cSJim Jagielskisub do_sum 1377*b1cdbd2cSJim Jagielski{ 1378*b1cdbd2cSJim Jagielski my ( $allnumbers ) = @_; 1379*b1cdbd2cSJim Jagielski 1380*b1cdbd2cSJim Jagielski my $sum = 0; 1381*b1cdbd2cSJim Jagielski 1382*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$allnumbers}; $i++ ) 1383*b1cdbd2cSJim Jagielski { 1384*b1cdbd2cSJim Jagielski $sum = $sum + ${$allnumbers}[$i]; 1385*b1cdbd2cSJim Jagielski } 1386*b1cdbd2cSJim Jagielski 1387*b1cdbd2cSJim Jagielski return $sum; 1388*b1cdbd2cSJim Jagielski} 1389*b1cdbd2cSJim Jagielski 1390*b1cdbd2cSJim Jagielski####################################################### 1391*b1cdbd2cSJim Jagielski# Setting the filesize for the RPMs in the xml file 1392*b1cdbd2cSJim Jagielski####################################################### 1393*b1cdbd2cSJim Jagielski 1394*b1cdbd2cSJim Jagielskisub set_filesize_in_xmlfile 1395*b1cdbd2cSJim Jagielski{ 1396*b1cdbd2cSJim Jagielski my ($filesize, $rpmname, $xmlfile) = @_; 1397*b1cdbd2cSJim Jagielski 1398*b1cdbd2cSJim Jagielski my $infoline = ""; 1399*b1cdbd2cSJim Jagielski my $foundrpm = 0; 1400*b1cdbd2cSJim Jagielski my $filesizeset = 0; 1401*b1cdbd2cSJim Jagielski 1402*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$xmlfile}; $i++ ) 1403*b1cdbd2cSJim Jagielski { 1404*b1cdbd2cSJim Jagielski my $line = ${$xmlfile}[$i]; 1405*b1cdbd2cSJim Jagielski 1406*b1cdbd2cSJim Jagielski # searching for "rpmPath="RPMS/${UNIXPRODUCTNAME}-core01-${PACKAGEVERSION}-${PACKAGEREVISION}.i586.rpm"" 1407*b1cdbd2cSJim Jagielski 1408*b1cdbd2cSJim Jagielski if (( $line =~ /rpmPath\s*=/ ) && ( $line =~ /\Q$rpmname\E\"\s*$/ )) 1409*b1cdbd2cSJim Jagielski { 1410*b1cdbd2cSJim Jagielski $foundrpm = 1; 1411*b1cdbd2cSJim Jagielski 1412*b1cdbd2cSJim Jagielski my $number = $i; 1413*b1cdbd2cSJim Jagielski $number++; 1414*b1cdbd2cSJim Jagielski 1415*b1cdbd2cSJim Jagielski while ( ! ( ${$xmlfile}[$number] =~ /\/\>\s*$/ )) 1416*b1cdbd2cSJim Jagielski { 1417*b1cdbd2cSJim Jagielski if ( ${$xmlfile}[$number] =~ /FILESIZEPLACEHOLDER/ ) 1418*b1cdbd2cSJim Jagielski { 1419*b1cdbd2cSJim Jagielski ${$xmlfile}[$number] =~ s/FILESIZEPLACEHOLDER/$filesize/; 1420*b1cdbd2cSJim Jagielski $filesizeset = 1; 1421*b1cdbd2cSJim Jagielski $infoline = "Setting filesize for $rpmname : $filesize\n"; 1422*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1423*b1cdbd2cSJim Jagielski last; 1424*b1cdbd2cSJim Jagielski } 1425*b1cdbd2cSJim Jagielski 1426*b1cdbd2cSJim Jagielski $number++; 1427*b1cdbd2cSJim Jagielski } 1428*b1cdbd2cSJim Jagielski 1429*b1cdbd2cSJim Jagielski last; 1430*b1cdbd2cSJim Jagielski } 1431*b1cdbd2cSJim Jagielski } 1432*b1cdbd2cSJim Jagielski 1433*b1cdbd2cSJim Jagielski if ( ! $foundrpm ) 1434*b1cdbd2cSJim Jagielski { 1435*b1cdbd2cSJim Jagielski $infoline = "ERROR: Did not find $rpmname in xml file !\n"; 1436*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1437*b1cdbd2cSJim Jagielski } 1438*b1cdbd2cSJim Jagielski 1439*b1cdbd2cSJim Jagielski if ( ! $filesizeset ) 1440*b1cdbd2cSJim Jagielski { 1441*b1cdbd2cSJim Jagielski $infoline = "ERROR: Did not set filesize for $rpmname in xml file !\n"; 1442*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1443*b1cdbd2cSJim Jagielski } 1444*b1cdbd2cSJim Jagielski} 1445*b1cdbd2cSJim Jagielski 1446*b1cdbd2cSJim Jagielski############################################################ 1447*b1cdbd2cSJim Jagielski# Collecting all rpmUniqueName in xml file. 1448*b1cdbd2cSJim Jagielski############################################################ 1449*b1cdbd2cSJim Jagielski 1450*b1cdbd2cSJim Jagielskisub collect_uniquenames_in_xmlfile 1451*b1cdbd2cSJim Jagielski{ 1452*b1cdbd2cSJim Jagielski my ($xmlfile) = @_; 1453*b1cdbd2cSJim Jagielski 1454*b1cdbd2cSJim Jagielski my @rpmuniquenames = (); 1455*b1cdbd2cSJim Jagielski 1456*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$xmlfile}; $i++ ) 1457*b1cdbd2cSJim Jagielski { 1458*b1cdbd2cSJim Jagielski my $oneline = ${$xmlfile}[$i]; 1459*b1cdbd2cSJim Jagielski 1460*b1cdbd2cSJim Jagielski if ( $oneline =~ /^\s*rpmUniqueName\s*\=\s*\"(.*)\"\s*$/ ) 1461*b1cdbd2cSJim Jagielski { 1462*b1cdbd2cSJim Jagielski my $rpmuniquename = $1; 1463*b1cdbd2cSJim Jagielski push(@rpmuniquenames, $rpmuniquename) 1464*b1cdbd2cSJim Jagielski } 1465*b1cdbd2cSJim Jagielski } 1466*b1cdbd2cSJim Jagielski 1467*b1cdbd2cSJim Jagielski return \@rpmuniquenames; 1468*b1cdbd2cSJim Jagielski} 1469*b1cdbd2cSJim Jagielski 1470*b1cdbd2cSJim Jagielski############################################################ 1471*b1cdbd2cSJim Jagielski# Searching for the corresponding rpm, that fits to 1472*b1cdbd2cSJim Jagielski# the unique rpm name. 1473*b1cdbd2cSJim Jagielski# Simple mechanism: The name of the rpm starts with the 1474*b1cdbd2cSJim Jagielski# unique rpm name followed by a "-". 1475*b1cdbd2cSJim Jagielski############################################################ 1476*b1cdbd2cSJim Jagielski 1477*b1cdbd2cSJim Jagielskisub find_rpmname_to_uniquename 1478*b1cdbd2cSJim Jagielski{ 1479*b1cdbd2cSJim Jagielski my ($uniquename, $listofpackages) = @_; 1480*b1cdbd2cSJim Jagielski 1481*b1cdbd2cSJim Jagielski my @all_correct_rpms = (); 1482*b1cdbd2cSJim Jagielski my $infoline = ""; 1483*b1cdbd2cSJim Jagielski 1484*b1cdbd2cSJim Jagielski # special handling for java RPMs, which have a very strange naming schema 1485*b1cdbd2cSJim Jagielski my $localuniquename = $uniquename; 1486*b1cdbd2cSJim Jagielski if ( $uniquename =~ /^\s*jre\-/ ) { $localuniquename = "jre"; } 1487*b1cdbd2cSJim Jagielski 1488*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$listofpackages}; $i++ ) 1489*b1cdbd2cSJim Jagielski { 1490*b1cdbd2cSJim Jagielski my $completerpmname = ${$listofpackages}[$i]; 1491*b1cdbd2cSJim Jagielski my $rpmname = $completerpmname; 1492*b1cdbd2cSJim Jagielski installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$rpmname); 1493*b1cdbd2cSJim Jagielski 1494*b1cdbd2cSJim Jagielski if ( $rpmname =~ /^\s*\Q$localuniquename\E\-\d/ ) { push(@all_correct_rpms, $rpmname); } 1495*b1cdbd2cSJim Jagielski } 1496*b1cdbd2cSJim Jagielski 1497*b1cdbd2cSJim Jagielski # @all_correct_rpms has to contain exactly one value 1498*b1cdbd2cSJim Jagielski 1499*b1cdbd2cSJim Jagielski if ( $#all_correct_rpms > 0 ) 1500*b1cdbd2cSJim Jagielski { 1501*b1cdbd2cSJim Jagielski my $number = $#all_correct_rpms + 1; 1502*b1cdbd2cSJim Jagielski $infoline = "There are $number RPMs for the unique name \"$uniquename\" :\n"; 1503*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1504*b1cdbd2cSJim Jagielski my $allrpmstring = ""; 1505*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#all_correct_rpms; $i++ ) { $allrpmstring = $allrpmstring . $all_correct_rpms[$i] . "\n"; } 1506*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($allrpmstring); 1507*b1cdbd2cSJim Jagielski installer::exiter::exit_program("ERROR: Found $number RPMs that start with unique name \"$uniquename\". Only one allowed!", "find_rpmname_to_uniquename"); 1508*b1cdbd2cSJim Jagielski } 1509*b1cdbd2cSJim Jagielski 1510*b1cdbd2cSJim Jagielski if ( $#all_correct_rpms < 0 ) 1511*b1cdbd2cSJim Jagielski { 1512*b1cdbd2cSJim Jagielski $infoline = "There is no rpm for the unique name \"$uniquename\"\n"; 1513*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1514*b1cdbd2cSJim Jagielski installer::exiter::exit_program("ERROR: There is no RPM that start with unique name \"$uniquename\"!", "find_rpmname_to_uniquename"); 1515*b1cdbd2cSJim Jagielski } 1516*b1cdbd2cSJim Jagielski 1517*b1cdbd2cSJim Jagielski if ( $#all_correct_rpms == 0 ) 1518*b1cdbd2cSJim Jagielski { 1519*b1cdbd2cSJim Jagielski $infoline = "Found one rpm for the unique name \"$uniquename\" : $all_correct_rpms[0]\n"; 1520*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1521*b1cdbd2cSJim Jagielski } 1522*b1cdbd2cSJim Jagielski 1523*b1cdbd2cSJim Jagielski return $all_correct_rpms[0]; 1524*b1cdbd2cSJim Jagielski} 1525*b1cdbd2cSJim Jagielski 1526*b1cdbd2cSJim Jagielski####################################################### 1527*b1cdbd2cSJim Jagielski# Including the complete RPM name into the xml file 1528*b1cdbd2cSJim Jagielski####################################################### 1529*b1cdbd2cSJim Jagielski 1530*b1cdbd2cSJim Jagielskisub set_rpmname_into_xmlfile 1531*b1cdbd2cSJim Jagielski{ 1532*b1cdbd2cSJim Jagielski my ($rpmname, $uniquename, $xmlfile) = @_; 1533*b1cdbd2cSJim Jagielski 1534*b1cdbd2cSJim Jagielski my $foundrpm = 0; 1535*b1cdbd2cSJim Jagielski my $rpmnameset = 0; 1536*b1cdbd2cSJim Jagielski 1537*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$xmlfile}; $i++ ) 1538*b1cdbd2cSJim Jagielski { 1539*b1cdbd2cSJim Jagielski my $oneline = ${$xmlfile}[$i]; 1540*b1cdbd2cSJim Jagielski 1541*b1cdbd2cSJim Jagielski if ( $oneline =~ /^\s*rpmUniqueName\s*\=\s*\"\Q$uniquename\E\"\s*$/ ) 1542*b1cdbd2cSJim Jagielski { 1543*b1cdbd2cSJim Jagielski $foundrpm = 1; 1544*b1cdbd2cSJim Jagielski 1545*b1cdbd2cSJim Jagielski my $number = $i; 1546*b1cdbd2cSJim Jagielski $number++; 1547*b1cdbd2cSJim Jagielski 1548*b1cdbd2cSJim Jagielski while ( ! ( ${$xmlfile}[$number] =~ /\/\>\s*$/ )) 1549*b1cdbd2cSJim Jagielski { 1550*b1cdbd2cSJim Jagielski if ( ${$xmlfile}[$number] =~ /RPMFILENAMEPLACEHOLDER/ ) 1551*b1cdbd2cSJim Jagielski { 1552*b1cdbd2cSJim Jagielski ${$xmlfile}[$number] =~ s/RPMFILENAMEPLACEHOLDER/$rpmname/; 1553*b1cdbd2cSJim Jagielski $rpmnameset = 1; 1554*b1cdbd2cSJim Jagielski $infoline = "Setting RPM name for $uniquename : $rpmname\n"; 1555*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1556*b1cdbd2cSJim Jagielski last; 1557*b1cdbd2cSJim Jagielski } 1558*b1cdbd2cSJim Jagielski 1559*b1cdbd2cSJim Jagielski $number++; 1560*b1cdbd2cSJim Jagielski } 1561*b1cdbd2cSJim Jagielski 1562*b1cdbd2cSJim Jagielski last; 1563*b1cdbd2cSJim Jagielski } 1564*b1cdbd2cSJim Jagielski } 1565*b1cdbd2cSJim Jagielski 1566*b1cdbd2cSJim Jagielski if ( ! $foundrpm ) 1567*b1cdbd2cSJim Jagielski { 1568*b1cdbd2cSJim Jagielski $infoline = "ERROR: Did not find $rpmname in xml file !\n"; 1569*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1570*b1cdbd2cSJim Jagielski } 1571*b1cdbd2cSJim Jagielski 1572*b1cdbd2cSJim Jagielski if ( ! $rpmnameset ) 1573*b1cdbd2cSJim Jagielski { 1574*b1cdbd2cSJim Jagielski $infoline = "ERROR: Did not set rpm name for $uniquename in xml file !\n"; 1575*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1576*b1cdbd2cSJim Jagielski } 1577*b1cdbd2cSJim Jagielski 1578*b1cdbd2cSJim Jagielski} 1579*b1cdbd2cSJim Jagielski 1580*b1cdbd2cSJim Jagielski############################################################ 1581*b1cdbd2cSJim Jagielski# Including the rpm path dynamically into the xml file. 1582*b1cdbd2cSJim Jagielski# This is introduced, because system integration has 1583*b1cdbd2cSJim Jagielski# variable PackageVersion and PackageRevision in xml file. 1584*b1cdbd2cSJim Jagielski############################################################ 1585*b1cdbd2cSJim Jagielski 1586*b1cdbd2cSJim Jagielskisub put_rpmpath_into_xmlfile 1587*b1cdbd2cSJim Jagielski{ 1588*b1cdbd2cSJim Jagielski my ($xmlfile, $listofpackages) = @_; 1589*b1cdbd2cSJim Jagielski 1590*b1cdbd2cSJim Jagielski my $infoline = ""; 1591*b1cdbd2cSJim Jagielski 1592*b1cdbd2cSJim Jagielski my $alluniquenames = collect_uniquenames_in_xmlfile($xmlfile); 1593*b1cdbd2cSJim Jagielski 1594*b1cdbd2cSJim Jagielski my $number = $#{$listofpackages} + 1; 1595*b1cdbd2cSJim Jagielski $infoline = "Number of packages in installation set: $number\n"; 1596*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1597*b1cdbd2cSJim Jagielski $number = $#{$alluniquenames} + 1; 1598*b1cdbd2cSJim Jagielski $infoline = "Number of unique RPM names in xml file: $number\n"; 1599*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1600*b1cdbd2cSJim Jagielski 1601*b1cdbd2cSJim Jagielski $installer::logger::Lang->print("Packages in installation set:\n"); 1602*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$listofpackages}; $i++ ) 1603*b1cdbd2cSJim Jagielski { 1604*b1cdbd2cSJim Jagielski $installer::logger::Lang->print(${$listofpackages}[$i] . "\n"); 1605*b1cdbd2cSJim Jagielski } 1606*b1cdbd2cSJim Jagielski 1607*b1cdbd2cSJim Jagielski $installer::logger::Lang->print("\n"); 1608*b1cdbd2cSJim Jagielski $installer::logger::Lang->print("Unique RPM names in xml file:\n"); 1609*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$alluniquenames}; $i++ ) 1610*b1cdbd2cSJim Jagielski { 1611*b1cdbd2cSJim Jagielski $infoline = "${$alluniquenames}[$i]\n"; 1612*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1613*b1cdbd2cSJim Jagielski } 1614*b1cdbd2cSJim Jagielski 1615*b1cdbd2cSJim Jagielski if ( $#{$alluniquenames} != $#{$listofpackages} ) { installer::exiter::exit_program("ERROR: xml file contains $#{$alluniquenames} unique names, but there are $#{$listofpackages} packages in installation set!", "put_rpmpath_into_xmlfile"); } 1616*b1cdbd2cSJim Jagielski 1617*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$alluniquenames}; $i++ ) 1618*b1cdbd2cSJim Jagielski { 1619*b1cdbd2cSJim Jagielski my $uniquename = ${$alluniquenames}[$i]; 1620*b1cdbd2cSJim Jagielski my $rpmname = find_rpmname_to_uniquename($uniquename, $listofpackages); 1621*b1cdbd2cSJim Jagielski set_rpmname_into_xmlfile($rpmname, $uniquename, $xmlfile); 1622*b1cdbd2cSJim Jagielski } 1623*b1cdbd2cSJim Jagielski} 1624*b1cdbd2cSJim Jagielski 1625*b1cdbd2cSJim Jagielski####################################################### 1626*b1cdbd2cSJim Jagielski# Including the file size of the rpms into the 1627*b1cdbd2cSJim Jagielski# xml file 1628*b1cdbd2cSJim Jagielski####################################################### 1629*b1cdbd2cSJim Jagielski 1630*b1cdbd2cSJim Jagielskisub put_filesize_into_xmlfile 1631*b1cdbd2cSJim Jagielski{ 1632*b1cdbd2cSJim Jagielski my ($xmlfile, $listofpackages) = @_; 1633*b1cdbd2cSJim Jagielski 1634*b1cdbd2cSJim Jagielski my $infoline = ""; 1635*b1cdbd2cSJim Jagielski 1636*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$listofpackages}; $i++ ) 1637*b1cdbd2cSJim Jagielski { 1638*b1cdbd2cSJim Jagielski my $completerpmname = ${$listofpackages}[$i]; 1639*b1cdbd2cSJim Jagielski my $rpmname = $completerpmname; 1640*b1cdbd2cSJim Jagielski installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$rpmname); 1641*b1cdbd2cSJim Jagielski 1642*b1cdbd2cSJim Jagielski if ( ! $installer::globals::rpmquerycommand ) { installer::exiter::exit_program("ERROR: rpm not found for querying packages!", "put_filesize_into_xmlfile"); } 1643*b1cdbd2cSJim Jagielski my $systemcall = "$installer::globals::rpmquerycommand -qp --queryformat \"\[\%\{FILESIZES\}\\n\]\" $completerpmname 2\>\&1 |"; 1644*b1cdbd2cSJim Jagielski my $rpmout = make_systemcall($systemcall, 0); 1645*b1cdbd2cSJim Jagielski my $filesize = do_sum($rpmout); 1646*b1cdbd2cSJim Jagielski 1647*b1cdbd2cSJim Jagielski $infoline = "Filesize $rpmname : $filesize\n"; 1648*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1649*b1cdbd2cSJim Jagielski 1650*b1cdbd2cSJim Jagielski set_filesize_in_xmlfile($filesize, $rpmname, $xmlfile); 1651*b1cdbd2cSJim Jagielski } 1652*b1cdbd2cSJim Jagielski} 1653*b1cdbd2cSJim Jagielski 1654*b1cdbd2cSJim Jagielski####################################################### 1655*b1cdbd2cSJim Jagielski# Creating the java installer class file dynamically 1656*b1cdbd2cSJim Jagielski####################################################### 1657*b1cdbd2cSJim Jagielski 1658*b1cdbd2cSJim Jagielskisub create_java_installer 1659*b1cdbd2cSJim Jagielski{ 1660*b1cdbd2cSJim Jagielski my ( $installdir, $newdir, $languagestringref, $languagesarrayref, $allvariableshashref, $includepatharrayref, $modulesarrayref ) = @_; 1661*b1cdbd2cSJim Jagielski 1662*b1cdbd2cSJim Jagielski installer::logger::include_header_into_logfile("Creating Java installer:"); 1663*b1cdbd2cSJim Jagielski 1664*b1cdbd2cSJim Jagielski my $infoline = ""; 1665*b1cdbd2cSJim Jagielski 1666*b1cdbd2cSJim Jagielski # collecting all packages or rpms located in the installation directory 1667*b1cdbd2cSJim Jagielski my $listofpackages = get_all_packages_in_installdir($installdir, $newdir); 1668*b1cdbd2cSJim Jagielski 1669*b1cdbd2cSJim Jagielski # creating the directory 1670*b1cdbd2cSJim Jagielski my $javadir = installer::systemactions::create_directories("javainstaller", $languagestringref); 1671*b1cdbd2cSJim Jagielski $javadir =~ s/\/\s*$//; 1672*b1cdbd2cSJim Jagielski# push(@installer::globals::removedirs, $javadir); 1673*b1cdbd2cSJim Jagielski 1674*b1cdbd2cSJim Jagielski # copying the content from directory install_sdk into the java directory 1675*b1cdbd2cSJim Jagielski 1676*b1cdbd2cSJim Jagielski my $projectroot = ""; 1677*b1cdbd2cSJim Jagielski if ( $ENV{'PRJ'} ) { $projectroot = $ENV{'PRJ'}; } 1678*b1cdbd2cSJim Jagielski else { installer::exiter::exit_program("ERROR: Environment variable PRJ not set", "create_java_installer"); } 1679*b1cdbd2cSJim Jagielski 1680*b1cdbd2cSJim Jagielski $projectroot =~ s/\/\s*$//; 1681*b1cdbd2cSJim Jagielski my $sourcedir = "$projectroot/inc_global/unix/install_sdk"; 1682*b1cdbd2cSJim Jagielski installer::systemactions::copy_complete_directory_without_cvs($sourcedir, $javadir); 1683*b1cdbd2cSJim Jagielski 1684*b1cdbd2cSJim Jagielski # determining the java template file 1685*b1cdbd2cSJim Jagielski 1686*b1cdbd2cSJim Jagielski my $templatefilename = $javadir . $installer::globals::separator . "locale/resources/MyResources_template.java"; 1687*b1cdbd2cSJim Jagielski 1688*b1cdbd2cSJim Jagielski # Saving the content of the template file. It is used in the xml files 1689*b1cdbd2cSJim Jagielski 1690*b1cdbd2cSJim Jagielski my $javatemplateorigfile = installer::files::read_file($templatefilename); 1691*b1cdbd2cSJim Jagielski 1692*b1cdbd2cSJim Jagielski # determining the ulf language file 1693*b1cdbd2cSJim Jagielski 1694*b1cdbd2cSJim Jagielski # my $ulffilename = "installsdk.ulf"; 1695*b1cdbd2cSJim Jagielski my $ulffilename = "installsdk.jlf"; 1696*b1cdbd2cSJim Jagielski $ulffilename = $installer::globals::javalanguagepath . $installer::globals::separator . $ulffilename; 1697*b1cdbd2cSJim Jagielski my $ulffile = installer::files::read_file($ulffilename); 1698*b1cdbd2cSJim Jagielski 1699*b1cdbd2cSJim Jagielski $installer::logger::Lang->print("\n"); 1700*b1cdbd2cSJim Jagielski $installer::logger::Lang->print("Reading ulf file: $ulffilename\n"); 1701*b1cdbd2cSJim Jagielski 1702*b1cdbd2cSJim Jagielski $infoline = "Translating the Java template file\n"; 1703*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1704*b1cdbd2cSJim Jagielski 1705*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$languagesarrayref}; $i++ ) 1706*b1cdbd2cSJim Jagielski { 1707*b1cdbd2cSJim Jagielski my $onelanguage = ${$languagesarrayref}[$i]; 1708*b1cdbd2cSJim Jagielski 1709*b1cdbd2cSJim Jagielski # replacing all strings in the Java file with content of ulf files 1710*b1cdbd2cSJim Jagielski 1711*b1cdbd2cSJim Jagielski my $templatefile = installer::files::read_file($templatefilename); 1712*b1cdbd2cSJim Jagielski 1713*b1cdbd2cSJim Jagielski set_component_name_and_description($templatefile, $modulesarrayref, $onelanguage); 1714*b1cdbd2cSJim Jagielski translate_javafile($templatefile, $ulffile, $onelanguage); 1715*b1cdbd2cSJim Jagielski 1716*b1cdbd2cSJim Jagielski # adding the license file into the Java file 1717*b1cdbd2cSJim Jagielski 1718*b1cdbd2cSJim Jagielski my $licensefilesource = get_licensefilesource($onelanguage, $includepatharrayref); 1719*b1cdbd2cSJim Jagielski my $licensefile = installer::files::read_file($licensefilesource); 1720*b1cdbd2cSJim Jagielski add_license_file_into_javafile($templatefile, $licensefile, $includepatharrayref, $javadir, $onelanguage); 1721*b1cdbd2cSJim Jagielski 1722*b1cdbd2cSJim Jagielski # setting productname and productversion 1723*b1cdbd2cSJim Jagielski 1724*b1cdbd2cSJim Jagielski set_productname_and_productversion($templatefile, $allvariableshashref); 1725*b1cdbd2cSJim Jagielski 1726*b1cdbd2cSJim Jagielski # setting the class name in the java file ( "MyResources_TEMPLATE" -> "MyResources_en" ) 1727*b1cdbd2cSJim Jagielski 1728*b1cdbd2cSJim Jagielski # if ( $onelanguage =~ /^\s*(\w+)\-(\w+)\s*$/ ) { $onelanguage = $1; } 1729*b1cdbd2cSJim Jagielski $onelanguage =~ s/en-US/en/; # java file name and class name contain only "_en" 1730*b1cdbd2cSJim Jagielski $onelanguage =~ s/\-/\_/; # "pt-BR" -> "pt_BR" 1731*b1cdbd2cSJim Jagielski my $classfilename = "MyResources_" . $onelanguage; 1732*b1cdbd2cSJim Jagielski set_classfilename($templatefile, $classfilename, "MyResources_TEMPLATE"); 1733*b1cdbd2cSJim Jagielski 1734*b1cdbd2cSJim Jagielski # saving the new file 1735*b1cdbd2cSJim Jagielski 1736*b1cdbd2cSJim Jagielski my $newfilename = $templatefilename; 1737*b1cdbd2cSJim Jagielski $newfilename =~ s/_template\.java\s*$/_$onelanguage\.java/; 1738*b1cdbd2cSJim Jagielski 1739*b1cdbd2cSJim Jagielski installer::files::save_file($newfilename, $templatefile); 1740*b1cdbd2cSJim Jagielski 1741*b1cdbd2cSJim Jagielski $infoline = "Saving Java file: $newfilename\n"; 1742*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1743*b1cdbd2cSJim Jagielski } 1744*b1cdbd2cSJim Jagielski 1745*b1cdbd2cSJim Jagielski # renaming one language java file to "MyResources.java" 1746*b1cdbd2cSJim Jagielski 1747*b1cdbd2cSJim Jagielski my $baselanguage = installer::languages::get_default_language($languagesarrayref); 1748*b1cdbd2cSJim Jagielski $baselanguage =~ s/\-/\_/; # "pt-BR" -> "pt_BR" 1749*b1cdbd2cSJim Jagielski $baselanguage =~ s/en_US/en/; # java file name and class name contain only "_en" 1750*b1cdbd2cSJim Jagielski # if ( $baselanguage =~ /^\s*(\w+)\-(\w+)\s*$/ ) { $baselanguage = $1; } # java file name and class name contain only "_en" 1751*b1cdbd2cSJim Jagielski # $baselanguage =~ s/en-US/en/; # java file name and class name contain only "_en" 1752*b1cdbd2cSJim Jagielski my $baselanguagefilename = $javadir . $installer::globals::separator . "locale/resources/MyResources_" . $baselanguage . "\.java"; 1753*b1cdbd2cSJim Jagielski my $basedestfilename = $javadir . $installer::globals::separator . "locale/resources/MyResources.java"; 1754*b1cdbd2cSJim Jagielski installer::systemactions::copy_one_file($baselanguagefilename, $basedestfilename); 1755*b1cdbd2cSJim Jagielski 1756*b1cdbd2cSJim Jagielski # setting the class file name also for the base class 1757*b1cdbd2cSJim Jagielski 1758*b1cdbd2cSJim Jagielski my $basetemplatefile = installer::files::read_file($basedestfilename); 1759*b1cdbd2cSJim Jagielski my $oldclassfilename = $baselanguagefilename; 1760*b1cdbd2cSJim Jagielski installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$oldclassfilename); 1761*b1cdbd2cSJim Jagielski $oldclassfilename =~ s/\.java//; 1762*b1cdbd2cSJim Jagielski my $newclassfilename = $basedestfilename; 1763*b1cdbd2cSJim Jagielski installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$newclassfilename); 1764*b1cdbd2cSJim Jagielski $newclassfilename =~ s/\.java//; 1765*b1cdbd2cSJim Jagielski 1766*b1cdbd2cSJim Jagielski set_classfilename($basetemplatefile, $newclassfilename, $oldclassfilename); 1767*b1cdbd2cSJim Jagielski 1768*b1cdbd2cSJim Jagielski installer::files::save_file($basedestfilename, $basetemplatefile); 1769*b1cdbd2cSJim Jagielski 1770*b1cdbd2cSJim Jagielski $infoline = "Created base Java file: $basedestfilename\n"; 1771*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1772*b1cdbd2cSJim Jagielski 1773*b1cdbd2cSJim Jagielski # deleting the template file 1774*b1cdbd2cSJim Jagielski 1775*b1cdbd2cSJim Jagielski unlink($templatefilename); 1776*b1cdbd2cSJim Jagielski 1777*b1cdbd2cSJim Jagielski $infoline = "Deleted template Java resource file: $templatefilename\n"; 1778*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1779*b1cdbd2cSJim Jagielski 1780*b1cdbd2cSJim Jagielski # changing into Java directory 1781*b1cdbd2cSJim Jagielski 1782*b1cdbd2cSJim Jagielski my $from = cwd(); 1783*b1cdbd2cSJim Jagielski 1784*b1cdbd2cSJim Jagielski chdir($javadir); 1785*b1cdbd2cSJim Jagielski 1786*b1cdbd2cSJim Jagielski $infoline = "Changing into directory: $javadir\n"; 1787*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1788*b1cdbd2cSJim Jagielski 1789*b1cdbd2cSJim Jagielski # preparing the xml file 1790*b1cdbd2cSJim Jagielski 1791*b1cdbd2cSJim Jagielski my $xmlfilename = ""; 1792*b1cdbd2cSJim Jagielski my $subdir = ""; 1793*b1cdbd2cSJim Jagielski 1794*b1cdbd2cSJim Jagielski if ( $installer::globals::issolarispkgbuild ) 1795*b1cdbd2cSJim Jagielski { 1796*b1cdbd2cSJim Jagielski $xmlfilename = "pkgUnit.xml"; 1797*b1cdbd2cSJim Jagielski } 1798*b1cdbd2cSJim Jagielski elsif ( $installer::globals::islinuxrpmbuild ) 1799*b1cdbd2cSJim Jagielski { 1800*b1cdbd2cSJim Jagielski $xmlfilename = "rpmUnit.xml"; 1801*b1cdbd2cSJim Jagielski } 1802*b1cdbd2cSJim Jagielski else 1803*b1cdbd2cSJim Jagielski { 1804*b1cdbd2cSJim Jagielski installer::exiter::exit_program("ERROR: No platform for Install SDK", "create_java_installer"); 1805*b1cdbd2cSJim Jagielski } 1806*b1cdbd2cSJim Jagielski 1807*b1cdbd2cSJim Jagielski # reading, editing and saving the xmlfile 1808*b1cdbd2cSJim Jagielski 1809*b1cdbd2cSJim Jagielski my $xmlfile = installer::files::read_file($xmlfilename); 1810*b1cdbd2cSJim Jagielski prepare_language_pack_in_xmlfile($xmlfile, $languagesarrayref); 1811*b1cdbd2cSJim Jagielski my $xmlfilename2 = $xmlfilename . ".test2"; 1812*b1cdbd2cSJim Jagielski installer::files::save_file($xmlfilename2, $xmlfile); 1813*b1cdbd2cSJim Jagielski remove_empty_packages_in_xmlfile($xmlfile); 1814*b1cdbd2cSJim Jagielski my $xmlfilename3 = $xmlfilename . ".test3"; 1815*b1cdbd2cSJim Jagielski installer::files::save_file($xmlfilename3, $xmlfile); 1816*b1cdbd2cSJim Jagielski substitute_variables($xmlfile, $allvariableshashref); 1817*b1cdbd2cSJim Jagielski if (( $installer::globals::islinuxrpmbuild ) && ( $#installer::globals::linkrpms > -1 )) { prepare_linkrpm_in_xmlfile($xmlfile,\@installer::globals::linkrpms); } 1818*b1cdbd2cSJim Jagielski if ( $installer::globals::issolarisx86build || $installer::globals::islinuxbuild ) { remove_w4w_from_xmlfile($xmlfile); } 1819*b1cdbd2cSJim Jagielski remove_module_if_not_defined($xmlfile, $modulesarrayref, "gid_Module_Optional_Onlineupdate"); 1820*b1cdbd2cSJim Jagielski replace_component_names($xmlfile, $templatefilename, $modulesarrayref, $javatemplateorigfile, $ulffile); 1821*b1cdbd2cSJim Jagielski my $xmlfilename4 = $xmlfilename . ".test4"; 1822*b1cdbd2cSJim Jagielski installer::files::save_file($xmlfilename4, $xmlfile); 1823*b1cdbd2cSJim Jagielski if ( $installer::globals::islinuxrpmbuild ) { put_rpmpath_into_xmlfile($xmlfile, $listofpackages); } 1824*b1cdbd2cSJim Jagielski if ( $installer::globals::islinuxrpmbuild ) { put_filesize_into_xmlfile($xmlfile, $listofpackages); } 1825*b1cdbd2cSJim Jagielski installer::files::save_file($xmlfilename, $xmlfile); 1826*b1cdbd2cSJim Jagielski $infoline = "Saving xml file: $xmlfilename\n"; 1827*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1828*b1cdbd2cSJim Jagielski 1829*b1cdbd2cSJim Jagielski # Setting the classpath and starting compiler 1830*b1cdbd2cSJim Jagielski 1831*b1cdbd2cSJim Jagielski set_classpath_for_install_sdk($javadir); 1832*b1cdbd2cSJim Jagielski 1833*b1cdbd2cSJim Jagielski # creating class files: 1834*b1cdbd2cSJim Jagielski # language class file, dialog class files, installer class file 1835*b1cdbd2cSJim Jagielski 1836*b1cdbd2cSJim Jagielski my $jdkpath = ""; 1837*b1cdbd2cSJim Jagielski if ( $ENV{'JDKPATH'} ) { $jdkpath = $ENV{'JDKPATH'}; } 1838*b1cdbd2cSJim Jagielski 1839*b1cdbd2cSJim Jagielski my $javac = "javac"; 1840*b1cdbd2cSJim Jagielski if ( $jdkpath ) { $javac = $jdkpath . $installer::globals::separator . $javac; } 1841*b1cdbd2cSJim Jagielski 1842*b1cdbd2cSJim Jagielski my $systemcall = "$javac locale\/resources\/\*\.java 2\>\&1 |"; 1843*b1cdbd2cSJim Jagielski make_systemcall($systemcall, 1); 1844*b1cdbd2cSJim Jagielski 1845*b1cdbd2cSJim Jagielski $systemcall = "$javac com\/sun\/staroffice\/install\/\*\.java 2\>\&1 |"; 1846*b1cdbd2cSJim Jagielski make_systemcall($systemcall, 1); 1847*b1cdbd2cSJim Jagielski 1848*b1cdbd2cSJim Jagielski # making subdirectory creating empty packages 1849*b1cdbd2cSJim Jagielski create_empty_packages($xmlfile); 1850*b1cdbd2cSJim Jagielski 1851*b1cdbd2cSJim Jagielski # Copy "jresetup" from solver locally to include it into the classfile 1852*b1cdbd2cSJim Jagielski # Copy "jresetup" from solver to installdir 1853*b1cdbd2cSJim Jagielski 1854*b1cdbd2cSJim Jagielski my $setupname = "jresetup"; 1855*b1cdbd2cSJim Jagielski my $newname = "setup"; 1856*b1cdbd2cSJim Jagielski copy_setup_locally($includepatharrayref, $setupname, $newname); 1857*b1cdbd2cSJim Jagielski 1858*b1cdbd2cSJim Jagielski my $java = "java"; 1859*b1cdbd2cSJim Jagielski if ( $jdkpath ) { $java = $jdkpath . $installer::globals::separator . $java; } 1860*b1cdbd2cSJim Jagielski 1861*b1cdbd2cSJim Jagielski $systemcall = "$java com.sun.setup.builder.InstallBuilder $xmlfilename -novalidate 2\>\&1 |"; 1862*b1cdbd2cSJim Jagielski make_systemcall($systemcall, 1); 1863*b1cdbd2cSJim Jagielski 1864*b1cdbd2cSJim Jagielski # copying the newly created classfile into the installation set 1865*b1cdbd2cSJim Jagielski 1866*b1cdbd2cSJim Jagielski my $archivefilename = get_archivefilename($xmlfile); 1867*b1cdbd2cSJim Jagielski $archivefilename = $archivefilename . ".class"; 1868*b1cdbd2cSJim Jagielski 1869*b1cdbd2cSJim Jagielski if ( ! -f $archivefilename ) { installer::exiter::exit_program("ERROR: Could not find Java class file $archivefilename!", "create_java_installer"); } 1870*b1cdbd2cSJim Jagielski 1871*b1cdbd2cSJim Jagielski installer::systemactions::copy_one_file($archivefilename, $installdir); 1872*b1cdbd2cSJim Jagielski 1873*b1cdbd2cSJim Jagielski # Adding the loader into the installation set. The name of the loader is setup. 1874*b1cdbd2cSJim Jagielski put_loader_into_installset($installdir, $newname); 1875*b1cdbd2cSJim Jagielski 1876*b1cdbd2cSJim Jagielski chdir($from); 1877*b1cdbd2cSJim Jagielski 1878*b1cdbd2cSJim Jagielski $infoline = "Changing into directory: $from\n"; 1879*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1880*b1cdbd2cSJim Jagielski} 1881*b1cdbd2cSJim Jagielski 1882*b1cdbd2cSJim Jagielski1; 1883