summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorNorbert Preining <preining@logic.at>2009-06-02 12:47:36 +0000
committerNorbert Preining <preining@logic.at>2009-06-02 12:47:36 +0000
commitbdf77ac6b06ea9f7588ab8935385a1ea1cfdc543 (patch)
treee7853793294e0dc8317e549e954f7a4286bedac5 /Master
parent953d46c5ce6c881f05f8a33d5ba3b9b5366a2389 (diff)
factor out the parsing of AddFormat and AddHyphen lines to separate
function in TLUtils, use this function in TLPOBJ, and reuse this function in check-execute_consistency to check the format execute consistency git-svn-id: svn://tug.org/texlive/trunk@13577 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/tlpkg/TeXLive/TLPOBJ.pm89
-rw-r--r--Master/tlpkg/TeXLive/TLUtils.pm96
-rwxr-xr-xMaster/tlpkg/bin/check-execute-consistency79
3 files changed, 177 insertions, 87 deletions
diff --git a/Master/tlpkg/TeXLive/TLPOBJ.pm b/Master/tlpkg/TeXLive/TLPOBJ.pm
index b192442f415..9e1bd093fa7 100644
--- a/Master/tlpkg/TeXLive/TLPOBJ.pm
+++ b/Master/tlpkg/TeXLive/TLPOBJ.pm
@@ -918,6 +918,7 @@ sub make_return_hash_from_executes {
+
#
# execute stuff
#
@@ -928,51 +929,16 @@ sub fmtutil_cnf_lines {
my $pkg = $obj->name;
foreach my $e ($obj->executes) {
if ($e =~ m/AddFormat\s+(.*)\s*/) {
- my $name;
- my $engine;
- my $patterns = "-";
- my $options = "";
- my $mode = "";
+ my %r = TeXLive::TLUtils::parse_AddFormat_line("$1");
+ if (defined($r{"error"})) {
+ die "$r{'error'}, package $pkg, execute $e";
+ }
if ($first) {
push @fmtlines, "#\n# from $pkg:\n";
$first = 0;
}
- for my $p (&TeXLive::TLUtils::quotewords('\s+', 0, "$1")) {
- my ($a, $b);
- if ($p =~ m/^(name|engine|mode|patterns|options)=(.*)$/) {
- $a = $1;
- $b = $2;
- } else {
- die "Unknown format directive $p in $pkg (line=$e)";
- }
- if ($a eq "name") {
- die "AddFormat line needs name=something: $pkg, $e" unless $b;
- $name = $b; next;
- }
- if ($a eq "engine") {
- die "AddFormat line needs engine=something: $pkg, $e" unless $b;
- $engine = $b; next;
- }
- if ($a eq "patterns") {
- $patterns = ( $b ? $b : "-");
- next;
- }
- if ($a eq "mode") {
- if ($b eq "disabled") {
- $mode = "#! ";
- } else {
- $mode = "";
- }
- next;
- }
- if ($a eq "options") {
- $options = ( $b ? $b : "");
- next;
- }
- # should not be reached at all
- die "Unknown language directive in $pkg: $e";
- }
- push @fmtlines, "$mode$name $engine $patterns $options\n";
+ my $mode = ($r{"mode"} ? "" : "#! ");
+ push @fmtlines, "$mode$r{'name'} $r{'engine'} $r{'patterns'} $r{'options'}\n";
}
}
return @fmtlines;
@@ -1045,43 +1011,18 @@ sub _parse_hyphen_execute {
my $first = 1;
foreach my $e ($obj->executes) {
if ($e =~ m/AddHyphen\s+(.*)\s*/) {
- my $name;
- my $lefthyphenmin;
- my $righthyphenmin;
- my $file;
- my @synonyms;
+ my %r = TeXLive::TLUtils::parse_AddHyphen_line("$1");
+ if (defined($r{"error"})) {
+ die "$r{'error'}, package $pkg, execute $e";
+ }
if ($first) {
push @langlines, "% from $pkg:\n";
$first = 0;
}
- foreach my $p (split(' ', $1)) {
- my ($a, $b) = split /=/, $p;
- if ($a eq "name") {
- die "$0: AddHyphen line needs name=something: $pkg, $e" unless $b;
- $name = $b; next;
- }
- if ($a eq "lefthyphenmin") {
- # lefthyphenmin default to 3
- $lefthyphenmin = ( $b ? $b : 2 );
- next;
- }
- if ($a eq "righthyphenmin") {
- $righthyphenmin = ( $b ? $b : 3);
- next;
- }
- if ($a eq "file") {
- die "$0: AddHyphen line needs file=something: $pkg, $e" unless $b;
- $file = $b;
- next;
- }
- if ($a eq "synonyms") {
- @synonyms = split /,/, $b;
- next;
- }
- die "$0: Unknown language directive in $pkg: $e";
- }
- my @foo = &$coderef ($name, $lefthyphenmin, $righthyphenmin,
- $file, @synonyms);
+ my @syns;
+ @syns = @{$r{"synonyms"}} if (defined($r{"synonyms"}));
+ my @foo = &$coderef ($r{"name"}, $r{"lefthyphenmin"},
+ $r{"righthyphenmin"}, $r{"file"}, @syns);
push @langlines, @foo;
}
}
diff --git a/Master/tlpkg/TeXLive/TLUtils.pm b/Master/tlpkg/TeXLive/TLUtils.pm
index 08f6ceab3f9..ff97d02f6a9 100644
--- a/Master/tlpkg/TeXLive/TLUtils.pm
+++ b/Master/tlpkg/TeXLive/TLUtils.pm
@@ -102,6 +102,8 @@ BEGIN {
&create_updmap
&create_language_dat
&create_language_def
+ &parse_AddFormat_line
+ &parse_AddHyphen_line
&sort_uniq
&push_uniq
&texdir_check
@@ -1955,6 +1957,100 @@ sub _create_config_files {
}
}
+sub parse_AddHyphen_line {
+ my $line = shift;
+ my %ret;
+ my $default_lefthyphenmin = 2;
+ my $default_righthyphenmin = 3;
+ $ret{"lefthyphenmin"} = $default_lefthyphenmin;
+ $ret{"righthyphenmin"} = $default_righthyphenmin;
+ for my $p (split(' ', $line)) {
+ my ($a, $b) = split /=/, $p;
+ if ($a eq "name") {
+ if (!$b) {
+ $ret{"error"} = "AddHyphen line needs name=something";
+ return %ret;
+ }
+ $ret{"name"} = $b;
+ next;
+ }
+ if ($a eq "lefthyphenmin") {
+ $ret{"lefthyphenmin"} = ( $b ? $b : $default_lefthyphenmin );
+ next;
+ }
+ if ($a eq "righthyphenmin") {
+ $ret{"righthyphenmin"} = ( $b ? $b : $default_righthyphenmin );
+ next;
+ }
+ if ($a eq "file") {
+ if (!$b) {
+ $ret{"error"} = "AddHyphen line needs file=something";
+ return %ret;
+ }
+ $ret{"file"} = $b;
+ next;
+ }
+ if ($a eq "synonyms") {
+ @{$ret{"synonyms"}} = split /,/, $b;
+ next;
+ }
+ # should not be reached at all
+ $ret{"error"} = "Unknown language directive $e";
+ return %ret;
+ }
+ return %ret;
+}
+
+
+sub parse_AddFormat_line {
+ my $line = shift;
+ my %ret;
+ $ret{"options"} = "";
+ $ret{"patterns"} = "-";
+ $ret{"mode"} = 1;
+ for my $p (quotewords('\s+', 0, "$line")) {
+ my ($a, $b);
+ if ($p =~ m/^(name|engine|mode|patterns|options)=(.*)$/) {
+ $a = $1;
+ $b = $2;
+ } else {
+ $ret{"error"} = "Unknown format directive $p";
+ return %ret;
+ }
+ if ($a eq "name") {
+ if (!$b) {
+ $ret{"error"} = "AddFormat line needs name=something";
+ return %ret;
+ }
+ $ret{"name"} = $b;
+ next;
+ }
+ if ($a eq "engine") {
+ if (!$b) {
+ $ret{"error"} = "AddFormat line needs engine=something";
+ return %ret;
+ }
+ $ret{"engine"} = $b;
+ next;
+ }
+ if ($a eq "patterns") {
+ $ret{"patterns"} = ( $b ? $b : "-" );
+ next;
+ }
+ if ($a eq "mode") {
+ $ret{"mode"} = ( $b eq "disabled" ? 0 : 1 );
+ next;
+ }
+ if ($a eq "options") {
+ $ret{"options"} = ( $b ? $b : "" );
+ next;
+ }
+ # should not be reached at all
+ $ret{"error"} = "Unknown format directive $p";
+ return %ret;
+ }
+ return %ret;
+}
=back
diff --git a/Master/tlpkg/bin/check-execute-consistency b/Master/tlpkg/bin/check-execute-consistency
index 5d9eb3aa4be..9b45d2df2cb 100755
--- a/Master/tlpkg/bin/check-execute-consistency
+++ b/Master/tlpkg/bin/check-execute-consistency
@@ -39,7 +39,7 @@ sub main
chomp (my $Master = `cd $mydir/../.. && pwd`); # xx TLPDB should default
my $tlpdb = TeXLive::TLPDB->new ("root" => "$Master");
die("Cannot find tlpdb in $Master!\n") unless defined($tlpdb);
- my (%maps,%langcodes,%fmtcodes);
+ my (%maps,%langcodes,%fmtlines);
for my $pkg ($tlpdb->list_packages) {
for my $e ($tlpdb->get_package($pkg)->executes) {
if ($e =~ m/add(Mixed)?Map\s+(.*)$/) {
@@ -49,7 +49,7 @@ sub main
} elsif ($e =~ m/AddFormat\s+(.*)$/) {
my $foo = $1;
chomp($foo);
- push @{$fmtcodes{$foo}}, $pkg;
+ push @{$fmtlines{$foo}}, $pkg;
} elsif ($e =~ m/AddHyphen\s+.*\s+file=(\S+)\s*$/) {
my $foo = $1;
chomp($foo);
@@ -122,17 +122,70 @@ sub main
# - rework the format definition that we have inifile=pdflatex.ini
# isn't the * unnecessary?
tlwarn("checking of AddFormat lines disabled!\n");
- my %badfmtcodes;
- #foreach my $lc (keys %fmtcodes) {
- # my @found = $tlpdb->find_file("texmf/fmtutil/format.$lc.cnf");
- # if ($#found < 0) {
- # $badfmtcodes{$lc} = $fmtcodes{$lc};
- # }
- #}
- if (keys %badfmtcodes) {
- print "mentioned fmt codes without fmtutil.XXX.cnf:\n";
- foreach my $mf (keys %badfmtcodes) {
- print "\t$mf (execute in @{$badfmtcodes{$mf}})\n";
+ my %missingbins;
+ my %missingengines;
+ my %missinginis;
+ for (keys %fmtlines) {
+ my %r = TeXLive::TLUtils::parse_AddFormat_line("$_");
+ if (defined($r{"error"})) {
+ die "$r{'error'}, parsing $_, package(s) @{$fmtlines{$_}}";
+ }
+ my $opt = $r{"options"};
+ my $engine = $r{"engine"};
+ my $name = $r{"name"};
+ my $mode = $r{"mode"};
+ # we check that the name exist in bin/$arch
+ for my $a ($tlpdb->available_architectures) {
+ if (! -r "$Master/bin/$a/$name") {
+ if (($a eq "win32") || ($a eq "i386-cygwin")) {
+ if (! -r "$Master/bin/$a/$name.exe") {
+ push @{$missingbins{$_}}, "bin/$a/$name" if $mode;
+ }
+ } else {
+ push @{$missingbins{$_}}, "bin/$a/$name" if $mode;
+ }
+ }
+ if (! -r "$Master/bin/$a/$engine") {
+ if (($a eq "win32") || ($a eq "i386-cygwin")) {
+ if (! -r "$Master/bin/$a/$engine.exe") {
+ push @{$missingengines{$_}}, "bin/$a/$engine" if $mode;
+ }
+ } else {
+ push @{$missingengines{$_}}, "bin/$a/$engine" if $mode;
+ }
+ }
+ }
+ # check for the existence of the .ini file
+ # by using the last word in the options value
+ my $inifile = $opt;
+ # $inifile now contains "bla bla bla *file.ini"
+ # strip initial and trailing "
+ $inifile =~ s/^"(.*)"$/$1/;
+ # remove everything before the last space
+ $inifile =~ s/^.* ([^ ]*)$/$1/;
+ # remove the optional leading *
+ $inifile =~ s/^\*//;
+ my @found = $tlpdb->find_file("$inifile");
+ if ($#found < 0) {
+ $missinginis{$_} = "$inifile";
+ }
+ }
+ if (keys %missinginis) {
+ print "mentioned ini files that cannot be found:\n";
+ for my $i (keys %missinginis) {
+ print "\t $missinginis{$i} (execute: $i)\n";
+ }
+ }
+ if (keys %missingengines) {
+ print "mentioned engine files that cannot be found:\n";
+ for my $i (keys %missingengines) {
+ print "\t @{$missingengines{$i}}\n";
+ }
+ }
+ if (keys %missingbins) {
+ print "mentioned bin files that cannot be found:\n";
+ for my $i (keys %missingbins) {
+ print "\t @{$missingbins{$i}}\n";
}
}
}