summaryrefslogtreecommitdiff
path: root/solenv/bin/modules/packager
diff options
context:
space:
mode:
authorOliver Bolte <obo@openoffice.org>2004-11-18 07:42:45 +0000
committerOliver Bolte <obo@openoffice.org>2004-11-18 07:42:45 +0000
commit52a338ec7813ff27072ac32fe705631bf6e1577a (patch)
tree3d890393860a5c3ec070a9d43d0babd652b207c2 /solenv/bin/modules/packager
parentd28972a69f27143175e25fdc40ebfabd56081a83 (diff)
INTEGRATION: CWS nativefixer1 (1.2.102); FILE MERGED
2004/11/04 19:05:09 hjs 1.2.102.6: #118240# reset generated targets 2004/11/03 15:32:30 hjs 1.2.102.5: #118240# using commandfile feature + several small fixes 2004/11/02 12:37:32 hjs 1.2.102.4: #118240# introduce cleanup directory 2004/11/02 11:41:50 is 1.2.102.3: #118240# parameter -i to ignore errors 2004/10/27 08:58:02 is 1.2.102.2: #118240# four directories up to the root 2004/10/26 10:43:00 is 1.2.102.1: #118240# parallel packing process
Diffstat (limited to 'solenv/bin/modules/packager')
-rw-r--r--solenv/bin/modules/packager/work.pm196
1 files changed, 185 insertions, 11 deletions
diff --git a/solenv/bin/modules/packager/work.pm b/solenv/bin/modules/packager/work.pm
index de8887dff891..2b48a3208a20 100644
--- a/solenv/bin/modules/packager/work.pm
+++ b/solenv/bin/modules/packager/work.pm
@@ -2,9 +2,9 @@
#
# $RCSfile: work.pm,v $
#
-# $Revision: 1.2 $
+# $Revision: 1.3 $
#
-# last change: $Author: kz $ $Date: 2004-06-11 18:21:41 $
+# last change: $Author: obo $ $Date: 2004-11-18 08:42:45 $
#
# The Contents of this file are made available subject to the terms of
# either of the following licenses
@@ -63,7 +63,9 @@
package packager::work;
+use packager::exiter;
use packager::existence;
+use packager::files;
use packager::globals;
###########################################
@@ -113,7 +115,7 @@ sub create_package_todos
{
my ( $packagelist ) = @_;
- my @calls = ();
+ my @targets = (); # only used, if the build server is not used
for ( my $i = 0; $i <= $#{$packagelist}; $i++ )
{
@@ -143,24 +145,24 @@ sub create_package_todos
my $languagesets = convert_stringlist_into_array(\$languagelist, "\|");
- # now all information is available to create the systemcalls
+ # 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 $systemcall = "dmake " . $target . "_" . $languagestring;
- push(@calls, $systemcall);
+ my $target = $target . "_" . $languagestring;
+ push(@targets, $target);
- my $insertline = $systemcall . "\n";
+ my $insertline = $target . "\n";
push( @packager::globals::logfileinfo, $insertline);
}
}
}
}
- return \@calls;
+ return \@targets;
}
###########################################
@@ -169,11 +171,11 @@ sub create_package_todos
sub execute_system_calls
{
- my ( $calls ) = @_;
+ my ( $targets ) = @_;
- for ( my $i = 0; $i <= $#{$calls}; $i++ )
+ for ( my $i = 0; $i <= $#{$targets}; $i++ )
{
- my $systemcall = ${$calls}[$i];
+ my $systemcall = "dmake " . ${$targets}[$i];
my $infoline = "Packager: $systemcall\n";
print $infoline;
@@ -190,6 +192,178 @@ sub execute_system_calls
$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 $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
+
+ generate_makefile($tempdir, $makefilepath, $prjroot, $target, \@targetlines);
+
+ do_broadcast($tempdir, $prjname, $prj, $platform, $prjdep);
+ push @targetdirs, $tempdir;
+ }
+ @targetlines = ();
+ if ( defined $ENV{USE_SHELL} && $ENV{USE_SHELL} eq "4nt" ) {
+ push( @targetlines, "RMRECURSIVEFLAGS=/sxyz\n" );
+ } else {
+ push( @targetlines, "RMRECURSIVEFLAGS=-rf\n" );
+ }
+ push( @targetlines, "\ngenerated_target :\n"); # to be included into the makefile.mk
+ my @depdirs = @targetdirs;
+ foreach my $i (@targetdirs) {
+ $i =~ s/.*?([\w-]+)$/\.\.\$\/$1/;
+ push( @targetlines, "\t+\$(RM) \$(RMRECURSIVEFLAGS) $i\n"); # to be included into the makefile.mk
+ }
+ push( @targetlines, "\n" );
+ $target = "cleanup";
+ $tempdir = $miscpath . $packager::globals::separator . $target;
+ $tempdir = packager::files::create_unique_directory ($tempdir);
+ generate_makefile($tempdir, $makefilepath, $prjroot, $target, \@targetlines);
+ $prjdep = join ";", @depdirs;
+ $prjdep =~ s/\$\//\\/g;
+ $prjdep =~ s/\//\\/g;
+ $prjdep =~ s/\.\.[\.\\]+/$prjname\\/g;
+ do_broadcast($tempdir, $prjname, $prj, $platform, $prjdep);
+}
+
+##############################################################
+# 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;;$prjdep\"";
+ print "to tmpfile: \"$workstamp;$platform;$prjname;$prjdir;;$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 occured
+ {
+ 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;
}
}
}