Commit cabe5381 authored by Max Kanat-Alexander's avatar Max Kanat-Alexander

Bug 648178: Make install-module.pl check if a compiler is available

and fail with a clear error if not. r=glob, a=mkanat
parent f0129cf8
...@@ -33,6 +33,7 @@ use Bugzilla::Constants; ...@@ -33,6 +33,7 @@ use Bugzilla::Constants;
use Bugzilla::Install::Requirements qw(have_vers); use Bugzilla::Install::Requirements qw(have_vers);
use Bugzilla::Install::Util qw(bin_loc install_string); use Bugzilla::Install::Util qw(bin_loc install_string);
use Config;
use CPAN; use CPAN;
use Cwd qw(abs_path); use Cwd qw(abs_path);
use File::Path qw(rmtree); use File::Path qw(rmtree);
...@@ -102,6 +103,8 @@ use constant CPAN_DEFAULTS => { ...@@ -102,6 +103,8 @@ use constant CPAN_DEFAULTS => {
sub check_cpan_requirements { sub check_cpan_requirements {
my ($original_dir, $original_args) = @_; my ($original_dir, $original_args) = @_;
_require_compiler();
my @install; my @install;
foreach my $module (REQUIREMENTS) { foreach my $module (REQUIREMENTS) {
my $installed = have_vers($module, 1); my $installed = have_vers($module, 1);
...@@ -122,6 +125,26 @@ sub check_cpan_requirements { ...@@ -122,6 +125,26 @@ sub check_cpan_requirements {
} }
} }
sub _require_compiler {
my @errors;
my $cc_name = $Config{cc};
my $cc_exists = bin_loc($cc_name);
if (!$cc_exists) {
push(@errors, install_string('install_no_compiler'));
}
my $make_name = $CPAN::Config->{make};
my $make_exists = bin_loc($make_name);
if (!$make_exists) {
push(@errors, install_string('install_no_make'));
}
die @errors if @errors;
}
sub install_module { sub install_module {
my ($name, $test) = @_; my ($name, $test) = @_;
my $bzlib = BZ_LIB; my $bzlib = BZ_LIB;
......
...@@ -58,8 +58,14 @@ our @EXPORT_OK = qw( ...@@ -58,8 +58,14 @@ our @EXPORT_OK = qw(
sub bin_loc { sub bin_loc {
my ($bin, $path) = @_; my ($bin, $path) = @_;
my @path = $path ? @$path : File::Spec->path;
# If the binary is a full path...
if ($bin =~ m{[/\\]}) {
return MM->maybe_command($bin) || '';
}
# Otherwise we look for it in the path in a cross-platform way.
my @path = $path ? @$path : File::Spec->path;
foreach my $dir (@path) { foreach my $dir (@path) {
next if !-d $dir; next if !-d $dir;
my $full_path = File::Spec->catfile($dir, $bin); my $full_path = File::Spec->catfile($dir, $bin);
......
...@@ -131,6 +131,13 @@ then the value of the ##column## column that needs to be fixed: ...@@ -131,6 +131,13 @@ then the value of the ##column## column that needs to be fixed:
EOT EOT
install_module => 'Installing ##module## version ##version##...', install_module => 'Installing ##module## version ##version##...',
installation_failed => '*** Installation aborted. Read the messages above. ***', installation_failed => '*** Installation aborted. Read the messages above. ***',
install_no_compiler => <<END,
ERROR: Using install-module.pl requires that you install a compiler, such as
gcc.
END
install_no_make => <<END,
ERROR: Using install-module.pl requires that you install "make".
END
lc_new_vars => <<'END', lc_new_vars => <<'END',
This version of Bugzilla contains some variables that you may want to This version of Bugzilla contains some variables that you may want to
change and adapt to your local settings. Please edit the file change and adapt to your local settings. Please edit the file
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment