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::xpdinstaller; 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielskiuse Cwd; 26*b1cdbd2cSJim Jagielskiuse installer::converter; 27*b1cdbd2cSJim Jagielskiuse installer::exiter; 28*b1cdbd2cSJim Jagielskiuse installer::globals; 29*b1cdbd2cSJim Jagielskiuse installer::languages; 30*b1cdbd2cSJim Jagielskiuse installer::logger; 31*b1cdbd2cSJim Jagielskiuse installer::pathanalyzer; 32*b1cdbd2cSJim Jagielskiuse installer::remover; 33*b1cdbd2cSJim Jagielskiuse installer::systemactions; 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski####################################################### 37*b1cdbd2cSJim Jagielski# Searching for the module name and description in the 38*b1cdbd2cSJim Jagielski# modules collector 39*b1cdbd2cSJim Jagielski####################################################### 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielskisub get_module_name_description 42*b1cdbd2cSJim Jagielski{ 43*b1cdbd2cSJim Jagielski my ($modulesarrayref, $onelanguage, $gid, $type) = @_; 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski my $found = 0; 46*b1cdbd2cSJim Jagielski 47*b1cdbd2cSJim Jagielski my $newstring = ""; 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$modulesarrayref}; $i++ ) 50*b1cdbd2cSJim Jagielski { 51*b1cdbd2cSJim Jagielski my $onemodule = ${$modulesarrayref}[$i]; 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielski if ( $onemodule->{'gid'} eq $gid ) 54*b1cdbd2cSJim Jagielski { 55*b1cdbd2cSJim Jagielski my $typestring = $type . " " . "(" . $onelanguage . ")"; 56*b1cdbd2cSJim Jagielski if ( $onemodule->{$typestring} ) { $newstring = $onemodule->{$typestring}; } 57*b1cdbd2cSJim Jagielski $found = 1; 58*b1cdbd2cSJim Jagielski } 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski if ( $found ) { last; } 61*b1cdbd2cSJim Jagielski } 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski # defaulting to english 64*b1cdbd2cSJim Jagielski 65*b1cdbd2cSJim Jagielski if ( ! $found ) 66*b1cdbd2cSJim Jagielski { 67*b1cdbd2cSJim Jagielski my $defaultlanguage = "en-US"; 68*b1cdbd2cSJim Jagielski 69*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$modulesarrayref}; $i++ ) 70*b1cdbd2cSJim Jagielski { 71*b1cdbd2cSJim Jagielski my $onemodule = ${$modulesarrayref}[$i]; 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski if ( $onemodule->{'gid'} eq $gid ) 74*b1cdbd2cSJim Jagielski { 75*b1cdbd2cSJim Jagielski my $typestring = $type . " " . "(" . $defaultlanguage . ")"; 76*b1cdbd2cSJim Jagielski if ( $onemodule->{$typestring} ) { $newstring = $onemodule->{$typestring}; } 77*b1cdbd2cSJim Jagielski $found = 1; 78*b1cdbd2cSJim Jagielski } 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski if ( $found ) { last; } 81*b1cdbd2cSJim Jagielski } 82*b1cdbd2cSJim Jagielski } 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski return $newstring; 85*b1cdbd2cSJim Jagielski} 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski################################################### 88*b1cdbd2cSJim Jagielski# Finding module, specified by the gid 89*b1cdbd2cSJim Jagielski################################################### 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielskisub get_module 92*b1cdbd2cSJim Jagielski{ 93*b1cdbd2cSJim Jagielski my ($modulegid, $modulesarrayref) = @_; 94*b1cdbd2cSJim Jagielski 95*b1cdbd2cSJim Jagielski my $found = 0; 96*b1cdbd2cSJim Jagielski my $searchmodule = ""; 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$modulesarrayref}; $i++ ) 99*b1cdbd2cSJim Jagielski { 100*b1cdbd2cSJim Jagielski my $onemodule = ${$modulesarrayref}[$i]; 101*b1cdbd2cSJim Jagielski 102*b1cdbd2cSJim Jagielski if ( $onemodule->{'gid'} eq $modulegid ) 103*b1cdbd2cSJim Jagielski { 104*b1cdbd2cSJim Jagielski $searchmodule = $onemodule; 105*b1cdbd2cSJim Jagielski $found = 1; 106*b1cdbd2cSJim Jagielski last; 107*b1cdbd2cSJim Jagielski } 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski # if ( ! $found ) { installer::exiter::exit_program("ERROR: Could not find module belonging to gid $modulegid!", "get_module (xpdinstaller)"); } 110*b1cdbd2cSJim Jagielski } 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski return $searchmodule; 113*b1cdbd2cSJim Jagielski} 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski################################################### 116*b1cdbd2cSJim Jagielski# Creating package start tag 117*b1cdbd2cSJim Jagielski################################################### 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielskisub get_package_tag 120*b1cdbd2cSJim Jagielski{ 121*b1cdbd2cSJim Jagielski my ( $module, $indent, $linkpackage ) = @_; 122*b1cdbd2cSJim Jagielski 123*b1cdbd2cSJim Jagielski my $modulegid = $module->{'gid'}; 124*b1cdbd2cSJim Jagielski if ( $linkpackage ) { $modulegid = $modulegid . "u"; } 125*b1cdbd2cSJim Jagielski my $parentgid = ""; 126*b1cdbd2cSJim Jagielski if ( $module->{'ParentID'} ) { $parentgid = $module->{'ParentID'}; } 127*b1cdbd2cSJim Jagielski if ( $parentgid eq "" ) { $parentgid = "root"; } 128*b1cdbd2cSJim Jagielski if ( $module->{'XPDParentID'} ) { $parentgid = $module->{'XPDParentID'}; } # changing parent of "Prg" and "Opt" to "root" 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski my $tag = $indent . "<package " . "name=" . "\"" . $modulegid . "\" " . "parent=" . "\"" . $parentgid . "\">" . "\n"; 131*b1cdbd2cSJim Jagielski 132*b1cdbd2cSJim Jagielski return ( $tag, $parentgid ); 133*b1cdbd2cSJim Jagielski} 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski################################################### 136*b1cdbd2cSJim Jagielski# Creating display start tag 137*b1cdbd2cSJim Jagielski################################################### 138*b1cdbd2cSJim Jagielski 139*b1cdbd2cSJim Jagielskisub get_display_tag 140*b1cdbd2cSJim Jagielski{ 141*b1cdbd2cSJim Jagielski my ( $module, $indent ) = @_; 142*b1cdbd2cSJim Jagielski 143*b1cdbd2cSJim Jagielski # Styles=(HIDDEN_ROOT) 144*b1cdbd2cSJim Jagielski my $styles = ""; 145*b1cdbd2cSJim Jagielski my $type = ""; 146*b1cdbd2cSJim Jagielski if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; } 147*b1cdbd2cSJim Jagielski if ( $styles =~ /\bHIDDEN_ROOT\b/ ) { $type = "hidden"; } 148*b1cdbd2cSJim Jagielski else { $type = "show"; } 149*b1cdbd2cSJim Jagielski 150*b1cdbd2cSJim Jagielski # special handling for language modules. Only visible in multilingual installation set. 151*b1cdbd2cSJim Jagielski if (( $styles =~ /\bSHOW_MULTILINGUAL_ONLY\b/ ) && ( ! $installer::globals::ismultilingual )) { $type = "hidden"; } 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski # special handling for the root module, which has no parent 154*b1cdbd2cSJim Jagielski my $parentgid = ""; 155*b1cdbd2cSJim Jagielski if ( $module->{'ParentID'} ) { $parentgid = $module->{'ParentID'}; } 156*b1cdbd2cSJim Jagielski if ( $parentgid eq "" ) { $type = "hidden"; } 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski my $tag = $indent . "<display " . "type=" . "\"" . $type . "\"" . ">" . "\n"; 159*b1cdbd2cSJim Jagielski 160*b1cdbd2cSJim Jagielski return $tag; 161*b1cdbd2cSJim Jagielski} 162*b1cdbd2cSJim Jagielski 163*b1cdbd2cSJim Jagielski################################################### 164*b1cdbd2cSJim Jagielski# Creating installunit start tag 165*b1cdbd2cSJim Jagielski################################################### 166*b1cdbd2cSJim Jagielski 167*b1cdbd2cSJim Jagielskisub get_installunit_tag 168*b1cdbd2cSJim Jagielski{ 169*b1cdbd2cSJim Jagielski my ( $indent ) = @_; 170*b1cdbd2cSJim Jagielski 171*b1cdbd2cSJim Jagielski my $type = $installer::globals::packageformat; 172*b1cdbd2cSJim Jagielski 173*b1cdbd2cSJim Jagielski my $tag = $indent . "<installunit " . "type=" . "\"" . $type . "\"" . ">" . "\n"; 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski return $tag; 176*b1cdbd2cSJim Jagielski} 177*b1cdbd2cSJim Jagielski 178*b1cdbd2cSJim Jagielski################################################### 179*b1cdbd2cSJim Jagielski# Creating simple start tags 180*b1cdbd2cSJim Jagielski################################################### 181*b1cdbd2cSJim Jagielski 182*b1cdbd2cSJim Jagielskisub get_start_tag 183*b1cdbd2cSJim Jagielski{ 184*b1cdbd2cSJim Jagielski my ( $tag, $indent ) = @_; 185*b1cdbd2cSJim Jagielski 186*b1cdbd2cSJim Jagielski my $starttag = $indent . "<" . $tag . ">" . "\n"; 187*b1cdbd2cSJim Jagielski return $starttag; 188*b1cdbd2cSJim Jagielski} 189*b1cdbd2cSJim Jagielski 190*b1cdbd2cSJim Jagielski################################################### 191*b1cdbd2cSJim Jagielski# Creating end tags 192*b1cdbd2cSJim Jagielski################################################### 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielskisub get_end_tag 195*b1cdbd2cSJim Jagielski{ 196*b1cdbd2cSJim Jagielski my ( $tag, $indent ) = @_; 197*b1cdbd2cSJim Jagielski 198*b1cdbd2cSJim Jagielski my $endtag = $indent . "</" . $tag . ">" . "\n"; 199*b1cdbd2cSJim Jagielski return $endtag; 200*b1cdbd2cSJim Jagielski} 201*b1cdbd2cSJim Jagielski 202*b1cdbd2cSJim Jagielski################################################### 203*b1cdbd2cSJim Jagielski# Creating simple complete tag 204*b1cdbd2cSJim Jagielski################################################### 205*b1cdbd2cSJim Jagielski 206*b1cdbd2cSJim Jagielskisub get_tag_line 207*b1cdbd2cSJim Jagielski{ 208*b1cdbd2cSJim Jagielski my ( $indent, $name, $value ) = @_; 209*b1cdbd2cSJim Jagielski $value = '' unless defined $value; 210*b1cdbd2cSJim Jagielski 211*b1cdbd2cSJim Jagielski my $line = $indent . "<" . $name . ">" . $value . "</" . $name . ">" . "\n"; 212*b1cdbd2cSJim Jagielski 213*b1cdbd2cSJim Jagielski} 214*b1cdbd2cSJim Jagielski 215*b1cdbd2cSJim Jagielski################################################### 216*b1cdbd2cSJim Jagielski# Asking module for sortkey entry 217*b1cdbd2cSJim Jagielski################################################### 218*b1cdbd2cSJim Jagielski 219*b1cdbd2cSJim Jagielskisub get_sortkey_value 220*b1cdbd2cSJim Jagielski{ 221*b1cdbd2cSJim Jagielski my ( $module ) = @_; 222*b1cdbd2cSJim Jagielski 223*b1cdbd2cSJim Jagielski my $value = "9999"; 224*b1cdbd2cSJim Jagielski 225*b1cdbd2cSJim Jagielski if ( $module->{'Sortkey'} ) { $value = $module->{'Sortkey'}; } 226*b1cdbd2cSJim Jagielski 227*b1cdbd2cSJim Jagielski return $value; 228*b1cdbd2cSJim Jagielski} 229*b1cdbd2cSJim Jagielski 230*b1cdbd2cSJim Jagielski################################################### 231*b1cdbd2cSJim Jagielski# Asking module for default entry 232*b1cdbd2cSJim Jagielski################################################### 233*b1cdbd2cSJim Jagielski 234*b1cdbd2cSJim Jagielskisub get_default_value 235*b1cdbd2cSJim Jagielski{ 236*b1cdbd2cSJim Jagielski my ( $module ) = @_; 237*b1cdbd2cSJim Jagielski 238*b1cdbd2cSJim Jagielski my $value = ""; 239*b1cdbd2cSJim Jagielski 240*b1cdbd2cSJim Jagielski if ( $module->{'Default'} ) { $value = $module->{'Default'}; } # is YES or NO 241*b1cdbd2cSJim Jagielski 242*b1cdbd2cSJim Jagielski if ( $value =~ /\bNO\b/i ) { $value = "false"; } 243*b1cdbd2cSJim Jagielski else { $value = "true"; } 244*b1cdbd2cSJim Jagielski 245*b1cdbd2cSJim Jagielski return $value; 246*b1cdbd2cSJim Jagielski} 247*b1cdbd2cSJim Jagielski 248*b1cdbd2cSJim Jagielski################################################### 249*b1cdbd2cSJim Jagielski# Asking module for showinuserinstall entry 250*b1cdbd2cSJim Jagielski# scp style: DONTSHOWINUSERINSTALL 251*b1cdbd2cSJim Jagielski################################################### 252*b1cdbd2cSJim Jagielski 253*b1cdbd2cSJim Jagielskisub get_showinuserinstall_value 254*b1cdbd2cSJim Jagielski{ 255*b1cdbd2cSJim Jagielski my ( $module ) = @_; 256*b1cdbd2cSJim Jagielski 257*b1cdbd2cSJim Jagielski my $value = "true"; 258*b1cdbd2cSJim Jagielski 259*b1cdbd2cSJim Jagielski my $styles = ""; 260*b1cdbd2cSJim Jagielski if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; } 261*b1cdbd2cSJim Jagielski if ( $styles =~ /\bDONTSHOWINUSERINSTALL\b/ ) { $value = "false"; } 262*b1cdbd2cSJim Jagielski 263*b1cdbd2cSJim Jagielski return $value; 264*b1cdbd2cSJim Jagielski} 265*b1cdbd2cSJim Jagielski 266*b1cdbd2cSJim Jagielski################################################### 267*b1cdbd2cSJim Jagielski# Asking module for showinuserinstall entry 268*b1cdbd2cSJim Jagielski# scp style: USERINSTALLONLY 269*b1cdbd2cSJim Jagielski################################################### 270*b1cdbd2cSJim Jagielski 271*b1cdbd2cSJim Jagielskisub get_userinstallonly_value 272*b1cdbd2cSJim Jagielski{ 273*b1cdbd2cSJim Jagielski my ( $module ) = @_; 274*b1cdbd2cSJim Jagielski 275*b1cdbd2cSJim Jagielski my $value = "false"; 276*b1cdbd2cSJim Jagielski 277*b1cdbd2cSJim Jagielski my $styles = ""; 278*b1cdbd2cSJim Jagielski if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; } 279*b1cdbd2cSJim Jagielski if ( $styles =~ /\bUSERINSTALLONLY\b/ ) { $value = "true"; } 280*b1cdbd2cSJim Jagielski 281*b1cdbd2cSJim Jagielski return $value; 282*b1cdbd2cSJim Jagielski} 283*b1cdbd2cSJim Jagielski 284*b1cdbd2cSJim Jagielski################################################### 285*b1cdbd2cSJim Jagielski# Asking module for dontuninstall entry 286*b1cdbd2cSJim Jagielski# scp style: DONTUNINSTALL 287*b1cdbd2cSJim Jagielski################################################### 288*b1cdbd2cSJim Jagielski 289*b1cdbd2cSJim Jagielskisub get_dontuninstall_value 290*b1cdbd2cSJim Jagielski{ 291*b1cdbd2cSJim Jagielski my ( $module ) = @_; 292*b1cdbd2cSJim Jagielski 293*b1cdbd2cSJim Jagielski my $value = "false"; 294*b1cdbd2cSJim Jagielski 295*b1cdbd2cSJim Jagielski my $styles = ""; 296*b1cdbd2cSJim Jagielski if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; } 297*b1cdbd2cSJim Jagielski if ( $styles =~ /\bDONTUNINSTALL\b/ ) { $value = "true"; } 298*b1cdbd2cSJim Jagielski 299*b1cdbd2cSJim Jagielski return $value; 300*b1cdbd2cSJim Jagielski} 301*b1cdbd2cSJim Jagielski 302*b1cdbd2cSJim Jagielski################################################### 303*b1cdbd2cSJim Jagielski# Asking module for XpdCheckSolaris entry 304*b1cdbd2cSJim Jagielski# (belongs to scp module) 305*b1cdbd2cSJim Jagielski################################################### 306*b1cdbd2cSJim Jagielski 307*b1cdbd2cSJim Jagielskisub get_checksolaris_value 308*b1cdbd2cSJim Jagielski{ 309*b1cdbd2cSJim Jagielski my ( $module ) = @_; 310*b1cdbd2cSJim Jagielski 311*b1cdbd2cSJim Jagielski my $value = ""; 312*b1cdbd2cSJim Jagielski if ( $module->{'XpdCheckSolaris'} ) { $value = $module->{'XpdCheckSolaris'}; } 313*b1cdbd2cSJim Jagielski 314*b1cdbd2cSJim Jagielski return $value; 315*b1cdbd2cSJim Jagielski} 316*b1cdbd2cSJim Jagielski 317*b1cdbd2cSJim Jagielski################################################### 318*b1cdbd2cSJim Jagielski# Asking module for isupdatepackage entry 319*b1cdbd2cSJim Jagielski# scp style: ISUPDATEPACKAGE 320*b1cdbd2cSJim Jagielski################################################### 321*b1cdbd2cSJim Jagielski 322*b1cdbd2cSJim Jagielskisub get_isupdatepackage_value 323*b1cdbd2cSJim Jagielski{ 324*b1cdbd2cSJim Jagielski my ( $module ) = @_; 325*b1cdbd2cSJim Jagielski 326*b1cdbd2cSJim Jagielski my $value = "false"; 327*b1cdbd2cSJim Jagielski 328*b1cdbd2cSJim Jagielski my $styles = ""; 329*b1cdbd2cSJim Jagielski if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; } 330*b1cdbd2cSJim Jagielski if ( $styles =~ /\bISUPDATEPACKAGE\b/ ) { $value = "true"; } 331*b1cdbd2cSJim Jagielski 332*b1cdbd2cSJim Jagielski return $value; 333*b1cdbd2cSJim Jagielski} 334*b1cdbd2cSJim Jagielski 335*b1cdbd2cSJim Jagielski################################################### 336*b1cdbd2cSJim Jagielski# Asking module for showmultilingualonly entry 337*b1cdbd2cSJim Jagielski# scp style: SHOW_MULTILINGUAL_ONLY 338*b1cdbd2cSJim Jagielski################################################### 339*b1cdbd2cSJim Jagielski 340*b1cdbd2cSJim Jagielskisub get_showmultilingualonly_value 341*b1cdbd2cSJim Jagielski{ 342*b1cdbd2cSJim Jagielski my ( $module ) = @_; 343*b1cdbd2cSJim Jagielski 344*b1cdbd2cSJim Jagielski my $value = "false"; 345*b1cdbd2cSJim Jagielski 346*b1cdbd2cSJim Jagielski my $styles = ""; 347*b1cdbd2cSJim Jagielski if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; } 348*b1cdbd2cSJim Jagielski if ( $styles =~ /\bSHOW_MULTILINGUAL_ONLY\b/ ) { $value = "true"; } 349*b1cdbd2cSJim Jagielski 350*b1cdbd2cSJim Jagielski return $value; 351*b1cdbd2cSJim Jagielski} 352*b1cdbd2cSJim Jagielski 353*b1cdbd2cSJim Jagielski################################################### 354*b1cdbd2cSJim Jagielski# Asking module for showmultilingualonly entry 355*b1cdbd2cSJim Jagielski# scp style: SHOW_MULTILINGUAL_ONLY 356*b1cdbd2cSJim Jagielski################################################### 357*b1cdbd2cSJim Jagielski 358*b1cdbd2cSJim Jagielskisub get_applicationmodule_value 359*b1cdbd2cSJim Jagielski{ 360*b1cdbd2cSJim Jagielski my ( $module ) = @_; 361*b1cdbd2cSJim Jagielski 362*b1cdbd2cSJim Jagielski my $value = "false"; 363*b1cdbd2cSJim Jagielski 364*b1cdbd2cSJim Jagielski my $styles = ""; 365*b1cdbd2cSJim Jagielski if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; } 366*b1cdbd2cSJim Jagielski if ( $styles =~ /\bAPPLICATIONMODULE\b/ ) { $value = "true"; } 367*b1cdbd2cSJim Jagielski 368*b1cdbd2cSJim Jagielski return $value; 369*b1cdbd2cSJim Jagielski} 370*b1cdbd2cSJim Jagielski 371*b1cdbd2cSJim Jagielski################################################### 372*b1cdbd2cSJim Jagielski# Asking module for java module entry 373*b1cdbd2cSJim Jagielski# scp style: JAVAMODULE 374*b1cdbd2cSJim Jagielski################################################### 375*b1cdbd2cSJim Jagielski 376*b1cdbd2cSJim Jagielskisub get_isjavamodule_value 377*b1cdbd2cSJim Jagielski{ 378*b1cdbd2cSJim Jagielski my ( $module ) = @_; 379*b1cdbd2cSJim Jagielski 380*b1cdbd2cSJim Jagielski my $value = "false"; 381*b1cdbd2cSJim Jagielski 382*b1cdbd2cSJim Jagielski my $styles = ""; 383*b1cdbd2cSJim Jagielski if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; } 384*b1cdbd2cSJim Jagielski if ( $styles =~ /\bJAVAMODULE\b/ ) { $value = "true"; } 385*b1cdbd2cSJim Jagielski 386*b1cdbd2cSJim Jagielski return $value; 387*b1cdbd2cSJim Jagielski} 388*b1cdbd2cSJim Jagielski 389*b1cdbd2cSJim Jagielski##################################################################### 390*b1cdbd2cSJim Jagielski# Asking module, if installation shall use --force 391*b1cdbd2cSJim Jagielski# scp style: USEFORCE (Linux only) 392*b1cdbd2cSJim Jagielski##################################################################### 393*b1cdbd2cSJim Jagielski 394*b1cdbd2cSJim Jagielskisub get_useforce_value 395*b1cdbd2cSJim Jagielski{ 396*b1cdbd2cSJim Jagielski my ( $module ) = @_; 397*b1cdbd2cSJim Jagielski 398*b1cdbd2cSJim Jagielski my $value = "false"; 399*b1cdbd2cSJim Jagielski 400*b1cdbd2cSJim Jagielski my $styles = ""; 401*b1cdbd2cSJim Jagielski if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; } 402*b1cdbd2cSJim Jagielski if ( $styles =~ /\bUSEFORCE\b/ ) { $value = "true"; } 403*b1cdbd2cSJim Jagielski 404*b1cdbd2cSJim Jagielski return $value; 405*b1cdbd2cSJim Jagielski} 406*b1cdbd2cSJim Jagielski 407*b1cdbd2cSJim Jagielski################################################### 408*b1cdbd2cSJim Jagielski# Asking module, if installation can fail 409*b1cdbd2cSJim Jagielski# scp style: INSTALLCANFAIL 410*b1cdbd2cSJim Jagielski################################################### 411*b1cdbd2cSJim Jagielski 412*b1cdbd2cSJim Jagielskisub get_installcanfail_value 413*b1cdbd2cSJim Jagielski{ 414*b1cdbd2cSJim Jagielski my ( $module ) = @_; 415*b1cdbd2cSJim Jagielski 416*b1cdbd2cSJim Jagielski my $value = "false"; 417*b1cdbd2cSJim Jagielski 418*b1cdbd2cSJim Jagielski my $styles = ""; 419*b1cdbd2cSJim Jagielski if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; } 420*b1cdbd2cSJim Jagielski if ( $styles =~ /\bINSTALLCANFAIL\b/ ) { $value = "true"; } 421*b1cdbd2cSJim Jagielski 422*b1cdbd2cSJim Jagielski return $value; 423*b1cdbd2cSJim Jagielski} 424*b1cdbd2cSJim Jagielski 425*b1cdbd2cSJim Jagielski################################################### 426*b1cdbd2cSJim Jagielski# Asking module, if installation can fail 427*b1cdbd2cSJim Jagielski# scp style: INSTALLCANFAIL 428*b1cdbd2cSJim Jagielski################################################### 429*b1cdbd2cSJim Jagielski 430*b1cdbd2cSJim Jagielskisub get_forceintoupdate_value 431*b1cdbd2cSJim Jagielski{ 432*b1cdbd2cSJim Jagielski my ( $module ) = @_; 433*b1cdbd2cSJim Jagielski 434*b1cdbd2cSJim Jagielski my $value = "false"; 435*b1cdbd2cSJim Jagielski 436*b1cdbd2cSJim Jagielski my $styles = ""; 437*b1cdbd2cSJim Jagielski if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; } 438*b1cdbd2cSJim Jagielski if ( $styles =~ /\bFORCEINTOUPDATE\b/ ) { $value = "true"; } 439*b1cdbd2cSJim Jagielski 440*b1cdbd2cSJim Jagielski return $value; 441*b1cdbd2cSJim Jagielski} 442*b1cdbd2cSJim Jagielski 443*b1cdbd2cSJim Jagielski################################################### 444*b1cdbd2cSJim Jagielski# Substituting all occurences of "<" by "<" 445*b1cdbd2cSJim Jagielski# and all occurences of ">" by ">" 446*b1cdbd2cSJim Jagielski################################################### 447*b1cdbd2cSJim Jagielski 448*b1cdbd2cSJim Jagielskisub replace_brackets_in_string 449*b1cdbd2cSJim Jagielski{ 450*b1cdbd2cSJim Jagielski my ( $string ) = @_; 451*b1cdbd2cSJim Jagielski 452*b1cdbd2cSJim Jagielski if ( $string =~ /\</ ) { $string =~ s/\</\<\;/g; } 453*b1cdbd2cSJim Jagielski if ( $string =~ /\>/ ) { $string =~ s/\>/\>\;/g; } 454*b1cdbd2cSJim Jagielski 455*b1cdbd2cSJim Jagielski return $string; 456*b1cdbd2cSJim Jagielski} 457*b1cdbd2cSJim Jagielski 458*b1cdbd2cSJim Jagielski################################################### 459*b1cdbd2cSJim Jagielski# Substituting all occurences of "\uUXYZ" by 460*b1cdbd2cSJim Jagielski# "&#xUXYZ;", because the use xml saxparser does 461*b1cdbd2cSJim Jagielski# not know anything about this encoding. Therfore 462*b1cdbd2cSJim Jagielski# the xml file can keep standard encoding "UTF-8" 463*b1cdbd2cSJim Jagielski# and all strings with "\uUXYZ" do not need to 464*b1cdbd2cSJim Jagielski# be converted from the Java installer. 465*b1cdbd2cSJim Jagielski################################################### 466*b1cdbd2cSJim Jagielski 467*b1cdbd2cSJim Jagielskisub replace_javaencoding_in_string 468*b1cdbd2cSJim Jagielski{ 469*b1cdbd2cSJim Jagielski my ( $string ) = @_; 470*b1cdbd2cSJim Jagielski 471*b1cdbd2cSJim Jagielski while ( $string =~ /(\\u\w\w\w\w)/ ) 472*b1cdbd2cSJim Jagielski { 473*b1cdbd2cSJim Jagielski my $oldvalue = $1; 474*b1cdbd2cSJim Jagielski my $newvalue = ""; 475*b1cdbd2cSJim Jagielski if ( $oldvalue =~ /\\u(\w\w\w\w)/ ) 476*b1cdbd2cSJim Jagielski { 477*b1cdbd2cSJim Jagielski my $number = $1; 478*b1cdbd2cSJim Jagielski $newvalue = "&#x" . $number . ";"; 479*b1cdbd2cSJim Jagielski } 480*b1cdbd2cSJim Jagielski 481*b1cdbd2cSJim Jagielski $string =~ s/\Q$oldvalue\E/$newvalue/; 482*b1cdbd2cSJim Jagielski } 483*b1cdbd2cSJim Jagielski 484*b1cdbd2cSJim Jagielski return $string; 485*b1cdbd2cSJim Jagielski} 486*b1cdbd2cSJim Jagielski 487*b1cdbd2cSJim Jagielski################################################### 488*b1cdbd2cSJim Jagielski# Collecting language dependent entries from scp 489*b1cdbd2cSJim Jagielski# (Name and Description) 490*b1cdbd2cSJim Jagielski################################################### 491*b1cdbd2cSJim Jagielski 492*b1cdbd2cSJim Jagielskisub collect_lang_values 493*b1cdbd2cSJim Jagielski{ 494*b1cdbd2cSJim Jagielski my ($indent, $module, $xpdfile, $searchentry, $saveentry) = @_; 495*b1cdbd2cSJim Jagielski 496*b1cdbd2cSJim Jagielski foreach $key (keys %{$module}) 497*b1cdbd2cSJim Jagielski { 498*b1cdbd2cSJim Jagielski my $write_line = 0; 499*b1cdbd2cSJim Jagielski my $javalanguage = ""; 500*b1cdbd2cSJim Jagielski 501*b1cdbd2cSJim Jagielski if ( $key =~ /^\s*\Q$searchentry\E\s+\((\S+)\)\s*$/ ) # this are the language dependent keys 502*b1cdbd2cSJim Jagielski { 503*b1cdbd2cSJim Jagielski $language = $1; 504*b1cdbd2cSJim Jagielski $javalanguage = installer::languages::get_java_language($language); 505*b1cdbd2cSJim Jagielski $write_line = 1; 506*b1cdbd2cSJim Jagielski } 507*b1cdbd2cSJim Jagielski elsif ( $key =~ /^\s*\Q$searchentry\E\s*$/ ) # this are the language independent keys 508*b1cdbd2cSJim Jagielski { 509*b1cdbd2cSJim Jagielski $javalanguage = "en_US"; 510*b1cdbd2cSJim Jagielski $write_line = 1; 511*b1cdbd2cSJim Jagielski } 512*b1cdbd2cSJim Jagielski 513*b1cdbd2cSJim Jagielski if ( $write_line ) 514*b1cdbd2cSJim Jagielski { 515*b1cdbd2cSJim Jagielski my $value = $module->{$key}; 516*b1cdbd2cSJim Jagielski $value = replace_brackets_in_string($value); 517*b1cdbd2cSJim Jagielski $value = replace_javaencoding_in_string($value); 518*b1cdbd2cSJim Jagielski my $line = $indent . "<" . $saveentry . " lang=" . "\"" . $javalanguage . "\"" . ">" . $value . "<\/" . $saveentry . ">" . "\n"; 519*b1cdbd2cSJim Jagielski push(@{$xpdfile}, $line); 520*b1cdbd2cSJim Jagielski } 521*b1cdbd2cSJim Jagielski } 522*b1cdbd2cSJim Jagielski} 523*b1cdbd2cSJim Jagielski 524*b1cdbd2cSJim Jagielski################################################### 525*b1cdbd2cSJim Jagielski# Removing language dependent entries from 526*b1cdbd2cSJim Jagielski# module hash (Name and Description) 527*b1cdbd2cSJim Jagielski################################################### 528*b1cdbd2cSJim Jagielski 529*b1cdbd2cSJim Jagielskisub remove_lang_values 530*b1cdbd2cSJim Jagielski{ 531*b1cdbd2cSJim Jagielski my ($module, $searchentry) = @_; 532*b1cdbd2cSJim Jagielski 533*b1cdbd2cSJim Jagielski my $key = ""; 534*b1cdbd2cSJim Jagielski 535*b1cdbd2cSJim Jagielski foreach $key (keys %{$module}) 536*b1cdbd2cSJim Jagielski { 537*b1cdbd2cSJim Jagielski if ( $key =~ /^\s*\Q$searchentry\E\s+\((\S+)\)\s*$/ ) # this are the language dependent keys 538*b1cdbd2cSJim Jagielski { 539*b1cdbd2cSJim Jagielski delete($module->{$key}); 540*b1cdbd2cSJim Jagielski } 541*b1cdbd2cSJim Jagielski } 542*b1cdbd2cSJim Jagielski} 543*b1cdbd2cSJim Jagielski 544*b1cdbd2cSJim Jagielski################################################### 545*b1cdbd2cSJim Jagielski# Setting package install order 546*b1cdbd2cSJim Jagielski################################################### 547*b1cdbd2cSJim Jagielski 548*b1cdbd2cSJim Jagielskisub get_order_value 549*b1cdbd2cSJim Jagielski{ 550*b1cdbd2cSJim Jagielski my ( $module ) = @_; 551*b1cdbd2cSJim Jagielski 552*b1cdbd2cSJim Jagielski my $value = "1000"; # Setting the default value 553*b1cdbd2cSJim Jagielski 554*b1cdbd2cSJim Jagielski if ( $module->{'InstallOrder'} ) { $value = $module->{'InstallOrder'}; } 555*b1cdbd2cSJim Jagielski 556*b1cdbd2cSJim Jagielski return $value; 557*b1cdbd2cSJim Jagielski} 558*b1cdbd2cSJim Jagielski 559*b1cdbd2cSJim Jagielski################################################### 560*b1cdbd2cSJim Jagielski# Checking size of package 561*b1cdbd2cSJim Jagielski################################################### 562*b1cdbd2cSJim Jagielski 563*b1cdbd2cSJim Jagielskisub get_size_value 564*b1cdbd2cSJim Jagielski{ 565*b1cdbd2cSJim Jagielski my ( $packagename, $xpdinfo ) = @_; 566*b1cdbd2cSJim Jagielski 567*b1cdbd2cSJim Jagielski my $value = ""; 568*b1cdbd2cSJim Jagielski 569*b1cdbd2cSJim Jagielski if ( $xpdinfo->{'FileSize'} ) 570*b1cdbd2cSJim Jagielski { 571*b1cdbd2cSJim Jagielski $value = $xpdinfo->{'FileSize'}; 572*b1cdbd2cSJim Jagielski return $value; 573*b1cdbd2cSJim Jagielski } 574*b1cdbd2cSJim Jagielski 575*b1cdbd2cSJim Jagielski my $isrpmfile = 0; 576*b1cdbd2cSJim Jagielski if ( $packagename =~ /\.rpm\s*$/ ) { $isrpmfile = 1; } 577*b1cdbd2cSJim Jagielski 578*b1cdbd2cSJim Jagielski if (( $installer::globals::islinuxrpmbuild ) && ( $isrpmfile )) 579*b1cdbd2cSJim Jagielski { 580*b1cdbd2cSJim Jagielski # if ( ! $installer::globals::rpmquerycommand ) { installer::exiter::exit_program("ERROR: rpm not found for querying packages!", "get_size_value"); } 581*b1cdbd2cSJim Jagielski if ( ! $installer::globals::rpmquerycommand ) { $installer::globals::rpmquerycommand = "rpm"; } 582*b1cdbd2cSJim Jagielski 583*b1cdbd2cSJim Jagielski my $systemcall = "$installer::globals::rpmquerycommand -qp --queryformat \"\[\%\{FILESIZES\}\\n\]\" $packagename 2\>\&1 |"; 584*b1cdbd2cSJim Jagielski my $ld_library_backup = $ENV{LD_LIBRARY_PATH}; 585*b1cdbd2cSJim Jagielski if ( defined $ENV{SYSBASE}) { 586*b1cdbd2cSJim Jagielski my $sysbase = $ENV{SYSBASE}; 587*b1cdbd2cSJim Jagielski if ( !defined ($ld_library_backup) or ("$ld_library_backup" eq "") ) { 588*b1cdbd2cSJim Jagielski $ld_library_backup = "" if ! defined $ld_library_backup; 589*b1cdbd2cSJim Jagielski $ENV{LD_LIBRARY_PATH} = "$sysbase/usr/lib"; 590*b1cdbd2cSJim Jagielski } else { 591*b1cdbd2cSJim Jagielski $ENV{LD_LIBRARY_PATH} = "$ld_library_backup:$sysbase/lib"; 592*b1cdbd2cSJim Jagielski } 593*b1cdbd2cSJim Jagielski } 594*b1cdbd2cSJim Jagielski my ($rpmout, $error) = make_systemcall_allowing_error($systemcall, 0, 1); 595*b1cdbd2cSJim Jagielski $ENV{LD_LIBRARY_PATH} = $ld_library_backup; 596*b1cdbd2cSJim Jagielski # Evaluating an error, because of rpm problems with removed LD_LIBRARY_PATH 597*b1cdbd2cSJim Jagielski if ( $error ) 598*b1cdbd2cSJim Jagielski { 599*b1cdbd2cSJim Jagielski $installer::logger::Info->print("... trying /usr/bin/rpm ...\n"); 600*b1cdbd2cSJim Jagielski my $systemcall = "/usr/bin/rpm -qp --queryformat \"\[\%\{FILESIZES\}\\n\]\" $packagename 2\>\&1 |"; 601*b1cdbd2cSJim Jagielski ($rpmout, $error) = make_systemcall_allowing_error($systemcall, 0, 0); 602*b1cdbd2cSJim Jagielski if ( $error ) { installer::exiter::exit_program("ERROR: rpm failed to query package!", "get_size_value"); } 603*b1cdbd2cSJim Jagielski } 604*b1cdbd2cSJim Jagielski $value = do_sum($rpmout); # adding all filesizes in bytes 605*b1cdbd2cSJim Jagielski $value = $value/1000; 606*b1cdbd2cSJim Jagielski 607*b1cdbd2cSJim Jagielski my $ganzzahl = int $value; 608*b1cdbd2cSJim Jagielski if ($ganzzahl < $value) { $value = $ganzzahl + 1; } 609*b1cdbd2cSJim Jagielski else { $value = $ganzzahl; } 610*b1cdbd2cSJim Jagielski 611*b1cdbd2cSJim Jagielski my $rpmname = $packagename; 612*b1cdbd2cSJim Jagielski installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$rpmname); 613*b1cdbd2cSJim Jagielski $infoline = "Filesize $rpmname : $value\n"; 614*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 615*b1cdbd2cSJim Jagielski } 616*b1cdbd2cSJim Jagielski 617*b1cdbd2cSJim Jagielski if ( $installer::globals::issolarispkgbuild ) 618*b1cdbd2cSJim Jagielski { 619*b1cdbd2cSJim Jagielski my $filename = "pkgmap"; 620*b1cdbd2cSJim Jagielski $filename = $packagename . $installer::globals::separator . $filename; 621*b1cdbd2cSJim Jagielski $file = installer::files::read_file($filename); 622*b1cdbd2cSJim Jagielski 623*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$file}; $i++ ) 624*b1cdbd2cSJim Jagielski { 625*b1cdbd2cSJim Jagielski my $line = ${$file}[$i]; 626*b1cdbd2cSJim Jagielski if ( $line =~ /^\s*\:\s+\d+\s+(\d+?)\s+/ ) 627*b1cdbd2cSJim Jagielski { 628*b1cdbd2cSJim Jagielski $value = $1; 629*b1cdbd2cSJim Jagielski if ( ! ( $value%2 == 0 )) { $value = $value + 1; } 630*b1cdbd2cSJim Jagielski $value = $value/2; # not blocks, but kB 631*b1cdbd2cSJim Jagielski last; 632*b1cdbd2cSJim Jagielski } 633*b1cdbd2cSJim Jagielski } 634*b1cdbd2cSJim Jagielski } 635*b1cdbd2cSJim Jagielski 636*b1cdbd2cSJim Jagielski if ( $value eq "" ) { $value = "0"; } 637*b1cdbd2cSJim Jagielski 638*b1cdbd2cSJim Jagielski return $value; 639*b1cdbd2cSJim Jagielski} 640*b1cdbd2cSJim Jagielski 641*b1cdbd2cSJim Jagielski################################################### 642*b1cdbd2cSJim Jagielski# Checking md5 of package 643*b1cdbd2cSJim Jagielski################################################### 644*b1cdbd2cSJim Jagielski 645*b1cdbd2cSJim Jagielskisub get_md5_value 646*b1cdbd2cSJim Jagielski{ 647*b1cdbd2cSJim Jagielski my ( $packagename, $xpdinfo ) = @_; 648*b1cdbd2cSJim Jagielski 649*b1cdbd2cSJim Jagielski my $value = ""; 650*b1cdbd2cSJim Jagielski 651*b1cdbd2cSJim Jagielski if ( $xpdinfo->{'md5sum'} ) 652*b1cdbd2cSJim Jagielski { 653*b1cdbd2cSJim Jagielski $value = $xpdinfo->{'md5sum'}; 654*b1cdbd2cSJim Jagielski return $value; 655*b1cdbd2cSJim Jagielski } 656*b1cdbd2cSJim Jagielski 657*b1cdbd2cSJim Jagielski if ( $installer::globals::islinuxrpmbuild ) 658*b1cdbd2cSJim Jagielski { 659*b1cdbd2cSJim Jagielski my $md5file = "/usr/bin/md5sum"; 660*b1cdbd2cSJim Jagielski 661*b1cdbd2cSJim Jagielski if ( -x $md5file ) 662*b1cdbd2cSJim Jagielski { 663*b1cdbd2cSJim Jagielski my $systemcall = "$md5file $packagename 2\>\&1 |"; 664*b1cdbd2cSJim Jagielski my $md5out = make_systemcall($systemcall, 1); 665*b1cdbd2cSJim Jagielski $value = ${$md5out}[0]; 666*b1cdbd2cSJim Jagielski if ( $value =~ /^\s*(\S+?)\s+.*$/ ) 667*b1cdbd2cSJim Jagielski { 668*b1cdbd2cSJim Jagielski $value = $1; 669*b1cdbd2cSJim Jagielski } 670*b1cdbd2cSJim Jagielski 671*b1cdbd2cSJim Jagielski my $rpmname = $packagename; 672*b1cdbd2cSJim Jagielski installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$rpmname); 673*b1cdbd2cSJim Jagielski $infoline = "md5sum of $rpmname : $value\n"; 674*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 675*b1cdbd2cSJim Jagielski } 676*b1cdbd2cSJim Jagielski } 677*b1cdbd2cSJim Jagielski 678*b1cdbd2cSJim Jagielski return $value; 679*b1cdbd2cSJim Jagielski} 680*b1cdbd2cSJim Jagielski 681*b1cdbd2cSJim Jagielski################################################### 682*b1cdbd2cSJim Jagielski# Checking name of package 683*b1cdbd2cSJim Jagielski################################################### 684*b1cdbd2cSJim Jagielski 685*b1cdbd2cSJim Jagielskisub get_name_value 686*b1cdbd2cSJim Jagielski{ 687*b1cdbd2cSJim Jagielski my ( $packagename ) = @_; 688*b1cdbd2cSJim Jagielski 689*b1cdbd2cSJim Jagielski my $value = $packagename; 690*b1cdbd2cSJim Jagielski 691*b1cdbd2cSJim Jagielski # $packagename contains the complete path to the package 692*b1cdbd2cSJim Jagielski # Only the name of file or directory is required 693*b1cdbd2cSJim Jagielski 694*b1cdbd2cSJim Jagielski installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$value); 695*b1cdbd2cSJim Jagielski 696*b1cdbd2cSJim Jagielski return $value; 697*b1cdbd2cSJim Jagielski} 698*b1cdbd2cSJim Jagielski 699*b1cdbd2cSJim Jagielski################################################### 700*b1cdbd2cSJim Jagielski# Checking full package name (Linux only) 701*b1cdbd2cSJim Jagielski################################################### 702*b1cdbd2cSJim Jagielski 703*b1cdbd2cSJim Jagielskisub get_fullpkgname_value 704*b1cdbd2cSJim Jagielski{ 705*b1cdbd2cSJim Jagielski my ( $packagename, $xpdinfo ) = @_; 706*b1cdbd2cSJim Jagielski 707*b1cdbd2cSJim Jagielski my $value = ""; 708*b1cdbd2cSJim Jagielski my $isrpmfile = 0; 709*b1cdbd2cSJim Jagielski if ( $packagename =~ /\.rpm\s*$/ ) { $isrpmfile = 1; } 710*b1cdbd2cSJim Jagielski 711*b1cdbd2cSJim Jagielski if (( $installer::globals::islinuxrpmbuild ) && ( $isrpmfile )) 712*b1cdbd2cSJim Jagielski { 713*b1cdbd2cSJim Jagielski if ( $xpdinfo->{'FullPackageName'} ) 714*b1cdbd2cSJim Jagielski { 715*b1cdbd2cSJim Jagielski $value = $xpdinfo->{'FullPackageName'}; 716*b1cdbd2cSJim Jagielski return $value; 717*b1cdbd2cSJim Jagielski } 718*b1cdbd2cSJim Jagielski 719*b1cdbd2cSJim Jagielski # if ( ! $installer::globals::rpmquerycommand ) { installer::exiter::exit_program("ERROR: rpm not found for querying packages!", "get_fullpkgname_value"); } 720*b1cdbd2cSJim Jagielski if ( ! $installer::globals::rpmquerycommand ) { $installer::globals::rpmquerycommand = "rpm"; } 721*b1cdbd2cSJim Jagielski my $systemcall = "$installer::globals::rpmquerycommand -qp $packagename |"; 722*b1cdbd2cSJim Jagielski my $ld_library_backup = $ENV{LD_LIBRARY_PATH}; 723*b1cdbd2cSJim Jagielski if ( defined $ENV{SYSBASE}) { 724*b1cdbd2cSJim Jagielski my $sysbase = $ENV{SYSBASE}; 725*b1cdbd2cSJim Jagielski if ( !defined ($ld_library_backup) or ("$ld_library_backup" eq "") ) { 726*b1cdbd2cSJim Jagielski $ld_library_backup = "" if ! defined $ld_library_backup; 727*b1cdbd2cSJim Jagielski $ENV{LD_LIBRARY_PATH} = "$sysbase/usr/lib"; 728*b1cdbd2cSJim Jagielski } else { 729*b1cdbd2cSJim Jagielski $ENV{LD_LIBRARY_PATH} = "$ld_library_backup:$sysbase/lib"; 730*b1cdbd2cSJim Jagielski } 731*b1cdbd2cSJim Jagielski } 732*b1cdbd2cSJim Jagielski my ($returnarray, $error) = make_systemcall_allowing_error($systemcall, 0, 1); 733*b1cdbd2cSJim Jagielski $ENV{LD_LIBRARY_PATH} = $ld_library_backup; 734*b1cdbd2cSJim Jagielski # Evaluating an error, because of rpm problems with removed LD_LIBRARY_PATH 735*b1cdbd2cSJim Jagielski if ( $error ) 736*b1cdbd2cSJim Jagielski { 737*b1cdbd2cSJim Jagielski $installer::logger::Info->print("... trying /usr/bin/rpm ...\n"); 738*b1cdbd2cSJim Jagielski my $systemcall = "/usr/bin/rpm -qp $packagename |"; 739*b1cdbd2cSJim Jagielski ($returnarray, $error) = make_systemcall_allowing_error($systemcall, 0, 0); 740*b1cdbd2cSJim Jagielski if ( $error ) { installer::exiter::exit_program("ERROR: rpm failed to query package!", "get_fullpkgname_value"); } 741*b1cdbd2cSJim Jagielski } 742*b1cdbd2cSJim Jagielski $value = ${$returnarray}[0]; 743*b1cdbd2cSJim Jagielski installer::remover::remove_leading_and_ending_whitespaces(\$value); 744*b1cdbd2cSJim Jagielski 745*b1cdbd2cSJim Jagielski my $rpmname = $packagename; 746*b1cdbd2cSJim Jagielski installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$rpmname); 747*b1cdbd2cSJim Jagielski 748*b1cdbd2cSJim Jagielski $infoline = "Full package name from $rpmname: $value\n"; 749*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 750*b1cdbd2cSJim Jagielski } 751*b1cdbd2cSJim Jagielski 752*b1cdbd2cSJim Jagielski return $value; 753*b1cdbd2cSJim Jagielski} 754*b1cdbd2cSJim Jagielski 755*b1cdbd2cSJim Jagielski################################################### 756*b1cdbd2cSJim Jagielski# Checking package version (Solaris only) 757*b1cdbd2cSJim Jagielski################################################### 758*b1cdbd2cSJim Jagielski 759*b1cdbd2cSJim Jagielskisub get_pkgversion_value 760*b1cdbd2cSJim Jagielski{ 761*b1cdbd2cSJim Jagielski my ( $completepackagename, $xpdinfo ) = @_; 762*b1cdbd2cSJim Jagielski 763*b1cdbd2cSJim Jagielski my $value = ""; 764*b1cdbd2cSJim Jagielski 765*b1cdbd2cSJim Jagielski if ( $xpdinfo->{'PkgVersion'} ) 766*b1cdbd2cSJim Jagielski { 767*b1cdbd2cSJim Jagielski $value = $xpdinfo->{'PkgVersion'}; 768*b1cdbd2cSJim Jagielski return $value; 769*b1cdbd2cSJim Jagielski } 770*b1cdbd2cSJim Jagielski 771*b1cdbd2cSJim Jagielski if ( $installer::globals::issolarispkgbuild ) 772*b1cdbd2cSJim Jagielski { 773*b1cdbd2cSJim Jagielski my $pkgfile = "pkgparam"; 774*b1cdbd2cSJim Jagielski my $packagepath = $completepackagename; 775*b1cdbd2cSJim Jagielski installer::pathanalyzer::get_path_from_fullqualifiedname(\$packagepath); 776*b1cdbd2cSJim Jagielski 777*b1cdbd2cSJim Jagielski my $packagename = $completepackagename; 778*b1cdbd2cSJim Jagielski installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$packagename); 779*b1cdbd2cSJim Jagielski 780*b1cdbd2cSJim Jagielski my $systemcall = "$pkgfile -d $packagepath $packagename param VERSION 2\>\&1 |"; 781*b1cdbd2cSJim Jagielski my $returnarray = make_systemcall($systemcall, 0); 782*b1cdbd2cSJim Jagielski 783*b1cdbd2cSJim Jagielski $value = ${$returnarray}[0]; 784*b1cdbd2cSJim Jagielski installer::remover::remove_leading_and_ending_whitespaces(\$value); 785*b1cdbd2cSJim Jagielski } 786*b1cdbd2cSJim Jagielski 787*b1cdbd2cSJim Jagielski return $value; 788*b1cdbd2cSJim Jagielski} 789*b1cdbd2cSJim Jagielski 790*b1cdbd2cSJim Jagielski################################################### 791*b1cdbd2cSJim Jagielski# Writing subdirectory into xpd file 792*b1cdbd2cSJim Jagielski################################################### 793*b1cdbd2cSJim Jagielski 794*b1cdbd2cSJim Jagielskisub get_subdir_value 795*b1cdbd2cSJim Jagielski{ 796*b1cdbd2cSJim Jagielski my ( $packagename, $subdir, $module ) = @_; 797*b1cdbd2cSJim Jagielski 798*b1cdbd2cSJim Jagielski my $value = ""; 799*b1cdbd2cSJim Jagielski 800*b1cdbd2cSJim Jagielski if ( $subdir ) { $value = $subdir; } 801*b1cdbd2cSJim Jagielski 802*b1cdbd2cSJim Jagielski if ( $module->{'Subdir'} ) { $value = $module->{'Subdir'}; } 803*b1cdbd2cSJim Jagielski 804*b1cdbd2cSJim Jagielski return $value; 805*b1cdbd2cSJim Jagielski} 806*b1cdbd2cSJim Jagielski 807*b1cdbd2cSJim Jagielski################################################### 808*b1cdbd2cSJim Jagielski# Checking if package is relocatable 809*b1cdbd2cSJim Jagielski################################################### 810*b1cdbd2cSJim Jagielski 811*b1cdbd2cSJim Jagielskisub get_relocatable_value 812*b1cdbd2cSJim Jagielski{ 813*b1cdbd2cSJim Jagielski my ( $module ) = @_; 814*b1cdbd2cSJim Jagielski 815*b1cdbd2cSJim Jagielski my $value = "true"; 816*b1cdbd2cSJim Jagielski 817*b1cdbd2cSJim Jagielski my $styles = ""; 818*b1cdbd2cSJim Jagielski if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; } 819*b1cdbd2cSJim Jagielski if ( $styles =~ /\bNOTRELOCATABLE\b/ ) { $value = "false"; } 820*b1cdbd2cSJim Jagielski 821*b1cdbd2cSJim Jagielski return $value; 822*b1cdbd2cSJim Jagielski} 823*b1cdbd2cSJim Jagielski 824*b1cdbd2cSJim Jagielski################################################### 825*b1cdbd2cSJim Jagielski# Checking if package is relocatable 826*b1cdbd2cSJim Jagielski################################################### 827*b1cdbd2cSJim Jagielski 828*b1cdbd2cSJim Jagielskisub get_languagespecific_value 829*b1cdbd2cSJim Jagielski{ 830*b1cdbd2cSJim Jagielski my ( $islanguagemodule ) = @_; 831*b1cdbd2cSJim Jagielski 832*b1cdbd2cSJim Jagielski my $value = "false"; 833*b1cdbd2cSJim Jagielski 834*b1cdbd2cSJim Jagielski if ( defined $islanguagemodule && $islanguagemodule == 1 ) { $value = "true"; } 835*b1cdbd2cSJim Jagielski 836*b1cdbd2cSJim Jagielski return $value; 837*b1cdbd2cSJim Jagielski} 838*b1cdbd2cSJim Jagielski 839*b1cdbd2cSJim Jagielski####################################################### 840*b1cdbd2cSJim Jagielski# Adding the values of the array 841*b1cdbd2cSJim Jagielski####################################################### 842*b1cdbd2cSJim Jagielski 843*b1cdbd2cSJim Jagielskisub do_sum 844*b1cdbd2cSJim Jagielski{ 845*b1cdbd2cSJim Jagielski my ( $allnumbers ) = @_; 846*b1cdbd2cSJim Jagielski 847*b1cdbd2cSJim Jagielski my $sum = 0; 848*b1cdbd2cSJim Jagielski 849*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$allnumbers}; $i++ ) 850*b1cdbd2cSJim Jagielski { 851*b1cdbd2cSJim Jagielski $sum = $sum + ${$allnumbers}[$i]; 852*b1cdbd2cSJim Jagielski } 853*b1cdbd2cSJim Jagielski 854*b1cdbd2cSJim Jagielski return $sum; 855*b1cdbd2cSJim Jagielski} 856*b1cdbd2cSJim Jagielski 857*b1cdbd2cSJim Jagielski####################################################### 858*b1cdbd2cSJim Jagielski# Executing one system call 859*b1cdbd2cSJim Jagielski####################################################### 860*b1cdbd2cSJim Jagielski 861*b1cdbd2cSJim Jagielskisub make_systemcall 862*b1cdbd2cSJim Jagielski{ 863*b1cdbd2cSJim Jagielski my ( $systemcall, $logreturn ) = @_; 864*b1cdbd2cSJim Jagielski 865*b1cdbd2cSJim Jagielski my @returns = (); 866*b1cdbd2cSJim Jagielski 867*b1cdbd2cSJim Jagielski $installer::logger::Info->printf("... %s ...\n", $systemcall); 868*b1cdbd2cSJim Jagielski 869*b1cdbd2cSJim Jagielski open (REG, "$systemcall"); 870*b1cdbd2cSJim Jagielski while (<REG>) {push(@returns, $_); } 871*b1cdbd2cSJim Jagielski close (REG); 872*b1cdbd2cSJim Jagielski 873*b1cdbd2cSJim Jagielski my $returnvalue = $?; # $? contains the return value of the systemcall 874*b1cdbd2cSJim Jagielski 875*b1cdbd2cSJim Jagielski my $infoline = "Systemcall: $systemcall\n"; 876*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 877*b1cdbd2cSJim Jagielski 878*b1cdbd2cSJim Jagielski if ( $logreturn ) 879*b1cdbd2cSJim Jagielski { 880*b1cdbd2cSJim Jagielski foreach my $line (@returns) 881*b1cdbd2cSJim Jagielski { 882*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($line); 883*b1cdbd2cSJim Jagielski } 884*b1cdbd2cSJim Jagielski } 885*b1cdbd2cSJim Jagielski 886*b1cdbd2cSJim Jagielski if ($returnvalue) 887*b1cdbd2cSJim Jagielski { 888*b1cdbd2cSJim Jagielski $infoline = "ERROR: $systemcall\n"; 889*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 890*b1cdbd2cSJim Jagielski $error_occured = 1; 891*b1cdbd2cSJim Jagielski } 892*b1cdbd2cSJim Jagielski else 893*b1cdbd2cSJim Jagielski { 894*b1cdbd2cSJim Jagielski $infoline = "SUCCESS: $systemcall\n"; 895*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 896*b1cdbd2cSJim Jagielski } 897*b1cdbd2cSJim Jagielski 898*b1cdbd2cSJim Jagielski return \@returns; 899*b1cdbd2cSJim Jagielski} 900*b1cdbd2cSJim Jagielski 901*b1cdbd2cSJim Jagielski####################################################### 902*b1cdbd2cSJim Jagielski# Executing one system call 903*b1cdbd2cSJim Jagielski####################################################### 904*b1cdbd2cSJim Jagielski 905*b1cdbd2cSJim Jagielskisub make_systemcall_allowing_error 906*b1cdbd2cSJim Jagielski{ 907*b1cdbd2cSJim Jagielski my ( $systemcall, $logreturn, $can_fail ) = @_; 908*b1cdbd2cSJim Jagielski 909*b1cdbd2cSJim Jagielski my @returns = (); 910*b1cdbd2cSJim Jagielski 911*b1cdbd2cSJim Jagielski $installer::logger::Info->printf("... %s ...\n", $systemcall); 912*b1cdbd2cSJim Jagielski 913*b1cdbd2cSJim Jagielski open (REG, "$systemcall"); 914*b1cdbd2cSJim Jagielski while (<REG>) {push(@returns, $_); } 915*b1cdbd2cSJim Jagielski close (REG); 916*b1cdbd2cSJim Jagielski 917*b1cdbd2cSJim Jagielski my $returnvalue = $?; # $? contains the return value of the systemcall 918*b1cdbd2cSJim Jagielski 919*b1cdbd2cSJim Jagielski my $infoline = "Systemcall: $systemcall\n"; 920*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 921*b1cdbd2cSJim Jagielski 922*b1cdbd2cSJim Jagielski if ( $logreturn ) 923*b1cdbd2cSJim Jagielski { 924*b1cdbd2cSJim Jagielski foreach my $line (@returns) 925*b1cdbd2cSJim Jagielski { 926*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($line); 927*b1cdbd2cSJim Jagielski } 928*b1cdbd2cSJim Jagielski } 929*b1cdbd2cSJim Jagielski 930*b1cdbd2cSJim Jagielski if ($returnvalue) 931*b1cdbd2cSJim Jagielski { 932*b1cdbd2cSJim Jagielski if ( $can_fail ) 933*b1cdbd2cSJim Jagielski { 934*b1cdbd2cSJim Jagielski $infoline = "WARNING: Failed system call: $systemcall\n"; 935*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 936*b1cdbd2cSJim Jagielski $error_occured = 1; 937*b1cdbd2cSJim Jagielski } 938*b1cdbd2cSJim Jagielski else 939*b1cdbd2cSJim Jagielski { 940*b1cdbd2cSJim Jagielski $infoline = "ERROR: $systemcall\n"; 941*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 942*b1cdbd2cSJim Jagielski $error_occured = 1; 943*b1cdbd2cSJim Jagielski } 944*b1cdbd2cSJim Jagielski } 945*b1cdbd2cSJim Jagielski else 946*b1cdbd2cSJim Jagielski { 947*b1cdbd2cSJim Jagielski $infoline = "SUCCESS: $systemcall\n"; 948*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 949*b1cdbd2cSJim Jagielski } 950*b1cdbd2cSJim Jagielski 951*b1cdbd2cSJim Jagielski return (\@returns, $returnvalue); 952*b1cdbd2cSJim Jagielski} 953*b1cdbd2cSJim Jagielski 954*b1cdbd2cSJim Jagielski################################################### 955*b1cdbd2cSJim Jagielski# Setting product name tag 956*b1cdbd2cSJim Jagielski################################################### 957*b1cdbd2cSJim Jagielski 958*b1cdbd2cSJim Jagielskisub get_product_tag 959*b1cdbd2cSJim Jagielski{ 960*b1cdbd2cSJim Jagielski my ($allvariables, $indent) = @_; 961*b1cdbd2cSJim Jagielski 962*b1cdbd2cSJim Jagielski my $productname = $allvariables->{'LCONEWORDPRODUCTNAME'}; 963*b1cdbd2cSJim Jagielski my $tag = $indent . "<product " . "name=" . "\"" . $productname . "\">" . "\n"; 964*b1cdbd2cSJim Jagielski 965*b1cdbd2cSJim Jagielski return $tag; 966*b1cdbd2cSJim Jagielski} 967*b1cdbd2cSJim Jagielski 968*b1cdbd2cSJim Jagielski################################################### 969*b1cdbd2cSJim Jagielski# Macro tags 970*b1cdbd2cSJim Jagielski################################################### 971*b1cdbd2cSJim Jagielski 972*b1cdbd2cSJim Jagielskisub set_macro_tag 973*b1cdbd2cSJim Jagielski{ 974*b1cdbd2cSJim Jagielski my ($allvariables, $indent, $key) = @_; 975*b1cdbd2cSJim Jagielski 976*b1cdbd2cSJim Jagielski my $property = ""; 977*b1cdbd2cSJim Jagielski my $value = ""; 978*b1cdbd2cSJim Jagielski 979*b1cdbd2cSJim Jagielski if ( $key eq "product_name" ) { $property = "PRODUCTNAME"; } 980*b1cdbd2cSJim Jagielski elsif ( $key eq "product_version" ) { $property = "PRODUCTVERSION"; } 981*b1cdbd2cSJim Jagielski elsif ( $key eq "product_suffix" ) { $property = "PRODUCTEXTENSION"; } 982*b1cdbd2cSJim Jagielski elsif ( $key eq "product_fullname" ) { $property = "FULLPRODUCTNAME"; } 983*b1cdbd2cSJim Jagielski 984*b1cdbd2cSJim Jagielski if (( $property eq "PRODUCTNAME" ) || ( $property eq "PRODUCTVERSION" ) || ( $property eq "PRODUCTEXTENSION" )) 985*b1cdbd2cSJim Jagielski { 986*b1cdbd2cSJim Jagielski $value = $allvariables->{$property}; 987*b1cdbd2cSJim Jagielski } 988*b1cdbd2cSJim Jagielski 989*b1cdbd2cSJim Jagielski if ( $property eq "FULLPRODUCTNAME" ) 990*b1cdbd2cSJim Jagielski { 991*b1cdbd2cSJim Jagielski $value = $allvariables->{"PRODUCTNAME"} . " " . $allvariables->{"PRODUCTVERSION"}; 992*b1cdbd2cSJim Jagielski if ( $allvariables->{"PRODUCTEXTENSION"} ) { $value = $value . " " . $allvariables->{"PRODUCTEXTENSION"}; } 993*b1cdbd2cSJim Jagielski } 994*b1cdbd2cSJim Jagielski 995*b1cdbd2cSJim Jagielski my $tag = $indent . "<macro " . "key=" . "\"" . $key . "\">" . $value . "\<\/macro\>" . "\n"; 996*b1cdbd2cSJim Jagielski 997*b1cdbd2cSJim Jagielski return $tag; 998*b1cdbd2cSJim Jagielski 999*b1cdbd2cSJim Jagielski} 1000*b1cdbd2cSJim Jagielski 1001*b1cdbd2cSJim Jagielski################################################### 1002*b1cdbd2cSJim Jagielski# Setting the minor of the product version 1003*b1cdbd2cSJim Jagielski# Required to check for Major Upgrades. 1004*b1cdbd2cSJim Jagielski################################################### 1005*b1cdbd2cSJim Jagielski 1006*b1cdbd2cSJim Jagielskisub set_minor_tag 1007*b1cdbd2cSJim Jagielski{ 1008*b1cdbd2cSJim Jagielski my ($allvariables, $indent) = @_; 1009*b1cdbd2cSJim Jagielski 1010*b1cdbd2cSJim Jagielski my $productminor = 0; 1011*b1cdbd2cSJim Jagielski if ( $allvariables->{"PACKAGEVERSION"} ) 1012*b1cdbd2cSJim Jagielski { 1013*b1cdbd2cSJim Jagielski if ( $allvariables->{"PACKAGEVERSION"} =~ /^\s*\d+\.(\d+)/ ) { $productminor = $1; } 1014*b1cdbd2cSJim Jagielski } 1015*b1cdbd2cSJim Jagielski my $tag = $indent . "<productminor>" . $productminor . "</productminor>" . "\n"; 1016*b1cdbd2cSJim Jagielski 1017*b1cdbd2cSJim Jagielski return $tag; 1018*b1cdbd2cSJim Jagielski} 1019*b1cdbd2cSJim Jagielski 1020*b1cdbd2cSJim Jagielski################################################### 1021*b1cdbd2cSJim Jagielski# Setting the update behaviour 1022*b1cdbd2cSJim Jagielski################################################### 1023*b1cdbd2cSJim Jagielski 1024*b1cdbd2cSJim Jagielskisub set_update_tag 1025*b1cdbd2cSJim Jagielski{ 1026*b1cdbd2cSJim Jagielski my ($allvariables, $indent) = @_; 1027*b1cdbd2cSJim Jagielski 1028*b1cdbd2cSJim Jagielski my $updateflag = "false"; 1029*b1cdbd2cSJim Jagielski if ( $allvariables->{"DONTUPDATE"} ) { $updateflag = "true"; } 1030*b1cdbd2cSJim Jagielski my $tag = $indent . "<dontupdate>" . $updateflag . "</dontupdate>" . "\n"; 1031*b1cdbd2cSJim Jagielski 1032*b1cdbd2cSJim Jagielski return $tag; 1033*b1cdbd2cSJim Jagielski} 1034*b1cdbd2cSJim Jagielski 1035*b1cdbd2cSJim Jagielski################################################### 1036*b1cdbd2cSJim Jagielski# Setting the license dialog behaviour 1037*b1cdbd2cSJim Jagielski################################################### 1038*b1cdbd2cSJim Jagielski 1039*b1cdbd2cSJim Jagielskisub set_hideeula_tag 1040*b1cdbd2cSJim Jagielski{ 1041*b1cdbd2cSJim Jagielski my ($allvariables, $indent) = @_; 1042*b1cdbd2cSJim Jagielski 1043*b1cdbd2cSJim Jagielski my $hidelicenseflag = "false"; 1044*b1cdbd2cSJim Jagielski if ( $allvariables->{"HIDELICENSEDIALOG"} ) { $hidelicenseflag = "true"; } 1045*b1cdbd2cSJim Jagielski my $tag = $indent . "<hideeula>" . $hidelicenseflag . "</hideeula>" . "\n"; 1046*b1cdbd2cSJim Jagielski 1047*b1cdbd2cSJim Jagielski return $tag; 1048*b1cdbd2cSJim Jagielski} 1049*b1cdbd2cSJim Jagielski 1050*b1cdbd2cSJim Jagielski################################################### 1051*b1cdbd2cSJim Jagielski# Setting default directory 1052*b1cdbd2cSJim Jagielski################################################### 1053*b1cdbd2cSJim Jagielski 1054*b1cdbd2cSJim Jagielskisub set_defaultdir_tag 1055*b1cdbd2cSJim Jagielski{ 1056*b1cdbd2cSJim Jagielski my ($allvariables, $indent) = @_; 1057*b1cdbd2cSJim Jagielski 1058*b1cdbd2cSJim Jagielski my $defaultdir = ""; 1059*b1cdbd2cSJim Jagielski if ( $allvariables->{"DEFAULTDESTPATH"} ) { $defaultdir = $allvariables->{"DEFAULTDESTPATH"}; } 1060*b1cdbd2cSJim Jagielski my $tag = $indent . "<defaultdir>" . $defaultdir . "</defaultdir>" . "\n"; 1061*b1cdbd2cSJim Jagielski 1062*b1cdbd2cSJim Jagielski return $tag; 1063*b1cdbd2cSJim Jagielski} 1064*b1cdbd2cSJim Jagielski 1065*b1cdbd2cSJim Jagielski################################################### 1066*b1cdbd2cSJim Jagielski# Setting product directory 1067*b1cdbd2cSJim Jagielski################################################### 1068*b1cdbd2cSJim Jagielski 1069*b1cdbd2cSJim Jagielskisub set_productdir_tag 1070*b1cdbd2cSJim Jagielski{ 1071*b1cdbd2cSJim Jagielski my ($allvariables, $indent) = @_; 1072*b1cdbd2cSJim Jagielski 1073*b1cdbd2cSJim Jagielski my $productdir = ""; 1074*b1cdbd2cSJim Jagielski if ( $allvariables->{"UNIXPRODUCTNAME"} ) 1075*b1cdbd2cSJim Jagielski { 1076*b1cdbd2cSJim Jagielski $productdir = $allvariables->{"UNIXPRODUCTNAME"}; 1077*b1cdbd2cSJim Jagielski 1078*b1cdbd2cSJim Jagielski if ( $allvariables->{"BRANDPACKAGEVERSION"} ) 1079*b1cdbd2cSJim Jagielski { 1080*b1cdbd2cSJim Jagielski $productdir = $productdir . $allvariables->{"BRANDPACKAGEVERSION"}; 1081*b1cdbd2cSJim Jagielski# if ( $allvariables->{"LCPRODUCTEXTENSION"} ) { $productdir = $productdir . $allvariables->{"LCPRODUCTEXTENSION"}; } 1082*b1cdbd2cSJim Jagielski } 1083*b1cdbd2cSJim Jagielski else 1084*b1cdbd2cSJim Jagielski { 1085*b1cdbd2cSJim Jagielski if ( $allvariables->{"PRODUCTVERSION"} ) 1086*b1cdbd2cSJim Jagielski { 1087*b1cdbd2cSJim Jagielski $productdir = $productdir . $allvariables->{"PRODUCTVERSION"}; 1088*b1cdbd2cSJim Jagielski } 1089*b1cdbd2cSJim Jagielski } 1090*b1cdbd2cSJim Jagielski } 1091*b1cdbd2cSJim Jagielski my $tag = $indent . "<productdir>" . $productdir . "</productdir>" . "\n"; 1092*b1cdbd2cSJim Jagielski 1093*b1cdbd2cSJim Jagielski return $tag; 1094*b1cdbd2cSJim Jagielski} 1095*b1cdbd2cSJim Jagielski 1096*b1cdbd2cSJim Jagielski##################################################### 1097*b1cdbd2cSJim Jagielski# Setting the package directory in installation set 1098*b1cdbd2cSJim Jagielski##################################################### 1099*b1cdbd2cSJim Jagielski 1100*b1cdbd2cSJim Jagielskisub set_packagedir_tag 1101*b1cdbd2cSJim Jagielski{ 1102*b1cdbd2cSJim Jagielski my ($indent) = @_; 1103*b1cdbd2cSJim Jagielski 1104*b1cdbd2cSJim Jagielski my $tag = $indent . "<packagedirectory>" . $installer::globals::epmoutpath . "</packagedirectory>" . "\n"; 1105*b1cdbd2cSJim Jagielski 1106*b1cdbd2cSJim Jagielski return $tag; 1107*b1cdbd2cSJim Jagielski} 1108*b1cdbd2cSJim Jagielski 1109*b1cdbd2cSJim Jagielski################################################### 1110*b1cdbd2cSJim Jagielski# Setting the packagetype of installation set 1111*b1cdbd2cSJim Jagielski################################################### 1112*b1cdbd2cSJim Jagielski 1113*b1cdbd2cSJim Jagielskisub set_packagetype_tag 1114*b1cdbd2cSJim Jagielski{ 1115*b1cdbd2cSJim Jagielski my ($indent) = @_; 1116*b1cdbd2cSJim Jagielski 1117*b1cdbd2cSJim Jagielski my $tag = $indent . "<packageformat>" . $installer::globals::packageformat . "</packageformat>" . "\n"; 1118*b1cdbd2cSJim Jagielski 1119*b1cdbd2cSJim Jagielski return $tag; 1120*b1cdbd2cSJim Jagielski} 1121*b1cdbd2cSJim Jagielski 1122*b1cdbd2cSJim Jagielski################################################### 1123*b1cdbd2cSJim Jagielski# Setting the architecture of installation set 1124*b1cdbd2cSJim Jagielski################################################### 1125*b1cdbd2cSJim Jagielski 1126*b1cdbd2cSJim Jagielskisub set_architecture_tag 1127*b1cdbd2cSJim Jagielski{ 1128*b1cdbd2cSJim Jagielski my ($indent) = @_; 1129*b1cdbd2cSJim Jagielski 1130*b1cdbd2cSJim Jagielski my $architecture = ""; 1131*b1cdbd2cSJim Jagielski if ( $installer::globals::issolarissparcbuild ) { $architecture = "sparc"; } 1132*b1cdbd2cSJim Jagielski if ( $installer::globals::issolarisx86build ) { $architecture = "i386"; } 1133*b1cdbd2cSJim Jagielski 1134*b1cdbd2cSJim Jagielski my $tag = $indent . "<architecture>" . $architecture . "</architecture>" . "\n"; 1135*b1cdbd2cSJim Jagielski 1136*b1cdbd2cSJim Jagielski return $tag; 1137*b1cdbd2cSJim Jagielski} 1138*b1cdbd2cSJim Jagielski 1139*b1cdbd2cSJim Jagielski################################################### 1140*b1cdbd2cSJim Jagielski# Setting the multi language tag 1141*b1cdbd2cSJim Jagielski################################################### 1142*b1cdbd2cSJim Jagielski 1143*b1cdbd2cSJim Jagielskisub set_multilanguage_tag 1144*b1cdbd2cSJim Jagielski{ 1145*b1cdbd2cSJim Jagielski my ($indent) = @_; 1146*b1cdbd2cSJim Jagielski 1147*b1cdbd2cSJim Jagielski my $value = "false"; 1148*b1cdbd2cSJim Jagielski if ( $installer::globals::ismultilingual == 1 ) { $value = "true"; } 1149*b1cdbd2cSJim Jagielski 1150*b1cdbd2cSJim Jagielski my $tag = $indent . "<multilingual>" . $value . "</multilingual>" . "\n"; 1151*b1cdbd2cSJim Jagielski 1152*b1cdbd2cSJim Jagielski return $tag; 1153*b1cdbd2cSJim Jagielski} 1154*b1cdbd2cSJim Jagielski 1155*b1cdbd2cSJim Jagielski################################################### 1156*b1cdbd2cSJim Jagielski# Setting the language tag 1157*b1cdbd2cSJim Jagielski################################################### 1158*b1cdbd2cSJim Jagielski 1159*b1cdbd2cSJim Jagielskisub set_language_tag 1160*b1cdbd2cSJim Jagielski{ 1161*b1cdbd2cSJim Jagielski my ($languagestringref, $indent) = @_; 1162*b1cdbd2cSJim Jagielski 1163*b1cdbd2cSJim Jagielski my $tag = $indent . "<languages>" . $$languagestringref . "</languages>" . "\n"; 1164*b1cdbd2cSJim Jagielski 1165*b1cdbd2cSJim Jagielski return $tag; 1166*b1cdbd2cSJim Jagielski} 1167*b1cdbd2cSJim Jagielski 1168*b1cdbd2cSJim Jagielski################################################### 1169*b1cdbd2cSJim Jagielski# Collecting content for product xpd file 1170*b1cdbd2cSJim Jagielski################################################### 1171*b1cdbd2cSJim Jagielski 1172*b1cdbd2cSJim Jagielski# <?xml version='1.0' encoding='utf-8'?> 1173*b1cdbd2cSJim Jagielski# 1174*b1cdbd2cSJim Jagielski# <!-- General application description --> 1175*b1cdbd2cSJim Jagielski# 1176*b1cdbd2cSJim Jagielski# <product name="openoffice"> 1177*b1cdbd2cSJim Jagielski# <macro key="product_name">Sun OpenOffice.org</macro> 1178*b1cdbd2cSJim Jagielski# <macro key="product_version">1.0</macro> 1179*b1cdbd2cSJim Jagielski# <macro key="product_suffix">Mephisto</macro> 1180*b1cdbd2cSJim Jagielski# <macro key="product_fullname">Sun OpenOffice.org 1.0 Mephisto</macro> 1181*b1cdbd2cSJim Jagielski# <defaultdir>/opt/Sun/OpenOffice.org-Mephisto</defaultdir> 1182*b1cdbd2cSJim Jagielski# </product> 1183*b1cdbd2cSJim Jagielski 1184*b1cdbd2cSJim Jagielskisub get_setup_file_content 1185*b1cdbd2cSJim Jagielski{ 1186*b1cdbd2cSJim Jagielski my ($allvariables, $languagestringref) = @_; 1187*b1cdbd2cSJim Jagielski 1188*b1cdbd2cSJim Jagielski my @xpdfile = (); 1189*b1cdbd2cSJim Jagielski my $noindent = ""; 1190*b1cdbd2cSJim Jagielski my $singleindent = " "; 1191*b1cdbd2cSJim Jagielski 1192*b1cdbd2cSJim Jagielski my $line = "<?xml version='1.0' encoding='utf-8'?>\n\n"; 1193*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1194*b1cdbd2cSJim Jagielski $line = "<!-- General application description -->\n\n"; 1195*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1196*b1cdbd2cSJim Jagielski 1197*b1cdbd2cSJim Jagielski my $tag = get_product_tag($allvariables, $noindent); 1198*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1199*b1cdbd2cSJim Jagielski 1200*b1cdbd2cSJim Jagielski $tag = set_macro_tag($allvariables, $singleindent, "product_name"); 1201*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1202*b1cdbd2cSJim Jagielski $tag = set_macro_tag($allvariables, $singleindent, "product_version"); 1203*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1204*b1cdbd2cSJim Jagielski $tag = set_macro_tag($allvariables, $singleindent, "product_suffix"); 1205*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1206*b1cdbd2cSJim Jagielski $tag = set_macro_tag($allvariables, $singleindent, "product_fullname"); 1207*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1208*b1cdbd2cSJim Jagielski 1209*b1cdbd2cSJim Jagielski $tag = set_defaultdir_tag($allvariables, $singleindent); 1210*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1211*b1cdbd2cSJim Jagielski 1212*b1cdbd2cSJim Jagielski $tag = set_productdir_tag($allvariables, $singleindent); 1213*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1214*b1cdbd2cSJim Jagielski 1215*b1cdbd2cSJim Jagielski $tag = set_minor_tag($allvariables, $singleindent); 1216*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1217*b1cdbd2cSJim Jagielski 1218*b1cdbd2cSJim Jagielski $tag = set_update_tag($allvariables, $singleindent); 1219*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1220*b1cdbd2cSJim Jagielski 1221*b1cdbd2cSJim Jagielski $tag = set_packagedir_tag($singleindent); 1222*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1223*b1cdbd2cSJim Jagielski 1224*b1cdbd2cSJim Jagielski $tag = set_packagetype_tag($singleindent); 1225*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1226*b1cdbd2cSJim Jagielski 1227*b1cdbd2cSJim Jagielski $tag = set_architecture_tag($singleindent); 1228*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1229*b1cdbd2cSJim Jagielski 1230*b1cdbd2cSJim Jagielski $tag = set_multilanguage_tag($singleindent); 1231*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1232*b1cdbd2cSJim Jagielski 1233*b1cdbd2cSJim Jagielski $tag = set_language_tag($languagestringref, $singleindent); 1234*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1235*b1cdbd2cSJim Jagielski 1236*b1cdbd2cSJim Jagielski $tag = set_hideeula_tag($allvariables, $singleindent); 1237*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1238*b1cdbd2cSJim Jagielski 1239*b1cdbd2cSJim Jagielski $tag = get_end_tag("product", $noindent); 1240*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1241*b1cdbd2cSJim Jagielski 1242*b1cdbd2cSJim Jagielski return \@xpdfile; 1243*b1cdbd2cSJim Jagielski} 1244*b1cdbd2cSJim Jagielski 1245*b1cdbd2cSJim Jagielski################################################### 1246*b1cdbd2cSJim Jagielski# Collecting content for xpd file 1247*b1cdbd2cSJim Jagielski################################################### 1248*b1cdbd2cSJim Jagielski 1249*b1cdbd2cSJim Jagielskisub get_file_content 1250*b1cdbd2cSJim Jagielski{ 1251*b1cdbd2cSJim Jagielski my ( $module, $packagename, $solslanguage, $linkpackage, $isemptyparent, $subdir, $islanguagemodule, $onelanguage, $xpdinfo ) = @_; 1252*b1cdbd2cSJim Jagielski 1253*b1cdbd2cSJim Jagielski my @xpdfile = (); 1254*b1cdbd2cSJim Jagielski my $value = ""; 1255*b1cdbd2cSJim Jagielski my $line = ""; 1256*b1cdbd2cSJim Jagielski my $noindent = ""; 1257*b1cdbd2cSJim Jagielski my $singleindent = " "; 1258*b1cdbd2cSJim Jagielski my $doubleindent = $singleindent . $singleindent; 1259*b1cdbd2cSJim Jagielski 1260*b1cdbd2cSJim Jagielski my ( $tag, $parentgid ) = get_package_tag($module, $noindent, $linkpackage); 1261*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1262*b1cdbd2cSJim Jagielski 1263*b1cdbd2cSJim Jagielski # start of installunit tag -> using info from scp module 1264*b1cdbd2cSJim Jagielski 1265*b1cdbd2cSJim Jagielski $tag = get_display_tag($module, $singleindent); 1266*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1267*b1cdbd2cSJim Jagielski 1268*b1cdbd2cSJim Jagielski $value = get_sortkey_value($module); 1269*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "sortkey", $value); 1270*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1271*b1cdbd2cSJim Jagielski 1272*b1cdbd2cSJim Jagielski $value = get_default_value($module); 1273*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "default", $value); 1274*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1275*b1cdbd2cSJim Jagielski 1276*b1cdbd2cSJim Jagielski $value = get_showinuserinstall_value($module); 1277*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "showinuserinstall", $value); 1278*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1279*b1cdbd2cSJim Jagielski 1280*b1cdbd2cSJim Jagielski $value = get_userinstallonly_value($module); 1281*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "showinuserinstallonly", $value); 1282*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1283*b1cdbd2cSJim Jagielski 1284*b1cdbd2cSJim Jagielski $value = get_dontuninstall_value($module); 1285*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "dontuninstall", $value); 1286*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1287*b1cdbd2cSJim Jagielski 1288*b1cdbd2cSJim Jagielski $value = get_checksolaris_value($module); 1289*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "checksolaris", $value); 1290*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1291*b1cdbd2cSJim Jagielski 1292*b1cdbd2cSJim Jagielski $value = get_isupdatepackage_value($module); 1293*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "isupdatepackage", $value); 1294*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1295*b1cdbd2cSJim Jagielski 1296*b1cdbd2cSJim Jagielski $value = get_showmultilingualonly_value($module); 1297*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "showmultilingualonly", $value); 1298*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1299*b1cdbd2cSJim Jagielski 1300*b1cdbd2cSJim Jagielski $value = get_applicationmodule_value($module); 1301*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "applicationmodule", $value); 1302*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1303*b1cdbd2cSJim Jagielski 1304*b1cdbd2cSJim Jagielski $value = get_isjavamodule_value($module); 1305*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "isjavapackage", $value); 1306*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1307*b1cdbd2cSJim Jagielski 1308*b1cdbd2cSJim Jagielski $value = get_installcanfail_value($module); 1309*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "installcanfail", $value); 1310*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1311*b1cdbd2cSJim Jagielski 1312*b1cdbd2cSJim Jagielski $value = get_forceintoupdate_value($module); 1313*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "forceintoupdate", $value); 1314*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1315*b1cdbd2cSJim Jagielski 1316*b1cdbd2cSJim Jagielski $value = get_useforce_value($module); 1317*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "useforce", $value); 1318*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1319*b1cdbd2cSJim Jagielski 1320*b1cdbd2cSJim Jagielski # iterating over all languages to get names and descriptions 1321*b1cdbd2cSJim Jagielski collect_lang_values($doubleindent, $module, \@xpdfile, "Name", "name"); 1322*b1cdbd2cSJim Jagielski collect_lang_values($doubleindent, $module, \@xpdfile, "Description", "description"); 1323*b1cdbd2cSJim Jagielski 1324*b1cdbd2cSJim Jagielski $tag = get_end_tag("display", $singleindent); 1325*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1326*b1cdbd2cSJim Jagielski 1327*b1cdbd2cSJim Jagielski # end of display tag 1328*b1cdbd2cSJim Jagielski 1329*b1cdbd2cSJim Jagielski if ( ! $isemptyparent ) 1330*b1cdbd2cSJim Jagielski { 1331*b1cdbd2cSJim Jagielski # start of installunit tag -> using info from package defined in packagelist 1332*b1cdbd2cSJim Jagielski 1333*b1cdbd2cSJim Jagielski $tag = get_installunit_tag($singleindent); 1334*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1335*b1cdbd2cSJim Jagielski 1336*b1cdbd2cSJim Jagielski $value = get_size_value($packagename, $xpdinfo); 1337*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "size", $value); 1338*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1339*b1cdbd2cSJim Jagielski 1340*b1cdbd2cSJim Jagielski $value = get_order_value($module); 1341*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "installorder", $value); 1342*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1343*b1cdbd2cSJim Jagielski 1344*b1cdbd2cSJim Jagielski $value = get_md5_value($packagename, $xpdinfo); 1345*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "md5", $value); 1346*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1347*b1cdbd2cSJim Jagielski 1348*b1cdbd2cSJim Jagielski $value = get_name_value($packagename); 1349*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "name", $value); 1350*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1351*b1cdbd2cSJim Jagielski 1352*b1cdbd2cSJim Jagielski $value = get_fullpkgname_value($packagename, $xpdinfo); 1353*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "fullpkgname", $value); 1354*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1355*b1cdbd2cSJim Jagielski 1356*b1cdbd2cSJim Jagielski $value = get_pkgversion_value($packagename, $xpdinfo); 1357*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "pkgversion", $value); 1358*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1359*b1cdbd2cSJim Jagielski 1360*b1cdbd2cSJim Jagielski $value = get_subdir_value($packagename, $subdir, $module); 1361*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "subdir", $value); 1362*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1363*b1cdbd2cSJim Jagielski 1364*b1cdbd2cSJim Jagielski $value = get_relocatable_value($module); 1365*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "relocatable", $value); 1366*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1367*b1cdbd2cSJim Jagielski 1368*b1cdbd2cSJim Jagielski $value = get_languagespecific_value($islanguagemodule); 1369*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "languagespecific", $value); 1370*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1371*b1cdbd2cSJim Jagielski 1372*b1cdbd2cSJim Jagielski $value = $onelanguage; 1373*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "language", $value); 1374*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1375*b1cdbd2cSJim Jagielski 1376*b1cdbd2cSJim Jagielski $line = get_tag_line($doubleindent, "solarislanguage", $solslanguage); 1377*b1cdbd2cSJim Jagielski push(@xpdfile, $line); 1378*b1cdbd2cSJim Jagielski 1379*b1cdbd2cSJim Jagielski $tag = get_end_tag("installunit", $singleindent); 1380*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1381*b1cdbd2cSJim Jagielski 1382*b1cdbd2cSJim Jagielski # end of installunit tag 1383*b1cdbd2cSJim Jagielski } 1384*b1cdbd2cSJim Jagielski 1385*b1cdbd2cSJim Jagielski $tag = get_end_tag("package", $noindent); 1386*b1cdbd2cSJim Jagielski push(@xpdfile, $tag); 1387*b1cdbd2cSJim Jagielski 1388*b1cdbd2cSJim Jagielski return ( \@xpdfile, $parentgid ); 1389*b1cdbd2cSJim Jagielski} 1390*b1cdbd2cSJim Jagielski 1391*b1cdbd2cSJim Jagielski################################################### 1392*b1cdbd2cSJim Jagielski# Setting xpd file name 1393*b1cdbd2cSJim Jagielski################################################### 1394*b1cdbd2cSJim Jagielski 1395*b1cdbd2cSJim Jagielskisub get_xpd_filename 1396*b1cdbd2cSJim Jagielski{ 1397*b1cdbd2cSJim Jagielski my ($modulegid, $linkpackage) = @_; 1398*b1cdbd2cSJim Jagielski 1399*b1cdbd2cSJim Jagielski if ( $linkpackage ) { $modulegid = $modulegid . "u"; } 1400*b1cdbd2cSJim Jagielski 1401*b1cdbd2cSJim Jagielski my $filename = $modulegid . ".xpd"; 1402*b1cdbd2cSJim Jagielski 1403*b1cdbd2cSJim Jagielski return $filename; 1404*b1cdbd2cSJim Jagielski} 1405*b1cdbd2cSJim Jagielski 1406*b1cdbd2cSJim Jagielski################################################### 1407*b1cdbd2cSJim Jagielski# Determine, which package was created newly 1408*b1cdbd2cSJim Jagielski################################################### 1409*b1cdbd2cSJim Jagielski 1410*b1cdbd2cSJim Jagielskisub determine_new_packagename 1411*b1cdbd2cSJim Jagielski{ 1412*b1cdbd2cSJim Jagielski my ( $installdir, $subdir, $xpdinfo ) = @_; 1413*b1cdbd2cSJim Jagielski 1414*b1cdbd2cSJim Jagielski my $newpackage = ""; 1415*b1cdbd2cSJim Jagielski $installdir =~ s/\Q$installer::globals::separator\E\s*$//; 1416*b1cdbd2cSJim Jagielski my $directory = $installdir . $installer::globals::separator . $subdir; 1417*b1cdbd2cSJim Jagielski $directory =~ s/\Q$installer::globals::separator\E\s*$//; 1418*b1cdbd2cSJim Jagielski 1419*b1cdbd2cSJim Jagielski if ( $xpdinfo->{'RealPackageName'} ) 1420*b1cdbd2cSJim Jagielski { 1421*b1cdbd2cSJim Jagielski $newpackage = $directory . $installer::globals::separator . $xpdinfo->{'RealPackageName'}; 1422*b1cdbd2cSJim Jagielski push(@installer::globals::currentcontent, $newpackage); 1423*b1cdbd2cSJim Jagielski return $newpackage; 1424*b1cdbd2cSJim Jagielski } 1425*b1cdbd2cSJim Jagielski 1426*b1cdbd2cSJim Jagielski my ($newcontent, $allcontent) = installer::systemactions::find_new_content_in_directory($directory, \@installer::globals::currentcontent); 1427*b1cdbd2cSJim Jagielski @installer::globals::currentcontent = (); 1428*b1cdbd2cSJim Jagielski foreach my $element ( @{$allcontent} ) { push(@installer::globals::currentcontent, $element); } 1429*b1cdbd2cSJim Jagielski 1430*b1cdbd2cSJim Jagielski my $newentriesnumber = $#{$newcontent} + 1; 1431*b1cdbd2cSJim Jagielski if ( $newentriesnumber > 1 ) { installer::exiter::exit_program("ERROR: More than one new package in directory $directory", "determine_new_packagename (xpdinstaller)"); } 1432*b1cdbd2cSJim Jagielski elsif ( $newentriesnumber < 1 ) { installer::exiter::exit_program("ERROR: No new package in directory $directory", "determine_new_packagename (xpdinstaller)"); } 1433*b1cdbd2cSJim Jagielski $newpackage = ${$newcontent}[0]; 1434*b1cdbd2cSJim Jagielski 1435*b1cdbd2cSJim Jagielski return $newpackage; 1436*b1cdbd2cSJim Jagielski} 1437*b1cdbd2cSJim Jagielski 1438*b1cdbd2cSJim Jagielski################################################### 1439*b1cdbd2cSJim Jagielski# Checking, if the parentgid is defined in 1440*b1cdbd2cSJim Jagielski# another package 1441*b1cdbd2cSJim Jagielski################################################### 1442*b1cdbd2cSJim Jagielski 1443*b1cdbd2cSJim Jagielskisub is_empty_parent 1444*b1cdbd2cSJim Jagielski{ 1445*b1cdbd2cSJim Jagielski my ($gid, $packages) = @_; 1446*b1cdbd2cSJim Jagielski 1447*b1cdbd2cSJim Jagielski my $is_empty_parent = 1; 1448*b1cdbd2cSJim Jagielski 1449*b1cdbd2cSJim Jagielski for ( my $k = 0; $k <= $#{$packages}; $k++ ) 1450*b1cdbd2cSJim Jagielski { 1451*b1cdbd2cSJim Jagielski my $onepackage = ${$packages}[$k]; 1452*b1cdbd2cSJim Jagielski my $packagegid = $onepackage->{'module'}; 1453*b1cdbd2cSJim Jagielski 1454*b1cdbd2cSJim Jagielski if ( $packagegid eq $gid ) 1455*b1cdbd2cSJim Jagielski { 1456*b1cdbd2cSJim Jagielski $is_empty_parent = 0; 1457*b1cdbd2cSJim Jagielski last; 1458*b1cdbd2cSJim Jagielski } 1459*b1cdbd2cSJim Jagielski } 1460*b1cdbd2cSJim Jagielski 1461*b1cdbd2cSJim Jagielski return $is_empty_parent; 1462*b1cdbd2cSJim Jagielski} 1463*b1cdbd2cSJim Jagielski 1464*b1cdbd2cSJim Jagielski################################################### 1465*b1cdbd2cSJim Jagielski# Creating additional xpd files for empty parents 1466*b1cdbd2cSJim Jagielski################################################### 1467*b1cdbd2cSJim Jagielski 1468*b1cdbd2cSJim Jagielskisub create_emptyparents_xpd_file 1469*b1cdbd2cSJim Jagielski{ 1470*b1cdbd2cSJim Jagielski my ($parentgid, $modulesarrayref, $xpddir) = @_; 1471*b1cdbd2cSJim Jagielski 1472*b1cdbd2cSJim Jagielski my $module = get_module($parentgid, $modulesarrayref); 1473*b1cdbd2cSJim Jagielski my $grandpagid = ""; 1474*b1cdbd2cSJim Jagielski 1475*b1cdbd2cSJim Jagielski if ( $module ne "" ) 1476*b1cdbd2cSJim Jagielski { 1477*b1cdbd2cSJim Jagielski my $packagename = ""; 1478*b1cdbd2cSJim Jagielski # all content saved in scp is now available and can be used to create the xpd file 1479*b1cdbd2cSJim Jagielski my ( $xpdfile, $newparentgid ) = get_file_content($module, $packagename, "", 0, 1, "", 0, "", ""); 1480*b1cdbd2cSJim Jagielski 1481*b1cdbd2cSJim Jagielski $grandpagid = $newparentgid; 1482*b1cdbd2cSJim Jagielski 1483*b1cdbd2cSJim Jagielski my $xpdfilename = get_xpd_filename($parentgid, 0); 1484*b1cdbd2cSJim Jagielski $xpdfilename = $xpddir . $installer::globals::separator . $xpdfilename; 1485*b1cdbd2cSJim Jagielski 1486*b1cdbd2cSJim Jagielski installer::files::save_file($xpdfilename, $xpdfile); 1487*b1cdbd2cSJim Jagielski push(@installer::globals::allxpdfiles, $xpdfilename); 1488*b1cdbd2cSJim Jagielski my $infoline = "Saving xpd file: $xpdfilename\n"; 1489*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1490*b1cdbd2cSJim Jagielski } 1491*b1cdbd2cSJim Jagielski 1492*b1cdbd2cSJim Jagielski # push(@installer::globals::emptyxpdparents, $parentgid); 1493*b1cdbd2cSJim Jagielski push( @installer::globals::createdxpdfiles, $parentgid); 1494*b1cdbd2cSJim Jagielski 1495*b1cdbd2cSJim Jagielski return $grandpagid; 1496*b1cdbd2cSJim Jagielski} 1497*b1cdbd2cSJim Jagielski 1498*b1cdbd2cSJim Jagielski################################################### 1499*b1cdbd2cSJim Jagielski# Creating additional xpd files for empty parents 1500*b1cdbd2cSJim Jagielski################################################### 1501*b1cdbd2cSJim Jagielski 1502*b1cdbd2cSJim Jagielskisub filter_content_from_xpdfile 1503*b1cdbd2cSJim Jagielski{ 1504*b1cdbd2cSJim Jagielski my ($xpdfile) = @_; 1505*b1cdbd2cSJim Jagielski 1506*b1cdbd2cSJim Jagielski my @newxpdfile = (); 1507*b1cdbd2cSJim Jagielski 1508*b1cdbd2cSJim Jagielski my $include = 1; 1509*b1cdbd2cSJim Jagielski 1510*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$xpdfile}; $i++ ) 1511*b1cdbd2cSJim Jagielski { 1512*b1cdbd2cSJim Jagielski my $line = ${$xpdfile}[$i]; 1513*b1cdbd2cSJim Jagielski 1514*b1cdbd2cSJim Jagielski if (( $line =~ /^\s*\<installunit/ ) && ( $include )) { $include = 0; } 1515*b1cdbd2cSJim Jagielski if ( $include ) { push(@newxpdfile, $line); } 1516*b1cdbd2cSJim Jagielski if (( $line =~ /^\s*\<\/installunit/ ) && ( ! $include )) { $include = 1; } 1517*b1cdbd2cSJim Jagielski } 1518*b1cdbd2cSJim Jagielski 1519*b1cdbd2cSJim Jagielski return \@newxpdfile; 1520*b1cdbd2cSJim Jagielski} 1521*b1cdbd2cSJim Jagielski 1522*b1cdbd2cSJim Jagielski########################################################################## 1523*b1cdbd2cSJim Jagielski# Changing the parent inside the xpd file 1524*b1cdbd2cSJim Jagielski# Old: <package name="gid_Module_Root" parent="root"> 1525*b1cdbd2cSJim Jagielski# New: <package name="gid_Module_Root_Files_1" parent="gid_Module_Root"> 1526*b1cdbd2cSJim Jagielski########################################################################## 1527*b1cdbd2cSJim Jagielski 1528*b1cdbd2cSJim Jagielskisub change_parent_in_xpdfile 1529*b1cdbd2cSJim Jagielski{ 1530*b1cdbd2cSJim Jagielski my ($xpdfile, $modulename) = @_; 1531*b1cdbd2cSJim Jagielski 1532*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$xpdfile}; $i++ ) 1533*b1cdbd2cSJim Jagielski { 1534*b1cdbd2cSJim Jagielski if ( ${$xpdfile}[$i] =~ /^\s*\<package name\s*=\s*\"(\S+?)\"\s+parent\s*=\s*\"(\S+?)\"\s*\>\s*$/ ) 1535*b1cdbd2cSJim Jagielski { 1536*b1cdbd2cSJim Jagielski my $oldname = $1; 1537*b1cdbd2cSJim Jagielski my $oldparent = $2; 1538*b1cdbd2cSJim Jagielski 1539*b1cdbd2cSJim Jagielski my $newname = $modulename; 1540*b1cdbd2cSJim Jagielski my $newparent = $oldname; 1541*b1cdbd2cSJim Jagielski 1542*b1cdbd2cSJim Jagielski ${$xpdfile}[$i] =~ s/\"\Q$oldname\E\"/\"$newname\"/; 1543*b1cdbd2cSJim Jagielski ${$xpdfile}[$i] =~ s/\"\Q$oldparent\E\"/\"$newparent\"/; 1544*b1cdbd2cSJim Jagielski 1545*b1cdbd2cSJim Jagielski last; 1546*b1cdbd2cSJim Jagielski } 1547*b1cdbd2cSJim Jagielski } 1548*b1cdbd2cSJim Jagielski} 1549*b1cdbd2cSJim Jagielski 1550*b1cdbd2cSJim Jagielski################################################### 1551*b1cdbd2cSJim Jagielski# Creating one xpd file for each package 1552*b1cdbd2cSJim Jagielski################################################### 1553*b1cdbd2cSJim Jagielski 1554*b1cdbd2cSJim Jagielskisub create_xpd_file 1555*b1cdbd2cSJim Jagielski{ 1556*b1cdbd2cSJim Jagielski my ($onepackage, $allpackages, $languagestringref, $allvariables, $modulesarrayref, $installdir, $subdir, $linkpackage, $xpdinfo) = @_; 1557*b1cdbd2cSJim Jagielski 1558*b1cdbd2cSJim Jagielski my $infoline = ""; 1559*b1cdbd2cSJim Jagielski # creating the directory 1560*b1cdbd2cSJim Jagielski my $xpddir = installer::systemactions::create_directories("xpdinstaller", $languagestringref); 1561*b1cdbd2cSJim Jagielski $xpddir =~ s/\/\s*$//; 1562*b1cdbd2cSJim Jagielski $installer::globals::xpddir = $xpddir; 1563*b1cdbd2cSJim Jagielski # push(@installer::globals::removedirs, $xpddir); 1564*b1cdbd2cSJim Jagielski 1565*b1cdbd2cSJim Jagielski my $modulegid = $onepackage->{'module'}; 1566*b1cdbd2cSJim Jagielski 1567*b1cdbd2cSJim Jagielski my $onelanguage = ""; # 1568*b1cdbd2cSJim Jagielski my $solslanguage = ""; # 1569*b1cdbd2cSJim Jagielski my $islanguagemodule = 0; # 1570*b1cdbd2cSJim Jagielski if ( $onepackage->{'islanguagemodule'} ) { $islanguagemodule = $onepackage->{'islanguagemodule'}; } # 1571*b1cdbd2cSJim Jagielski if ( $islanguagemodule ) # 1572*b1cdbd2cSJim Jagielski { 1573*b1cdbd2cSJim Jagielski $onelanguage = $onepackage->{'language'}; # 1574*b1cdbd2cSJim Jagielski if ( $installer::globals::issolarispkgbuild ) { $solslanguage = installer::epmfile::get_solaris_language_for_langpack($onelanguage); } # 1575*b1cdbd2cSJim Jagielski } 1576*b1cdbd2cSJim Jagielski 1577*b1cdbd2cSJim Jagielski installer::logger::include_header_into_logfile("Creating xpd file ($modulegid):"); 1578*b1cdbd2cSJim Jagielski 1579*b1cdbd2cSJim Jagielski my $module = get_module($modulegid, $modulesarrayref); 1580*b1cdbd2cSJim Jagielski 1581*b1cdbd2cSJim Jagielski if ( $module ne "" ) 1582*b1cdbd2cSJim Jagielski { 1583*b1cdbd2cSJim Jagielski my $packagename = determine_new_packagename($installdir, $subdir, $xpdinfo); 1584*b1cdbd2cSJim Jagielski 1585*b1cdbd2cSJim Jagielski # all content saved in scp is now available and can be used to create the xpd file 1586*b1cdbd2cSJim Jagielski my ( $xpdfile, $parentgid ) = get_file_content($module, $packagename, $solslanguage, $linkpackage, 0, "", $islanguagemodule, $onelanguage, $xpdinfo); 1587*b1cdbd2cSJim Jagielski 1588*b1cdbd2cSJim Jagielski my $xpdfilename = get_xpd_filename($modulegid, $linkpackage); 1589*b1cdbd2cSJim Jagielski $xpdfilename = $xpddir . $installer::globals::separator . $xpdfilename; 1590*b1cdbd2cSJim Jagielski 1591*b1cdbd2cSJim Jagielski # Very special handling for Root module: 1592*b1cdbd2cSJim Jagielski # Because packages should only be assigned to leaves and not to knods, 1593*b1cdbd2cSJim Jagielski # the root module is divided into a knod without package and a new 1594*b1cdbd2cSJim Jagielski # leave with package. The name of the leave is defined at $module->{'XpdPackageName'}. 1595*b1cdbd2cSJim Jagielski if ( $module->{'XpdPackageName'} ) 1596*b1cdbd2cSJim Jagielski { 1597*b1cdbd2cSJim Jagielski my $newxpdfilename = get_xpd_filename($module->{'XpdPackageName'}, 0); 1598*b1cdbd2cSJim Jagielski $newxpdfilename = $xpddir . $installer::globals::separator . $newxpdfilename; 1599*b1cdbd2cSJim Jagielski my $emptyfilecontent = filter_content_from_xpdfile($xpdfile); 1600*b1cdbd2cSJim Jagielski 1601*b1cdbd2cSJim Jagielski installer::files::save_file($xpdfilename, $emptyfilecontent); 1602*b1cdbd2cSJim Jagielski push(@installer::globals::allxpdfiles, $xpdfilename); 1603*b1cdbd2cSJim Jagielski $infoline = "Saving xpd file: $xpdfilename\n"; 1604*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1605*b1cdbd2cSJim Jagielski 1606*b1cdbd2cSJim Jagielski $xpdfilename = $newxpdfilename; 1607*b1cdbd2cSJim Jagielski change_parent_in_xpdfile($xpdfile, $module->{'XpdPackageName'}); 1608*b1cdbd2cSJim Jagielski } 1609*b1cdbd2cSJim Jagielski 1610*b1cdbd2cSJim Jagielski installer::files::save_file($xpdfilename, $xpdfile); 1611*b1cdbd2cSJim Jagielski push( @installer::globals::createdxpdfiles, $modulegid); 1612*b1cdbd2cSJim Jagielski push(@installer::globals::allxpdfiles, $xpdfilename); 1613*b1cdbd2cSJim Jagielski $infoline = "Saving xpd file: $xpdfilename\n"; 1614*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1615*b1cdbd2cSJim Jagielski 1616*b1cdbd2cSJim Jagielski my $grandpagid = "root"; 1617*b1cdbd2cSJim Jagielski if ( $parentgid ne "root" ) 1618*b1cdbd2cSJim Jagielski { 1619*b1cdbd2cSJim Jagielski my $create_missing_parent = is_empty_parent($parentgid, $allpackages); 1620*b1cdbd2cSJim Jagielski 1621*b1cdbd2cSJim Jagielski # if (( $create_missing_parent ) && ( ! installer::existence::exists_in_array($parentgid, \@installer::globals::emptyxpdparents) )) 1622*b1cdbd2cSJim Jagielski if (( $create_missing_parent ) && ( ! installer::existence::exists_in_array($parentgid, \@installer::globals::createdxpdfiles) )) 1623*b1cdbd2cSJim Jagielski { 1624*b1cdbd2cSJim Jagielski $grandpagid = create_emptyparents_xpd_file($parentgid, $modulesarrayref, $xpddir); 1625*b1cdbd2cSJim Jagielski } 1626*b1cdbd2cSJim Jagielski } 1627*b1cdbd2cSJim Jagielski 1628*b1cdbd2cSJim Jagielski if ( $grandpagid ne "root" ) 1629*b1cdbd2cSJim Jagielski { 1630*b1cdbd2cSJim Jagielski my $create_missing_parent = is_empty_parent($grandpagid, $allpackages); 1631*b1cdbd2cSJim Jagielski 1632*b1cdbd2cSJim Jagielski # if (( $create_missing_parent ) && ( ! installer::existence::exists_in_array($parentgid, \@installer::globals::emptyxpdparents) )) 1633*b1cdbd2cSJim Jagielski if (( $create_missing_parent ) && ( ! installer::existence::exists_in_array($grandpagid, \@installer::globals::createdxpdfiles) )) 1634*b1cdbd2cSJim Jagielski { 1635*b1cdbd2cSJim Jagielski create_emptyparents_xpd_file($grandpagid, $modulesarrayref, $xpddir); 1636*b1cdbd2cSJim Jagielski } 1637*b1cdbd2cSJim Jagielski } 1638*b1cdbd2cSJim Jagielski } 1639*b1cdbd2cSJim Jagielski else 1640*b1cdbd2cSJim Jagielski { 1641*b1cdbd2cSJim Jagielski installer::exiter::exit_program("ERROR: No module definition found for gid: $modulegid", "create_xpd_file (xpdinstaller)"); 1642*b1cdbd2cSJim Jagielski } 1643*b1cdbd2cSJim Jagielski 1644*b1cdbd2cSJim Jagielski} 1645*b1cdbd2cSJim Jagielski 1646*b1cdbd2cSJim Jagielski################################################### 1647*b1cdbd2cSJim Jagielski# Creating a xpd file for a copied package 1648*b1cdbd2cSJim Jagielski################################################### 1649*b1cdbd2cSJim Jagielski 1650*b1cdbd2cSJim Jagielskisub create_xpd_file_for_childproject 1651*b1cdbd2cSJim Jagielski{ 1652*b1cdbd2cSJim Jagielski my ($module, $destdir, $packagename, $allvariableshashref, $modulesarrayref) = @_; 1653*b1cdbd2cSJim Jagielski 1654*b1cdbd2cSJim Jagielski my $modulegid = $module->{'gid'}; 1655*b1cdbd2cSJim Jagielski 1656*b1cdbd2cSJim Jagielski my $currentdir = cwd(); 1657*b1cdbd2cSJim Jagielski $destdir =~ s/\/\s*$//; 1658*b1cdbd2cSJim Jagielski $currentdir =~ s/\/\s*$//; 1659*b1cdbd2cSJim Jagielski 1660*b1cdbd2cSJim Jagielski my $completepackage = $currentdir . $installer::globals::separator . $destdir . $installer::globals::separator . $packagename; 1661*b1cdbd2cSJim Jagielski 1662*b1cdbd2cSJim Jagielski # all content saved in scp is now available and can be used to create the xpd file 1663*b1cdbd2cSJim Jagielski my ( $xpdfile, $parentgid ) = get_file_content($module, $completepackage, "", 0, 0, "", 0, "", ""); 1664*b1cdbd2cSJim Jagielski 1665*b1cdbd2cSJim Jagielski my $xpdfilename = get_xpd_filename($modulegid, 0); 1666*b1cdbd2cSJim Jagielski $xpdfilename = $installer::globals::xpddir . $installer::globals::separator . $xpdfilename; 1667*b1cdbd2cSJim Jagielski 1668*b1cdbd2cSJim Jagielski installer::files::save_file($xpdfilename, $xpdfile); 1669*b1cdbd2cSJim Jagielski push( @installer::globals::createdxpdfiles, $modulegid); 1670*b1cdbd2cSJim Jagielski push(@installer::globals::allxpdfiles, $xpdfilename); 1671*b1cdbd2cSJim Jagielski my $infoline = "Saving xpd file: $xpdfilename\n"; 1672*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1673*b1cdbd2cSJim Jagielski 1674*b1cdbd2cSJim Jagielski if ( $parentgid ne "root" ) 1675*b1cdbd2cSJim Jagielski { 1676*b1cdbd2cSJim Jagielski # my $create_missing_parent = is_empty_parent($parentgid, $allpackages); 1677*b1cdbd2cSJim Jagielski my $create_missing_parent = 1; # -> Always missing parent by child projects! 1678*b1cdbd2cSJim Jagielski # Parent is now created, if it was not created before. Attention: Parent module must not come later. 1679*b1cdbd2cSJim Jagielski if (( $create_missing_parent ) && ( ! installer::existence::exists_in_array($parentgid, \@installer::globals::createdxpdfiles) )) 1680*b1cdbd2cSJim Jagielski { 1681*b1cdbd2cSJim Jagielski create_emptyparents_xpd_file($parentgid, $modulesarrayref, $installer::globals::xpddir); 1682*b1cdbd2cSJim Jagielski } 1683*b1cdbd2cSJim Jagielski } 1684*b1cdbd2cSJim Jagielski} 1685*b1cdbd2cSJim Jagielski 1686*b1cdbd2cSJim Jagielski############################################################## 1687*b1cdbd2cSJim Jagielski# Creating a xpd file for copied system integration package 1688*b1cdbd2cSJim Jagielski############################################################## 1689*b1cdbd2cSJim Jagielski 1690*b1cdbd2cSJim Jagielskisub create_xpd_file_for_systemintegration 1691*b1cdbd2cSJim Jagielski{ 1692*b1cdbd2cSJim Jagielski my ($module, $newcontent, $modulesarrayref, $subdir) = @_; 1693*b1cdbd2cSJim Jagielski 1694*b1cdbd2cSJim Jagielski my $parentgid = $module->{'gid'}; 1695*b1cdbd2cSJim Jagielski 1696*b1cdbd2cSJim Jagielski # Create new visible module from scp info and create 1697*b1cdbd2cSJim Jagielski # new hidden module for each package inside in tar file 1698*b1cdbd2cSJim Jagielski 1699*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$newcontent}; $i++ ) 1700*b1cdbd2cSJim Jagielski { 1701*b1cdbd2cSJim Jagielski my $newpackagename = ${$newcontent}[$i]; 1702*b1cdbd2cSJim Jagielski 1703*b1cdbd2cSJim Jagielski # installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$newpackagename); 1704*b1cdbd2cSJim Jagielski 1705*b1cdbd2cSJim Jagielski my $infoline = "Creating xpd file for package: $newpackagename\n"; 1706*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1707*b1cdbd2cSJim Jagielski 1708*b1cdbd2cSJim Jagielski my $childmodule = installer::worker::copy_hash_from_references($module); 1709*b1cdbd2cSJim Jagielski $childmodule->{'ParentID'} = $module->{'gid'}; # the module gid is the new parent 1710*b1cdbd2cSJim Jagielski $childmodule->{'InstallOrder'} = $installer::globals::defaultsystemintinstallorder; 1711*b1cdbd2cSJim Jagielski my $number = $i + 1; 1712*b1cdbd2cSJim Jagielski my $modulegid = $module->{'gid'} . "_child_" . $number; # setting a dynamic new gid 1713*b1cdbd2cSJim Jagielski $childmodule->{'gid'} = $modulegid; 1714*b1cdbd2cSJim Jagielski $childmodule->{'Styles'} =~ s/\)/\,HIDDEN_ROOT\)/; 1715*b1cdbd2cSJim Jagielski # iterating over all languages to get names and descriptions 1716*b1cdbd2cSJim Jagielski remove_lang_values($childmodule, "Name"); 1717*b1cdbd2cSJim Jagielski remove_lang_values($childmodule, "Description"); 1718*b1cdbd2cSJim Jagielski 1719*b1cdbd2cSJim Jagielski my $shortpackagename = $newpackagename; 1720*b1cdbd2cSJim Jagielski installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$shortpackagename); 1721*b1cdbd2cSJim Jagielski $childmodule->{'PackageName'} = $shortpackagename; 1722*b1cdbd2cSJim Jagielski $childmodule->{'Name'} = $modulegid; 1723*b1cdbd2cSJim Jagielski $childmodule->{'Description'} = $modulegid; 1724*b1cdbd2cSJim Jagielski 1725*b1cdbd2cSJim Jagielski # Checking, if installorder can be set: 1726*b1cdbd2cSJim Jagielski # scp syntax: InstallOrder = "desktop:1050, suse:1060"; 1727*b1cdbd2cSJim Jagielski # The string before the number can be compared with $shortpackagename 1728*b1cdbd2cSJim Jagielski if ( $module->{'InstallOrder'} ) 1729*b1cdbd2cSJim Jagielski { 1730*b1cdbd2cSJim Jagielski my $installorder = $module->{'InstallOrder'}; 1731*b1cdbd2cSJim Jagielski $installorder =~ s/^\s*\"//g; 1732*b1cdbd2cSJim Jagielski $installorder =~ s/\"\s*$//g; 1733*b1cdbd2cSJim Jagielski # $installorder is comma separated list 1734*b1cdbd2cSJim Jagielski my $allorders = installer::converter::convert_stringlist_into_array(\$installorder, ","); 1735*b1cdbd2cSJim Jagielski for ( my $j = 0; $j <= $#{$allorders}; $j++ ) 1736*b1cdbd2cSJim Jagielski { 1737*b1cdbd2cSJim Jagielski my $oneitem = ${$allorders}[$j]; 1738*b1cdbd2cSJim Jagielski if ( $oneitem =~ /^\s*(\S+?)\s*:\s*(\S+?)\s*$/ ) 1739*b1cdbd2cSJim Jagielski { 1740*b1cdbd2cSJim Jagielski my $name = $1; 1741*b1cdbd2cSJim Jagielski my $order = $2; 1742*b1cdbd2cSJim Jagielski 1743*b1cdbd2cSJim Jagielski if ( $shortpackagename =~ /\Q$name\E/ ) { $childmodule->{'InstallOrder'} = $order; } 1744*b1cdbd2cSJim Jagielski } 1745*b1cdbd2cSJim Jagielski } 1746*b1cdbd2cSJim Jagielski } 1747*b1cdbd2cSJim Jagielski 1748*b1cdbd2cSJim Jagielski # all content saved in scp is now available and can be used to create the xpd file 1749*b1cdbd2cSJim Jagielski my ( $xpdfile, $parentgid_ ) = get_file_content($childmodule, $newpackagename, "", 0, 0, $subdir, 0, "", ""); 1750*b1cdbd2cSJim Jagielski 1751*b1cdbd2cSJim Jagielski my $xpdfilename = get_xpd_filename($modulegid, 0); 1752*b1cdbd2cSJim Jagielski $xpdfilename = $installer::globals::xpddir . $installer::globals::separator . $xpdfilename; 1753*b1cdbd2cSJim Jagielski 1754*b1cdbd2cSJim Jagielski installer::files::save_file($xpdfilename, $xpdfile); 1755*b1cdbd2cSJim Jagielski push(@installer::globals::allxpdfiles, $xpdfilename); 1756*b1cdbd2cSJim Jagielski $infoline = "Saving xpd file: $xpdfilename\n"; 1757*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1758*b1cdbd2cSJim Jagielski } 1759*b1cdbd2cSJim Jagielski 1760*b1cdbd2cSJim Jagielski # Creating the top level visible xpd file 1761*b1cdbd2cSJim Jagielski create_emptyparents_xpd_file($parentgid, $modulesarrayref, $installer::globals::xpddir); 1762*b1cdbd2cSJim Jagielski} 1763*b1cdbd2cSJim Jagielski 1764*b1cdbd2cSJim Jagielski############################################################## 1765*b1cdbd2cSJim Jagielski# Copying xpd files into installation set 1766*b1cdbd2cSJim Jagielski############################################################## 1767*b1cdbd2cSJim Jagielski 1768*b1cdbd2cSJim Jagielskisub copy_xpd_files 1769*b1cdbd2cSJim Jagielski{ 1770*b1cdbd2cSJim Jagielski my ( $destdir ) = @_; 1771*b1cdbd2cSJim Jagielski 1772*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#installer::globals::allxpdfiles; $i++ ) 1773*b1cdbd2cSJim Jagielski { 1774*b1cdbd2cSJim Jagielski if ( ! -f $installer::globals::allxpdfiles[$i] ) { installer::exiter::exit_program("ERROR: Could not find xpd file: $installer::globals::allxpdfiles[$i]!", "copy_xpd_files"); } 1775*b1cdbd2cSJim Jagielski installer::systemactions::copy_one_file($installer::globals::allxpdfiles[$i], $destdir); 1776*b1cdbd2cSJim Jagielski } 1777*b1cdbd2cSJim Jagielski} 1778*b1cdbd2cSJim Jagielski 1779*b1cdbd2cSJim Jagielski############################################################## 1780*b1cdbd2cSJim Jagielski# Copying all xpd files into the installation set 1781*b1cdbd2cSJim Jagielski############################################################## 1782*b1cdbd2cSJim Jagielski 1783*b1cdbd2cSJim Jagielskisub copy_xpd_files_into_installset 1784*b1cdbd2cSJim Jagielski{ 1785*b1cdbd2cSJim Jagielski my ($installdir) = @_; 1786*b1cdbd2cSJim Jagielski 1787*b1cdbd2cSJim Jagielski $installdir =~ s/\Q$installer::globals::separator\E\s*$//; 1788*b1cdbd2cSJim Jagielski 1789*b1cdbd2cSJim Jagielski my $instdir = $installdir . $installer::globals::separator . "installdata"; 1790*b1cdbd2cSJim Jagielski installer::systemactions::create_directory($instdir); 1791*b1cdbd2cSJim Jagielski 1792*b1cdbd2cSJim Jagielski my $xpddir = $instdir . $installer::globals::separator . "xpd"; 1793*b1cdbd2cSJim Jagielski installer::systemactions::create_directory($xpddir); 1794*b1cdbd2cSJim Jagielski copy_xpd_files($xpddir); 1795*b1cdbd2cSJim Jagielski} 1796*b1cdbd2cSJim Jagielski 1797*b1cdbd2cSJim Jagielski############################################################## 1798*b1cdbd2cSJim Jagielski# Creating base xpd file with product information 1799*b1cdbd2cSJim Jagielski############################################################## 1800*b1cdbd2cSJim Jagielski 1801*b1cdbd2cSJim Jagielskisub create_setup_xpd 1802*b1cdbd2cSJim Jagielski{ 1803*b1cdbd2cSJim Jagielski my ($allvariables, $languagestringref) = @_; 1804*b1cdbd2cSJim Jagielski 1805*b1cdbd2cSJim Jagielski my ( $xpdfile ) = get_setup_file_content($allvariables, $languagestringref); 1806*b1cdbd2cSJim Jagielski 1807*b1cdbd2cSJim Jagielski my $xpdfilename = $installer::globals::productxpdfile; 1808*b1cdbd2cSJim Jagielski $xpdfilename = $installer::globals::xpddir . $installer::globals::separator . $xpdfilename; 1809*b1cdbd2cSJim Jagielski 1810*b1cdbd2cSJim Jagielski installer::files::save_file($xpdfilename, $xpdfile); 1811*b1cdbd2cSJim Jagielski push(@installer::globals::allxpdfiles, $xpdfilename); 1812*b1cdbd2cSJim Jagielski my $infoline = "Saving xpd file: $xpdfilename\n"; 1813*b1cdbd2cSJim Jagielski $installer::logger::Lang->print($infoline); 1814*b1cdbd2cSJim Jagielski} 1815*b1cdbd2cSJim Jagielski 1816*b1cdbd2cSJim Jagielski################################################### 1817*b1cdbd2cSJim Jagielski# Copying the files needed by the xpd installer 1818*b1cdbd2cSJim Jagielski# into the installation directory 1819*b1cdbd2cSJim Jagielski################################################### 1820*b1cdbd2cSJim Jagielski 1821*b1cdbd2cSJim Jagielskisub create_xpd_installer 1822*b1cdbd2cSJim Jagielski{ 1823*b1cdbd2cSJim Jagielski my ( $installdir, $allvariables, $languagestringref) = @_; 1824*b1cdbd2cSJim Jagielski 1825*b1cdbd2cSJim Jagielski installer::logger::include_header_into_logfile("Creating xpd installer:"); 1826*b1cdbd2cSJim Jagielski 1827*b1cdbd2cSJim Jagielski # create setup.xpd file 1828*b1cdbd2cSJim Jagielski create_setup_xpd($allvariables, $languagestringref); 1829*b1cdbd2cSJim Jagielski 1830*b1cdbd2cSJim Jagielski # copy xpd files into installation set 1831*b1cdbd2cSJim Jagielski copy_xpd_files_into_installset($installdir); 1832*b1cdbd2cSJim Jagielski} 1833*b1cdbd2cSJim Jagielski 1834*b1cdbd2cSJim Jagielski1; 1835