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 Jagielski 24*b1cdbd2cSJim Jagielskipackage installer::windows::createfolder; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielskiuse installer::existence; 27*b1cdbd2cSJim Jagielskiuse installer::exiter; 28*b1cdbd2cSJim Jagielskiuse installer::files; 29*b1cdbd2cSJim Jagielskiuse installer::globals; 30*b1cdbd2cSJim Jagielskiuse installer::windows::idtglobal; 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski############################################################## 33*b1cdbd2cSJim Jagielski# Returning directory for createfolder table. 34*b1cdbd2cSJim Jagielski############################################################## 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielskisub get_createfolder_directory 37*b1cdbd2cSJim Jagielski{ 38*b1cdbd2cSJim Jagielski my ($onedir) = @_; 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski my $uniquename = $onedir->{'uniquename'}; 41*b1cdbd2cSJim Jagielski 42*b1cdbd2cSJim Jagielski return $uniquename; 43*b1cdbd2cSJim Jagielski} 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski############################################################## 46*b1cdbd2cSJim Jagielski# Searching the correct file for language pack directories. 47*b1cdbd2cSJim Jagielski############################################################## 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielskisub get_languagepack_file 50*b1cdbd2cSJim Jagielski{ 51*b1cdbd2cSJim Jagielski my ($filesref, $onedir) = @_; 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielski my $language = $onedir->{'specificlanguage'}; 54*b1cdbd2cSJim Jagielski my $foundfile = 0; 55*b1cdbd2cSJim Jagielski my $onefile = ""; 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$filesref}; $i++ ) 58*b1cdbd2cSJim Jagielski { 59*b1cdbd2cSJim Jagielski $onefile = ${$filesref}[$i]; 60*b1cdbd2cSJim Jagielski 61*b1cdbd2cSJim Jagielski if ( $onefile->{'specificlanguage'} eq $onedir->{'specificlanguage'} ) 62*b1cdbd2cSJim Jagielski { 63*b1cdbd2cSJim Jagielski $foundfile = 1; 64*b1cdbd2cSJim Jagielski last; 65*b1cdbd2cSJim Jagielski } 66*b1cdbd2cSJim Jagielski } 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski if ( ! $foundfile ) { installer::exiter::exit_program("ERROR: No file with correct language found (language pack build)!", "get_languagepack_file"); } 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski return $onefile; 71*b1cdbd2cSJim Jagielski} 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski############################################################## 74*b1cdbd2cSJim Jagielski# Returning component for createfolder table. 75*b1cdbd2cSJim Jagielski############################################################## 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielskisub get_createfolder_component 78*b1cdbd2cSJim Jagielski{ 79*b1cdbd2cSJim Jagielski my ($onedir, $filesref, $allvariableshashref) = @_; 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski # Directories do not belong to a module. 82*b1cdbd2cSJim Jagielski # Therefore they can only belong to the root module and 83*b1cdbd2cSJim Jagielski # will be added to a component at the root module. 84*b1cdbd2cSJim Jagielski # All directories will be added to the component 85*b1cdbd2cSJim Jagielski # containing the file $allvariableshashref->{'GLOBALFILEGID'} 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski if ( ! $allvariableshashref->{'GLOBALFILEGID'} ) { installer::exiter::exit_program("ERROR: GLOBALFILEGID must be defined in list file!", "get_createfolder_component"); } 88*b1cdbd2cSJim Jagielski if (( $installer::globals::patch ) && ( ! $allvariableshashref->{'GLOBALFILEGID'} )) { installer::exiter::exit_program("ERROR: GLOBALPATCHFILEGID must be defined in list file!", "get_createfolder_component"); } 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski my $globalfilegid = $allvariableshashref->{'GLOBALFILEGID'}; 91*b1cdbd2cSJim Jagielski if ( $installer::globals::patch ) { $globalfilegid = $allvariableshashref->{'GLOBALPATCHFILEGID'}; } 92*b1cdbd2cSJim Jagielski 93*b1cdbd2cSJim Jagielski my $onefile = ""; 94*b1cdbd2cSJim Jagielski if ( $installer::globals::languagepack ) { $onefile = get_languagepack_file($filesref, $onedir); } 95*b1cdbd2cSJim Jagielski else { $onefile = installer::existence::get_specified_file($filesref, $globalfilegid); } 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski return $onefile->{'componentname'}; 98*b1cdbd2cSJim Jagielski} 99*b1cdbd2cSJim Jagielski 100*b1cdbd2cSJim Jagielski#################################################################################### 101*b1cdbd2cSJim Jagielski# Creating the file CreateFo.idt dynamically for creation of empty directories 102*b1cdbd2cSJim Jagielski# Content: 103*b1cdbd2cSJim Jagielski# Directory_ Component_ 104*b1cdbd2cSJim Jagielski#################################################################################### 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielskisub create_createfolder_table 107*b1cdbd2cSJim Jagielski{ 108*b1cdbd2cSJim Jagielski my ($dirref, $filesref, $basedir, $allvariableshashref) = @_; 109*b1cdbd2cSJim Jagielski 110*b1cdbd2cSJim Jagielski my @createfoldertable = (); 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski my $infoline; 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski installer::windows::idtglobal::write_idt_header(\@createfoldertable, "createfolder"); 115*b1cdbd2cSJim Jagielski 116*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$dirref}; $i++ ) 117*b1cdbd2cSJim Jagielski { 118*b1cdbd2cSJim Jagielski my $onedir = ${$dirref}[$i]; 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski # language packs get only language dependent directories 121*b1cdbd2cSJim Jagielski if (( $installer::globals::languagepack ) && ( $onedir->{'specificlanguage'} eq "" )) { next }; 122*b1cdbd2cSJim Jagielski 123*b1cdbd2cSJim Jagielski my $styles = ""; 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski if ( $onedir->{'Styles'} ) { $styles = $onedir->{'Styles'}; } 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski if ( $styles =~ /\bCREATE\b/ ) 128*b1cdbd2cSJim Jagielski { 129*b1cdbd2cSJim Jagielski my %directory = (); 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski $directory{'Directory_'} = get_createfolder_directory($onedir); 132*b1cdbd2cSJim Jagielski $directory{'Component_'} = get_createfolder_component($onedir, $filesref, $allvariableshashref); 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski my $oneline = $directory{'Directory_'} . "\t" . $directory{'Component_'} . "\n"; 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski push(@createfoldertable, $oneline); 137*b1cdbd2cSJim Jagielski } 138*b1cdbd2cSJim Jagielski } 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski # Saving the file 141*b1cdbd2cSJim Jagielski 142*b1cdbd2cSJim Jagielski my $createfoldertablename = $basedir . $installer::globals::separator . "CreateFo.idt"; 143*b1cdbd2cSJim Jagielski installer::files::save_file($createfoldertablename ,\@createfoldertable); 144*b1cdbd2cSJim Jagielski $installer::logger::Lang->printf("Created idt file: %s\n", $createfoldertablename); 145*b1cdbd2cSJim Jagielski} 146*b1cdbd2cSJim Jagielski 147*b1cdbd2cSJim Jagielski1; 148