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 nothing is requested check "required"
32 $check{r} = 1 unless defined $check{a} ||
36 my $default_run ='1' if $check{r}; # no parameter, therefore print a note after default run
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;
49 print_header('Standard check for required modules done. See additional parameters for more checks (-- help)') if $default_run;
52 print_header('Checking Optional Modules');
53 check_module($_, optional => 1) for @SL::InstallationCheck::optional_modules;
56 print_header('Checking Developer Modules');
57 check_module($_, devel => 1) for @SL::InstallationCheck::developer_modules;
64 my ($res) = check_kpsewhich();
65 print_result("Looking for LaTeX kpsewhich", $res);
67 check_template_dir($_) for SL::InstallationCheck::template_dirs($master_templates);
71 sub check_template_dir {
73 my $path = $master_templates . $dir;
75 print_header("Checking LaTeX Dependencies for Master Templates '$dir'");
76 kpsewhich($path, 'cls', $_) for SL::InstallationCheck::classes_from_latex($path, '\documentclass');
77 kpsewhich($path, 'sty', $_) for SL::InstallationCheck::classes_from_latex($path, '\usepackage');
80 our $mastertemplate_path = './templates/print/';
83 return 1 if SL::InstallationCheck::check_kpsewhich();
85 print STDERR <<EOL if $v;
86 +------------------------------------------------------------------------------+
87 Can't find kpsewhich, is there a proper installed LaTeX?
88 On Debian you may run "aptitude install texlive-base-bin"
89 +------------------------------------------------------------------------------+
95 my ($dw, $type, $package) = @_;
96 $package =~ s/[^-_0-9A-Za-z]//g;
97 my $type_desc = $type eq 'cls' ? 'document class' : 'package';
99 eval { use String::ShellQuote; 1 } or warn "can't load String::ShellQuote" && return;
100 $dw = shell_quote $dw;
101 my $e_package = shell_quote $package;
102 my $e_type = shell_quote $type;
104 my $exit = system(qq|TEXINPUTS=".:$dw:" kpsewhich $e_package.$e_type > /dev/null|);
105 my $res = $exit > 0 ? 0 : 1;
107 print_result("Looking for LaTeX $type_desc $package", $res);
109 print STDERR <<EOL if $v;
110 +------------------------------------------------------------------------------+
111 LaTeX $type_desc $package could not be loaded.
113 On Debian you may find the needed *.deb package with:
114 apt-file search $package.$type
116 Maybe you need to install apt-file first by:
117 aptitude install apt-file && apt-file update
118 +------------------------------------------------------------------------------+
124 my ($module, %role) = @_;
126 my $line = "Looking for $module->{fullname}";
127 my ($res, $ver) = SL::InstallationCheck::module_available($module->{"name"}, $module->{version});
129 my $ver_string = ref $ver && $ver->can('numify') ? $ver->numify : $ver ? $ver : 'no version';
130 print_line($line, $ver_string, 'green');
132 print_result($line, $res);
139 $role{optional} ? 'It is OPTIONAL for Lx-Office but RECOMMENDED for improved functionality.'
140 : $role{required} ? 'It is NEEDED by Lx-Office and must be installed.'
141 : $role{devel} ? 'It is OPTIONAL for Lx-Office and only useful for developers.'
142 : 'It is not listed as a dependancy yet. Please tell this the developers.';
144 my @source_texts = module_source_texts($module);
146 print STDERR <<EOL if $v;
147 +------------------------------------------------------------------------------+
148 $module->{fullname} could not be loaded.
150 This module is either too old or not available on your system.
153 Here are some ideas how to get it:
156 +------------------------------------------------------------------------------+
160 sub module_source_texts {
164 - You can get it from CPAN:
165 perl -MCPAN -e "install $module->{name}"
167 push @texts, <<EOL if $module->{url};
168 - You can download it from this URL and install it manually:
171 push @texts, <<EOL if $module->{debian};
172 - On Debian, Ubuntu and other distros you can install it with apt-get:
173 sudo apt-get install $module->{debian}
174 Note: These may be out of date as well if your system is old.
176 # TODO: SuSE and Fedora packaging. Windows packaging.
182 return $_[0] unless $c;
187 my ($test, $exit) = @_;
189 print_line($test, 'ok', 'green');
191 print_line($test, 'NOT ok', 'red');
196 my ($text, $res, $color) = @_;
197 print $text, " ", ('.' x (78 - length($text) - length($res)));
198 print mycolor($res, $color);
216 scripts/installation_check.pl - check Lx-Office dependancies
220 scripts/installation_check.pl [OPTION]
224 Check dependencys. List all perl modules needed by Lx-Office, probes for them,
225 and warns if one is not available. List all LaTeX document classes and
226 packages needed by Lx-Office master templates, probes for them, and warns if
227 one is not available.
236 Probe for all perl modules and all LaTeX master templates.
240 Color output. Default on.
244 No color output. Helpful to avoid terminal escape problems.
248 Probe for perl developer dependancies. (Used for console and tags file)
252 Don't probe for perl developer dependancies. (Useful in combination with --all)
258 =item C<-o, --optional>
260 Probe for optional modules.
262 =item C<--no-optional>
264 Don't probe for optional perl modules. (Useful in combination with --all)
266 =item C<-r, --required>
268 Probe for required perl modules (default).
270 =item C<--no-required>
272 Don't probe for required perl modules. (Useful in combination with --all)
276 Probe for LaTeX documentclasses and packages in master templates.
280 Don't probe for LaTeX document classes and packages in master templates. (Useful in combination with --all)
282 =item C<-v. --verbose>
284 Print additional info for missing dependancies
288 =head1 BUGS, CAVEATS and TODO
294 Fedora packages not listed yet.
298 Not possible yet to generate a combined cpan/apt-get string to install all needed.
302 Not able to handle devel cpan modules yet.
306 Version requirements not fully tested yet.
312 Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>
313 Sven Schöling E<lt>s.schoeling@linet-services.deE<gt>
314 Wulf Coulmann E<lt>wulf@coulmann.deE<gt>