summaryrefslogtreecommitdiff
path: root/Master/tlpkg/libexec/ctan2tds
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/libexec/ctan2tds')
-rwxr-xr-xMaster/tlpkg/libexec/ctan2tds103
1 files changed, 69 insertions, 34 deletions
diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds
index 2d2e22a2a54..05edd2cff57 100755
--- a/Master/tlpkg/libexec/ctan2tds
+++ b/Master/tlpkg/libexec/ctan2tds
@@ -40,7 +40,10 @@ chdir "../tmp.cooked" || die "chdir(../tmp.cooked) failed: $!";
$COOKED_TOP = getcwd(); # output (cooked) directory paren
chdir $RAW_DIR || die "chdir($RAW_DIR) failed: $!"; # back to raw
-$Master = "$mydir/../..";
+# the real Master and Build tree.
+chomp ($Master = `cd $mydir/../.. && pwd`);
+chomp ($Build = `cd $Master/../Build/source && pwd`);
+
#
# packages to treat entirely on their own, or not at all.
@@ -1888,6 +1891,7 @@ $standardxmt='\.xmt';
'sty2dtx' => '\.pl$',
'svn-multi' => 'svn-multi\.pl$',
'texcount' => '\.pl$',
+ 'texdef' => '\.pl$',
'texdiff' => 'texdiff$',
'texdirflatten' => 'texdirflatten$',
'texloganalyser' => 'texloganalyser',
@@ -2015,7 +2019,7 @@ for (@ARGV) {
$package = pop (@x);
my $COOKED_PKG = "$COOKED_TOP/$package"; # output directory
- if ($package eq "biber") { # later anything with scripts
+ if ($package =~ /^(biber|texdef)$/) { # later anything with scripts
$BUILDDEST = "$COOKED_PKG/Build/source";
$TOPDEST = "$COOKED_PKG/Master";
} else {
@@ -2328,8 +2332,7 @@ sub donormal
&do_posthook ();
}
-sub runins
-{
+sub runins {
my ($thispatt) = @_;
print "\t RUNINS $thispatt\n";
for (grep (/$thispatt/, @filenames)) {
@@ -2340,8 +2343,7 @@ sub runins
&killfiles ($specialclean{$package} || $standardclean);
}
-sub install
-{
+sub install {
my ($destdir,$thispatt) = @_;
return unless $thispatt;
@@ -2479,35 +2481,78 @@ sub dotype1{
&install("$DEST/fonts/sfd/$package", $sfdpatt);
}
+
+
# scripts. Make them executable even if it isn't always necessary.
# Build/source/tex/texlive/linked_scripts/Makefile.am installs symlinks
# in the bin directories where needed. That Makefile is independently
-# maintained, needs to updated by hand when new user-visible scripts are
-# added.
+# maintained, needs to be updated by hand when new user-visible scripts
+# are added. We do add/update the script itself under linked_scripts.
+# We also make the symlinks/w32-wrapper-copy in Master/bin when new.
#
-sub doscripts
-{
- my $scriptpatt = $specialscripts{$package};
- return unless $scriptpatt;
- &install ("$DEST/scripts/$package", $scriptpatt);
- &SYSTEM ("chmod a+x $DEST/scripts/$package/*");
+sub doscripts {
+ my $scriptpatt = $specialscripts{$package};
+ return unless $scriptpatt;
+
+ &install ("$DEST/scripts/$package", $scriptpatt);
+ &SYSTEM ("chmod a+x $DEST/scripts/$package/*");
+
+ return unless $package eq "texdef"; # xx just testing this one for now
+ # update the copy in Build, too.
+ my $build_tldir = "texk/texlive";
+ my $build_scriptsdir = "$build_tldir/linked_scripts";
+ my $builddir = "$BUILDDEST/$build_scriptsdir/$package";
+ &xmkdir ($builddir);
+ &SYSTEM ("$CP $DEST/scripts/$package/* $builddir/");
+
+ # List of scripts we're installing.
+ chomp (my @scripts = `cd $builddir && ls`);
+
+ # For each, give a warning if missing from the Makefile.am in the sources.
+ # Also, if not already present, create the platform-specific bindir entries.
+ #
+ my $scripts_Makefile = "$Build/$build_scriptsdir/Makefile.am";
+ chomp (my @platforms = `cd $Master/bin && ls`);
+ #
+ for my $s (@scripts) {
+ system ("grep $package/$s $scripts_Makefile >&/dev/null");
+ if ($? != 0) {
+ print "*** $package/$s not in $scripts_Makefile\n";
+ }
+
+ (my $linkname = $s) =~ s/\..*$//;
+ next if -e "$Master/bin/i386-linux/$linkname"; # already there, move on
+ for my $p (@platforms) {
+ my $platdir = "$TOPDEST/bin/$p";
+ &xmkdir ($platdir);
+ if ($p ne "win32") {
+ my $linktarget = "../../$dest_tree/scripts/$package/$s";
+ &SYSTEM ("ln -s $linktarget $platdir/$linkname");
+ } else {
+ # Windows. If a shell script, skip. Else copy the wrapper.
+ next if $s =~ /\.sh$|^[^.]+$/;
+ my $w32_wrapper = "$Build/$build_tldir/w32_wrapper/runscript.exe";
+ &SYSTEM ("$CP $w32_wrapper $platdir/$linkname.exe");
+ }
+ }
+ }
}
+
+
# info files. We put these in texmf/doc/info, which is where we keep
# the info files for the programs, too. Having an info dir in
# texmf-dist also would imply lots of changes in the installer, and
# there seems to be no gain.
#
-sub doinfos
-{
+sub doinfos {
my $infopatt = $specialinfos{$package};
return unless $infopatt;
&install ("$TOPDEST/texmf/doc/info/", $infopatt);
}
# xmltex files
-sub doxmt
-{
+sub doxmt {
my $xmtpatt = $specialxmt{$package} || $standardxmt;
&install ("$DEST/tex/xmltex/$package", $xmtpatt);
}
@@ -4109,8 +4154,6 @@ sub POSTbiber {
my %tl_platform = (
"MSWIN" => "win32",
"cygwin32" => "i386-cygwin",
- "amd64-freebsd7" => "amd64-freebsd",
- "i386-freebsd7" => "i386-freebsd",
"darwin_x86_i386" => "universal-darwin",
"darwin_x86_64" => "x86_64-darwin",
"linux_x86_32" => "i386-linux",
@@ -4121,12 +4164,10 @@ sub POSTbiber {
# handle the prebuilt binaries, which are zipped or tarred.
for my $archive (sort (<biber-*>)) {
- next if $archive =~ /freebsd[68]$/; # we only want freebsd7
+ next if $archive =~ /freebsd[68]\./; # we only want freebsd7
- my ($unarchiver,$post) = &biber_unarchiver ($archive);
+ my $unarchiver = &biber_unarchiver ($archive);
&SYSTEM ("$unarchiver $archive");
- (my $archive_file = $archive) =~ s/\..z$//; # for x86-solaris.xz
- &SYSTEM ("$post $archive_file* biber") if $post;
# each .tar.gz unpacks into a single file named biber,
# .zip unpacks into biber.exe.
@@ -4158,25 +4199,19 @@ sub POSTbiber {
# biber binaries are distributed in a variety of ways. The idea here is
# to specify the commands that will get from the distribution on CTAN to
# a binary named "biber".
-sub biber_unarchiver {
+#
+sub unarchiver {
my ($archive) = @_;
- my ($unarch,$post) = ("", "");
+ my ($unarch) = ("", "");
if ($archive =~ /\.tar\./) {
$unarch = "tar xf";
- } elsif ($archive =~ /\.xz$/) {
- $unarch = "unxz";
- $post = "cp";
} elsif ($archive =~ /\.zip$/) {
$unarch = "unzip -q";
- } elsif ($archive =~ /freebsd.$/) {
- $unarch = "true";
- $post = "cp";
} else {
- print "hello $archive?\n";
die "do not know unarchiver for $archive";
}
- return ($unarch,$post);
+ return $unarch;
}
sub POSTbibtex {