X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=scripts%2Finstallation_check.pl;h=9637f558f676b2186cd2c231a5d55096a93952f6;hb=21daf701fac24bbc753abae8d8f5f6b8bcf984f7;hp=9a28c03caf315f2c9899cbaa8843eebb7c7b1f10;hpb=7d464f1466d0107deef3c6efd021ad6676a80b66;p=kivitendo-erp.git diff --git a/scripts/installation_check.pl b/scripts/installation_check.pl index 9a28c03ca..9637f558f 100755 --- a/scripts/installation_check.pl +++ b/scripts/installation_check.pl @@ -1,36 +1,181 @@ #!/usr/bin/perl -w use strict; - +use Getopt::Long; +use Pod::Usage; +use Term::ANSIColor; +our $master_templates; 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. + + # this is a default dir. may be wrong in your installation, change it then + $master_templates = './templates/print/'; +} + +unless (eval { require Config::Std; 1 }){ + print STDERR < \ my $v, + "a|all" => \ $check{a}, + "o|optional!" => \ $check{o}, + "d|devel!" => \ $check{d}, + "l|latex!" => \ $check{l}, + "r|required!" => \ $check{r}, + "h|help" => sub { pod2usage(-verbose => 2) }, + "c|color!" => \ ( my $c = 1 ), +); + +# if nothing is requested check "required" +my $default_run; +if (!defined $check{a} + && !defined $check{l} + && !defined $check{o} + && !defined $check{d}) { + $check{r} = 1; + $default_run ='1'; # no parameter, therefore print a note after default run +} + +if ($check{a}) { + foreach my $check (keys %check) { + $check{$check} = 1 unless defined $check{$check}; + } +} + $| = 1; -check($_, 0) for @SL::InstallationCheck::required_modules; -check($_, 1) for @SL::InstallationCheck::optional_modules; +if (!SL::LxOfficeConf->read(undef, 'may fail')) { + print_header('Could not load the config file. If you have dependancies from any features enabled in the configuration these will still show up as optional because of this. Please rerun this script after installing the dependancies needed to load the cofiguration.') +} else { + SL::InstallationCheck::check_for_conditional_dependencies(); +} + +if ($check{r}) { + print_header('Checking Required Modules'); + check_module($_, required => 1) for @SL::InstallationCheck::required_modules; + print_header('Standard check for required modules done. See additional parameters for more checks (--help)') if $default_run; +} +if ($check{o}) { + print_header('Checking Optional Modules'); + check_module($_, optional => 1) for @SL::InstallationCheck::optional_modules; +} +if ($check{d}) { + print_header('Checking Developer Modules'); + check_module($_, devel => 1) for @SL::InstallationCheck::developer_modules; +} +if ($check{l}) { + check_latex(); +} + +sub check_latex { + my ($res) = check_kpsewhich(); + print_result("Looking for LaTeX kpsewhich", $res); + if ($res) { + check_template_dir($_) for SL::InstallationCheck::template_dirs($master_templates); + } +} + +sub check_template_dir { + my ($dir) = @_; + my $path = $master_templates . $dir; -sub check { - my ($module, $optional) = @_; + print_header("Checking LaTeX Dependencies for Master Templates '$dir'"); + kpsewhich($path, 'cls', $_) for SL::InstallationCheck::classes_from_latex($path, '\documentclass'); + kpsewhich($path, 'sty', $_) for SL::InstallationCheck::classes_from_latex($path, '\usepackage'); +} + +our $mastertemplate_path = './templates/print/'; + +sub check_kpsewhich { + return 1 if SL::InstallationCheck::check_kpsewhich(); + + print STDERR < /dev/null|); + my $res = $exit > 0 ? 0 : 1; + + print_result("Looking for LaTeX $type_desc $package", $res); + if (!$res) { + print STDERR <{"name"}, $module->{version}); + if ($res) { + my $ver_string = ref $ver && $ver->can('numify') ? $ver->numify : $ver ? $ver : 'no version'; + print_line($line, $ver_string, 'green'); + } else { + print_result($line, $res); + } - 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 $needed_text = + $role{optional} ? 'It is OPTIONAL for kivitendo but RECOMMENDED for improved functionality.' + : $role{required} ? 'It is NEEDED by kivitendo and must be installed.' + : $role{devel} ? 'It is OPTIONAL for kivitendo and only useful for developers.' + : 'It is not listed as a dependancy yet. Please tell this the developers.'; - my @source_texts = source_texts($module); + my @source_texts = module_source_texts($module); local $" = $/; - print STDERR <{fullname} could not be loaded. This module is either too old or not available on your system. @@ -39,11 +184,11 @@ sub check { Here are some ideas how to get it: @source_texts -+-----------------------------------------------------------------------------+ ++------------------------------------------------------------------------------+ EOL } -sub source_texts { +sub module_source_texts { my ($module) = @_; my @texts; push @texts, < + +Probe for all perl modules and all LaTeX master templates. + +=item C<-c, --color> + +Color output. Default on. + +=item C<--no-color> + +No color output. Helpful to avoid terminal escape problems. + +=item C<-d, --devel> + +Probe for perl developer dependancies. (Used for console and tags file) + +=item C<--no-devel> + +Don't probe for perl developer dependancies. (Useful in combination with --all) + +=item C<-h, --help> + +Display this help. + +=item C<-o, --optional> + +Probe for optional modules. + +=item C<--no-optional> + +Don't probe for optional perl modules. (Useful in combination with --all) + +=item C<-r, --required> + +Probe for required perl modules (default). + +=item C<--no-required> + +Don't probe for required perl modules. (Useful in combination with --all) + +=item C<-l. --latex> + +Probe for LaTeX documentclasses and packages in master templates. + +=item C<--no-latex> + +Don't probe for LaTeX document classes and packages in master templates. (Useful in combination with --all) + +=item C<-v. --verbose> + +Print additional info for missing dependancies + +=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 + Wulf Coulmann Ewulf@coulmann.deE + +=cut