: eval 'exec perl -wS $0 ${1+"$@"}' if 0; #************************************************************** # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # #************************************************************** #***************************************************************************************** # ASCII parser for the changeover of the current build.lst files to XML files * # programmer: Pascal Junck, Sun Microsystems GmbH * #***************************************************************************************** # this is the first step for the changeover of the current 'build.lst' files to the new # 'build.xlist'(XML) files # before we create the new ones we have to parse all important informations from the old files # important parameters are: # 1. 'module name' # 2. 'module dependency names' # 3. 'dependency type' # 4. 'job dir' # 5. 'depending directories' # 6. 'job platform'(only: 'w', 'u', 'm' and 'all') # 7. 'job'(only: 'nmake' means 'make') # 8. 'build requirements'(here called: 'restrictions') ################################# begin of main ####################################### use strict; use lib ("/home/vg119683/work/modules"); use XMLBuildListParser; # get and work with each argument(build.lst files) of the commando line # e.g. if the user wants to parse the build.lst file(s): # user input (on unix) for all modules : 'perl -w ascii_parser.pl /so/ws/SRC680/src.m42/*/prj/build.lst' # user input (on windows) for one module : 'perl -w ascii_parser.pl O:/SRC680/src.m42/[module]/prj/build.lst' # get all arguments (build.lst files) of the commando line in this global variable '@buildlist_files' my @buildlist_files = @ARGV; # global variable for each file name that we want to parse in ASCII my $parse_file = ""; # set the global variable '$debug' (= 1) to see all results on the terminal, # else (= 0) it shows nothing of the working output! my $debug = 0; # open the filehandle 'ERROR_LOG' for all errors open (ERROR_LOG, ">>ascii_parse.log") or die "Error. Open the file wasn't successful!\n\n"; # reference of the instance of a new object my $XMLTree; foreach (@buildlist_files) { # get each element (= module) in '$parse_file' $parse_file = $_; # open the filehandle 'PARSE_ASCII' for each module/file that we want to parse open (PARSE_ASCII, $parse_file) or die "Error. Open the module <$parse_file> wasn't successful!\n\n"; # create a new object $XMLTree = XMLBuildListParser->new(); # invoking of the main subroutine reading_file(); # is the file name 'build.lst' in the path on the command line? # if not, we can not parse and create the new 'build.xlist' file if ($parse_file =~ /build(\w+)?\.lst\S*$/) { my $path = $parse_file; $path =~ s/build(\w+)?\.lst\S*$/build\.xlist/; $XMLTree->saveXMLFile($path); } else { add_errorlog_no_buildlst_file_found_statement($parse_file); } # close the current $parse_file close(PARSE_ASCII); } # after all files were read close the errorlog file close(ERROR_LOG); ########################### begin of subroutines ##################################### # # global used variable: $parse_file # ######################################################################################## ######################################################################################## # sub: reading_file # gets: $_ (current file) # returns: - ######################################################################################## sub reading_file { # variable for the name of the current module my $module_name = ""; # hashes for the infos beginning at the second line of the build.lst files my %dir_of_job_platform = (); my %dir_of_alias = (); # control variable for the module dependency line of the file # like line 1 of module 'sal' (dependencies means the colon(s)) (SRC680/src.m42) # "sa sal : xml2cmp NULL" my $module_dependency_line_exists = 0; my $module_dependency_line_was_read = 0; # this line variables are for checking that all lines will be read # counts each line my $line_number = 0; # for the sum of the informative lines (='module dependency line' and 'nmake' lines of the file) my $info_line_sum = 0; # for the sum of the no-info lines, like: # job lines: 'usr1', 'get', ... and comment lines: '# ...' or empty lines my $no_info_line_sum = 0; # read all lines of the file to resolve the first alias # with the matching dir to know all aliases and directories # at the later second file reading while () { # the variable for each line of a file my $line = $_; # count each line for more exact error descriptions in the log file $line_number += 1; # remember it, if this line exists if ( (is_module_dependency_line($line)) && ($module_dependency_line_exists == 0) ) { $module_dependency_line_exists = 1; # get the name of the current module $module_name = get_module_name($line); } # skip all lines, that hasn't the job 'nmake' next if (!(is_nmake_line($line))); # check that the infos (job directory, job platform and alias) exist if (my ($job_dir, $job_platform, $alias) = get_alias_resolving_infos($line)) { # prove that it's a valid job_platform # and that each first alias and matching job platform exists only once check_alias_and_job_platform($job_dir, $job_platform, $alias, \%dir_of_job_platform, \%dir_of_alias, $module_name, $line_number); } else { chomp; add_errorlog_unknown_format_statement($line, $module_name, $line_number); next; } } # reset the $line_number, because we count it again $line_number = 0; # read the same file again seek (PARSE_ASCII,0,0); # read each line of the file for all other informations # e.g. line 8 of module 'sal' # "sa sal\systools\win32\guistdio nmake - n sa_guistdio sa_uwinapi.n NULL" # $job_dir $job $job_platform 1.$alias 2.$alias + alias platform while () { # the variable for each line of a file my $line = $_; # count each line to check at the end of the file that all lines were read # and for more exact error descriptions in the log file $line_number += 1; # is it a 'nmake' or a 'module dependency' line? # if not: print this line to STDOUT, # count one to the no-info lines, # try to get the information about the module name from this line # and skip the line if ( (!(is_nmake_line($line))) && (!(is_module_dependency_line($line))) ) { my $no_info_line = show_no_info_line($line, $line_number); $no_info_line_sum += $no_info_line; # if no module dependency line exists get the name of the current module from another line $module_name = get_module_name($line) if (!($module_name)); # skip the no-info line next; } # only if the module dependency line exists and it wasn't read get the infos about it if ( ($module_dependency_line_exists) && (!($module_dependency_line_was_read)) ) { ($module_dependency_line_was_read, $info_line_sum) = get_module_dependency_line_infos ($line, $module_name, $line_number); } # get all 'nmake' line infos my $info_line = get_nmake_line_infos($line, \%dir_of_alias, \%dir_of_job_platform, $module_name, $line_number); # count the info lines; $info_line_sum += $info_line; } if ($debug == 1) { # show the sums of the info and no-info lines lines_sums_output($module_name, $line_number, $info_line_sum, $no_info_line_sum); } } ######################################################################################## # sub: is_module_dependency_line # gets: $line # returns: 1 (true) or 0 (false) ######################################################################################## sub is_module_dependency_line { my $line = shift; # if the module dpendency line exists return 1, otherwise 0 ($line =~ /^\w+\s+\S+\s+:+\s+/) ? return 1 : return 0; } ######################################################################################## # sub: is_nmake_line # gets: $line # returns: '1' (true) or '0' (false) ######################################################################################## sub is_nmake_line { my $line = shift; # these lines are NO nmake lines: # 1. a empty line # 2. a comment line (perhaps with the job 'nmake') # like line 20 of module 'bridges' (SRC680/src.m42) # "#br bridges\source\cli_uno nmake - w,vc7 br_cli_uno br_unotypes NULL========= " # 3. the module dependency line # like line 1 of module 'sal' (dependencies means the colon(s)) (SRC680/src.m42) # "sa sal : xml2cmp N ULL" # 4. a 'p' job platform line (for OS2) # 5. a line with a job, which is not 'nmake' ($line =~ (/^[^\s+\#]/) && (!(/\s+:+\s+/)) && (!(/\s+p\s+/)) && (/\bnmake\b/) ) ? return 1 : return 0; } ######################################################################################## # sub: get_alias_resolving_infos # gets: $line # returns: $job_dir, $job_platform, $alias ######################################################################################## sub get_alias_resolving_infos { my $line = shift; if ($line =~ /^\w+\s+(\S+)\s+\w+\s+\-\s+(\w+)\,?(\w+)?\s+(\S+)\s+/) { # get the current work directory my $temp_job_dir = $1; my $job_dir = change_job_directory($temp_job_dir); # get the job platform of the current job # if it is a 'n' job platform transform it to 'w' # because 'n' can be used now as 'w' (both means windows) my $job_platform = $2; $job_platform = "w" if($job_platform eq "n"); # get the first alias in each line my $alias = $4; return ($job_dir, $job_platform, $alias); } return (undef, undef, undef); } ######################################################################################## # sub: change_job_directory # gets: $job_dir # returns: $changed_job_dir ######################################################################################## # we don't need the module name and the first '\' in the current directory sub change_job_directory { my $changed_job_dir = shift; # ignore the module name $changed_job_dir =~ s/^\w+//; # change all other '\' against the '/' of the current dir $changed_job_dir =~ s/\\/\//g; # get only a "/" if we are in the root directory $changed_job_dir = "/" if ($changed_job_dir eq ""); return $changed_job_dir; } ######################################################################################## # sub: check_alias_and_job_platform # gets: $job_dir, $job_platform, $alias, $dir_of_job_platform_ref, # $dir_of_alias_ref, $module_name, $line_number # returns: - ######################################################################################## # get it in the hash only if it is a valid job platform, # like 'w', 'u', 'm' and 'n' # 'all' is also valid but it doesn't exist in an alias platform(!) sub check_alias_and_job_platform { my ($job_dir, $job_platform, $alias, $dir_of_job_platform_ref, $dir_of_alias_ref, $module_name, $line_number) = @_; # is it a valid job_platform? if ($job_platform =~ /(w|u|m|n|all)/) { # get only the 'w', 'u', 'm' and 'n' based job platforms if ($job_platform =~ /[wumn]/) { # doesn't the key already exist? (!(exists $$dir_of_job_platform_ref{$job_platform.$alias})) # get the first alias with the matching job platform in the hash ? get_alias_and_job_platform($job_platform, $alias, $dir_of_job_platform_ref) # this is a line with a redundant alias and job platform : add_errorlog_alias_redundancy_statement($module_name, $alias, $job_platform, $line_number); } if (!(exists $$dir_of_alias_ref{$alias})) { # get each first alias with the matching job platform get_alias_and_matching_directory($dir_of_alias_ref, $alias, $job_dir); } } # it's not a valid job platform else { add_errorlog_invalid_platform_statement($module_name, $job_platform, $line_number); } } ######################################################################################## # sub: get_alias_and_job_platform # gets: $job_platform, $alias, $dir_of_job_platform_ref # returns: - ######################################################################################## # get the the job platform and the first alias as a unique key # and the job platform as value of the hash # it's for checking later that the alias platform is equal to the job platform # e.g.: line 6 + 7 of the module 'gtk' (SRC680/src.m42) # "gt gtk\pkgconfig nmake - u gt_pkg NULL" # "gt gtk\glib nmake - u gt_glib gt_pkg.u NULL" # the alias 'gt_pkg' has the directory 'gtk\pkgconfig' (we need only 'pkgconfig') # and it has the job platform 'u' - compare it with the alias platform 'gt_pkg.u' sub get_alias_and_job_platform { my ($job_platform, $alias, $dir_of_job_platform_ref) = @_; # key = 'job platform' and 'first alias' => value = 'job platform' $$dir_of_job_platform_ref{$job_platform.$alias} = $job_platform; } ######################################################################################## # sub: get_alias_and_matching_directory # gets: $dir_of_alias_ref, $alias, $job_dir # returns: - ######################################################################################## # fill the hash with the first alias and the matching directory # e.g. line 14 of module 'setup2' (SRC680/src.m42) # "se setup2\win\source\unloader nmake - w se_wulo se_unotypes NULL" # key = 'se_wulo' => value = 'win/source/unloader' sub get_alias_and_matching_directory { my ($dir_of_alias_ref, $alias, $job_dir) = @_; # key = 'first alias' => value = 'job directory' $$dir_of_alias_ref{$alias} = $job_dir; } ######################################################################################## # sub: show_no_info_line # gets: $line, $line_number # returns: $no_info_line ######################################################################################## sub show_no_info_line { my ($line, $line_number) = @_; my $no_info_line += 1; chomp($line); print"Ignore line <$line_number>:\n\"$line\"\n\n" if ($debug); return $no_info_line; } ######################################################################################## # sub: get_module_name # gets: $line # returns: $module_name ######################################################################################## sub get_module_name { my $line = shift; my $module_name = ""; if ($line =~ /^\w+\s+([\w\.\-]+)\\?/) { $module_name = $1; } # set the 'module name' in the data structure tree $XMLTree->setModuleName($module_name); return $module_name; } ######################################################################################## # sub: get_module_dependency_line_infos # gets: $line, $module_name, $line_number # returns: $module_dependency_line_was_read, $info_line_sum ######################################################################################## # get the informations about the module dependency line # like line 1 of module 'sal' (SRC680/src.m42) # "sa sal : xml2cmp NULL" # $module_name $module_dependency @module_dependency_names sub get_module_dependency_line_infos { my ($line, $module_name, $line_number) = @_; my $module_dependency = ""; my @module_dependency_names = (); my %dep_modules_and_products = (); my $product = ""; my $module_dependency_line_was_read = 1; my $info_line_sum = 1; if ($debug) { print"\nline number : <$line_number>\n"; print"module-name : <$module_name>\n"; } # get the dependencies if ($line =~ /\s+(:+)\s+/) { $module_dependency = $1; print"module-dependency : <$module_dependency>\n" if ($debug); # transform the dependency type to the corresponding tag name if ($module_dependency eq ":") { $module_dependency = "md-simple"; } elsif ($module_dependency eq "::") { $module_dependency = "md-always"; } elsif ($module_dependency eq ":::") { $module_dependency = "md-force"; } } # get a list of all depending module names if ($line =~ /:+\s+([\S\s]+)\s+NULL/) { @module_dependency_names = split(/\s+/, $1); foreach my $module (@module_dependency_names) { # check whether that there is another product (as "all") of a module if ($module =~ /(\S+):+(\S+)/) { $dep_modules_and_products{$2} = $1; } else { $dep_modules_and_products{$module} = "all"; } } } # add the dependency module names, the module dependency type and the product to the data structure foreach my $module (sort keys %dep_modules_and_products) { print"module-dependency-name(s) : key <$module> value <".$dep_modules_and_products{$module}.">\n" if ($debug); $XMLTree->addModuleDependencies($module, $module_dependency, $dep_modules_and_products{$module}); } return ($module_dependency_line_was_read, $info_line_sum); } ######################################################################################## # sub: get_nmake_line_infos # gets: $line, \%dir_of_alias, \%dir_of_job_platform, $module_name, $line_number # returns: $info_line ######################################################################################## # get all infos about the 'nmake' lines # e.g. line 8 of module 'sal' # "sa sal\systools\win32\guistdio nmake - n sa_guistdio sa_uwinapi.n NULL" # $job_dir $job $job_platform 1.$alias 2.$alias + alias platform sub get_nmake_line_infos { my ($line, $dir_of_alias_ref, $dir_of_job_platform_ref, $module_name, $line_number) = @_; my $directories_ref = ""; my $info_line = 0; # get the infos about the 'nmake' lines if ($line =~ /^\w+\s+(\S+)\s+(\w+)\s+\-\s+(\w+)\,?(\S+)?/) { # get the current working directory my $temp_job_dir = $1; my $job_dir = change_job_directory($temp_job_dir); # get the job my $job = $2; $job = "make" if ($job eq "nmake"); # get the job platform of the current job # if it is a 'n' job platform transform it to 'wnt' # available values are: 'wnt', 'unx', 'mac' or 'all' my $job_platform = $3; $job_platform = change_job_platform_name($job_platform); # get the first alias in each line my $restriction = $4; my %build_req = ( "$restriction" => "$job_platform") if ($restriction && $job_platform); # get all aliases (but not the first) in an array my $aliases_ref = get_aliases($line); # filter the list of aliases, which has a 'p' job platform # and transform a 'n' ending alias platform to a 'w' ending alias platform filter_aliases($aliases_ref); # resolve all aliases (alias[.job platform] => matching directory) $directories_ref = resolve_aliases($aliases_ref, $dir_of_alias_ref, $dir_of_job_platform_ref, $module_name, $line_number); # count the informative lines $info_line = 1; $XMLTree->addJob($job_dir, $job, $job_platform, $directories_ref, \%build_req); # show the infos, that we know about each line if ($debug == 1) { show_line_infos($line_number, $job_dir, $job, $job_platform, $restriction, $aliases_ref, $directories_ref); } } return $info_line; } ######################################################################################## # sub: change_job_platform_name # gets: $job_platform # returns: $job_platform ######################################################################################## sub change_job_platform_name { my $job_platform = shift; $job_platform = "wnt" if($job_platform eq "n" || $job_platform eq "w"); $job_platform = "unx" if($job_platform eq "u"); $job_platform = "mac" if($job_platform eq "m"); return $job_platform; } ######################################################################################## # sub: get_aliases # gets: $_ (current line) # returns: \@aliases ######################################################################################## # get all aliases of the line in an array sub get_aliases { my $line = shift; my @aliases = (); # get all aliases in an array (but cut out the first alias) if ($line =~ /\-\s+[\w+\,]+\s+([\S\s]+)\s+NULL$/) { print"\nall job aliases : <$1>\n" if ($debug); @aliases = split /\s+/, $1; # we don't need the first alias (it stands for the current job directory) shift @aliases; } return \@aliases; } ######################################################################################## # sub: filter_aliases # gets: $aliases_ref # returns: - ######################################################################################## # filter all aliases, because we only need the 'w', 'u' and 'm' job platform based aliases sub filter_aliases { my $aliases_ref = shift; # get the highest index of the array (number of elements of the array - 1) # also works: my $index = scalar(@$aliases_ref)-1; my $index = $#{@{$aliases_ref}}; for (; $index >= 0; $index--) { # filter the 'p' job platform based aliases from '@aliases' splice(@$aliases_ref, $index, 1) if ($$aliases_ref[$index] =~ /\.p$/); # transform a '.n' ending alias platform to '.w' ending alias platform if ($$aliases_ref[$index] =~ /\.n$/) { $$aliases_ref[$index] =~ s/\.n$/\.w/; splice(@$aliases_ref, $index, 1, $$aliases_ref[$index]); } } } ######################################################################################## # sub: resolve_aliases # gets: $aliases_ref, $dir_of_alias_ref, $dir_of_job_platform_ref, # $module_name, $line_number # returns: \@directories ######################################################################################## # here we get each alias with the matching job directory sub resolve_aliases { my ($aliases_ref, $dir_of_alias_ref, $dir_of_job_platform_ref, $module_name, $line_number) = @_; my @directories = (); my ($alias_platform, $alias, $temp_alias) = ""; # resolving all directory aliases foreach $temp_alias (@$aliases_ref) { ($alias, $alias_platform) = compare_job_platform_with_alias_platform ($temp_alias, $dir_of_job_platform_ref, $module_name, $line_number); # does the alias exist? if (exists $$dir_of_alias_ref{$alias}) { # then get the matching directory in the array push (@directories, $$dir_of_alias_ref{$alias}); } else { add_errorlog_no_directory_of_alias_statement($module_name, $alias, $line_number); } } return \@directories; } ######################################################################################## # sub: compare_job_platform_with_alias_platform # gets: $alias, $dir_of_job_platform_ref, $module_name, $line_number # returns: $alias ######################################################################################## sub compare_job_platform_with_alias_platform { my ($alias, $dir_of_job_platform_ref, $module_name, $line_number) = @_; my $alias_platform = ""; # compare the alias platform (with a dot and an ending letter, like "al_alib.u") # with the job platform of the line in which this alias was resolved if ($alias =~ /\.([wum])$/) { $alias_platform = $1; # don't memorize the ending dot and letter $alias =~ s/\.\w$//; # if the value(= job platform) of the hash or the alias platform has no value # set it to "no valid value" if (!(exists $$dir_of_job_platform_ref{$alias_platform.$alias})) { $$dir_of_job_platform_ref{$alias_platform.$alias} = "no valid value"; } $alias_platform = "no valid value" if (!($alias_platform)); # are the job platform and the alias platform equal? if ($$dir_of_job_platform_ref{$alias_platform.$alias} ne $alias_platform) { add_errorlog_not_equal_platforms_statement ($module_name, $alias, $alias_platform, $dir_of_job_platform_ref, $line_number); } } return ($alias, $alias_platform); } ######################################################################################## # sub: show_line_infos # gets: $line_number, $job_dir, $job, $job_platform, $restriction, # $aliases_ref, $directories_ref # returns: - ######################################################################################## # print the infos about each line sub show_line_infos { my ($line_number, $job_dir, $job, $job_platform, $restriction, $aliases_ref, $directories_ref) = @_; print"line number : <$line_number>\n"; print"job directory : <$job_dir>\n"; print"job : <$job>\n"; print"job platform : <$job_platform>\n" if ($job_platform =~ /(w|u|m|all)/); print"restriction : <$restriction>\n" if ($restriction); print"alias dependencies : <@$aliases_ref>\n"; print"directory dependencies : <@$directories_ref>\n\n"; } ######################################################################################## # sub: lines_sums_output # gets: $module_name, $line_number, $info_line_sum, $no_info_line_sum # returns: - ######################################################################################## sub lines_sums_output { # this line variables are for checking that all lines will be read: my ($module_name, $line_number, $info_line_sum, $no_info_line_sum) = @_; my $lines_sum = 0; add_errorlog_no_module_name_statement() if (!($module_name)); # were all lines read? and is the checksum okay? $lines_sum = $info_line_sum + $no_info_line_sum; if ($lines_sum == $line_number) { print"All $line_number line(s) of module <$module_name> were read and checked!\n\n"; } else { add_errorlog_different_lines_sums_statement($module_name); } print"module: <$module_name>\n". "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n". " info line(s) sum = $info_line_sum\n". "no-info line(s) sum = $no_info_line_sum\n". "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n". " total line(s) sum = $line_number\n\n\n"; } ############################ ERROR_LOG subroutines ##################################### ######################################################################################## # sub: add_errorlog_invalid_job_platform_statement # gets: $module_name, $platform, $line_number # returns: - ######################################################################################## sub add_errorlog_invalid_job_platform_statement { my ($module_name, $job_platform, $line_number) = @_; print ERROR_LOG "Error in module <$module_name> of dir/file <$parse_file> line <$line_number>.\n". "The job platform <$job_platform> is not valid.\n\n"; } ######################################################################################## # sub: add_errorlog_not_equal_platforms_statement # gets: $module_name, $alias, $alias_platform, $dir_of_job_platform_ref, $line_number # returns: - ######################################################################################## sub add_errorlog_not_equal_platforms_statement { my ($module_name, $alias, $alias_platform, $dir_of_job_platform_ref, $line_number) = @_; print ERROR_LOG "Error in module <$module_name> of dir/file <$parse_file> line <$line_number>.\n". "The alias platform <$alias.$alias_platform> is not equal ". "with the job platform <$$dir_of_job_platform_ref{$alias_platform.$alias}>.\n\n"; } ######################################################################################## # sub: add_errorlog_no_directory_of_alias_statement # gets: $module_name, $alias, $line_number # returns: - ######################################################################################## sub add_errorlog_no_directory_of_alias_statement { my ($module_name, $alias, $line_number) = @_; print ERROR_LOG "Error in module <$module_name> of dir/file <$parse_file> line <$line_number>.\n". "The directory of the alias <$alias> doesn't exist!\n\n"; } ######################################################################################## # sub: add_errorlog_no_module_name_statement # gets: - # returns: - ######################################################################################## sub add_errorlog_no_module_name_statement { print ERROR_LOG "Error. No module name found in dir/file <$parse_file>.\n\n"; } ######################################################################################## # sub: add_errorlog_alias_redundancy_statement # gets: $module_name, $alias, $job_platform, $line_number # returns: - ######################################################################################## sub add_errorlog_alias_redundancy_statement { my ($module_name, $alias, $job_platform, $line_number)= @_; print ERROR_LOG "Error in module <$module_name> of dir/file <$parse_file> line <$line_number>.\n". "The alias <$alias> with the job platform <$job_platform> is redundant.\n\n"; } ######################################################################################## # sub: add_errorlog_unknown_format_statement # gets: $module_name, $line_number # returns: - ######################################################################################## sub add_errorlog_unknown_format_statement { my ($line, $module_name, $line_number) = @_; print ERROR_LOG "Error in module <$module_name> of dir/file <$parse_file> line <$line_number>.". "\nUnknown format:\n\"$line\"\n\n"; } ######################################################################################## # sub: add_errorlog_different_lines_sums_statement # gets: $module_name # returns: - ######################################################################################## sub add_errorlog_different_lines_sums_statement { my $module_name = shift; print ERROR_LOG "Error in module <$module_name> of dir/file <$parse_file>.\n". "The sums of all info and no-info lines are not correct!\n\n"; } ######################################################################################## # sub: add_errorlog_no_buildlst_file_found_statement # gets: $parse_file # returns: - ######################################################################################## sub add_errorlog_no_buildlst_file_found_statement { my $parse_file = shift; print ERROR_LOG "Error in command line argument <$parse_file>.\n". "File 'build.lst' not found!\n"; } ############################# end of the subroutines ###################################