| : |
| 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 <ascii_parse.log> 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 (<PARSE_ASCII>) |
| { |
| # 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 (<PARSE_ASCII>) |
| { |
| # 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 ################################### |