summaryrefslogtreecommitdiff
path: root/Master/tlpkg/bin/tl-makeself-from-tlnet
blob: 725c90e527109283689d89ad871d1692d2212bb1 (plain)
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
#!/bin/sh -e
# $Id$
# Copyright 2008 Norbert Preining
# This file is licensed under the GNU General Public License version 2
# or any later version.
# 
# Creates a .run file for updating the texlive.infra 
# packages on Unix, similar to the .exe we create for Windows.  Both are
# created in the nightly cron from tl-update-tlcritical.

TMP=`mktemp -d`
CWD=`pwd`

TLNET=$1

if test ! -d "$TLNET"; then
  echo "$0: No tlnet directory given as argument, aborting." >&2
  exit 1
fi

ARCHIVE=$TLNET/archive
if test ! -d "$ARCHIVE"; then
  echo "$0: subdirectory archive/ in $TLNET not found, aborting." >&2
  exit 1
fi

cd $TMP
mkdir master
cd master

# unpack texlive.infra archives for all platforms, except w32.
for pkg in texlive.infra; do
  for i in $ARCHIVE/$pkg*.tar.xz ; do
    case "$i" in 
      *win32*) ;;
      *) xzdec <$i | tar -xf - ;;
    esac
  done
done

cd ..

# create the script which will be run on the user's machine to do the update.
#
cat >runme.sh <<'END_RUNME'
#!/bin/sh
# Updater for tlmgr and infrastructure on Unix.
# Runs in unpacked archive directory.

ROOT=`kpsewhich --var-value=SELFAUTOPARENT`
if test -r "$ROOT/tlpkg/texlive.tlpdb"; then
  echo "$0: updating in $ROOT..."
  
  # move the architecture-specific files to the top level.
  mv ./master/bin .
  #mv ./master/tlpkg/installer .
  mkdir ./installer
  mv ./master/tlpkg/installer/xz ./installer
  mv ./master/tlpkg/installer/wget ./installer
  
  # install the architecture-independent files.
  (cd master && tar cf - *) | (cd $ROOT && tar xf -)
  
  # try to get the list of installed architectures by listing the
  # directories in $ROOT/bin.
  t_objdir=$ROOT/tlpkg/tlpobj      # target tlpobj directory
  t_instdir=$ROOT/tlpkg/installer  # target installer dir
  
  # ensure these target directories exist.
  mkdir -p $t_instdir/xz
  mkdir -p $t_instdir/wget

  # start the list of tlpobjs we will install
  tlpobjs="$t_objdir/texlive.infra.tlpobj"
  for a in $ROOT/bin/*; do
    test -d "$a" || continue  # skip any cruft files
    b=`basename $a`           # just the architecture name
    
    # add the tlpobjs for this platform t the list.
    tlpobjs="$tlpobjs $t_objdir/texlive.infra.$b.tlpobj"

    # install the bin dir for this platform.
    (cd bin && tar cf - $b) | (cd $ROOT/bin && tar xf -)
    
    # copy the installer binaries.
    cp installer/xz/xzdec.$b $t_instdir/xz/
    cp installer/xz/xz.$b $t_instdir/xz/
    test -r installer/wget/wget.$b \
    && cp installer/wget/wget.$b $t_instdir/wget
  done
else
  cat <<END_ABORT_NODIR >&2
$0: Cannot find TeX Live root using kpsewhich --var-value=SELFAUTOPARENT.
$0: Please call update-tlmgr-latest.sh --noexec --keep
$0: and then call the runme.sh script in the unpacked directory
$0: with the directory root as the first argument, something like:
$0: sh runme.sh /path/to/your/texlive/installation/2008
END_ABORT_NODIR
  exit 1
fi

# invoke secret tlmgr action with the tlpobjs we found.
# Hopefully the result will be a clean tlpdb state.
tlmgr -v _include_tlpobj $tlpobjs
echo "$0: done."
END_RUNME

chmod ugo+x runme.sh

# make the self-extracting archive back in the directory from where we
# were invoked.
cd $CWD
mydir=`cd \`dirname $0\` && pwd`  # Master/tlpkg/bin
rev=`svnversion $mydir | sed s/[^0-9].*//`  # just the number, no status
makeself $TMP update-tlmgr-r$rev.sh "TeX Live Manager Updater" ./runme.sh
rm -rf $TMP

# vim:set tabstop=2 expandtab: #