9   unshift @INC, "modules/override"; # Use our own versions of various modules (e.g. YAML).
 
  10   push    @INC, "modules/fallback"; # Only use our own versions of modules if there's no system version.
 
  12   # this is a default dir. may be wrong in your installation, change it then
 
  13   $master_templates = './templates/print/';
 
  16 use SL::InstallationCheck;
 
  20 Getopt::Long::Configure ("bundling");
 
  22   "v|verbose"   => \ my $v,
 
  23   "a|all"       => \ $check{a},
 
  24   "o|optional!" => \ $check{o},
 
  25   "d|devel!"    => \ $check{d},
 
  26   "l|latex!"    => \ $check{l},
 
  27   "r|required!" => \ $check{r},
 
  28   "h|help"      => sub { pod2usage(-verbose => 2) },
 
  29   "c|color!"    => \ ( my $c = 1 ),
 
  32 # if nothing is requested check "required"
 
  34 if (!defined $check{a}
 
  37  && !defined $check{d}) {
 
  39   $default_run ='1';  # no parameter, therefore print a note after default run
 
  43   foreach my $check (keys %check) {
 
  44     $check{$check} = 1 unless defined $check{$check};
 
  51 if (!SL::LxOfficeConf->read(undef, 'may fail')) {
 
  52   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.')
 
  54   SL::InstallationCheck::check_for_conditional_dependencies();
 
  58   print_header('Checking Required Modules');
 
  59   check_module($_, required => 1) for @SL::InstallationCheck::required_modules;
 
  60   print_header('Standard check for required modules done. See additional parameters for more checks (--help)') if $default_run;
 
  63   print_header('Checking Optional Modules');
 
  64   check_module($_, optional => 1) for @SL::InstallationCheck::optional_modules;
 
  67   print_header('Checking Developer Modules');
 
  68   check_module($_, devel => 1) for @SL::InstallationCheck::developer_modules;
 
  75   my ($res) = check_kpsewhich();
 
  76   print_result("Looking for LaTeX kpsewhich", $res);
 
  78     check_template_dir($_) for SL::InstallationCheck::template_dirs($master_templates);
 
  82 sub check_template_dir {
 
  84   my $path  = $master_templates . $dir;
 
  86   print_header("Checking LaTeX Dependencies for Master Templates '$dir'");
 
  87   kpsewhich($path, 'cls', $_) for SL::InstallationCheck::classes_from_latex($path, '\documentclass');
 
  88   kpsewhich($path, 'sty', $_) for SL::InstallationCheck::classes_from_latex($path, '\usepackage');
 
  91 our $mastertemplate_path = './templates/print/';
 
  94   return 1 if SL::InstallationCheck::check_kpsewhich();
 
  96   print STDERR <<EOL if $v;
 
  97 +------------------------------------------------------------------------------+
 
  98   Can't find kpsewhich, is there a proper installed LaTeX?
 
  99   On Debian you may run "aptitude install texlive-base-bin"
 
 100 +------------------------------------------------------------------------------+
 
 106   my ($dw, $type, $package) = @_;
 
 107   $package =~ s/[^-_0-9A-Za-z]//g;
 
 108   my $type_desc = $type eq 'cls' ? 'document class' : 'package';
 
 110   eval { use String::ShellQuote; 1 } or warn "can't load String::ShellQuote" && return;
 
 111      $dw         = shell_quote $dw;
 
 112   my $e_package  = shell_quote $package;
 
 113   my $e_type     = shell_quote $type;
 
 115   my $exit = system(qq|TEXINPUTS=".:$dw:" kpsewhich $e_package.$e_type > /dev/null|);
 
 116   my $res  = $exit > 0 ? 0 : 1;
 
 118   print_result("Looking for LaTeX $type_desc $package", $res);
 
 120     print STDERR <<EOL if $v;
 
 121 +------------------------------------------------------------------------------+
 
 122   LaTeX $type_desc $package could not be loaded.
 
 124   On Debian you may find the needed *.deb package with:
 
 125     apt-file search $package.$type
 
 127   Maybe you need to install apt-file first by:
 
 128     aptitude install apt-file && apt-file update
 
 129 +------------------------------------------------------------------------------+
 
 135   my ($module, %role) = @_;
 
 137   my $line = "Looking for $module->{fullname}";
 
 138   my ($res, $ver) = SL::InstallationCheck::module_available($module->{"name"}, $module->{version});
 
 140     my $ver_string = ref $ver && $ver->can('numify') ? $ver->numify : $ver ? $ver : 'no version';
 
 141     print_line($line, $ver_string, 'green');
 
 143     print_result($line, $res);
 
 150       $role{optional} ? 'It is OPTIONAL for Lx-Office but RECOMMENDED for improved functionality.'
 
 151     : $role{required} ? 'It is NEEDED by Lx-Office and must be installed.'
 
 152     : $role{devel}    ? 'It is OPTIONAL for Lx-Office and only useful for developers.'
 
 153     :                   'It is not listed as a dependancy yet. Please tell this the developers.';
 
 155   my @source_texts = module_source_texts($module);
 
 157   print STDERR <<EOL if $v;
 
 158 +------------------------------------------------------------------------------+
 
 159   $module->{fullname} could not be loaded.
 
 161   This module is either too old or not available on your system.
 
 164   Here are some ideas how to get it:
 
 167 +------------------------------------------------------------------------------+
 
 171 sub module_source_texts {
 
 175   - You can get it from CPAN:
 
 176       perl -MCPAN -e "install $module->{name}"
 
 178   push @texts, <<EOL if $module->{url};
 
 179   - You can download it from this URL and install it manually:
 
 182   push @texts, <<EOL if $module->{debian};
 
 183   - On Debian, Ubuntu and other distros you can install it with apt-get:
 
 184       sudo apt-get install $module->{debian}
 
 185     Note: These may be out of date as well if your system is old.
 
 187  # TODO: SuSE and Fedora packaging. Windows packaging.
 
 193   return $_[0] unless $c;
 
 198   my ($test, $exit) = @_;
 
 200     print_line($test, 'ok', 'green');
 
 202     print_line($test, 'NOT ok', 'red');
 
 207   my ($text, $res, $color) = @_;
 
 208   print $text, " ", ('.' x (78 - length($text) - length($res))), " ", mycolor($res, $color), $/;
 
 224 scripts/installation_check.pl - check Lx-Office dependancies
 
 228   scripts/installation_check.pl [OPTION]
 
 232 Check dependencys. List all perl modules needed by Lx-Office, probes for them,
 
 233 and warns if one is not available.  List all LaTeX document classes and
 
 234 packages needed by Lx-Office master templates, probes for them, and warns if
 
 235 one is not available.
 
 244 Probe for all perl modules and all LaTeX master templates.
 
 248 Color output. Default on.
 
 252 No color output. Helpful to avoid terminal escape problems.
 
 256 Probe for perl developer dependancies. (Used for console  and tags file)
 
 260 Don't probe for perl developer dependancies. (Useful in combination with --all)
 
 266 =item C<-o, --optional>
 
 268 Probe for optional modules.
 
 270 =item C<--no-optional>
 
 272 Don't probe for optional perl modules. (Useful in combination with --all)
 
 274 =item C<-r, --required>
 
 276 Probe for required perl modules (default).
 
 278 =item C<--no-required>
 
 280 Don't probe for required perl modules. (Useful in combination with --all)
 
 284 Probe for LaTeX documentclasses and packages in master templates.
 
 288 Don't probe for LaTeX document classes and packages in master templates. (Useful in combination with --all)
 
 290 =item C<-v. --verbose>
 
 292 Print additional info for missing dependancies
 
 296 =head1 BUGS, CAVEATS and TODO
 
 302 Fedora packages not listed yet.
 
 306 Not possible yet to generate a combined cpan/apt-get string to install all needed.
 
 310 Not able to handle devel cpan modules yet.
 
 314 Version requirements not fully tested yet.
 
 320   Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>
 
 321   Sven Schöling E<lt>s.schoeling@linet-services.deE<gt>
 
 322   Wulf Coulmann E<lt>wulf@coulmann.deE<gt>