summaryrefslogtreecommitdiff
path: root/soldep/bootstrp/build_list_converter.pl
diff options
context:
space:
mode:
Diffstat (limited to 'soldep/bootstrp/build_list_converter.pl')
-rw-r--r--soldep/bootstrp/build_list_converter.pl892
1 files changed, 892 insertions, 0 deletions
diff --git a/soldep/bootstrp/build_list_converter.pl b/soldep/bootstrp/build_list_converter.pl
new file mode 100644
index 000000000000..3887eca03a12
--- /dev/null
+++ b/soldep/bootstrp/build_list_converter.pl
@@ -0,0 +1,892 @@
+:
+eval 'exec perl -wS $0 ${1+"$@"}'
+ if 0;
+
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 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 ###################################