[subversion-commit] SVN tex-common commit + diffs: r1709 -
tex-common/trunk/scripts
Frank Küster
frank at costa.debian.org
Sun Oct 8 18:35:49 UTC 2006
Author: frank
Date: 2006-10-08 18:35:48 +0000 (Sun, 08 Oct 2006)
New Revision: 1709
Added:
tex-common/trunk/scripts/debianize-updmap
Log:
copying debianize-updmap so that it can be provided by tex-common in the future
Copied: tex-common/trunk/scripts/debianize-updmap (from rev 1708, tetex-bin/trunk/debian/debianize-updmap)
===================================================================
--- tex-common/trunk/scripts/debianize-updmap (rev 0)
+++ tex-common/trunk/scripts/debianize-updmap 2006-10-08 18:35:48 UTC (rev 1709)
@@ -0,0 +1,414 @@
+# This file, debianize-updmap, is meant to be sourced by updmap and
+# enhance the --enable and --disable options with the functionality
+# needed to deal with Debian's generated updmap.cfg.
+# $Id$
+
+# This is the planned scheme how it works
+#
+# A for disableMap:
+# 1. create a list of files to act on (either in sysconfdir only, or in user dirs too)
+# 2. grep for not-commented lines in these files that contain $map
+# CHANGE 3. for each of these files, run configReplace appropriately
+# 3. if in syswide-mode, for each of these files, run configReplace appropriately;
+# if not in syswide mode, for each of these files,
+# test whether it is in the syswide dir
+# 3.a if not, run configReplace appropriately
+# 3b. if yes, create copy in user dir and run configReplace appropriately
+#
+# B for enableMap:
+# 1. create a list of files to act on (either in sysconfdir only, or in user dirs too)
+# 2. grep for commented lines in these files that contain $map
+# 2.1. if any are found, check whether it is only one
+# 2.1.1 if there is only one, run configReplace on that file appropriately
+# 2.1.2 if there is more than one, the precedence is
+# 20tetex-extra.cfg > XX*local*.cfg > 10tetex-base.cfg > any
+# (extra has maximum priority because
+# 2.1.2.1 if it's clear on which file to act, run configReplace on that file
+# appropriately
+# 2.1.2.2 if unclear (i.e. only "any"), exit with an error
+# 2.2 if none are found, act on 10local.cfg (could be made configurable)
+# - if 10local.cfg does not exist, create it (with an explanatory comment)
+# - run configReplace on it appropriately
+#
+# C for syncwithtrees (and even more?)
+# ?
+#
+# After that, update-updmap must be run (in the appropriate mode!), and then updmap
+# must reexecute itself. Since disableMap is called by enableMap, we need a wrapper
+# for it. An alternative would be to do this just before the creation of the output
+# files, but I think it's easier this way, and currently updmap only enables one Map
+# file per run.
+
+###############################################################################
+# DebianSyswideMode ()
+# determine whether we are running in syswide mode (or user-specific)
+###############################################################################
+DebianSyswideMode(){
+ test "$(id -u)" -eq 0 && return 0 || return 1
+}
+
+###############################################################################
+# FindDebianUserdir ()
+# find the directory containing user-specific updmap snippets
+###############################################################################
+FindDebianUserdir(){
+ defaultuserdir=$HOME/.texmf-config/updmap.d
+
+ # this should read a config item in updmap.cfg, but for now we just
+ # check whether the default exists.
+ if [ -d $defaultuserdir ]; then
+ echo $defaultuserdir
+ fi
+}
+
+
+###############################################################################
+# createDebianConffilelist
+# create a list of configuration files containing updmap snippets;
+# we are going to act on these
+###############################################################################
+createDebianConffilelist(){
+ local DebianConffilelist=""
+ syswideFiles=`find /etc/texmf/updmap.d -maxdepth 1 -type f -name '*.cfg'`
+ if ! DebianSyswideMode; then
+ debianuserdir=`FindDebianUserdir`
+ if [ -n "$debianuserdir" ]; then
+ userFiles=`find "$debianuserdir" -maxdepth 1 -type f -name '*.cfg'`
+ fi
+ fi
+ if [ -n "$userFiles" ]; then
+ userBasenames=`for file in $userFiles; do basename $file; done`
+ for file in $syswideFiles; do
+ local copyInUserdir=false
+
+ done
+ else
+ fi
+}
+
+###############################################################################
+# runUpdate
+# run update-updmap
+###############################################################################
+runUpdate(){
+ updOptions=""
+ if [ -n "$cfgparam" ]; then
+ # --conffile option was given on the command line
+ updOptions="--output-file $orig"
+ fi
+ # here we could check for an alternative user dir, or output file
+ # but as long as FindDebianUserdir only reports the default location,
+ # it doesn't make sense
+
+ verboseMsg "Running update-updmap to merge the changed files"
+ update-updmap --quiet $updOptions
+}
+###############################################################################
+# cleanupNoExit()
+# clean up the temp area, but don't exit
+###############################################################################
+cleanupNoExit()
+{
+ rc=$?
+ $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \
+ && { cd / && rm -rf "$tmpdir"; }
+}
+
+###############################################################################
+# reExecSelf
+# execute ourselves again - the confile has changed after an enable or disable
+# command has been processed
+###############################################################################
+reExecSelf(){
+ # remove the temporary directory
+ cleanupNoExit
+
+ # if we need not remake map files, we are done here
+ if [ "$mkmapEnabled" = "false" ]; then exit 0; fi
+
+ # pass ourselves the right options.
+ repeatOptions=""
+ for option in dvipsoutputdir pdftexoutputdir dvipdfmoutputdir; do
+ # strange that I can't do the same with eval test -n
+ if eval [ ! -z "\$$option" ]; then
+ repeatOptions="$repeatOptions `eval echo --$option \\$$option`"
+ fi
+ done
+ if [ -n "$cfgparam" ]; then
+ # --conffile option was given on the command line
+ repeatOptions="$repeatOptions --cnffile=$orig"
+ fi
+ if [ "texhashEnabled" = "false" ]; then
+ repeatOptions="$repeatOptions --nohash"
+ fi
+ if [ "$verbose" = "false" ]; then
+ repeatOptions="$repeatOptions --quiet"
+ fi
+
+ verboseMsg "Now running $progname again to generate output files"
+ echo $progname $repeatOptions
+ exec $progname $repeatOptions
+}
+
+###############################################################################
+# grepType (map,file)
+# grep in file for entry map, and return the mapType
+###############################################################################
+grepType()
+{
+ map=$1
+ file="$2"
+ egrep "^(MixedMap|Map)[ ]*$map( | |$)" "$file" | awk '{print $1}' | sort | uniq
+}
+
+
+###############################################################################
+# findUserfiles (filelist)
+# pick user-specific files out of a filelist of configuration files
+###############################################################################
+findUserfiles(){
+ userfiles=""
+ while [ $# -gt 0 ]; do
+ file="$1"
+ if [ "$file" = "${file#/etc/texmf/updmap.d}" ]; then
+ # doesn't start with /etc/texmf/updmap.d: must be user-specific
+ userfiles="$userfiles $file"
+ fi
+ shift;
+ done
+ echo $userfiles
+}
+
+###############################################################################
+# findRightMatchfile (mapname,filelist)
+# find the right file from filelist to enable mapname
+###############################################################################
+findRightMatchfile(){
+ mapName=$1; shift
+ matchfiles="$@"
+ if [ $# -eq 1 ]; then
+ # it is only one, enable map in it
+ echo $matchfiles
+ verboseMsg "Enabling map file in $matchfiles"
+ return 0
+ else
+ # there are more than one;
+ if ! DebianSyswideMode; then
+ # can only change files in the user's dir
+ usermatchfiles=`findUserfiles $matchfiles`
+ if [ `(set $usermatchfiles; echo $#)` -eq 1 ]; then
+ # exactly one of them is a user-specific file
+ echo $usermatchfiles
+ verboseMsg "Enabling map file in user-specific file $matchfiles"
+ return 0
+ else
+ # two files in the user directory (as bad as two in the site-wide
+ # dir), or no user-specific files. If there are two user-specific
+ # files, report about them:
+ test -n "$usermatchfiles" && matchfiles="$usermatchfiles" || true
+ fi
+ fi
+ # for now, we exit with an error. Any sensible choice would have to
+ # check whether teTeX or texlive is installed, and I want to save me
+ # that hazzle.
+ cat >&2 <<EOF
+Entries for map file $mapName found in several files:
+$matchfiles
+
+Since updmap.cfg is a generated file in Debian, I don't know how to proceed.
+Please refer to the manpage of update-updmap(1)
+
+EOF
+ fi
+}
+
+###############################################################################
+# pickLocalFile (mapname,directory)
+# pick the right local file in directory
+###############################################################################
+pickLocalFile(){
+ mapName=$1
+ debDirname=$2
+ debDirname=${debDirname%/}
+ # Is there a file with "local" in the name?
+ localfile=""
+ localfile="`ls $debDirname/*local*cfg 2>/dev/null`"
+ if [ -n "$localfile" ]; then
+ # there is at least one
+ if [ `(set $localfile; echo $#)` -eq 1 ]; then
+ # exactly one
+ verboseMsg "Using local configuration file $localfile"
+ echo $localfile
+ return 0
+ else
+ # more than one local file? Brrrr.
+ cat >&2 <<EOF
+While trying to enable $mapName locally, I found several user-specific map files:
+$localfile
+
+I don't know how to proceed here. Please refer to the manpage of update-upmdap(1)
+
+EOF
+ fi
+ else
+ # no user config file yet
+ echo $debDirname/10local.cfg
+ return 0
+ fi
+}
+
+###############################################################################
+# findRightLocalfile (mapname)
+# find the right file to enable mapname, site-wide or user-specific
+# mapname is only needed for the error message
+###############################################################################
+findRightLocalfile(){
+ mapName=$1
+ # Do we know about a user-specific directory?
+ if DebianSyswideMode; then
+ DebCnfFile=`pickLocalFile $mapName /etc/texmf/updmap.d`
+ else
+ debianuserdir=`FindDebianUserdir`
+ /usr/share/texmf/web2c/mktexdir $debianuserdir
+ test -w $debianuserdir || (
+ echo "Target directory $debianuserdir not writable."
+ echo "Exiting"
+ exit 0
+ )
+ DebCnfFile=`pickLocalFile $mapName $debianuserdir`
+ fi
+ # configReplace will try to grep in the file: touch it to prevent a error message
+ touch $DebCnfFile
+ verboseMsg "Using local configuration file $DebCnfFile"
+ echo $DebCnfFile
+}
+
+###############################################################################
+# disableMapInner (map)
+# disables map in config file (any type) (real command)
+###############################################################################
+disableMapInner()
+{
+ map=$1
+ local mapType
+
+ if [ -z "$DebianConffilelist" ]; then
+ DebianConffilelist=`createDebianConffilelist`
+ fi
+
+ # act on all files that contain an entry
+ for debCnfFile in $DebianConffilelist; do
+ if mapType=`grepType $map "$debCnfFile"`; then
+ # although it's a bug, there might be two types enabled - we disable both
+ for type in $mapType; do
+ configReplace "$debCnfFile" "^$type[[:space:]]*$1" "#! $type $1"
+ done
+ fi
+ done
+}
+
+###############################################################################
+# disableMap (map)
+# disables map in config file (any type) (Debian wrapper)
+###############################################################################
+disableMap()
+{
+ disableMapInner $1
+ runUpdate
+ reExecSelf
+}
+###############################################################################
+# enableMap (type, map)
+# enables an entry in the config file for map with a given type.
+###############################################################################
+enableMap()
+{
+ mapType=$1
+ mapName=$2
+ case $1 in
+ Map|MixedMap)
+ ;;
+ *)
+ abort "invalid mapType $mapType"
+ ;;
+ esac
+
+ if [ -z "$DebianConffilelist" ]; then
+ DebianConffilelist=`createDebianConffilelist`
+ fi
+
+ # a map can only have one type, so we carefully disable everything
+ # about map here:
+ disableMapInner "$mapName"
+
+ # now enable with the right type.
+ # But we have to determine where to enable.
+ # is there already a file that contains a (commented) entry?
+ matchfiles=""
+ for file in $DebianConffilelist; do
+ if egrep "^#![[:blank:]]*(MixedMap|Map)[[:blank:]]*$map([[:blank:]]|$)" "$file" >/dev/null ; then
+ matchfiles="$matchfiles $file"
+ fi
+ done
+ if [ -n "$matchfiles" ]; then
+ # there is already (at least) one file that has a commented entry for our map
+ debCnfFile=`findRightMatchfile $mapName $matchfiles`
+ test -w "$debCnfFile" || debCnfFile=""
+ fi
+ if [ -z "$debCnfFile" ]; then
+ # still none, there is no (commented) entry in any writable file yet.
+ debCnfFile=`findRightLocalfile $mapName`
+ test -n "$debCnfFile" || abort "Cannot proceed. Exiting"
+ verboseMsg "Creating new entry for map file $mapName in $debCnfFile"
+ fi
+
+ configReplace "$debCnfFile" "^#![ ]*$mapType[ ]*$mapName" "$mapType $mapName"
+ runUpdate
+ reExecSelf
+}
+
+###############################################################################
+# setOption (option, value)
+# sets option to value in the config file (replacing the existing setting
+# or by adding a new line to the config file).
+###############################################################################
+setOption()
+{
+ opt=$1
+ val=$2
+ case "$opt" in
+ LW35)
+ case "$val" in
+ URWkb|URW|ADOBE|ADOBEkb)
+ ;;
+ *)
+ abort "invalid value $val for option $opt"
+ ;;
+ esac
+ ;;
+ dvipsPreferOutline|dvipsDownloadBase35|pdftexDownloadBase14|dvipdfmDownloadBase14)
+ case "$val" in
+ true|false)
+ ;;
+ *)
+ abort "invalid value $val for option $opt"
+ esac
+ ;;
+ *)
+ abort "unsupported option $opt"
+ ;;
+ esac
+
+ DebNullCnfFile=""
+ DebianSyswideMode || debianuserdir=`FindDebianUserdir`
+ if (! DebianSyswideMode) && [ -f "$debianuserdir/00updmap.cfg" ]; then
+ DebNullCnfFile=$debianuserdir/00updmap.cfg
+ else
+ DebNullCnfFile=/etc/texmf/updmap.d/00updmap.cfg
+ fi
+
+ configReplace "$DebNullCnfFile" "^$opt[ ]" "$opt $val"
+ runUpdate
+ reExecSelf
+}
+
More information about the Pkg-tetex-commits
mailing list