diff options
Diffstat (limited to 'Build/tools/etc/ctan2tl.new')
-rwxr-xr-x | Build/tools/etc/ctan2tl.new | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/Build/tools/etc/ctan2tl.new b/Build/tools/etc/ctan2tl.new new file mode 100755 index 00000000000..1a486865b34 --- /dev/null +++ b/Build/tools/etc/ctan2tl.new @@ -0,0 +1,168 @@ +#!/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 </tmp/tldiff` + diff_lines=`expr $diff_lines / 2` + printf "CMP: %d common files, ~%d lines different (/tmp/tldiff)\n" \ + `comm -12 /tmp/pkgfiles.new /tmp/pkgfiles.tpm | wc -l` $diff_lines + printf "\nEND COMPARE DATA\n" +fi + +printf "\n\f place $place_chicken\n" +rm -rf $pkg.done +../place $place_chicken $pkg +status=$? + +rm -rf ../raw/$pkg +exit $status |