X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=scripts%2Finstallation_check.pl;h=6a558ab2a96a81fcbcd2772c2e691d1daccbc9c9;hb=f94c0c4a41044237f839e62d10348f84ba61c2c4;hp=306156b21ffa59998e41135fa062c83942d98a95;hpb=b179b8df8426376f1592c7fdc3e693ed564c2fc3;p=kivitendo-erp.git diff --git a/scripts/installation_check.pl b/scripts/installation_check.pl index 306156b21..6a558ab2a 100755 --- a/scripts/installation_check.pl +++ b/scripts/installation_check.pl @@ -1,5 +1,10 @@ #!/usr/bin/perl -w +use strict; +use Getopt::Long; +use Pod::Usage; +use Term::ANSIColor; + 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. @@ -7,18 +12,171 @@ BEGIN { use SL::InstallationCheck; +GetOptions( + "verbose" => \ my $v, + "all" => \ my $a, + "optional!" => \ my $o, + "devel!" => \ my $d, + "required!" => \ ( my $r = 1 ), + "help" => sub { pod2usage(-verbose => 2) }, + "color" => \ ( my $c = 1 ), +); + +$d = $r = $o = 1 if $a; + $| = 1; -foreach my $module (@SL::InstallationCheck::required_modules) { - 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"); - } +if ($r) { + check($_, required => 1) for @SL::InstallationCheck::required_modules; +} +if ($o) { + check($_, optional => 1) for @SL::InstallationCheck::optional_modules; +} +if ($d) { + check($_, devel => 1) for @SL::InstallationCheck::developer_modules; +} + +sub check { + my ($module, %role) = @_; + + my $line = "Looking for $module->{fullname}"; + print $line; + my $res = SL::InstallationCheck::module_available($module->{"name"}, $module->{version}); + print dot_pad(length $line, $res ? 2 : 6, $res ? mycolor("ok", 'green') : mycolor("NOT ok", 'red')), $/; + + return if $res; + + my $needed_text = + $role{optional} ? 'It is OPTIONAL for Lx-Office but RECOMMENDED for improved functionality.' + : $role{required} ? 'It is NEEDED by Lx-Office and must be installed.' + : $role{devel} ? 'It is OPTIONAL for Lx-Office and only useful for developers.' + : 'It is not listed as a dependancy yet. Please tell this the developers.'; + + my @source_texts = source_texts($module); + local $" = $/; + print STDERR <{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 +} + +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 your system is old. +EOL + # TODO: SuSE and Fedora packaging. Windows packaging. + + return @texts; +} + +sub mycolor { + return $_[0] unless $c; + return colored(@_); } + +sub dot_pad { + my ($s, $l, $text) = @_; + print " "; + print '.' x (80 - $s - 2 - $l); + print " "; + return $text; +} + +1; + +__END__ + +=encoding UTF-8 + +=head1 NAME + +scripts/installation_check.pl - check Lx-Office dependancies + +=head1 SYNOPSIS + + scripts/installation_check.pl [OPTION] + +=head1 DESCRIPTION + +List all modules needed by Lx-Office, probes for them, and warns if one is not available. + +=over 4 + +=item C<-a, --all> + +Probe for all modules. + +=item C<-c, --color> + +Color output. Default on. + +=item C<-d, --devel> + +Probe for developer dependancies. (Used for console and tags file) + +=item C<-h, --help> + +Display this help. + +=item C<-o, --optional> + +Probe for optional modules. + +=item C<-r, --required> + +Probe for required modules (default). + +=item C<-v. --verbose> + +Print additional info for modules that are missing + +=back + +=head1 BUGS, CAVEATS and TODO + +=over 4 + +=item * + +Fedora packages not listed yet. + +=item * + +Not possible yet to generate a combined cpan/apt-get string to install all needed. + +=item * + +Not able to handle devel cpan modules yet. + +=item * + +Version requirements not fully tested yet. + +=back + +=head1 AUTHOR + + Moritz Bunkus Em.bunkus@linet-services.deE + Sven Schöling Es.schoeling@linet-services.deE + +=cut