#!/bin/sh # $Id: ctan2tl 2084 2006-09-05 22:03:38Z karl $ # Public domain. Originally written 2005, Karl Berry. # # Initial attempt at pushing a ctan directory into TL. # See ./README for a bit more info. # # Basic usage: ctan2tl TLPKGNAME # --place to include final `place' invocation (repository adds/removes). # --no-ctan if already have files in ../cdbuild/raw/PKG. # Unlikely to work without GNU utilities. # # This does not actually commit anything to the repository. Without # --place, it doesn't even create any files in the repository outside of # cdbuild/{raw,cooked}. unset CDPATH # avoid extraneous output mydir=`cd \`dirname $0\` && pwd` # Build/tools raw=$mydir/../cdbuild/raw test -d $raw || mkdir $raw cd $raw || exit 1 if test "x$1" = x--place; 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 --ctan-dir $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 is $ctan_dir1" if $copy_from_ctan; then # remove whatever old stuff we might have. rm -rf $pkg # An important special case: the latex-tds project contains tds-ready # zip files for the base latex distribution and amslatex. # We want to use them. corelatex_tds_pkglist="babel|cyrillic|graphics|latex|psnfss|tools" amslatex_tds_pkglist="ams|amscls|amsltx2|amsmath|amsrefs" # dup in tlpkginfo latex_tds_pkglist="latex-tds|$amslatex_tds_pkglist|$corelatex_tds_pkglist" if echo "$pkg" | egrep "^($latex_tds_pkglist)\$" >/dev/null; then mkdir $pkg ctan_root=`tlpkginfo --ctan-root` # # complications: the latex-tds package, for our purposes, is the # sources for the tools that do the process; that's in the zip file # source.zip, in the latex-tds directory. Similarly, the zip file for # latex itself is named "base.zip". Finally, amslatex.zip actually # contains several packages (= directories) -- such as ams, amscls, # etc. AMS sets it up that way. # if test $pkg = latex-tds; then zipname=source.zip elif test $pkg = latex; then zipname=base.zip elif echo "$pkg" | egrep "^($amslatex_tds_pkglist)\$" >/dev/null; then zipname=amslatex.zip else zipname=$pkg.zip fi (cd $pkg && unzip -qq $ctan_root/macros/latex/contrib/latex-tds/$zipname) elif test "$pkg" = rsc; then # single bst file. mkdir -p $pkg cp -p $ctan_dir1 $pkg elif 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 # Another special case: annoyingly, tugboat plain and tugboat latex are # stored in two different places on ctan. we'll assume we're invoked # with the latex dir, and now arrange to also copy in the plain stuff to # a `plain' subdirectory, which ctan2tds.pl has a further special case # to handle. Maybe we'll come across other cases like this, in which # case we can generalize this. # if test "$pkg" = tugboat; then ctan_dir2=`echo $ctan_dir1 | sed s/latex/plain/` destdir2=$pkg/plain cp -r $ctan_dir2 $destdir2 fi fi # end of copying from CTAN. # printf "\n ctan2tds\n" rm -rf ../cooked/$pkg test -d ../cooked || mkdir ../cooked ../ctan2tds.pl $pkg || exit 1 cd ../cooked || exit 1 printf "\n\f cooked\n" find -depth -type d | xargs rmdir 2>/dev/null find $pkg \! -type d -printf "%TY%Tm%Td.%TH%TM %p\n" | sort -r +1 # compare to tpm. Master=../../../Master tpmfile=`ls $Master/texmf*/tpm/$pkg.tpm 2>/dev/null` if test -z "$tpmfile"; then echo "$0: no tpm file for $pkg in `cd $Master; pwd`." >&2 else printf "\nBEGIN COMPARE DATA" printf "\n\f new vs. present $tpmfile\n" rm -f /tmp/pkgfiles.* # remove leading text in case of lines starting with texmf. # Then assume all actual files do start with texmf. sed -n -e '/TPM:.*Files/,$s,^texmf,./texmf,p' $tpmfile \ | grep -v '\.tpm$' \ | sort >/tmp/pkgfiles.tpm # # list of files in the new package we've just cooked. (cd $pkg && find \! -type d -print) | grep -v '/cooked/' \ | sort >/tmp/pkgfiles.new # comm -3 /tmp/pkgfiles.new /tmp/pkgfiles.tpm # for common_file in `comm -12 /tmp/pkgfiles.new /tmp/pkgfiles.tpm`; do diff --ignore-all-space -u0 $Master/$common_file $pkg/$common_file done >/tmp/tldiff diff_lines=`wc -l