]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 648178: Make install-module.pl check if a compiler is available
authorMax Kanat-Alexander <mkanat@bugzilla.org>
Mon, 25 Apr 2011 00:11:03 +0000 (17:11 -0700)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Mon, 25 Apr 2011 00:11:03 +0000 (17:11 -0700)
and fail with a clear error if not.
r=glob, a=mkanat

Bugzilla/Install/CPAN.pm
Bugzilla/Install/Util.pm
template/en/default/setup/strings.txt.pl

index 20cdb5bbd55f8f72db1215815fad143ba4495e70..48dcf6fc08fb916e675cf92bae7ab659d136a29b 100644 (file)
@@ -33,6 +33,7 @@ use Bugzilla::Constants;
 use Bugzilla::Install::Requirements qw(have_vers);
 use Bugzilla::Install::Util qw(bin_loc install_string);
 
+use Config;
 use CPAN;
 use Cwd qw(abs_path);
 use File::Path qw(rmtree);
@@ -102,6 +103,8 @@ use constant CPAN_DEFAULTS => {
 sub check_cpan_requirements {
     my ($original_dir, $original_args) = @_;
 
+    _require_compiler();
+
     my @install;
     foreach my $module (REQUIREMENTS) {
         my $installed = have_vers($module, 1);
@@ -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 {
     my ($name, $test) = @_;
     my $bzlib = BZ_LIB;
index a2371a0be0cfc2ac6b7c3fe22d57a9a683ef3af8..bd8942507d50c839b7b57d268f08b93bf12d74c6 100644 (file)
@@ -58,8 +58,14 @@ our @EXPORT_OK = qw(
 
 sub bin_loc {
     my ($bin, $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) {
         next if !-d $dir;
         my $full_path = File::Spec->catfile($dir, $bin);
index 2284c87ef47f5c681a4dc5ec3b8f9fb963c61a1d..0bf3bdd7cb215ca1d3b57e107edba5cb6cd8c13a 100644 (file)
@@ -131,6 +131,13 @@ then the value of the ##column## column that needs to be fixed:
 EOT
     install_module => 'Installing ##module## version ##version##...',
     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',
 This version of Bugzilla contains some variables that you may want to 
 change and adapt to your local settings. Please edit the file