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 unless (eval { require Config::Std; 1 }){
18 +------------------------------------------------------------------------------+
19 Perl Modul Config::Std could not be loaded.
21 Debian: you may install the needed *.deb package with:
22 apt-get install libconfig-std-perl
24 RPM: There is a rpm package "perl-Config-Std"
26 Suse: you may install the needed *.rpm package with:
27 zypper install perl-Config-Std
29 +------------------------------------------------------------------------------+
35 use SL::InstallationCheck;
40 Getopt::Long::Configure ("bundling");
42 "v|verbose" => \ my $v,
43 "V|no-verbose" => \ my $nv,
44 "a|all" => \ $check{a},
45 "o|optional!" => \ $check{o},
46 "d|devel!" => \ $check{d},
47 "l|latex!" => \ $check{l},
48 "r|required!" => \ $check{r},
49 "h|help" => sub { pod2usage(-verbose => 2) },
50 "c|color!" => \ ( my $c = 1 ),
62 # if nothing is requested check "required"
64 if (!defined $check{a}
67 && !defined $check{d}) {
69 $default_run ='1'; # no parameter, therefore print a note after default run
73 foreach my $check (keys %check) {
74 $check{$check} = 1 unless defined $check{$check};
81 if (!SL::LxOfficeConf->read(undef, 'may fail')) {
82 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.')
84 SL::InstallationCheck::check_for_conditional_dependencies();
88 print_header('Checking Required Modules');
89 check_module($_, required => 1) for @SL::InstallationCheck::required_modules;
90 print_header('Standard check for required modules done. See additional parameters for more checks (--help)') if $default_run;
93 print_header('Checking Optional Modules');
94 check_module($_, optional => 1) for @SL::InstallationCheck::optional_modules;
97 print_header('Checking Developer Modules');
98 check_module($_, devel => 1) for @SL::InstallationCheck::developer_modules;
105 my ($res) = check_kpsewhich();
106 print_result("Looking for LaTeX kpsewhich", $res);
108 check_template_dir($_) for SL::InstallationCheck::template_dirs($master_templates);
112 sub check_template_dir {
114 my $path = $master_templates . $dir;
116 print_header("Checking LaTeX Dependencies for Master Templates '$dir'");
117 kpsewhich($path, 'cls', $_) for SL::InstallationCheck::classes_from_latex($path, '\documentclass');
118 kpsewhich($path, 'sty', $_) for SL::InstallationCheck::classes_from_latex($path, '\usepackage');
121 our $mastertemplate_path = './templates/print/';
123 sub check_kpsewhich {
124 return 1 if SL::InstallationCheck::check_kpsewhich();
126 print STDERR <<EOL if $v;
127 +------------------------------------------------------------------------------+
128 Can't find kpsewhich, is there a proper installed LaTeX?
129 On Debian you may run "aptitude install texlive-base-bin"
130 +------------------------------------------------------------------------------+
136 my ($dw, $type, $package) = @_;
137 $package =~ s/[^-_0-9A-Za-z]//g;
138 my $type_desc = $type eq 'cls' ? 'document class' : 'package';
140 eval { use String::ShellQuote; 1 } or warn "can't load String::ShellQuote" && return;
141 $dw = shell_quote $dw;
142 my $e_package = shell_quote $package;
143 my $e_type = shell_quote $type;
145 my $exit = system(qq|TEXINPUTS=".:$dw:" kpsewhich $e_package.$e_type > /dev/null|);
146 my $res = $exit > 0 ? 0 : 1;
148 print_result("Looking for LaTeX $type_desc $package", $res);
150 print STDERR <<EOL if $v;
151 +------------------------------------------------------------------------------+
152 LaTeX $type_desc $package could not be loaded.
154 On Debian you may find the needed *.deb package with:
155 apt-file search $package.$type
157 Maybe you need to install apt-file first by:
158 aptitude install apt-file && apt-file update
159 +------------------------------------------------------------------------------+
165 my ($module, %role) = @_;
167 my $line = "Looking for $module->{fullname}";
168 $line .= " (from $module->{dist_name})" if $module->{dist_name};
169 my ($res, $ver) = SL::InstallationCheck::module_available($module->{"name"}, $module->{version});
171 my $ver_string = ref $ver && $ver->can('numify') ? $ver->numify : $ver ? $ver : 'no version';
172 print_line($line, $ver_string, 'green');
174 print_result($line, $res);
181 $role{optional} ? 'It is OPTIONAL for kivitendo but RECOMMENDED for improved functionality.'
182 : $role{required} ? 'It is NEEDED by kivitendo and must be installed.'
183 : $role{devel} ? 'It is OPTIONAL for kivitendo and only useful for developers.'
184 : 'It is not listed as a dependancy yet. Please tell this the developers.';
186 my @source_texts = module_source_texts($module);
188 print STDERR <<EOL if $v;
189 +------------------------------------------------------------------------------+
190 $module->{fullname} could not be loaded.
192 This module is either too old or not available on your system.
195 Here are some ideas how to get it:
198 +------------------------------------------------------------------------------+
202 sub module_source_texts {
206 - You can get it from CPAN:
207 perl -MCPAN -e "install $module->{name}"
209 push @texts, <<EOL if $module->{url};
210 - You can download it from this URL and install it manually:
213 push @texts, <<EOL if $module->{debian};
214 - On Debian, Ubuntu and other distros you can install it with apt-get:
215 sudo apt-get install $module->{debian}
216 Note: These may be out of date as well if your system is old.
218 # TODO: SuSE and Fedora packaging. Windows packaging.
224 return $_[0] unless $c;
229 my ($test, $exit) = @_;
231 print_line($test, 'ok', 'green');
233 print_line($test, 'NOT ok', 'red');
238 my ($text, $res, $color) = @_;
239 print $text, " ", ('.' x (78 - length($text) - length($res))), " ", mycolor($res, $color), $/;
255 scripts/installation_check.pl - check kivitendo dependancies
259 scripts/installation_check.pl [OPTION]
263 Check dependencys. List all perl modules needed by kivitendo, probes for them,
264 and warns if one is not available. List all LaTeX document classes and
265 packages needed by kivitendo master templates, probes for them, and warns if
266 one is not available.
275 Probe for all perl modules and all LaTeX master templates.
279 Color output. Default on.
283 No color output. Helpful to avoid terminal escape problems.
287 Probe for perl developer dependancies. (Used for console and tags file)
291 Don't probe for perl developer dependancies. (Useful in combination with --all)
297 =item C<-o, --optional>
299 Probe for optional modules.
301 =item C<--no-optional>
303 Don't probe for optional perl modules. (Useful in combination with --all)
305 =item C<-r, --required>
307 Probe for required perl modules (default).
309 =item C<--no-required>
311 Don't probe for required perl modules. (Useful in combination with --all)
315 Probe for LaTeX documentclasses and packages in master templates.
319 Don't probe for LaTeX document classes and packages in master templates. (Useful in combination with --all)
321 =item C<-v, --verbose>
323 Print additional info for missing dependancies (enabled by default)
325 =item C<-V, --no-verbose>
331 =head1 BUGS, CAVEATS and TODO
337 Fedora packages not listed yet.
341 Not possible yet to generate a combined cpan/apt-get string to install all needed.
345 Not able to handle devel cpan modules yet.
349 Version requirements not fully tested yet.
355 Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>
356 Sven Schöling E<lt>s.schoeling@linet-services.deE<gt>
357 Wulf Coulmann E<lt>wulf@coulmann.deE<gt>