diff options
Diffstat (limited to 'solenv/bin/modules/packager/work.pm')
-rw-r--r-- | solenv/bin/modules/packager/work.pm | 320 |
1 files changed, 0 insertions, 320 deletions
diff --git a/solenv/bin/modules/packager/work.pm b/solenv/bin/modules/packager/work.pm deleted file mode 100644 index 283810a09..000000000 --- a/solenv/bin/modules/packager/work.pm +++ /dev/null @@ -1,320 +0,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. -# -#************************************************************************* - - -package packager::work; - -use packager::exiter; -use packager::existence; -use packager::files; -use packager::globals; - -########################################### -# Setting global variables -########################################### - -sub set_global_variable -{ - my $compiler = $ENV{'OUTPATH'}; - - if ( $ENV{'PROEXT'} ) { $compiler = $compiler . $ENV{'PROEXT'}; } - - $packager::globals::compiler = $compiler; -} - -############################################################################# -# Converting a string list with separator $listseparator -# into an array -############################################################################# - -sub convert_stringlist_into_array -{ - my ( $includestringref, $listseparator ) = @_; - - my @newarray = (); - my $first; - my $last = ${$includestringref}; - - while ( $last =~ /^\s*(.+?)\Q$listseparator\E(.+)\s*$/) # "$" for minimal matching - { - $first = $1; - $last = $2; - push(@newarray, "$first"); - } - - push(@newarray, "$last"); - - return \@newarray; -} - -########################################### -# Generating a list of package calls -# corresponding to the package list -########################################### - -sub create_package_todos -{ - my ( $packagelist ) = @_; - - my @targets = (); # only used, if the build server is not used - - for ( my $i = 0; $i <= $#{$packagelist}; $i++ ) - { - my $line = ${$packagelist}[$i]; - - if ( $line =~ /^\s*\#/ ) { next; } # comment line - - if ( $line =~ /^\s*(\w+?)\s+(\S+?)\s+(\S+?)\s+(\w+?)\s*$/ ) - { - my $product = $1; - my $compilerlist = $2; - my $languagelist = $3; - my $target = $4; - - $product =~ s/\s//g; - $compilerlist =~ s/\s//g; - $languagelist =~ s/\s//g; - $target =~ s/\s//g; - - my $compilers = convert_stringlist_into_array(\$compilerlist, ","); - - # is the compiler of this "build" part of the compiler list in pack.lst ? - - if ( packager::existence::exists_in_array($packager::globals::compiler, $compilers) ) - { - # products are separated in pack.lst by "|" - - my $languagesets = convert_stringlist_into_array(\$languagelist, "\|"); - - # now all information is available to create the targets for the systemcalls - - for ( my $j = 0; $j <= $#{$languagesets}; $j++ ) - { - my $languagestring = ${$languagesets}[$j]; - $languagestring =~ s/\,/\_/g; # comma in pack.lst becomes "_" in dmake command - - my $target = $target . "_" . $languagestring; - push(@targets, $target); - - my $insertline = $target . "\n"; - push( @packager::globals::logfileinfo, $insertline); - } - } - } - } - - return \@targets; -} - -########################################### -# Executing the generated system calls -########################################### - -sub execute_system_calls -{ - my ( $targets ) = @_; - - for ( my $i = 0; $i <= $#{$targets}; $i++ ) - { - my $systemcall = "dmake " . ${$targets}[$i]; - - my $infoline = "Packager: $systemcall\n"; - print $infoline; - push( @packager::globals::logfileinfo, $infoline); - - my $returnvalue = system($systemcall); - - $infoline = "Packager finished: $systemcall\n"; - print $infoline; - push( @packager::globals::logfileinfo, $infoline); - - if ( $returnvalue ) - { - $infoline = "\nERROR: Packager $systemcall\n"; - print $infoline; - push( @packager::globals::logfileinfo, $infoline); - if (!($packager::globals::ignoreerrors)) { packager::exiter::exit_program("ERROR: Packing not successful : $systemcall", "execute_system_calls"); } - } - } -} - -############################################################## -# Starting the build server with the generated system calls -############################################################## - -sub start_build_server -{ - my ( $targets ) = @_; - - # preparing the directory structure - - my $prj = $ENV{PRJ}; # for example ".."; - my $platform = $ENV{INPATH}; # wntmsci10.pro, unxsols4.pro - my $platformpath = $prj . $packager::globals::separator . $platform; - if ( ! -d $platformpath ) { packager::files::create_directory($miscpath); } - my $miscpath = $platformpath . $packager::globals::separator . "misc"; - if ( ! -d $miscpath ) { packager::files::create_directory($miscpath); } - $miscpath = $miscpath . $packager::globals::separator . "temp"; - if ( -d $miscpath ) { packager::files::remove_complete_directory($miscpath); } # removing old files ! - if ( ! -d $miscpath ) { packager::files::create_directory($miscpath); } - - my $prjroot = ".." . $packager::globals::separator . ".." . $packager::globals::separator . ".." . $packager::globals::separator . ".."; # platform/misc/temp/uniquetempdir - - my $makefilepath = $prj . $packager::globals::separator . "util" . $packager::globals::separator . "makefile.mk"; - - if ( ! $ENV{'PRJNAME'} ) { packager::exiter::exit_program("ERROR: Environment variable PRJNAME not set!", "do_broadcast"); } - my $prjname = $ENV{PRJNAME}; - - my $pkgformat = $ENV{PKGFORMAT}; - - my $prjdep = $prjname . "\\" . "util"; # always windows like path - my @targetdirs; - my @targetlines = (); - # iterating over all targets - for ( my $i = 0; $i <= $#{$targets}; $i++ ) - { - my $target = ${$targets}[$i]; - my $tempdir = $miscpath . $packager::globals::separator . $target; - $tempdir = packager::files::create_unique_directory ($tempdir); - @targetlines=(); - push( @targetlines, "\ngenerated_target : $target\n\n"); # to be included into the makefile.mk - - if ( defined $pkgformat ) { - push( @targetlines, "\n$target : ".'$$@{$(PKGFORMAT:^".")}'."\n\n"); # to be included into the makefile.mk - } - - generate_makefile($tempdir, $makefilepath, $prjroot, $target, \@targetlines); - - do_broadcast($tempdir, $prjname, $prj, $platform, $prjdep); - push @targetdirs, $tempdir; - } -} - -############################################################## -# Generating the makefile in the temporary directory -############################################################## - -sub generate_makefile -{ - my ( $tempdir, $makefilepath, $prjroot, $target, $targetlines_ref ) = @_; - - my $makefile = packager::files::read_file($makefilepath); - - my @targetlines = (); - push( @targetlines, @{$targetlines_ref}); # to be included into the makefile.mk - - $prjroot = $prjroot . "\n"; - - my $uniquename = $tempdir; - get_filename_from_path(\$uniquename); - $uniquename = $uniquename . "\n"; - - my $counter = 0; - my $increase = 1; - - for ( my $i = 0; $i <= $#{$makefile}; $i++ ) - { - if ( ${$makefile}[$i] =~ /^\s*TARGET\s*=.*/ ) { ${$makefile}[$i] = "TARGET=" . $uniquename; } # setting the new project root - - if ( ${$makefile}[$i] =~ /^\s*PRJ\s*=.*/ ) { ${$makefile}[$i] = "PRJ=" . $prjroot; } # setting the new project root - - if ( ${$makefile}[$i] =~ /^\s*\.INCLUDE[\t ]*:[\t ]*target.mk[\t ]*$/ ) { $increase = 0; } # no more increase of the counter - - if ( $increase ) { $counter++; } - } - - splice(@{$makefile}, $counter, 0, @targetlines); # including the new target lines at position $counter - - my $newmakefilepath = $tempdir . $packager::globals::separator . "makefile.mk"; - packager::files::save_file($newmakefilepath, $makefile); -} - -############################################################## -# Generating the broadcasts for the build server -############################################################## - -sub do_broadcast -{ - use File::Temp; - - my ( $tempdir, $prjname, $prj, $platform, $prjdep ) = @_; - - # Syntax: cmd_bcst -s 18 "Version;Environment;Project;Verzeichnis;Restriction[;Abhaengigkeit1][;Abhaengigkeit n]..." - # Example: cmd_bcst -s 18 "SRC680;wntmsci10.pro;instsetoo_native;;instsetoo_native\bla1;instsetoo_native\util" - - if ( ! $ENV{'WORK_STAMP'} ) { packager::exiter::exit_program("ERROR: Environment variable WORK_STAMP not set!", "do_broadcast"); } - my $workstamp = $ENV{WORK_STAMP}; - - my $prjdir = $tempdir; - $prjdir =~ s/$prj/$prjname/; - $prjdir =~ s/\//\\/g; # convert to windows path syntax - - my $tempfiledir = $ENV{TMP}; - $tempfiledir = $tempdir if ( ! defined $tempfiledir ); - my ( $tmpfile_handle, $tmpfile_name ) = mkstemp( $tempfiledir . $packager::globals::separator . "packagerXXXXX"); - if ( ! $tmpfile_handle ) { - packager::exiter::exit_program("ERROR: Couldn't open temporary file \"$tmpfile_name\"!", "do_broadcast"); - } - print $tmpfile_handle "\"$workstamp;$platform;$prjname;$prjdir;nobase;$prjdep\""; - print "to tmpfile: \"$workstamp;$platform;$prjname;$prjdir;nobase;$prjdep\"\n"; - close $tmpfile_handle; - my $returnvalue = system("cmd_bcst -s 18 \@$tmpfile_name"); - print "cmd_bcst -s 18 \@$tmpfile_name\n"; - unlink "$tmpfile_name"; - - if ( $returnvalue ) # an error occurred - { - if (!($packager::globals::ignoreerrors)) { packager::exiter::exit_program("ERROR: Packing not successful!", "do_broadcast"); } - } -} - -############################################################## -# Returning the name of file or directory from complete path -############################################################## - -sub get_filename_from_path -{ - my ($longfilenameref) = @_; - - if ( $packager::globals::isunix ) - { - if ( $$longfilenameref =~ /^.*\/(\S.+\S?)/ ) - { - $$longfilenameref = $1; - } - } - - if ( $packager::globals::iswin ) - { - if ( $$longfilenameref =~ /^.*\\(\S.+\S?)/ ) - { - $$longfilenameref = $1; - } - } -} - -1; |