-#!/usr/bin/perl
+#!/usr/bin/env perl
=comment
###################################################
-use vars qw($VERSION); $VERSION = 'REL_0.1';
+our $VERSION = 'REL_0.1';
use strict;
use warnings;
+use 5.010;
use Config;
use Fcntl qw(:flock :seek);
use File::Path;
use File::Basename;
use File::Temp;
use File::Spec;
-use FindBin qw'$Bin';
+use FindBin qw'$RealBin';
use IO::Handle;
use POSIX qw(:signal_h strftime);
use Data::Dumper;
: 'xxxxxx'
);
}
+ push @INC, getcwd();
}
use EximBuild::SCM;
exec $1, @ARGV;
}
+if (umask != 022) {
+ umask 022;
+ say "$0: forced umask to 022" if -t;
+}
my %module_hooks;
my $orig_dir = getcwd();
-push @INC, $orig_dir;
# make sure we exit nicely on any normal interrupt
# so the cleanup handler gets called.
# process config file
#
require $buildconf;
+#use Data::Dumper;
+#die Dumper \%EximBuild::conf;
+
+
+# Does not seem to be necessary
+#die "$0: permissions on '$EximBuild::conf{build_root}' should be >= 0775\n"
+# if -d $EximBuild::conf{build_root}
+# and ((stat $EximBuild::conf{build_root})[2] & 0775) != 0775;
+
# get the config data into some local variables
my (
$aux_path,$trigger_exclude,$trigger_include,$secret,
$keep_errs,$force_every, $make, $optional_steps,
$use_vpath,$tar_log_cmd, $using_msvc, $extra_config,
- $make_jobs, $core_file_glob
+ $make_jobs, $core_file_glob, $global_lock_dir
)
=@EximBuild::conf{
qw(build_root target animal print_success aux_path trigger_exclude
trigger_include secret keep_error_builds force_every make optional_steps
- use_vpath tar_log_cmd using_msvc extra_config make_jobs core_file_glob)
+ use_vpath tar_log_cmd using_msvc extra_config make_jobs core_file_glob global_lock_dir)
};
+# This should be done more generally, for all the scripts
+# including the $buildconf. For now this is duplicated
+# in a similiar war in run_branches.
+$global_lock_dir //= $buildroot // die "$0: need global_lock_dir\n";
+
+die "$0: need read/write permissions on '$global_lock_dir': $!\n"
+ if not -r -w $global_lock_dir;
+
#default is no parallel build
$make_jobs ||= 1;
{
return unless step_wanted('test');
print time_str(),"running make test ...\n" if $verbose;
+
my $tests_range = $EximBuild::conf{range_num_tests} || "1 4";
+ # backwards compat for build-farm.conf from before this support was added
+ $EximBuild::conf{test_configure_env} = {} unless exists $EximBuild::conf{test_configure_env};
+ $EximBuild::conf{test_configure_args} = [] unless exists $EximBuild::conf{test_configure_args};
+
my @makeout;
- @makeout =`(cd $exim/test
- autoconf && ./configure && $make )2>&1 `;
+ my %saved_env = %ENV;
+ foreach my $k (keys %{$EximBuild::conf{test_configure_env}}) {
+ $ENV{$k} = $EximBuild::conf{test_configure_env}{$k};
+ }
+ my $conf_args = '';
+ foreach (@{$EximBuild::conf{test_configure_args}}) {
+ s/'/'"'"'/g;
+ $conf_args .= " '${_}'";
+ }
+ @makeout =`(cd $exim/test && ./configure $conf_args && $make )2>&1 `;
+ %ENV = %saved_env;
+
my $status = $? >>8;
unless($status)
{
- my @tmp = `(WORKDIR=\$PWD
- cd $exim/test
- ./runtest \$WORKDIR/$exim/src/build-*/exim -CONTINUE $tests_range )2>&1`;
+ my @tmp = `(cd $exim/test && ./runtest -CONTINUE $tests_range )2>&1`;
$status = $? >>8;
push @makeout, @tmp;
# Prepend the failed summary log outputs for ease of reading
}
}
writelog('test',\@makeout);
+ send_result('Test',$status,\@makeout) if $status;
+
+ @makeout = `cat $exim/test/run-summary.log`;
+ writelog('test-results',\@makeout);
+
print "======== make test logs ===========\n",@makeout
if ($verbose > 1);
-
- send_result('Test',$status,\@makeout) if $status;
$steps_completed .= " Test";
}
@tmp = `echo "Hardcoded Exim user info:"; id $exim_user
cd $exim && perl -pi -e 's/^EXIM_USER=.*/EXIM_USER=$exim_user/' $local_conf`;
push @confout, @tmp;
- my $me = `whoami`; chomp $me;
+ #my $me = `whoami`; chomp $me;
+ my $me = getpwuid($>) // die "$0: getpwuid($>): $!\n";
@tmp = `echo "Build Farm user info:"; id $me
cd $exim && perl -pi -e 's/^# CONFIGURE_OWNER=\$/CONFIGURE_OWNER=$me/' $local_conf`;
push @confout, @tmp;
push @confout, @tmp;
# Build the config_opts array to send to the server
chomp @tmp;
- my @config_opts = grep s/(?:LOOKUP_|EXPERIMENTAL_|USE_)(\S+)=.*/$1/,
+ my @config_opts = grep s/(?:LOOKUP_|EXPERIMENTAL_|SUPPORT_|USE_)(\S+)=.*/$1/,
@tmp;
push @config_opts, grep s/^(?:EXIM_)(PERL|PYTHON)=.*/$1/,
@tmp;
delete $conf->{secret};
if ($conf->{scm} eq 'git') {
- chomp($conf->{farm}{revision} = `git describe --tags --always --dirty=+`);
+ chomp($conf->{farm}{revision} = `cd $RealBin && git describe --tags --always --dirty=+`);
$conf->{farm}{cwd} = getcwd();
- $conf->{farm}{bindir} = $Bin;
+ $conf->{farm}{bindir} = $RealBin;
+ $conf->{farm}{perl} = $^V;
}
$Data::Dumper::Sortkeys = 1;