From 97063fbce421678c56dc6ba98663ccb6b11a2ab5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sven=20Sch=C3=B6ling?= Date: Thu, 26 Aug 2010 16:47:39 +0200 Subject: [PATCH] Mehrere Fehler behoben und Texte leichter lesbar gemacht. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit - require kann keine Versionierung, also muss das mit use gemacht werden. - eval + defined Bugs durch idiomatischere Konstrukte ersetzt. - gefühlte 500 Zeilen IO::File Code durch ein idiomatisches slurp ersetzt. - Die Meldungen wenn ein Paket nicht gefunden wurden sind jetzt mit einem freundlichen Kasten umrahmt, und damit in der Textmasse einfacher auszumachen. - Es können jetzt mehrere Sourcen an die module Definition angehängt werden. --- SL/InstallationCheck.pm | 39 ++++++----------- scripts/installation_check.pl | 81 ++++++++++++++++++++++------------- 2 files changed, 63 insertions(+), 57 deletions(-) diff --git a/SL/InstallationCheck.pm b/SL/InstallationCheck.pm index 52569a4eb..299706350 100644 --- a/SL/InstallationCheck.pm +++ b/SL/InstallationCheck.pm @@ -7,9 +7,10 @@ use vars qw(@required_modules @optional_modules); use strict; +BEGIN { @required_modules = ( { name => "parent", url => "http://search.cpan.org/~corion/" }, - { name => "Archive::Zip", url => "http://search.cpan.org/~adamk/" }, + { name => "Archive::Zip", version => 12, url => "http://search.cpan.org/~adamk/" }, { name => "Class::Accessor", url => "http://search.cpan.org/~kasei/" }, { name => "CGI::Ajax", url => "http://search.cpan.org/~bct/" }, { name => "DateTime", url => "http://search.cpan.org/~drolsky/" }, @@ -30,43 +31,27 @@ use strict; @optional_modules = (); +$_->{fullname} = join ' ', grep $_, @$_{qw(name version)} + for @required_modules, @optional_modules; +} + sub module_available { my $module = $_[0]; my $version = $_[1] || '' ; - if (!defined(eval("require $module $version;"))) { - return 0; - } else { - return 1; - } + return eval "use $module $version; 1"; } my %conditional_dependencies; sub check_for_conditional_dependencies { - if (!$conditional_dependencies{net_ldap}) { - $conditional_dependencies{net_ldap} = 1; - - my $in = IO::File->new('config/authentication.pl', 'r'); - if ($in) { - my $self = {}; - my $code; - - while (my $line = <$in>) { - $code .= $line; - } - $in->close(); - - eval $code; + return if $conditional_dependencies{net_ldap}++; - if (! $EVAL_ERROR) { + my $self = {}; + eval do { local (@ARGV, $/) = 'config/authentication.pl'; <> } or return; - if ($self->{module} && ($self->{module} eq 'LDAP')) { - push @required_modules, { 'name' => 'Net::LDAP', 'url' => 'http://search.cpan.org/~gbarr/' }; - } - } - } - } + push @required_modules, { 'name' => 'Net::LDAP', 'url' => 'http://search.cpan.org/~gbarr/' } + if $self->{module} && ($self->{module} eq 'LDAP'); } sub test_all_modules { diff --git a/scripts/installation_check.pl b/scripts/installation_check.pl index 6eca87189..0e6a6c518 100755 --- a/scripts/installation_check.pl +++ b/scripts/installation_check.pl @@ -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 <{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, <{name}" +EOL + push @texts, <{url}; + - You can download it from this URL and install it manually: + $module->{url} +EOL + push @texts, <{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; } -- 2.20.1