summaryrefslogtreecommitdiff
path: root/Master/tlpkg/bin/ctan2tl
blob: 6ac192017edb8719cbd0bd4c6bb49ebb74601001 (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
#!/bin/sh
# $Id$
# Public domain.  Originally written 2005, Karl Berry.
#
# Attempt to push a package from CTAN into TL.

unset CDPATH  # avoid extraneous output
LC_ALL=C; export LC_ALL # avoid problems with diff, comm, etc

mydir=`cd \`dirname $0\` && pwd`  # Master/tlpkg/bin
PATH=$mydir:$PATH  # we call lots of our other tools

Build=`cd $mydir/../../../Build && pwd`
raw=$Build/tmp.raw
test -d $raw || mkdir $raw
cd $raw || exit 1

if test "x$1" = x--help; then
  echo "Usage: $0 [--place] [--no-ctan] TLPKGNAME"
  echo
  echo "Install a package from CTAN into TeX Live."
  echo
  echo "--place, -p  perform repository adds/removes."
  echo "--no-ctan    if already have files in Build/tmp.raw/PKG."
  echo
  echo "This never actually commits anything to the repository,"
  echo "but it does svn update the potentially affected directories."
  echo
  echo "Without --place, it only creates files in Build/tmp.{raw,cooked}."
  echo "With --place, it also does repository adds and removes,"
  echo "but never commits."
  echo
  echo "Read and understand http://tug.org/texlive/pkgupdate.html"
  echo "before running this."
  exit 0
fi

if test "x$1" = x--place ||  test "x$1" = x-p; then
  place_chicken=
  shift
else
  place_chicken=-n
fi

if test "x$1" = x--no-ctan; then
  copy_from_ctan=false
  shift
else
  copy_from_ctan=true
fi

pkg=$1
if test -z "$pkg"; then
  echo "$0: no TL package name specified." >&2
  exit 1
fi

ctan_dir1=`tlpkginfo --prepare $pkg`
if test -z "$ctan_dir1"; then
  echo "$0: can't find CTAN directory for $pkg." >&2
  exit 1
fi
echo "$0: ctan dir for $pkg"
echo "$0: is $ctan_dir1"

test -r "$ctan_dir1/TDS_READY" \
&& echo "$0: from `cat $ctan_dir1/TDS_READY`"

if egrep " $pkg"'( |$)' $mydir/tlpkg-ctan-check >/dev/null; then :; else
  echo
  echo "*** $0: $pkg not in $mydir/tlpkg-ctan-check, add?"
fi
  
# 
if $copy_from_ctan; then

# remove whatever dregs in raw that might be lying around.
rm -rf $pkg

if test "$pkg" = genmisc; then
  # do not copy subdirs, symlinks, or any files but .sty and .tex
  # (that is, no patch.doc or pmat.zip).
  mkdir -p $pkg
  cp -p \
    `find $ctan_dir1/* '(' -type d -o -type l ')' -prune -o \
                          '(' -name '*.sty' -o -name *.tex ')' -print` \
    $pkg

else
  # normal case (/. to deref symlinks, e.g., arabtex)
  cp -pr $ctan_dir1/. $pkg
fi

fi  # end of copying from CTAN.

# clean up the tmpdir possibly created by 'tlpkginfo --prepare'
ctan_root=`tlpkginfo --ctan-root`
if ! echo "$ctan_dir1" | egrep "^$ctan_root" >/dev/null; then
  rm -rf $ctan_dir1
fi

# 
printf "\n$0: calling ctan2tds\n"
cooked=$Build/tmp.cooked
rm -rf $cooked/$pkg
test -d $cooked || mkdir $cooked
ctan2tds --ctan-dir=$ctan_dir1 $pkg || exit 1

cd $cooked || exit 1
printf "\n\f cooked\n"
find $pkg -name TDS_READY -exec rm '{}' \;  # remove sentinel file
find -depth -type d | xargs rmdir 2>/dev/null  # remove empty directories
find $pkg \! -type d -printf "%TY%Tm%Td.%TH%TM %p\n" | sort -k2

printf "\n$0: calling place $place_chicken $pkg\n"
rm -rf $pkg.done
place $place_chicken $pkg
status=$?

$copy_from_ctan && rm -rf $raw/$pkg
exit $status