From 8024be0f4ce99c6062f8e1858ba991f271647cb7 Mon Sep 17 00:00:00 2001 From: Wulf Coulmann Date: Thu, 5 Jan 2012 14:25:50 +0100 Subject: [PATCH] =?utf8?q?Pr=C3=BCfung=20von=20LaTeX=20Abh=C3=A4ngigkeiten?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- SL/InstallationCheck.pm | 26 ++++++++++ scripts/installation_check.pl | 92 +++++++++++++++++++++++++++++++++-- 2 files changed, 113 insertions(+), 5 deletions(-) diff --git a/SL/InstallationCheck.pm b/SL/InstallationCheck.pm index 5f9776816..70d6217db 100644 --- a/SL/InstallationCheck.pm +++ b/SL/InstallationCheck.pm @@ -54,6 +54,32 @@ sub module_available { return eval "use $module $version; 1"; } +sub check_kpsewhich { + my $exit = system("which kpsewhich > /dev/null"); + + return $exit > 0 ? 0 : 1; +} + +sub template_dirs { + my ($path) = @_; + opendir my $dh, $path || die "can't open $path"; + my @templates = sort grep { !/^\.\.?$/ } readdir $dh; + close $dh; + + return @templates; +} + +sub classes_from_latex { + my ($path, $class) = @_; + open my $pipe, q#egrep -rs '^[\ \t]*# . "$class' $path". q# | sed 's/ //g' | awk -F '{' '{print $2}' | awk -F '}' '{print $1}' |#; + my @cls = <$pipe>; + close $pipe; + + # can't use uniq here + my %class_hash = map { $_ => 1 } map { s/\n//; $_ } split ',', join ',', @cls; + return sort keys %class_hash; +} + my %conditional_dependencies; sub check_for_conditional_dependencies { diff --git a/scripts/installation_check.pl b/scripts/installation_check.pl index 0167cdb9b..3a81c85f8 100755 --- a/scripts/installation_check.pl +++ b/scripts/installation_check.pl @@ -4,10 +4,13 @@ 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/'; } use SL::InstallationCheck; @@ -19,6 +22,7 @@ GetOptions( "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 ), @@ -26,6 +30,7 @@ GetOptions( # if notihing is requested check "required" $check{r} = 1 unless defined $check{a} || + defined $check{l} || defined $check{o} || defined $check{d}; @@ -39,14 +44,75 @@ if ($check{a}) { $| = 1; if ($check{r}) { + print_header('Checking Required Modules'); check_module($_, required => 1) for @SL::InstallationCheck::required_modules; } 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 ? ('ok', 'green') : ('NOT ok', 'red')); + if ($res) { + check_template_dir($_) for SL::InstallationCheck::template_dirs($master_templates); + } +} + +sub check_template_dir { + my ($dir) = @_; + my $path = $master_templates . $dir; + + 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 < -Dont't probe for perl developer dependancies. (Usefull in combination with --all) +Don't probe for perl developer dependancies. (Useful in combination with --all) =item C<-h, --help> @@ -166,7 +240,7 @@ Probe for optional modules. =item C<--no-optional> -Dont't probe for optional perl modules. (Usefull in combination with --all) +Don't probe for optional perl modules. (Useful in combination with --all) =item C<-r, --required> @@ -174,7 +248,15 @@ Probe for required perl modules (default). =item C<--no-required> -Dont't probe for required perl modules. (Usefull in combination with --all) +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> -- 2.20.1