1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
#!/usr/bin/env perl
# $Id$
# Originally written by Karl Berry. Public domain.
#
# Convenience front-end script to run ctan2tl. It rearranges the output
# so error messages come first, then the list of changed files. Also
# accepts platform abbreviations to run tl-update-bindir, etc. Don't
# take it too seriously; it surely needs generalizing.
use Cwd;
use File::Basename;
$| = 1;
umask 022;
exit (&main ());
sub main {
my $real0 = Cwd::abs_path ($0);
my $scriptdir = File::Basename::dirname ($real0); # .../Master/tlpkg/bin
my $TLROOT = Cwd::abs_path ("$scriptdir/../../.."); # ...
chdir ($scriptdir) || die "chdir($scriptdir) failed"; # avoid . in PATH confusion
# platform abbrev
(my $arg = $ARGV[0]) =~ s,/$,,; # ignore trailing /
if ($arg eq "asy") {
exec ("tl-update-asy --build");
} elsif ($arg eq "aarch") {
$arg = "aarch64-linux";
} elsif ($arg eq "alpha") {
$arg = "alpha-linux";
} elsif ($arg eq "armel") {
$arg = "armel-linux";
} elsif ($arg eq "armhf") {
$arg = "armhf-linux";
} elsif ($arg eq "cygwin") {
$arg = "i386-cygwin";
} elsif ($arg eq "dar32") {
$arg = "i386-darwin";
} elsif ($arg eq "darwin" || $arg eq "dar" || $arg eq "mac") {
$arg = "universal-darwin";
} elsif ($arg eq "darleg") {
$arg = "x86_64-darwinlegacy";
} elsif ($arg eq "irix") {
$arg = "mips-irix";
} elsif ($arg eq "kfreebsd") {
exec ("tl-update-bindir i386-kfreebsd && tl-update-bindir amd64-kfreebsd");
} elsif ($arg eq "linux32" || $arg eq "lin32") {
$arg = "i386-linux";
} elsif ($arg eq "mipsel") {
$arg = "mipsel-linux";
} elsif ($arg eq "netbsd") {
exec ("tl-update-bindir i386-netbsd && tl-update-bindir amd64-netbsd");
} elsif ($arg eq "powdar") {
$arg = "powerpc-darwin";
} elsif ($arg eq "powlin") {
$arg = "powerpc-linux";
} elsif ($arg eq "sol") {
exec ("tl-update-bindir i386-solaris && tl-update-bindir x86_64-solaris");
} elsif ($arg eq "sparc") {
$arg = "sparc-solaris";
} elsif ($arg eq "linux64" || $arg eq "lin64") {
$arg = "x86_64-linux";
} elsif ($arg eq "musl") {
$arg = "x86_64-linuxmusl";
} elsif ($arg eq "norbert" || $arg eq "nor") {
for my $p (qw(i386-linux x86_64-linux x86_64-linuxmusl)) {
system ("$0 $p") && die "norbert/$p failed";
}
print "$0: norbert updates done.\n";
exit 0;
} elsif ($arg eq "cg" || $arg eq "moj" || $arg eq "mojca") {
for my $p (qw(i386-freebsd amd64-freebsd
x86_64-darwinlegacy
i386-solaris x86_64-solaris)) {
system ("$0 $p") && die "cg/$p failed";
}
print "$0: cg (contextgarden) updates done.\n";
exit 0;
} elsif ($arg eq "all") {
for my $p (qw(aarch dar cg norbert armhf)) {
system ("$0 $p") && die "all/$p failed";
}
print "$0: all updates done.\n";
exit 0;
}
if (-d "$TLROOT/Master/bin/$arg") {
print ("tl-update-bindir $arg\n");
exec ("tl-update-bindir", $arg);
}
$ARGV[0] = "-p" if $ARGV[0] eq "p";
print "$0: running ctan2tl @ARGV\n";
# we want our exit status to be from ctan2tl, not tee, hence the
# pipefail bash-ism.
my @lines = `set -o pipefail; ctan2tl @ARGV </dev/null 2>&1 | tee /tmp/cl.out`;
my $status = $?;
my $cooked = "$TLROOT/Build/tmp.cooked";
-d $cooked && system ("cp /tmp/cl.out $cooked/$ARGV[$#ARGV].out");
# *** and other notable messages.
my @msgs = grep { /^\*\*\*.* \S/
&& ! /\* Generating /
} @lines;
push (@msgs, grep { /at \/.* line / } @lines); # perl errors
push (@msgs, grep { /^svn: E/ } @lines); # svn errors
push (@msgs, grep { /: no hit for pattern/ } @lines); # tlpsrc updates
# map file changes; should do better, check .tlpsrc for existing ...
push (@msgs, grep { /(svn .*|^ )[A-z]*\.map$/ } @lines);
print map { (/^\*/ ? "" : "*** ") . $_ } @msgs;
if ($status != 0) {
warn "*** ctan2tl exit status: $status\n";
print STDERR @lines;
return 1;
}
my $whole_string = join ("", @lines);
my @page = split (/\f */, $whole_string, 4);
my $diff_list
= `test -s /tmp/$<.tlplace.diff && sed -n -e 's/^--- //' \\
-e 's/[ \\t].*//' \\
-e 's,/home/texlive/karl/, ,p' \\
/tmp/$<.tlplace.diff`;
$diff_list = "";
# page 0: build stuff.
# page 1: cooked hierarchy.
# page 2: new vs. present (what's interesting).
# page 3: place output.
print "$page[2]$diff_list\n\f $page[1]\n\f $page[0]\n\f $page[3]\n";
return 0;
}
|