dwww Home | Show directory contents | Find package

#!/bin/sh -
#set -x
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin
export PATH

allan=0
directory=./
vendor=arkandis
cfrtop=$(xdg-user-dir DOCUMENTS)/src/fonts/_cfr
existencs=0
docdir="doc"
afmdir="fonts/afm"
encdir="fonts/enc"
mapdir="fonts/map"
tfmdir="fonts/tfm"
truetypedir="fonts/truetype"
type1dir="fonts/type1"
vfdir="fonts/vf"
sourcedir="source"
texdir="tex"

usage="Usage: $0 [OPTION] [FILES]
Prepare a flattened file hierarchy and install fonts and support files in it in preparation for the creation of an archive for upload to CTAN.
Options:
        -h --help       print this message and exit
        -a --adf        file listing ADF files                  [after cd: ./adf or ../cfr/adf or hard-coded list]
        -c --directory  directory to switch to                  [current working directory]
        -d --derived    file listing derived files              [after cd: ./der or ../cfr/der or hard-coded list]
        -f --font       specify font package name               [truncated name of directory]
        -m --manual     specify manual name                     [font package name w/ or w/o adf appended]
        -n --nonderived file listing nonderived files           [after cd: ./nonder or ../cfr/nonder or hard-coded list]
        -o --original   file listing font vendor's files        [after cd: ./ovend or ../cfr/ovend or hard-coded list]
        -t --tool       primary creation tool                   [after cd: guess fontinst or afm2pl or empty]
        -v --vendor     specify font vendor name                [arkandis]
If no files are specified, a list is constructed from the lists of derived, nonderived and ADF or other original vendor files." 
error () {
        echo "$@" 1>&2
        allan=$((allan+1))
        usage_and_exit $allan
}
usage () {
        printf %b "$usage\n"
}
usage_and_exit () {
        usage
        exit $1
}

ctaninst () {
        ctaninstallan=0
        while [ $# != 0 ]
        do
                if [ -e "$1" ]
                then
                        grep -w "$1" $nonder > /dev/null
                        if [ $? == 0 ]
                        then
                                if [ -e "../cfr/$1" ]
                                then
                                        diff "$1" "../cfr/$1" > /dev/null
                                        if [ $? != 0 ]
                                        then
                                                printf %b "A non-duplicate copy of $1 already exists in ../cfr.\nUsing ../cfr.$$ for new versions.\nPlease examine manually.\n"
                                                mkdir -p ../cfr.$$
                                                cp -pR "$1" ../cfr.$$/
                                        fi
                                else
                                        cp -pR "$1" ../cfr/
                                fi
                                if [ -e "../cfr.$$/$1" ]
                                then
                                        diff "./$1" "../cfr.$$/$1" > /dev/null
                                        if [ $? != 0 ]
                                        then
                                                printf %b "A problem occurred when copying $1. This file will not be installed.\n"
                                                problem=1
                                        else
                                                problem=0
                                        fi
                                else
                                        diff "./$1" "../cfr/$1" > /dev/null
                                        if [ $? != 0 ]
                                        then
                                                printf %b "A problem occurred when copying $1. This file will not be installed.\n"
                                                problem=1
                                        else
                                                problem=0
                                        fi
                                fi
                                if [ $problem != 0 ]
                                then
                                        allan=$((allan+1))
                                        ctaninstallan=1
                                        shift
                                        continue
                                fi
                        else
                                grep -w "$1" $der > /dev/null
                                if [ $? != 0 ]
                                then
                                        grep -w "$1" $adf $ovend > /dev/null
                                        if [ $? != 0 ]
                                        then
                                                printf %b "$1 is not listed as a derived, non-derived or ADF/original vendor's file and will be ignored.\n"
                                                allan=$((allan+1))
                                                ctaninstallan=1
                                                shift
                                                continue
                                        fi
                                fi
                        fi              
                        ctansort "$1"
                        if [ $? != 0 ]
                        then
                                printf %b "A problem occurred sorting $1.\n"
                                allan=$((allan+1))
                                ctaninstallan=1
                        fi
                else
                        printf %b "Cannot find $1. Skipping.\n"
                        allan=$((allan+1))
                fi
                shift
        done
        return $ctaninstallan
}

mvsubs () {
        mvsubsallan=0
        filestocopy=""
        filestomove=""
        while [ $# -gt 1 ]
        do
                file "$1" | grep "symbolic link" > /dev/null
                if [ $? == 0 ]
                then
                        filestocopy="$filestocopy $1"
                else
                        filestomove="$filestomove $1"
                fi
                shift
        done
        if [ "$filestomove" != "" ]
        then
                mv $filestomove "$1"
                if [ $? != 0 ]
                then
                        printf %b "There was a problem moving $filestomove to $1.\n"
                        allan=$((allan+1))
                        mvsubsallan=1
                fi
        fi
        if [ "$filestocopy" != "" ]
        then
                cp -p $filestocopy "$1"
                if [ $? != 0 ]
                then
                        printf %b "There was a problem copying $filestocopy to $1.\n"
                        allan=$((allan+1))
                        mvsubsallan=1
                fi
        fi
        return $mvsubsallan
}

ctansort () {
        if [ $# != 1 ]
        then
                printf %b "ctansort takes exactly one argument.\n"
                return 1
        else
                if [ "$@" = "Makefile" ] || [ "$@" = "com" ] || [ "$@" = "cfr.gwneud.cyhoeddus" ]
                then
                        mvsubs "$@" "$sourcedir/"
                        return $?
                fi
                j="${@##*\-}"
                if [ "$j" = "drv.tex" ] || [ "$j" = "map.tex" ]
                then
                        mvsubs "$@" "$sourcedir/"
                        return $?
                fi
                j="${@##*\.}"
                case "$j" in
                        "afm")          
                                mvsubs "$@" "$afmdir/"
                                return $?
                                ;;
                        "enc")  
                                mvsubs "$@" "$encdir/"
                                return $?
                                ;;
                        "map")  
                                mvsubs "$@" "$mapdir/"
                                return $?
                                ;;
                        "tfm")  
                                mvsubs "$@" "$tfmdir/"
                                return $?
                                ;;
                        "pfb" | "pfm")  
                                mvsubs "$@" "$type1dir/"
                                return $?
                                ;;
                        "ttf")
                                mvsubs "$@" "$truetypedir/"
                                return $?
                                ;;
                        "vf")           
                                mvsubs "$@" "$vfdir/"
                                return $?
                                ;;
                        "fd" | "sty")   
                                mvsubs "$@" "$texdir/"
                                return $?
                                ;;
                        "etx" | "lig" | "nam" | "pe" | "sfd" | "otf")   
                                mvsubs "$@" "$sourcedir/"
                                return $?
                                ;;
                        "txt")
                                mvsubs "$@" "$docdir/"
                                return $?
                                ;;
                        *)      
                                ;;
                esac
                j="${@%\.*}"
                case "$j" in
                        COPYING | NOTICE | README | manifest | "$manual")
                                mvsubs "$@" "$docdir/"
                                return $?
                                ;;
                        *)
                                ;;
                esac
                j="${@%%\-*}"
                case "$j" in
                        reglyph | reset | build)
                                mvsubs "$@" "$sourcedir/"
                                return $?
                                ;;
                        *)
                                ;;
                esac
                printf %b "ctansort does not recognise $@. This file will not be installed.\n"
                return 1
        fi
}
                
trymkdir () {
        while [ $# != 0 ]
        do
                mkdir -p "$1"
                if [ $? != 0 ]
                then
                        error Could not create "$1".
                fi
                shift
        done
        return 0
}

tempargs=$(getopt -o a:c:d:f:hm:n:o:t:v: --long adf:,directory:,derived:,font:,help,manual:,nonderived:,original:,tool:,vendor: -- "$@")
if [ $? != 0 ];
then
        usage_and_exit
fi
eval set -- "$tempargs"

while true
do
        case "$1"
        in
                -a | --adf)
                        if [ -f "$2" ]
                        then
                                adf="$2"
                        else
                                error "$2" is not a regular file.
                        fi
                        shift;
                        shift;;
                -c | --directory)       
                        directory="$2";
                        shift;
                        shift;;
                -d | --der | --derive | --derived)
                        if [ -f "$2" ]
                        then
                                der="$2"
                        else
                                error "$2" is not a regular file.
                        fi
                        shift;
                        shift;;
                -f | --font)
                        font="$2"
                        shift;
                        shift;;
                -h | --help)    
                        usage;
                        exit $allan;;
                -m | --manual)  
                        manual="${2%%\.*}";
                        shift;
                        shift;;
                -n | --nonder | --nonderive | --nonderived)
                        if [ -f "$2" ]
                        then
                                nonder="$2"
                        else
                                error "$2" is not a regular file.
                        fi
                        shift;
                        shift;;
                -o | --orig | --original)
                        if [ -f "$2" ]
                        then
                                ovend="$2"
                        else
                                error "$2" is not a regular file.
                        fi
                        shift;
                        shift;;
                -t | --tool)
                        tool="$2"
                        shift;
                        shift;;
               -v | --vendor)       
                        vendor="$2";
                        shift;
                        shift;;
                --)     
                        shift;
                        break;;
                *)
                        error Unrecognised option "$1".
        esac
done

args="$@"



cd "$directory"
if [ $? != 0 ]
then
        error Could not switch to "$directory".
fi

if [ "$font" = "" ]
then 
        thisdir=$(gbasename $(pwd)) 
        font=${thisdir%%\-*}
        echo Setting font directory to "$font".
fi

if [ "$manual" = "" ]
then
        if [ -f "./${font}.tex" ]
        then
                manual="${font}"
                echo Setting manual to "$manual".
        elif [ -f "./${font}adf.tex" ]
        then
                manual="${font}adf"
                echo Setting manual to "$manual".
        else
                printf %b "Warning! No manual found.\n"
                allan=$((allan+1))
        fi
fi

if [ "$(ls manifest* 2> /dev/null)" = "" ]
then
        printf %b "Creating manifest.\n"
        touch manifest.txt
        if [ -f $cfrtop/manifest.top ]
        then
                cat $cfrtop/manifest.top >> manifest.txt
                createmanifest=1
        else
                printf %b "Cannot create manifest.txt. No manifest.top found.\n"
                rm manifest.txt
                allan=$((allan+1))
                createmanifest=0
        fi
else
        createmanifest=0
fi

if [ "$tool" = "" ]
then
        if [ "$(ls *-drv.tex 2> /dev/null)" != "" ] || [ "$(ls *-map.tex 2> /dev/null)" != "" ]
        then
                tool="fontinst"
                printf %b "Guessing you used fontinst for this one.\n"
        elif [ "$(ls *.lig 2> /dev/null)" != "" ] || [ "$(ls Makefile 2> /dev/null)" != "" ] || [ "$(ls com 2> /dev/null)" != "" ]
        then
                tool="afm2pl"
                printf %b "Guessing you used afm2pl for this one.\n"
        else
                printf %b "Cannot guess the tool used. Please specify.\n"
                allan=$((allan+1))
        fi
fi


if [ "$der" = "" ]
then
        if [ -e "./der" ]
        then
                der=./der
        elif [ -e "../cfr/der" ]
        then
                der=../cfr/der
        else
                printf %b "Using default list for derived files.\nPlease check ./der.\n"
                if [ "$tool" = "fontinst" ]
                then
                        ls *.enc *.tfm *.vf *.fd *.map >> ./der 2> /dev/null
                elif [ "$tool" = "afm2pl" ]
                then
                        ls *.tfm *.vf *.map >> ./der 2> /dev/null
                else
                        printf %b "Creation tool is either unrecognised or unguessable. If the former, please populate der manually - the file I create will certainly be radically incomplete. If the latter, please specify the tool.\n"
                fi
                if [ -f "$manual.pdf" ]
                then
                        echo "$manual.pdf" >> ./der
                fi
                der=./der
        fi
fi

if [ "$nonder" = "" ]
then
        if [ -e "./nonder" ]
        then
                nonder=./nonder
        elif [ -e "../cfr/nonder" ]
        then
                nonder=../cfr/nonder
        else
                printf %b "Using default list for non-derived files.\nPlease check ./nonder.\n"
                if [ "$tool" = "fontinst" ]
                then
                        ls *[^~]*.etx reglyph*.tex reset*.mtx build*.mtx *-drv.tex *-drv.map >> ./nonder 2> /dev/null
                elif [ "$tool" = "afm2pl" ]
                then
                        ls *[^~]*.enc *[^~]*.fd *[^~]*.lig Makefile com >> ./nonder 2> /dev/null
                else
                        printf %b "Creation tool is either unrecognised or unguessable. If the former, please populate nonder manually - the file I create will certainly be radically incomplete. If the latter, please specify the tool.\n"
                fi
                ls *[^~]*.nam *.pe manifest* README *.sty >> ./nonder 2> /dev/null
                if [ -f "$manual.tex" ]
                then
                        echo "$manual.tex" >> ./nonder
                fi
                nonder=./nonder
        fi
fi

if [ "$adf" = "" ] && [ "$ovend" = "" ]
then
        if [ -e "./adf" ]
        then
                adf=./adf
        elif [ -e "../cfr/adf" ]
        then
                adf=../cfr/adf
        elif [ -e "./ovend" ]
        then
                ovend=./ovend
        elif [ -e "../cfr/ovend" ]
        then
                ovend=../cfr/ovend
        elif [ "$vendor" = "arkandis" ]
        then
                printf %b "Using default list for ADF files.\nPlease check ./adf.\n"
                ls COPYING* NOTICE* *.afm *.pfb *.pfm *.otf *.sfd >> ./adf 2> /dev/null
                adf=./adf
        else
                printf %b "Using default list for original vendor's files.\nPlease check ./ovend.\n"
                ls COPYING* NOTICE*  [A-Z][A-Z\-]*[A-Z].txt *.afm *.pfb *.pfm *.otf *.ttf *.sfd >> ./ovend 2> /dev/null
                ovend=./ovend
        fi
fi

if [ $createmanifest == 1 ]
then
        grep manifest.txt $nonder > /dev/null
        if [ $? != 0 ]
        then
                printf %b "Adding manifest to list of nonderived files.\n"
                echo manifest.txt >> $nonder
        fi
        cat $nonder >> manifest.txt
        if [ -f $cfrtop/manifest.mid ]
        then
                cat $cfrtop/manifest.mid >> manifest.txt
        else
                printf %b "\nDerived files:\n" >> manifest.txt
        fi
        cat $der >> manifest.txt
fi

if [ $# == 0 ]
then
        files=$(cat $der $nonder $adf $ovend)
        if [ "$files" = "" ]
        then
                error Could not determine any files to install.
        fi
else
        files=$args
fi

trymkdir $docdir $texdir $afmdir $mapdir $tfmdir ../cfr
if [ "$(echo "$files" | grep '\.pfb' 2> /dev/null)" != "" ] 
then
        trymkdir $type1dir 
fi
if [ "$(echo "$files" | grep '\.ttf' 2> /dev/null)" != "" ] 
then
        trymkdir $truetypedir 
fi
for i in "\.etx" "\-drv\.tex" "\-map\.tex" "reglyph.*\.tex" "reset.*\.mtx" "build*\.mtx" "Makefile" "^com$" "^com " " com$" " com " "\.lig" "\.nam" "\.pe" "\.sfd" "\.otf"
do
        if [ "$(echo "$files" | grep "$i" 2> /dev/null)" != "" ]
        then
                trymkdir $sourcedir 
                break
        fi
done
if [ "$(echo "$files" | grep '\.enc' 2> /dev/null)" != "" ] 
then
        existencs=1
        trymkdir $encdir
fi
if [ "$(echo "$files" | grep '\.vf' 2> /dev/null)" != "" ] 
then
        trymkdir $vfdir
fi

ctaninst $@ $files

if [ -e "$docdir/README" ]
then
        ln -s "$docdir/"README ./
else
        printf %b "Warning! No README found.\n"
        allan=$((allan+1))
fi

if [ $existencs==1 ]
then
        printf %b "Did you uniquify the .enc files?\nDid you add the .enc files to finstmsc.rc?\n"
fi

exit $allan

# vim: set nospell: 

Generated by dwww version 1.15 on Fri Jun 21 22:19:52 CEST 2024.