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;
 
  19 Getopt::Long::Configure ("bundling");
 
  21   "v|verbose"   => \ my $v,
 
  22   "a|all"       => \ $check{a},
 
  23   "o|optional!" => \ $check{o},
 
  24   "d|devel!"    => \ $check{d},
 
  25   "l|latex!"    => \ $check{l},
 
  26   "r|required!" => \ $check{r},
 
  27   "h|help"      => sub { pod2usage(-verbose => 2) },
 
  28   "c|color!"    => \ ( my $c = 1 ),
 
  31 # if notihing is requested check "required"
 
  32 $check{r} = 1 unless defined $check{a} ||
 
  38   foreach my $check (keys %check) {
 
  39     $check{$check} = 1 unless defined $check{$check};
 
  47   print_header('Checking Required Modules');
 
  48   check_module($_, required => 1) for @SL::InstallationCheck::required_modules;
 
  51   print_header('Checking Optional Modules');
 
  52   check_module($_, optional => 1) for @SL::InstallationCheck::optional_modules;
 
  55   print_header('Checking Developer Modules');
 
  56   check_module($_, devel => 1) for @SL::InstallationCheck::developer_modules;
 
  63   my ($res) = check_kpsewhich();
 
  64   print_result("Looking for LaTeX kpsewhich", $res ? ('ok', 'green') : ('NOT ok', 'red'));
 
  66     check_template_dir($_) for SL::InstallationCheck::template_dirs($master_templates);
 
  70 sub check_template_dir {
 
  72   my $path  = $master_templates . $dir;
 
  74   print_header("Checking LaTeX Dependencies for Master Templates '$dir'");
 
  75   kpsewhich($path, 'cls', $_) for SL::InstallationCheck::classes_from_latex($path, '\documentclass');
 
  76   kpsewhich($path, 'sty', $_) for SL::InstallationCheck::classes_from_latex($path, '\usepackage');
 
  79 our $mastertemplate_path = './templates/print/';
 
  82   return 1 if SL::InstallationCheck::check_kpsewhich();
 
  84   print STDERR <<EOL if $v;
 
  85 +------------------------------------------------------------------------------+
 
  86   Can't find kpsewhich, is there a proper installed LaTeX?
 
  87   On Debian you may run "aptitude install texlive-base-bin"
 
  88 +------------------------------------------------------------------------------+
 
  94   my ($dw, $type, $package) = @_;
 
  95   $package =~ s/[^-_0-9A-Za-z]//g;
 
  96   my $type_desc = $type eq 'cls' ? 'document class' : 'package';
 
  98   eval { use String::ShellQuote; 1 } or warn "can't load String::ShellQuote" && return;
 
  99      $dw         = shell_quote $dw;
 
 100   my $e_package  = shell_quote $package;
 
 101   my $e_type     = shell_quote $type;
 
 103   my $exit = system(qq|TEXINPUTS=".:$dw:" kpsewhich $e_package.$e_type > /dev/null|);
 
 104   my $res  = $exit > 0 ? 0 : 1;
 
 106   print_result("Looking for LaTeX $type_desc $package", $res);
 
 108     print STDERR <<EOL if $v;
 
 109 +------------------------------------------------------------------------------+
 
 110   LaTeX $type_desc $package could not be loaded.
 
 112   On Debian you may find the needed *.deb package with:
 
 113     apt-file search $package.$type
 
 115   Maybe you need to install apt-file first by:
 
 116     aptitude install apt-file && apt-file update
 
 117 +------------------------------------------------------------------------------+
 
 123   my ($module, %role) = @_;
 
 125   my $line = "Looking for $module->{fullname}";
 
 126   my $res = SL::InstallationCheck::module_available($module->{"name"}, $module->{version});
 
 127   print_result($line, $res);
 
 132       $role{optional} ? 'It is OPTIONAL for Lx-Office but RECOMMENDED for improved functionality.'
 
 133     : $role{required} ? 'It is NEEDED by Lx-Office and must be installed.'
 
 134     : $role{devel}    ? 'It is OPTIONAL for Lx-Office and only useful for developers.'
 
 135     :                   'It is not listed as a dependancy yet. Please tell this the developers.';
 
 137   my @source_texts = module_source_texts($module);
 
 139   print STDERR <<EOL if $v;
 
 140 +------------------------------------------------------------------------------+
 
 141   $module->{fullname} could not be loaded.
 
 143   This module is either too old or not available on your system.
 
 146   Here are some ideas how to get it:
 
 149 +------------------------------------------------------------------------------+
 
 153 sub module_source_texts {
 
 157   - You can get it from CPAN:
 
 158       perl -MCPAN -e "install $module->{name}"
 
 160   push @texts, <<EOL if $module->{url};
 
 161   - You can download it from this URL and install it manually:
 
 164   push @texts, <<EOL if $module->{debian};
 
 165   - On Debian, Ubuntu and other distros you can install it with apt-get:
 
 166       sudo apt-get install $module->{debian}
 
 167     Note: These may be out of date as well if your system is old.
 
 169  # TODO: SuSE and Fedora packaging. Windows packaging.
 
 175   return $_[0] unless $c;
 
 180   my ($test, $exit) = @_;
 
 181   print $test, " ", ('.' x (72 - length $test));
 
 182   print $exit ? '.... '. mycolor('ok', 'green') : ' '. mycolor('NOT ok', 'red');
 
 200 scripts/installation_check.pl - check Lx-Office dependancies
 
 204   scripts/installation_check.pl [OPTION]
 
 208 Check dependencys. List all perl modules needed by Lx-Office, probes for them,
 
 209 and warns if one is not available.  List all LaTeX document classes and
 
 210 packages needed by Lx-Office master templates, probes for them, and warns if
 
 211 one is not available.
 
 220 Probe for all perl modules and all LaTeX master templates.
 
 224 Color output. Default on.
 
 228 No color output. Helpful to avoid terminal escape problems.
 
 232 Probe for perl developer dependancies. (Used for console  and tags file)
 
 236 Don't probe for perl developer dependancies. (Useful in combination with --all)
 
 242 =item C<-o, --optional>
 
 244 Probe for optional modules.
 
 246 =item C<--no-optional>
 
 248 Don't probe for optional perl modules. (Useful in combination with --all)
 
 250 =item C<-r, --required>
 
 252 Probe for required perl modules (default).
 
 254 =item C<--no-required>
 
 256 Don't probe for required perl modules. (Useful in combination with --all)
 
 260 Probe for LaTeX documentclasses and packages in master templates.
 
 264 Don't probe for LaTeX document classes and packages in master templates. (Useful in combination with --all)
 
 266 =item C<-v. --verbose>
 
 268 Print additional info for missing dependancies
 
 272 =head1 BUGS, CAVEATS and TODO
 
 278 Fedora packages not listed yet.
 
 282 Not possible yet to generate a combined cpan/apt-get string to install all needed.
 
 286 Not able to handle devel cpan modules yet.
 
 290 Version requirements not fully tested yet.
 
 296   Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>
 
 297   Sven Schöling E<lt>s.schoeling@linet-services.deE<gt>
 
 298   Wulf Coulmann E<lt>wulf@coulmann.deE<gt>