Mehrere Fehler behoben und Texte leichter lesbar gemacht.
[kivitendo-erp.git] / scripts / installation_check.pl
index 6eca871..0e6a6c5 100755 (executable)
@@ -1,5 +1,7 @@
 #!/usr/bin/perl -w
 
+use strict;
+
 BEGIN {
   unshift @INC, "modules/override"; # Use our own versions of various modules (e.g. YAML).
   push    @INC, "modules/fallback"; # Only use our own versions of modules if there's no system version.
@@ -9,36 +11,55 @@ use SL::InstallationCheck;
 
 $| = 1;
 
-foreach my $module (@SL::InstallationCheck::required_modules) {
-  if ($module->{version}) {
-    print("Looking for $module->{name} $module->{version}...");
-  } else {
-    print("Looking for $module->{name}...");
-  }
-  if (!SL::InstallationCheck::module_available($module->{"name"})) {
-    print(" NOT found\n" .
-          "  The module '$module->{name}' is not available on your system.\n" .
-          "  Please install it with the CPAN shell, e.g.\n" .
-          "    perl -MCPAN -e \"install $module->{name}\"\n" .
-          "  or download it from this URL and install it manually:\n" .
-          "    $module->{url}\n\n");
-  } else {
-    print(" ok\n");
-  }
+check($_, 0) for @SL::InstallationCheck::required_modules;
+check($_, 1) for @SL::InstallationCheck::optional_modules;
+
+sub check {
+  my ($module, $optional) = @_;
+
+  print "Looking for $module->{fullname}...";
+  my $res = SL::InstallationCheck::module_available($module->{"name"}, $module->{version});
+  print $res ? '' : " NOT", " ok\n";
+
+  return if $res;
+
+  my $needed_text = $optional
+    ? 'It is OPTIONAL for Lx-Office but recommended for improved functionality.'
+    : 'It is NEEDED by Lx-Office and must be installed.';
+
+  my @source_texts = source_texts($module);
+  local $" = $/;
+  print <<EOL;
++-----------------------------------------------------------------------------+
+  $module->{fullname} could not be loaded.
+
+  This module is either too old or not available on your system.
+  $needed_text
+
+  Here are some ideas how to get it:
+
+@source_texts
++-----------------------------------------------------------------------------+
+EOL
 }
 
-foreach my $module (@SL::InstallationCheck::optional_modules) {
-  print("Looking for $module->{name} (optional)...");
-  if (!SL::InstallationCheck::module_available($module->{"name"})) {
-    print(" NOT found\n" .
-          "  The module '$module->{name}' is not available on your system.\n" .
-          "  While it is not strictly needed it provides extra functionality\n" .
-          "  and should be installed.\n" .
-          "  You can install it with the CPAN shell, e.g.\n" .
-          "    perl -MCPAN -e \"install $module->{name}\"\n" .
-          "  or download it from this URL and install it manually:\n" .
-          "    $module->{url}\n\n");
-  } else {
-    print(" ok\n");
-  }
+sub source_texts {
+  my ($module) = @_;
+  my @texts;
+  push @texts, <<EOL;
+  - You can get it from CPAN:
+      perl -MCPAN -e "install $module->{name}"
+EOL
+  push @texts, <<EOL if $module->{url};
+  - You can download it from this URL and install it manually:
+      $module->{url}
+EOL
+  push @texts, <<EOL if $module->{debian};
+  - On Debian, Ubuntu and other distros you can install it with apt-get:
+      sudo apt-get install $module->{debian}
+    Note these may be out of date as well if you system is old.
+EOL
+ # TODO: SuSE and Fedora packaging. Windows packaging.
+
+  return @texts;
 }