summaryrefslogtreecommitdiff
path: root/Master/tlpkg/bin/tl-makeself-from-tlnet
blob: fa50b4fc9bf3fb2cf406cb0481aa9b2227f278a0 (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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/bin/sh -e
# $Id$
# Copyright 2008, 2009, 2010, 2011 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

TLRELEASE=`sed -n 's!^depend release/!!p' $TLNET/tlpkg/texlive.tlpdb`

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.

WORKINGRELEASE=$TLRELEASE

END_RUNME

# append to runme literally now.
cat >>runme.sh <<'END_RUNME'
ROOT=`kpsewhich --var-value=SELFAUTOPARENT`
if test -r "$ROOT/tlpkg/texlive.tlpdb"; then
  echo "$0: updating in $ROOT..."
 
  tlmgrversion=`tlmgr version | grep '^TeX Live.*version' | awk '{print $NF}'`
  echo "$0: tlmgr version says this is TeX Live $tlmgrversion"
  if test "x$WORKINGRELEASE" != "x$tlmgrversion"; then
    if test "x$1" = "x--upgrade"; then
      echo "$0: upgrading from $tlmgrversion to $WORKINGRELEASE."
    else
      echo "$0: upgrading from $tlmgrversion not supported:" >&2
      echo "$0:   can only upgrade (cautiously) from $WORKINGRELEASE." >&2
      exit 1
    fi
  else
    echo "$0: proceeding with tlmgr update."
  fi

  # move the architecture-specific files to the top level.
  mv ./master/bin .
  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/2010
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: #